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

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

Был в сети 7 минут назад
Заказы принимаю
Встречал как то 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=`Шторы, Кухня`]]`
]]