drserg
Полезный
- Регистрация
- 31 Мар 2009
- Сообщения
- 161
- Реакции
- 15
- Автор темы
- #1
Здравствуйте всем. КО мне обратился мой коллега по работе, и попросил глянуть на компонент, которые ему делали в какой то конторе. Компонент служит кагбе для фильтра товаров в Виртумарте. Что он делает:
Создается в компоненте Тип, дропдаун или чекбокс (например Цена, Размер..), потом создаются теги (180х120см, 500р..), которые подвязываются к типам
и Потом уже ассоциации (Где выбирается товар с Виртумарта, и присваиваются ему конкретные теги). Ну и пользователь уже делает свое условие поиска (выбирает цену, размер и т.д..). Этот компонент называется redvmproductfinder. Это было маленькое предисловие.
Дело в том, что сотруднику делала ну очень сомнительная компания, и как они создали магазин я не буду обсуждать.. там ппц..
Есть какой то определенный тип матраса ("Модель такая то, гиперкомфортный"). Это есть карточкой товара, в виртумарте он есть итемом, цены на нем нету. В нем только описание и картинка товара. Когда пользователь заходит прочитать об этом товаре, он видет список, с размерами, когда выбирает один из размеров, появляется уже цена.. Это есть чайлд этого итема (не параметр, а именно чайлд итем....).
Так вот: ПО стандарту, компонент редвмпродуктфайндер, делает ассоциации только с парент итемами, а это не катит, так как человеку после поиска, надо вывести именно чайлда, который носит в себе цену. Изменил чутка запрос в базу (заметил, что у парентов, столбец product_parent_id == 0, а у чайлдов product_parent_id == product_id его парента... ) Все вроде бы было хорошо, но после того как я например делаю поиск с таким условием как: размер (180х80) - дропдаун, производитель (велам) - дроп, цена (500-1000, 1000-1500) - чекбокс и т.д.., то результат поиска выводит что ему захочется... Вообщем надо как то домучать этот компонент. (Любые виртумартовские фильтры, которые можно найти, не подойдут в этой ситуации, так как очень по дебильному у них забитая информация (производители вообще не забиты, они создавали категорию товара, вписывали производителя, и создавали уже товары этого производителя) тоисть автоматов вытягивать инфу не получится... Там еще много приколов.
вот содержимое файла с папки models. Там и есть мой запрос... Помогите пож.!! Заранее всем огромное спс.. (я только изменял компонент, который поставила та конторка.
Если что то еще потребуется для решения проблемы - пишите
Создается в компоненте Тип, дропдаун или чекбокс (например Цена, Размер..), потом создаются теги (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();
}
}
?>
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Если что то еще потребуется для решения проблемы - пишите