2013-05-03 3 views
1

Я новичок в codeigniter, и я пытаюсь написать функцию, которая в основном сохранит имя и url для данных сеанса всякий раз, когда вы посещаете определенную страницу, а затем сообщаете об этом в маленьком виджет на экране.вызов функции контроллера из представления в codeigniter

Предполагается, что он будет работать как функция истории для того, какие страницы были доступны и в каком порядке. Пока работа с тестовыми данными отлично работает! однако я пытаюсь выяснить, как я могу назвать функцию «добавить» на каждой посещенной странице, поэтому мы можем указать имя и URL-адрес страницы, которая была посещена. Есть какой-либо способ сделать это? Или есть способ сообщить о наборе переменных, таких как имя и URL-адрес страницы после ее посещения?

Например: скажите, что я нахожусь на странице 1, стр. 2, стр. 3 и стр. 6, и я хочу, чтобы каждый из них отображался в моей функции истории. На каждой из этих страниц я бы загрузить представление истории, и я хотел бы назвать истории в функции контроллера "add(name,url)" и заполнить его в чем-то вроде этого:

add('page1','page1.php') 

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

+1

Почему бы вам не добавить запись в действие вашего контроллера, связанную со страницей? –

ответ

9

Я не знаю, почему вы не называете это на каждом контроллере. , но если вы хотите, чтобы вызвать функцию регулятора тока, вы должны получить экземпляр текущего контроллера так:

<?php 
$CI =& get_instance(); 
$CI->method($param); 
?> 
+0

Предположим, у меня есть объект итератора, который содержит данные каталога. Насколько мне известно, встроенных функций нет, поэтому я могу использовать функцию вызова для каждого элемента в итераторе. Тем не менее, я получаю доступ к каждому элементу, когда я повторяю их в представлении, поэтому имеет смысл называть «функцию отображения» контроллера там. Что лучше? –

+0

Большое спасибо. –

0

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

function __construct() { 
parent::__construct(); 

// load model that has page tracker methods 
$this->load->model('pagetracker_m'); 

// call the method to track the pages, and have it return the results 
if (! $this->history = $this->pagetracker_m->_trackpage();) { 
    echo 'Error getting history ' ; } 

} // end construct 


function something() { 

// pass history to $data, then use echo $history->firstpage, etc in view 
$data['history'] = $this->history ; 

    // call your view etc 

} 
Смежные вопросы