Вы узнаете некоторые приемы, которые используются для того, чтобы избавиться от ненужностей и добавить нужностей в движке OpenCart 3.

Убираем последнюю ссылку в product в хлебных крошках:

Файл:

/catalog/view/theme/default/template/product/product.twig

Было:

<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="/{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>

Стало:

<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li>
{% if breadcrumb.href != '' %}
<a href="/{{ breadcrumb.href }}">{{ breadcrumb.text }}</a>
{% else %}
{{ breadcrumb.text }}
{% endif %}
</li>
{% endfor %}
</ul>

Файл:

/catalog/controller/product/product.php

Было:

$data['breadcrumbs'][] = array(
'text' => $product_info['name'],
'href' => $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id'])
);

Стало:

$data['breadcrumbs'][] = array(
'text' => $product_info['name'],
'href' => ''
);

Неполадки с оформлением заказа.

Внимание! При попытке оформить заказ, возможно, со второй попытки (если пользователь перезагрузил страницу, заполнил некоторые НЕ ВСЕ поля и снова пытается оформить), может возникать ошибка

Notice: Undefined index: zone_id in /catalog/controller/startup/startup.php on line 166
Notice: Undefined index: zone_id in /catalog/controller/startup/startup.php on line 172

Как её исправить? Ведь она НЕ дает пользователю пройти всю процедуру оформления заказа, так как попросту НЕ подгружаются некоторые данные и действовать дальше нельзя из-за неактивных вкладок.

На самом деле решение данной ситуации есть! Файл:

/catalog/controller/startup/startup.php

Было:

if (isset($this->session->data['shipping_address'])) {
$this->tax->setShippingAddress($this->session->data['shipping_address']['country_id'], $this->session->data['shipping_address']['zone_id']);
} elseif ($this->config->get('config_tax_default') == 'shipping') {
$this->tax->setShippingAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
}

if (isset($this->session->data['payment_address'])) {
$this->tax->setPaymentAddress($this->session->data['payment_address']['country_id'], $this->session->data['payment_address']['zone_id']);
} elseif ($this->config->get('config_tax_default') == 'payment') {
$this->tax->setPaymentAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
}

Стало:

if (isset($this->session->data['shipping_address'])) {
if(isset($this->session->data['shipping_address']['zone_id']))$this->tax->setShippingAddress($this->session->data['shipping_address']['country_id'], $this->session->data['shipping_address']['zone_id']);
} elseif ($this->config->get('config_tax_default') == 'shipping') {
$this->tax->setShippingAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
}

if (isset($this->session->data['payment_address'])) {
if(isset($this->session->data['payment_address']['zone_id']))$this->tax->setPaymentAddress($this->session->data['payment_address']['country_id'], $this->session->data['payment_address']['zone_id']);
} elseif ($this->config->get('config_tax_default') == 'payment') {
$this->tax->setPaymentAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
}

 Точно также можно решить и другие подобные ошибки, просто найдите то, что выдает в ошибке в этом же файл и вставьте 

if(isset($this->session->data['shipping_address']['XXX_XXXX']))

Делаем доступ в административную панель по специальной ссылке-ключу.

Откроем файл:

/admin/controller/common/login.php

Добавляем в 

class ControllerCommonLogin extends Controller {
private $error = array();

public function index() {

...

СЮДА

}

Код:

 if ($this->user->isLogged()==NULL && $this->request->get['user_token']==NULL && getenv("REQUEST_URI") != '/admin/index.php?token=SECRET') {
header('HTTP/1.1 404 Not found');
header('location:/404');
exit;
}

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

http://site.org/admin/index.php?token=SECRET
Модифицируем OpenCart