Расширенный поиск VirtueMart

Тема в разделе "Хаки и модификации", создана пользователем Bikitte, 30.01.2011.

  1. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Помогите справиться с расширенным поиском. Кто знает ответы на следующие проблемы отписывайтесь(желательно в подробностях для чайников)
    1. Основной вопрос, как вывести расширенный поиск в отдельный модуль, для дальнейшей настройки?
    2. Как организовать поиск по производителю, без добавления типа с параметром производитель.
    3. Как заставить искать по типам дочерних товаров? Удалил следующую строчку в shop_browse_queries.php
    Код (CODE):
    1. $where_clause[] = "`product_parent_id`=0 ";

    стал искать по дочерним, но в категориях стал выводить так же одни дочерние, а нужно там оставить только родительские.
    4.Какой файл редактировать, чтоб изменить страницу вывода результатов. Или просто изменить внешний вид этой страницы.
     
    Последнее редактирование: 30.01.2011
  2.  
  3. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Итак справился с первыми 3 пунктами, решение для тех кому интересно:
    1. Скачал самый простой модуль поиска (mod_virtuemart_search_dropdown), вытащил код из расширенного поиска VirtueMart и вставил в простой модуль.
    2. Вытащил код из модуля mod_virtuemart_manufacturers и вставил в простой модуль поиска.
    3.
    Код (CODE):
    1. if( empty( $keyword )&&empty($product_type_id )) {
    2.     $where_clause[] = "`product_parent_id`=0 ";
    3. }

    4. Пункт остался не решенным, результаты выводит страницей shop.browse по шаблону browse_3. Создал свой шаблон browse_result, но как вывести по нему пока не узнал.
     
  4. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    там много файлов которые надо редактировать
     
  5. varakuta
    Offline

    varakuta Недавно здесь

    Регистрация:
    21.05.2009
    Сообщения:
    271
    Симпатии:
    2
    Пол:
    Мужской
    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 выкидываете из кода ненужную лабуду
     
  6. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Не так уж и много:
    1. Создаем копию файла shop.browse например shop.browse_result
    2. Редактируем файл модуля поиска и заменяем вывод результата с shop.browse на shop.browse_result
    3. В shop.browse_result ищем $tpl->set('templatefile', $templatefile ); заменяем на $tpl->set('templatefile', 'файл_вашего_шаблона' );
     
  7. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо я уже примерно так и сделал , только использовал другой модуль.
     
  8. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Новая задача, как в результатах поиска вывести значения параметров типа ? Вставил следующий код в shop.browse_result, в шаблоне в нужном месте вставил <?php echo $Sezon ?> не показывает :mad: :(
    Код (CODE):
    1. elseif( $product_type_id) {
    2.         $q = ("SELECT Profil, Visota,  Diametr, Sezon FROM #__{vm}_product_type_2 WHERE product_id='$product_id'");
    3.         $db->query($q);
    4.         $db->next_record();
    5.         $Sezon = $db->f("Sezon");
    6.         $tpl->set('Sezon', $Sezon );      
    7.         }
     
  9. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Есть 2 категории производителей: 1. Производители шин. 2. Производители дисков. В каждой категории свой набор производителей, но как сделать, чтоб в поиске в выпадающем списке были только нужные производители например  только шин, а не все вместе!?
    Решение: mod_virtuemart_search_shini.xml
    Код (CODE):
    1. <params>
    2.         <param name="show_dropdown" type="list" default="1"
    3.             label="Show Drop Down List?"
    4.             description="When enabled, shows a Drop-Down List of Manufacturers which links to Products of the specific Manufacturers.">
    5.             <option value="1">Yes</option>
    6.             <option value="0">No</option>
    7.         </param>
    8.         <param name="auto" type="list" default="1"
    9.             label="Automatically select Manufacturers?"
    10.             description="This enables the Auto-Select of those Manufacturers that have Products in the actual Product Category the customer browses in.">
    11.             <option value="1">Yes</option>
    12.             <option value="0">No</option>
    13.         </param>
    14.         <param name="show_name" type="list" default="1"
    15.             label="Show Manufacturers' Names?"
    16.             description="This enables the display of the Manufacturers' names.  Often set to No when showing Manufacturers' images (logos).">
    17.             <option value="1">Yes</option>
    18.             <option value="0">No</option>
    19.         </param>   
    20.         <param name="show_cat" type="list" default="0"
    21.             label="Show Manufacturer Categories?"
    22.             description="This enables the display of the Manufacturer Category names.  The output is sorted alphabetically by Category, then Manufacturer.">
    23.             <option value="1">Yes</option>
    24.             <option value="0">No</option>
    25.         </param>   
    26.         <param name="show_1_cat" type="text" default=""
    27.             label="Show Only This Manufacturer Category"
    28.             description="This causes the display of only the Manufacturers from the specified Category.  Enter the Category Name." />
    29.         <param name="cache" type="radio" default="0"
    30.             label="Enable Cache"
    31.             description="Select whether to cache the content of this module">
    32.             <option value="0">No</option>
    33.             <option value="1">Yes</option>
    34.         </param>
    35.         <param name="moduleclass_sfx" type="text" default=""
    36.             label="Module Class Suffix"
    37.             description="A suffix to be applied to the CSS class of the module (table.moduletable), this allows individual module styling" />
    38.         <param name="class_sfx" type="text" default=""
    39.             label="Menu Class Suffix"
    40.             description="A suffix to be applied to the CSS class of the menu items" />
    41.     </params>

    mod_virtuemart_search_shini.php
    Код (CODE):
    1. $category_id = vmRequest::getInt( 'category_id' );
    2. $show_dropdown = $params->get( 'show_dropdown', 1 );
    3. $auto = $params->get( 'auto', 0 );
    4. $show_name = $params->get( 'show_name', 1 );
    5. $show_cat = $params->get( 'show_cat', 0 );
    6. $show_1_cat = $params->get( 'show_1_cat', '' );
    7. $moduleclass_sfx = $params->get( 'moduleclass_sfx', 1 );
    8.  
    9. require_once ( CLASSPATH. 'ps_product.php');
    10. require_once ( CLASSPATH. 'ps_product_product_type.php');
    11. require_once ( CLASSPATH. 'ps_product_type.php');
    12. require_once ( CLASSPATH. 'ps_product_type_parameter.php');
    13.  
    14. $query  = "SELECT DISTINCT m.manufacturer_id, m.mf_name";
    15. if( $show_cat == 1 ) $query .= ", mc.mf_category_name ";
    16.  
    17. $query .= "FROM #__{vm}_manufacturer m
    18.         LEFT JOIN #__{vm}_product_mf_xref mx ON mx.manufacturer_id = m.manufacturer_id
    19.         LEFT JOIN #__{vm}_product p ON p.product_id = mx.product_id
    20.         LEFT JOIN #__{vm}_product_category_xref cx ON cx.product_id = p.product_id";
    21. if( $show_cat == 1 || $show_1_cat != '' ) $query .= " LEFT JOIN #__{vm}_manufacturer_category mc ON mc.mf_category_id = m.mf_category_id ";
    22. $query .= "WHERE cx.category_id =\"".$category_id."\" ";
    23. if( $show_1_cat != '' ) $query  .= " AND mc.mf_category_name = \"".$show_1_cat."\" ";
    24. $query .= "ORDER BY ";
    25. if( $show_cat == 1 ) $query .= " mc.mf_category_name ASC , ";
    26. $query .= " m.mf_name ASC";
    27.  
    28. $query_all  = "SELECT m.manufacturer_id,m.mf_name ";
    29. if( $show_cat == 1 ) $query_all .= ", mc.mf_category_name ";
    30. $query_all .= " FROM #__{vm}_manufacturer m ";
    31. if( $show_cat == 1 || $show_1_cat != '' ) $query_all .= " LEFT JOIN #__{vm}_manufacturer_category mc ON mc.mf_category_id = m.mf_category_id ";
    32. if( $show_1_cat != '' ) $query_all .= " WHERE mc.mf_category_name = \"".$show_1_cat."\" ";
    33. $query_all .= " ORDER BY ";
    34. if( $show_cat == 1 ) $query_all .= " mc.mf_category_name ASC , ";
    35. $query_all .= " m.mf_name ASC";
    36.  
    37. $db = new ps_DB;
    38. if ($auto == 1 && !empty( $category_id ) ) {
    39.     $db->query( $query );
    40. } else {
    41.     $db->query( $query_all );
    42. }
    43. $res = $db->record;
    44. if( empty( $res )) {
    45.     if( $auto == 1 ) {
    46.         $db->query( $query_all );
    47.         $res = $db->record;
    48.     } else {
    49.         echo 'No manufacturers defined!';
    50.         return;
    51.     }
    52. }
     
  10. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Добил проблему с выводом значения определенного параметра типа в нужном месте в browse_x.
    Решение:
    Код (CODE):
    1. product_id=$db_browse->f("product_id");
    2.         $ds->query("SELECT Sezon
    3.                     FROM #__{vm}_product_type_2  
    4.                     WHERE product_id='$product_id'" );
    5.         $ds->next_record();
    6.         $sezon = $ds->f("Sezon");
    7. $products[$i]['sezon'] = $sezon;

    Ну и в browse_x в нужное место
    Код (CODE):
    1. <?php echo $sezon ?>
     
  11. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Следующая проблема в настройке вывода результата поиска это - пагинация.
    1. Как не выводить пагинацию, если результат поиска помещается на 1 странице?
    2. Как задать определенное значение товаров на странице вывода результатов, если вы убрали выпадающий список с этой возможностью?
    3. Как настроить нормальное отображение пагинации? Сейчас если товаров много, выводит 10 страниц , следующие 10 доступны только если кликнуть на кнопку следующая (см. картинку)
    [​IMG]
     
  12. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Решение:
    1. Файл /components/com_virtuemart/themes/default/templates/browse/include/browse.pagenav.tpl.php
    После
    Код (CODE):
    1. <?php if(!@is_object( $pagenav)) return;  ?>

    Вставляем
    Код (CODE):
    1. <?php
    2. $pag_string=$pagenav->getPagesLinks( $search_string );
    3. if(!strpos($pag_string,'href')) return;
    4. ?>

    2. Файл /components/com_virtuemart/virtuemart.php
    Коментим
    Код (CODE):
    1. $limit = intval( $vm_mainframe->getUserStateFromRequest( "viewlistlimit{$page}", 'limit', $mosConfig_list_limit ) );

    Вместо этого пишем
    Код (CODE):
    1. $limit='нужное число товаров на странице';

    3. Проблема актуальна
     
  13. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Как настроить нижнюю пагинацию в виде 1 2 ... 5 6 7 8 9 ... 48 49 при переходе на 9 страницу 1 2 ... 7 8 9 10 11 ... 48 49
     
  14. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Решение проблемы с навигацией:
    Код (CODE):
    1. function getPagesLinks($link='') {
    2.  
    3.     global $VM_LANG;
    4.  
    5.      
    6.  
    7.     $displayed_pages = 6;
    8.  
    9.     $total_pages = ceil( $this->total / $this->limit );
    10.  
    11.     $this_page = ceil( ($this->limitstart+1) / $this->limit );
    12.  
    13.  //   $start_loop = (floor(($this_page-1)/$displayed_pages))*$displayed_pages+1;
    14.  
    15.     if ($this_page <= $displayed_pages / 2 + 1 ) {
    16.  
    17.       $start_loop = 2;
    18.  
    19.     } else {
    20.  
    21.     $start_loop = $this_page - $displayed_pages / 2;
    22.  
    23.     }
    24.  
    25.     if ($start_loop + $displayed_pages - 1 < $total_pages) {
    26.  
    27.       $stop_loop = $start_loop + $displayed_pages - 1;
    28.  
    29.     } else {
    30.  
    31.       $stop_loop = $total_pages;
    32.  
    33.     }
    34.  
    35.     $html = '<ul class="pagination"><li>'.$VM_LANG->_('PN_PRETEXT').'</li>';
    36.  
    37.    
    38.  
    39.     if ($this_page > 1) {
    40.  
    41.       $page = ($this_page - 2) * $this->limit;
    42.  
    43.       if( $link != '') {
    44.  
    45.        // $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">&laquo;&laquo; ".$VM_LANG->_('PN_START')."</a></li>";
    46.  
    47.         $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_PREVIOUS')."\">&laquo; </a></li>";
    48.  
    49.       } else {
    50.  
    51.        // $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;\">&laquo;&laquo; ".$VM_LANG->_('PN_START')."</a></li>";
    52.  
    53.         $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;\">&laquo; </a></li>";
    54.  
    55.       }
    56.  
    57.     } else {
    58.  
    59.      // $html .= "\n<li><span class=\"pagenav\">&laquo;&laquo; ".$VM_LANG->_('PN_START')."</span></li>";
    60.  
    61.       $html .= "\n<li><span class=\"pagenav\"style=\"font-size: 12px;\">&laquo;</span></li>";
    62.  
    63.     }
    64.  
    65.     if ( $this_page == 1) {
    66.  
    67.        $html .= "\n<li><span class=\"pagenav_current\"> 1 </span></li>";
    68.  
    69.     }
    70.  
    71.       else {
    72.  
    73.        $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart=0')."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_START')."\">1</a></li>";
    74.  
    75.       }
    76.  
    77.     if ($this_page > $displayed_pages / 2 + 2 ){
    78.  
    79.       $html .= "\n<li>...</li>";
    80.  
    81.     }
    82.  
    83.     for ($i=$start_loop; $i <= $stop_loop; $i++) {
    84.  
    85.     if ($i != $total_pages)  {
    86.  
    87.       $page = ($i - 1) * $this->limit;
    88.  
    89.       if ($i == $this_page) {
    90.  
    91.         $html .= "\n<li><span class=\"pagenav_current\"> $i </span></li>";
    92.  
    93.       } else {
    94.  
    95.         if( $link != '') {
    96.  
    97.           $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\"><strong>$i</strong></a></li>";
    98.  
    99.         } else {
    100.  
    101.           $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>";
    102.  
    103.         }
    104.  
    105.       }
    106.  
    107.       }
    108.  
    109.     }
    110.  
    111.     if ($this_page < $total_pages - $displayed_pages / 2  ){
    112.  
    113.       $html .= "\n<li>...</li>";
    114.  
    115.     }
    116.  
    117.     if ( $this_page == $total_pages) {
    118.  
    119.        $html .= "\n<li><span class=\"pagenav_current\"> $total_pages </span></li>";
    120.  
    121.     }
    122.  
    123.       else {
    124.  
    125.       $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>";
    126.  
    127.       }
    128.  
    129.     if ($this_page < $total_pages) {
    130.  
    131.       $page = $this_page * $this->limit;
    132.  
    133.       $end_page = ($total_pages-1) * $this->limit;
    134.  
    135.       if( $link != '') {
    136.  
    137.         $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_NEXT')."\">  &raquo;</a></li>";
    138.  
    139.       //  $html .= "\n<li><a href=\"".vmRoute($link.'&limit='.$this->limit.'&limitstart='.$end_page)."\" class=\"pagenav\" title=\"".$VM_LANG->_('PN_END')."\"> ".$VM_LANG->_('PN_END')." &raquo;&raquo;</a></li>";
    140.  
    141.       } else {
    142.  
    143.         $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;\">  &raquo;</a></li>";
    144.  
    145.       //  $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')." &raquo;&raquo;</a></li>";
    146.  
    147.       }
    148.  
    149.     } else {
    150.  
    151.       $html .= "\n<li><span class=\"pagenav\" style=\"font-size: 12px;\"> &raquo;</span></li>";
    152.  
    153.      // $html .= "\n<li><span class=\"pagenav\">".$VM_LANG->_('PN_END')." &raquo;&raquo;</span></li>";
    154.  
    155.     }
    156.  
    157.     $html .= "\n</ul>";
    158.  
    159.     return $html;
    160.  
    161.   }

    [​IMG]
     
  15. Offline

    cheizer Недавно здесь

    Регистрация:
    18.02.2011
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    это все хорошо, но еще актуальная тема, как сохранить параметры пользователя в форме расширенного поиска после перезагрузки страницы?

    Ведь после выдачи результата поиска, не очень удобно так как не видишь по каким параметрам искал до этого.
     
  16. Offline

    Bikitte Недавно здесь

    Регистрация:
    20.01.2011
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Не знаю как я этого добился, но у меня как раз все формы при выводе результатов остаются такими как их выбрал пользователь.
     
  17. Offline

    cheizer Недавно здесь

    Регистрация:
    18.02.2011
    Сообщения:
    2
    Симпатии:
    0
    Пол:
    Мужской
    Вы специально что то делали для этого? Или у вас так уже было? И можно взгянуть на работу вашего поиска?
     
  18. Offline

    K.Lung Недавно здесь

    Регистрация:
    15.08.2011
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    а как все таки реализовать второй пункт поиска по производителю
    - если можно поподробнее - то есть как я понял мне так и нужно - чтобы не было отдельного поля сортировки/поиска по производителю, а в общем модуле поиска виртумарта выдавались результаты как обычные - наименование, артикул, описание, так и по производителю.
     

Поделиться этой страницей

Загрузка...