Как добавить новый в ICMS2?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Давайте сделаем инструкцию

#1 27 октября 2017 в 17:41
В системе есть некоторое количество предустановленных HTML-тегов, которые используются в сообщениях и в редакторах, например: <b>, <i>, <youtube>, <spoiler> и др. Но нигде я не нашёл инструкции, как добавить свои.
Вот, например, есть необходимость добавить тег <gpsies> для сервиса gps-треков GPSies.com. Ссылка на страницу трека имеет вид (пример):

  1. https://www.gpsies.com/map.do?fileId=nxphyavinzgopchw
код для страницы соответственно:

  1. <iframe src="//www.gpsies.com/mapOnly.do?fileId=nxphyavinzgopchw" width="600" height="400" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
За обработку тегов отвечает файл типографа system\controllers\typograph\hooks\html_filter.php, но править системные файлы не есть хорошо/правильно. Отсюда вопрос, подскажите, как правильно реализовать свой хук по сабжу? Хорошо бы сделать подробную пошаговую инструкцию. Пригодится многим.
#2 27 октября 2017 в 19:20
ParadoX,
Хук на то и хук, чтобы разработчики могли добавлять свои хуки и отключать существующие.
Все людям! Все для их удобства!
Просто делаете в той же папке копию хука, например с именем html_filter2.php
Заменяете в \system\controllers\typograph\manifest.php строку 'html_filter' на 'html_filter2' в хуке html_filter2.php конечно имя класса подправить на onTypographHtmlFilter2.
И все. Обновляете список событий в админке и правите хук html_filter2.php сколько хотите.
#3 28 октября 2017 в 12:26
Ris, благодарю вас за совет! Всё получилось.
Для тех, кто хочет добавить себе тег <gpsies> (актуально для туристов, велосипедистов, мотоциклистов и просто путешественников), вот инструкция:

1. Дублируем html_filter.php, как в предыдущем сообщении от Ris

2. В полученном файле найти (~42 строка):
  1. $jevix->cfgAllowTags(array(
после всех тегов перед )); добавить
  1. , 'gpsies'
Обратите внимание, что после последнего тега не должно быть запятой!

3. Далее найти (~82 строка)
  1. $jevix->cfgAllowTagParams('iframe', array(
далее в этой же строке найти
  1. 'src' => array('#domain'=>array(
перед ним добавить
  1. , 'scrolling' => '#text', 'marginheight' => '#text', 'marginwidth' => '#text',
далее в этой же строке найти
  1. 'youtube.com'
перед ним добавить
  1. 'gpsies.com',
4. Далее найти (~119 строка)
  1. // Отключаем типографирование в определенном теге
  2. $jevix->cfgSetTagNoTypography('pre','youtube', 'iframe'
сразу после добавить
  1. , 'gpsies'
5. Далее найти (~134 строка)
  1. // Ставим колбэк для спойлеров
  2. $jevix->cfgSetTagCallbackFull('spoiler', array($this, 'parseSpoiler'));
после, на следующей строке добавить
  1. // Ставим колбэк для gpsies
  2. $jevix->cfgSetTagCallbackFull('gpsies', array($this, 'parseGpsies'));
6. В самом конце файла перед последней } добавить
  1. // Обработчик html-тега <gpsies>
  2. public function parseGpsies($tag, $params, $content){
  3.  
  4. $video_id = $this->parseGpsiesID(trim(strip_tags($content)));
  5.  
  6. return $this->getGpsiesCode('//www.gpsies.com/mapOnly.do?fileId='.$video_id);
  7.  
  8. }
  9.  
  10. private function getGpsiesCode($src) {
  11. return '<div class="video_wrap"><iframe class="video_frame" src="'.$src.'" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe></div>';
  12. }
  13.  
  14. private function parseGpsiesID($url) {
  15.  
  16. $pattern = '#^(?:(?:https|http)?://)?(?:www\.)?(?:gpsies\.com(?:/map\.do\?fileId=))([\w-]{16})(?:.+)?$#x';
  17. preg_match($pattern, $url, $matches);
  18. return (isset($matches[1])) ? $matches[1] : false;
  19.  
  20. }
Далее всё ещё раз проверяем, в т.ч. синтаксис и запятые. Ну и на этом всё)
Если вам нужно сделать обработчик для собственного тега, делаем всё по аналогии. Удачи.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.