Итак, добавляем к атрибутам поля выбора прикрепляемых категорий товаров.
С начала добавим два поля к таблице jos_jshopping_attr
Название | тип | значение по умолчанию
----------+------------+-------------------------
allcats | tinyint(1) | 1
cats | text |
В файле administrator\components\com_jshopping\js\functions.js исправляем мелкую ошибку:
function PFShowHideSelectCats(){
var value = jQuery("input[@name=allcats]:checked").val();
Убираем @
function PFShowHideSelectCats(){
var value = jQuery("input[name=allcats]:checked").val();
в administrator\components\com_jshopping\controllers\attributes.php в функцию function edit() { после $attribut->load($attr_id); допишем
$categories_selected = $attribut->getCategorys();
в этой же функции примерно с 63 строки добавляем
/*my insert chose cats for attributes*/
$all = array();
$all[] = JHTML::_('select.option', 1, _JSHOP_ALL, 'id','value');
$all[] = JHTML::_('select.option', 0, _JSHOP_SELECTED, 'id','value');
if (!isset($attribut->allcats)) $attribut->allcats = 1;
$lists['allcats'] = JHTML::_('select.radiolist', $all, 'allcats','onclick="PFShowHideSelectCats()"','id','value', $attribut->allcats);
$categories = buildTreeCategory(0);
$lists['categories'] = JHTML::_('select.genericlist', $categories,'category_id[]','class="inputbox" size="10" multiple = "multiple"','category_id','name', $categories_selected);
/*end my*/
и после $view=&$this->getView("attributes_edit", 'html'); допишем
$view->assign('lists', $lists);
в функцию function save() {... ПЕРЕД if (!$attribut->store()) { допишем
$categorys = $post['category_id'];
if (!is_array($categorys)) $categorys = array();
$attribut->setCategorys($categorys);
в файл administrator\components\com_jshopping\controllers\products.php в функцию function edit(){ ПЕРЕД $lists['attribs'] = $product->getAttributes(); строка ~213
/*my kill attrs if not in this category*/
$list_all_attributes['dependent'] = $this->_getHtmlProductAttr($categorys_id, $list_all_attributes['dependent']);
$list_all_attributes['independent'] = $this->_getHtmlProductAttr($categorys_id, $list_all_attributes['independent']);
ну и в этом классе дописываем свою функцию _getHtmlProductAttr
/*my kill attrs if not in this cats*/
function _getHtmlProductAttr($categorys, $attrs){
foreach($attrs as $key=>$attr){
$insert = 0;
if ($attr->allcats==1){
$insert = 1;
}else{
$cats = unserialize($attr->cats);
foreach($categorys as $catid){
if (in_array($catid, $cats)) $insert = 1;
}
}
if (!$insert){
unset($attrs[$key]);
}
}
return $attrs;
}
Бегом в administrator\components\com_jshopping\models\attribut.php там 1-у строчку дописать в функции function getAllAttributes($result = 0) { SELECT приводим к виду, т.е. добавляем наши поля
$query = "SELECT attr_id, `".$lang->get("name")."` as name, attr_type, attr_ordering, independent, allcats, cats FROM `#__jshopping_attr` ORDER BY attr_ordering";
В файле administrator\components\com_jshopping\views\attributes_edit\tmpl\default.php дописываем вывод input`ов для задания категорий
ПОСЛЕ
<tr>
<td class="key">
<?php echo _JSHOP_DEPENDENT;?>
</td>
<td>
<?php echo $this->dependent_attribut;?>
<?php echo JHTML::tooltip(_JSHOP_INFO_DEPENDENT_ATTRIBUT);?>
</td>
</tr>
Добавляем
<!--my chose cats for attr-->
<tr>
<td class="key">
<?php
echo _JSHOP_SHOW_FOR_CATEGORY; ?>
</td>
<td>
<?php echo $this->lists['allcats'];?>
</td>
</tr>
<tr id="tr_categorys" <?php if ($this->attribut->allcats=="1") print "style='display:none;'";?>>
<td class="key">
<?php echo _JSHOP_CATEGORIES; ?>
</td>
<td>
<?php echo $this->lists['categories'];?>
</td>
</tr>
Осталось чуть-чуть в файл components\com_jshopping\tables\attribut.php в этот класс допишем функции для сериализации в базу
/*my func insert*/
function setCategorys($cats){
$this->cats = serialize($cats);
}
function getCategorys(){
if ($this->cats!=""){
return unserialize($this->cats);
}else{
return array();
}
}
/*end my*/
Все, теперь для атрибута можно задать категории товаров в которых он будет участвовать, замечание: при создании товара, атрибутов, для которых заданы категории, видно не будет, они появятся после сохранения/apply продукта, т.е. когда товар перейдет в режим edit с $_GET данными по текущей категории. Надеюсь ничего не забыл, если будут какие глюки пишите, попробуем разобраться...