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

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

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
08 ноября 2020, 17:58
+1
Т. Е. Надо и по каждому ресурсу пройти?
Нет, откройте само приложение в админке — там есть форма для пакетного поиска и замены.

А могут ли быть ещё какие-то проблемы при включении fenom, кробе фигурных скобок?
99,9% ошибок из-за них. В любом случае смотрите лог — там все будет.
Павел Романов
08 ноября 2020, 11:41
0
Поставьте modDevTools и пройдитесь по чанкам, шаблонам и ресурсам на предмет замены открывающей фигурной скобки на нее же с последующим пробелом.
Павел Романов
22 октября 2020, 15:08
0
Попробуйте добавить в вызов FormIt параметр emailFrom с любым адресом домена сайта (неважно существующим или нет), например:
&emailFrom=`info@домен_сайта.ru`

Что касается ошибки, отключите системную настройку log_deprecated.
Павел Романов
22 октября 2020, 14:47
0
Ошибки в логе есть?
Данные администратора стоят, пока Вы залогинены в админке. Подобными конструкциями подставляются данные активного пользователя:
[[!+fi.fullname:default=`[[+modx.user.id:userinfo=`fullname`]]`:ne=`0`:show]]
Павел Романов
04 октября 2020, 10:04
+2
modDevTools позволяет не лезть в базу, а искать такие вещи из админки, если открыть само приложение:

Павел Романов
02 октября 2020, 18:25
+1
Можете поставить компонент modDevTools и найти вызов в чанках/шаблонах/ресурсах, либо просто отключите системную настройку log_snippet_not_found
Павел Романов
29 сентября 2020, 11:04
+1
Не совсем понятно для чего два плейсхолдера. Оба вызова берут ресурсы из одного источника (&parents=`10`), без каких-либо условий, а отличаются только лимитом и шаблонами.
В этой ситуации у обоих total будет одинаковый (просто кол-во ресурсов у 10-го родителя) и не нужно ничего складывать — выводите один плейсхолдер.
Павел Романов
16 сентября 2020, 11:14
1
+2
Создайте плагин на событие OnManagerPageInit:
<?php
$modx->regClientCSS('..'.$modx->getOption('manager_url').'admin.css');

В директории manager создайте файл admin.css, где можете прописывать стили для админки.
Блок TV-шки, как правило находится в контейнере с id=«tv15-tr», где 15 — ID самой TV.
Соответственно, прописываете что-то типа:

#tv15-tr { padding:0 0 15px 0!important; margin:0 0 15px 0!important; border-bottom: 2px solid #ccc; }
Павел Романов
06 сентября 2020, 18:13
+1
А так?
$sortdir == 'ASC' ? $order = SORT_ASC : $order = SORT_DESC;
array_multisort($sort_array, $order, $arry_all);
Павел Романов
06 сентября 2020, 16:48
+1
Ну вот как пример:
<?php
$array = array(
    'item1' => array('name' => 'Борис', 'lastname' => 'Гришин', 'age' => 1980),
    'item2' => array('name' => 'Василий', 'lastname' => 'Васильев', 'age' => 1982),
    'item3' => array('name' => 'Геогрий', 'lastname' => 'Демидов', 'age' => 1981),
    'item4' => array('name' => 'Дмитрий', 'lastname' => 'Александров', 'age' => 1983),
    'item5' => array('name' => 'Алексей', 'lastname' => 'Белов', 'age' => 1984),
);

$totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar, count($array));
$limit = $modx->getOption('limit', $scriptProperties, 10);
$offset = $modx->getOption('offset', $scriptProperties, 0);

function sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}

usort($array, sorter($sortby)); // сортировка
$sortdir == 'DESC' ? krsort($array) :  ksort($array); // направление
$array = array_slice($array, $offset, $limit); //обрезаем, сдвигаем
foreach($array as $item){
    $out .= $item['name'].' '.$item['lastname'].' '.$item['age'].'<br />'; // выводим
}
return $out;
Вызов:
[[!pdoPage?
&element=`SnippetName`
&sortby=`lastname`
&sortdir=`ASC`
&limit=`3`
]]
[[!+page.nav]]
Павел Романов
06 сентября 2020, 14:01
+1
У Вас в сниппете youtubeTest что именно перебирается? Если это объект, о котором MODX знает, то используйте просто getCollection. Там можно сразу все задать:
//...
$items= $modx->getCollection('Ваш_объект', array(
    'limit'=>$limit, 
    'offset' => $offset, 
    'sortby'=> $sortby,
    'sortdir'=> $sortdir,
));
foreach($items as $item){
    $output .= $modx->getChunk($tpl, array());
}
//....
Павел Романов
05 сентября 2020, 11:16
+1
А как в сниппете youtubeTest (результат работы которого Вы пытаетесь разбить на страницы) обрабатываются переменные sort и limit, которые Вы ему передаете?
pdoPage — это просто обертка. Сниппет, для вызова которого он используется, должен сам лимитировать вывод на основе входных параметров и иметь возможность сдвига (offset) для реализации пагинации.
Павел Романов
01 сентября 2020, 14:13
0
Переменная $profile должна быть объектом.
Недавно же обсуждали.
Павел Романов
31 августа 2020, 11:25
0
При клике по кнопке посредством JS подставляйте в поле recipient ID юзера.
Павел Романов
30 августа 2020, 15:34
+1
Это поле extended с массивом значений.
Можно вывести, например, таким сниппетом:
<?php
if($profile = $modx->user->getOne('Profile')) $out = $profile->get('extended')[$field];
return $out;

Ну и вызов:
[[!SnippetName? &field=`usertype`]]
Павел Романов
24 августа 2020, 11:55
0
Э…
[[*id:is=`2`:then=`Текст`]]
Павел Романов
17 августа 2020, 20:17
+1
Поправочка:
...
    $cats[] = $resource['category_id']; // тут category_id, а не id
...
Павел Романов
17 августа 2020, 19:57
+1
Этот сниппет собирает все категории товара, которые у него отмечены на соответствующей вкладке.
Если нужно выводить их по родителям, то можете в нем собирать только ID-шники категорий:
<?php
$modx->getService('miniShop2');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$sql = "SELECT * FROM {$modx->getTableName('msCategoryMember')} WHERE `product_id` = $docid";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource){
    $cats[] = $resource['id'];
}
$out = implode(',', $cats);
return $out;

И его вызов подставлять уже в pdoResources:
[[pdoResources?
&parents=`123` // нужный родитель
&resources=`[[getCategories:default=`9999999`]]`
&tpl=`cat_tpl`
.........
]]
Павел Романов
17 августа 2020, 14:33
+1
Сделайте сниппет getCategories:
<?php
$modx->getService('miniShop2');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$sql = "SELECT * FROM {$modx->getTableName('msCategoryMember')} WHERE `product_id` = $docid";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource){
    $cat = $modx->getObject('modResource', $resource['category_id'])->toArray(); 
    $out .= $modx->getChunk($tpl,$cat);
}
return $out;

Вызывайте на странице товара
[[getCategories? 
&tpl=`cat_tpl`
]]

В чанках:
[[getCategories? 
&tpl=`cat_tpl` 
&docid=`[[+id]]`
]]

В чанке cat_tpl доступны все поля ресурса например:
<a href="[[+uri]]">[[+pagetitle]]</a>