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

Модель в view


Recommended Posts

Оставьте tpl в покое, в контроллере делайте обращение к модели.

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

Дело в том что мне нужно передать значении из шаблона при загрузки страницы. Сделал свою функцию в контролере который делает запись к базе и вернет обратно уже из базы.

function translateYandex($text){
	$this->model_query_query->getTranslate($text) 
}

Вызов из view:

translateYandex('text');

получаю ошибку:

Fatal error: Using $this when not in object context in

 

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


6 часов назад, mega94 сказал:

 

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

 

может  вам нужен аякс?  php работает на сервере.  если нужно что-то передать  с клиента на сервер, используется аякс.(favascript передает данные на сервер, php обрабатывает) все это происходит без перезагрузки страницы.

если, я вас правильно понял.

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

50 минут назад, mega94 сказал:

Нужен без аякса)

вы хотите, когда страница уже загрузилась в браузер, сформировались какие-то данные от стороннего скрипта js, передать эти данные в php(контроллер)?

тогда только аякс или get(по ссылке).  но get c перезагрузкой страницы. перешли по ссылке  обработали данные, перенаправили обратно, а там уже новые данные.  и что,  опять по кругу? вы вообще понимаете, что php на сервере, а javascript на клиенте?

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

похоже вы меня не совсем поняли, я хотел связь между model и view без участие controller или вообще вызвать:

function translateYandex($text){
	$this->model_query_query->getTranslate($text) 
}

метод модуля в теле функции в controller

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


2 часа назад, mega94 сказал:

между model и view без участие controller

зачем? не нужно так делать. вам уже писали выше.

2 часа назад, mega94 сказал:

метод модуля в теле функции в controller

это не понял

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

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

похоже вы меня не совсем поняли, я хотел связь между model и view без участие controller или вообще вызвать:


function translateYandex($text){
	$this->model_query_query->getTranslate($text) 
}

метод модуля в теле функции в controller

 

1. Ваш метод translateYandex($text) ничего не возвращает. Чтобы он вернул, необходимо поставить return данные;

function translateYandex($text){
	$array = $this->model_query_query->getTranslate($text);
    return $array;
}

В этом случае метод вернёт данные.

 

2. Обратится из представления к методу  контроллера у Вас не получится.

Чтобы вернуть данные в шаблон, просто поместите их в массив.

к примеру вот так:

 

$data['yandex_text'] = $this->translateYandex($text);

 

В самом шаблоне можете обратиться вот так: <php print  $yandex_text; ?>

 

Если вы хотите передать данные из шаблона при загрузке, нужно использовать Ajax и всё равно не в обход контроллера.

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


2 часа назад, mega94 сказал:

я хотел связь между model и view без участие controller

В двойке не получится: тут шаблон изолирован от контекста.

Можно разве что попробовать передать модель в шаблон через $data вытянув её в контроллере через вызов:

$this->registry->get('model_path_class');

На вашем примере model_path_class будет model_query_query.

 

 

18 часов назад, ArtemPitov сказал:

MVC и только MVC

 

11 часов назад, Fortunes сказал:

онли  mvc..

 

Модель во вью никак не противоречит MVC! Не стоит путать модель и запросы к базе. В нормальном мире модель - это воплощение реального объекта со всеми его свойствами и поведением. И в нормальном мире в контроллерах не переливают значения из модели в промежуточные массив, чтоб потом передать в шаблон, а передают в шаблон экземпляр самой модели, при этом никакие запросы к базе не отправляются до момента реального использования полей модели (lazy loading).

 

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


Только что, Dotrox сказал:

Модель во вью никак не противоречит MVC! Не стоит путать модель и запросы к базе. В нормальном мире модель - это воплощение реального объекта со всеми его свойствами и поведением. И в нормальном мире в контроллерах не переливают значения из модели в промежуточные массив, чтоб потом передать в шаблон, а передают в шаблон экземпляр самой модели, при этом никакие запросы к базе не отправляются до момента реального использования полей модели (lazy loading).

 

Имелось ввиду что не стоит изобретать велосипед, а делать нормально. Можно тупо заинклюдить модель к шаблону, ну что это за бред?

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


1 минуту назад, Fortunes сказал:

не стоит изобретать велосипед, а делать нормально

Не нормально, а согласно архитектуры ОК, потому что я не считаю, что то, как это реализовано в ОК - можно назвать нормальным.

 

2 минуты назад, Fortunes сказал:

Можно тупо заинклюдить модель к шаблону, ну что это за бред?

Вот это уже как раз будет нарушением MVC. И у меня есть сомнения, что вообще будет работать.

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


Только что, Dotrox сказал:

Не нормально, а согласно архитектуры ОК, потому что я не считаю, что то, как это реализовано в ОК - можно назвать нормальным.

 

Вот это уже как раз будет нарушением MVC. И у меня есть сомнения, что вообще будет работать.

Работать будет, просто создать объект класса и обратится к методу. Естественно это нарушение MVC, но автор не хочет касаться контроллера, не понятно почему.

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


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

автор не хочет касаться контроллера, не понятно почему

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

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


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

Модель во вью никак не противоречит MVC! Не стоит путать модель и запросы к базе. В нормальном мире модель - это воплощение реального объекта со всеми его свойствами и поведением. И в нормальном мире в контроллерах не переливают значения из модели в промежуточные массив, чтоб потом передать в шаблон, а передают в шаблон экземпляр самой модели, при этом никакие запросы к базе не отправляются до момента реального использования полей модели (lazy loading).

 

Ну как бы человек спросил 

Цитата

Можно ли сделать вызов на методы моделя из .tlp если да то как сделать?

 

Покажите мне где сказано что в архитектуре MVC в V можно вызывать методы прямиком с M ? 

 

ЗЫ// Да, я знаю что контролеры в опенкарте не правильно используются и самому это не нравится. " Fat Stupid Ugly Controllers"

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

2 часа назад, Dotrox сказал:

как это происходит в нормальных фреймворках

ДА?

Ну так сделайте обертку в чем проблема?

 

Не бывает нормальных. В данном случае ОС -нормальный, все остальные - ненормальные

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

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

Покажите мне где сказано что в архитектуре MVC в V можно вызывать методы прямиком с M ? 

Э.. есть понятие как активный View, в OC  - view - пассивный

вот пример

 

<? echo $this->route('header') ?>

<? echo $this->route('content') ?>

<? echo $this->route('footer') ?>

 

Не будем обсуждать, но разделение есть - модель активная - она генерит  вызовы контроллеров

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

24 минуты назад, chukcha сказал:

Ну так сделайте обертку в чем проблема?

Ну, @mega94 , судя по всему, это и пытается сделать.

 

 

20 минут назад, chukcha сказал:

<? echo $this->route('header') ?>

Не делай так! Короткий тег - это вообще моветон, а в данном случае совсем жуть получается, ибо есть "<?=" (это особый случай: начиная с 5.4 этот тег не зависит от значения short_open_tag).

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


Спасибо за интерес к теме, в контроллере есть переменная $res в ней находится json все информации, сделал

$data['res'] = $res;

и все, все нужные данные получаю уже с .tpl в том числе язык без перевода. Я хотел пропустит данные через перевод напрямую из $res а не делать дубликат с массивами в контроллере и потом вызвать этот дубликат из .tpl хотя сейчас так и сделал.

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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