Настраиваем Virtuemart 3 и убираем лишнее.

Разберу базовые настройки интернет магазина после установки VM3.
Открываем Компоненты — Virtuemart — Конфигурация

На первой вкладке «Магазин» можно ничего не менять и оставить базовые настройки.

Вкладка «Заказы» или «Orders» — тут решается одна из часто возникающих проблем с отправкой писем покупателю и продавцу.
Добавляем в «Статус заказа по умолчанию для отправки эл.письма покупателю» как минимум «Подтвержден покупателем».
В «Статус заказа по умолчанию для отправки эл.письма продавцу » советую добавить все статусы.
В «Статус заказа для использовании вложений файлов» и «Статус заказа по умолчанию для создания выписанного счета» выбираем «нет», если не требуется отправлять стандартный инвойс при заказе.

«Внешний вид»
Тут можно отключить иконки «Вид для печати» и «PDF», ссылку «Рекомендовать другу» (один черт ей никто не пользуется), включить или выключить использование скидочных купонов, отзывы и выбрать механизм показа товаров в зависимости от остатков.

«Шаблоны»
Настраиваем число товаров в строке, вывод рекомендуемых товаров на страницу с категорией и размер миниатюр. Служебные пути без надобности не меняем.

«Формирование цен»
Убираем вывод налогов, показываем только «Окончательную цену». + «Цену», если хотим выводить цену со скидкой и без скидки.

«Оформление заказа»
Тут можно включить «одностраничную корзину» (на самом деле нет), обновление корзины без перезагрузки — аяксом, отключить согласие с условиями обслуживания и включить/отключить возможность регистрации во время оформления заказа.

«Настройка сортировки»
» Порядок сортировки по умолчанию » и » Порядок сортировки по умолчанию для категории» — выбираем по какому параметру сортировать товары и категории.
Ascending — по возрастанию.
Descending — по убыванию.
«Доступные поля для сортировки» — выбранные варианты будут выводиться над списком товаров в категории. Имеет смысл выбрать «Название товара» и «Цену».
«Доступные поля для поиска» — заполненные поля товара, по которым система будет проводить поиск.

«Feeds»
Лента RSS-фида. Можно смело отключить.

«SEO»
Оставляем настройки по умолчанию.

Virtuemart 3 — импорт и экспорт товаров из Excell, CSV и 1С

На клиентских сайтах, эту задачу решаю компонентом From-excel-to-virtuemart.

Компонент поддерживает форматы файлов для импорта/экспорта:
XLS
XLSX
CSV
XML
YML (Яндекс. Маркет)

+ Умеет работать по крону, через который собственно и делается автоматический регулярный импорт товаров, обновление цен и остатков в интернет магазин.
+ Умеет пакетно создавать превью изображений товара.
+ Умеет обрабатывать Дополнительные (Настраиваемые) поля, в т.ч. и те, которые влияют на окончательную цену товара («Атрибут корзины»).
+ Есть поддержка сопутствующих, родительских и дочерних товаров (по ID или артикулам товаров).
+ Есть поддержка сторонних плагинов для фильтрации товаров:
Virtuemart 3 Multiple Customfields Filter 2
Custom Fields For All
Related articles custom field
Cherry Picker (2.0.6 — 3.8) + Fast Saller (1.0.5 — 2.5)
+ Отличный интуитивный интерфейс.
+ Регулярные обновления.

Скачать Virtuemart-XLS-1C

Virtuemart 3.4.2 медленно грузится админка — bugfix

После обновления, админка начинает очень долго прогружать все разделы VM. Проблема в обращении к отсутствующему файлу стилей. Рукожопный способ решить эту проблему — грузим пустой файл toolbar_images.css по адресу:
administrator/components/com_virtuemart/assets/css/

Joomla 3.6.1

Не обновляйтесь до этой версии. Если обновились — админка не даст авторизоваться.
Это не страшно и лечится откатыванием бекапа (как, вы еще не делаете бекапы перед обновлением? ))).
Еще один рецепт — скачать дистрибутив 3.6.2 и залить на хостинг файлы руками.

0 Invalid address:

После обновления Joomla до 3.5.1, Virtuemart при оформлении заказа, выдает ошибку 0 Invalid address:

Это не полноценный багфикс, временное решение проблемы:

components/com_virtuemart/helpers/shopfunctionsf.php

Берем кусок кода:

if(!$noVendorMail) {
$replyTo[0] = $view->vendorEmail;
$replyTo[1] = $view->vendor->vendor_name;
$mailer->addReplyTo( $replyTo );
} else {
if(isset($view->orderDetails[‘details’]) and isset($view->orderDetails[‘details’][‘BT’])){
$replyTo[0] = $view->orderDetails[‘details’][‘BT’]->email;
$replyTo[1] = $view->orderDetails[‘details’][‘BT’]->first_name.’ ‘.$view->orderDetails[‘details’][‘BT’]->last_name;
} else {
if (isset($view->user->email) and $view->user->name) {
$replyTo[0] = $view->user->email;
$replyTo[1] = $view->user->name;
} else {
$replyTo[0] = $view->user[’email’];
$replyTo[1] = $view->user[‘name’];
}

}

$mailer->addReplyTo( $replyTo );
}

И меняем на:

if(!$noVendorMail) {
$replyTo[0] = $view->vendorEmail;
$nameReplyTo[0] = $view->vendor->vendor_name;
//$replyTo[1] = $view->vendor->vendor_name;

if ( version_compare( JVERSION, ‘3.0’, ‘<‘ ) == 1) {
$replyTo[1] = $nameReplyTo[0];
$mailer->addReplyTo( $replyTo);
}
else
{
$mailer->addReplyTo( $replyTo, $nameReplyTo );
}

} else {
if(isset($view->orderDetails[‘details’]) and isset($view->orderDetails[‘details’][‘BT’])){
$replyTo[0] = $view->orderDetails[‘details’][‘BT’]->email;
$nameReplyTo[0] = $view->orderDetails[‘details’][‘BT’]->first_name.’ ‘.$view->orderDetails[‘details’][‘BT’]->last_name;
} else {
if (isset($view->user->email) and $view->user->name) {
$replyTo[0] = $view->user->email;
$nameReplyTo[0] = $view->user->name;
} else {
$replyTo[0] = $view->user[’email’];
$nameReplyTo[0] = $view->user[‘name’];
}

}
if (!empty($replyTo)) {
if ( version_compare( JVERSION, ‘3.0’, ‘<‘ ) == 1) {
$replyTo[1] = $nameReplyTo[0];
$mailer->addReplyTo( $replyTo );
}
else
{
$mailer->addReplyTo( $replyTo, $nameReplyTo );
}
}
}

Если это не помогло. Меняем libraries/joomla/mail/mail.php на то же, из более старой версии.

Virtuemart3 вывод категорий с подкатегориями на главной.

В VM уже есть готовый функционал, который надо только красиво оформить. Берем стандартный модуль VM3 выводящий категории с подкатегориями.

1. Клонируем модуль вывода категорий в админке;
2. Публикуем скопированный модуль в нужной позиции + назначаем ему шаблон «All»;
3. Редактируем шаблон All (не забываем его сложить в наш основной шаблон, чтобы при обновлении он не умер)

Вместо кода:

<li <?php echo $active_menu ?>>
<div>
<?php echo JHTML::link($caturl, $cattext); ?>
</div>

Вставляем код:

<li class=»kkk»>
<div>
<div class=»kkkimg»><?php echo $category->images[0]->displayMediaThumb(«»,false);?></div>
<?php echo JHTML::link($caturl, $cattext); ?>
</div>
<hr/>

4. В файл стилей дописываем:

.kkk img {
max-width: 25px;
max-height: 25px;
}
.kkkimg {
float: left;
margin: 0 3px 3px;
}
.kkk {
float: left;
width: 30%;
display: block;
margin: 5px 5px 0 0;

}
.kkk li {
list-style: none;
}
.kkk a {
display: block;
margin: 12px 0 10px 0;
font-size: 16px;
line-height: 16px;
}
.kkk li a {
font-size: 14px;
line-height: 12px;
padding: 3px 0 0 0;
margin: 0;
}

5. Добавляем картинки категориям верхнего уровня.

В результате будет как-то так:

Делаем красиво, добавляем разряды к цене в Virtuemart

Открываем шаблон карточки товара, шаблон категории, шаблон модуля выводящего товар и т.д. и вставляем после вывода цены код:

<script>
var str = $(‘.product-price’).text();
$(‘.product-price’).html(str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, ‘$1 ‘));
</script>

Дополнительно, надо подключить jquery, если этого уже не сделано.

Если все правильно сделали, ваши унылые цены 1000000₽, превратятся в шикарные 1 000 000 ₽.

Virtuemart 3 — Лечим отправку письма покупателю.

В новой версии VM убрали возможность устанавливать отправку писем покупателю при статусе заказа «В ожидании» (pending). Разработчики вообще убрали статус «в ожидании» с отправки писем покупателю. Причина этому есть, объяснять не буду, кому интересно, можно посмотреть форум поддержки

Для решения проблемы достаточно в способе оплаты поставить любой из оставшихся статусов заказа…

Убираем вывод категорий при поиске в Virtuemart 3

templates/шаблон/html/com_virtuemart/category/default.php

Примерно 43 строка:

// Show child categories
if (VmConfig::get (‘showCategory’, 1) and empty($this->keyword)) {
if (!empty($this->category->haschildren)) {

echo ShopFunctionsF::renderVmSubLayout(‘categories’,array(‘categories’=>$this->category->children));

}
}

Ахалай, махалай:

$search=$_GET[‘search’]; //читаем переменную $search
if ($search != «true») { //если $search есть, а при поиске она есть и равна «true», категории не выводим
// Show child categories
if (VmConfig::get (‘showCategory’, 1) and empty($this->keyword)) {
if (!empty($this->category->haschildren)) {

echo ShopFunctionsF::renderVmSubLayout(‘categories’,array(‘categories’=>$this->category->children));

}
}
}

Обозначенный метод тестировался так же с модулем Virtuemart Param Filter — прекрасно работает.

Нет повести печальнее на свете. Как лечить взлом сайта — продолжение.

История. Звонит клиент, при заходе на часть страниц сайта, Аваст ругается на малваре. При этом остальные антивирусы молчат.

Полез разбираться, полуавтоматом просканировал код сайта, ничего не нашел. Полез смотреть в код страницы, опять ничего подозрительного. Уже начал ругать Аваст, а зря. Как выяснилось, зловредный код прятался в статьях и модулях джумлы. Что само по себе необычно, т.к. последствия взлома обычно вылезают в других местах.

В итоге подозрения пали на дворецкого прошлого менеджера, который ушел не очень красиво и после которого естественно никто не сменил пароли. И который накидал со злости навоза гадости в материалы и текстовые модули.

Лечение свелось как обычно к обновлению системы, смене логинов-паролей ко всему и чисткой дампа базы от зловредных кодов и ссылок на порнуху.

Кстати, мегаполезный инструмент: http://antivirus-alarm.ru Сканирует страницы по разным вирусным базам (и Авастовской тоже).

Рекомендую.