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

Twig - как проверить главная ли страница?


andqzzz

Recommended Posts

Господа! Помогите пожалуйста с твигом! Уже задавал этот вопрос вот здесь, но ответа к сожалению не получил.

Ситуация следующая:

Хочется что-бы хедер отображался по-разному в зависимости от того, главная это страница или нет.  Для второго опенкарта на PHP существует вот такое решение:

  $path = "common/home";
  $url = $_SERVER['REQUEST_URI'];
  if ($url == "/" or strripos($url, $path)) {
    $is_home = TRUE;
  }else{
    $is_home = false;
  }   

Но с твигом это решение не прокатывает. Насколько я понял - код нужно сунуть в header.php, и передать значение в шаблон, но КАК??? 

Три дня смотрю в монитор и никак не могу понять. Вижу в header.php следующий код:

		$data['language'] = $this->load->controller('common/language');
		$data['currency'] = $this->load->controller('common/currency');
		$data['search'] = $this->load->controller('common/search');
		$data['cart'] = $this->load->controller('common/cart');
		$data['menu'] = $this->load->controller('common/menu');
		
		return $this->load->view('common/header', $data);

По видимому это означает что тут объявляется массив $data с кучей значений, которые передаются в шаблон командой return и всё должно быть просто - если я хочу передать шаблонизатору еще одну переменную, мне достаточно её здесь обьявить к примеру так:

		$data['main'] = 'главная';

или так:

		$main = 'главная';
		
		return $this->load->view('common/header', $data, $main);

а в шаблоне вызвать в фигурных скобочках на экран так:

{{ main }}

Но куда я только ни пытался сунуть свою переменную, и в language и создавал новый php и в нем объявлял переменную и создавал массив и и пытался передать и через точку и в скобочках, модификаторы обновлял, кеш чистил и руками и ногами и отключал и через админку и в конфиге - всё тщетно! Уже разбил голову об клавиатуру... Я не силен в PHP, возможно я не поставил где-то точечку или скобочку, скажите пожалуйста, что не так??? Как создать в пхп переменную $main и вывести её на экран в хэдэре в третьем опенкарте??? Дальше я додумаю сам.

Змінено користувачем andqzzz
Надіслати
Поділитися на інших сайтах


Спасибо за подсказку, на сколько я понял print_r() выводит пригодную для чтения человеком информацию о переменной. Используя эту функцию я могу в узнать информацию об объявленной мной только что переменной - является ли она  string, integer, float или arrey, указав её в header.php после обьявления переменной, но как я увижу результат? Как опять передать это всё в шаблонизатор? 

В твиге есть DUMP, но при попытке вставить в header.twig

 {{ dump(main) }}

сайт вобще перестает открываться.

Надіслати
Поділитися на інших сайтах


Установил вот ЭТО - получил HTTP ERROR 500. Попробую удалить и сделать руками как написано в Вашей ссылке.

Змінено користувачем andqzzz
Надіслати
Поділитися на інших сайтах


Восстановил файлы и базу из позавчерашнего бэкапа для верности. сайт - чистый.

Сделал всё по Вашей ссылке и из поста выше в той же теме. 

Что-бы не путаться объявляю переменную прямо в твиге:

      {% set hello = 'драсьте' %}

Вывожу на экран

      {{ hello }}

Вижу на экране  "здрасьте"

Пытаюсь отдебажить

      {{ debug(hello) }}

Получаю HTTP ERROR 500 :-(

 

При этом дебагер работает - если я снова восстанавливаю сайт из бэкапа и начисто создаю переменную 

{% set main = [1, 2] %}

Получаю Notice: Array to string conversion in /home/p/pavlovokuz/sword/public_html/system/library/template/Twig/Environment.php(403) : eval()'d code on line 269Array

 

Стоит только вызвать debug - HTTP ERROR 500

Змінено користувачем andqzzz
Надіслати
Поділитися на інших сайтах


Та нельзя создавать переменные прямо в твиге. Дениель и добавил специально твиг, чтобы не писали код прямо в шаблон. Логика вся должна быть в контролере.

 

 

Надіслати
Поділитися на інших сайтах

5 часов назад, andqzzz сказал:

Хочется что-бы хедер отображался по-разному в зависимости от того, главная это страница или нет.

зубы лечат через рот а не ...

поэтому создаете второй шаблон header2.twig

 

if (!isset($this->request->get['route']) || $this->request->get['route'] == 'common/home')  return ...'common/header2' ...

 

Надіслати
Поділитися на інших сайтах

 Но не мог ли бы кто нибудь всётаки ткнуть носом почему у меня переменная не передается в шаблонизатор?

 

Змінено користувачем andqzzz
Надіслати
Поділитися на інших сайтах


Может еще этот онлайн-редактор глючить. Встречал такое.

Насчет модификаторов, автор в первом посте пишет что обновляет, да и сайт похожий на дефолтный, без установленых модификаторов.

Мало информации вообщем, скриншот модулей и модификаторов приложите.

Надіслати
Поділитися на інших сайтах

Вобщем спасибо всем огромное, видимо всё дело было в корявых модификаторах. В самом начале эксперементировал с темами, вроде всё удалил, но видимо не до конца. Пытался удалять и чистить, в итоге при любом изменении то и дело получал HTTP ERROR 500. 

В storage в папке modification лежали header.php и header.twig, при очистке кэша модификаторов они не удалялись почему-то, при удалении руками та же ошибка HTTP ERROR 500, в итоге просто снес нахрен движок и поставил всё заново - УРРРААААААА!!!!!

 

Ещё раз большое спасибо за участие в проблеме! Вы крутые парни!

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

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

Important Information

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