IvanRD

Рейтинг
0
Регистрация
27.03.2015

Окей, спасибо, буду пробовать.

Спасибо за советы, всё понял, кроме вот этого:

tomasoyer:
мешать php и html не правильно

Как быть если мне надо выполнить ajax запрос, который должен возвращать информацию о товарах в определенном виде, как в этом случае? Вызывать чанк из сниппета?

tomasoyer:
Ваш код дикая каша. Так не пишут. А если пишите то не просите кого то в нем разбираться.



Если ваш код работает на странице то id получается через api. Если ваш код дергается через ajax то откуда ему знать какой id ? Передавайте его в запросе.

Код уже переписал с использованием 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'].")";

$result = mysql_query($SQLtxt, $linkSQL);

$num_rows = mysql_num_rows($result);

if ($num_rows == 0) {

$SQLtxt = "SELECT * FROM modx_site_tmplvar_contentvalues WHERE (tmplvarid = 3) and (contentid = ".$goodRes['parent'].")";

$result = mysql_query($SQLtxt, $linkSQL);

$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'].")";

$result = mysql_query($SQLtxt, $linkSQL);

$goodResTmlVar = mysql_fetch_array($result);

$SQLtxt = "SELECT longtitle FROM modx_site_content WHERE id = ".$goodRes['parent']."";

$result = mysql_query($SQLtxt, $linkSQL);

$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 .= "</div>";

$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 .= "</div>";

$returnStr .= "<!-- End Plinka -->";

echo $returnStr;

}

модуль работает не целиком, ниже вызова runSnippet я не менял текст который выводится (брал просто из чанка).

В общем вопрос, что можно сделать что бы это заработало?