Ускорение сайта

Кейс по ускорению сайта Новосибирского адвоката https://advokat54.su


Фото до/после.

Что было сделано:

  • Сайт работает на Джумле, поэтому для начала использовались стандартные инструменты, которые впрочем не дали ощутимого сокращения времени загрузки страниц. Включил серверное сжатие и кеширование;
  • Оптимизировал служебную графику, логотип и т.д. сконвертировал в webp;
  • Минимизировал файлы стилей и часть js, поставил их загрузку после основного контента;
  • Отключил часть скриптов загружаемых CMS не критичных для работы;
  • На главной размещено youtube-ролик, которой существенно тормозил загрузку страницы. Сделал «ленивую» загрузку через js. Ролик фактически начинает грузиться, только после клика на него.До этого пользователь видит картинку-превью ролика;
  • Сделал задержку в загрузке скрипта яндекс-карт в разделе контакты.

Клиент остался доволен результатом.

Интеграция интернет магазина одежды Virtuemart с groupprice

Не wildberries единым живет рынок товарных агрегаторов. Сделал своему давнему клиенту — производителю женской одежды Николь интеграцию с Группрайсом.

В отличии от крупных агрегаторов, с ГП гораздо проще найти общий язык. Особенно, если у вас интересный ассортимент и конкурентные цены. Работают по предоплате, формируют еженедельный заказ и делают хорошие обороты.

Что было сделано:
+ Переделал структуру товарного каталога. Для нормального отображения остатков, каждый размер заводится как дочерний товар.
+ Выгрузку настраивал через YML. Файл формируется на лету и забирается скриптом агрегатора в их базу. YML формируется компонентом Excell2VM.
+ Сформировал инструкции и обучил менеджера клиента самостоятельной работе с каталогом через пакетную загрузку товара через тот же Excell2VM.

Если вам нужно сделать интернет магазин, или модернизировать уже существующий, обращайтесь, помогу.

Как обновить Joomla и не поседеть

Стандартное обновление 3-й джумлы не всегда спасает, особенно если система долго не обновлялась или стоит задача обновиться с версии 2.5.x Есть небольшой лайфхак, который поможет решить эту задачу.

1. Делаем резервную копию файлов и БД. В таймвебе, это можно сделать через раздел «Резервные копии», вкладка файлы и базы данных. Или создав архив файлов через файловый менеджер, и дамп БД через phpmyadmin.

2. Качаем тут дистрибутив joomla, версии немного моложе чем обновляемая. Например, если установлена версия 3.2.0, установка 3.9.11 с большой вероятностью закончится ошибкой и сайт превратится в тыкву. Поэтому, имея joomla 3.2.0 есть смысл двигаться маленькими шагами и для начала обновиться до 3.3 или 3.4.

3. Сначала пробуем стандартные средства обновления CMS и через Расширения — Менеджер расширений -Установка, загружаем скаченный дистрибутив. Если все получилось — отлично, возвращаемся на шаг 2, повышаем версию и повторяем. Если не получилось, откатываем резервную копию сайта на рабочее состояние и переходим к шагу 4.

4. Через менеджер файлов хостинга или по фтп, закачиваем дистрибутив поверх файлов CMS. После загрузки удаляем папку «Installation».

5. В админке переходим Расширения — Менеджер расширений — База данных. Там, в блоке «Другая информация», будут ошибки о несоответствии схемы БД текущей версии. Жмем кнопку «Исправить». После чего повторяем процедуру до обновления джумлы до актуальной версии.

Если и это не помогло, обращайтесь, решу вашу проблему.
8-923-244-3276 можно через телеграм или вотсап.

Настраиваем 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 (не забываем его сложить в наш основной шаблон, чтобы при обновлении он не умер)

Вместо кода:

< ?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 ₽.