Codeigniter

Тема в разделе "PHP", создана пользователем VenderiGross, 29 апр 2012.

Модераторы: latteo
  1. VenderiGross

    VenderiGross Писатель

    Регистр.:
    29 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Здравствуйте, начал изучать фреймворк Codeigniter. Сразу же столкнулся с такой проблемой. Попытаюсь описать её суть.

    Есть некая модель с такими функциями:

    PHP:
        function index()/* Главная страница */
        
    {
                    
    $config['base_url'] = 'http://fol.lc/news/';
                    
    $config['total_rows'] = $this->db->count_all('news');
                    
    $config['per_page'] = 5;
                    
    $config['num_links'] = 5;
                    
    $config['uri_segment'] = 2;
                    
    $config['next_link'] = 'Далее;';
                    
    $config['prev_link'] = 'Назад;';
                    
    $config['first_link'] = 'Первое;';
                    
    $config['last_link'] = 'Последнее;';
                    
    $from intval($this->uri->segment(2));
                    
    $this->db->limit(5$from);
                    
    $this->db->order_by("date""desc");
                    
    $query_top  $this->db->get('news');
                    
    $this->pagination->initialize($config);
                    
    $page_nav $this->pagination->create_links();
                    
    $count_comments $this->db->count_all('comments'$from);
            
    $data = array(
                
    'page' => $page_nav,
                
    'count_comments' => $count_comments,
                
    'array_news' => $query_top->result_array()
            );
            return 
    $data;
        }
     
        function 
    latest_news() // Последние новости
        
    {
            
    $this->db->limit('5');
            
    $this->db->order_by('date''desc');
            
    $query_latest_news $this->db->get('news');
            
    $data = array(
                
    'array_latest_news' => $query_latest_news->result_array()
            );
        } 
    Есть контроллер, который вызывает данную модель и функции.
    PHP:
        public function index()/* Главная страница */
        
    {
            
    $this->load->model('Mnews');
            
    $data $this->Mnews->index();
            
    $this->parser->parse('news/main'$data);
        }
    Сам файл отображения:
    HTML:
                {array_news}
                        <!-- POST -->
                        <article class="post row">
                            <div class="media-box span3">
                                <img src="<?php echo base_url(); ?>template/img/blog/{img}.jpg" alt="blog-post">
                                <div class="mask">
                          <a href="{id}" class="ico link"></a>
                                    <h3 class="title">see full post</h3>
                                </div>
                            </div>
                       
                            <div class="span5">
                                <h2 class="post-title"><a href="<?php echo base_url(); ?>news/{category}/{id}">{title_news}</a><span class="category"><a href="#">{category}</a></span></h2>
                           
                                <div class="info">
                              <i>Автор:</i> <a href="#" class="author">{author}</a> <i>Дата:</i> <span class="date">{date}</span> <i>Комментарии:</i> <a href="#" class="comments">{count_comments}</a>
                                </div>
                           
                                <p>{short}</p>
                         
                                <div class="tags">
                              <i>Теги:</i> <a href="#">design</a>, <a href="#">thinking</a>, <a href="#">web</a>, <a href="#">html5</a>, <a href="#">css</a>
                                </div>
                            </div>
                        </article>
                        <!-- POST -->
    {/array_news}
                    {array_latest_news}
                        <div class="item">
                      <a href="<?php echo base_url(); ?>news/{category}/{id}" class="image-box"><img src="<?php echo base_url(); ?>template/img/blog/{img}.jpg" alt="blog-post"></a>
                            <div class="info">
                          <h4><a href="#">{title_news}</a></h4>
                          <p>{short}</p>
                            </div>
                        </div>
                        {/array_latest_news}
    
    Но возникает вопрос, как мне вызвать сразу две функции из модели. Вся проблема заключается в том, что используется Template Parser и я не могу сделать так:
    PHP:
        public function index()/* Главная страница */
        
    {
            
    $this->load->model('Mnews');
            
    $data['cto-to zdec'] = $this->Mnews->index();
            
    $data['cto-to zdec_2'] = $this->Mnews-> latest_news ();
            
    $this->parser->parse('news/main'$data);
        }
    Надеюсь, что Вы меня поняли. Заранее спасибо.
     
  2. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Не очень понял суть вопроса, но возможно нужно использовать текучие интерфейсы? http://ru.wikipedia.org/wiki/Fluent_interface

    Пример кода на PHP (из вышеприведенной ссылки) :

    PHP:
    class Car {
    private 
    $speed;
    private 
    $color;
    private 
    $doors;
     
    public function 
    setSpeed($speed){
    $this->speed $speed;
    return 
    $this;
    }
     
    public function 
    setColor($color) {
    $this->color $color;
    return 
    $this;
    }
     
    public function 
    setDoors($doors) {
    $this->doors $doors;
    return 
    $this;
    }
    }
     
    // Обычная реализация
    $myCar2 = new Car();
    $myCar2->setSpeed(100);
    $myCar2->setColor('blue');
    $myCar2->setDoors(5);
     
    // Текучий интерфейс
    $myCar = new Car();
    $myCar->setSpeed(100)->setColor('blue')->setDoors(5);
     
    VenderiGross нравится это.
  3. Andipas

    Andipas Постоялец

    Регистр.:
    5 дек 2007
    Сообщения:
    130
    Симпатии:
    92
    В метод latest_news() добавьте return $data;
     
    VenderiGross нравится это.
  4. VenderiGross

    VenderiGross Писатель

    Регистр.:
    29 окт 2011
    Сообщения:
    7
    Симпатии:
    0
    Суть проблемы в том, как вызвать сразу две функции из модели и через контроллер передать их результат работы во вьювер.
     
  5. Andipas

    Andipas Постоялец

    Регистр.:
    5 дек 2007
    Сообщения:
    130
    Симпатии:
    92
    Попробуйте так:
    PHP:
    public function index() /* Главная страница */
    {
    $this->load->model('Mnews');
    $index =  $this->Mnews->index();
    $latestNews $this->Mnews->latest_news();
    $this->parser->parse('news/main'array_merge($index$latestNews));
    }
     
     
    VenderiGross нравится это.