Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Правка фронтенда в ocStore OcStore(OpenCart) 3.0.2. Переделка под свои нужды. (https://javascript.ru/forum/project/78963-pravka-frontenda-v-ocstore-ocstore-opencart-3-0-2-peredelka-pod-svoi-nuzhdy.html)

Триви 28.11.2019 17:50

Правка фронтенда в ocStore OcStore(OpenCart) 3.0.2. Переделка под свои нужды.
 
Всем, привет.

Здесь мне бы хотелось говорить о трудностях, с которыми я сталкиваюсь по сабжу. Может быть в дальнейшем кому-то эта инфа пригодится.

Опыта работы с OpetCart у меня нет, тем более 3-й версии, но поступил заказ. Что ж, придётся ковыряться.

Имеется макет в фотошопе, вообще ни разу не напоминающий диз CMS-ки из коробки.

Начал стилизовать блоки в twig-файлах по-своему, дошёл до корзины и сразу сталкнулся со следующей проблемой.
Мне НЕ нужна к корзине надпись вида `Товаров: 0 (0.00р.)`, а нужно получить лишь количество товаров.
Ок, - подумал я - В бэкенд не полезу, вдруг такая строчка целиком ещё пригодится или сломаю что-нибудь не дай Бог.
1. Полез в файл `domains/mysite/catalog/view/javascript/common.js`
Нашёл там объект `cart` со своими методами типа `add`, `update` etc. с ajax-ом и колбэками.

2. В колбэках нахожу строку:

$('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');


Вывожу в консоль json['total'], ОНО!

3. В этом же файле создаю глобально метод:

var getAmount = function (total) {
	var regex = /\s+/,
		amount = total.split(regex)[1];
		return amount;
}


..а в строке колбэка функций объекта `cart` (см. выше) вызываю его: getAmount(json['total']).

4. Аллилуйя! Всё работает.


Едем дальше.

1. Заходим на сайте в карточку товара, добавляем товар в корзину и упс - возвращается необработанная строка json['total'].

2. Инспектируем getAmount(), добавляя в него `console.log('getAmount method called')` - хренушки (( Метод не вызывается.

3. Ок, инспектируем кнопу `Купить` в карточке товара и находим событие на кнопке:

$('#button-cart').on('click', function() {...}


В файле common.js его, нет, но девтулс нам указывает на то, что он типа в index.php есть.
Значит, событие возможно прописано в шаблоне twig. Ищем шаблон `product.twig` - Упс! Вот оно наше событие ))

5. В шаблоне `product.twig` снова вызываем наш новый метод `getAmount` и передаём в него json['total'].

6. Аллилуйя! Всё работает ))


зы: прошу прощения, коллеги, если не в тот раздел запостил тему. Но сабж полезный имхо. Перенесите, если что.
Принимаются замечания. Если что-то не будет получаться по сабжу, буду задавать здесь вопросы )

SuperZen 28.11.2019 18:41

"трудна и ужасна жизнь насекомых" @Кто-то там ))

laimas 28.11.2019 19:26

Цитата:

Сообщение от Триви
В бэкенд не полезу, вдруг такая строчка целиком ещё пригодится или сломаю что-нибудь не дай Бог.

И чего там ломать, заремировать в catalog/language/ru-ru/checkout/cart.php, оставив нужное:

$_['text_items'] = 'Товаров %s';//  (%s)';

Триви 29.11.2019 00:04

Цитата:

Сообщение от laimas (Сообщение 516396)
И чего там ломать, заремировать в catalog/language/ru-ru/checkout/cart.php, оставив нужное:

$_['text_items'] = 'Товаров %s';//  (%s)';

Респектос! Блин, я на бульдозере за хлебом поехал :lol:
Надо сначала доку почитать, чем сходу свои костыли подставлять.
Мы лёгких путей не ищем :lol:
Здесь надо поменять `catalog/language/ru-ru/common/cart.php`
и здесь `catalog/language/ru-ru/checkout/cart.php`
на
$_['text_items'] = '%s';

Там по ходу php-функция sprintf() их обрабатывает.

зы: почему карму повысить не могу?

laimas 29.11.2019 02:59

Если число только оставить, то да, первую переменную только и оставляем. Выводит да форматированием, и это и в методах добавления, и методах редактирования, и при запросе страницы делается, типа sprintf($this->language->get('text_items'), $this->cart->countProducts() ....

Есть контроллер, у него есть шаблон и локализация, последнюю и нужно править.

laimas 29.11.2019 03:31

Цитата:

Сообщение от Триви
почему карму повысить не могу?

Не знаю, но это не смертельно. )

Триви 29.11.2019 15:04

Обнулить стили у кнопки Корзины получается, но не до конца. Убрал у неё все бутстраповские классы, которые подсасывает openCart, за исключением `.dropdown-toggle`. Прописал обнуление стилей в css вот так

После нажатия на кнопку она всё равно стилизуется как показано в скриншотах:



Опытным путём установил, что происходит это тогда, когда я пытаюсь увеличить размер кнопки через width, height или padding.

В чём может быть проблема?

Триви 29.11.2019 15:16

Проблема решена. С помощью box-shadow )))

laimas 29.11.2019 16:54

Триви, ведь кеш работает, на время манипуляций его отключать надо.

Триви 29.11.2019 17:12

Цитата:

Сообщение от laimas (Сообщение 516464)
Триви, ведь кеш работает, на время манипуляций его отключать надо.

Так отключен. Всё равно спасло только box-shadow: none;

Сейчас настал черёд стилизации карусели, тот ещё гимор я так понимаю.
Главное свою не написать случайно )) А то я могу )))


Часовой пояс GMT +3, время: 16:37.