CodeIgniter - 显示和输入动态元数据

时间:2011-07-21 16:53:41

标签: codeigniter

我已经开始使用CodeIgniter了...我发现它非常好,虽然我有点问题。

处理元数据的最佳方法是什么? ...在views文件夹中,我创建了另一个名为“includes”的文件夹,然后在那里添加了页眉,页脚,导航视图。

所以我认为每个控制器需要输入元数据,然后传递给标题视图。

如果我能得到一些关于你们如何解决这个问题的例子,那就太棒了。

干杯,

3 个答案:

答案 0 :(得分:1)

在您的库文件夹中创建一个新文件:

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

class View_lib {

  public function __construct()
  {
    $this->CI =& get_instance();
  }

  public function load_view($template, $data = NULL)
  {
    $this->CI->load->view('header', $data);
    $this->CI->load->view($template);
    $this->CI->load->view('footer');
  }

}

/* End of file view_lib.php */
/* Location: ./system/application/libraries/view_lib.php */

然后在控制器中加载此库:

$this->load->library('view_lib');

然后在这样的函数中调用您的视图文件:

$this->view_lib->load_view('name_of_view_file', $data);

或(如果您调用静态文件而没有任何数据要通过):

$this->view_lib->load_view('name_of_view_file');

有很多方法可以做到这一点,但是这个方法很好地适用于我正在处理的应用程序。在我的一个项目中,我在view_lib库中有多个函数可以加载或不加载侧边栏,不同的页眉和页脚取决于用户是否登录。

希望这会有所帮助,欢呼。

答案 1 :(得分:1)

我知道这是一个过时的问题,但是如果有人在Codeigniter 2.2中寻找一个简单的解决方案

我发现最简单的事情就是为此创建一个帮助器。

创建位于config / seo_config.php中的文件

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

$config['seo_title']  = 'My title';
$config['seo_desc']   = 'My description';
$config['seo_robot']  = true;

/* End of file seo_config.php */
/* Location: ./application/config/seo_config.php */

创建位于application / helers / seo_helper.php中的文件

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * SEO Helper function
 *
 * Generates Meta tags for SEO
 *
 * @author    Henrik Oldenborg
 * @version   1.0
 */

/**
 * meta_tags() 
 *
 * Generates tags for title, description and robots
 * Using title and description from config file as default
 *
 * @access  public
 * @param   string  Title
 * @param   string  Description (155 characters)
 * @param   bool    Robots follow or no folow
 */

if(! function_exists('meta_tags')){
  function meta_tags($meta)
  {
    $CI =& get_instance();
    $CI->config->load('seo_config');

    if(!isset($meta['title']))
      $meta['title'] = $CI->config->item('seo_title');

    if(!isset($meta['desc']))
      $meta['desc'] = $CI->config->item('seo_desc');

    if(!isset($meta['robot']))
      $meta['robot'] = $CI->config->item('seo_robot');

    $html = '';

    //uses default set in seo_config.php

    $html .= '<title>'.$meta['title'].'</title>';
    $html .= '<meta name="title" content="'.$meta['title'].'"/>';
    $html .= '<meta name="description" content="'.$meta['desc'].'"/>';
    if($meta['robot'] == true){
      $html .= '<meta name="robots" content="index,follow"/>';

    } else {
      $html .= '<meta name="robots" content="noindex,nofollow"/>';
    }
    echo $html;
  }
}

/* End of file seo_helper.php */
/* Location: ./application/helpers/seo_helper.php */

加载帮助程序 - (在控制器或config / autoload.php中)

$this->load->helper('seo_helper');

在视图中在两个标题标记之间添加以下代码

<?=(isset($meta) ? meta_tags($meta) : meta_tags());?>

现在,您需要做的只是在控制器中声明$ meta变量

$data['meta']['title'] = 'My special title';
$data['meta']['desc'] = 'My special description';
$this->load->view('mytemplate',$data)
  

有用的提示   您可能希望在控制器构造函数中声明元数据。这样,您可以在底层函数中轻松覆盖它,就像这样。

class Forum extends CI_Controller {

  private $data = array();

  function __construct()
  {
    $this->data['meta']['title'] = 'My forum title';
    $this->data['meta']['robot'] = false;
    parent::__construct();
  }

  public function index()
  {
    $this->data['content'] = 'forum';
    $this->load->view('userarea/template',$this->data);
  }

  public function topic($topic_id)
  {
    $this->data['meta']['title'] = 'My specific title';
    $this->data['content'] = 'topic';
    $this->load->view('userarea/template',$this->data);
  }
}

答案 2 :(得分:-1)

我发现在数组

的页面顶部传递它会更容易
    $meta = array(
    array('name' => 'description', 'content' => 'Political website, Liberal, progressive, blog, posts,'),
    array('name' => 'keywords', 'content' => 'politics, McCain, Beck, Hannity, Rush Limbaugh, Environment, Obama, ZB Block, Sarah Palin, Republicans, GOP, Democrats, Liberals, Conservatives, Reagan, Politicususa, FreakOut Nation, Raw Story, Congress, Senate, Representatives, Constitution, White, Black, racial, racsim, blog, blogging, Lemon, Lemonrose, Fox, Fox News,
    political, partys, president'),
    array('name' => 'Content-type', 'content' => 'text/html; charset=utf-8', 'type' => 'equiv'),       
    );
   echo meta($meta);