Николай Савин

Николай Савин

Был в сети 29 июня 2026, 12:35
Заказы принимаю
Встречал как то adminer на одном из поддерживаемых проектов, не стал разбираться что это такое, удалил за ненадобностью. Все таки надо будет на досуге потестировать.
Насчет handybackup я так и не понял при чем тут MODX. Ну копирует эта программа файлы, ну делает бэкап базы. Она же не в админку устанавливается, а работает как отдельный скрипт.
Походу просто SEO оптимизаторы создали статьи для каждой популярной CMS.
Спасибо за рекомендацию, надо будет попробовать. Только не всегда вопрос стоит именно в РЕЗЕРВНОМ копировании. Иногда просят разработать обновление сайта, не сломав рабочий проект. Ну к примеру внедрить новую версию MiniShop2.4, которая как известно при обновлении с Minishop2.2 может сломать сайт, так как построена на другой логике.
Лично мне проще скачать копию сайта себе на локальный хостинг, спокойно все что нужно сделать, проверить, и потом залить готовую копию на рабочий проект.
А сортировка по городам я так понимаю работает?
Для сортировки по странам, придется писать свой отдельный метод фильтрации, мой не подойдет, я использовал собственную базу стран, не стандартную базу стран MODX.
Вызов метода будет примерно таким
[[!mFilter2?
    &element=`getUsersFilter`
    &groups=`shopkeepers`
    &tpl=`@INLINE [[+fullname]]`
    &filters=`
       user|country:country
    `
]]
В классе фильтрации нужно будет написать свой отдельный метод buildCountryFilter, который будет выводить названия стран. Мой метод из примера не подойдет, потому что я брал данные из своей отдельной таблицы, но можно его просто допилить под использование стандартной таблицы стран
Нет такой таблицы UserProfile, все данные о которых идет речь, лежат как раз в таблице user_atributes.
А UserProfile это объект, который получается из таблицы и содержит данные таблицы user_atributes.
Так что фильтация по дефолтным полям пользователя (city, country) через этот способ тоже поддерживается
Написал сниппет, который в цикле перебирает указанные тэги, по очереди.
Т.е. Сначала из базы выбираются все фотографии с первым тэгом. На следующей итерации цикла выбираю фотографии со вторым тэгом, но при этом только среди тех чьи ID я получил на предыдущей итерации.
Таким образом за две три итерации я сужаю круг и возвращаю id нужных мне файлов
<?php;
$tagsArr = array();
$tagsArr = explode(',', $tags);
  
if(count($tagsArr) > 0){
    $files = '';
    $result = '';
    foreach($tagsArr as $tag){
        $tag = trim($tag);
        $sql = "SELECT
          *
        FROM
          `modx_ms2_resource_files`
        LEFT JOIN
          `modx_ms2_resource_files_tags`
        ON
          (
            modx_ms2_resource_files_tags.file_id = modx_ms2_resource_files.id
          )
        WHERE
          modx_ms2_resource_files.resource_id = {$resources}
          {$files}
          AND modx_ms2_resource_files_tags.tag = '{$tag}'";
        $q = $modx->prepare($sql);
        $q->execute();
        $res = $q->fetchAll(PDO::FETCH_ASSOC);
        
        $tmp = array();
        foreach($res as $item){
            $tmp[] = $item['id'];
        }
        $files = $result = implode(',', $tmp);
        $files = "AND id IN ({$files})";
    }   

    $result = '["File.id IN ('.$result.')"]';
    return $result;
}
Вторая задача, как передать массив полученных файлов в сниппет ms2Gallery, так как он не позволяет принимать id конкретных файлов. На помощь приходит параметр &where

[[ms2Gallery?
	&resources=`19`
	&includeThumbs=`200x200`
	&tplOuter=`чанк оболочка`
	&tplRow=`чанк одной фотографии`
	&limit=`12`
	&where=`[[getPhotosByTags? &resources=`19` &tags=`Шторы, Кухня`]]`
]]