Павел Романов

Павел Романов

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
23 сентября 2017, 17:43
0
Collection хранит данные настройки в таблице modx_collection_templates.
Соответственно, можно их оттуда вытащить. Например, Rowboat:
[[Rowboat?
   &table=`modx_collection_templates`
   &where=`{"id":"1"}`
   &tpl=`tpl`
]]

В чанке используйте поля:
[[+sort_field]]
[[+sort_dir]]
[[+page_size]]
Павел Романов
21 сентября 2017, 10:03
+1
Включите в вызов параметр &saveTmpFiles=`1`.
Сделайте сниппет getfile:
<?php
$file = $modx->getOption('assets_url', null, MODX_ASSETS_URL).'components/formit/tmp/'.$_FILES['upload']['tmp_name']; 
$hook->setValue('file', $file );
return true;

Вставьте его в качестве хука перед email:
&hooks=`getfile,email,FormItSaveForm`

Выводите в письме:
[[+file]]
Павел Романов
20 сентября 2017, 10:21
0
У Вас какая версия FormIt?
Павел Романов
19 сентября 2017, 11:23
0
Так у Вас же уже есть список e-mail, зачем подтверждение?
Для того же, чтобы послать уведомление с паролем используйте API.
Сам пароль сгенерируйте при создании юзера (возьмите, к примеру, его email, телефон, текущее время, прогоните строку через md5, обрежьте до удобного кол-ва символов и т. д.).
Павел Романов
19 сентября 2017, 10:11
+1
Не нужно запускать Register. Создавайте пользователей напрямую.
Павел Романов
17 сентября 2017, 11:28
+1
Вы можете скрывать ненужные кнопки через CSS по id, в котором используется ID TV-шек.

Допустим, у TV с ID=17 надо скрыть кнопку отмены:


Делаем CSS файлик admin.css и кладем в /manager:
#tv17_undo {display:none !important;}

И подключаем его через плагин на событие OnManagerPageInit:
<?php
if ($modx->event->name == 'OnManagerPageInit') $modx->regClientCSS('../manager/admin.css');
Павел Романов
17 сентября 2017, 10:40
0
В системных настройках выберите пространство имен tinymce и отредактируйте эти параметры:
Павел Романов
08 сентября 2017, 19:34
+2
Добавит теги на этапе добавления:
....
$new->set('content', '<p>Какой-то контент</p>');
....
Павел Романов
31 августа 2017, 13:03
+1
Естественно — в системе же нет ресурса с ID=0.
Проверяйте родителя и выводите соответствующую ссылку:

[[*parent:is=`0`:then=`
<a href="[[++site_url]]">Главная</a>
`:else=`
<a href="[[~[[*parent]]]]">[[#[[*parent]].menutitle]]</a>
`]]
Павел Романов
18 августа 2017, 10:26
+2
Попробуйте cделать сниппет:
<?php
return '&where=`["YEAR(FROM_UNIXTIME(modResource.publishedon)) = '.date('Y').'"]`';

и подставить его в вызов:
[[!pdoResources?
&tpl=`nitemEmail`
&limit=`1`
&depth=`0`
&parents=`26`
&tvFilters=`infoCheck==%Статьи%`
&sortby=`RAND()`
&includeTVs=`photo`
[[Snippet]]
]]
Павел Романов
16 августа 2017, 12:37
0
Можно использовать pdoTitle.
Или написать сниппет, который будет проверять наличие $_GET['page'] и добавлять что нужно и куда нужно.
Павел Романов
14 августа 2017, 23:31
0
Естественно.
Сорри, опечатался )
Павел Романов
14 августа 2017, 18:44
0
У товара делаете TV «prtype», где прописываете тип:
Напольная==1||Настенная==2||Плинтус==3

На странице коллекции собираете дочерние товары, у которых отмечены данные значения. Для этого можно сделать сниппет:
<?php
$items = $modx->runSnippet('pdoResources', array(
'limit'=>0,
'parents'=>$modx->resource->get('id'),
'tpl'=>$tpl,
'includeTVs'=>$includeTVs,
'tvFilters'=>'prtype==='.$prtype,
//еще какие-о параметры pdoResources
));

if($items) return $modx->getChunk('outer-tpl', array('items'->$items, 'title'=>$title));

Делаете чанк outer-tpl c [[+title]] (заголовок) и [[+items]] (товары):
<div>
	<h3>[[+title]]</h3>
	<div>[[+items]]</div>
</div>


Вызываете на странице:

[[Snippet?
&tpl=`******`
&includeTVs=`******`
&prtype=`1`
&title=`Напольная`
]]

[[Snippet?
&tpl=`******`
&includeTVs=`******`
&prtype=`2`
&title=`Настенная`
]]

[[Snippet?
&tpl=`******`
&includeTVs=`******`
&prtype=`3`
&title=`Плинтус`
]]
Павел Романов
06 августа 2017, 11:20
+1
Можно так:
<script>
$(document).ready(function(){
	$('.selectheader').click(function(){
        	$('.selectbody').slideToggle('fast');
	});
});

$(document).on('mse2_load', function(){
	var active = $('.sort.active').html();
	$('.selectheader').html(active);
	$('.selectbody').slideToggle('fast');
});
</script>
Павел Романов
05 августа 2017, 20:16
2
+1
Делайте просто ссылками, а не select-ом:

<div class="sorting__cat sorting__cat-top" id="mse2_sort">
	<div class="selectheader">По умолчанию</div>
	<div class="selectbody" style="display:none;">
		<a href="#" data-sort="resource|menuindex" data-default="asc" class="sort" >По умолчанию</a>
		<a href="#" data-sort="resource|pagetitle" data-default="asc" class="sort" >Название (А - Я)</a>
		<a href="#" data-sort="resource|pagetitle" data-default="desc" class="sort" >Название (Я - А)</a>
		<a href="#" data-sort="ms|price" data-default="asc" class="sort" >Цена (по возрастанию)</a>
		<a href="#" data-sort="ms|price" data-default="desc" class="sort" >Цена (по убыванию)</a>
	</div>
</div>

selectbody выводите по клику или наведению на selectheader.
В сам selectheader помещайте текст через JS на основании .sort.active.

Ну или попробуйте переопределить свойство sort_link, добавив в вызов mFilter2 параметр:
&filterOptions=`{"sort_link:": "#mse2_sort option"}`
Павел Романов
29 июля 2017, 11:52
0
Да все правильно делаете.
Но вообще, должно работать. TV точно называется slider?

Если в чанке mini_sliderTPL прописать:
[[+tv.slider]]

и вывести так:
[[getResources?
&parents=`6,10,12,15`
&showHidden=`1`
&tpl=`mini_sliderTPL`
&limit=`7`
&includeTVs=`1`
]]

Единички выводятся там, где отмечены?
Павел Романов
28 июля 2017, 19:10
0
Думаю, getPage для слайдера не нужен ))
Попробуйте так:
[[getResources?
&parents=`6,10,12,15`
&showHidden=`1`
&tpl=`mini_sliderTPL`
&limit=`7`
&includeTVs=`1`
&tvFilters=`slider===1`
]]
Павел Романов
23 июля 2017, 11:19
0
Попробуйте в вызов добавить:
&toPlaceholders=`my.`

И сделайте плейсхолдеры некешируемыми:
[[!+my.tv|seminartype]]
[[!+my.tv|for]]
[[!+my.results]]
Павел Романов
14 июля 2017, 11:32
+1
Добавьте GET-параметр в кнопку:
<a data-type="iframe" class="button-link" data-src="[[~7? &subject=`Тема1`]]" href="javascript:;">Заказать</a>

А в самой форме ловите и подставляйте:
<input name="subject" value="[[!#GET.subject:default=`Тема письма по-умолчанию`]]" />

Если pdoTools не установлен, то сделайте простенький сниппет getSubj:
<?php
return htmlentities(trim(strip_tags((string) $_GET['subject'])), ENT_QUOTES, 'UTF-8', false);

И тогда так:
<input name="subject" value="[[!getSubj:default=`Тема письма по-умолчанию`]]" />
PS
Одновременно с Алексеем )))
Павел Романов
12 июля 2017, 16:11
+1
Так у Вас это один ресурс, в котором MIGX-поле partners которое надо обработать?
Тогда все проще:
<?php
if(!$tv) return;
$countries = array();
$arr = json_decode($tv, true);
foreach($arr as $partner){
	$countries[] = $partner['country'];
}
$countries = array_unique($countries);
natsort($countries);
foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}
return $out;

И вызываете:
[[getCountries? 
&tv=`[[*partners]]`
&tpl=`country-tpl`
]]


Если же структура такая:
Раздел (15)
	Ресурс(16)
	Ресурс(17)
	Ресурс(18)
	...

… и эти TV partners у ресурсов 16, 17 и 18, то сниппет такой:
<?php
if(!$tvname) return;
if(!$parent) $parent = $modx->resource->get('id');

$countries = array();

foreach ($modx->getIterator('modResource', array('parent' => $parent)) as $resource) {
	$tv = $resource->getTVValue($tvname);
	$arr = json_decode($tv, true);
	foreach($arr as $partner){
    		$countries[] = $partner['country'];
	}
}

$countries = array_unique($countries);
natsort($countries);

foreach($countries as $country){
    $out .= $modx->getChunk($tpl, array('country'=>$country));
}

return $out;

И тогда вызываете:
[[getCountries? 
&parent=`15`  
&tvname=`partners`
&tpl=`country-tpl`
]]