Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 84 Ответов
  • 22079 Просмотров
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
АДМИНКА

1. \administrator\components\com_jshopping\controllers\productfields.php
После
Код: php
$type[] = JHTML::_('select.option', 1, _JSHOP_TEXT, 'id', 'value');
Вставляем
Код: php
$type[] = JHTML::_('select.option', 2, 'MultiSelect', 'id', 'value');

Мееняем
Код: php
$types = array(_JSHOP_LIST, _JSHOP_TEXT);
На
Код: php
$types = array(_JSHOP_LIST, _JSHOP_TEXT, 'MultiSelect');

2. \administrator\components\com_jshopping\views\product_fields\tmpl\list.php

Код: php
<?php if ($row->type==0){?>
Меняем на
Код: php
<?php if ($row->type==0 || $row->type==2){?>

3. \administrator\components\com_jshopping\controllers\products.php
Меняем
Код: 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."' />";
                }
на
Код: php
                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);
                }

После
Код: php
$dispatcher->trigger( 'onBeforeDisplaySaveProduct', array(&$post, &$product) );

вставляем

Код: php
        $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

Код: 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);
                }
            }
меняем на

Код: 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 ($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

Код: 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)."'";
                }
            }
        }
      
меняем на

Код: php
        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. фильтр не проверял, пока не на чем, но чисто теоретически должно работать. Все остальное проверил, работает.
*

fliginskih

  • Захожу иногда
  • 197
  • 15 / 1
Хотелось бы уточнить..
Вы хотите сказать что теперь Одна характеристика может иметь активной более чем одну опцию?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
*

evpadallas

  • Захожу иногда
  • 171
  • 42 / 1
Все это очень здорово, если бы не факт, что это все до первого обновления и после оного опять по новой править файлы :(
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Исправить после обновления пол-часа, все-же написано. А без правки ядра половина действий не получается, по этому все в ядре.
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Исправить после обновления пол-часа, все-же написано. А без правки ядра половина действий не получается, по этому все в ядре.
нууу уж не пол часа, максимум 5-10 минут :) Вы же сами сказали все написано;). +Спасибо вам!
Мои расширения - http://eco-joom.com/ru/
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
А если что-нибудь измениться? Придется ведь подумать.
*

evpadallas

  • Захожу иногда
  • 171
  • 42 / 1
Так о чем и речь. Функция оооочень нужная и удобная, почему бы разработчикам не включить ее в дистр?
*

dydy

  • Осваиваюсь на форуме
  • 29
  • 4 / 0
Спасибо, помогло. Фильтр работает нормально. Но есть недоработочка. В админке указал несколько опций, сохранил, захожу опять на страничку этого товара и вижу, что выбранные опции не подсвечиваются.
Они проставлены (сужу об этом по фильтру - выводится то, что ожидается), но в админке не отображается выбор.
В итоге очень неудобно.
Может подскажет кто, как пофиксить это?

Код
<select id="extra_field_3" name="extra_field_3[]" multiple="multiple" size="10">
  <option value="0"> - - - </option>
  <option value="20">Опция1</option>
  <option value="5">Опция2</option>
  <option value="6" selected="selected">Опция3</option>
  <option value="7">Опция4</option>
</select>

Выяснил, что при выборе нескольких активных опций не проставляется атрибут  selected="selected".
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Обратьи внимание на строку
Код
 else if ($v->type==2){
                    $obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name.'[]', 'multiple="multiple" size="10"', 'id', 'name', $product->$name);
                }
(в верхнем топике она есть.)
*

dydy

  • Осваиваюсь на форуме
  • 29
  • 4 / 0
Аркадий, можно поподробнее? С PHP не дружу, поэтому тяжело сообразить в чем дело. Вы бы очень мне помогли
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
К сожалению сейчас нет времени.
*

pyh

  • Захожу иногда
  • 117
  • 11 / 0
JoomShopping 3.5.0

в кратком описании продуктов, на странице категории вместо названия характеристики выводится ее айдишник.

то есть в детальном виде продукта
Язык: Английский, Китайский

а в категории
Язык: 18,24

Подскажите куда копать ?

*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
\components\com_jshopping\tables\product.php, посмотри чем отличаются версии файла в 3.5 и 3.3
*

pyh

  • Захожу иногда
  • 117
  • 11 / 0
function getExtraFields   не изменилась, ну за исключением  //экомир добавил мультихарактеристики...


а вот дальше очень сильно все поменялось.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Возьми оригиналы файлов (не правленные), найди в них отличия, посмотри как они повлияли на места, куда вносятся правки.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
А в чем отличия от этой темы, кроме версии?
У меня ЖШ 3.5.1 и работает только другой вариант :(
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Здесь более полный вариант, там не успел поиск доделать.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Аркадий, что-то походу я делаю не так. Эту версию Мультиполей никак не получается прикрутить. В результате в товаре на закладке "Характеристики" вообще пусто. Ни обычных, ни мультиполей не отображается.
Тут не написано, но я расширил поле extra_field_1 до 255 символов.
Версия 3.5.1 Помогите пожалуйста
В настройках имеется 3 характеристики: Два списка и один Мультиселект.
« Последнее редактирование: 29.03.2012, 14:33:21 от Linfuby »
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
На 3.5.1 не тестировал, возможно какие нибудь изменения произошли, из-за этого не работает.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
На 3.5.1 не тестировал, возможно какие нибудь изменения произошли, из-за этого не работает.
Виноват сам, прошу прощения.
Случайно удалил в файле \administrator\components\com_jshopping\controllers\products.php
Код
                $fields[] = $obj;
А так всё работает. Спасибо за Ваш труд.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
JoomShopping 3.5.0

в кратком описании продуктов, на странице категории вместо названия характеристики выводится ее айдишник.

то есть в детальном виде продукта
Язык: Английский, Китайский

а в категории
Язык: 18,24

Подскажите куда копать ?
В файле \administrator\components\com_jshopping\controllers\products.php
Код
                else if ($v->type==2){
                    $obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name.'[]', 'multiple="multiple" size="10"', 'id', 'name', $product->$name);
                }
Заменить на
Код
                else if ($v->type==2){
                    $obj->values = JHTML::_('select.genericlist', array_merge($f_option, $tmp), $name.'[]', 'multiple="multiple" size="10"', 'name', 'name', $product->$name);
                }
Но тогда если выбран первый вариант " - - - ", то он так и будет отображаться.
Upd.
Все изменения что описаны мною, применять Только в случае неработоспособности примера Аркадия.
« Последнее редактирование: 10.04.2012, 08:10:20 от Linfuby »
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Очередная проблема:
1. В файле \components\com_jshopping\tables\product.php
Код
                    if(count($fvalues)>0){
                        $fstring = array();
                        foreach($fvalues as $fvalue){
                            $fstring[] = $fieldvalues[$fvalue];
                        }
                        $fstring = implode(', ', $fstring);
                    }
                    else{
                        $fstring = '';
                    }
Изменил на
Код
                    if(count($fvalues)>0){
                        $fstring = array();
                        foreach($fvalues as $fvalue){
                            $fstring[] = $fvalue;
                        }
                        $fstring = implode(', ', $fstring);
                    }else{
                        $fstring = '';
                    }
До изменения, в карточке товара вместо характеристик отображались одни запятые разделяющие эти характеристики.
После изменения всё нормально отображается.
2. Какой файл отвечает за отображение характеристик в списке товаров? любые изменения в файле \components\com_jshopping\tables\product.php не влияют на характеристики в списке.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

pyh

  • Захожу иногда
  • 117
  • 11 / 0
JoomShopping 3.5.0

в кратком описании продуктов, на странице категории вместо названия характеристики выводится ее айдишник.

то есть в детальном виде продукта
Язык: Английский, Китайский
а в категории
Язык: 18,24

Решилось доп. обработкой при выводе, в файле /components/com_jshopping/templates/default/list_products/list_products.php

полный код файла

Спойлер
[свернуть]

Заменить PREFIX на реальный. 
*

leopoldus

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Help. Моя версия Joomshoping 3.3.2. Все сделал как написано, отличий в файлах 3.3.0 и 3.3.2 нет. Появился выбор Multiselect в опциях характеристики

 И в настройках "Товара" собственно видно этот Multiselect "Тест"

 НО когда я выбираю две характеристики "Тест1" и "Тест2" - они не хотят сохранятся. Если же выбрана одна характеристика, то сохраняется - как на картинки, например "Тест1".
 В прошлом топике написано сделать запрос
Цитировать
ALTER TABLE `jos_jshopping_products` CHANGE `extra_field_1` `extra_field_1` VARCHAR( 255 ) NOT NULL
естественно поменять префикс таблиц на свой,и ко всем полям, содержащим в названии extra_field. Иначе будет запоминаться только первое выбранное значение.
Мне надо его сделать?
Я пробывал сделать и не получилось...
делаю SQL запрос
Код
ALTER TABLE `d1x3p_jshopping_products` CHANGE `extra_field_1` `extra_field_1` VARCHAR( 255 ) NOT NULL
и мне пишет #1054 - Unknown column 'extra_field_1' in 'd1x3p_jshopping_products' Прилагаю скриншот. Подскажите пожалуйста
« Последнее редактирование: 31.03.2012, 21:43:02 от leopoldus »
*

kurandin

  • Захожу иногда
  • 159
  • 5 / 0
у кого работает в последней версии джумшопинга?
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Help. Моя версия Joomshoping 3.3.2. Все сделал как написано, отличий в файлах 3.3.0 и 3.3.2 нет. Появился выбор Multiselect в опциях характеристики
 И в настройках "Товара" собственно видно этот Multiselect "Тест"
 НО когда я выбираю две характеристики "Тест1" и "Тест2" - они не хотят сохранятся. Если же выбрана одна характеристика, то сохраняется - как на картинки, например "Тест1".
 В прошлом топике написано сделать запрос Мне надо его сделать?
Я пробывал сделать и не получилось...
1. Проверять сохранилось ли 2 характеристики надо в карточке товара на сайте, а не там же в админке. (Это я так понимаю недоработка. В настройках товара, в мультиселекте не выделяются все выбранные товары и каждый раз при сохранении надо вновь выделять характеристики. Пока ищу проблему)
2. Вы когда делали этот запрос, обратили внимание какие столбцы существуют в таблице d1x3p_jshopping_products?
у кого работает в последней версии джумшопинга?
У меня. С некоторыми недоработками.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

leopoldus

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Linfuby - Вы правы. Все работает, ну кроме подсветки характеристик в админке после сохранения. И еще у меня был один вопрос с Именем и Id. Когда в кратком описании товара на сайте отображаются Id.

Вариант мистера pyh , не сильно помог, так как у меня даже нет папки list_products
Решилось доп. обработкой при выводе, в файле /components/com_jshopping/templates/default/list_products/list_products.php

Linfuby -у Вас тоже была такая проблема, подскажите пожалуйста... Вариант с "----" не серьёзный...
« Последнее редактирование: 01.04.2012, 16:35:15 от leopoldus »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Вариант с "----" не серьёзный...
Этот вопрос буду решать завтра, так как все исходники на работе.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Решение работает точно на версии 3.5.1.
Вопрос с выделением выбранных характеристик в админке при редактировании товара не решен. Моих познаний в php не хватает разобраться :(
АДМИНКА
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"', 'name', 'name', $product->$name);
                }
Меняем
Код
        $f_option[] = JHTML::_('select.option', 0, " - - - ", 'id', 'name');
на
Код
        $f_option[] = " - - - ";

МОРДА
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)>=1){
                        $fstring = array();
                        foreach($fvalues as $fvalue){
                         If ($fvalue != "0")
                            $fstring[] = $fvalue;
                        }
                        $fstring = implode(', ', $fstring);
                        If ($fstring=="") $fstring = _JSHOP_NO;
                    }else{
                        $fstring = '';
                    }
                    $rows[] = array("name"=>$listfield[$field_id]->name, "value"=>$fstring, "groupname"=>$listfield[$field_id]->groupname);
                }
            }
        }
Добавлено:
\components\com_jshopping\templates\default\list_products\product.php
Код
						<?php print $extra_field['name']; ?>: <?php print $extra_field['value']; ?>
меняем на
Код
					<?php $fvalues = explode(',', $extra_field['value']);
if(count($fvalues)>=1){
$fstring = array();
foreach($fvalues as $fvalue){
If ($fvalue != "0")$fstring[] = $fvalue;
}
$fstring = implode(', ', $fstring);
If ($fstring=="") $fstring = _JSHOP_NO;
}else{
$fstring = '';
}?>
<?php print $extra_field['name']; ?>: <?php print $fstring; ?>
P.S. Это не полное описание действий. Читайте начало.
« Последнее редактирование: 02.04.2012, 14:12:01 от Linfuby »
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться