+416.50
Рейтинг

Борисов Евгений

[EVO] SimpleGallery: расширение функционала, часть 2

В этой статье речь пойдет о том, как изменить интерфейс SimpleGallery под конкретную задачу. При этом файлы плагина останутся без изменений — а значит, работа не пропадет после обновления SimpleGallery. Дальше много текста и говнокода.

Читать дальше →

[EVO] Автозамена названия чанков и TV в шаблонах, чанках, TV и содержимом ресурсов

Ковыряя японскую ветку MODX, нашел такой функционал — при изменении названия чанка или TV, автоматом обновлялись шаблоны, чанки, TV и содержимое ресурсов.
Вот накидал плагин
<?php
/**
 * Chunk&TV-sync
 *
 * Автозамена названия чанков и TV в шаблонах, чанках, TV и содержимом ресурсов
 *
 * @category    plugin
 * @version     0.1
 * @internal    @events         OnBeforeChunkFormSave,OnBeforeTVFormSave
 * @internal    @properties     
 */
 
if (!defined('MODX_BASE_PATH')) { die('HACK???'); }
$prefix=$this->db->config['table_prefix'];
switch ($_POST['a']) {
    case "79": // update chunk
        $was_name = $modx->db->getValue($modx->db->select('name', $prefix.'site_htmlsnippets', "id='{$id}'"));
        $name = stripslashes($_POST['name']);
        $was_name = str_replace("'", "''", $was_name);
        $name = str_replace("'", "''", $name);
        if ($name !== $was_name) {
            $modx->db->update("content=REPLACE(content,'{{{$was_name}}}','{{{$name}}}')", $prefix.'site_content');
            $modx->db->update("content=REPLACE(content,'{{{$was_name}}}','{{{$name}}}')", $prefix.'site_templates');
            $modx->db->update("snippet=REPLACE(snippet,'{{{$was_name}}}','{{{$name}}}')", $prefix.'site_htmlsnippets');
            $modx->db->update("value=REPLACE(value,    '{{{$was_name}}}','{{{$name}}}')", $prefix.'site_tmplvar_contentvalues');
            $modx->db->update("content=REPLACE(content,'{{{$was_name}:','{{{$name}:')", $prefix.'site_content');
            $modx->db->update("content=REPLACE(content,'{{{$was_name}:','{{{$name}:')", $prefix.'site_templates');
            $modx->db->update("snippet=REPLACE(snippet,'{{{$was_name}:','{{{$name}:')", $prefix.'site_htmlsnippets');
            $modx->db->update("value=REPLACE(value,    '{{{$was_name}:','{{{$name}:')", $prefix.'site_tmplvar_contentvalues');
        }
        break;
    case "302": // update TV
        $was_name = $modx->db->getValue($modx->db->select('name', $prefix.'site_tmplvars', "id='{$id}'"));
        $name = stripslashes($_POST['name']);
        $was_name = str_replace("'", "''", $was_name);
        $name = str_replace("'", "''", $name);
        if ($name !== $was_name) {
            $modx->db->update("content=REPLACE(content,'[*{$was_name}*]','[*{$name}*]')", $prefix.'site_content');
            $modx->db->update("content=REPLACE(content,'[*{$was_name}*]','[*{$name}*]')", $prefix.'site_templates');
            $modx->db->update("snippet=REPLACE(snippet,'[*{$was_name}*]','[*{$name}*]')", $prefix.'site_htmlsnippets');
            $modx->db->update("value=REPLACE(value,    '[*{$was_name}*]','[*{$name}*]')", $prefix.'site_tmplvar_contentvalues');
            $modx->db->update("content=REPLACE(content,'[*{$was_name}:','[*{$name}:')", $prefix.'site_content');
            $modx->db->update("content=REPLACE(content,'[*{$was_name}:','[*{$name}:')", $prefix.'site_templates');
            $modx->db->update("snippet=REPLACE(snippet,'[*{$was_name}:','[*{$name}:')", $prefix.'site_htmlsnippets');
            $modx->db->update("value=REPLACE(value,    '[*{$was_name}:','[*{$name}:')", $prefix.'site_tmplvar_contentvalues');
        }
        break;
}

UPD
поправил

[EVO] Доработка системы кэширования MODx Evo

Цель данного поста показать что MODx Evo, после некоторых доработок, может нормально функционировать при любом количестве документов в дереве. Хоть данное решение еще и требует некоторых доработок, оно полностью рабочее. Сам пост получился очень объемным поэтому привожу здесь только ссылку. Результаты сравнительного тестирования можно посмотреть в разделе Результаты тестов по приведенной выше ссылке. Так же есть два демонстрационных сайта один на официальной сборке MODx 1.0.10 в дереве 2000 документов ссылка, другой на доработанной сборке в дереве 50000 документов ссылка. 50000 это не предел замечательно работает и при 200000 и более, как сам сайт так и админка.

[EVO] PHx 2.2.0

Модифицированный PHx, о котором я писал ранее, теперь доступен и в репозитарии. Некоторые об этом очень просили, да и тестирование пойдёт живее :) Напомню основные изменения:

1. Исправлено съедание плейсхолдеров, в том числе и в @CODE (требуется Evo 1.0.9 и выше).
2. Исправлено выполнение кода в then и в else для чанков и сниппетов.
3. Исправлен кэш сниппетов, который создавал лишние запросы к базе.
4. Строковые функции заменены на их аналоги, либо на мультибайтовые функции, и теперь нормально работают с русским языком.
5. Некоторые исправления для php 5.3

P.S. Свежие исправления будут доступны здесь

[EVO] Добавляем версию к CSS и JS

Здравствуйте все!


Когда разработка ведется в режиме реального времени на хостинге заказчика и часто возникает потребность исправлять JS и CSS, то наступают непонятки с кэшированием. При этом мы обычно говорим, что у нас все хорошо, а заказчик настаивает на том, что ничего не изменилось, просим нажать CTRL+F5 или очистить кэш, тратим время на обьяснение что есть кэш и т.д. и т.п.

Выход довольно простой — дописывать к расширению постфикс вида:
?ver=XYZ


Вот и набросал соответствующий плагин.

Читать дальше →

[EVO] Вывод ТВ с дополнительной информацией (Custom Widget для TV)

В MODX есть замечательная возможность создавать дополнительные параметры(TV)
но не все знают на сколько это многофункциональный елемент
К примеру вот замечательный вопрос:
Как работать с tv custom widget
который и натолкнул меня на написание этого топика

Читать дальше →

[EVO] Уведомление администратора о новой регистрации на сайте.

Некоторые хотят уведомления о новой регистрации на сайте.
Такой функционал заложен в сниппет WebloginPE, но если нет желания и необходимости его ставить, а регистрация осуществляется через стандартный сниппет WebSignup то уведомления можно реализовать простым плагином.

Читать дальше →

[EVO] Изменение полей редактирования веб-пользователей в админ-панели.

ManageUserFieldsНесколько раз возникала необходимость при регистрации веб-пользователей на сайте использовать поля, отличные от тех, что уже имеются по-умолчанию в MODX Evo.
Что-то типа «Сфера деятельности» или «Организация» и т.п.
Когда таких нестандартных полей много — то проще использовать WebloginPE (или можно немного подправленную его версию из Clipper — WebUsers). С ним можно добавлять сколько угодно полей в отдельную таблицу БД. В этом же сниппете есть возможность для менеджера просматривать пользователей во фронтэнде. Хотя я ни разу этой возможностью не пользовался, поэтому не знаю насколько она функциональна и удобна.
А когда изменяемых полей не много, то достаточно и имеющихся стандартных. Только встает задача их переименовать. И если при регистрации и редактировании профиля это сделать не проблема в шаблоне, то в админке приходилось поступать некрасиво — лезть в языковой файл системы и там переименовывать нужные поля.
А если кому-то еще очень захочется и ненужные поля скрыть, то придется менять системный файл mutate_web_user.dynamic.php. А все знают(?), что делать это — не хорошо.
После того, как я пару раз поступал так вот нехорошо, решил все-таки решить эту задачу плагином.

Вешаем эту задачу на javascript. Не желая добавлять лишних библиотек, я решил все сделать на имевшемся Mootools. И если б не его очень старая версия (1.1.2) в админке MODX Evo, то потратилось бы значительно меньше времени на поиск решений и документации по древней версии. Т.к. с Mootools я до этого времени дел вообще не имел.
В итоге задача переименования и скрытия полей решается плагином.

Читать дальше →

ManagerManager 0.4

Привет! Вышел новый ManagerManager 0.4. Мы постарались пофиксить баги, о которых знали и всё такое. А ещё, мы наконец запустили свой репозиторий, подробнее читайте на хабре. Надеюсь, вы найдёте там как можно больше интересного для себя =)