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

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

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
23 сентября 2021, 18:49
0
Да, с опциями он не работает.
Либо делать через TV, либо писать плагин на событие mSyncOnProductImport, там ловить данные и прописывать в опции.
Павел Романов
06 сентября 2021, 20:05
0
Просто ловите в плагине $_POST['email'] и проверяете его.
Если неправильно, то:
$modx->event->output('Проверьте правильность заполнения email');
Павел Романов
06 сентября 2021, 19:49
0
В доках есть пример плагина на OnBeforeUserFormSave — там можно проверять любое поле.
Павел Романов
30 августа 2021, 20:18
1
0
Используйте getChunk.
Например:
<?php
$sth = $modx->query("SELECT * FROM reg_users");
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $data) {
    $regNums .= $modx->getChunk($tpl, array('regNum' => $data['regNum']);
}
return $modx->getChunk($tplWrapper, array('output' => $regNums));

В вызове указывайте параметры:
[[SnippetName?  
    &tplWrapper=`chunk1` 
    &tpl=`chunk2`
]]

Ну а там уже оформляйте как угодно.
В chunk2, к примеру:
<ul>[[+output]]</ul>

В chunk2:
<li>[[+regNum]]</li>
Павел Романов
23 августа 2021, 14:17
0
А так?
{$values[$index] | replace: '.' : '' | replace: '/' : '' }
Павел Романов
12 августа 2021, 11:17
+1
Пишете сниппет, который выводит id товаров через запятую в нужной последовательности например так:
<?php
$ids1 = $modx->runSnippet('pdoResources', array(
    'parents' => 12, // ID первой категории
    'returnIds' => 1,
    'limit' => 0,
    'templates' => 3 // ID шаблона товара
)));
$ids2 = $modx->runSnippet('pdoResources', array(
    'parents' => 3,-12, // ID каталога и исключение ID первой категории
    'returnIds' => 1,
    'limit' => 0,
    'templates' => 3 // ID шаблона товара
)));
return $ids1.','.$ids2;

И подставляете этот сниппет в вызов mFilter2:
...
&resources=`[[!snippetName]]`
&sortby=`ids`
...
Павел Романов
03 августа 2021, 14:04
+1
<?php
$tvid = 1; // Замените на ID Вашей TV
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));

if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid,'contentid' =>$docid))) return;
if(!$tv = $modx->getObject('modTemplateVar', $tvid)) return; 

$tvv = str_replace("\n", '', $tv->get('elements'));

$vals = explode('||', $tvv);
$cities = array();
foreach($vals as $val){
	$v = explode('==', $val);
	$cities[ $v[1] ] = $v[0];
}    

$tvr = $tvo->get('value');
$arr = explode('||', $tvr);
$out = array();

foreach($arr as $d){
	$out[] = $modx->getChunk($tpl, array(
            'name' => $cities[$d],
            'id' => $d
        ));
}
return implode(', ', $out);

Вызов:
[[Snippet?  &tpl=`chunk_name`]]
или
[[Snippet?  &docid=`[[+id]]` &tpl=`chunk_name`]]

В чанке chunk_name доступны плейсхолдеры [[+name]] и [[+id]].
Павел Романов
03 августа 2021, 13:54
+1
Ну тогда этот сниппет используйте.
Павел Романов
03 августа 2021, 13:53
+1
Ну Вы бы сразу выложили эту картинку, Вас бы сразу и поняли))
Цифры тут произвольные или нет? Если они соответствуют ID ресурсов (страниц в дереве), то используйте сниппет, который я привел выше.

Если эти цифры произвольные и никак не связаны с ресурсами или иными сущностями, то пишете такой сниппет:
<?php
$tvid = 1; // Замените на ID Вашей TV
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));

if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid,'contentid' =>$docid))) return;
if(!$tv = $modx->getObject('modTemplateVar', $tvid)) return; 

$tvv = str_replace("\n", '', $tv->get('elements'));

$vals = explode('||', $tvv);
$cities = array();
foreach($vals as $val){
	$v = explode('==', $val);
	$cities[ $v[1] ] = $v[0];
}    


$tvr = $tvo->get('value');
$arr = explode('||', $tvr);
$out = array();

foreach($arr as $d){
	$out[] = $cities[$d];
}
return implode(', ', $out);
На странице ресурса можете использовать просто
[[SnippetName]]
В чанках нужно передавать ID
[[SnippetName, &docid=`[[+id]]`]]
Павел Романов
02 августа 2021, 17:57
+1
Если TV со списком городов принадлежит этой странице, то просто:
[[*tvname]]
В случае, если у данной TV тип вывода строит «Разделитель» и в качестве самого разделителя указана запятая, то выведутся значения через запятую.

Если у Вас в качестве значений TV прописаны не названия городов, а ID соответствующих ресурсов, то делаете такой сниппет:

<?php
$arr = explode(',',$input);
$out = array();
foreach($arr as $id){
    if(!$res = $modx->getObject('modResource', $id)) continue;
    $out[] == $res->get('pagetitle');
}
return implode(', ', $out);

Назовите его, к примеру, getCities и используйте как модификатор:
[[*tvname:getCities]]
Павел Романов
02 августа 2021, 15:10
+1
У TV на вкладке «Параметры вывода» выберите «Разделитель» и поставьте в качестве него запятую.
После этого вывод [[*tvname]] в шаблоне страницы будет содержать разделитель.

Чтобы разделитель выводился через [[+tv.tvname]] в чанках, в вызовах pdoResources и т. д., добавляйте параметр &processTVs=`tvname`

В сниппетах для вывода через разделитель используйте
$tv = $resource->getTVValue('tvname');
Павел Романов
21 июля 2021, 13:09
0
Создайте под эти запросы синоноимы.
Павел Романов
09 июля 2021, 10:40
+1
Так сложно сказать. Дефолтный @FILE shopCartRow.tpl должен работать. Как вызываете сам Shopkeeper?
Исправьте, кстати, ошибку в консоли. Скрипт, который с 16 по 45 строки, должен идти после подключения jQuery. Соответственно, либо его перенесите вниз, либо подключение jQuery пропишите в HEAD перед этим скриптом.
Павел Романов
09 июля 2021, 10:02
+1
У Вас два раза jQuery подключается (на 595 и 619 строках).
В наборах параметров Shopkeeper включите noJQuery.
Павел Романов
08 июля 2021, 17:25
0
В плагинах getTVValue не всегда срабатывает.
Надежнее получать данные непосредственно из TV по ID ресурса.
Павел Романов
08 июля 2021, 16:35
+1
Попробуйте так (только вместо 999999 укажите ID TV-шки valuta):
//...
if($tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => 999999,'contentid' => $product->id))) {
    $currency_type = $tvo->get('value');
    $currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса
}
//...
Павел Романов
08 июля 2021, 11:08
+1
Тут Shopkeeper вообще не при чем.
Скорее всего у Вас установлен pdoTools и включен шаблонизатор Fenom на страницах.
Добавьте пробел после открывающей фигурной скобки:
&where=`{ "template":9 }`

Но лучше используйте pdoResources:
[[!pdoResources?
    &parents=`319`
    &templates=`9`
    &tpl=`product`
    &includeTVs=`price,image,opisanie`
    &limit=`20`
]]
Павел Романов
26 июня 2021, 11:10
1
+1
Можно так:
<?php
$id = $modx->resource->id;
$tpl = '@INLINE <li><a href="[[~[[+id]]]]">[[#[[+id]].tvname]]</a></li>'; // tvname - имя Вашей TV
//.....