$route['default_controller'] = "main_page";
$route['scaffolding_trigger'] = "";
$dir = opendir (APPPATH.'controllers');
while ($file = readdir ($dir))
{
$ipos = strpos($file, '.php');
if ($ipos!=0) {
$module = substr($file, 0, $ipos);
$route[$module] = $module;
$route[$module.'/(.*)'] = $module.'/$1';
}
}
closedir ($dir);
$route['admin'] = "admin";
$route['admin/(.+)'] = "admin/$1";
$route['(\S+)'] = 'page404';
$route['(\S+)/(.+)'] = 'page404/$1';$CI->uri->segment(1)
pirrat писал(а):вот мне интересно мнение Сообщества по такому (сзвязанному с темой) вопросу!
есть такое понятие во многих CMS как блоки, т.е. это какой то кусок кода, который выводит определенную информацию, и может быть как на всех так и на нескольких млм даже одной странице сайты...
Чисто с точки зрения MVC и CI в частности, как такие блоки(куски кода) лучше оформить по ваему мнению?
как варианты вижу, -
1)в контроллерах создавать метод, который потом будет вызываться в других контроллерах или на прямую из отображения(как это сделано в HMVC)
2)ввести новое понятие в систему как blocks, они будут лежать как отдельные файлы и представлять собой одну функцию,и так же как и контроллеры они будут брать инфу из моделей и передавать их во VIEW, а из контроллеров мы уже их будем вызывать там где нам надо!
3)в каждом контроллере писать код блока
Как вы делаете и как считаете наиболее правильным?
мне кажется 2 вариант!

function SetBlocks ($blocks) {
if (!is_array($blocks)) {
show_error('аргумент должен быть массивом');
}
foreach ($blocks as $block => $model) {
$this->load->model($model);
$data_model = array();
if (method_exists($this->$model, $block)) {
$data_model = $this->$model->$block();
}
$this->parser->setGlobal('block_'.$block, $this->parser->parse('block_'.$block, $data_model, TRUE ));
}
} $this->SetBlocks(array(
'b3' => 'test_model',
'b2' => 'test_model'
)); {block_b3}
{block_b2}

$this->parser->setGlobal('block_'.$block, $this->parser->parse('block_'.$block, $data_model, TRUE ));
<?
if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Parser extends CI_Parser
{
/**
* Enter description here...
*
* @var unknown_type
*/
private $layout = 'main';
/**
* Enter description here...
*
* @var unknown_type
*/
private $theme;
/**
* Enter description here...
*
* @var unknown_type
*/
private $layoutVars = array();
/**
* Enter description here...
*
* @return MY_Parser
*/
function MY_Parser()
{
}
/**
* Enter description here...
*
* @param unknown_type $template
* @param unknown_type $data
* @param unknown_type $return
* @return unknown
*/
public function parse($template, $data = array(), $return = FALSE)
{
$CI =&get_instance();
$template=$CI->load->view($this->theme . $template, $data, TRUE);
if ( $template == '' )
{
return FALSE;
}
// $template=$this->_parseBlock($template);
foreach ( $data as $key => $val )
{
if ( is_array($val) )
{
$template = $this->_parse_pair($key, $val, $template);
} else
{
$template = $this->_parse_single($key, (string)$val, $template);
}
}
if ( $return == FALSE )
{
$CI->output->final_output = $template;
}
return $template;
}
/**
* Enter description here...
*
* @param unknown_type $template
* @param unknown_type $data
*/
public function render($template = '', $data = array())
{
$t=$this->getGlobal('content');
if(empty($t))$this->setGlobal('content', '');
if(!empty($template)) $this->setGlobal('content', $this->parse($template, $data, true));
$this->parse($this->layout, $this->layoutVars);
}
/**
* Enter description here...
*
* @param unknown_type $userthemes
*/
public function setTheme($userthemes)
{
$this->theme = $userthemes . '/';
}
/**
* Enter description here...
*
* @param unknown_type $template
*/
public function setLayout($template)
{
$this->layout = $template;
}
/**
* Enter description here...
*
* @param unknown_type $varName
* @param unknown_type $value
*/
public function setGlobal($varName, $value)
{
$this->layoutVars[$varName] = $value;
}
public function getGlobal($varName)
{
return @$this->layoutVars[$varName];
}
}
?>Tovit писал(а):умеет. Это другой подход к HMVC.
$this->view->set('content', $content);
$this->view->render('blogcnt');
// или через $this->view->SetGlobal('content', ??????? );
Вернуться в Общие вопросы по фреймворку
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2