Архивы: opencart

Заставить opencart работать быстрее

Полезные материал по оптимизации опенкарта  (проверено,  реально существенно ускоряют oc):

Серверная оптимизация (файлики тут)   (на новых версиях не работает)

Клиентская оптимизация

Ну и полезный хак (багфикс) на закуску: тут

 

 

php, float: запятая, точка и opencart

Столкнулся тут недавно: в опенкарте не ставятся копейки (в размерах миллиметры, и в весе граммы, соответственно).

В инсертах мускулевых эти переменные выглядят так: (float)$price.

Ок, проблема локализована, что-то не так с флоатом. Смотрим:

<?php
echo (float)'1.22'; // 1,22
?>

Зашибись!

Правится так: из консоли никсовой

php -r 'setlocale("LC_NUMERIC", "C");'

или если у вас шаред, то

setlocale(LC_NUMERIC, "C");

В опенкарте это можно запихать в config.php

opencart «Новые поступления» и «Лидеры продаж» — показывать товары только из категории

Есть такие дефолтные модули в opencart’е — latest и bestseller, так вот — разместив их на лайаут Category мы видим фигню: в категории «Гробы» — врезка «Новинки», а в ней показываются товары типа «Презерватив светящийся», «Нос клоунский» и т.д. Короче показывает новинки из других категорий. Это не есть гуд. Лезем на myopencart и наблюдаем печальную картину — нужные нам модули продают за денежку :((
Мы пойдем другим путем.

1. Лезем в catalog/controller/module/latest.php
перед

protected function index($setting) {<

добавляем:

private function _endc( $array ) { return end( $array ); }

2. потом, перед

$results = $this->model_catalog_product->getProducts($data);

вставляем:

if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category'))
        {
            $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));        
            $data['filter_category_id'] = $category_id;
            $data['filter_sub_category'] = TRUE;
        }
        
        
        if ((isset($this->request->get['route'])) AND (isset($this->request->get['manufacturer_id'])) AND ($this->request->get['route'] == 'product/manufacturer/product'))
        {
            $manufacturer_id = $this->request->get['manufacturer_id'];        
            $data['filter_manufacturer_id'] = $manufacturer_id;            
        }

И теперь на странице категории — новинки только из нее. А бонусом та же песня и со страничкой производителей.

За модуль спасибо aduakasoft.com, кажется только они решились выложить своё решение бесплатно на opencart.com

opencart, seo_url глюююки

Юзеры забивают товар. Косячат, забывают указать категорию для товара. Товары показываются в модулях «Последние», «Рекомендованные» и т.д. Сео_урл орет дурниной:

2012-05-03 11:10:38- PHP Notice: Undefined index: category_id in  .... /seo_url.php on line 143

а также про parent_id, keyword и тд

лезем в catalog/controller/common/seo_url.php
находим там

$cat_current=$this->db->query($query);

ниже вставляем условие:

if ($cat_current->num_rows != 0) {

потом находим

$url='/'.$this->output_cat_alias($url);

и после нее закрываем скобочку

}

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

миграция ocstore 0.2.0 -> 1.0.1

Как произвести миграцию на новый (сочни, мжвячни!) оцсторе можно прочитать тут.

От себя могу добавить, что после этой миграции некоторые старые модули с диким воплем крашатся:
PHP Fatal error: Cannot access private property Document::$title in блаблабла.php

Лечится сие просто.
Заходим в папку с нашим магазином и делаем там:

find . -type f -name '*.php' -print | xargs egrep -i 'document->title'

в найденных файлах правим:

вместо:
$this->document->title = $this->language->get('heading_title');

пишем:
$this->document->setTitle($this->language->get('heading_title'));

после этого фиксим еще один вредный баг.
после мигарции в админке везде в заказах показывает цены «итого» и «цена за единицу» — 0.00р
лезем пыхпыхмайадмин (ну или как вам будет удобно) и делаем там следующее:

UPDATE `ВАША_ТАБЛИЦА`.`order` SET `currency_code` = 'rub',`currency_value` = '1' WHERE `order`.`currency_value` = 0.00000000;