Пользовательский помощник Codeigniter


0

Hello В настоящее время я только что разработал способ загрузки своих представлений в массив, но это длинный путь ввода.

Как лучше всего создать хелпер-файл/функцию, которая позволила бы мне по-прежнему вводить заголовок и нижний колонтитул и т. Д., А также выбирать виды, но без ввода полной длины в контроллере.

В настоящее время я должен ввести этот путь

работает этот путь, чтобы долго, хотя

$this->children = array(
    'header' => $this->load->view('theme/default/template/common/header.tpl'), 
    'column_left' => $this->load->view('theme/default/template/common/column_left.tpl'), 
    'column_right' => $this->load->view('theme/default/template/common/column_right.tpl'), 
    'content_top' => $this->load->view('theme/default/template/common/content_top.tpl'), 
    'content_bottom' => $this->load->view('theme/default/template/common/content_bottom.tpl'), 
    'footer' => $this->load->view('theme/default/template/common/footer.tpl') 

);

$this->load->view('theme/default/template/common/home.tpl' , $this->children); 

Мне нужен хелпер-файл, который я могу назвать так в контроллере, все, что у меня есть, это ввести. Это просто делает его легче, если я не поставить полное имя вида в том, где помощник придет в

public function index() { 

    $this->load->helper('template'); "This is the name I have chosen" 

    $this->children = array(
    'header', 
    'column_left', 
    'column_right', 
    'content_top', 
    'content_bottom', 
    'footer' 
    ); 

    $this->load->view('theme/default/template/common/home.tpl' , $this->children); 

} 
+1

, пожалуйста, лучшие варианты - перейти к концепции hmvc, так как время загрузки для этого метода будет увеличиваться каким-либо образом, если вы это сделаете, проверьте функцию hmvc. 19 янв. 142014-01-19 16:07:37

  0

У меня есть использование hmvc, а не то, что я сожалею 19 янв. 142014-01-19 16:09:55

  0

Я не понял? 19 янв. 142014-01-19 16:11:58

  0

Я использовал hmvc в прошлом не то, что я сейчас. Пытаясь установить мой шаблон/тему-кодировщик так же, как открытая корзина, но они используют собственный механизм шаблонов. 19 янв. 142014-01-19 16:17:49

0

Я думаю, что это должно работать:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

if (! function_exists('final_view')) 
{ 
    //$data - CI custom $data (from controller to views) 
    //$views - an array with your children views 
    function final_view($data, $views = array()) 
    { 
     $CI =& get_instance(); 
     //Include each views 
     foreach($views as $view) 
     { 
      $CI->load->view('theme/default/template/common/'.$view.'.tpl'); 
     } 

     //Include the main view tpl and the custom CI $data 
     $CI->load->view('theme/default/template/common/home.tpl', $data); 
    } 
} 

EDIT: Как сказал tomexsans, Я добавил экземпляр CI.

  0

это выкинет ошибку, используя это, когда не в контексте объекта или что-то в этом роде. хелпер не связан с основным контроллером, поэтому вы не можете просто называть '$ this', исправьте меня, если я ошибаюсь/ 19 янв. 142014-01-19 14:24:32

  0

, но я все же хотел бы иметь возможность вызвать заголовок массива $ this-> children и т. д. в контроллере. 19 янв. 142014-01-19 14:30:12

  0

Пожалуйста, объясните, где 19 янв. 142014-01-19 14:38:34

  0

Где вы их скорректировали. Но вы оставили его там в течение 15 минут с синтаксисом и логическими ошибками и другими удобствами (например, неправильное имя функции) 19 янв. 142014-01-19 14:40:50

  0

Я только что создал контроллеры для каждого из других заголовков, нижних колонтитулов, столбцов, столбцов, столбцов, content_top, content_bottom. И включили там файл вида в контроллер. Как бы я сделал так, чтобы сыворотка я набирал массив, как указано выше, он подберет контроллер. 20 янв. 142014-01-20 08:12:12

  0

То, что вы просите, звучит как HMVC, а не MVC. Если вы хотите загрузить заголовок контроллера, потому что есть вид заголовка + контроллер FOO, потому что есть просмотр foo, а затем перейдите на HMVC, вы не сможете сделать это в MVC, если вы не продлеваете Codeigniter [см. Здесь] (https: // www .google.fr/search? q = HMVC + codeigniter & ie = utf-8 & oe = utf-8 & rls = org.mozilla: fr: official & client = firefox-a & channel = fflb & gws_rd = cr & ei = JaDeUtvwBoeK1AXG4YHgAg), или вы также можете использовать другие фреймворки, построенные на CodeIgniter с родной HMVC: Kohana и PHPixies 21 янв. 142014-01-21 16:29:15


0

Это не рекомендуется использовать помощника, так как вы будете нуждаться в core функции, просто создать новое ядро ​​и расширять каждый контроллер с ним

, то вы можете сделать что-то КакЭто (пока не проверял), но это будет динамический, предоставляя вам всегда использовать header,column_left,column_right,content_top,content_bottom,footer комбинации на код

//param 1 is the config of the view 
// param 2 is the data to be passed on the view 
function final_view($view,$data) 
{ 

    //set all path views 
    $header['with_stars'] = 'path to view'; 
    $header['without_bg'] = 'path to view'; 
    $header['big_title'] = 'path to view'; 

    $column_left['black'] = 'path to view'; 
    $column_left['blue'] = 'path to view'; 
    $column_left['red'] = 'path to view'; 


    $column_right['big_right'] = 'path to view'; 
    $column_right['small_right'] = 'path to view'; 

    $content_top['big_blue_top'] = 'path to view'; 
    $content_top['small_red_top'] = 'path to view'; 


    $content_bottom['no_title'] = 'path to view'; 
    $content_bottom['with_title'] = 'path to view'; 


    $footer['with_copyright'] = 'path to view'; 
    $footer['with_big_date'] = 'path to view'; 


    //combine in one array 
    $glue = [ 
     'header' => $this->load->view($header[$view[0]]), 
     'column_left' => $this->load->view($column_left[$view[1]]), 
     'column_right' => $this->load->view($column_right[$view[2]]), 
     'content_top' => $this->load->view($content_top[$view[3]]), 
     'content_bottom' => $this->load->view($content_bottom[$view[4]]), 
     'footer' => $this->load->view($footer[$view[5]]), 
     'data' => $data 
    ]; 
    // you could do other stuff here before loading the view 
    $this->load->view('path_to_view',$glue); 
} 

Вместо загрузки взглядов вы можете просто сделать это

//header,column_left,column_right,content_top,content_bottom,footer 
$view = array('with_stars','black','big_right','big_blue_top','with_title','with_big_date'); 
$data['somedata'] = 'data as string'; 
$data['somedata2'] = array('data as string','some array'); 

// you could do other stuff here before loading the view 
$this->final_view($view,$data); 
  0

с моим массивом, как и я. Я пытаюсь сделать его похожим на открытую настройку корзины.Там есть система шаблонов. Другие двигатели шаблонов codeignign не то, что мне нужно. 19 янв. 142014-01-19 15:44:25