CodeIgniter - Отображение и ввод динамических метаданных - PullRequest
2 голосов
/ 21 июля 2011

Я начал использовать CodeIgniter ... Я нахожу это довольно хорошим, хотя у меня есть небольшая проблема.

Каков наилучший способ обработки метаданных? ... В папке представлений я создал еще одну папку с именем 'include', а затем там я добавил заголовки, нижний колонтитул, представления nav.

Итак, я понимаю, что для каждого контроллера необходимо ввести метаданные, а затем передать их в представление заголовка.

Если бы я мог привести примеры того, как вы все это делаете, это было бы замечательно.

Приветствия

Ответы [ 3 ]

1 голос
/ 25 марта 2015

Я знаю, что это устаревший вопрос, но в случае, если кто-то ищет простое решение для этого в 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);
  }
}
1 голос
/ 21 июля 2011

Создайте новый файл в вашей папке с библиотеками:

<?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 для загрузки с боковой панелью или без нее, разные верхние и нижние колонтитулы в зависимости от того, вошел ли пользователь в систему.

Надеюсь, это поможет, ура.

0 голосов
/ 22 июля 2011

Я считаю, что проще всего передать его прямо в заголовке страницы с массивами

    $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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...