?

Log in

Идеологически правильно - куда? :) - Codeigniter [entries|archive|friends|userinfo]
Русское сообщество пользователей CodeIgniter

[ website | проект CodeIgniter ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| репозитарий проектов wiki ]

Идеологически правильно - куда? :) [Aug. 14th, 2009|10:10 pm]
Русское сообщество пользователей CodeIgniter

ru_codeigniter

[_bublik_]
Допустим имеется проект небольшого новостного сайта.

На заглавной странице, кроме самих новостей есть "Погода", "Курсы валют" и "Голосовалка".
На остальных страниц тоже хочется видеть эти части.

Откуда идеологически правильно будет их подключать?

Писать в каждый контроллер что-то типа:

load->model('weather_model');
		$this->load->model('money_model');
		$this->load->model('vote_model');
                .......
		$this->load->view('header',$data);
	}
	
	function index()
        {
               .....
	}
}

?>



мне кажется неправильно.
LinkReply

Comments:
[User Picture]From: sontar
2009-08-14 04:09 pm (UTC)
Уфф бля. детский сад.

"а как думаете - если это вынесли в отдельный helper?"

Предложение не содержит законченное утверждение или вопрос, в нём или пропущены члены или сделана ошибка или и то и другое. Оно может означать:
- Мы вынесли код в отдельный хелпер, что Вы по этому поводу думаете?
- Кто-то другой вынес код в отдельный хелпер, что Вы по этому поводу думаете?
- Мы собираемся вынести код в отдельный хелпер, что Вы по этому поводу думаете?
- Что Вы думаете о выносе кода в хелпер в принципе?
и т.д. к тому же какой именно код выносится?
Понятно, надеюсь. Т.е. читающему (т.е. мне) приходится постоянно пытаться прочесть выши мысли и понять что же Вы действительно имели ввиду.
Это как общаться фразами "пама, мы я крыжовник чокаво. ы?"

> как вынести часть
Понятно же, что вынести код с $this в хелпер не получится.
(Reply) (Parent) (Thread)
[User Picture]From: drumrock
2009-08-15 05:36 am (UTC)
С хелпером и $this можно провернуть следующий фокус.

Сделать хэлпер:
function doMultiload($controllerInstance) {
        $controllerInstance->load->model('multiloadmodel');
        $controllerInstance->load->model('multiloadmodel2');
        $controllerInstance->load->model('multiloadmodel3');
}



В контроллере написать что-нибудь вроде
        function multiload() {
                $this->load->helper('multiload');
                doMultiload($this);
                $data = $this->multiloadmodel->getData();
                print_r($data);
        }


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

Как считаете, хорош ли такой вариант? Может, как-то удобнее можно сделать?
(Reply) (Parent) (Thread)
[User Picture]From: sontar
2009-08-15 06:46 am (UTC)
один хрен в контроллере придётся вызывать функцию для вызова хелпера. но главное то, что блок на странице представляет собой совокупность модели/метода и отображения, так что хелпером не обойдёшься. Причём этот метод должен иметь возможность получить данные из uri + произвольные дополнительные параметры.

Я представляю удобной такую схему:
Элементрная единица: модель/метод + отображение. Метод получает параметры и выдаёт данные (массив), эти данные совмещаются с отображением и получается на выходе HTML-документ или часть документа (строка). В этом документе может быть ссылка на такую же единицу - происходит вызов дочерней совокупности модели/метода + отображения, которая возвращает такую же часть HTML-документа (контейнерный блок с содержимым), и эта часть вставляется в родительский HTML-документ в соответствующем месте.
И так далее. Можно делать многоуровневый вызов, но на практике достаточно одного уровня.
Эта схема избавит нас от копания в контроллере. По сути контроллер будет только один, а вся задача программиста будет сводиться к написанию методов/отображений и подключение их в конфигурации.
(Reply) (Parent) (Thread)
[User Picture]From: drumrock
2009-08-15 07:26 am (UTC)
А такая элементарная единица откуда вызывается? Из контроллера?

Если в сгенерированной строке есь ссылка на такую же элементарную единицу, то получается по сути вставка "модель/метод + отображение" в отображение. Или я что-то упустил?
(Reply) (Parent) (Thread)
[User Picture]From: sontar
2009-08-15 08:08 am (UTC)
Корневая - из контроллера, остальные вызываются из корневой. Древовидная структура.

> получается по сути вставка "модель/метод + отображение" в отображение
Да, каждая комбинация "модель/метод + отображение" после обработки преобразуется в HTML-код, который может содержать или часть страницы (< div>...</div>) или страницу целиком (включая < html>< head>...). Получается вставка HTML-кода в HTML-код.
(Reply) (Parent) (Thread)