Перейти к содержанию
7up

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

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

Подскажите опытные программисты, на сколько нелепо(не профессионально) будет выглядеть формирование запроса к базе прямо в 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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