[miniShop2] Сниппет msVendor

Ковыряясь с AJAX загрузкой данных о продукте написал сниппет для получения данных о производителе по id.

Как работает:
Указываем 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;
}
aj
aj
11 ноября 2014, 15:50
modx.pro
4
3 770
+4

Комментарии: 5

Іван Клімчук
12 ноября 2014, 13:12
0
Я думаю лучше всего этот сниппет добавить в сам miniShop2. Нужно лишь сделать pull-request и дождаться аппрува от Василия.
    Володя
    12 ноября 2014, 14:13
    +1
    ну тогда надо по феншую сниппет переписать…
    зы. а вообще если честно не понял для чего этот сниппет…
    pps. Василий серия рассказов «Большой рассказ про pdoTools» — это офигенно!
    попробовал писать сниппеты — это просто кайф!
    Спасибо тебе огромное!!!
      aj
      aj
      12 ноября 2014, 18:19
      0
      По умолчанию данные о продукте получаются через чанк msProducts, который собирает все со страницы продукта через цепочку сниппетов, чанков, tv и плейсхолдеров. Если же нужно получить данные продукта в произвольном месте, то используется сниппет msProducts, в котором от производителя можно получить только id.

      Мне же нужна была расширенная информация. Вот и потратил немного времени на написание получения полной картины через просто запрос по id, так сказать смасштабировал и вынес метод получения, чтобы не городить огород в сниппете получения через AJAX.

      Осмысленно не стал вносить изменения в msProducts, чтобы не затереть при обновлении.
    Aliaksandr Katlou
    14 мая 2016, 20:13
    0
    Подскажите почему этот сниппет может в последнем minishop не работать? Максимум выводит 'array' и все.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5