SDF-group

Как скрыть товары в категории Virtuemart

На одном из интернет-магазинов, работающих на Virtuemart 2 столкнулся с задачей запрета показа товаров в каталоге. В интернет-магазине были товары снятые с производства и заполнять им каталог товаров, видный покупателю не хотелось.

Первой пришла в голову мысль - снять товар с публикации, но с другой стороны товары проиндексированы поисковыми системами, и в случае если мы снимем товар с публикации система будет возвращать при запросе url "Товар не найдет", что приведет к росту битых ссылок и нгативному эффекту для продвижения сайта. В идеале хотелось среднее положение - условие, при котором страница товара работает, но в каталоге он не выводится, в этом смысле и волкы сыты и овцы целы - поисковые системы получают страницы по урл, покупатели получают в каталоге только актаульные предложения. При беглом просмотре такой функционал в Virtuemart 2 найдет не был и я решил дописать параметр товара, позволяющий это реализовать. Для этого потребовалось все лишь добавить дополнительное поле в БД и прописать пару строк в двух файлах компонента. Итак приступим.

Шаг первый

    • В Базе Данных необходимо создать дополнительное поле, которое будет отвечать за показ или запрет показа товара в категории. В таблице virtuemart_products я создал поле catl тип BOOLEAN.

Шаг второй

    • В файле /administrator/components/com_virtuemart/models/product.php в коде:
      if ($onlyPublished) {
      				$where[] = ' p.`published`="1" ';
      
      Добавляем проверку на разрешение показа категории, итоговый код должен выглядеть вот так:
      if ($onlyPublished) {
      				$where[] = ' p.`published`="1" ';
      			    $where[] = ' p.`catl`="0" ';
      			}
      
      У меня нужный код начинается где то на 269 строке файла, функция sortSearchListQuery.

Шаг третий

  • Теперь необходимо вывести управление данным параметром на страницу редактирования товара. Идем в /administrator/components/com_virtuemart/views/product/tmpl/product_edit_information.php, я добавил чекбокс после чекбокса публикации:
    					<td >
    						<?php echo  VmHTML::checkbox('published', $this->product->published); 
    						
    						echo "Не в категории:" . VmHTML::checkbox('catl', $this->product->catl);//SUPER
    						?>
    						
    					</td>
    
    У меня это где то 38 строка файла, теперь при включенном параметре "Не в категории" товар показываться в категории не будет, на его страница будет доступна по ссылке.

Удачи!

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


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