Виталий Греков

Виталий Греков

С нами с 29 мая 2013; Место в рейтинге пользователей: #427
Василий Наумкин
13 апреля 2015, 19:34
1
+1
Замени в конце
return $contents . $input;
на
$modx->setPlaceholder('page.contents', $contents);
$modx->setPlaceholder('page.text', $input);

И используй новые плейсхолдеры где хочешь:
[[!+page.contents]] и [[!+page.text]]
Василий Наумкин
12 апреля 2015, 06:19
1
+2
Женя, давай ты сам поразбираешься, как следует, а потом уже будешь задавать вопросы?

iris-noir.de — вот весь сайт на ms2Gallery.
Василий Наумкин
11 апреля 2015, 05:14
2
+3
Это и сейчас можно, нужно просто вызывать сниппет TicketsComments со своим произвольным &thread.

По умолчанию он равен, грубо говоря, "resource-[[*id]]", поэтому и получется одна ветка для ресурса.

Таким образом можно комментировать и картинки галереи, и профили пользователей и что угодно.
Василий Наумкин
03 апреля 2015, 04:28
2
0
Видимо, речь об этом сниппете.

Тогда нужно его совсем чуть-чуть переделать:
<?php
// Получаем готовый текст
$text = trim($input);
if (empty($text)) {
	return;
}

// Стандартные чанки, можно переопределить
if (empty($tpl)) {$tpl = '@INLINE <li>[[+value]]</li>';}
if (empty($tplOuter)) {$tplOuter = '@INLINE <ul>[[+rows]]</ul>';}

// Подключаем pdoTools для работы с инлайновыми чанками
$pdo = $modx->getService('pdoTools');

// Разбиваем текст по символу переноса строки
$rows = '';
$tmp = array_map('trim', explode("\n", $text));
foreach ($tmp as $value) {
	if (empty($value)) {continue;}
	$rows .= $pdo->getChunk($tpl, array('value' => $value));
}

// Если есть, что выводить - выводим
if (!empty($rows)) {
	return $pdo->getChunk($tplOuter, array('rows' => $rows));
}

И можно вызывать в чанке оформления галереи:
[[+add:getAddList]]

Здесь сам сниппет ничего получать не должен, потому что, в отличии от ТВ, у картинок нет имён и они не так привязаны к ресурсам. Поэтому, работаем только с уже переданным текстом.
Андрей
21 марта 2015, 16:31
9
+1
Ну вот как-то так набросал на скорую руку. -)

Создал плагин, повесил на событие OnDocFormSave.

<?php
if ($modx->event->name == 'OnDocFormSave') {

	$parentIds = $modx->getParentIds($id, 4, array('context' => 'web'));   // Получаем id всех родителей ресурса
	$res = $modx->getObject('modResource',$id);
	$curAlias = $res->get('alias');   // Алиас текущего ресурса

	$cnt = count($parentIds);  // Количество родителей

	if($cnt > 2) { 

		$aliases = array();   // Массив для всех найденных алиасов

		foreach($parentIds as $v) {
			if($v == 22 || $v == 0) continue;  // Если родитель - контейнер Shop(22) или главный родитель (0) - пропускаем.

			$obj = $modx->getObject('modResource', $v);
			$alias = $obj->get('alias');
			$aliases[] = $alias;
		}

		$resource->set('uri', implode('/',array_reverse($aliases)) . '/' . $curAlias);

	} else {
		$resource->set('uri', $curAlias);
	}

	$resource->set('uri_override', true);
        $resource->save();

}
Можно еще добавить условие, чтобы урл, таким образом, формировался только для новых ресурсов. Мне пока не нужно.

if ($mode == 'new') {
    // код выше
}
Wassi Wassinen
10 марта 2015, 18:02
1
0
Я название плейсхолдера взял из этого массива :)

Array
(
    [class] => msVendor
    [id] => 4
    [name] => CasaPorte
    [resource] => 1896
    [country] => Россия
    [logo] => assets/images/logo/Doors/kasaporte-100.png
    [address] => 
    [phone] => 1896
    [fax] => 1
    [email] => 
    [description] => 
    [properties] => 
    [idx] => 1
    [link] => 
)


Почему-то зациклился на link и не понял, что нужно использовать плейсхолдер resource. Спасибо!
Василий Наумкин
03 марта 2015, 20:03
1
0
Не нашел как добавлять разрешения пользователям?

Плохо искал — bobsguides.com/revolution-permissions.html. Где-то в рунете есть и перевод.
Василий Наумкин
25 февраля 2015, 17:12
1
+1
Не нужно никаких плейсхолдеров, просто сделай tpl1 и tpl2 и выдавай их в зависимости от того, находится ли товар в корзине.

<?php
// Параметры
$idd = $modx->getOption('idd', $scriptProperties, $modx->resource->id);
$tplIn = $modx->getOption('tplIn', $scriptProperties, '@INLINE Товар в корзине, цена = [[+price]]'); 
$tplOut = $modx->getOption('tplOut', $scriptProperties, '@INLINE Товара в корзине нет'); 
// Классы для работы
$pdo = $modx->getService('pdoTools');
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key, $scriptProperties);
$cart = $miniShop2->cart->get();
// Поехали
$found = false;
foreach($cart as $product) {
	if ($value['id'] == $idd) {
		$found = $product;
		break;
	}

return $found
	? $modx->getChunk($tplIn, $found)
	: $modx->getChunk($tplOut);

Вызывать так:
[[!myButton?&idd=`[[+id]]`]]
Можно указывать и чанки tplIn и tplOut.

На опечатки не проверял, принцип должен быть ясен.
Володя
05 февраля 2015, 19:53
2
+3
<?php
if ($modx->event->name == 'OnBeforeDocFormSave') {

    if($resource->get('class_key') !== 'msProduct') {return;}
    $article = $resource->get('article');
    if(empty($article)) {return;}
    if($count = $modx->getCount('msProductData', array('article' => $article ))) {

        $response = array(
			'success' => false,
			'message' => 'Продукт с таким артикулом уже существует',
			'data' => array(),
		);

		echo $modx->toJSON($response);
		exit;
        
    }

}
Максим Кузнецов
04 февраля 2015, 10:11
1
0
Ммм…

Тогда предложу 2 варианта:

1. немного допилить этот вариант — modx-shopkeeper.ru/download/paid-extras/import-eksport2.html
2. Ждать и посматривать на эту тему
(вариант из разряда «сделать самому», думаю, описывать не требуется :) )