Как мога чрез една инстанция да извикам няколко метода?

tedo96

Registered
Здравейте,
работя с CodeIgniter. В почти всеки метод на контролера имам няколко инстанции от вида на:
PHP:
        $data['categories'] = $this->blog_model->printCategory();
        $data['last_topics'] = $this->blog_model->printLastThreeTopics();
        $data['last_comments'] = $this->blog_model->printLastThreeComments();

        $data['social_networks'] = $this->site_model->socialNetworks();
        $data['blog_rolls'] = $this->site_model->blogRolls();
Как мога да ги извикам само един път. Пробвах да направя функция в модела, който се вика автоматично и в нея ги поставих, но не се получи...
Направих ето това:
PHP:
    public function autoLoad(){
        $data['categories'] = $this->blog_model->printCategory();
        $data['last_topics'] = $this->blog_model->printLastThreeTopics();
        $data['last_comments'] = $this->blog_model->printLastThreeComments();
        
        $data['social_networks'] = $this->site_model->socialNetworks();
        $data['blog_rolls'] = $this->site_model->blogRolls();
    }
И съответно си го извиках с $this->general_model->autoLoad(); , но няма резултат....

Може въпроса да ми е твърде елементарен, но все пак... От скоро работя с CodeIgniter и се стремя всичко да е изпипано до последния детайл. :)

Благодаря!
 

smoke

Registered
Не знам дали това е най-правилния начин но работи...

В контролера си правя една инстанция:

$data['page'] = "page-to-load.php";
$this->load->view("change", $data);

Така минават всички view-та през един файл, който в моите случаи служи за зареждане на Header , Main част, която се дава от контролера и Footer. От този файл можеш да сложиш и тези инстанции, които си написал по-горе.
 

Radko

Registered
Прочети това, не знам дали ще ти помогне http://www.webgeekly.com/tutorials/php/use-php-method-chaining-to-write-neater-code/

Попринцип PHP си има вградена функция _autoload() но тя е само за класове, не за методи.
 

tedo96

Registered
smoke каза:
Не знам дали това е най-правилния начин но работи...

В контролера си правя една инстанция:

$data['page'] = "page-to-load.php";
$this->load->view("change", $data);

Така минават всички view-та през един файл, който в моите случаи служи за зареждане на Header , Main част, която се дава от контролера и Footer. От този файл можеш да сложиш и тези инстанции, които си написал по-горе.
Аз не говоря за view-та, а за методи, които се намират в модела. Искам по някакъв по-елегантен начин да ги извикам в контролера.
 

relax4o

Registered
Какво искаш да кажеш по по-елегантен начин. Не за всичко трябва да се прави елегантен начин. Важното е да върви добре, иначе не ти пречи да си предефинираш един масив КЛЮЧ-СТОЙНОСТ, който да е ИМЕ-КЛЮЧ-НА-МАСИВ --- ИМЕ-НА-МЕТОД и да го ръгнеш във foreach.
 

nbacool2

Registered
ами не ти се получава, защото инициализираш всичко това във метод, а променливите във методите имат ограничена (локална) видимост и затова $data в метода не е достъпен от останалата част от кода. Можеш да направиш следното в controller-a

$this->general_model->autoLoad($data);

където autoLoad в модела ти е :

public function autoLoad($array){

$array['categories'] = $this->blog_model->printCategory();

$array['last_topics'] = $this->blog_model->printLastThreeTopics();

$array['last_comments'] = $this->blog_model->printLastThreeComments();

$array['social_networks'] = $this->site_model->socialNetworks();

$array['blog_rolls'] = $this->site_model->blogRolls();

}

така подаваш масива като параметър и го обработваш в метода. Е, можеш да използваш global, но това определено не е препоръчително :D
 

tedo96

Registered
nbacool2 каза:
ами не ти се получава, защото инициализираш всичко това във метод, а променливите във методите имат ограничена (локална) видимост и затова $data в метода не е достъпен от останалата част от кода. Можеш да направиш следното в controller-a

$this->general_model->autoLoad($data);

където autoLoad в модела ти е :

public function autoLoad($array){

$array['categories'] = $this->blog_model->printCategory();

$array['last_topics'] = $this->blog_model->printLastThreeTopics();

$array['last_comments'] = $this->blog_model->printLastThreeComments();

$array['social_networks'] = $this->site_model->socialNetworks();

$array['blog_rolls'] = $this->site_model->blogRolls();

}

така подаваш масива като параметър и го обработваш в метода. Е, можеш да използваш global, но това определено не е препоръчително :D
Не става. Съжалявам, че пиша чак сега, но работих по друг проект. :)
 

Fakeheal

Super Moderator
tedo96 каза:
Fakeheal каза:
Що не ги викаш в конструктура?
Хуахауаххауаххауахауахауахуаа
Гениална си!
tumblr_lemx3vtYBs1qe2hyro1_100.png
 

Горе