Типограф и якоря

#1 9 декабря 2016 в 15:08
То геморрой, то золотуха. smileСтолкнулся с очередной проблемой: типограф режет якоря, без типографа ссылки остаются без редиректа. Дилемма.
Надо и то, и то. Возможно ли свести к консенсусу?
#2 10 декабря 2016 в 01:53
Актуально. Какой файл отвечает за работу типогрофа, можно ли добавить исключение, чтобы якоря не вырезались?… или сделать редирект без включенного типографа?
#3 10 декабря 2016 в 14:48
/system/controllers/typograph/hooks/html_filter.php
  1. <?php
  2.  
  3. class onTypographHtmlFilter extends cmsAction {
  4.  
  5. public function run($data){
  6.  
  7. $errors = null;
  8. $is_auto_br = true;
  9. $build_redirect_link = true;
  10.  
  11. if (is_array($data)){
  12. $text = $data['text'];
  13. $is_auto_br = $data['is_auto_br'];
  14. if(isset($data['build_redirect_link'])){
  15. $build_redirect_link = $data['build_redirect_link'];
  16. }
  17. } else {
  18. $text = $data;
  19. }
  20.  
  21. return $this->getJevix($is_auto_br, $build_redirect_link)->parse($text, $errors);
  22.  
  23. }
  24.  
  25. private function getJevix($is_auto_br, $build_redirect_link){
  26.  
  27. cmsCore::loadLib('jevix.class', 'Jevix');
  28.  
  29. $jevix = new Jevix();
  30.  
  31. // Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.)
  32. $jevix->cfgAllowTags(array(
  33. 'p', 'br', 'span', 'div',
  34. 'a', 'img',
  35. 'b', 'i', 'u', 's', 'del', 'em', 'strong', 'sup', 'sub', 'hr', 'font',
  36. 'ul', 'ol', 'li',
  37. 'table', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th',
  38. 'h1','h2','h3','h4','h5','h6',
  39. 'pre', 'code', 'blockquote',
  40. 'video', 'audio', 'youtube','facebook',
  41. 'object', 'param', 'embed', 'iframe'
  42. ));
  43.  
  44. // Устанавливаем коротие теги. (не имеющие закрывающего тега)
  45. $jevix->cfgSetTagShort(array(
  46. 'br', 'img', 'hr', 'embed'
  47. ));
  48.  
  49. // Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности)
  50. $jevix->cfgSetTagPreformatted(array(
  51. 'pre', 'video'
  52. ));
  53.  
  54. // Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом.
  55. $jevix->cfgSetTagCutWithContent(array(
  56. 'script', 'style', 'meta'
  57. ));
  58.  
  59. $jevix->cfgSetTagIsEmpty(array(
  60. 'param','embed','a','iframe','div'
  61. ));
  62.  
  63. // Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров.
  64. $jevix->cfgAllowTagParams('a', array('href' => '#link', 'name' => '#text', 'target' => '#text', 'class' => '#text'));
  65. $jevix->cfgAllowTagParams('img', array('src', 'style' => '#text', 'alt' => '#text', 'title' => '#text', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int', 'class' => '#text'));
  66. $jevix->cfgAllowTagParams('span', array('style' => '#text'));
  67. $jevix->cfgAllowTagParams('object', array('width' => '#int', 'height' => '#int', 'data' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com','vk.com')), 'type' => '#text'));
  68. $jevix->cfgAllowTagParams('param', array('name' => '#text', 'value' => '#text'));
  69. $jevix->cfgAllowTagParams('embed', array('src' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com','vk.com')), 'type' => '#text','allowscriptaccess' => '#text', 'allowfullscreen' => '#text','width' => '#int', 'height' => '#int', 'flashvars'=> '#text', 'wmode'=> '#text'));
  70. $jevix->cfgAllowTagParams('iframe', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'frameborder' => '#int', 'allowfullscreen' => '#text', 'src' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com','vk.com','my.mail.ru','facebook.com'))));
  71. $jevix->cfgAllowTagParams('table', array('width' => '#int', 'height' => '#int', 'cellpadding' => '#int', 'cellspacing' => '#int', 'border' => '#int', 'style' => '#text', 'align'=>'#text', 'valign'=>'#text'));
  72. $jevix->cfgAllowTagParams('td', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'align'=>'#text', 'valign'=>'#text', 'colspan'=>'#int', 'rowspan'=>'#int'));
  73. $jevix->cfgAllowTagParams('th', array('width' => '#int', 'height' => '#int', 'style' => '#text', 'align'=>'#text', 'valign'=>'#text', 'colspan'=>'#int', 'rowspan'=>'#int'));
  74. $jevix->cfgAllowTagParams('p', array('style' => '#text'));
  75. $jevix->cfgAllowTagParams('div', array('style' => '#text', 'class' => '#text'));
  76.  
  77. // Устанавливаем параметры тегов являющиеся обязательными. Без них вырезает тег оставляя содержимое.
  78. $jevix->cfgSetTagParamsRequired('img', 'src');
  79. $jevix->cfgSetTagParamsRequired('a', 'href');
  80.  
  81. // Устанавливаем теги которые может содержать тег контейнер
  82. $jevix->cfgSetTagChilds('ul',array('li'),false,true);
  83. $jevix->cfgSetTagChilds('ol',array('li'),false,true);
  84. $jevix->cfgSetTagChilds('table',array('tr', 'tbody', 'thead', 'tfoot', 'th', 'td'),false,true);
  85. $jevix->cfgSetTagChilds('tbody',array('tr', 'td', 'th'),false,true);
  86. $jevix->cfgSetTagChilds('thead',array('tr', 'td', 'th'),false,true);
  87. $jevix->cfgSetTagChilds('tfoot',array('tr', 'td', 'th'),false,true);
  88. $jevix->cfgSetTagChilds('tr',array('td'),false,true);
  89. $jevix->cfgSetTagChilds('tr',array('th'),false,true);
  90.  
  91. // Устанавливаем автозамену
  92. $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(с)', '(r)', '(C)', '(С)', '(R)'), array('±', '©', '©', '®', '©', '©', '®'));
  93.  
  94. // включаем режим замены переноса строк на тег <br/>
  95. $jevix->cfgSetAutoBrMode($is_auto_br);
  96.  
  97. // включаем режим автоматического определения ссылок
  98. $jevix->cfgSetAutoLinkMode(true);
  99.  
  100. // если нужно обрабатывать внешние ссылки в редирект
  101. if($build_redirect_link){
  102. $jevix->cfgSetTagCallbackFull('a', array($this, 'linkRedirectPrefix'));
  103. }
  104.  
  105. // Отключаем типографирование в определенном теге
  106. $jevix->cfgSetTagNoTypography('pre','youtube', 'iframe');
  107.  
  108. // Ставим колбэк для youtube
  109. $jevix->cfgSetTagCallbackFull('youtube', array($this, 'parseYouTubeVideo'));
  110.  
  111. // Ставим колбэк для facebook
  112. $jevix->
#4 10 декабря 2016 в 14:51
  1. $jevix->cfgAllowTagParams('a', array('href' => '#link', 'name' => '#text', 'target' => '#text', 'class' => '#text'));
заменить на
  1. $jevix->cfgAllowTagParams('a', array('href' => '#link', 'name' => '#text', 'id' => '#text', 'target' => '#text', 'class' => '#text'));
#5 10 декабря 2016 в 15:27
Fuze, благодарю! С id вопрос решен.
Но якоря по прежнему режет. Здесь одна строка мешает, устанавливающая href, как обязательный атрибут для ссылки..

Можно ли удалить без последствий?
  1. $jevix->cfgSetTagParamsRequired('a', 'href');
#6 15 октября 2019 в 11:39


Можно ли удалить без последствий?

  1. $jevix->cfgSetTagParamsRequired('a', 'href');

Pasechnik
Если ты удалишь хреф то как ты будешь переходить на якорь? stuk
  1. <a href="#syda"> К врачу </a> если геморой <a id="syda"> Геморой?</a>
#7 15 октября 2019 в 13:11


Fuze
Тут другой геморой, при добавлении ссылки на якорь он дублирует ее сам дальше по тексту между тегами <p> или вот так вставляет <="" a=""> хрень какую то. С этим как бороться?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.