1 1 1 1 1 1 1 1 1 1 Рейтинг: 4.25 - 4 отзывов

Если у вас большой магазин, то лучше всего его заполнять с помощью файла экспорта-импорта, а не вписывать каждый товар в панели управления.

 

Для начала я использовал бесплатные модули экспорта-импорта, немного допиливая их под свои нужды (исправляя проблему с UTF-8 и ошибку замены даты создания товара).

 

Кот в коробке. Решено. Проблема с модулем импорта Nevigena в JoomShopping, смешиваются характеристики разных групп товаров.

Проблема с модулем импорта Nevigena в JoomShopping, смешиваются характеристики разных групп товаров

 

 

Однако, если вы хотите вносить абсолютно все значения нового товара прямо в файле Excel, чтобы потом его импортировать в магазин, лучше всего с этим справляется модуль экспорта-импорта Nevigena (оф. сайт).

 

Пока разбирался с модулем, все в нем нравилось. В файле Excel пишем все, вплоть до названия картинки, которую потом заливаем в папку изображений товаров.

Вот только, тут же обнаружилась проблема (у вас ее, впрочем может и не быть, сейчас объясню почему).

денежный трактор

Так как структура магазина такая:

Джин: 
Крепость 
Выдержка 
Страна 

Виски: 
Крепость 
Выдержка 
Страна 

Ликер: 
Крепость 
Выдержка 
Страна 
и т.д. 

То есть существует много одинаковых по названию характеристик, которые применяются к разным категориям товара. 
Сделать одну общую для всех категорий алкоголя, характеристику, нельзя, так как тогда в фильтре будут показаны например в Ликере те страны, которые есть в Виски, но которых нет в Ликерах. То есть в фильтре на сайте будут пустые характеристики. 

Если же импортировать как есть этот файл, то Характеристики в товар не добавляются, а в Опции-Характеристиках в разных категориях, происходит смешение характеристик с одинаковым названием. 

То есть, например в Граппу добавились все значения Крепости из Виски. 

 

То есть смешиваются все характеристики. А это уже проблема. Как ее решить? Забегая вперед, остановлюсь еще на одной проблеме модуля экспорта-импорта Nevigena. Так же, при импорте, происходит дикое смешение всех числовых характеристик. например если были характеристики 0,5 л и 40,5%, то теперь в списке характеристик прибавятся и 5 л и 5%. Во всем виновата запятая, как оказалось. Но обо всем по порядку.

 

Столбец AF, нужно заполнять согласно правилам описанным в документации. 
Максимальный формат: 
list/Группа характеристики;Характеристика:Опции через запятую 
Без указания list - Характеристика создается как множественный список. 

 

Учитывая, что характеристика уже создана, то можно list опустить (либо добавить если нужен простой выпадающий список). 
Остается: 
Группа характеристики;Характеристика:Опции через запятую 

В моем фале было следующее: 
Тип виски:Blended|Страна:Шотландия|Выдержка:3 года|Крепость:40%|Объем:0,5 л 

 

То есть для "Крепость" не указана группа. В данном случае было бы правильнее для Виски делать так: 
Тип виски:Blended|Виски;Страна:Шотландия|Виски;Выдержка:3 года|Виски;Крепость:40%|Объем:0,5 л 

 

Читаем документацию далее: 
Возможность указывать значения характеристики содержащей в себе запятую. Формат: delimiter/Характеристика:Опция с запятой. (Нельзя использовать с list/) 
Так как 0,5л содержит запятую, необходимо добавить delimiter/ (Либо указывать точку 0.5л) 

В итоге получаем правильную строку 
Тип виски:Blended|Виски;Страна:Шотландия|Виски;Выдержка:3 года|Виски;Крепость:40%|delimiter/Объем:0,5 л.

 

То есть самое важное, это добавлять delimiter/ в тех характеристиках, в которых у вас есть запятые (45,5%)/ Либо, еще проще, писать все характеристики с точками, а не с запятыми (45.5%).

 

Как видим, проблема с модулем экcпорта-импорта от Nevigena, решается просто. Тем более, что ожидается обновление этого модуля, с учетом данной проблемы.

Во всем остальном же он просто замечателен по удобству пользования и скорости наполнения магазина.

 

После создания групп товаров, их можно сделать не видимыми в карточке товара, удалив строку <div class='extra_fields_group'><?php print $extra_field_group?></div>: Как улучшить карточку товара?

 

Так как Nevigen продает и модуль фильтра для магазина (очень симпатично смотрится кстати), я стал искать метод приведения стандартного модуля к, если и не точному подобию платного, то хотя бы более-менее похожему. Что у меня получилось?

 

Первое. При изменениях в файле шаблона фильтра, вы рискуете их потерять при обновлении. Поэтому нужно этот файл перенести в шаблон своего сайта.

То есть из:

/modules/mod_jshopping_filters/tmpl/default.php

файл default.php следует перенести в:

/templates/ВАШ ШАБЛОН/html/mod_jshopping_filters/default.php.

Дальше все просто. Идем в файл /modules/mod_jshopping_filters/mod_jshopping_filters.xml.

<field
name="moduleclass_sfx"
type="text"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />

<field name="show_name_search" type="radio" default="0" label="Поиск по названию">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>            
<field name="show_search_button" type="radio" default="0" label="Кнопка поиска">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>                                
<field name="select" type="text" label="id характеристик в select через запятую" description="" />
<field name="range" type="text" label="id характеристик в диапазон через запятую" description="" />                
<field name="btn_text" type="text" label="текст на кнопке" default="Поиск" description="" />

Теперь в файле /templates/ВАШ ШАБЛОН/html/mod_jshopping_filters/default.php

}

<?php if ($show_prices){?>
<span><?php print JText::_('PRICE')?>:<br/>
<span><?php print JText::_('FROM')?> <input type = "text" class = "inputbox" name = "fprice_from" id="fprice_from" size="7" value="<?php if ($fprice_from>0) print $fprice_from?>" /></span>
<span><?php print JText::_('TO')?> <input type = "text" class = "inputbox" name = "fprice_to"  id="fprice_to" size="7" value="<?php if ($fprice_to>0) print $fprice_to?>" /></span>
<?php print $jshopConfig->currency_code?>
</span>    
<input type="submit" value="<?php print JText::_('GO')?>">    
<span><a href="#" onclick="modFilterclearPriceFilter();return false;"><?php print JText::_('RESET FILTER')?></a></span>
<?php }?>

<?php
/* Считываем параметры */
$selectsparam = $params->get('select', 999);
$range = $params->get('range', 999);
?>
<?php if($params->get('show_name_search', 0)){
//Поиск по имени
?>
<div>
<div>Название</div>
<input type="text" name="name_search" id=""
value="<?php echo htmlspecialchars($_POST['name_search']); ?>" />
</div>
<?php } ?>
<?php if(is_array($characteristic_displayfields) && count($characteristic_displayfields)){ ?>
<div>
<?php foreach($characteristic_displayfields as $ch_id){
if(is_array($characteristic_fieldvalues[$ch_id])){
?>
<div><?php echo $characteristic_fields[$ch_id]->name;?></div>
<?php
/*Первое условие, где преобразуем в select. Все просто - преобразуем строку из параметров
в массив, разбив ее по знаку запятой и затем смотрим, есть ли в этом списке текущий выводимый элемент */
if(in_array($ch_id, explode(',', $selectsparam))){
?>
<select name="extra_fields[<?php print $ch_id?>][]" id="genre" onchange="document.jshop_filters.submit();">
<!-- Первая опция, чтобы пользователь мог сбросить этот фильтр -->
<option value="0">выбирите из списка</option>
<?php foreach($characteristic_fieldvalues[$ch_id] as $val_id=> $val_name){ ?>
<option value="<?php print $val_id;?>" <?php if(is_array($extra_fields_active[$ch_id]) && in_array($val_id, $extra_fields_active[$ch_id]))
print "selected";?> /> <?php print $val_name;?></option>
<?php }?>
</select>
<?php
/* Тут мы делаем ту же операцию, только с параметром поиска по диапазону. Работать пока не будет
без изменений в ядре компонента */
} elseif(in_array($ch_id, explode(',', $range))) {
?>
<div>
от
<input type="text" name="extra_fields_ft[<?php print $ch_id?>][from]" id=""
value="<?php if(isset($extra_fields_ft_active[$ch_id]['from']))
echo $extra_fields_ft_active[$ch_id]['from'];?>" />
до
<input type="text" name="extra_fields_ft[<?php print $ch_id?>][to]" id=""
value="<?php if(isset($extra_fields_ft_active[$ch_id]['to']))
echo $extra_fields_ft_active[$ch_id]['to'];?>" />
</div>
<?php
/* В противном случае выводим обычные чекбоксы */
} else {
?>
<input type="hidden" name="extra_fields[<?php print $ch_id?>][]" value="0" />        
<?php foreach($characteristic_fieldvalues[$ch_id] as $val_id=> $val_name){ ?>
<input type="checkbox" name="extra_fields[<?php print $ch_id?>][]"
value="<?php print $val_id;?>" <?php if(is_array($extra_fields_active[$ch_id]) && in_array($val_id, $extra_fields_active[$ch_id]))
print "checked";?> onclick="document.jshop_filters.submit();" /> <?php print $val_name; ?><br />
<?php } ?>
<?php
}
}?>
<?php }?>
</div>
<?php
}
/*Тут смотрим - надо ли выводить кнопку поиска и какой текст на ней будет. Если текст не указали - просто пишет на
кнопке слово "Поиск" */
if($params->get('show_search_button')){
?><br />
<button onclick="document.jshop_filters.submit();"><?php echo $params->get("btn_text", "Поиск"); ?></button>
<?php } ?>

 

В файле /components/com_jshopping/lib/jtableauto.php

if ($type!="vendor" && is_array($filters['vendors']) && count($filters['vendors'])){
$adv_query .= " AND prod.vendor_id in (".implode(",",$filters['vendors']).")";
}

if(isset($filters['name_search']) && !empty($filters['name_search'])) {
$adv_query .= " AND prod.`name_ru-RU` like \"%".trim($filters['name_search'])."%\"";
}

if(is_array($filters['extra_fields_ft'])){
foreach($filters['extra_fields_ft'] as $id=> $v){
if(isset($v["from"]) && $v['from'] > 0){
$from = (int) $db->escape($v['from']);
$adv_query .= " AND prod.`extra_field_" . $id . "` >= " . $from;
}
if(isset($v["to"]) && $v['to'] > 0){
$to = (int) $db->escape($v['to']);
$adv_query .= " AND prod.`extra_field_" . $id . "` <= " . $to;
}
}
}

 

В файле components/com_jshopping/lib/functions.php нас интересует getBuildFilterListProduct:

$fprice_from = $mainframe->getUserStateFromRequest( $contextfilter.'fprice_from', 'fprice_from');
$fprice_from = saveAsPrice($fprice_from);

$extra_fields_ft = $mainframe->getUserStateFromRequest( $contextfilter.'extra_fields_ft', 'extra_fields_ft', array());
$name_search = JRequest::getString('name_search');

$filters['vendors'] = $vendors;

$filters['name_search'] = $name_search;
$filters['extra_fields_ft'] = $extra_fields_ft;

 

P.S. Оценили как удобно пользоваться спойлером?

 

Теперь остается установить правильные параметры фильтра.

Улучшить фильтр магазина на JoomShopping

 

И у нас будет такой вид фильтра.

Улучшить фильтр магазина на JoomShopping

 

  

Хотите заработать своим писательским талантом?
Есть надежный и понятный способ.
Ознакомиться

 

 

Посмотреть хорошее видео

Добавить комментарий

Защитный код
Обновить