CodeIgniter: Passaggio di Argomenti da Vista Controller?
EDIT: Con il codice qui sotto ora, non ho le idee chiare su come stampare i segnalibri e i tag correttamente
Io sono completamente nuovo al CI e mi hanno recentemente colpito un blocco stradale. Io sono molto incerto su come effettuare il passaggio di un argomento di una funzione da visualizzare file per il controller in modo da poter utilizzare su una funzione?
Ho un ciclo foreach nella visualizzazione di passare attraverso tutti gli elementi passati dalla funzione get_latest_bookmarks. Che la funzione restituisce un ID per ogni elemento e sto volendo utilizzare questo con un’altra funzione chiamata get_bookmark_tags che otterrà il tag del segnalibro da un’altra tabella. Ho fornito il codice che ho fatto finora seguito.
Modello:
<?php
class Bookmark_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function get_latest_bookmarks($limit)
{
//Load Database
$this->load->database();
//Query Database
$query = $this->db->get('Bookmark', $limit);
//Return Result
return $query;
}
function get_bookmark_tags($id)
{
//Load Database
$this->load->database();
$query = $this->db->query('SELECT Tag.Title
FROM `Tag`
INNER JOIN BookmarkTag
WHERE BookmarkTag.BookmarkID = "'.$id.'" AND Tag.TagID = BookmarkTag.TagID');
return $query;
}
Controller:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
//Load URL Helper
$this->load->helper('url');
//Load User Library
$this->load->library('ion_auth');
//Is User Logged In
if ($this->ion_auth->logged_in())
{
$data['user'] = $this->ion_auth->get_user_array();
}
else
{
redirect('auth/login');
}
//Load Bookmark Model
$this->load->model('Bookmark_model');
//Create Arrays
$bookmarks = array();
$tags = array();
//Query Database
$query = $this->Bookmark_model->get_latest_bookmarks(4);
//
foreach ($query->result() as $row) {
array_push($tags, $this->Bookmark_model->get_bookmark_tags($row->BookmarkID));
array_push($bookmarks, $row);
}
$data['tags_latest'] = $tags;
$data['bookmarks_latest'] = $bookmarks;
$this->load->view('welcome_message', $data);
}
}
Vista:
<h1>Latest Bookmarks</h1>
<?php foreach ($bookmarks_latest as $bookmark): ?>
<?php print_r($bookmark); ?>
<?php print_r($tags_latest->result()); ?>
<?php endforeach; ?>
- ci può essere un modo per fare questo, ma i dati si suppone che il flusso dal controller per la vista e non l’altro senso intorno.
- Qualcuno potrebbe rispondere come passare l’argomento da vista controller per esempio scrivendo questo in vista non funzionano
<?=form_open("Welcome/bookmark_tags($id)";?>
se $id parametro è un array, poi come faremo a passare
Si dovrebbe fare in un Controllore prima di passare i dati alla Vista.
Provare con qualcosa di simile a questo:
$data['query'] = $bookmarks;
prima di caricare la vista, se si desidera.print_r($tags);
eprint_r($bookmarks);
ora nel vostro punto di vista. E si può loop attraverso di loro.Non.
Punto nell’utilizzo di un Framework è quello di default di standard appropriati. CodeIgniter segue un sciolto pattern MVC, ma non si dovrebbe mai passare le cose da vista per il controller.
Si può fare, ma se lo fai sarai sempre in un pasticcio di spaghetti piuttosto presto.
Afferrare l’ID del controller. Anche se implica l’esecuzione di loop stesso due volte. Ti ringrazio te stesso.