Перейти к содержимому


Фотография
- - - - -

Стиль списка элементов в зависимости от чекбокса


Лучший Ответ SmetDenis , 15 January 2014 - 08:44


Список с разделителями генерируется тут
\administrator\components\com_zoo\helpers\element.php applySeparators()

но изменить логику работы этой функции довольно хлопотно.
Поэтому предлагаю другой путь

Добавьте в этот класс \media\zoo\elements\checkbox\checkbox.php функцию
Она переопределит вывод элемента

public function render($params = array()) {

    // init vars
    $params = $this->app->data->create($params);
    $selected_options  = $this->get('option', array());

    $options = array();
    foreach ($this->config->get('option', array()) as $option) {
        if (in_array($option['value'], $selected_options)) {
            $classs = $this->app->string->sluggify($option['name']);
            $options[] = '<li class="item-'.$classs.'">'.$option['name'].'</li>';
        }
    }

    return '<ul>'.implode(" ", $options).'</ul>';
}
К сожалению, опция разделителя перестанет работать. Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 15

#11 tchudov

tchudov

Отправлено 15 January 2014 - 16:15

Попробовал немного модифицировать элемент и код от SmetDenis

 

Задача: В настройках чекбокса иметь 2 поля - name (использовать для alt или title) и value - для урла к отображаемой иконке.

 

Столкнулся с проблемой, что урл поле value режет, удаляя все точки и /.

 

Пытался понять, как в элемент добавить поле с УРЛ, но не смог разобраться в доках по ссылкам выше.

 

Подумал, что может в отображении выводить только название имя картинки, а остальное прописать в коде элемента?

 

Получилось вот так:

	    public function render($params = array()) {
     
    // init vars
    $params = $this->app->data->create($params);
    $selected_options = $this->get('option', array());
     
    $options = array();
    foreach ($this->config->get('option', array()) as $option) {
    if (in_array($option['value'], $selected_options)) {
    $classs = $this->app->string->sluggify($option['name']);
    $options[] = '<img src="/images/headers/'.$classs.'.png" alt="'.$option['name'].'" />';
    }
    }
     
    return '<div>'.implode(" ", $options).'</div>';
    }

Но не работает так, как нужно. ((((

 

Получилось:

<div>
<img alt="Free-WiFi" src="/images/headers/free-wifi.png">
<img alt="smoke" src="/images/headers/smoke.png">
</div>

Как вы понимаете, названия картинок у меня были совсем другие (((

http://d.pr/i/9uYS

 

Что я делаю не так и где ошибка?


Сообщение отредактировал tchudov: 15 January 2014 - 16:18

  • 0

#12 SmetDenis

SmetDenis

Отправлено 16 January 2014 - 06:50

Попробуйте использовать ключ value вместо name, т.е
$classs = $this->app->string->sluggify($option['value']);
Функция sluggify делает латиницу и удаляет все спец символы.
  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#13 tchudov

tchudov

Отправлено 16 January 2014 - 09:25

Спасибо, а добавить ещё одно текстовое поле можно? Не подскажете, как это сделать?


  • 0

#14 SmetDenis

SmetDenis

Отправлено 16 January 2014 - 09:41

Спасибо, а добавить ещё одно текстовое поле можно? Не подскажете, как это сделать?

Вы хотите сделать новый элемент?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#15 tchudov

tchudov

Отправлено 16 January 2014 - 10:04

Я уже создал новый элемент. Чтобы не конфликтовал с оригинальным. Все изменения делаю в нём, а не в checkbox

 

Вот xml:

<?xml version="1.0" encoding="utf-8"?>
<element type="Icons" group="JBZoo" orderable="true">
	<name>Icons</name>
	<author>YOOtheme</author>
	<creationDate>August 2011</creationDate>
	<copyright>Copyright (C) YOOtheme GmbH</copyright>
	<authorEmail>info@yootheme.com</authorEmail>
	<authorUrl>http://www.yootheme.com</authorUrl>
	<version>1.0.0</version>
	<description>Icons Checkbox</description>
</element>

Сообщение отредактировал tchudov: 16 January 2014 - 10:04

  • 0

#16 SmetDenis

SmetDenis

Отправлено 16 January 2014 - 10:45

Я уже создал новый элемент. Чтобы не конфликтовал с оригинальным. Все изменения делаю в нём, а не в checkbox


Хорошо. Так, в чем у вас возникла сложность?

PS перенес топик в раздел о разработке расширений.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!