А так же о всякой фигне
Opencart имеет готовую систему чпу, которая отлично работает без дополнительных модулей. Но у неё есть 1 большой недостаток: она позволяет построить путь к странице множеством разных способов. Например: если Вы перейдёте на товар с главной страницы, то получите путь вида: http://opencart.allwebstuff.info/macbook, а если сперва зайдёте в категорию "ноутбуки", затем в подкатегорию "mac" и только потом в товар "MacBook" тогда путь примет вид: http://opencart.allwebstuff.info/laptop-notebook/macs/macbook.
Такая ситуация негативно сказывается на продвижении. Да и система чпу opencart позволяет уже по первому параметру идентифицировать страницу. По этому давайте уберём в чпу лишние вложения.
Для начала нужно включить обработку чпу: заходим в корневой каталог, включаем показ скрытых файлов и находим файл ".htaccess.txt", переименовываем его в ".htaccess".
Затем открываем админку opencart, переходим в "Система"=> "Настройки"=> "Ваш магазин"=> "Сервер", активируем переключатель "Включить ЧПУ".
Чпу активировано и готово к использованию. Для того чтобы категория или товар открывались по чпу url, нужно каждый из них отредактировать и в графе "SEO URL" вписать его новый адрес. Напомню, что адрес должен быть уникальный, нельзя сделать категорию "MacBook" и товар "MacBook".
Теперь возьмёмся непосредственно за переделку движка. Открываем файл: /catalog/controller/product/category.php, находим следующий текст:
$data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $result['rating'], 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
Меняем в нём строчку:
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
На
'href' =>$this->url->link('product/product', '&product_id=' . $result['product_id'])
Находим текст:
$data['categories'][] = array( 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url), 'thumb'=>$this->model_tool_image->resize($result['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height')));
И меняем его на:
$data['categories'][] = array( 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'path=' . $result['category_id'] . $url), 'thumb'=>$this->model_tool_image->resize($result['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height')));
После этого все ссылки из списка товаров, в категориях, будут короткими.
Далее открываем файл: /catalog/controller/common/header.php, находим текст:
$children_data[] = array( 'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']) );
Меняем строчку:
'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
На:
'href' => $this->url->link('product/category', 'path=' . $child['category_id'])
Все ссылки в главном меню так же стали короткими. Далее, если Вы используете какие-либо модули, то и в них придётся вручную переделать формирование url страницы. Принцип очень простой: функция link возвращает сео урл, и чтобы она возвращала его в коротком виде, параметры должны передаваться как: link('route','path'). Где 'route'- это путь к контроллеру, например 'product/category' для категории и 'product/product' для товара. А 'path'- должен содержать только путь к странице, без вложений, для товара это: 'product_id=ID_товара', для категории это: 'path=ID_категории'.
Пример всего вышесделаного, как обычно можно посмотреть на http://opencart.allwebstuff.info
Peer authentication failed for user “postgres”
При разворачивании проекта на руби возникла ошибка: Peer authentication failed for user “postgres”. После недолгого гугления выяснилось, что приложение пытается подключаться к базе данных, используя логин и пароль, и не обращает внимание на то, что в настройках бд выставлено подключение в положение "peer"- не требующее вводить пароль при подключении, а проверяющее права пользователя операционной системы.
Создание контроллера и шаблона на opencart 2
К примеру, нас попросили создать отдельную страницу для полного списка товаров, но без списка категорий в шапке. Конечно, список категорий можно скрыть по условию в стандартном шаблоне. Мы же, для тренировки, создадим новый контроллер и новый шаблон.