Разделы

  
 

[EVO] написание плагина.

Привет, сотоварищи!

Суть проблемы такая: написал я плагин (как бы), который занимается автозаполнением одного поля, копией другого, если пусто. (Максимальная, минимальная цена.)
Я незнаю как по человечески подпихнуть данные для сохранения в форму. раньше обходился запросом в базу, но тут не катит, ибо нет id для запроса при создании нового документа и плагин вываливает ошибку SQL запроса.
Событие: OnDocFormSave

$e =& $modx->Event;
if ($e->name == 'OnDocFormSave'){
   if ($_POST['template'] == 37) {
      if (empty($_POST['tv55'])){
          $query = "INSERT INTO `site_tmplvar_contentvalues` (tmplvarid,contentid,value) VALUES (55,".$_POST['id'].",".$_POST['tv54'].")";
          $res = $modx->db->query($query);
      }
   }
}


И до кучи вопрос про плагины, который тоже давно волнует. Как отлаживать нормально плагин на событиях OnDocFormSave и OnBeforeDocFormSave. Тут был топик aloose, к которому я постоянно возвращаюсь, про проверку событий. Но этот способ безбожно глючит на данных событиях. не всегда вываливается окошко модальное с инфой, не всегда ошибки сыпятся в админку.

[Evo] Поддержка плагинов

Хочу поделиться полезной информацией о том, как можно сделать поддержку плагинов в MODX Evo для своих модулей и сниппетов. Я как раз недавно занимался поддержкой плагинов в SBShop и решил заодно восполнить пробел в документации на эту тему.

Речь пойдет о стандартной функциональности и различных практических нюансах использования. Мы будем расширять стандартный список событий в MODX своими.

Для примера:



( Читать дальше )
  • +15
  • 24 марта 2012, 21:38
  • Carw
  • 15

События для плагинов

Полным ходом идет добавление поддержки плагинов. Так как процесс получается довольно рваным (по некоторым обстоятельствам), то лучшим решением мне показалось сразу создать топик и отражать текущий процесс. Возможно у кого-то из вас появятся идеи по необходимым событиям и я с удовольствием их учту.

( Читать дальше )
  • +2
  • 17 марта 2012, 22:29
  • Carw
  • 1

Смена шаблона при генерации страницы [EVO]

Появилась необходимость переключать вывод для одного и того же документа в зависимости от наличия $_GET параметров. Можно было реализовать через сниппеты и чанки, но захотелось менять весь шаблон. В итоге был выгуглен и немного модифицирован следующий способ:

создаем новый плагин ChooseTemplate, в разделе «События» выбираем OnLoadWebDocument и OnLoadWebPageCache, и вносим такой текст плагина:


global $modx;
if ($modx->documentObject['template'] == $original_template_id 
    && isset($_REQUEST['some_get_variable'])) 
{
    $tableName = $modx->getFullTableName("site_templates");
    $modx->documentObject['template']=$alt_template_id;
    $sql = "
        SELECT * 
        FROM $tableName AS t
        WHERE t.id = '$alt_template_id'
    ";
    $result = $modx->dbQuery($sql);
    if ($row = $this->fetchRow($result)) {
      $modx->documentContent = $row['content'];
    }
}


$original_template_id и $alt_template_id — идентификаторы базового (установленного у ресурса) и альтернативного шаблонов соответственно. Их настройку можно вынести во вкладку «Конфигурация» указав в поле «Конфигурация плагина»


&original_template_id=Оригинальный шаблон (ID);text;14 &alt_template_id=Альтернативный шаблон (ID);text;7


14 и 7 — заменить на свои значения. Можно сделать больше ветвление, если надо.

UPD:

Для большего ветвления нужно всего-лишь неким образом получать ID шаблона, который нужно применить к содержимому и дальше выполнять вот этот кусок кода:


global $modx;

/*
 *   Некий код, который генерирует $new_template_id
 */

if ($new_template_id) 
{
    $tableName = $modx->getFullTableName("site_templates");
    $modx->documentObject['template']=$new_template_id;
    $sql = "
        SELECT * 
        FROM $tableName AS t
        WHERE t.id = '$new_template_id'
    ";
    $result = $modx->dbQuery($sql);
    if ($row = $this->fetchRow($result)) {
      $modx->documentContent = $row['content'];
    }
}

AddFileInfo (Revo) - Автоподстановка типа и размера файлов

AddFileInfo (beta)


Скрипт:


  1. обрабатывает содержимое (контент) и находит в нем ссылки

  2. получает http headers ссылок и создает описание на их базе

    • преобразует формат (mime) и дописывает класс ссылки

    • дописывает размер файла по шаблону

    • дописывает любой внутренний/внешний текст по шаблону


  3. создает описание всех/меченых* ссылок по шаблону

  4. если ссылка помечена как табличная* — создает двухколоночную таблицу «Ссылка — Описание»

    • в таблицу добавляются все последовательно стоящие ссылки, не разделенные иными тегами, кроме br

    • автоматически удаляются разрывы строк (br) до, после и между строками таблицы


    • * — параметры обработки задаются классом ссылки




Скачать установочный пакет — ставится через установщик пакетов (закинуть в core/packages, искать пакеты локально)


( Читать дальше )

В MODx для счастья мне не хватает...

Предлагаю открыть топик (на основании разговора с Carw) с предложениями о расширении функционала нашего любимого MODx.

После того, как наберутся предложения — провести их анализ, составить ТЗ. Далее начать сбор средств и поиск тех, кто согласится реализовать.

Вообще я даже предлагаю отдельный блог создать.
  • +4
  • 21 сентября 2010, 17:27
  • dpills
  • 37

Наборы параметров дляплагинов

Вопрос такой, как использовать наборы параметров для плагинов, например TinyMCE? Вот создаю набор, а используются все равно по-умолчанию. Подскажите плиз
  • 0
  • 9 августа 2010, 05:23
  • Solo
  • 5

как организован раздел Extras на modxcms.com?

какие (сниппеты, плагины, модули) используются?

конкретно интересует:
вывод Most Downloaded, Most Comments, Top Rated
при скачивании с репозитария файлы отдаются через страницу download пример dl.html?file=xxx т.е. не видно реального адреса файла.
как считается количество скачиваний Downloads: 1448
как осуществляется сортировка данных?

спасибо.
  • +1
  • 10 ноября 2009, 19:27
  • mattbe
  • 5