Ссылка на редактирование TV поля в админке MODX
Проработав c MODX около 5 лет я так и не нашел готового решения, как можно сделать ссылку на переход к редактированию TV поля непосредственно из ресурса, перебрал несколько плагинов для админки из репозитория, но ни кто из них не включал такую возможность в свой функционал (может я конечно плохо искал), что бы редактировать TV пользовался поиском MODX в админке (он очень неплохой кстати), вводя туда начало названия TV, которое видно при наведении на него, затем открывал его в новой вкладке уже из поиска. На скрине показываю как я ранее переходил к редактированию поля:
Создадим плагин который добавит JS код к странице в админке
Создаем плагин с названием «link2tv» (хотя это не важно, запуск будет по событию) Добавляем туда код который ниже, суть скрипта в том что он по системному событию OnDocFormPrerender подключает js скрипт который пробегается по html коду страницы и ищет элементы с классом modx-tv-caption и уже внутри этого формирует ссылку на редактирование поля по его id, в скрипте есть комментарии, можно почитать, кто знает JS тот может что то подправить или что то узнать новое.
<?php
if ($modx->event->name == 'OnDocFormPrerender') {
$modx->regClientStartupHTMLBlock('
<script>
Ext.onReady(function() {
// Пройдём по всем элементам с классом "modx-tv-caption"
Ext.select(".modx-tv-caption").each(function(element) {
var tvCaptionId = element.id; // id caption, например "tv202-caption"
var tvId = tvCaptionId.replace("-caption", ""); // id TV, например "tv202"
// Создаём иконку редактирования
var editIcon = document.createElement("i");
editIcon.className = "icon icon-edit";
editIcon.style.cursor = "pointer";
editIcon.style.marginLeft = "10px";
editIcon.title = "Edit TV";
// URL для редактирования TV
var editUrl = "' . $modx->getOption('manager_url') . '?a=element/tv/update&id=" + tvId.replace("tv", "");
// Добавляем обработчик клика
editIcon.onclick = function() {
window.open(editUrl, "_blank");
};
// Добавляем иконку после названия TV-поля
element.dom.appendChild(editIcon);
// Добавляем Tooltip с названием TV
new Ext.ToolTip({
target: tvCaptionId,
html: element.dom.innerText
});
});
});
</script>
');
}
Что бы скрипт сробатывал после рендера страницы вешаем его на событие OnDocFormPrerender, конечно «вешаем» громко сказано, открываем вкладку у плагина «Системные события» и в поиске находим «OnDocFormPrerender» — ставим галочку напротив.
Не забываем обновить кэш в админке, в том числе через Ctrl+F5
Результат работы плагина
Итак наш костыль в деле. Теперь в режиме редактирования ресурса в MODX во вкладке TV поля у каждого поля появится значок в виде карандаша которым тычут в квадратик, это и есть ссылка которая ведет на страницу редактирования этого TV поля, такой костыль способ сэкономил мне кучу времени при разработке сайтов корпоративных сайтов, я быстро могу отредактировать поле или скопировать его название что бы получить его содержимое в шаблоне
Этот плагин я тестировал в течении пары месяцев прежде им поделиться, ни каких глюков и конфликтов вроде бы обнаружено не было, поэтому делюсь.
Возможно есть какой то другой более простой способ быстро редактировать тв поля, но я его не нашел на форумах, возможно когда у меня появится время и я прикручу комментарии к этому блогу и там вы сможете как следует мне рассказать какой я криворукий разработчик=)), но пока что просто примите как есть, это мои идеи и удобства, а автоматизацию я люблю больше всего, даже на клиентских проектах я делаю функционал максимально независящий от человеческого фактора и кривых рук контент-менеджеров