Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #70
Илья Уткин
24 июня 2015, 09:32
3
+1
У ресурса есть метод cleanAlias, который генерирует псевдоним:

$title = $data->get('pagetitle') . '-' . $data->get('id');
$alias = $data->cleanAlias($title);
$data->set('alias', $alias);
$modx->runProcessor('resource/update', $resource->toArray());
Павел
23 июня 2015, 15:43
2
0
Скинуть сайт сюда не могу, если только в личку…
Проблему решил, скидываю код:

<script>
	function masonryFunc(){
            var $container = $('#mse2_results');
            $container.masonry({
                columnWidth: 280,
                itemSelector: '.grid_item',
                gutter: 30,
                isAnimated: true,
                
            });
        } 
        setTimeout(masonryFunc,300);
        
        $(document).on('mse2_load', function() {
           $('#mse2_results').masonry('destroy');
           setTimeout(masonryFunc(),300);
        });
</script>
Володя
17 июня 2015, 08:47
1
0
Привет, вот тут сниппет набросал demo.vgrish.ru/manager/?a=element/snippet/update&id=46
<?php
/** @var array $scriptProperties */
/** @var msop2 $msop2 */
$miniShop2 = $modx->getService('minishop2');
$msop2 = $modx->getService('msop2', 'msop2', $modx->getOption('msop2_core_path', null, $modx->getOption('core_path') . 'components/msop2/') . 'model/msop2/', $scriptProperties);
if (!($msop2 instanceof msop2)) return 'Could not load msop2 class!';
if (empty($product)) {$product = $modx->resource->id;}
$msProduct = $modx->getObject('msProduct', $product);
if (!($msProduct instanceof msProduct)) {
	return 'This resource is not instance of msProduct class.';
}
$q = $modx->newQuery('msop2Option');
$q->where(array('key' => $name, 'active' => 1));
$q->select('id as option_id');
if ($q->prepare() && $q->stmt->execute()) {
	$data = $q->stmt->fetch(PDO::FETCH_ASSOC);
	$option_id = $data['option_id'];
}
$q = $modx->newQuery('msop2Price');
$q->sortby('CAST(price AS DECIMAL(10,2))', 'ASC');
$q->where(array('product_id' => $product, 'option' => $option_id,'active' => 1, 'operation' => 1));
$q->select('price as price_min, value as value');
$q->limit(1);
if ($q->prepare() && $q->stmt->execute()) {
	$data = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
}
if (!empty($data)) {
    $priceMin = $data[0]['price_min'];
}
else {
    $priceMin = $msProduct->get('price');
}
$priceMin = $miniShop2->formatPrice($priceMin);
if (!empty($toPlaceholder)) {
	$modx->setPlaceholder($toPlaceholder, $priceMin);
}
else {
	return $priceMin;
}
вызов
[[!msop2GetMinPrice? 
 &product=`[[+id]]`
 &name=`size`
]]
Наумов Алексей
02 июня 2015, 08:54
1
0
Вы можете в параметре where сниппета ecMessages указать поисковый запрос, например:
&where=`{"`ecMessage`.`text`:LIKE": "%слово%"}`
А для подстановки «слово» из $_GET использовать простой сниппет
return empty($_GET['query']) ? '' : $_GET['query'];
не проверял, но как то так…
Павел Романов
19 мая 2015, 17:47
7
+3
На одном форуме народ соревновался в самом «компактном» решении этой задачи ))
Победило такое решение:
<?php
if($n!=''){
return= $n%10==1&&$n%100!=11?$w1:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$w2:$w3);
}
Ну и вызываем:
[[Snippet? &n=`123` &w1=`год` &w2=`года` &w3=`лет` ]]
Воеводский Михаил
11 мая 2015, 16:46
2
+2
Самый простой способ — отправить ajax запрос с параметром:
/?ms2_action=cart/clean
Андрей
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') {
    // код выше
}
but1head
17 марта 2015, 12:36
3
0
if($resource->class_key == 'msProduct' && $modx->event->name == 'OnDocFormSave' && $mode == 'new'){
	$article = $resource->get('article');
	$alias = ($article == '' ? $id : $article);
	$resource->set('alias', $alias);
	$resource->save();
}
для товаров, подставляет артикул вместо алиаса
Василий Наумкин
15 марта 2015, 12:34
2
+1
А ведь и правда, работает. Нужно только отключить вывод "… назад":
[[!dateAgo?
	&input=`2015-03-16 12:45:00`
	&dateHours=`0`
	&dateMinutes=`0`
	&dateNow=`0`
]]
Выводит
Завтра в 12:45

Сам себя иногда удивляю =)
Виталий Валерьевич
06 марта 2015, 09:03
1
0
Ну понятно ;)
В общем есть 2 варианта реализованные Василием:

1) Внести изменения в вызовы mSearch2.load(), придется править исходники объекта mSearch2

mSearch2.load('', function(response) { 
	$(".vers").colorbox({inline:true, width:"80%"}); 
});

2) Слушать событие «mse2_load», можно указывать в любом месте, исходники править не нужно.

(function() {
	$(function() {
		$(document).on("mse2_load", function(response) {
 			$(".vers").colorbox({inline:true, width:"80%"}); 
		});
	});
}) ();

Метод mSearch2.afterLoad(); не подходит, т.к. вызывается раньше, чем формируется итоговый DOM

Сам этим компонентом не пользовался, посмотрел как работает JS данного компонента тут minishop2.com (default.js), естественно код не проверял, но попробуйте, должно сработать.