usar tutorial paso para librerias libreria funciones español descargar como php codeigniter activerecord codeigniter-3

tutorial - manual php codeigniter



Cómo recuperar el título de un elemento de una base de datos y enviarlo a la plantilla de encabezado en CodeIgniter (13)

Controlador

$query = $this->Listing_model->get_card($card); var_dump($query); //Your $query may be some data got from db; $card_name = ""; if(!empty($query)){ $card_name = $query[0]->name; //You must verify the name attribute and it should in the $query result; } $header["page_title"] = $card_name;

Ver

<title><?php echo (!isset($page_title) ? '''' : $page_title) ?></title>

Estoy escribiendo una aplicación en CodeIgniter donde especifico la meta-etiqueta <title> en cada página en cada controlador que he podido enviar a mi plantilla de encabezado. Sin embargo, ahora he creado una aplicación que busca tarjetas de crédito y sus títulos de la base de datos, a través de un modelo CodeIgniter. Me gustaría buscar y usar automáticamente el nombre de la tarjeta de crédito en <title> para no tener que cambiarlo manualmente, pero estoy un poco atascado sobre cómo proceder.

Este es mi código a partir de ahora:

Controlador

public function show($card = NULL) { $data[''query''] = $this->Listing_model->get_card($card); $header["page_title"] = from the model $this->load->view(''includes/header'',$header); $this->load->view(''listings/listing_card'',$data); $this->load->view(''includes/footer''); }

Modelo

function get_card($card = FALSE) { $query = $this->db->get_where(''creditcards'', array(''slug'' => $card), 0,1); return $query->result(); }

He estado siguiendo la documentación oficial de CodeIgniter al crear esta aplicación, pero hasta ahora no tuve suerte. Alguna solución?


Crea un controlador base. La ubicación predeterminada para esto es application/core/MY_Controller.php => esto se puede cambiar a través de la configuración. Al usar $this->site_data puede agregar variables en su clase base y usarlas en cada control / vista

class MY_Controller extends CI_Controller { function __construct() { parent::__construct(); $this->load->database(); $this->load->model(''your model''); $result = $this->Listing_model->get_card($card); $this->site_data[''query'']=$result; $this->site_data_header["page_title"] = $result[''get the property you want''];//this is possible, as get_card returns 1 result } } class YourClass extends MY_Controller { function __construct() { parent::__construct(); } public function show($card = NULL) { //you don''t need to split the variables //for header and the rest $this->load->view(''includes/header'',$this->site_data_header); $this->load->view(''listings/listing_card'',$this->site_data); $this->load->view(''includes/footer''); } }

Y creo que tu get_where está mal:

$query = $this->db->get_where(''mytable'', array(''id'' => $id), $limit, $offset);

tu límite es 0

function get_card($card = FALSE) { $query = $this->db->get_where(''creditcards'', array(''slug'' => $card), 1,0);//limit 1 offset 0 return $query->result(); }

accede a los datos en tu vista

<title><?php echo (!isset($page_title) ? '''' : $page_title) ?></title>


En la vista de la tarjeta de listado, haz esto:

foreach ($query as $rec){ <title><?php echo $rec->title ?></title> }

reemplace ''título'' con el nombre de la columna en su base de datos que conserva el título de la tarjeta de crédito ... por lo que está pasando los resultados de la consulta que ejecutó en su controlador a esta vista, y luego usando un bucle foreach para mostrar datos de la tarjeta de crédito específica


En su modelo, no devuelva $query->result() , simplemente devuelva $query :

function get_card($card = FALSE) { $query = $this->db->get_where(''creditcards'', array(''slug'' => $card), 0,1); return $query; }

Controlador:

public function show($card = NULL) { // verify that you got something back from the database // or show an error if( ! $query = $this->Listing_model->get_card($card) ) { $this->_showNoResultsFor($card) ; } else { // get one record from the query using row() $onecard = $query->row() ; // assign the title using whatever your field name is called $header["page_title"] = $onecard->thetitle ; // Now assign the query result() to data $data[''query''] = $query->result() ; $this->load->view(''includes/header'',$header); $this->load->view(''listings/listing_card'',$data); $this->load->view(''includes/footer''); } }


Es posible que necesite crear algunas rutas para su función de programa. Codeigniter URI Routing

$route[''your_controller_name/show/(:any)''] = ''your_controller_name/show/$1'';

No estoy seguro si ha configurado un htaccess para su directorio principal para que pueda eliminar el index.php de su url.

Pruebe este código a continuación

Modelo:

<?php class Listing_model extends CI_Model { function get_card_title($card) { $this->db->where(''slug'', $card); $query = $this->db->get($this->db->dbprefix . ''creditcards''); if ($query->num_rows() > 0) { $row = $quer->row(); return $row->title; } else { return false; } } }

Controlador: Your_controller_name.php

<?php class Your_controller_name extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model(''listing_model''); } public function show($card) { $data[''title''] = $this->listing_model->get_card_title($card); $this->load->view(''includes/header'', $data); $this->load->view(''listings/listing_card'', $data); $this->load->view(''includes/footer''); } }

Ver:

<head> <title><?php echo $title;?></title> </head>


Prueba esto

  1. El modelo ha cambiado
  2. El controlador está cambiado.

En modelo

function get_card($card) { $query = $this->db->query("SELECT * FROM table_name WHERE creditcards = ''$card'' "); $result = $query->result_array(); $count = count($result); # New if(empty($count)){ # New return FALSE; } elseif($count > 1){ # New return 0; } else{ return $result; } }

En el controlador

public function show($card) { $result = $this->Listing_model->get_card($card); # Changed if($result == FALSE){ # New echo "No Data Found"; } elseif($result == 0){ # New echo "Multiple Data Found"; } else{ $data["page_title"] = $result[0][''field_name'']; # Changed $this->load->view(''includes/header'',$data); # Changed $this->load->view(''listings/listing_card'',$data); $this->load->view(''includes/footer''); } }

En vista

<?php echo (!empty($page_title)) ? $page_title : ''''; ?> # Changed


Prueba esto:

function get_card($card = FALSE) { $data = $this->db->get_where(''creditcards'', array(''slug'' => $card), 0,1)->result(); $data->title = $data[0]->title; return $data; }


Puede crear un Controlador base y Extender todo el otro controlador a ese controlador base.

Me gusta esto

<?php class MY_Controller extends CI_Controller { public $data = array(); function __construct() { parent::__construct(); $this->data[''errors''] = array(); $this->data[''site_name''] = config_item(''site_name''); } }

Luego en tu controlador

class Test extends MY_Controller { function __construct() { parent::__construct(); $this->data[''meta_title''] = ''Your Title''; } }

Y en tus visitas accedes al título de la página de esta manera:

echo("<title>.$site_name.</title>");


Puede usar la biblioteca de plantillas para mayor robustez y usar de la siguiente manera:

Controlador

$this->template->title(''Home :: '' . $this->data[''metadata''][''site_name'']) ->set_layout(''home_layout'') ->build(''listing_card'', $this->data);

Puntos de vista

<title><?php echo $template[''title'']; ?></title> <?php echo $template[''metadata'']; ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Referencia: https://github.com/philsturgeon/codeigniter-template


Solo para agregar otro, no hay razón para que esto no funcione:

$data[''query''] = $this->Listing_model->get_card($card); $this->load->view(''header'', array(''page_title'' => $data[''query''][0]->column_name)); //Will there only be one result? Consider returning $query->row(). Multiple, //loop through and set one title

En su opinión:

<title><?=isset($page_title) ? $page_title : "";?></title>

Si esto no funciona, su consulta no devuelve lo que cree que es.


Un simple ejemplo:

Controlador

$query = $this->Listing_model->get_card($card); $query = $query->row(); $header["page_title"] = $query->title;

Ver

<title><?php echo (!isset($page_title) ? '''' : $page_title) ?></title>


Controlador :

$data["page_title"] = $result[0][''title_field''];

ver: y solo necesita escribir en su archivo de encabezado como:

<title><?php echo $page_title; ?></title>


Controlador

$card_data= $this->Listing_model->get_card($card); //Your model returns an array of objects $header["page_title"] = $card_data[0]->title; //grab value of ''title'' property of first object returned from model. $this->load->view(''includes/header'',$header);

Ver

<title><?php echo (!isset($page_title) ? '''' : $page_title) ?></title>