Шорткод для простановки ссылок в редакторе, с учетом состояния ресурса
Всем привет, у меня не вопрос, а просто удобный сниппет, в другие разделы публиковать не дает, рейтинг низкий =((, не нашел ни чего подобного, поэтому пилил сам, может кому то понадобится, упрощает жизнь сеошнику при внутренней перелинковке сайта. Собственно к сути:
Сделал сниппет который получает текст где проставлены вот такие шорткоды — "[id10] анкор ссылки []" где 10 это id ресурса на который должна сформироваться ссылка, по мне так удобнее чем делать жесткую ссылку через функционал редактора в админке, часто бывает что я меняю структуру, и меняется uri страницы, еще одним удобством сделал то что если ресурс на который мы ссылаемся еще не опубликован, то ссылка игнорируется, а конструкция шорткода просто вырезается, но как только ресурс публикуется (сделали отложенную публикацию к примеру) то ссылка на него сразу появится.
Создаем сниппет в админке, называем к примеру — url_by_id
Код сниппета:
Как то так, сильно не пинайте)))
Сделал сниппет который получает текст где проставлены вот такие шорткоды — "[id10] анкор ссылки []" где 10 это id ресурса на который должна сформироваться ссылка, по мне так удобнее чем делать жесткую ссылку через функционал редактора в админке, часто бывает что я меняю структуру, и меняется uri страницы, еще одним удобством сделал то что если ресурс на который мы ссылаемся еще не опубликован, то ссылка игнорируется, а конструкция шорткода просто вырезается, но как только ресурс публикуется (сделали отложенную публикацию к примеру) то ссылка на него сразу появится.
Создаем сниппет в админке, называем к примеру — url_by_id
Код сниппета:
<?php
$text = $input;
for ($i = 1; $i <= 8; $i++) { //8 это максимальное количество обрабатываемых шорткодов, можно конечно с foreach что то придумать, но тогда нужно массив создавать заранее, не стал заморачиваться
preg_match('[id\d{1,}]', $text, $output);
$res_id = str_replace('id','',$output[0]);
if ($res_id) {
$res = $modx->getObject('modResource', $res_id);
if ($res->get('published')){
$url = $modx->makeUrl($res_id);
$link = "<a href=\"$url\">";
$seraching_string = '['.$output[0].']';
$text = str_replace($seraching_string, $link, $text);
$text = preg_replace('/\[\]/', '</a>',$text, 1);
}elseif(!$res->get('published')){
$link = "";
$seraching_string = '['.$output[0].']';
$text = str_replace($seraching_string, $link, $text);
$text = preg_replace('/\[\]/', '',$text, 1);
}
}
}
return $text;
И использование в шаблонизаторе:{$_modx->resource.content | url_by_id}
Если в текстовом редакторе сделать вот [id5]такую конструкцию[], то на фронте получится ссылка на url ресурса с id = 5, с анкором «такую конструкцию»Как то так, сильно не пинайте)))
Комментарии: 2
А почему бы не использовать [[~10]]?
[[~10]] просто вернет uri страницы с id = 10, а нужно обернуть фразу в тег «a» и подставить uri в href.
Этот сниппет не для верстки чанков, а для использования его прямо в редакторе текста типа TinyMCE или любого другого поля, которое поддерживает ввод текста
Этот сниппет не для верстки чанков, а для использования его прямо в редакторе текста типа TinyMCE или любого другого поля, которое поддерживает ввод текста
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.