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


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

Настройка фильтра по тексту


Лучший Ответ SmetDenis , 01 September 2015 - 13:57

Просто создайте тему в этом разделе с кратким описанием задачи.
http://forum.jbzoo.c...-komandy-jbzoo/ Перейти к сообщению


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

#1 zeus07

zeus07

Отправлено 15 August 2015 - 20:27

Здравствуйте!

 

Ссылка для примера: http://vision.artcol...ogramma/antioks

 

Объясню суть.

 

Необходимо сделать фильтр товаров по составу, а именно по списку ингредиентов, входящих в состав препарата. В фильтре надо сделать список с чекбоксами, но как-то можно сделать так, чтобы эти ингредиенты он искал как текст? То есть не хотелось бы в карточке товара дублировать информацию, создавать отдельно список и в карточке чекбоксами отмечать необходимые ингредиенты, которые есть в данном препарате. 

 

Поэтому вот хотелось бы, чтобы вывод в фильтре был чекбоксами, а искало по тексту. Если так можно сделать, подскажите пожалуйста как? 


  • 0

#2 SmetDenis

SmetDenis

Отправлено 17 August 2015 - 07:27

С помощи настроек такого не добиться.
Точнее можно, но придется использовать не самый красивый и удобный вариант с дублирование контента.

Решить эту задачу можно программированием, т.к сделать вывод своего шаблона в фильтре для textarea

media\zoo\applications\jbuniversal\config\mod_jbzoo_search\textarea.xml

Сюда добавить строку со своим название шаблона
cjrg_200x0.png

Далее сделать копию класса, который отвечает за вывод
media\zoo\applications\jbuniversal\framework\render\filter\element.text.php

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



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


#3 zeus07

zeus07

Отправлено 17 August 2015 - 22:04

Денис, спасибо. Такой вопрос. В каком формате прописать свою строку с шаблоном в этом коде: 

 <param name="jbzoo_filter_render"
               type="list"
               label="JBZOO_ELEMENT_TEMPLATE"
               description="JBZOO_ELEMENT_TEMPLATE_DESC"
               default="_auto_"
                >
            <option value="_auto_">JBZOO_ELEMENT_TEMPLATE_AUTO</option>
            <option value="text">JBZOO_ELEMENT_TEMPLATE_TEXT</option>
            <option value="hidden">JBZOO_ELEMENT_TEMPLATE_HIDDEN</option>
        </param>

То есть какой параметр value дать? 


  • 0

#4 SmetDenis

SmetDenis

Отправлено 19 August 2015 - 08:18

<option value="mytemplate">My template</option>
Соответственно алиас "mytemplate" нужно использовать в названии файла и класса в этом файле.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#5 zeus07

zeus07

Отправлено 19 August 2015 - 12:13

Далее сделать копию класса, который отвечает за вывод media\zoo\applications\jbuniversal\framework\render\filter\element.text.php Там вывести список чекбоксов или список как вам нужно Пример вывода можно найти в любом файле в этой же папке с названием checkbox или select

 

Получается в файле  media\zoo\applications\jbuniversal\framework\render\filter\element.text.php я скопировал класс, дал ему название, как в предыдущем файле, и теперь вместо функции, которая там сейчас, мне надо вставить функцию из element,checkbox.php? Ну если я хочу чекбоксами.\

Вот это надо скопировать и вставить?

public function html()
    {
        $this->_isMultiple = true;

        $values = $this->_getValues();

        return $this->app->jbhtml->checkbox(
            $this->_createOptionsList($values),
            $this->_getName(''),
            $this->_attrs,
            $this->_value,
            $this->_getId()
        );
    }

    /**
     * Get DB values
     * @param null $type
     * @return array|mixed|null
     */
    protected function _getValues($type = null)
    {
        return $this->_getDbValues();
    }

  • 0

#6 SmetDenis

SmetDenis

Отправлено 21 August 2015 - 07:57


Все что вернет метод html() появится в фильтре.
Метод _createOptionsList - создает список опций, который выведется в виде checkbox'ов c помощью хелпера jbhtml.

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



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


#7 zeus07

zeus07

Отправлено 25 August 2015 - 13:07

Денис, я извиняюсь, что постоянно задаю вопросы, и не всё понимаю. Но сейчас файл media\zoo\applications\jbuniversal\framework\render\filter\element.text.php у меня выглядит вот так:

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Denis Smetannikov <denis@jbzoo.com>
 */

// no direct access
defined('_JEXEC') or die('Restricted access');


/**
 * Class JBFilterElementText
 */
class JBFilterElementText extends JBFilterElement
{
    /**
     * Get main attrs
     * @param array $attrs
     * @return array
     */
    protected function _getAttrs(array $attrs)
    {
        $attrs = parent::_getAttrs($attrs);

        $attrs['maxlength'] = '255';
        $attrs['size']      = '60';

        $attrs = $this->_addPlaceholder($attrs);

        return $attrs;
    }

}

class Vision extends JBFilterElement
{
    /**
     * Get main attrs
     * @param array $attrs
     * @return array
     */
    public function html()
    {
        $this->_isMultiple = true;
 
        $values = $this->_getValues();
 
        return $this->app->jbhtml->checkbox(
            $this->_createOptionsList($values),
            $this->_getName(''),
            $this->_attrs,
            $this->_value,
            $this->_getId()
        );
    }
 
    /**
     * Get DB values
     * @param null $type
     * @return array|mixed|null
     */
    protected function _getValues($type = null)
    {
        return $this->_getDbValues();
    }

}

Это правильно? Вставил функцию, чтобы выводилось чекбоксами. Если верно, то как сам фильтр теперь настроить?


  • 0

#8 SmetDenis

SmetDenis

Отправлено 27 August 2015 - 08:14

Вы изменили название класса
Оно должно соответствовать названию файла + префикс.

В настройках поля появится опция, которую вы добавили в xml. Её нужно выбрать в настройках поля фильтра.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#9 zeus07

zeus07

Отправлено 27 August 2015 - 14:52

То есть в данный момент мне надо файл element.text.php переименовать в element.vision.php ? Правильно?


Сообщение отредактировал zeus07: 27 August 2015 - 14:52

  • 0

#10 SmetDenis

SmetDenis

Отправлено 27 August 2015 - 15:02

И название класса JBFilterElementVision/

Все по аналогии. Как взять готовый элемент checkbox и использовать другое ключевое слово.


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



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





Click to return to top of page in style!