VonKruger

VonKruger

Я выбираю ICMS 2
+105
Репутация
776
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Создание дополнительных полей тип checkbox для 2 24 декабря 2015 в 12:11
Всем доброго времени суток уважаемые форумчане.
Возникла потребность в создании нового типа полей для контента в 2-ке чекбоксы. Думаю для многих это будет очень полезным решением.
У меня есть уже некоторые наработки.
Создал два дополнительных файла в папку system/fields/checkboxe.php
В папку templates/тема/assets/fields/checkbox.tpl.php
В файл system/libs/html.helper.php добавил новую функцию.
В админке новое поле появилось, содержимое появляется и отображается чекбоксами на сайте. Но вот никак не могу найти где ошибся в коде — не добаляет отмеченные записи в базу данных.
Ну а теперь по порядку
Содержимое файла system/fields/checkboxe.php
  1.  
  2. <?php
  3.  
  4. class fieldCheckboxe extends cmsFormField {
  5.  
  6. public $title = LANG_PARSER_Checkboxe;
  7. public $sql = 'int NULL DEFAULT NULL';
  8. public $filter_type = 'int';
  9. public $filter_hint = LANG_PARSER_Checkboxe_FILTER_HINT;
  10.  
  11. public function getOptions(){
  12. return array(
  13. new fieldCheckbox('filter_multiple', array(
  14. 'title' => LANG_PARSER_LIST_FILTER_MULTI,
  15. 'default' => false
  16. )),
  17. );
  18. }
  19.  
  20. public function getFilterInput($value) {
  21.  
  22. $items = $this->getCheckboxeItems();
  23.  
  24. if (!$this->getOption('filter_multiple')){
  25.  
  26. $items = array(''=>'') + $items;// array_pad($items, (sizeof($items)+1)*-1, '');
  27. return html_checkboxe($this->name, $items, $value);
  28.  
  29. } else {
  30.  
  31. $value = is_array($value) ? $value : array();
  32. return html_checkboxe($this->name, $items, $value);
  33.  
  34. }
  35.  
  36.  
  37. }
  38.  
  39. public function getRules() {
  40.  
  41. if($this->item){
  42. $this->rules[] = array('array_key', $this->getCheckboxeItems());
  43. }
  44.  
  45. return $this->rules;
  46.  
  47. }
  48.  
  49. public function parse($value){
  50.  
  51. $items = $this->getCheckboxeItems();
  52. $item = '';
  53.  
  54. if (isset($items[$value])) { $item = $items[$value]; }
  55.  
  56. return htmlspecialchars($item);
  57.  
  58. }
  59.  
  60. public function getCheckboxeItems(){
  61.  
  62. $items = array();
  63.  
  64. if (isset($this->items)){
  65.  
  66. $items = $this->items;
  67.  
  68. } else if (isset($this->generator)) {
  69.  
  70. $generator = $this->generator;
  71. $items = $generator($this->item);
  72.  
  73. } else if ($this->hasDefaultValue()) {
  74.  
  75. $items = $this->parseCheckboxeItems($this->getDefaultValue());
  76.  
  77. }
  78.  
  79. return $items;
  80.  
  81. }
  82.  
  83. public function parseCheckboxeItems($string){
  84. return string_explode_list($string);
  85. }
  86.  
  87. public function applyFilter($model, $value) {
  88.  
  89. if (!$this->getOption('filter_multiple')){
  90.  
  91. $model->filterEqual($this->name, $value);
  92.  
  93. } else {
  94.  
  95. if (!is_array($value)) { return $model; }
  96.  
  97. $model->filterIn($this->name, $value);
  98.  
  99. }
  100.  
  101. return $model;
  102.  
  103. }
  104.  
  105. public function getInput($value){
  106.  
  107. $this->data['items'] = $this->getCheckboxeItems();
  108.  
  109. $this->data['is_multiple'] = $this->getProperty('is_multiple');
  110. $this->data['is_tree'] = $this->getProperty('is_tree');
  111. $this->data['parent'] = $this->getProperty('parent');
  112.  
  113. $this->data['dom_attr'] = array('id'=>$this->id);
  114.  
  115. return parent::getInput($value);
  116.  
  117. }
  118.  
  119. }
  120.  
  121.  
Далее этот templates/тема/assets/fields/checkbox.tpl.php
  1.  
  2. <?php if ($field->title) { ?><label for="<?php echo $field->id; ?>"><?php echo $field->title; ?></label><?php } ?>
  3. <?php
  4.  
  5. if($field->data['is_multiple']){
  6.  
  7. echo html_select_multiple($field->element_name, $field->data['items'], $value, $field->data['dom_attr'], $field->data['is_tree']);
  8.  
  9. }else{
  10.  
  11. echo html_checkboxe($field->element_name, $field->data['items'], $value, $field->data['dom_attr']);
  12.  
  13. }
  14.  
  15. ?>
  16.  
  17.  
  18.  
И функция в файле system/libs/html.helper.php

  1.  
  2. // Здесь много кратный чекбокс
  3.  
  4. function html_checkboxe($name, $items, $selected = '', $attributes = array(), $checked=false){
  5. // if ($checked) { $attributes['checked'] = 'checked'; }
  6. $attr_str = html_attr_str($attributes);
  7. $class = 'input-checkbox';
  8. if (isset($attributes['class'])) { $class .= ' '.$attributes['class']; }
  9. // $html = '<select name="'.$name.'" '.$attr_str.$class.'>'."\n";
  10.  
  11. $optgroup = false;
  12. $checked = is_array($selected) && in_array($value, $selected);
  13. if($items && is_array($items)){
  14. foreach($items as $value => $title){
  15.  
  16. if(is_array($title)){
  17. if($optgroup !== false){
  18. $html .= "\t".'</optgroup>'."/n";
  19. $optgroup = false;
  20. }
  21. $optgroup = true;
  22. $html .= "\t".'<optgroup label="'.$title[0].'">'."\n";
  23. continue;
  24. }
  25.  
  26. $sel = ((string) $selected === (string) $value) ? 'checked' : '';
  27. //$html .= "\t".'<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>'."\n";
  28. $html .= "\t".'<input type="checkbox" class="'.$class.'" name="'
#1 iCMS 2.0 - предложения 23 декабря 2015 в 16:24
Добавить к имеющимся типам полей контента чекбоксы. Чтобы можно было выбрать многократно. И радио кнопки для одиночного выбора.
Очень нужно. СПАСИБО!
#2 Что Вы ждете от 2.4.0 23 декабря 2015 в 16:21
Хотелось бы дополнительно к имеющимся типам полей в контенте иметь чекбоксы.
#3 [ЕСТЬ РЕШЕНИЕ] Опять про Слайдер новостей 4 апреля 2015 в 09:00
Дайте ссылку где можно глянуть я скажу где и что добавить
#4 [ЕСТЬ РЕШЕНИЕ] Опять про Слайдер новостей 3 апреля 2015 в 21:47
Указать высоту и ширину фото
height: высота:
widht: ширина:

Но при этом изображение будет искажено. Или дайте глянуть ссылку на сайта, тогда покажу куда добавить css
#5 [ЕСТЬ РЕШЕНИЕ] Как вывести кусок HTML кода? 2 апреля 2015 в 09:29
Форматирование убирается в админке.
К примеру статьи
Заходим в типы контента статьи
Выбираем вкладку поля
Выбираем поле где стоит редактор
И снимаем галочку "Обрабатывать типографом "
#6 [ЕСТЬ РЕШЕНИЕ] Как вывести кусок HTML кода? 1 апреля 2015 в 21:46
Скрин можно что там не так отображается.
#7 [ЕСТЬ РЕШЕНИЕ] Как вывести кусок HTML кода? 1 апреля 2015 в 20:17
Я убрал у себя форматирование, переделал редактор под ВВ коды. В общем переделано много файлов и в ядре самой инстант!
#8 [ЕСТЬ РЕШЕНИЕ] Как вывести кусок HTML кода? 1 апреля 2015 в 20:11
Как здесь phpfan.ru ?
#9 [ЕСТЬ РЕШЕНИЕ] ICM2.2.0 Недочёт серьёзный 31 марта 2015 в 11:03
В личных сообщениях я так понял?
Необходимо добавить target="_blank"
Заходим в папку редакторов markitup/sets/default_ru/set.js в строке примерно 14 у меня есть код
  1. {name:'Ссылка', key:'L', openWith:'<a href="[![Адрес ссылки:!:http://]!]">', closeWith:'</a>', placeHolder:'Заголовок ссылки...', className: 'btnLink'},
Делаем так
  1. {name:'Ссылка', key:'L', openWith:'<a target="_blank" href="[![Адрес ссылки:!:http://]!]">', closeWith:'</a>', placeHolder:'Заголовок ссылки...', className: 'btnLink'},
#10 Прокрутка до определённого места на сайте instantcms 31 марта 2015 в 10:56
Покажите код где формируется ссылка из icms подскажу, а так у меня нет этой версии, нужно видеть код.
И чтобы было видно какая переменная отвечает за id категории.

А вообще без кода могу сказать так

К ссылке где формируется она добавить в конце
  1. .'#myid'.$id
И таким же образом добавить идентификатор к блоку с категрией
  1. <span id="myid<?= $id; ?> "></span>
#11 ошибка при редактировании 30 марта 2015 в 19:57
Включите в настройках отладку и псомтрите где ошибка, это стандартная 404 а так будет видно где ошибка
#12 Виджет коментариев в контакте 30 марта 2015 в 14:56
Покажите какой код вставляли для вывода комментариев. Тогда можно будет решать где, что не так!
#13 HTML редактор 29 марта 2015 в 21:30
А вы создали файл

Создаем файл php с названием smiley.php

я
  1. <?php
  2. // Путь к папке со смайлами
  3. define ("EMOTICONS_DIR", "/templates/default/images/smile/");
  4. // Функция для преобразования символов в изображения самайлов
  5. function Smiley($str) {
  6. // Добавляем обозначения смайлов для обработки, я покажу один вариант можно добавить сколько угодно своих
  7. $in = array( ':)'
  8. );
  9. $out = array( '<img id="smile_comment" alt="Улыбка" src="'.EMOTICONS_DIR.'smile.gif" />'
  10. );
  11. $str = str_replace($in, $out, $str);
  12. return $str;
  13. }
  14. ?>
Ошибка говорит что функции у вас не существует.
#14 HTML редактор 29 марта 2015 в 18:14
  1. <div class="content">
  2. <div class="text">
  3. <?php
  4. cmsCore::loadLib('smiley');
  5. echo Smiley($entry['content_html']); ?>
  6. </div>
  7. <?php if ($is_controls){ ?>
Если все сделано правильно файл с функцией Smiley лежит в указанной выше папке, и есть смайлик с именем smile.gif
в папке /templates/default/images/smile/
То все будет работать
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.