Помогите справиться с расширенным поиском. Кто знает ответы на следующие проблемы отписывайтесь(желательно в подробностях для чайников) 1. Основной вопрос, как вывести расширенный поиск в отдельный модуль, для дальнейшей настройки? 2. Как организовать поиск по производителю, без добавления типа с параметром производитель. 3. Как заставить искать по типам дочерних товаров? Удалил следующую строчку в shop_browse_queries.php Код (CODE): $where_clause[] = "`product_parent_id`=0 "; стал искать по дочерним, но в категориях стал выводить так же одни дочерние, а нужно там оставить только родительские. 4.Какой файл редактировать, чтоб изменить страницу вывода результатов. Или просто изменить внешний вид этой страницы.
Итак справился с первыми 3 пунктами, решение для тех кому интересно: 1. Скачал самый простой модуль поиска (mod_virtuemart_search_dropdown), вытащил код из расширенного поиска VirtueMart и вставил в простой модуль. 2. Вытащил код из модуля mod_virtuemart_manufacturers и вставил в простой модуль поиска. 3. Код (CODE): if( empty( $keyword )&&empty($product_type_id )) { $where_clause[] = "`product_parent_id`=0 "; } 4. Пункт остался не решенным, результаты выводит страницей shop.browse по шаблону browse_3. Создал свой шаблон browse_result, но как вывести по нему пока не узнал.
http://autobase.com.ua/index.php?option=com_virtuemart&page=shop.parameter_search_form&product_type_id=1&Itemid=53 id у вас может быть другое.. но суть такая 1 открываете исходный код страницы 2 Копируете от "Расширенный поиск по характеристикам" до кнопки ПОИСК включительно 3 Устанавливаете mod_php 4 вставляете код в модуль mod_php 5 далее выводите модуль где душа ваша пожелает 6 выкидываете из кода ненужную лабуду
Не так уж и много: 1. Создаем копию файла shop.browse например shop.browse_result 2. Редактируем файл модуля поиска и заменяем вывод результата с shop.browse на shop.browse_result 3. В shop.browse_result ищем $tpl->set('templatefile', $templatefile ); заменяем на $tpl->set('templatefile', 'файл_вашего_шаблона' );
Новая задача, как в результатах поиска вывести значения параметров типа ? Вставил следующий код в shop.browse_result, в шаблоне в нужном месте вставил <?php echo $Sezon ?> не показывает Код (CODE): elseif( $product_type_id) { $q = ("SELECT Profil, Visota, Diametr, Sezon FROM #__{vm}_product_type_2 WHERE product_id='$product_id'"); $db->query($q); $db->next_record(); $Sezon = $db->f("Sezon"); $tpl->set('Sezon', $Sezon ); }
Есть 2 категории производителей: 1. Производители шин. 2. Производители дисков. В каждой категории свой набор производителей, но как сделать, чтоб в поиске в выпадающем списке были только нужные производители например только шин, а не все вместе!? Решение: mod_virtuemart_search_shini.xml Код (CODE): <params> <param name="show_dropdown" type="list" default="1" label="Show Drop Down List?" description="When enabled, shows a Drop-Down List of Manufacturers which links to Products of the specific Manufacturers."> <option value="1">Yes</option> <option value="0">No</option> </param> <param name="auto" type="list" default="1" label="Automatically select Manufacturers?" description="This enables the Auto-Select of those Manufacturers that have Products in the actual Product Category the customer browses in."> <option value="1">Yes</option> <option value="0">No</option> </param> <param name="show_name" type="list" default="1" label="Show Manufacturers' Names?" description="This enables the display of the Manufacturers' names. Often set to No when showing Manufacturers' images (logos)."> <option value="1">Yes</option> <option value="0">No</option> </param> <param name="show_cat" type="list" default="0" label="Show Manufacturer Categories?" description="This enables the display of the Manufacturer Category names. The output is sorted alphabetically by Category, then Manufacturer."> <option value="1">Yes</option> <option value="0">No</option> </param> <param name="show_1_cat" type="text" default="" label="Show Only This Manufacturer Category" description="This causes the display of only the Manufacturers from the specified Category. Enter the Category Name." /> <param name="cache" type="radio" default="0" label="Enable Cache" description="Select whether to cache the content of this module"> <option value="0">No</option> <option value="1">Yes</option> </param> <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="A suffix to be applied to the CSS class of the module (table.moduletable), this allows individual module styling" /> <param name="class_sfx" type="text" default="" label="Menu Class Suffix" description="A suffix to be applied to the CSS class of the menu items" /> </params> mod_virtuemart_search_shini.php Код (CODE): $category_id = vmRequest::getInt( 'category_id' ); $show_dropdown = $params->get( 'show_dropdown', 1 ); $auto = $params->get( 'auto', 0 ); $show_name = $params->get( 'show_name', 1 ); $show_cat = $params->get( 'show_cat', 0 ); $show_1_cat = $params->get( 'show_1_cat', '' ); $moduleclass_sfx = $params->get( 'moduleclass_sfx', 1 ); require_once ( CLASSPATH. 'ps_product.php'); require_once ( CLASSPATH. 'ps_product_product_type.php'); require_once ( CLASSPATH. 'ps_product_type.php'); require_once ( CLASSPATH. 'ps_product_type_parameter.php'); $query = "SELECT DISTINCT m.manufacturer_id, m.mf_name"; if( $show_cat == 1 ) $query .= ", mc.mf_category_name "; $query .= "FROM #__{vm}_manufacturer m LEFT JOIN #__{vm}_product_mf_xref mx ON mx.manufacturer_id = m.manufacturer_id LEFT JOIN #__{vm}_product p ON p.product_id = mx.product_id LEFT JOIN #__{vm}_product_category_xref cx ON cx.product_id = p.product_id"; if( $show_cat == 1 || $show_1_cat != '' ) $query .= " LEFT JOIN #__{vm}_manufacturer_category mc ON mc.mf_category_id = m.mf_category_id "; $query .= "WHERE cx.category_id =\"".$category_id."\" "; if( $show_1_cat != '' ) $query .= " AND mc.mf_category_name = \"".$show_1_cat."\" "; $query .= "ORDER BY "; if( $show_cat == 1 ) $query .= " mc.mf_category_name ASC , "; $query .= " m.mf_name ASC"; $query_all = "SELECT m.manufacturer_id,m.mf_name "; if( $show_cat == 1 ) $query_all .= ", mc.mf_category_name "; $query_all .= " FROM #__{vm}_manufacturer m "; if( $show_cat == 1 || $show_1_cat != '' ) $query_all .= " LEFT JOIN #__{vm}_manufacturer_category mc ON mc.mf_category_id = m.mf_category_id "; if( $show_1_cat != '' ) $query_all .= " WHERE mc.mf_category_name = \"".$show_1_cat."\" "; $query_all .= " ORDER BY "; if( $show_cat == 1 ) $query_all .= " mc.mf_category_name ASC , "; $query_all .= " m.mf_name ASC"; $db = new ps_DB; if ($auto == 1 && !empty( $category_id ) ) { $db->query( $query ); } else { $db->query( $query_all ); } $res = $db->record; if( empty( $res )) { if( $auto == 1 ) { $db->query( $query_all ); $res = $db->record; } else { echo 'No manufacturers defined!'; return; } }
Добил проблему с выводом значения определенного параметра типа в нужном месте в browse_x. Решение: Код (CODE): product_id=$db_browse->f("product_id"); $ds->query("SELECT Sezon FROM #__{vm}_product_type_2 WHERE product_id='$product_id'" ); $ds->next_record(); $sezon = $ds->f("Sezon"); $products[$i]['sezon'] = $sezon; Ну и в browse_x в нужное место Код (CODE): <?php echo $sezon ?>
Следующая проблема в настройке вывода результата поиска это - пагинация. 1. Как не выводить пагинацию, если результат поиска помещается на 1 странице? 2. Как задать определенное значение товаров на странице вывода результатов, если вы убрали выпадающий список с этой возможностью? 3. Как настроить нормальное отображение пагинации? Сейчас если товаров много, выводит 10 страниц , следующие 10 доступны только если кликнуть на кнопку следующая (см. картинку)
Решение: 1. Файл /components/com_virtuemart/themes/default/templates/browse/include/browse.pagenav.tpl.php После Код (CODE): <?php if(!@is_object( $pagenav)) return; ?> Вставляем Код (CODE): <?php $pag_string=$pagenav->getPagesLinks( $search_string ); if(!strpos($pag_string,'href')) return; ?> 2. Файл /components/com_virtuemart/virtuemart.php Коментим Код (CODE): $limit = intval( $vm_mainframe->getUserStateFromRequest( "viewlistlimit{$page}", 'limit', $mosConfig_list_limit ) ); Вместо этого пишем Код (CODE): $limit='нужное число товаров на странице'; 3. Проблема актуальна
Как настроить нижнюю пагинацию в виде 1 2 ... 5 6 7 8 9 ... 48 49 при переходе на 9 страницу 1 2 ... 7 8 9 10 11 ... 48 49
Решение проблемы с навигацией: Код (CODE): function getPagesLinks($link='') { global $VM_LANG; $displayed_pages = 6; $total_pages = ceil( $this->total / $this->limit ); $this_page = ceil( ($this->limitstart+1) / $this->limit ); // $start_loop = (floor(($this_page-1)/$displayed_pages))*$displayed_pages+1; if ($this_page <= $displayed_pages / 2 + 1 ) { $start_loop = 2; } else { $start_loop = $this_page - $displayed_pages / 2; } if ($start_loop + $displayed_pages - 1 < $total_pages) { $stop_loop = $start_loop + $displayed_pages - 1; } else { $stop_loop = $total_pages; } $html = '<ul class="pagination"><li>'.$VM_LANG->_('PN_PRETEXT').'</li>'; if ($this_page > 1) { $page = ($this_page - 2) * $this->limit; if( $link != '') { // $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">«« ".$VM_LANG->_('PN_START')."</a></li>"; $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_PREVIOUS')."\">« </a></li>"; } else { // $html .= "\n<li><a href=\"#beg\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\" onclick=\"javascript: document.adminForm.limitstart.value=0; document.adminForm.submit();return false;\">«« ".$VM_LANG->_('PN_START')."</a></li>"; $html .= "\n<li><a href=\"#prev\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_PREVIOUS')."\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\">« </a></li>"; } } else { // $html .= "\n<li><span class=\"pagenav\">«« ".$VM_LANG->_('PN_START')."</span></li>"; $html .= "\n<li><span class=\"pagenav\"style=\"font-size: 12px;\">«</span></li>"; } if ( $this_page == 1) { $html .= "\n<li><span class=\"pagenav_current\"> 1 </span></li>"; } else { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">1</a></li>"; } if ($this_page > $displayed_pages / 2 + 2 ){ $html .= "\n<li>...</li>"; } for ($i=$start_loop; $i <= $stop_loop; $i++) { if ($i != $total_pages) { $page = ($i - 1) * $this->limit; if ($i == $this_page) { $html .= "\n<li><span class=\"pagenav_current\"> $i </span></li>"; } else { if( $link != '') { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\"><strong>$i</strong></a></li>"; } else { $html .= "\n<li><a href=\"#$i\" class=\"pagenav\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\"><strong>$i</strong></a></li>"; } } } } if ($this_page < $total_pages - $displayed_pages / 2 ){ $html .= "\n<li>...</li>"; } if ( $this_page == $total_pages) { $html .= "\n<li><span class=\"pagenav_current\"> $total_pages </span></li>"; } else { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.(($total_pages-1) * $this->limit))."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\"> $total_pages</a></li>"; } if ($this_page < $total_pages) { $page = $this_page * $this->limit; $end_page = ($total_pages-1) * $this->limit; if( $link != '') { $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_NEXT')."\"> »</a></li>"; // $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$end_page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\"> ".$VM_LANG->_('PN_END')." »»</a></li>"; } else { $html .= "\n<li><a href=\"#next\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_NEXT')."\" onclick=\"javascript: document.adminForm.limitstart.value=$page; document.adminForm.submit();return false;\"> »</a></li>"; // $html .= "\n<li><a href=\"#end\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\" onclick=\"javascript: document.adminForm.limitstart.value=$end_page; document.adminForm.submit();return false;\"> ".$VM_LANG->_('PN_END')." »»</a></li>"; } } else { $html .= "\n<li><span class=\"pagenav\" style=\"font-size: 12px;\"> »</span></li>"; // $html .= "\n<li><span class=\"pagenav\">".$VM_LANG->_('PN_END')." »»</span></li>"; } $html .= "\n</ul>"; return $html; }
это все хорошо, но еще актуальная тема, как сохранить параметры пользователя в форме расширенного поиска после перезагрузки страницы? Ведь после выдачи результата поиска, не очень удобно так как не видишь по каким параметрам искал до этого.
Не знаю как я этого добился, но у меня как раз все формы при выводе результатов остаются такими как их выбрал пользователь.
Вы специально что то делали для этого? Или у вас так уже было? И можно взгянуть на работу вашего поиска?
а как все таки реализовать второй пункт поиска по производителю - если можно поподробнее - то есть как я понял мне так и нужно - чтобы не было отдельного поля сортировки/поиска по производителю, а в общем модуле поиска виртумарта выдавались результаты как обычные - наименование, артикул, описание, так и по производителю.