Пара хаков Joomla и Virtuemart


joomla_logo1

Ошибка установки компонентов из-за open_basedir

Довольно распространенная ошибка Joomla, в результате которой невозможно загрузить и установить компонент, система выдает следующую ошибку:
JFolder::create: Path not in open_basedir paths
Unable to create destination
Решается вопрос просто и быстро:
  1. Ищем файл /libraries/joomla/filesystem/folder.php
  2. В файле ищем строку
    $obd = ini_get('open_basedir');
  3. Комментируем строку с помощью двух слешей перед строкой:
    // $obd = ini_get('open_basedir');

Вуаля, компоненты загружаются и устанавливаются!

Отключение fetchscript.php в Virtuemart

Если вы пользуетесь Virtuemart, то борьба за производительность и скорость — хронический процесс. fetchscript.php собирает необходимые для темы файлы Javascript с расширением js и выполняет их сжатие, что теоретически должно уменьшать объем передаваемых данных и ускорять прорисовку страниц сайта. Однако при правильной многоуровневой настройке сервера такие файлы отдаются сервером nginx без привлечения сервера Apache и запуска тяжелого PHP. При этом теоретически клиент тоже может получить страницу быстрее, а серверу точно полегчает, поэтому я всегда отключаю fetchscript.php. Для этого:

  1. Ищем файл с параметрами конфигурации Virtuemart /administrator/components/com_virtuemart/virtuemart.cfg.php
  2. В верхней части файла добавить стороку:
    $_REQUEST['usefetchscript'] = "0";

Оптимизация SQL-запросов Virtuemart

По вопросу оптимизации SQL-запросов в Virtuemart можно целую книгу написать, однако я здесь приведу всего один пример, который позволит ускорить ваш интернет-магазин с помощью всего одной правки:

  1. Ищем файл /administrator/components/com_virtuemart/html/shop_browse_queries.php
  2. Ищем в файле строку
    $where_clause[] = "(`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id` OR `#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_parent_id`)";
  3. Меняем, вернее укорачиваем ее до такой:
    $where_clause[] = "(`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id`)";

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