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

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

С нами с 03 марта 2014; Место в рейтинге пользователей: #36
18 октября 2021, 09:45
+1
Babel реализует только связь между ресурсами в разных контекстах на фронте (при переключении языков, к примеру) и в админке. Больше он ничего, по сути, не делает.
Если у Вас одинаковые структуры (наборы страниц) для каждого города, то Babel поможет. Если разные, то смысла в нем нет.

А редирект по IP реализуйтеь плагином на OnHandleRequest, к примеру. Babel тут не при чем.
17 октября 2021, 15:20
0
А так?
[[!pdoResources? 
    &offset=`5` 
    &tpl=`cityes.tpl` 
    &limit=`0` 
    &parents=`[[BabelTranslation? &resourceId=`5`]]` 
    &tpl_n23=`cityes20.tpl` 
    &sortby=`{ "pagetitle":"ASC" }`
]]
13 октября 2021, 11:18
0
Если количество товара выводится не только на странице самого товара, а еще, к примеру, в категориях, то лучше после парсинга чистить кеш всего сайта и вместо приведенного Вами кода поставить это:
$modx->cacheManager->refresh();

Если выводится только на странице товара (и если в массиве $contentids у Вас ID обновленных ресурсов), то так:
// очищаем кэш обновленных ресурсов
$ids = array_unique($contentids);
foreach($ids as $id){
    $resource=$modx->getObject('modResource',$id);
    $cacheKey = $resource->getCacheKey();
    $modx->cacheManager->refresh(array('resource' => array('key' => $cacheKey)));
}
07 октября 2021, 18:02
+1
Сделайте плагин на событие OnManagerLogin:
<?php
$user_id = 5; // ID юзера
$resource_id = 12; // ID страницы
if($user->get('id') == $user_id){
    $modx->sendRedirect(MODX_MANAGER_URL.'index.php?a=resource/update&id='.$resource_id);
}
06 октября 2021, 12:53
0
А если так?:
<script>
if(typeof pdoPage !== 'undefined') {
    pdoPage.callbacks.after = function(config, response) {
        $('.fancyboxModal ').fancybox({
	    // .....
        });
        
        $('#pdopage').removeClass('loading');
        $('#pdopage').css('opacity', 1);
    };
}
06 октября 2021, 12:36
0
Добавить этот код на страницу, прописав вместо //… опции fancybox, которые у Вас используются для при клике на ссылку с классом fancyboxModal.
06 октября 2021, 11:26
0
Попробуйте переинициализировать fancybox по callback от pdoPage:
<script>
if(typeof pdoPage !== 'undefined') {
    pdoPage.callbacks.after = function(config, response) {
        $('.fancyboxModal ').fancybox({
	    // .....
        });
    };
}
</script>
03 октября 2021, 09:57
0
Надо в эту TV добавить какие-то символы, обрамляющие ID.
Например:
-6-,-58-,-66-

И тогда:
&tvFilters=`user_id==%-[[!+modx.user.id]]-%`
29 сентября 2021, 10:31
+1
А так пробовали?
[[!pdoUsers:default=`Ничего не найдено`?
    ...
]]
28 сентября 2021, 16:17
+1
Лучше сниппетом сделайте.
<?php
if($tv == 'Да'){
    if($modx->getPlaceholder('total_number') == 1){
        //...
    }else{
        //...
    }
}

И его в чанке вызывайте:
{'!snipetName' | snippet: [ 
    'tv' => $_pls['tv.answer'] 
]}
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]]`]]