+1.13
137 читателей, 237 топиков

[EVO] globalPlaceholders - модуль глобальных плейсхолдеров, tv и настроек.

Всем доброго времени суток.
Мне наконец надоело заниматься заполнением глобальных настроек через базу и разные быстрые решения. Было решено пошустрому собрать модуль + плагин для редактирования статичных данных которые часто раскиданы по чанкам и разным страницам. В общем собрал все в одно место. Настройка может подменять и плейсхолдер и тв. Редактируется удаляется переименуется все из модуля.

Весь код находится на гите. Предложения и вопросы можно тут а можно и в разделе ошибок на гитхабе.

Модуль работает на версиях 5.2 и выше. В остальном я думаю никаких ограничений нет, но я не ручаюсь т.к. не тестил на других сборках.

Что может модуль:
1) создавать новые настройки в базе system_settings с префиксом global_
2) редактировать эти настройки из модуля.
3) рассовывать настройки по разным группам.
4) присваивать настройкам разные типы редактирования (чекбокс, изображение, файл и т.д.). Селекты как обычно поддерживают стандартный вариант заполнения значений (1||2||3 и 1==имя1||2==имя2). В дальнейшем наполнится возможными типами редактирования.
5) естественно возможность удалять настройки с префиксом global_
6) Есть возможность при помощи плагина подменять [* и [+ на значение настройки. (пример есть настройка global_sitePhone, при выставлении параметров подмены будет доступен в качестве [*sitePhone*] и [+sitePhone+]. Если значение является массивом то доступ к нему как к массиву можно получить через [(sitePhone)]). Удобно если нужно перевести старый проект на этот модуль а вычищать и менять все вызовы тв на вызовы настройки нет желания, как мне :)

Планируется добавить поддержку мультитв и множественного изображения.

Что могут плагины
gPHParser:
1) Парсит глобальные настройки с префиксом global_ отчищает их от шелухи и кладет на место уже без префикса.
2) Раскладывает настройки в зависимости от выбранных типов доступности (плейсхолдер — gPH, ТВ — gTV, настройка — по умолчанию всегда)
3) Если включен frontEditor в настройках то оборачивает все текстовые настройки в div для указания что этот текст можно править.

Плагин вызывается по событию onParseDocument, подмена обрабатывается только один раз, при первом проходе парсера. В последующие проходы парсера они доступны уже во всех положенных местах.

gPHFrontEditor:
1) Добавляет скрипты на страницу для активации фронтэдитора.
2) Активирует доступные к редактированию изображения ссылки видео.
3) Сохраняет новые данные после редактирования.
4) Скидывает кеш страниц т.к. редактор виден обычным пользователям. (нужно сделать сброс кеша исключительно данной страницы ибо выходит немного накладно)

Плагин вызывается по событию onWebPageInit, сброс кеша происходит по событию onWebPageComplete.

Немного скриншотов.




Ссылка на видео

Кому интересно можете покопаться на гите)

UPD 10/03

Создавать настройку с пустым именем нельзя.
Группа назначается автоматом если группа не была выбрана и новая не была указана.
Имена настроек транслитируются на английскую раскладку.
Добавлен ричтекст. Ричтекст рендерится на основании дефолтного. Если у вас в настройках выставлено отсутствие ричтекста то будет выводится большая текстареа.
Поправлены небольшие баги. Проведены небольшие доработки кода.
Добавлен префикс в плагин. Теперь можно не перезаписывать существующие плейсхолдеры и тв. По дефолту префикс «g.»

UPD 10/03

Поправил багу с пересохранением значения ричтекста.
Добавил поддержку разделения настроек по табам исходя из группы.

UPD 15/03

Добавлена запись глобальной настройки вида g_[%option_name%] для доступа к настройке без плагина.
Добавлена настройка позиции для группирования настроек.
Поправлены баги с сохранением текста содержащего переносы строк в базу. (Будет еще допиливаться для сохранения переносов т.к. сейчас они просто вытираются)
Добавлен пользовательский шаблон для вывода настройки, в пользовательском шаблоне не выводится имя настройки а только описание.

UPD 27/03

Сделал простенький фронтенд редактор для настроек. Редактор может править тексты (рич, инпуты, текстареа) работать с тегом видео, изображения, ссылки. Т.е. можно менять изображения текста видео ссылки на файлы и видео прям на живую с фронта.
Немного поправил код плагинов и модуля.
Добавил обработку переносов строки для текстареа. Теперь на фронте они как br а в самой текстареа как \r\n.

UPD 30/03

Полностью убран конфиг модуля. Вместо него теперь полноценная страница настройки в модуле.
Поправлены мелкие недочеты с логикой и всякие мелочи типа общей группы.
Добавлен евент OnWebPageComplete в котором скидывается кеш. Сделано для того чтобы веб пользователь не видел скешированную после плагина страницу (потом переделаю во что-то более путное).
Добавлены конфиги в установочные файлы. Теперь модуль и плагины доступны в Extras в качестве одного пакета.

mm_ddMultipleFields: Новые возможности, вошедшие в modx v1.1

  1. Дополнительные элементы управления:
    Дополнительные элементы управления
    • Очистка всех значений
    • Сброс значений на исходные
    • Пакетное заполнение (для изображений)
    • Копирование строки
    • Копирование строки
  2. Возможность пакетного заполнения изображениями
    Возможность пакетного заполнения изображениями
  3. Дополнительные опции (параметр $options в формате массива или строки JSON)
    • sortable: включение/отключение возможности сортировки (по умолчанию включен)
    • showIndex: отображение номера строки ((по умолчанию включен))
    • btnToggleRaw: кнопка RAW — включения/выключения оригинального поля, что дает возможность скопировать и вставить все значение.
  4. Возможность копирования/экспорта (простейший вариант, пока) посредством отображения кнопки RAW
    Возможность копирования/экспорта
    После вставки значения, необходимо нажать кнопку ⎌ — сброс для применения и дальнейшего редактирования
  5. Подсказки в заголовках столбцов.
    Подсказки в заголовках
    Подсказки добавляются после двух двоеточий в параметре $columnsTitle
    mm_ddMultipleFields('gallery', '', '', 'image,text,text', 'Изображение,Название::Название будет использовано в теге alt,Описание');
    

  6. Для типа поля select, возможность указать значение по умолчанию.
    Пример Yes — по умолчанию:
    '[['','No selected'],['0','No'],['1','Yes',1]]'


UPD (26.05.16).
Описанное выше разработано не студией DivanDesign и на момент написания не принято в репозитарий студии (см PR #2).

Разработка ведется и доступна в форках:
github.com/MrSwed/MODXEvo.plugin.ManagerManager.mm_ddMultipleFields — только mm_ddMultipleFields (Актуальная версия)
github.com/MrSwed/MODXEvo.plugin.ManagerManager — весь MM (также отличается от DivanDisign )

в основном репозитарии Modx — только то, что вошло на момент релиза
в ветке develop основного репозитария — исправления и дополнения.

Баргепорт репозитария: github.com/MrSwed/MODXEvo.plugin.ManagerManager.mm_ddMultipleFields/issues Сюда же принимаются Pull Requests

Документация разработки
github.com/MrSwed/MODXEvo.plugin.ManagerManager.mm_ddMultipleFields/wiki

Multi Choice - Переработка Choise TV для множества чекбоксов

Иногда нужно типовые параметры добавлять чекбоксами и не всегда знаешь сколько их будет и какие они. Давно не доходили руки, а вот теперь сделал переработку Диминого ChoiseTV под чекбоксы.

Собственно вот



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

moveMODX - перенос сайта MODX Evo с хостинга на хостинг

Так как собираю довольно много сайтов и всегда приходиться переносить с тестового хостинга на боевой. Решил наконец-то облегчить эту задачку. Создал скрипт автоматического переноса:)

Указываем ему данные: FTP + MySql и все остальное он делает сам:


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

[EVO] Новый шаблон для MODx - MODxPress

Всем привет. Решил выйти из ридонли.
Не для кого не секрет что админка Evo устарела еще 10 лет назад. По сему нужно что-то делать для комфортной работы с админкой на планшетах и мобилках. За день на коленке был собран новый шаблон для админки который по своему принципу очень похож на админку WordPress (да и по дизайну почти слизан с нее). Просьба не кидаться тапками, мол фу, WordPress… Админка у них явно удобней и выглядит лучше чем у нашего любимого Evo.





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

[EVO] Кастомный TV в виде симпатичного переключателя состояния

В рамках работы над модулем интернет-магазина TSVshop появилась потребность сделать симпатичный Custom TV — switch переключатель состояния для документов MODx. Этот параметр работает как тумблер: либо включает, либо выключает значение. Соответственно, значение этого TV-параметра будет либо 1, либо 0.

Вот, решил поделиться с сообществом.

Вот как выглядит этот переключатель:

Внешний вид Switch customTv

Настройка совсем простая:

1) Размещаем содержимое архива в корень сайта
2) Создаем TV-параметр с произвольным названием и описанием.
3) Тип ввода — switch
4) Назначаем его нужному шаблону.
5) Все остальные поля оставляем пустыми

Скачать можно здесь: https://github.com/Serg28/switch-custom-tv/archive/master.zip

EvoModal - всплывающее окна и горячие клавиши ))



Думаю вместо слов проще глянуть видео:
www.youtube.com/watch?v=8SxcnILzQa0

Пожелания по доработкам сюда:
github.com/extras-evolution/evomodal/

Скачать можно там же или установить через Репозиторий Extras.

[EVO] Новая версия модуля TSVshop 5.4

Рад объявить о выпуске новой версии TSVshop 5.4. Узнать подробнее и скачать можно по ссылке https://github.com/Serg28/tsvshop/releases/tag/v5.4

Новое:

  1. В TSVshop появилась возможность добавлять в корзину к товару (а также в письма клиенту и менежеру) произволные TV-параметры товара. Для этого нужно вставить в вызов TSVshop параметр &tvs с перечислением имен нужных TV-параметров, а выводить их в чанках с помощью плейсхолдера [+tv.имяtv+]. Например, чтобы вывести у товара TV с именем color, достатойно добавить в всех вызовах TSVshop паарметр &tvs=`color` и в чанке вставить [+tv.color+].
  2. Добавлен сниппет TSVshopLastViews, позволяющий отображать историю просмотренных товаров
  3. В сниппете TSVshop теперь добавлен новый режим: &act=`printorder`, который отвечает за печать накладной/товарного чека для пользователя (если это предусмотрено менеджером). Все что нужно – создать отдельную страницу в дереве документов и вставить в нее вызов TSVshop с параметром &act=`printorder`.
  4. В модуле в списке заказов и при просмотре конкретного заказа появилась кнопка Распечатать накладную (печать товарного чека/накладной), шаблон которой по умолчанию берется из файла assets/snippets/tsvshop/addons/sales/tpl/Shop_PrintOrder.tpl. Ту же самую функцию исполняет чанк Shop_PrintOrder, который идет в комплекте с модулем. Все описания плейсхолеров читайте в документации или в подсказках в режиме редактирования чанка Shop_PrintOrder.
  5. Теперь в поле E-mail отправителя (менеджера) можно задавать несколько адресов через запятую.
  6. Теперь почтовые настройки модуля TSVshop берутся из настроек МОДх, только некоторые настройки (почта менеджера, тема писем, имя отправителя) остались в настройках модуля.
  7. В сниппете TSVoffice
    1. Введена пагинация;
    2. Добавлена поддержка работы с плагином продажи файлов (если установлен плагин TSVshopDownloads, в личном кабинете автоматически появляются ссылки на купленные файлы, если заказ оплачен);

    3. Можно удалять свои неоплаченные заказы

  8. Исправления

    1. Решена проблема с отправкой писем – теперь они отправляются корректно.
    2. Исправлена ошибка, когда не срабатывали системные события при работе корзины в режиме AJAX.
    3. Переименованы названия некоторых полей в настройках почты: теперь поле E-mail отправителя: называется E-mail отправителя (менеджера).
    4. Добавлены/переименованы некоторые плейсхолдеры – смотрите документацию или подсказки в режиме редактирования.

301 Редирект при переключении вложенности URL

Понадобилось мне отключить вложенность дружественных ссылок на работающем сайте, хорошо проиндексированном и активно развивающемся. Однако простое отключение приводит к переходам с ошибкой 404. Посчитав, что правильнее их перенаправлять с 301 редиректом, я решил написать маленький и довольно таки простенький плагин для этой цели, ну а раз плагин, то и работоспособность его задавать в обе стороны.


global $modx;
$q = preg_replace('@' . $modx->config["friendly_url_suffix"] . '$@', '', $_REQUEST['q']);
$tmp = explode('/', $modx->db->escape($q));
$alias = end($tmp);
$query = explode("?",$_SERVER["REQUEST_URI"],2);
$query = !empty($query[1])?$query[1]:''; 
$rs = $modx->db->select('id', $modx->getFullTableName('site_content'), "alias='{$alias}'".($_SESSION['mgrRole']!=1?" and deleted=0 and published=1":""));
$id = $modx->db->getValue($rs);
if ($id) {
	$url = $modx->makeUrl($id,'',$query);
	$modx->sendRedirect($url, 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
	exit();
}


Установка как обычно, повесить на событие OnPageNotFound.

Стоит отметить, что перенаправление будет срабатывать если алиасы ресурсов не изменялись.

gist.github.com

Обновлено: Учтены удаленные и не опубликованные страницы, а также остальные _GET параметры, которые могут быть в ссылке.

[EVO] Сниппет для создания QR-код

Приветствую всех!

Решил написать небольшой сниппет для создания QR-кода. Иногда это нужно в некоторых проектах, особенно для пользователей мобильными устройствами.

Данный сниппет был создан в рамках проекта модуля для создания интернет-магазина TSVshop. Но совершенно ничего не мешает использовать его отдельно.

Для реализации работы скрипта был взят за основу класс разработки Omar Eduardo Ortiz Garza <oortiz@tbanc.com>. Сниппет генерирует картинку кода, сохраняет ее во временную папку и возвращает путь к картинке. Установка простая:

1) Размещает содержимое архива в корень сайта.
2) Создаем сниппет TSVqr с таким кодом:

<?php
require_once(MODX_BASE_PATH."assets/snippets/TSVqr/qr.snippet.php");
?>


3) Вставляем вызов сниппета в тег картинки примерно так:
<img src="[[TSVqr? &text=`текст` &format=`GIF`]]" alt="" />

Формат результирующей картинки &format может быть GIF, PNG, JPG. По-умолчанию GIF.

На возможный вопрос о том, почему сниппет возвращает путь к картинке, а не саму картинку, отвечу: для отделения кода от визуального представления. Легче будет указать нужные параметры тега картинки, обернуть ее любым HTML. Тем более что сниппет изначально планировался очень простым и нет желания запихивать в него лишний код.

Скачать сниппет можно здесь: https://github.com/Serg28/TSVqr/archive/master.zip