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


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

Список брендов в зависимости от выбранной категории


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

#1 svizina

svizina

Отправлено 06 September 2012 - 13:01

Демо сайт hammer.comyr.com
Есть
1) тип инструмент (основной где вбиваются инструменты) app ID = 1
2) и тип *Торговая марка* (список категорий только parent)    app ID = 2

К каждому инструменту app ID = 1 при заполнении в админке элементом выпадающий список присвается бренд из типа *Торговая марка* (список категорий) элемент 0994f030-aef0-4e78-9386-52fa2cb053fb

**Торговая марка** выводиться в mod_jbzoo_search (переделан но примерно как items category ) шаблон – Список категорий, вид списка – только родительские
Код
<label for="filterEl_0994f030-aef0-4e78-9386-52fa2cb053fb">Торговая марка</label><div class="field"><select id="filterEl_0994f030-aef0-4e78-9386-52fa2cb053fb" name="e[0994f030-aef0-4e78-9386-52fa2cb053fb]" id="filterEl_0994f030-aef0-4e78-9386-52fa2cb053fb" class="element-relatedcatoppo">
	<option value="" selected="selected"> - Все - </option>
	<option value="935">ADTnS</option>
	<option value="1069">AEG</option>
	<option value="979">AERO</option>
и так далее

в базе индекса элемент 0994f030-aef0-4e78-9386-52fa2cb053fb  (*Торговая марка*) имеет  к примеру ADTnS 2 поля текст и цифру = 935

**Выберите категорию поиска** в mod_jbzoo_search = шаблон – Список категорий из инструментов (items category), вид списка – Дерево с вложенностями

ЗАДАЧА  как отсеять те *Торговые марки* с  Аpp ID = 2,  ЕСЛИ ИХ НЕТ в инструментах app ID = 1 при просмотре соответствующей категории инструмента
тоесть ADTnS не выводить ее нет в этих категориях дрели -(подкатегориях),  а BOSCH есть
проблема в том что инструментов 14500 шт. перебирать каждый раз + категории + подкатегории  - можно нагрузить сайт
спасибо за идеи
  • 0

#2 svizina

svizina

Отправлено 06 September 2012 - 17:52

сделал работает но хотелось бы так не грузить каждый раз
получение списка брендов в зависимости от просматриваемой категории (свой element.relatedcatoppo.php)
media\zoo\applications\jbuniversal\framework\render\filter\element.relatedcatoppo.php
    protected function _getValues($type = null)
    {
        $catList = $this->_getCategoriesList();

		$catcurr=JRequest::getInt('category_id',0);

		if($catcurr) {

		$application_id=1;
		$application   = $this->app->table->application->get($application_id);
        $allCategories = $application->getCategories(true);

		$categoryss=$allCategories[$catcurr];

		$category_id=array();
		$categories = $categoryss->getChildren(true);
		if(count($categories)>=1) {
		foreach($categories as $key=>$val) {
		$category_id[]=	$val->id;
		}
		}else {
		$category_id[]=	$catcurr;
		}

		$db = $this->app->database;
		$published = true;

		// get dates
		$date = $this->app->date->create();
		$now  = $db->Quote($date->toMySQL());
		$null = $db->Quote($db->getNullDate());

		$query = 'SELECT i.value_number as value '
	            .' FROM #__zoo_jbzoo_index AS i'
				.' INNER JOIN '.ZOO_TABLE_CATEGORY_ITEM.' AS a ON i.item_id = a.item_id'
			    .' WHERE a.category_id  IN ('.implode(",", $category_id).')'
				.' AND i.value_number >0 '
				.' AND i.element_id=\'0994f030-aef0-4e78-9386-52fa2cb053fb\''
			    .' GROUP BY value';

		//$catValues= $db->_queryObjectList($query, $db->key);
		$db->setQuery($query);
		$catValues= $db->loadObjectList();
		/*
		if ($db->getErrorNum()) {
        JError::raiseWarning(500, $db->getErrorMsg());
        }
		*/

		$categoriesList = array();
        foreach ($catList as $category) {

            foreach ($catValues as $catValue) {

                if ($catValue->value == $category->id) {
                    $categoriesList[]     = $category;
                }

            }
          }
		}else {
		$categoriesList=$catList;
		}

		$options = array();
        foreach ($categoriesList as $category) {

                $options[] = array(
                    'value' => $category->id,
                    'text'  => $category->name,
                    'count' => null,
                );

        }

        return $options;
    }

  • 0

#3 svizina

svizina

Отправлено 07 September 2012 - 16:35

окончательный вариант выборки
$query = 'SELECT DISTINCT c.id AS id, c.name AS name '
	            .' FROM #__zoo_jbzoo_index AS i USE INDEX (element_id_value_number)'
				.' INNER JOIN '.ZOO_TABLE_CATEGORY_ITEM.' AS a ON i.item_id = a.item_id'
				.' INNER JOIN '.ZOO_TABLE_CATEGORY.' AS c ON c.id = i.value_number AND c.application_id ='.$appThisId
			    .' WHERE a.category_id  IN ('.implode(",", $category_id).')'
				.' AND i.value_number >0 '
				.' AND i.element_id='.$db->Quote($this->_identifier).''
			    .' ORDER BY c.name';
одно но, если использовать AND i.element_id='.$db->Quote($this->_identifier) время выборки 0.23 с без 0.001
если не ставить это то *цепляет* другие элементы
  • 0




Click to return to top of page in style!