Доброго дня Николай. Спасибо за помощь.
Да в данном случае array(«id» => $modx->getPlaceholder('id') id еще не подгружен.
Такая конструкция [[!Gallery?album=[[!getResourceField?id=
[[+id]]]].........
........]] не работает через аякс. Попробую объяснить что вообще хочу. У меня есть список ресурсов, которые нужно подгружать через аякс, после ввода в input фразы, часть фразы содержащей pagetitle ресурса. В общем с фильтрацией ресурсов по pagetitle. Есть сниппет ajaxResources <?php
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
$action = filter_input(INPUT_POST,'action');
if (empty($action)) {return;}
$res = ''; switch ($action) { case 'getResources': $params = array(); $params['tpl'] = '@INLINE <div id="[[+id]]" class="pic">[[+idx]]</div> <div class="item"> <span class="title">Гостиница [[+pagetitle]]</span> <div class="foto">'. $modx->runSnippet("Gallery", array("album" => $modx->runSnippet("getResourceField", array("id" => [[+id]], "field" =>"GalleryAlbum", "isTV" =>"1")) , "thumbTpl" => "hotelTplThumbtop","limit" => "1")).' </div> <div class="inf"> <span class="adress">Адрес: [[+tv.adress]]</span><div class="clear"></div> <span class="metro">[[+tv.metro_vo]]</span><div class="clear"></div> <span class="metro">[[+tv.metro_p]]</span><div class="clear"></div> <a class="grey" href="/[[+alias]]/">О гостинице</a> <a class="blue" href="/">Номера</a> <a class="blue" href="/">Цены</a><div class="clear"></div> <p class="trans">[[+introtext]] </p> </div> <div class="buttons"> <span class="price">От [[+tv.min_price]] руб/сутки</span><div class="clear"></div> <a class="onmap"><img src="images/onmap.png"/> Показать на карте</a> <a class="buy" href="/"><img src="images/buy.png"/> Забронировать</a> <a class="show"><img src="images/show.png"/> Раскрыть</a><div class="clear"></div> </div>
</div> <div class="clear"></div>'; $ltr = filter_input(INPUT_POST,'ltr'); $params['where'] = '{"pagetitle:LIKE":"%'.$ltr.'%"}'; $params['includeTVs'] = '1'; $params['processTVs'] = '1'; $params['parents'] = filter_input(INPUT_POST, 'parents', FILTER_SANITIZE_NUMBER_INT); $res = $modx->runSnippet('getResources', $params); break; } if (!empty($res)) { die($res); } Есть input <input id="findit" class="input" onfocus="if(this.value=='Поиск гостиницы по названию') this.value='';" onblur="if(this.value=='') this.value='Поиск гостиницы по названию';" value="Поиск гостиницы по названию" data-action="getResources" data-tpl="hotelTpl" data-parents="100" data-ltr=""/> <div id="input"></div> аякс обработчик $('div#findit_eaner input').livequery('change',function(){ $x = $('div#findit_eaner input').val(); $('div#findit_eaner input').replaceWith('<input class="input" data-action="getResources" data-tpl="hotelTpl" data-parents="100" data-ltr="'+$x+'" />'); // Ajax post-запрос к странице, выдающей ресурсы (в ней сниппет ajaxResources)$.ajax({ async: false, url:"/find.php", type: "POST", data: $('div#findit_eaner input').data(), success: function(data) {
$('#input').append(data); } })
})
И какое-то у вас хитрое смешение инлайн-чанка и чистого пхп (вызов $modx->runSnippet). Чтобы вы понимали, в array(«id» => '[[+id]]' будет передано не значение плейсхолдера [[+id]], а просто текст [[+id]], который кроме как текстом и не станет ничем. Тогда уж array(«id» => $modx->getPlaceholder('id'), вот только я очень сомневаюсь, что на тот момент +id уже будет зафиксирован. Если у вас там для каждого документа галерея в отдельности, то тогда уже и передавайте в шаблон [[!Gallery?album=[[!getResourceField?id=
[[+id]]]].........
........]]
А откуда у вас должен взяться [[+id]] и чей это айдишник?
Нужна помощь, толи взгляд притупился. Не могу понять где ошибаюсь…
Пишу аякс компонент на основе GetResources и в параметрах шаблона хочу получить id подгружаемых ресурсов, для вывода галереи по простому мне нужен Id галереи для вывода фото. Проблема не могу корректно получить в данной конструкции [[+id]] $params['tpl'] = '@INLINE <div id="[[+id]]" class="pic">[[+idx]]</div>
<div class="item">
<span class="title">Гостиница [[+pagetitle]]</span>
<div class="foto">'
. $modx->runSnippet("Gallery", array("album" => $modx->runSnippet
("getResourceField", array("id" => '[[+id]]', "field" =>"GalleryAlbum", "isTV" =>"1")) ,
"thumbTpl" => "hotelTplThumbtop","limit" => "1")).'
</div>
<div class="inf">
<span class="adress">Адрес: [[+tv.adress]]</span><div class="clear"></div>
Да, должны быть. Не просто же так у нас процессоры getdata.class.php, getlist.class.php и т.п.
спасибо, то что надо… значить все файлы процессоров должны быть *.class.php
Потому что название файла должно быть test.class.php, а не test.php Просто test.php — это устаревший флэт-процессор, он возвращает то, что у него в return. А у вас return 'myTestProcessor';
Gist ошибки нет. в логах все чисто. я получаю статус 200 и в ответ название процессора, а не worked п.с. чистый копипаст названия такие потому что просто разбираюсь, если вы об этом
Cпрошу наверное я вот что ) Скажу сразу тема понятное дело облизана в интернете со всех сторон, но нет ничего лучше примера кода поэтому я нашел на Гите modHybridAuth и начал изучать. и мне интересно вот что. есть connector.php который запускает процессор 'profile/auth'. Этот процессор расширяет процессор modProcessor. У меня вроде все и получилось но вот ответ приходит имя процессора, я подозреваю что проблема доступом к modProcessor. Что не так? Код один в один за исключением названия пакета) class myTestProcessor extends modProcessor { public function process(){ return 'done'; } } return 'myTestProcessor';