2011-03-16 62 views
12

我是Joomla的新手,我想知道Joomla控制器如何将数据传递给模型,模型以控制器和控制器来查看。虽然这可能是一个愚蠢的问题,但我真的试图找到答案。我希望我能从stackoverflow系列获得一些帮助。Joomla模型视图控制器(MVC)如何工作?

+0

顺便说一句MVC代表模型视图控制器 – Martin 2011-04-19 08:32:01

回答

29

控制器拾取在url视图变量和使用这些确定哪个视图需要被使用。然后它设置要使用的视图。该视图然后调用模型来获取它所需的数据,然后将其传递给tmpl以进行显示。

下面是这一切是如何一起工作进行简单的设置:

组件/ com_test/Controller.php这样

class TestController extends JController 
{ 

    // default view 
    function display() { 
    // gets the variable some_var if it was posted or passed view GET. 
    $var = JRequest::getVar('some_var'); 
    // sets the view to someview.html.php 
    $view = & $this->getView('someview', 'html'); 
    // sets the template to someview.php 
    $viewLayout = JRequest::getVar('tmpl', 'someviewtmpl'); 
    // assigns the right model (someview.php) to the view 
    if ($model = & $this->getModel('someview')) $view->setModel($model, true); 
    // tell the view which tmpl to use 
    $view->setLayout($viewLayout); 
    // go off to the view and call the displaySomeView() method, also pass in $var variable 
    $view->displaySomeView($var); 
    } 

} 

组件/ com_test /视图/ someview/view.html.php

class EatViewSomeView extends JView 
{ 

    function displaySomeView($var) { 
    // fetch the model assigned to this view by the controller 
    $model = $this->getModel(); 
    // use the model to get the data we want to use on the frontend tmpl 
    $data = $model->getSomeInfo($var); 
    // assign model results to view tmpl 
    $this->assignRef('data', $data); 
    // call the parent class constructor in order to display the tmpl 
    parent::display(); 
    } 

} 

组件/ com_test /模型/ someview.php

class EatModelSomeView extends JModel 
{ 

    // fetch the info from the database 
    function getSomeInfo($var) { 
    // get the database object 
    $db = $this->getDBO(); 
    // run this query 
    $db->setQuery(" 
     SELECT 
     * 
     FROM #__some_table 
     WHERE column=$var 
    "); 
    // return the results as an array of objects which represent each row in the results set from mysql select 
    return $db->loadObjectList(); 
    } 

} 

组件/ com_test /视图/ someview/TMPL/someviewtmpl.php

// loop through the results passed to us in the tmpl 
foreach($this->data as $data) { 
    // each step here is a row and we can access the data in this row for each column by 
    // using $data->[col_name] where [col_name] is the name of the column you have in your db 
    echo $data->column_name; 
} 
+0

controller.php'$ var = JRequest :: getVar('some_var');',它从哪里得到'some_var'?它来自编码的网址吗? – Plummer 2012-11-27 17:15:29

+1

'index.php?option = com_test&view = someview&some_var = 1234' – Martin 2012-11-30 07:49:08

+0

所以。 Joomla是与模型交互以获取数据的视图吗? – Nobita 2014-02-07 23:28:24

2

查看本网站的详细教程,了解如何使用Joomla的MVC制作组件和模块。希望它有助于

https://docs.joomla.org/Developing_a_MVC_Component

+1

死链接......可能不是当你发布所以没有降票时。 – araisbec 2014-02-18 14:29:05

+3

每当你连接到其他地方时,请张贴链接的回顾。 – 2014-07-24 16:19:06

相关问题