Вот чего не хватает OpenCart (из коробки), так это по аналогии с WordPress панели администратора:
а так даже после логина под Администратором, фронт-энд и админ часть магазина живут своей раздельной жизнью. Решить эту задачу пытались в рунете еще со времен версии 1.4, когда стали появляться первые «панели администратора». Бесплатный модификация я еще не встречал и что еще более смешно: разработчики этих панелей выставляют ценники в 30-50 баксов за копию. Хотя там не больше 50 строк кода :)
Самой востребованной функцией по праву является кнопка «Редактировать товар» на странице самого товара. Она перенаправляет по клику сразу на страницу редактирования товара в админ части движка. Удобно! Ее мы сегодня и сделаем.
Для лентяев: в конце статьи ссылка на ocmod дополнение, которое я переписал для OpenCart 2.3.x.
Для решения этой задачи нужно решить всего-навсего два вопроса:
-
- Как сделать так, чтобы кнопка появлялась только для залогиненного администратора;
- Немного переделать формирование ссылки, т.к. базовый класс Url для фронт-энд части OpenCart не заточен для ссылок в Администраторскую часть движка
Начнем как ни странно со второго пункта. Идем в редкий путь, в
system/library/url.php
Нам нужна новая функция обработки Url, в корой можно сделать ссылку на административную часть. Напишем ее:
public function linkEditProduct($route, $args = '', $secure = false) { if ($this->ssl && $secure) { $url = $this->ssl . 'admin/index.php?route=' . $route; } else { $url = $this->url . 'admin/index.php?route=' . $route; } if ($args) { if (is_array($args)) { $url .= '&' . http_build_query($args); } else { $url .= str_replace('&', '&', '&' . ltrim($args, '&')); } return $url; } }
От основной версии она отличается двумя строками:
$url = $this->ssl . 'admin/index.php?route=' . $route;
$url = $this->url . 'admin/index.php?route=' . $route;
Т.е. я не люблю размещать хардкорно какие-то тексты в контроллерах, сделаем имя кнопки настраиваемое из языковых переменных. Для этого сначала для английской версии, а потом и для русской добавим следующее. В catalog/language/en-gb/product/product.php
добавим:
/// Edit product button $_['text_button_edit'] = 'Edit Product';
А в catalog/language/ru-ru/product/product.php
/// Кнопка редактирования товара $_['text_button_edit'] = 'Редактировать товар';
Теперь моя душа спокойна и мы не калечили паттерн MVC(L) говнокодом.
Пришло время заняться Контроллером. Открываем catalog/controller/product/product.php и сразу после
$product_info = $this->model_catalog_product->getProduct($product_id);
добавим:
$data['button_edit_product'] = $this->language->get('text_button_edit');
Нетрудно догадаться, что так мы получили текст кнопки из языковой переменной.
Дальше, сразу после if ($product_info) {
добавим:
if(!empty($this->session->data['user_id']) && !empty($this->session->data['token'])){ $data['edit_product'] = ''.$data['button_edit_product'].''; }
Осталось вставить кнопку в tpl карточки товара. Идем в catalog/view/theme/default/template/product/product.tpl
Найдите в коде место, куда вам удобнее вставить кнопку, например это может быть после кнопки «Купить» как в моей реализации.
Сам код кнопки:
<?php if(!empty($edit_product)){echo $edit_product; } ?>
Итого получаем:
Скачать ocmod для OpenCart 2.3 можно тут.
Круто.
Спасибо, помогло!
Спасибо. У меня 2.3, модуль установил, это (Когда вы включаете / отключаете или удаляете одно из дополнений, необходимо нажать на кнопку «Обновить» — чтобы обновить Кэш!) сделал. Но кнопки не появилось и в консоли ошибок нет.
А в ручную если, то после вставки кода «if(!empty($this->sessi….» 500 ошибка (
Шаблон не дефолтный.
Какая версия PHP?
К сожалению не отображается кнопка(
Вадим, там часть правок делается для файла шаблона вашей темы. Пришлите адрес сайта, постараюсь помочь.
здравствуйте! подскажите, пожалуйста, опенкарт 2.3. сделан мультимагазин на разных доменах, но с одной админкой и бд. на втором сайте не отображается кнопка. как можно исправить?
Вам скорее всего придется ручками править формирование адреса админки вместо переменной.