Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


alebard

Recommended Posts

Всем привет. Начал знакомство с 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.