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 Сканирует страницы по разным вирусным базам (и Авастовской тоже).

Рекомендую.


Как повесить на сайт виджет booking.com

Бился, бился, так и не нашел родного генератора виджетов booking.com без регистрации и смс.

В итоге пришлось руками лезть в код более удачливых коллег. Результат:

<script>
(function() {
var randomId = Math.floor(Math.random() * 100000);
var targetElemId = ‘bcom_rwidget_’ + randomId;
document.write(‘

‘);
var script = document.createElement(‘script’);
script.type = ‘text/javascript’;
script.async = true;
script.src = ‘http://www.booking.com/review_widget/ru/hostel-provans.ru.html?tmpl=review_widget/review_widget&wid=’ + targetElemId + ‘&wtype=box_big&hotel_id=505241&widget_language=ru’;
var node = document.getElementsByTagName(‘script’)[0];
node.parentNode.insertBefore(script, node);
}());
</script>


hostel-provans.ru — урл сайта отеля, он же есть в урл карточки отеля на букинге.
hotel_id=505241 — ID отеля, можно взять в коде страницы отеля. Так и ищется по hotel_id

С tripadvisor повезло больше:

http://www.tripadvisor.ru/Widgets-g298529-d4415667-c6-a_widgetKey.selfserveprop-Provence_Hostel-Novosibirsk_Novosibirsky_District_Novosibirsk_Oblast_S.html

Фавиконки. Favicon.ico, что может быть проще, что может быть сложнее.

Прочитав пост на хабре про фавиконки. 100500 размеров фавиконок, внезапно понял, что упустил эту тему из вида и безнадежно отстал со своим стареньким сниппетом кода, вставляемом во все проекты:

Небольшое резюме статьи:

1. В тренде PNG, т.к. формат ICO если еще не умер, то уже скоро.
2. Размер 16х16 уже не в тренде. Вернее в тренде только для десктопных браузеров, но не для тв, смартфонов и прочего популярного зоопарка техники.

Добавлю от себя. Для экономии времени можно использовать генераторы фавиконок. Например http://realfavicongenerator.net На выходе получаем готовый код и набор фавиконок топовых размеров. Картинки лучше просмотреть руками. Если результат не очень, можно внести правки в исходник и перегенерировать заново или перерисовать руками.

Вспомнился мне чего-то цирк 5,6,7,… летней давности про геморрой с версткой под разные браузеры. Видимо и тут в итоге будет один формат. Хочется верить.

Респонсив помогает экономить на хостинге и зарабатывать больше денег.

За последние 3 месяца у клиентского интернет магазина, значительно вырос трафик с контекста и органической выдачи поисковиков. Выросло и потребление ресурсов хостинга. Мой любимый timeweb не долго это терпел, прислал предупреждение (за что их люблю — заботятся о клиентах).

После исследования проблемы и оптимизации ресурсов, сэкономил для клиента 6т.р. в год на переходе на новый тарифный план.
Оптимизировал скорость загрузки интернет магазина.

Тут, куда не посмотри, кругом одни плюсы:
+ Лишних денег за дорогой тариф платить не надо;
+ Сайт начал грузиться быстрее — хорошо для посетителей — комфортнее пользоваться сайтом — удобнее покупать;
+ Быстрее грузится — лучше поведенческие факторы — seo работает эффективней — больше посетителей.

Оптимизируем скорость загрузки Joomla

Основной принцип оптимизации — убить то, что можно убить (JS, CSS, картинки, лишний код). То, что убить нельзя — подрезать по максимуму.

CSS — оптимизировать, минимизировать, сократить число файлов стилей (читай обращений к серверу). Часть CSS, отвечающую за отрисовку первого экрана, вытащить из подгружаемых файлов и вставить в шаблон.

JS — минимизировать и оптимизировать способ подгрузки.

Картинки используемые для шаблона, по возможности засунуть в спрайты, все картинки ужать по максимуму.

Грузим JS асинхронно. Есть готовый халявный плагин: смотреть-качать. В настройках прописываем относительные урлы js (можно скопировать из кода страницы), которые надо грузить асинхронно.

Если какие-то библиотеки вовсе не нужны для работы, их можно отрубить через шаблон:

перед:
<jdoc:include type=»head» />


вставляем:
<?php
unset($this->scripts[$this->baseurl.’ОТНОСИТЕЛЬНЫЙПУТЬ_ДО_JS’]);
?>

Например:
<?php
unset($this->_scripts[$this->baseurl.’/media/system/js/mootools-more.js’],
$this->_scripts[$this->baseurl.’/media/system/js/modal.js’]);
?>

Оптимизируем css http://habrahabr.ru/post/244815/

Как оптимизировать картинки — вагон мануалов, софта и онлайн-сервисов.

Для оценки проделанной работы, 2 основных инструмента:
webpagetest.org
developers.google.com/speed/pagespeed/insights

Очень рекомендую: Видео с доклада Виталия Фридмана «Responsive Web-дизайн: Трюки и уловки»

Лечение проблемы в таблице MySQL Joomla jos_session (jos session)

1. REPAIR TABLE jos_session обычно решает проблему.

2. Для профилактики можно сделать TRUNCATE TABLE jos_session;

+ рецепт из сети, сам не тестировал, надобности не было.

Если авторизация не используется, можно поставить тип для jos_session -> memory.
jos_session таблица хранится с использованием механизма хранения MyISAM — давайте хранить эту таблицу в памяти с помощью двигателя MEMORY хранения!
Для начала нам нужно изменить тип данных поля, так как двигатель MEMORY хранения не поддерживает BLOB / TEXT столбцы:
ALTER TABLE `jos_session` CHANGE `data` `data` VARCHAR( 5000 )
CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
5000 символов, как правило, достаточно для обработки данных сессии. Теперь давайте изменим двигателя:
ALTER TABLE `jos_session` TYPE = memory
MEMORY MySQL система хранения гораздо быстрее, чем MyISAM. Единственное, что сессии будут потеряны, если сервер не работает — но в 99,9999999999999999999% вам не нужно думать об этом, пользователи достаточно повторно Войти.

http://www.wilox.ru/joomla/oshibka-v-tablice-joomla-jos_session-jos-sessionustranenie-i-eyo-vosstanovlenie-v-mysql.html

Меняем порядок сортировки товаров в категории Virtuemart 2

administrator/components/com_virtuemart/models/product.php
Исправить ASC НА DESC в строке 127
Код:
$filter_order_Dir = strtoupper(JRequest::getWord(‘order’, ‘ASC’));
на
Код:
$filter_order_Dir = strtoupper(JRequest::getWord(‘order’, ‘DESC’));

«500 — JHtmlContent: :prepare» при публикации модуля новостей

Причину не нашел, но лекарство есть:

modules/mod_articles_news/helpers.php

закомментировать строчку:

$item->introtext = JHtml::_(‘content.prepare’, $item->introtext, », ‘mod_articles_news.content’);