Skip to content
  1. Готовые решения
  2. Полезные скрипты
  3. Плагин показа ссылок на файловые шаблоны

Плагин показа ссылок на файловые шаблоны

Создаём новый плагин на событие OnTempFormPrerender:

php
<?php
$eventName = $modx->event->name;
switch ($eventName) {
  case 'OnTempFormPrerender':
    $root_dir = $modx->getOption('base_path');
    $elements_path = $modx->getOption('pdotools_elements_path');
    $elements_url = str_replace($root_dir, '', $elements_path);
    $output = '
      <script>
        Ext.onReady(function() {
          var openModalWindow = function() {
            const templateCode = document.querySelector(`#x-form-el-modx-template-content [name="content"]`).value;
            const regex = /(?:extends|include)\s+\'file:([^\']+)\'/g;
            let m;
            const listLinks = [];
            while ((m = regex.exec(templateCode)) !== null) {
              if (m.index === regex.lastIndex) { regex.lastIndex++; }

              m.forEach((match, groupIndex) => {
                if(groupIndex === 1) {
                  listLinks.push(`
                  <a class="x-btn x-btn-small" href="?a=system/file/edit&file='.$elements_url.'${match}" target="_blank">
                    <span class="icon icon-file-text"></span> ${match}
                  </a>
                  `)
                }
              });
            }
            var win = new Ext.Window({
              title: "Fenom файлы шаблона",
              width: 600,
              height: 300,
              layout: "fit",
              modal: true,
              items: [
                {
                  xtype: "panel",
                  html: `<div style="display: flex; flex-direction: column; gap: .5rem;">${listLinks.join("")}</div>`
                }
              ]
            });
            win.show();
          };

          var addButton = function() {
            var toolbar = Ext.getCmp("modx-action-buttons");
            if (toolbar) {
              toolbar.insertButton(0, {
                xtype: "button",
                text: `<i class="icon icon-file-text"></i> Файлы шаблона`,
                handler: openModalWindow,
                cls: "red-button",
              });
              toolbar.doLayout();
            }
          };

          addButton();
        });
      </script>
    ';
    $modx->controller->addHtml($output);
    break;
}
<?php
$eventName = $modx->event->name;
switch ($eventName) {
  case 'OnTempFormPrerender':
    $root_dir = $modx->getOption('base_path');
    $elements_path = $modx->getOption('pdotools_elements_path');
    $elements_url = str_replace($root_dir, '', $elements_path);
    $output = '
      <script>
        Ext.onReady(function() {
          var openModalWindow = function() {
            const templateCode = document.querySelector(`#x-form-el-modx-template-content [name="content"]`).value;
            const regex = /(?:extends|include)\s+\'file:([^\']+)\'/g;
            let m;
            const listLinks = [];
            while ((m = regex.exec(templateCode)) !== null) {
              if (m.index === regex.lastIndex) { regex.lastIndex++; }

              m.forEach((match, groupIndex) => {
                if(groupIndex === 1) {
                  listLinks.push(`
                  <a class="x-btn x-btn-small" href="?a=system/file/edit&file='.$elements_url.'${match}" target="_blank">
                    <span class="icon icon-file-text"></span> ${match}
                  </a>
                  `)
                }
              });
            }
            var win = new Ext.Window({
              title: "Fenom файлы шаблона",
              width: 600,
              height: 300,
              layout: "fit",
              modal: true,
              items: [
                {
                  xtype: "panel",
                  html: `<div style="display: flex; flex-direction: column; gap: .5rem;">${listLinks.join("")}</div>`
                }
              ]
            });
            win.show();
          };

          var addButton = function() {
            var toolbar = Ext.getCmp("modx-action-buttons");
            if (toolbar) {
              toolbar.insertButton(0, {
                xtype: "button",
                text: `<i class="icon icon-file-text"></i> Файлы шаблона`,
                handler: openModalWindow,
                cls: "red-button",
              });
              toolbar.doLayout();
            }
          };

          addButton();
        });
      </script>
    ';
    $modx->controller->addHtml($output);
    break;
}

Информация

Если при сохранении файла .tpl выскакивает ошибка, то надо разрешить сохранение файлов данного типа добавив расширение tpl в системную настройку upload_files

Теперь на странице редактирования шаблона появится кнопка, по нажатию которой будет показываться кликабельный список файловых шаблонов:

Вид кнопки файлов шаблона

Вид выводимого списка файлов шаблона