Вообщем взял за основу фильтр по характеристикам и добавил туда атрибуты.
Файл /www/modules/mod_jshopping_filters/tmpl/default.tpl
Это шаблон модуля, так что добавляем куда хотим
<div class="filter_att">
<?php foreach($att_fields as $ch){?>
<div class="att_name"><?php print $ch->name;?></div>
<input type="hidden" name="att_fields[<?php print $ch->attr_id?>][]" value="0" />
<?php foreach($att_fieldvalues as $val){?>
<?php if($val->attr_id==$ch->attr_id) {?>
<input type="checkbox" name="att_fields[<?php print $ch->attr_id?>][]" value="<?php print $val->value_id;?>" <?php if (is_array($att_fields_active[$ch->attr_id]) && in_array($val->value_id, $att_fields_active[$ch->attr_id])) print "checked";?> onclick="document.jshop_filters.submit();" /><?php print $val->name;?><br/>
<?php }?>
<?php }?>
<br/>
<?php }?>
</div>
Затем поднимаемся на уровень выше и в файле mod_jshopping_filters.php добавляем
$att_fields = &JSFactory::getAllProductAttField();
$att_fieldvalues = &JSFactory::getAllProductAttFieldValueDetail();
$att_fields_active = $mainframe->getUserStateFromRequest($contextfilter.'att_fields', 'att_fields', array());
$att_fields_active = filterAllowValue($att_fields_active, "array_int_k_v+");
впринципе неважно куда, но "красивей" перед строчкой
require(JModuleHelper::getLayoutPath('mod_jshopping_filters'));
вот. Модуль у нас готов, но сайт при этом сдох.
Далее я буду приводить куски исходных файлов что бы было понятно что и куда вставлять.
Перемещаемся в папку /www/components/com_jshopping/lib
functions.php
if (count($filters['extra_fields'])>0) $res = 1;
// my
if (count($filters['att_fields'])>0) $res = 1;
// my end
return $res;
$extra_fields = filterAllowValue($extra_fields, "array_int_k_v+");
}
// my
$att_fields_filter = $mainframe->getUserStateFromRequest( $contextfilter.'att_fields', 'att_fields', array());
$att_fields_filter = filterAllowValue($att_fields_filter, "array_int_k_v+");
// my end
$fprice_from = $mainframe->getUserStateFromRequest( $contextfilter.'fprice_from', 'fprice_from');
if ($jshopConfig->admin_show_product_extra_field){
$filters['extra_fields'] = $extra_fields;
}
// my
$filters['att_fields'] = $att_fields_filter;
// my end
if ($category_id && !$filters['categorys']){
factory.php
function &getAllProductExtraField(){
static $list;
if (!is_array($list)){
$productfield =& JTable::getInstance('productfield', 'jshop');
$list = $productfield->getList();
}
return $list;
}
// my
function &getAllProductAttField(){
static $list;
if (!is_array($list)){
$productattfield =& JTable::getInstance('productattfield', 'jshop');
$list = $productattfield->getList();
}
return $list;
}
function &getAllProductAttFieldValueDetail(){
static $list;
if (!is_array($list)){
$productattfieldvalue =& JTable::getInstance('productattfieldvalue', 'jshop');
$list = $productattfieldvalue->getAllList();
}
return $list;
}
// my end
function &getAllProductExtraFieldValue(){
jtableauto.php
$adv_query .= " AND prod.`extra_field_".$f_id."`='".$db->getEscaped($vals)."'";
}
}
}
// my
if (is_array($filters['att_fields'])){
foreach($filters['att_fields'] as $f_id=>$vals){
if (is_array($vals) && count($vals)){
$adv_query .= "AND prod.product_id IN (SELECT product_id FROM `#__jshopping_products_attr2` AS attr WHERE attr.attr_value_id in (".implode(",",$vals).") ) ";
}elseif(is_string($vals) && $vals!=""){
$adv_query .= "AND prod.product_id IN (SELECT product_id FROM `#__jshopping_products_attr2` AS attr WHERE attr.attr_value_id='".$db->getEscaped($vals)."' ) ";
}
}
}
// my end
$this->getBuildQueryListProductFilterPrice($filters, $adv_query, $adv_from);
Осталось в папку /www/components/com_jshopping/tables положить два файлика, которые я приатачил и все.
Впринципе даный вариант вываодит все атрибуты которые есть, но там заложена возможность вывод только определенного атрибута.
[вложение удалено Администратором]