Архивы по Категориям: opencart

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

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

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

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

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

 

 

«Чем так плох OpenCart» и как сделать его лучше

Есть такая замечательная статья «Чем так плох opencart«, рекомендую к прочтению всем, кто занимается разработкой под него родимого. Все правильно говорит автор.

Теперь о выводах. Выводы просты: кодите под opencart? Не повторяйте ошибок его производителей)

Итак, пишем модуль доставки. Погнали.

Подгружаем языки (речь тут идет об админке):
в контроллере:

$this->data['lang'] = $this->load->language('shipping/myshipping');

в шаблоне

<td><?php echo $lang['entry_name']; ?></td>

Просто? Просто! А экономит процентов 40 экранного пространства и читать код проще и новые переменные вводить. Окда.

Дальше:
в контроллере:

 $vars = array('my_shippingvar','my_status', 'my_sort_order',);

и перечисляем имена переменных настроек, которые юзер вводит в форме (шаблоне)

                        <tr>
                            <td><?php echo $lang['entry_sort_order']; ?></td>
                            <td><input type="text" name="my_sort_order" value="<?php if (isset($my_sort_order)) echo $my_sort_order; ?>" /></td>
                        </tr>

чуть ниже перечисления имен переменных в контроллере заюзаем их:

        foreach ($vars as $var) {
            if (isset($this->request->post[$var])) {
                $this->data[$var] = $this->request->post[$var];
            } else {
                $this->data[$var] = $this->config->get($var);
            }
        }

А весь код типа

  if (isset($this->request->post['my_sort_order'])) {
 $this->data['my_sort_order'] = $this->request->post['my_sort_order'];
 } else {
 $this->data['my_sort_order'] = $this->config->get('my_sort_order');
 }

можно смело грохнуть к чертовой бабушке.

Опа-опа-опа-па! Еще процентов 40 спагетти ушло,  наш контроллер похудел почти в три раза. Дальше приводим в чувства витринную часть,  модель и тд.

Хочешь что-то изменить — начни с себя. А там глядишь и до глав.разрабов дойдет.

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