Окей, спасибо, буду пробовать.
Спасибо за советы, всё понял, кроме вот этого:
Как быть если мне надо выполнить ajax запрос, который должен возвращать информацию о товарах в определенном виде, как в этом случае? Вызывать чанк из сниппета?
Код уже переписал с использованием xpdo. Подскажите пожалуйста как лучше писать, или где об этом почитать. Ну или какие то ваши советы. Я понимаю, что тут каша, но что по вашему можно улучшить?
Добрый вечер.
Есть задание, написание на сайте ajax модуля, который бы при нажатии кнопки подгружал товары нужной категории. С modx я работаю около года, и хотя на php писал мало, решил что осилю. Начал писать, и вроде бы всё шло хорошо, но оказалось что в чанке отображения товара есть вызов другого сниппета, а так как я начал писать отдельный модуль php с запросами к базе данных я не знал как его можно подключить. Погуглив я нашел возможность сделать мой модуль статичным сниппетом и добавив в него инициализацию объекта класса modX вызвать с помощью функции runSnippet нужный сниппет. Но он так и не заработал, выдает ошибку:
Fatal error: Call to a member function get() on a non-object in /home/a/altovomz/altovomz.bget.ru/public_html/core/components/star_rating/model/star_rating/starrating.class.php on line 64
в строке 64 такой вот код:
$listItems .= '<li class="star"><a href="'. $this->xpdo->makeUrl($this->xpdo->resource->get('id'), '', $urlParams) . '" title="' . $i . '/' . $this->config['maxStars'] . '" style="width:'.$starWidth .'%;z-index:'.$starIndex . '" rel="nofollow">'. $i . '</a></li>';
Опытным путем я выяснил, что он не может получить id текущего ресурса.
Вот код моего модуля (я уже выяснил почитав форум что запросы к базе легче с помощью xpdo делать, но хочу понять в чем здесь ошибка и дописать его пока в таком виде, если конечно это возможно):
<?php
ini_set('display_errors','On');
error_reporting(E_ALL|E_STRICT);
$link = mysql_connect('localhost','altovomz_guerryl','yA.f3fwKCl-i');
mysql_select_db('altovomz_guerryl');
mysql_set_charset('utf8');
$parent = $_GET["Parent"];
$SQLtxt = "SELECT * FROM modx_site_content WHERE parent = ".$parent."";
$result = mysql_query($SQLtxt, $link);
whSQLrequests($result, $link, 0);
function whSQLrequests($resultsSQL, $linkSQL, $i) {
while ($goodRes = mysql_fetch_array($resultsSQL)) {
if ($goodRes['template'] != 1) {
$SQLtxt = "SELECT * FROM modx_site_content WHERE parent = ".$goodRes['id']."";
$result = mysql_query($SQLtxt, $linkSQL);
$i += 1;
whSQLrequests($result, $linkSQL, $i);
} else {
if ($i < 10) {
returnTheHTMLgood($goodRes, $linkSQL);
}
function returnTheHTMLgood($goodRes, $linkSQL){
require_once '/home/a/altovomz/altovomz.bget.ru/public_html/manager/config.core.php';
require_once MODX_CORE_PATH.'config/'.MODX_CONFIG_KEY.'.inc.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$holder = $modx->getObject('modResource',array('id' => 1));
$returnStr = "<!-- Start Plinka -->";
$returnStr .= "<div class=\"plitka shk-item\">";
$returnStr .= "<div class=\"image\">";
$SQLtxt = "SELECT * FROM modx_site_tmplvar_contentvalues WHERE (tmplvarid = 3) and (contentid = ".$goodRes['id'].")";
$num_rows = mysql_num_rows($result);
if ($num_rows == 0) {
$SQLtxt = "SELECT * FROM modx_site_tmplvar_contentvalues WHERE (tmplvarid = 3) and (contentid = ".$goodRes['parent'].")";
$goodResTmlVar = mysql_fetch_array($result);
$objImg=json_decode(substr($goodResTmlVar['value'], 1, -1));
$returnStr .= "<img style=\"max-width: 180px; max-height: 180px;\" src=\"".$objImg->image."\" alt=\"".$goodRes['pagetitle']."\" class=\"plitka\" />";
$returnStr .= "</div>";
$SQLtxt = "SELECT * FROM modx_site_tmplvar_contentvalues WHERE (tmplvarid = 2) and (contentid = ".$goodRes['parent'].")";
$SQLtxt = "SELECT longtitle FROM modx_site_content WHERE id = ".$goodRes['parent']."";
$longtitle = mysql_fetch_array($result);
$returnStr .= "<div class=\"name\">".$goodResTmlVar['value']." ".$longtitle['longtitle']."</div>";
$returnStr .= "<div class=\"name\"><b>".$goodRes['pagetitle']."</b></div>";
$params['imgWidth'] = '14';
$params['starId'] = $goodRes['id'];
$params['starTpl'] = 'StarRatingTpl';
$params['theme'] = 'mystar';
$returnStr .= $modx->runSnippet('starRating', $params);
$returnStr .= "<div class=\"prices\">[[+tv.old-price:isnot=``:then=`<span>[[+tv.old-price:num_format]]</span>`]][[+id:InRub:num_format]] [[++shk3.currency]]</div>";
$returnStr .= "<div class=\"button\">";
$returnStr .= "<form action=\"\\\" method=\"post\">";
$returnStr .= "<input type=\"hidden\" name=\"shk-id\" value=\"".$goodRes['id']."\" />";
$returnStr .= "<input type=\"hidden\" name=\"shk-name\" value=\"".$goodRes['pagetitle']."\" />";
$returnStr .= "<input type=\"hidden\" name=\"shk-count\" value=\"1\" />";
$returnStr .= "<button[[+tv.available:is=`0`:then=` disabled=\"disabled\"`]]>Купить</button>";
$returnStr .= "</form>";
$returnStr .= "[[+id:getTvValue=`status`:isnot=`0`:then=`<div class=\"[[+id:getTvValue=`status`]]\"></div>`:else=`[[+parent:getTvValue=`status`:isnot=`0`:then=`<div class=\"[[+parent:getTvValue=`status`]]\"></div>`]]`]]";
$returnStr .= "<div class=\"submenu\"> ";
$returnStr .= "<a class=\"like\" title=\"Избранное\"></a>";
$returnStr .= "<a class=\"comp\" title=\"Сравнить\" name=\"compare\" id=\"compare[]\" onclick=\"compare('".$goodRes['id']."')\"></a>";
$returnStr .= "<a class=\"more\" title=\"Подробнее\" href=\"".$goodRes['uri']."\"></a> </div>";
$returnStr .= "<!-- End Plinka -->";
echo $returnStr;
модуль работает не целиком, ниже вызова runSnippet я не менял текст который выводится (брал просто из чанка).
В общем вопрос, что можно сделать что бы это заработало?