Вывод product_parent (virtuemart) в redvmproductfinder

Статус
В этой теме нельзя размещать новые ответы.

drserg

Полезный
Регистрация
31 Мар 2009
Сообщения
161
Реакции
15
Здравствуйте всем. КО мне обратился мой коллега по работе, и попросил глянуть на компонент, которые ему делали в какой то конторе. Компонент служит кагбе для фильтра товаров в Виртумарте. Что он делает:
Создается в компоненте Тип, дропдаун или чекбокс (например Цена, Размер..), потом создаются теги (180х120см, 500р..), которые подвязываются к типам
и Потом уже ассоциации (Где выбирается товар с Виртумарта, и присваиваются ему конкретные теги). Ну и пользователь уже делает свое условие поиска (выбирает цену, размер и т.д..). Этот компонент называется redvmproductfinder. Это было маленькое предисловие.
Дело в том, что сотруднику делала ну очень сомнительная компания, и как они создали магазин я не буду обсуждать.. там ппц..
. Принцип у них такой:
Есть какой то определенный тип матраса ("Модель такая то, гиперкомфортный"). Это есть карточкой товара, в виртумарте он есть итемом, цены на нем нету. В нем только описание и картинка товара. Когда пользователь заходит прочитать об этом товаре, он видет список, с размерами, когда выбирает один из размеров, появляется уже цена.. Это есть чайлд этого итема (не параметр, а именно чайлд итем....).
Так вот: ПО стандарту, компонент редвмпродуктфайндер, делает ассоциации только с парент итемами, а это не катит, так как человеку после поиска, надо вывести именно чайлда, который носит в себе цену. Изменил чутка запрос в базу (заметил, что у парентов, столбец product_parent_id == 0, а у чайлдов product_parent_id == product_id его парента... ) Все вроде бы было хорошо, но после того как я например делаю поиск с таким условием как: размер (180х80) - дропдаун, производитель (велам) - дроп, цена (500-1000, 1000-1500) - чекбокс и т.д.., то результат поиска выводит что ему захочется... Вообщем надо как то домучать этот компонент. (Любые виртумартовские фильтры, которые можно найти, не подойдут в этой ситуации, так как очень по дебильному у них забитая информация (производители вообще не забиты, они создавали категорию товара, вписывали производителя, и создавали уже товары этого производителя) тоисть автоматов вытягивать инфу не получится... Там еще много приколов.
PHP:
<?php
/**
 * @copyright Copyright (C) 2008-2009 redCOMPONENT.com. All rights reserved. 
 * @license can be read in this package of software in the file license.txt or 
 * read on http://redcomponent.com/license.txt  
 * Developed by email@recomponent.com - redCOMPONENT.com 
 *
 * VMPRODUCTFILTER model
 */
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.model');
/**
 */
class vmproductfilterModelvmproductfilter extends JModel {
	public function __construct() {
		parent::__construct();
	}
	public function getFindProducts() {
		$db = JFactory::getDBO();
		$post = JRequest::get('request');
		$q = "SELECT COUNT(id) AS total FROM #__vmproductfilter_types";
		$db->setQuery($q);
		$typecount = $db->loadResult();
		$tags = '';
		$types = '';
		$queries = array();
		for ($i = 0; $i < $typecount; $i++) {
			if (isset($post['type'.$i])) {
				if (is_array($post['type'.$i]) && count($post['type'.$i]) > 0) {
					foreach ($post['type'.$i] as $pos => $value) {
						list($tag, $type) = explode(".", $value);
						$queries[] = "SELECT association_id ".
									"\nFROM #__vmproductfilter_association_tag j". 
									"\nWHERE tag_id = ".$tag." AND type_id = ".$type;
					}
				}
				else if ($post['type'.$i] > 0) {
					list($tag, $type) = explode(".", $post['type'.$i]);
					$queries[] = "SELECT association_id ".
									"\nFROM #__vmproductfilter_association_tag j". 
									"\nWHERE tag_id = ".$tag." AND type_id = ".$type;
				}
			}
		}
		$result = array();
		if (count($queries) > 0) {
			foreach ($queries as $key => $query) {
				if ($key > 0) {
					if (count($result) > 0) $query .= " AND association_id in (".implode(',', $result).")";
					$db->setQuery($query);
					$result = $db->loadResultArray();
				}
				else {
					$db->setQuery($query);
					$result = $db->loadResultArray();
				}
				if (count($result) == 0) end($queries);
			}
			if (count($result) > 0) {
				$qvm = "SELECT vmproduct_id
					FROM #__vmproductfilter_associations
					WHERE ID IN (".implode(',', $result).")";
				$q = "SELECT product_id, product_name, product_thumb_image, product_parent_id, product_desc, product_s_desc
					FROM #__vm_product
					WHERE product_id IN (".$qvm.")
					AND product_parent_id > 0;";
				$db->setQuery($q);
				$products = $db->loadObjectList();
				$i=0;
				foreach ($products as $key => $product) { 
				$i++;
				$q = "SELECT product_thumb_image, product_desc, product_s_desc
					FROM #__vm_product
					WHERE product_id =".$product->product_parent_id;
					$db->setQuery($q);
					$product_parent_id = $db->loadObject();
					$productss[$i]->product_id = $product->product_id;
					$productss[$i]->product_name = $product->product_name;
					$productss[$i]->product_thumb_image = $product_parent_id->product_thumb_image;
					$productss[$i]->product_desc = $product_parent_id->product_desc;
					$productss[$i]->product_s_desc = $product_parent_id->product_s_desc;
				}
				//print_r($products->original);
				return $productss;
			}
			else return array();
		}
		else {
			$qvm = "SELECT vmproduct_id
				FROM #__vmproductfilter_associations";
			$q = "SELECT product_id, product_name, product_thumb_image, product_parent_id, product_desc, product_s_desc
				FROM #__vm_product
				WHERE product_id IN (".$qvm.")
				AND product_parent_id > 0;";
			$db->setQuery($q);
			$products = $db->loadObjectList();
				$i=0;
				foreach ($products as $key => $product) { 
				$i++;
				$q = "SELECT product_thumb_image, product_desc, product_s_desc
					FROM #__vm_product
					WHERE product_id =".$product->product_parent_id;
					$db->setQuery($q);
					$product_parent_id = $db->loadObject();
					$productss[$i]->product_id = $product->product_id;
					$productss[$i]->product_name = $product->product_name;
					$productss[$i]->product_thumb_image = $product_parent_id->product_thumb_image;
					$productss[$i]->product_desc = $product_parent_id->product_desc;
					$productss[$i]->product_s_desc = $product_parent_id->product_s_desc;
				}
			return $productss;
		}
	}
	/**
	 * Get the tag names
	 */
	public function getTypeTags() {
		$db = JFactory::getDBO();
		$id = JRequest::getInt('tid');
		$q = "SELECT CONCAT(tag_id,'.',j.type_id) AS tag_id, tag_name 
			FROM #__vmproductfilter_tag_type j, #__vmproductfilter_tags t
			WHERE j.tag_id = t.id
			AND j.type_id = ".$id."
			ORDER BY t.ordering";
		$db->setQuery($q);
		return $db->loadObjectList();
	}
}
?>
вот содержимое файла с папки models. Там и есть мой запрос... Помогите пож.!! Заранее всем огромное спс.. (я только изменял компонент, который поставила та конторка.

Если что то еще потребуется для решения проблемы - пишите
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху