Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


alebard
 Поделиться

Рекомендованные сообщения

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

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

 

Ссылка на комментарий
Поделиться на других сайтах

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

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

 

 image.png.c2682e1ed604d25f255ae6bd903c9a22.png

Ссылка на комментарий
Поделиться на других сайтах


В частности для 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}}

Ссылка на комментарий
Поделиться на других сайтах

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

 

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

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

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

На практике тоже сработало) Спасибо)

Ссылка на комментарий
Поделиться на других сайтах


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

 

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

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

 

Изменено пользователем alebard
Ссылка на комментарий
Поделиться на других сайтах


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

Мне получилось реализовать обновление добавленной в 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, со своей иконкой корзины, которая прекрасно обновляется при добавлении товара из страницы товара. Но не обновляется из каталога товаров (логично, я ведь в скрипте поменял строку, которая за это отвечала). 

 

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

 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.