[miniShop2] Сниппет msVendor
Ковыряясь с AJAX загрузкой данных о продукте написал сниппет для получения данных о производителе по id.
Как работает:
Указываем id и получаем данные производителя в виде массива, либо строки обработанного чанка.
Параметры:
Запаковал все в транспортный пакет, однако из-за проблем на сервере (перенастраиваю VPS) и пока еще кривыми правами не могу проверить функциональность загрузки пакета, да и тут не позволяют грузануть zip к посту. Так что добавляю код сниппета сюда:
GIT — github.com/2ball/modx/tree/master/msVendor
P.S. — если посчитаете полезным, добавьте в simpledream, вдруг кому пригодится.
Как работает:
Указываем id и получаем данные производителя в виде массива, либо строки обработанного чанка.
Параметры:
- vendor — id производителя (по-умолчанию 0)
- tpl — шаблон вывода, плейсхолдеры соответствуют полям в таблице (по-умолчанию tpl.msVendor)
- returnData — если указать 1, то сниппет вернет массив данных (по-умолчанию 0)
- returnOption — если указать имя конкретного поля, которое нужно, то сниппет вернет только его значение (по-умолчанию '')
- includeContent — если указано 1, сниппет проверит значение указанного ресурса с описанием производителя и при наличии такового добавить в выводимые значения поля pagetitle, introtext и content указанного ресурса (по-умолчанию 0)
Запаковал все в транспортный пакет, однако из-за проблем на сервере (перенастраиваю VPS) и пока еще кривыми правами не могу проверить функциональность загрузки пакета, да и тут не позволяют грузануть zip к посту. Так что добавляю код сниппета сюда:
GIT — github.com/2ball/modx/tree/master/msVendor
P.S. — если посчитаете полезным, добавьте в simpledream, вдруг кому пригодится.
<?php
/**
* Author: Anton Jukov
*/
if (!empty($scriptProperties['vendor'])) {
$vendor = $modx->getObject('msVendor', $scriptProperties['vendor']);
//Check vendor exist
if (is_object($vendor)) {
//Get fields data
$vendor = $vendor->_fields;
//Get content
if ($scriptProperties['includeContent'] == 1) {
if (!empty($vendor['resource'])) {
$resource = $modx->getObject('modResource', $vendor['resource']);
if (is_object($resource)) {
$vendor['pagetitle'] = $resource->get('pagetitle');
$vendor['introtext'] = $resource->get('introtext');
$vendor['content'] = $resource->get('content');
}
}
}
//How to return?
if ($scriptProperties['returnData'] == 1) {
if (!empty($scriptProperties['returnOption'])) {
return $vendor[$scriptProperties['returnOption']];
}
else {
return $vendor;
}
}
else {
$output = $modx->getChunk($scriptProperties['tpl'], $vendor);
return $output;
}
}
else {
return false;
}
}
else {
return false;
}
Комментарии: 5
Я думаю лучше всего этот сниппет добавить в сам miniShop2. Нужно лишь сделать pull-request и дождаться аппрува от Василия.
ну тогда надо по феншую сниппет переписать…
зы. а вообще если честно не понял для чего этот сниппет…
pps. Василий серия рассказов «Большой рассказ про pdoTools» — это офигенно!
попробовал писать сниппеты — это просто кайф!
Спасибо тебе огромное!!!
зы. а вообще если честно не понял для чего этот сниппет…
pps. Василий серия рассказов «Большой рассказ про pdoTools» — это офигенно!
попробовал писать сниппеты — это просто кайф!
Спасибо тебе огромное!!!
По умолчанию данные о продукте получаются через чанк msProducts, который собирает все со страницы продукта через цепочку сниппетов, чанков, tv и плейсхолдеров. Если же нужно получить данные продукта в произвольном месте, то используется сниппет msProducts, в котором от производителя можно получить только id.
Мне же нужна была расширенная информация. Вот и потратил немного времени на написание получения полной картины через просто запрос по id, так сказать смасштабировал и вынес метод получения, чтобы не городить огород в сниппете получения через AJAX.
Осмысленно не стал вносить изменения в msProducts, чтобы не затереть при обновлении.
Мне же нужна была расширенная информация. Вот и потратил немного времени на написание получения полной картины через просто запрос по id, так сказать смасштабировал и вынес метод получения, чтобы не городить огород в сниппете получения через AJAX.
Осмысленно не стал вносить изменения в msProducts, чтобы не затереть при обновлении.
Подскажите почему этот сниппет может в последнем minishop не работать? Максимум выводит 'array' и все.
Пофик, по другому сделал.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.