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

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

С нами с 03 марта 2014; Место в рейтинге пользователей: #43
Павел Романов
18 октября 2025, 14:08
0
Тут нет плейсхолдера pagetitle — получайте его через $file.resource_id (для ms2Gallery) или $file.product_id (для msGallery).

{foreach $files as $file}
    <picture>
        <source srcset="{$file['webp250x250']}" type="image/webp">
        <img class="lazyload"
            data-src="{$file['webp250x250']}"
            src="{$file['webp250x250']}"
            alt="{$file.resource_id | resource : 'pagetitle' | htmlent}">
    </picture>
{/foreach}
Павел Романов
17 октября 2025, 17:30
0
А так не работает (пробелы только в & quot; уберите)?
[[+pagetitle:replace=`"==& quot ;`]]
{$pagetitle | replace : '"' : '& quot ;'}

Или можно сделать сниппет filter (он еще и кавычки-елочки ставит вместо обычных):
<?php
$str = $modx->stripTags($input);
$str = preg_replace("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $str);
$arr1 = array(' & ', '"', '\'');
$arr2 = array(' & amp ; ', '& quot ;', '& apos ;');
return str_replace($arr1, $arr2, $str);

Ну и
[[+pagetitle:filter]]
{$pagetitle | filter}
Павел Романов
09 июня 2025, 15:30
0
Сорри за оффтоп, вопрос по FastPaginate.
Он присутствует в репозитории, прекрасно работает, но поддомен с примерами и документацией в настоящее время недоступен.
Это временная история или компонент более не поддерживается?

PS кстати, по ExtraFields та же история.
Павел Романов
31 мая 2025, 15:29
1
+1
Укажите для этого TV на вкладке «Параметры вывода» тип «Разделитель» и в качестве него поставьте ||.
Павел Романов
01 мая 2025, 12:51
1
+1
Речь идет об item.tpl?
Обычным образом:
[[*id]]
[[*template]]

Если на Fenom, то
{$_modx->resource.id}
{$_modx->resource.template}
Павел Романов
21 апреля 2025, 12:44
0
Здравствуйте.
Первой должна идти колонка «Категории»
Павел Романов
05 апреля 2025, 12:12
+1
Если в этом поле числа, то можно так:
...
&tvFilters=`count_all>0`
...

Если нет, то попробуйте так:
...
&includeTVs=`count_all`
&where=`{ "count_all:!=":"" }`
...

Ну или сделайте сниппет, который будет собирать ID товаров, у которых поле пустое, выдавать их в виде строки типа:…
-15,-12,-56

… и подставьте его в качестве resources:
...
&resources=`[[snippetName]]`
...
Павел Романов
14 марта 2025, 10:32
0
Здравствуйте

префиксы таблиц, точно они ms2_
Поправил, спасибо за уточнение ).

А почему выбрал CronManager
Просто обычно работаю с CronManager, но ничего не мешает запускать тот же самый сниппет через Scheduler.

Добавляем задание:



Настраиваем параметры:



Результат:

Павел Романов
03 марта 2025, 22:42
0
Это у Вас что-то не так ).
Смотрите логи сервера.
Павел Романов
03 марта 2025, 22:41
0
Так в них и выводите. В $category будет ID не родителя, а категории первого уровня.
То есть если у Вас так:…
  • Ракеты (1)
    • Подкатегория 1 (2)
      • Товар 1 (3)
      • Товар 2 (4)
      • Товар 3 (5)
      • Подкатегория 2 (6)
        • Товар 4 (7)
        • Товар 5 (8)

… то для всех подкатегорий и товаров $category будет 1 (ID Ракеты) вне зависимости от вложенности.
Павел Романов
03 марта 2025, 10:40
0
Для получения id верхней категории можно использовать pdoField, а дальше разводить. Если Ракеты, Арбузы, Магия находятся в корне (уровень указывается в topLevel), то так:
{var $category = 'pdoField' | snippet : ['topLevel' => 1, 'field' => 'id']}
{$category == 1}
    {include 'arbuzi'}
{elseif $category == 25}
    {include 'raketi'}
{elseif $category == 100}
    {include 'magic'}
{else}
{/if}
Павел Романов
13 января 2025, 12:49
1
+2
Сниппет можно сократить до такого ):
<?php
$out = [];
$table = $modx->getOption('table_prefix').'msop_colors';
if($query = $modx->query("SELECT color, pattern FROM {$table} WHERE value = '{$color}'")){
    $out = $query->fetch(PDO::FETCH_ASSOC);
}
return $out;
Павел Романов
05 ноября 2024, 17:51
1
0
Можно такой сниппет сделать и запускать через CronManager:
<?php
$sql = "SELECT id FROM {$modx->getTableName('modResource')} WHERE deleted = 0 AND published = 1";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource) {
    $response = $modx->runProcessor('mgr/index/update', array('id' =>$resource['id']), array('processors_path' => MODX_CORE_PATH . 'components/msearch2/processors/'));
    if ($response->isError()) {
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($response->getAllErrors(), true));
    }
}
Павел Романов
19 октября 2024, 13:05
0
Столкнулся с такой же проблемой.
Хоть и много воды утекло, попробуйте в файле core/model/modx/processors/security/message/getlist.class.php на 51 строке прописать не RecipientProfile.id, а RecipientProfile.internalKey:

$c->innerJoin('modUserProfile', 'RecipientProfile', 'RecipientProfile.internalKey = modUserMessage.recipient');
Павел Романов
27 июля 2024, 18:46
+1
Добавлю пять копеек )
Если указать $_SERVER['DOCUMENT_ROOT'], то, к примеру, скрипты, использующие подключение API MODX не будут работать, если они запускаются по CRON.
Павел Романов
25 июля 2024, 17:03
1
+1
В настройках TV вкладка «Параметры ввода», тип ввода «Ace»