
В этом кейсе я расскажу о том, как можно вывести остатки товаров Virtuemart в списке товаров в админке без каких-либо хаков. Это может быть очень удобно, если вы ведете контроль остатков на сайте. Информация актуальна для Virtuemart 2,3 и выше.
Содержание
Переопределение макетов в административной части Joomla
Знаете, должен признаться: я работаю с Joomla уже восьмой год, но идея переопределения макетов компонентов в админке пришла мне в голову только на прошлой неделе. В процессе осмысливания очередной задачи я задумался: «А почему, собственно, мы не можем переопределить макет категории товаров или страницы товара админки? Ведь этот тот же самый компонент, только шаблон административный.» Попробовал, и, знаете, работает. Почему-то раньше я никогда даже не думал в этом ключе. Готов поспорить, что многие из вас тоже. Но давайте ближе к делу.
Переопределение макета списка товаров Virtuemart
Действуем в точной аналогии с тем, как если бы мы переопределяли макет категории товаров Virtuemart на фронтенде. Копируем файл:
administrator/components/com_virtuemart/views/product/tmpl/default.php
в стандартный шаблон админки (вероятно, его использует 99% сайтов на Joomla):
administrator/templates/isis/html/com_virtuemart/product/
Каталоги, которых не хватает, создаем вручную.
После этого вносим изменения в скопированный файл.
Вывод остатков по каждому товару в списке товаров Virtuemart в админке
Для начала давайте взглянем на стандартный макет списка товаров и прикинем место, куда мы хотим вставить информацию об остатках:
Как по мне, самая бесполезная колонка в этом списке – «Отзывы покупателей». Конечно, если вы используете стандартный функционал отзывов Virtuemart, то она может нести для вас пользу, но если нет, то стоит заменить ее информацией об остатках товаров.
Хочу уточнить, удаление одной из колонок вовсе не обязательно. Вы можете просто добавить в переопределенном макете еще одну дополнительную колонку. Я, в данном примере, заменю колонку отзывов.
Для замены колонки отзывов на колонку остатков в скопированном файле default.php находим:
<th width="40px" ><?php echo vmText::_('COM_VIRTUEMART_REVIEW_S'); ?></th>
и заменяем на:
<th width="40px" ><?php echo $this->sort('product_in_stock', 'Остаток'); ?></th>
Далее находим:
<!-- Reviews -->
<?php $link = vRequest::vmSpecialChars('index.php?option=com_virtuemart&view=ratings&task=listreviews&virtuemart_product_id='.$product->virtuemart_product_id); ?>
<td align="center" ><?php echo JHtml::_('link', $link, $product->reviews); ?></td>
и заменяем на:
<td align="center" ><?php echo $product->product_in_stock; ?></td>
После этого, вуаля, любуемся результатами:
Заметьте, по колонке «Остаток» возможна сортировка. Это также может быть очень полезно.
Самое прекрасное в этом подходе – вы можете вывести таким образом в список не только остатки, но и любую другую информацию о товаре. Делайте список таким, чтобы вам было удобно с ним работать и при этом не требуется никаких хаков!
Если вы плохо разбираетесь в коде, я готов помочь вам с реализацией за отдельную плату. Также есть возможность сделать поле остатков на этой странице обновляемым, чтобы вы могли менять остатки по каждому из товаров прямо в списке, без перезагрузки страницы. За этими услугами обращайтесь через форму обратной связи.
Может еще сможете подсказать, каким образом можно вывести информацию о скидках на товар?
Интересует вывод DATax. Т.е. если на товар стоит скидка 20%, то чтобы и в списке товаров отображалось 20%. Столбик создал, а вот как вывести значение скидки - неделю голову ломаю.
Заранее огромное спасибо.
Он выведет доступные данные по каждому товару. После этого нужно найти там переменную с нужной вам информацией и вывести только ее. Скорее всего она будет в разделе prices. Но скидки формируются правилами расчета, так что это может быть сложнее.
Может вы так ответите какая переменная отвечает за вывод настраиваемых полей товаров?
нужно для него также не забыть добавить в таблице
либо один из существующих, если нужно вывести информацию в существующем столбике. Переменную найдете сами с помощью описанного выше способа. Поверьте, это будет для вас гораздо полезнее, чем если ее найду и напишу я. Так вы научитесь искать и выводить любую информацию из объекта товара.