АДМИНКА1. \administrator\components\com_jshopping\controllers\productfields.php
После
$type[] = JHTML::_('select.option', 1, _JSHOP_TEXT, 'id', 'value');
Вставляем
$type[] = JHTML::_('select.option', 2, 'MultiSelect', 'id', 'value');
Мееняем
$types = array(_JSHOP_LIST, _JSHOP_TEXT);
На
$types = array(_JSHOP_LIST, _JSHOP_TEXT, 'MultiSelect');
2. \administrator\components\com_jshopping\views\product_fields\tmpl\list.php
<?php if ($row->type==0){?>
Меняем на
<?php if ($row->type==0 || $row->type==2){?>
3. \administrator\components\com_jshopping\controllers\products.php
Меняем
if ($v->type==0){
$obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name, '', 'id', 'name', $product->$name);
}else{
$obj->values = "<input type='text' name='".$name."' value='".$product->$name."' />";
}
на
if ($v->type==0){
$obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name, '', 'id', 'name', $product->$name);
}else if($v->type==1){
$obj->values = "<input type='text' name='".$name."' value='".$product->$name."' />";
}
else if ($v->type==2){
$obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name.'[]', 'multiple="multiple" size="10"', 'id', 'name', $product->$name);
}
После
$dispatcher->trigger( 'onBeforeDisplaySaveProduct', array(&$post, &$product) );
вставляем
$newPost = array();
foreach($post as $k => $v){
if(is_array($v) && strpos($k,'extra_field')!== false){
$newPost[$k] = implode(',', $v);
}
else{
$newPost[$k] = $v;
}
}
$post = $newPost;
МОРДА1. \components\com_jshopping\tables\product.php
if ($field->type==0){
if ($this->$field_name!=0){
$rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$fieldvalues[$this->$field_name], "groupname"=>$listfield[$field_id]->groupname);
}
}else{
if ($this->$field_name!=""){
$rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$this->$field_name, "groupname"=>$listfield[$field_id]->groupname);
}
}
меняем на
if ($field->type==0){
if ($this->$field_name!=0){
$rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$fieldvalues[$this->$field_name], "groupname"=>$listfield[$field_id]->groupname);
}
}else if ($field->type==1){
if ($this->$field_name!=""){
$rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$this->$field_name, "groupname"=>$listfield[$field_id]->groupname);
}
}else if ($field->type==2){
if ($this->$field_name!=""){
//экомир добавил мультихарактеристики
$fvalues = explode(',', $this->$field_name);
if(count($fvalues)>0){
$fstring = array();
foreach($fvalues as $fvalue){
$fstring[] = $fieldvalues[$fvalue];
}
$fstring = implode(', ', $fstring);
}
else{
$fstring = '';
}
$rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$fstring, "groupname"=>$listfield[$field_id]->groupname);
}
}
ФИЛЬТР ПО МУЛЬТИПОЛЯМ1. \components\com_jshopping\lib\jtableauto.php
if (is_array($filters['extra_fields'])){
foreach($filters['extra_fields'] as $f_id=>$vals){
if (is_array($vals) && count($vals)){
$adv_query .= " AND prod.`extra_field_".$f_id."` in (".implode(",",$vals).")";
}elseif(is_string($vals) && $vals!=""){
$adv_query .= " AND prod.`extra_field_".$f_id."`='".$db->getEscaped($vals)."'";
}
}
}
меняем на
if (is_array($filters['extra_fields'])){
$q = 'SELECT `id`, `type` FROM `#__jshopping_products_extra_fields`';
$db->setQuery($q);
$extrafields = $db->loadObjectList('id');
foreach($filters['extra_fields'] as $f_id=>$vals){
if($extrafields[$f_id]->type == 2){
if (is_array($vals) && count($vals)){
foreach($vals as $val){
$adv_query .= " AND FIND_IN_SET($val, prod.`extra_field_".$f_id."`) > 0";
}
}elseif(is_string($vals) && $vals!=""){
$adv_query .= " AND FIND_IN_SET($vals, prod.`extra_field_".$f_id."`) > 0";
}
}
else{
if (is_array($vals) && count($vals)){
$adv_query .= " AND prod.`extra_field_".$f_id."` in (".implode(",",$vals).")";
}elseif(is_string($vals) && $vals!=""){
$adv_query .= " AND prod.`extra_field_".$f_id."`='".$db->getEscaped($vals)."'";
}
}
}
}
P.S. фильтр не проверял, пока не на чем, но чисто теоретически должно работать. Все остальное проверил, работает.