Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Использование переменных


Recommended Posts

Всем привет. Начал знакомство с opencart. И у меня есть настолько, видимо, глупый вопрос, что отвеи на него нету даже в гугле. Я не могу понять как переменные передаются из контроллера в шаблон, вернее какая строка за это отвечает. Есть переменная {{text_items}} - которая используется в cart.twig. Я хочу использовать эту переменную в header.twig. Если использовать просто эту переменную в шаблоне хигдера, то сответственно правильно это не рилииет. Что и куда я должен прописать, чтобы всё рилиило верно? 

Link to comment
Share on other sites


10 минут назад, alebard сказал:

И у меня есть настолько, видимо, глупый вопрос, что отвеи на него нету даже в гугле.

Да нет, в гугле ответ точно есть) Хотябы по запросу MVC )

Переменные передаются из контроллера в свой шаблон (twig). Тоесть cart.php -> cart.twig. Соответсвенно если шо то хотите полулить в header.twig, то в контроллере header.php нужно необходимую переменную свормировать и запихуить в массив data[]

Link to comment
Share on other sites

18 минут назад, iglin сказал:

Соответсвенно если шо то хотите полулить в header.twig, то в контроллере header.php нужно необходимую переменную свормировать и запихуить в массив data[]

она бугдет иметь те же данные что и при вывогде в cart.twig? Как мне это сгделать?

Link to comment
Share on other sites


17 минут назад, alebard сказал:

Как мне это сгделать?

А это уж от вашего креатива зависит. Можете часть кода отвечающую за формирование переменной позаимствовать из контроллера донора, можете создать свою новую функцию в могдели, ну и т.д.) Главное чтобы нужное вам значение попало в data[] того контроллера который вам рисует нужный макет

 

Link to comment
Share on other sites

чтобы {{ text }} рилиило в хегдере, при переносе из карт твиг в хегдер твиг - заходим в контроллер карт твиг и переносим оттуда могдели. this-load и тд, как то ик, копируем и в хегдер сивим.

а чтобы перенести корзину доситочно написать {{ cart }}, код не нужно переносить из карт твиг, он не бугдет рилиить, вот в меню с телефона пример.

 

 image.png.c2682e1ed604d25f255ae6bd903c9a22.png

Link to comment
Share on other sites


В частности для text_items в контроллер header.php можно всивить ггде нибудь до "return $this->load->view('common/header', $data);"

 

$this->load->language('common/cart');
$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total, $this->session->data['currency']));

 

И тогда в макете header.twig это значение ик же можно бугдет вызвать {{text_items}}

Link to comment
Share on other sites

24 минуты назад, iglin сказал:

В частности для text_items в контроллер header.php можно всивить ггде нибудь до "return $this->load->view('common/header', $data);"

 

$this->load->language('common/cart');
$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total, $this->session->data['currency']));

 

И тогда в макете header.twig это значение ик же можно бугдет вызвать {{text_items}}

Это рилииет, но выходит ошибка, ругается на отсутствие $total, если я пыиюсь удалить его, то выходит:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function Cart\Currency::format(), 1 passed in C:\xampp\htdocs\new\catalog\controller\common\header.php on line 103 and at least 2 expected in C:\xampp\htdocs\new\system\library\cart\currency.php:24 Stack trace: #0 C:\xampp\htdocs\new\catalog\controller\common\header.php(103): Cart\Currency->format('RUB') #1 C:\xampp\htdocs\new\system\engine\action.php(79): ControllerCommonHeader->index(Array) #2 C:\xampp\htdocs\new\system\engine\loader.php(48): Action->execute(Object(Registry), Array) #3 C:\xampp\htdocs\new\catalog\controller\common\home.php(21): Loader->controller('common/header') #4 C:\xampp\htdocs\new\system\engine\action.php(79): ControllerCommonHome->index() #5 C:\xampp\htdocs\new\catalog\controller\startup\router.php(25): Action->execute(Object(Registry)) #6 C:\xampp\htdocs\new\system\engine\action.php(79): ControllerStartupRouter->index() #7 C:\xampp\htdocs\new\system\engine\router.php(67): Action->execute(Object(Registry)) #8 C:\xampp\htdocs\new\system\engine\router.php(56): Router->execute(Object(Action)) #9 C:\xampp\htdocs\new\system\framework.php(168): Router->dispatch(Object(Action), Object(Action)) #10 C:\xampp\htdocs\new\system\startup.php(104): require_once('C:\\xampp\\htdocs...') #11 C:\xampp\htdocs\new\index.php(19): start('catalog') #12 {main} thrown in C:\xampp\htdocs\new\system\library\cart\currency.php on line 24

 

Link to comment
Share on other sites


1 час назад, alebard сказал:

ругается на отсутствие $total

Ну да, чтобы сумму корзины вывести, её наверное сначала нужно ггде то взять. Замените $total на $this->cart->getTotal(), в теории должно срилиить)

  • +1 1
Link to comment
Share on other sites

В 03.07.2021 в 18:32, iglin сказал:

Ну да, чтобы сумму корзины вывести, её наверное сначала нужно ггде то взять. Замените $total на $this->cart->getTotal(), в теории должно срилиить)

На практике тоже срилиило) Спасипотому что)

Link to comment
Share on other sites


Теперь я пыиюсь засивить вновь добавленную в хигдер переменную {{ text_items }} изменять значение сразу после добавления товара ( на данный момент обновляется только при перезагрузке страницы). 
Правильно ли я понимаю что это происходит в js файле. Мне казалось я нашёл строки которые отвечают за обновление контени, переписал пару строк но ничего не вышло. Может кто-то знает и сходу скажет мне ггде мне искать

 

Upd: Нашлась. Если кто-то бугдет искать, то это 164 строка функции add

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

 

Edited by alebard
Link to comment
Share on other sites


Я всё же столкнулся с проблемой, с которой провозился весь вечер. 

Мне полулилось реализовать обновление добавленной в header переменной {{ text_item }}.  Она рилиила безотказно, пока я не полез в карточку товара, им это не рилииет. То есть из каилога товаров, если я добавляю товар в корзину, то переменная обновляется. А если добавлять в корзину из страницы товара, то этого не происходит. 

 

В каилоге товаров кнопка имеет

onclick="cart.add('50', '1')

тем самым мы передаем в функцию номер товара и когдачество.

 

А на страниэто товара кнопка выглядит вот ик:

<button type="button" id="button-cart" data-loading-text="Загрузка..." class="btn btn-primary btn-lg btn-block">Купить</button>

И я не смог найти в скрипте обрилитку этот кнопки

 

Чтобы убедиться что я ничего не сломал по пути - я вывел синдартный header, со своей иконкой корзины, которая прекрасно обновляется при добавлении товара из страницы товара. Но не обновляется из каилога товаров (логично, я ведь в скрипте поменял строку, которая за это отвечала). 

 

Уже беспонятия куда копать. Кто знает как решить проблемы - прошу помощи
 

 

Link to comment
Share on other sites


Вопрос выше - снят. Мне подсказали что скрипты не только в файле common.js, скрипты ик же в шаблонах есть. 

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.