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

Произвольный запрос к базе из tpl, можно?


Recommended Posts

Подскажите опытные программисты, на сколько нелепо(не профессионально) будет выглядеть формирование запроса к базе прямо в tpl файле темплейта? Мне нужно для каждого товара вытягивать определенные данные из созданной мной товара, но так не хочется создавать отдельно модель, контроллер для одного маленького запросика. Есть ли какие-то моменты в безопасности или замедлении работы используя такой метод?

 

Всем спасибо за ответы.

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


Исходя из шаблона проектирования MVC, на котором построен опенкарт, обращаться к базе даже из контроллера крайне нежелательно. 

А из шаблона это делать даже еще хуже. По 10 бальной шкале непрофессинальности, я бы дал 10 за такой код.. 

 

Да и в чем проблема? Шаблон не вызывается сам по себе, он вызывается из контроллера, который скорее всего уже использует какую-то модель.

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

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

Достаточно понятно, спасибо, буду вникать в MVC и пытаться создать с вою модель и внедрять ее в контроллер.

Правильнее создавать отдельный файл модели и контроллера, верно? или можно добавить метод прямо в модель product например?

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


но так не хочется создавать отдельно модель, контроллер для одного маленького запросика. Есть ли какие-то моменты в безопасности или замедлении работы используя такой метод?

Это грозит только некрасивостями и беспорядком с точки зрения MVC и дальнейшей работы с кодом. Влияния на безопасность или замедление нет никакого.

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

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


Правильнее создавать отдельный файл модели и контроллера, верно? или можно добавить метод прямо в модель product например?

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

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

Это грозит только некрасивостями и беспорядком с точки зрения MVC и дальнейшей работы с кодом. Влияния на безопасность или замедление нет никакого.

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

угу, понял, спасибо за разъяснения. Поскольку нет опыта в MVC пытаюсь вникнуть и делать все "правильно", все же для себя :) Почему возникла такая мысль, делать запросы в tpl, потому как еще в некоторых частях сайта нужно будет получать такой же запрос из моей таблицы, например в корзине.

 

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

 

Суть довольно проста, в отдельной(своей) таблице я храню некие параметры, которые синхронизированы с 1с. Некое подобие опций товара, т.е. в product.tpl мне нужно получать все данные из этой таблицы, для отображения выбора, после выбора покупателем значения, оно заполняется в текстовое поле стандартной опции opencart с типом text и соответственно выбранное значение(что выбрал покупатель) видно в корзине и админке. Ну и хочется повесить событие на кнопку купить, которое бы выполняло маленький запрос к базе.

 

Таким образом планирую избавиться от огромного количества записей в таблицах product_option, где у меня они все храняться. Для каждого товара в 95% случаем набор опций одинаковый. Это что-то вроде сервиса печати на сувенирах. Опции у меня - это выбор основы для печати, соответственно для например 1000 товаров они одни и те же, зачем же плодить тучу записей.

 

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

 

Вот такая задумка. Имеет место быть?

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


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

Тогда тем более нет никакого смысла пихать запрос в tpl. Ибо DRY (don't repeat yourself).

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

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


Тогда тем более нет никакого смысла пихать запрос в tpl. Ибо DRY (don't repeat yourself).

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

Все верно, так и сделал. Отдельную модель не создавал, прямо в product сделал функцию с запросом и вызываю ее в одноименном контроллере, запихиваю весь ответ в массив и разворачиваю его в теме. Теперь вот задумался как красиво реализовать многомерный массив, но это скорее уже разговор не в этой теме :)

 

Ну задавать вопросы так задавать.... Если результатом запроса является около 300строк, которые запихиваю в массив, которые передаются tpl где перебором разворачиваются, не повлияет ли на скорость? Обычно в контроллер сваливается по одной строке информации о товаре и по нескольку строк опций или атрибутов, а тут все же по более. Хотя это видимо уже в тему "как замерить скорость генерирования одной страницы магазина"? :)

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


7up сказал(а) 23 Окт 2013 - 6:41 PM:

Если результатом запроса является около 300строк, которые запихиваю в массив, которые передаются tpl где перебором разворачиваются, не повлияет ли на скорость?

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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