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

Нужно спарсить код блока товара из файла шаблона category.twig


Recommended Posts

Подскажите лучший способ как c помощью php спарсить кусок кода, отвечающий за вывод блока товара, из файла шаблона product/category.twig
По идее, нужно спарсить все что находится внутри цикла {% for product in products %} и записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах.
Изначально получаю код файла и записыю в переменную:
$content = file_get_contents(DIR_CATALOG . 'view/theme/'.$this->config->get('config_theme').'/template/product/category.twig');
А дальше регулярку писать или есть другие варианты? Если регулярка, то помогите составить выражение.
Спасибо всем, кто отзовется!

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


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

Подскажите лучший способ как c помощью php спарсить кусок кода, отвечающий за вывод блока товара, из файла шаблона product/category.twig
По идее, нужно спарсить все что находится внутри цикла {% for product in products %} и записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах.
Изначально получаю код файла и записыю в переменную:
$content = file_get_contents(DIR_CATALOG . 'view/theme/'.$this->config->get('config_theme').'/template/product/category.twig');
А дальше регулярку писать или есть другие варианты? Если регулярка, то помогите составить выражение.
Спасибо всем, кто отзовется!

 

для чего вам этот костыль???

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

5 хвилин назад, Venter сказав:

 

для чего вам этот костыль???

Я написал в первом посте "записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах".

Идея такая: в модуле товаров, типа "Рекомендуемые", во время установки (в методе install()) хочу парсить с текущего шаблона блок товара и записать его в отдельный шаблон, чтобы подключать потом шаблоне модуля в цикле вывода товаров.
Для чего? Для того, чтобы не делать адаптацию модуля под каждый новый шаблон вручную.

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


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

Я написал в первом посте "записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах".

Идея такая: в модуле товаров, типа "Рекомендуемые", во время установки (в методе install()) хочу парсить с текущего шаблона блок товара и записать его в отдельный шаблон, чтобы подключать потом шаблоне модуля в цикле вывода товаров.
Для чего? Для того, чтобы не делать адаптацию модуля под каждый новый шаблон вручную.

 

Трубейное и костыльное решение!!!! Тем более вы разработчик модуля. Создайте отдельный файл, пропишите там свой цикл и то что вам надо

Как получить данные в файл??? При переходе на страницу получаем ссылку, если это то что вам надо то получаем данные и выводим.

 

реально стремное решение через file_get_contents

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

1 годину назад, Venter сказав:

реально стремное решение через file_get_contents

Понимаю. Поэтому спросил как лучше сделать.
То, что нужно создать свой шаблон и прописать там свой цикл - я понимаю. Как раз в этом цикле хочу инклудить шаблон товара. Иначе придется под каждый новый шаблон сайта (тему) адаптировать шаблон модуля. Ищу решение для автоматизации этого дела, по крайней мере для большинства более-менее стандартных шаблонов. 
Уверен, что кто-то уже пробовал такое реализовать в подобных модулях для автоматической адаптации списка товаров под шаблон.

В грядущей версии OpenCart шаблон блока товара уже вынесли в отдельный файл, а пока приходится крутить то что есть.
 

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


3 часа назад, ocbot сказал:

Я написал в первом посте "записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах".

Идея такая: в модуле товаров, типа "Рекомендуемые", во время установки (в методе install()) хочу парсить с текущего шаблона блок товара и записать его в отдельный шаблон, чтобы подключать потом шаблоне модуля в цикле вывода товаров.
Для чего? Для того, чтобы не делать адаптацию модуля под каждый новый шаблон вручную.

 

Если более четко опишешь логику твоего модуля и при каких обстаятельствах тебе данные нужны, то думаю сможем найти правильное решение

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

12 минут назад, ocbot сказал:

Понимаю. Поэтому спросил как лучше сделать.
То, что нужно создать свой шаблон и прописать там свой цикл - я понимаю. Как раз в этом цикле хочу инклудить шаблон товара. Иначе придется под каждый новый шаблон сайта (тему) адаптировать шаблон модуля. Ищу решение для автоматизации этого дела, по крайней мере для большинства более-менее стандартных шаблонов. 
Уверен, что кто-то уже пробовал такое реализовать в подобных модулях для автоматической адаптации списка товаров под шаблон.

В грядущей версии OpenCart шаблон блока товара уже вынесли в отдельный файл, а пока приходится крутить то что есть.
 

Короче я так понимаю ты хочешь получать шаблон текущей темы. Так это вообще намного проще, лезим в бд и узнаем текущую тему шаблона и подключаем нужный шаблон без всяких парсингов и тд, Если хранить разметку шаблона в файле и юсер установит другой шаблон то твой модуль потерпит фиаско, так что при каждой генирации что то там в твоем модуле и выводе этого шаблона получаешь текущую тему шаблона и подключаешь нужный файл

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

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

 

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

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

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

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

 если кто то реально пытался такое делать через file_get_contents, то я буду точно уверен что у этого разработчика проблемы с руками и логикой на все 10000000%

 

Что вообще делает твой модуль????

 

И еще, в file_get_contents не будет работать php код

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

9 минут назад, Venter сказал:

Короче я так понимаю ты хочешь получать шаблон текущей темы. Так это вообще намного проще, лезим в бд и узнаем текущую тему шаблона и подключаем нужный шаблон без всяких парсингов и тд, Если хранить разметку шаблона в файле и юсер установит другой шаблон то твой модуль потерпит фиаско, так что при каждой генирации что то там в твоем модуле и выводе этого шаблона получаешь текущую тему шаблона и подключаешь нужный файл

 

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

 

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

Цитата

Что вообще делает твой модуль????

Модуль для вывода товаров, типа стандартного модуля "Рекомендуемые товары".
Код блока товара в списке (блок, который повторяется в цикле товаров) хочу получить из шаблона сайта, а именно из файла product/category.twig и запихнуть его в отдельный шаблон, потом инклудить в своем модуле.
Отдельного шаблона с блоком товара в большинстве шаблонов сайтов нет, поэтому просто подключить файл шаблона не получится.

Генерироваться этот отдельный шаблон блока товара будет один раз - при установке модуля. Если клиент поменяет шаблон сайта - можно отключить-включить модуль, чтобы он адаптировался под шаблон.

Регулярку уже подобрал.
 

Цитата

И еще, в file_get_contents не будет работать php код

Парситься будет файл twig. Выполняться ничего не будет. Получил данные из файла, вырезал что нужно и записал это в файл.

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


7 минут назад, ocbot сказал:

Код блока товара в списке (блок, который повторяется в цикле товаров) хочу получить из шаблона сайта, а именно из файла product/category.twig и запихнуть его в отдельный шаблон, потом инклудить в своем модуле.

ну вот и получай текущую тему шаблона и путь до твоего файла и далее делай то что тебе надо, путь до файла текущей темы сохраняем в бд

ну и при изменении темы шаблона сделай ocmod чтоб перезаписывал твои данные как в бд так и в твой файл. Короче делай как хочешь, варианты и примерно в какую сторону двигаться тебе написал.

Ты по ходу ищешь самый простой путь решения и не важно костыль это или нет, лиж бы работало ))) Хорошо если я ошибаюсь

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

34 хвилини назад, Venter сказав:

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

Вопрос был как лучше получить нужную часть кода из конкретного twig-файла. Нужно выдернуть часть шаблона из category.twig, а именно ту часть, где идет вывод товаров в цикле.

Конечно, я могу сделать стандартно, как обычно все делают, шаблон модуля сверстать под тему дефолт и потом адаптировать его под каждую тему вручную. Но можно же это упростить, почему вы называете это костилем? В новой четвертой версии это уже реализовали на уровне движка.
Генерирование шаблона при изменении темы - не проблема, вариантов много как это реализовать автоматически, можно без ocmod через ивенты, но я действительно написал самый простой вариант "отключить-включить", потому что изменение шаблона сайта это не ежедневная операция и обычно устанавливают шаблон, а потом модули. Но вы правы, что идеально будет, когда при изменении шаблона сайта будет автоматически обновляться шаблон модуля. 

Сохранять путь к сгенерированному шаблону в БД не вижу смысла, так как название текущего шаблона можно получить из настроек сайта, а название файла и его размещение внутри шаблона будет одно и то же для всех шаблонов. Видимо, вы не правильно поняли чего я хочу добиться в итоге. Я хотел бы, чтобы товары в модуле выглядели как и товары в других частях темы, например в категории, без ручной адаптации верстки.

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


44 минуты назад, ocbot сказал:

Сохранять путь к сгенерированному шаблону в БД не вижу смысла, так как название текущего шаблона можно получить из настроек сайта, а название файла и его размещение внутри шаблона будет одно и то же для всех шаблонов. Видимо, вы не правильно поняли чего я хочу добиться в итоге. Я хотел бы, чтобы товары в модуле выглядели как и товары в других частях темы, например в категории, без ручной адаптации верстки.

 это вы не поняли что я вам написал, а вас я прекрасно понял. 

 

44 минуты назад, ocbot сказал:

Вопрос был как лучше получить нужную часть кода из к

опять все то же да потому же, несколько раз вверху написал, неужели так сложно подумать а???

 

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

Я ж не заставлял делать точно так как писал выше, но факт, через file_get_contents это реальный костыль

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

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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