Заголовок для ссылки из названия поля и ссылка в виде кнопки

+2
712
Заголовок для ссылки из названия поля и ссылка в виде кнопки

Небольшой хак для того что бы не писать каждый раз заголовок для ссылок если он каждый раз одинаковый и оформление ссылок в виде кнопки

Изображение

По сути небольшое изменение в файле url.php и добавление стилей 

заголовок ссылки можно брать из названия поля или как и раньше через знак "|", например: yandex.ru|Яндекс так же можно включить вид кнопки 

Изображение

В принципе можно схитрозадить и не лезть в css тк так же изменено поле CSS класс ссылки и можно задать стиль тут по типу

" style=«border:1px solid #c4c4c4; height:31px;

Изображение

или использовать данное поле так же как дополнительный класс или дополнительный стить   style=»

КАк то так, не могу сказать что я уверен что все по феншую, делал для себя потому чито бесит вводить название для ссылок, у меня с десяток полей и они всегда одинаковые,  да и вид у ссылок ..

блин кнопки спойлера не хватат

  1. <?php
  2.  
  3. class fieldUrl extends cmsFormField {
  4.  
  5. public $title = LANG_PARSER_URL;
  6. public $sql = 'varchar({max_length}) NULL DEFAULT NULL';
  7. public $filter_type = 'str';
  8. public $allow_index = false;
  9. public $var_type = 'string';
  10.  
  11. public function getOptions(){
  12. return array(
  13. new fieldCheckbox('redirect', array(
  14. 'title' => LANG_PARSER_URL_REDIRECT,
  15. 'default' => false,
  16. 'is_visible' => cmsController::enabled('redirect')
  17. )),
  18. new fieldCheckbox('auto_http', array(
  19. 'title' => LANG_PARSER_URL_AUTO_HTTP,
  20. 'default' => true
  21. )),
  22. new fieldNumber('max_length', array(
  23. 'title' => LANG_PARSER_TEXT_MAX_LEN,
  24. 'default' => 500
  25. )),
  26. new fieldCheckbox('nofollow', array(
  27. 'title' => LANG_PARSER_URL_NOFOLLOW,
  28. 'default' => false
  29. )),
  30. new fieldCheckbox('button', array(
  31. 'title' => LANG_PARSER_URL_BOOTON,
  32. 'default' => false
  33. )),
  34. new fieldCheckbox('zagolovok', array(
  35. 'title' => LANG_PARSER_URL_ZAGOLOVOK,
  36. 'default' => false
  37. )),
  38. new fieldCheckbox('title', array(
  39. 'title' => LANG_PARSER_URL_TITLE,
  40. 'default' => false
  41. )),
  42. new fieldString('css_class', array(
  43. 'title' => LANG_PARSER_URL_CSS_CLASS,
  44. 'rules' => array(
  45. array('max_length', 500)
  46. )
  47. ))
  48. );
  49. }
  50.  
  51. public function getStringValue($value){
  52.  
  53. if (!$value) {
  54. return '';
  55. }
  56.  
  57. if ($this->getOption('title') && strpos( $value, '|') !== false){
  58.  
  59. $result = explode('|', $value);
  60.  
  61. if(!empty($result[1])){
  62. $value = trim($result[1]);
  63. }
  64. }
  65.  
  66. return $value;
  67. }
  68.  
  69. public function parse($value) {
  70.  
  71. if (!$value) {
  72. return '';
  73. }
  74.  
  75. if (!$this->getOption('title') && strpos($value, '|') === false) {
  76.  
  77. $href = $value;
  78.  
  79. } else {
  80.  
  81. $result = explode('|', $value);
  82.  
  83. $href = trim($result[0]);
  84.  
  85. if (!empty($result[1])) {
  86. $value = trim($result[1]);
  87. }
  88. }
  89.  
  90. if ($this->getOption('auto_http')) {
  91. if (!preg_match('/^([a-z]+):\/\/(.+)$/i', $href)) {
  92. $href = 'https://' . $href;
  93. }
  94. }
  95.  
  96. if ($this->getOption('redirect') && cmsController::enabled('redirect')) {
  97. $href = href_to('redirect') . '?url=' . urlencode($href);
  98. }
  99.  
  100. $nofollow = $class = '';
  101.  
  102. if ($this->getOption('nofollow')) {
  103. $nofollow = ' nofollow';
  104. }
  105.  
  106. if ($this->getOption('css_class')) {
  107. $class = $this->getOption('css_class');
  108. }
  109.  
  110. if ($this->getOption('button')) {
  111. $kbutton = ' kbutton';
  112. }
  113.  
  114. if ($this->getOption('zagolovok') && cmsController::enabled('zagolovok')) {
  115.  
  116. return '<a rel="noopener' . $nofollow . '" target="_blank" ' . ' class=" '. $class . $kbutton . '" href="' . html($href, false) . '">' . $this->title . '</a>';
  117.  
  118. } else
  119. {
  120. return '<a rel="noopener' . $nofollow . '" target="_blank" ' . ' class="'. $class . $kbutton .'" href="' . html($href, false) . '">' . html($value, false) . '</a>';
  121. }
  122.  
  123. }
  124.  
  125. public function applyFilter($model, $value) {
  126. return $model->filterLike($this->name, "%{$value}%");
  127. }
  128.  
  129. public function store($value, $is_submitted, $old_value = null) {
  130. return strip_tags($value);
  131. }
  132.  
  133. public function storeFilter($value) {
  134. return $this->store($value, false);
  135. }
  136.  
  137. }
  138.  

два архива один в виде хака а второй как самостоятельное поле

Прикреплённый файл:
Скачать 49 Кбскачан 19 раз
+3
Zau4man Zau4man 8 месяцев назад #

Делать хаки в движке плохо. Сделайте дочернее поле на основе поля url. И укажите в нем только метод parse, добавив свои правки.

Посмотрите, как устроено поле Фотокарта instantcms.ru/forum/fotokarta-37145.html

Оно дочернее от поля file. И сделайте по аналогии.

И при обновлении ваши правки не потеряются, так как это будет новое поле. Но так как оно будет дочерним от поля url, все изменения в методах, которые вы не меняете, например, в безопасности сохранения данных в базе, будут браться из родителя. А значит безопасность не пострадает.

+1
Kuper Kuper 8 месяцев назад #

Знаний не достаточно поэтому было сделано так, а как пользователь который начинал с DLE в котом только так, то для себя в принципе это норм и поэтому выложил тут что бы самому не потерять 🤣,  я только пол дня искал откуда берется заголовок, пробовал get_defined_vars

Попробую по аналогии, документация не айс

+1
Zau4man Zau4man 8 месяцев назад #

Просто с хаков в движке начинается боязнь обновляться.

Вы пробуйте, если где-то ступор, создавайте тему на форуме, выкладывайте ваш код. Подскажем, направим.

+1
Kuper Kuper 8 месяцев назад #

Ну как бы

Не найден шаблон для отображения или он недоступен для чтения: /templates/default/assets/fields/urlknopka.tpl.php

Не очень понимаю почему у вас он не требует шаблон а у меня да

ладно css я понял        

$template = cmsTemplate::getInstance();
        if (!self::$templated) {
            
            $template->addTplCSSName('urlknopka');
        }

что дает наследование extends fieldUrl

Вот тут вылезает несомненный плюс хака при обновлении

Если плагин убъет движок и автор исчез...

а хак, просто залить штатные файлы и все опять хотя бы работает

0
Alex Burr Alex Burr 7 месяцев назад #

Подскажите пожалуйста, возможно ли сделать ссылку Скачать в поле Файл типов контента не ссылкой, а кнопкой
Изображение

+1
Kuper Kuper 7 месяцев назад #

Залить файлы в корень сайта с заменой (file.php) стиль вынесен в отдельный файл

Можно конечно опять сделать отдельное поле, а то это снова хак получается  

https://kuper-spb.ru/index.php/s/L97GYgiiCzsHAEY

Изображение

Изображение

Изображение

0
Alex Burr Alex Burr 7 месяцев назад #

Огромнейшее спасибо)) Получилось кнопка есть))))

Еще от автора

Поле видео и аудио
Поле позволяет загружать аудио и видео
Загрузка видео на сайт
Загрузка видео через поле файл + плеер Plyr
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.