教程栏目

joomla中文网出品的官方教程

本节主要完成的任务就是在前台新建一个显示留言的菜单,并且点击后能够显示所有留言。逻辑很简单,在数据库查询得到数据,然后显示出来。利用MVC,就是C发出查询的命令,M去查询获取数据,V显示查询的数据。

 基本上算是复习前面所学了:

1,增加一个菜单选项。

     为了增加一个菜单选项,我们需要在组件的视图文件夹下views下新建一个新的视图文件夹showmessagelist。一个视图需要两部分,视图类 (view.html.php),视图布局(tmpl).在views下面新建文件夹tmpl ,新建文件view.html.php文件,然后在tmpl下新建default.php文件,default.xml文件。

default.xml文件就是告诉joomla这个视图可以作为菜单类型。

default.xml文件内容如下:

<?xml version="1.0" encoding ="utf-8"?>
<metadata>
    <layout title="显示留言页面">
        <message>
            该页面显示留言信息
        </message>
    </layout>
</metadata>

2,实现输出页面,也就是视图类将要用到的模版。

default.php文件内容如下:

<?php
//留言板提交留言界面
defined('_JEXEC') or die('你不能直接访问这个文件!');

//加载css文件
$document = &JFactory::getDocument();
$document ->addStyleSheet("components/com_guestbook/css/guestbook.css");
?>
<div class="gb_head">
    <span> 留言板组件v1.0  zmax99.com</span>
</div>
<div class="gb_page">
    <div class ="type postmessage">
        <span>显示留言</span>
    </div>
    <div class="gb_body">
        <div class="message_count" >
         你好,你一共有<?php echo count($this->messages);?>条留言。
        </div>
        
        <?php
            $count = 0;
            foreach ($this->messages as $message):
            $count++;
        ?>
         <div class="num">第<?php echo $count;?>条留言,内容如下:</div>
         <div class="message">
                <div class="title subject">主题:</div>
                <div class="input"><input type="text" value="<?php echo  $message->message_subject;?>" name="subject" size="40"/></div>
                
                <div class="line_nav"></div>
                
                <div class="title text">正文:</div>
                <div class="input"><textarea cols="70" rows="5" name="content" ><?php echo $message->message_content;?></textarea></div>
                
                <div class="line_nav"></div>
                
                <div class="title">作者:</div>
                <div class="input"><input type="text" name="author" size="40" value="<?php echo $message->message_author;?>" /></div>
                
                <div class="line_nav"></div>
                
                <div class="title">Email: </div>
                <div class="input"><input type="text" name="email" size="40" value="<?php echo $message->message_author_email;?>" /></div>
                
                <div class="line_nav"></div>
                
          </div>
          <div class="message_line_nav"></div>
        <?php endforeach;?>
    </div>
</div>

解释一下上面的代码:

1,$document->addStyleSheet();加载页面需要用到的css文件。在前面的章节中已经讲过。

2,最难理解的是$this->messages.首先this值的是视图类,其次,messages是我们从视图类注入到模版的数据。如果对这个地方有疑问,请注意视图类的代码。

3,视图类的实现

  view.html.php文件的内容如下:

// 禁止直接访问这个文件
defined('_JEXEC') or die ('you can not access this file!');

jimport('joomla.application.component.view');

/**
 * Guestbook组件的 显示所有留言页面
 */
class GuestBookViewShowMessageList extends JView
{
	
	function __construct()
	{
		parent::__construct();
	}
	
	//$tpl决定显示的是哪一个模版
	function display($tpl = null)
	{
	    //得到 messages
		$messages = & $this->get("Messages");
		
		// 注入数据到视图模版
		$this->assignRef('messages',$messages);
		
		parent::display($tpl);
	}
}

上面的代码比较简洁,它主要完成两件事,从模型层获取数据,将获取的数据注入到模版中。$this->get("Messages").这个函数会指定和视图类同名的模型类中的getMessages方法。利用get方法从模型类获取数据。$this->assignRef('messages',$messages)将数据注入到模版,在模版中我们可以直接用$this->messages来代替$messages。

4,模型类的实现

 因为要添加模型,在models目录下增加一个文件showmessagelist.php

showmessagelist.php文件内容如下:

 
defined('_JEXEC') or die ('Restricted Access');

//导入JModel类的实现文件
jimport('joomla.application.component.model');

class GuestbookModelShowMessageList extends JModel
{
	/**
	 * 从数据库中读取数据
	 *
	 * @access  publice
	 * @return messages 
	 */
	 function getMessages()
	 {
	    $db = & JFactory::getDBO();
		
		$query = $db->getQuery(true);
		
		$query->select("*")->from( $db->nameQuote('#__guestbook') );
		$db->setQuery( (string)$query );
		
		$messages = $db->loadObjectList();
		
		
		 return $messages;
	 }
}

在这里我们看到了getMessages方法的实现。其原理非常简单,查询数据然后返回结果。

控制器就无需改变了。

5,修改css文件:

.gb_head {
    color: #DCDC84;
    font-family: 宋体;
    font-size: 20px;
    font-weight: bolder;
    margin: 14px 0;
}

.type {
    color: #4D4D88;
    font-size: 17px;
    font-weight: bolder;
}

.gb_page {
    padding-left: 15px;
}

.gb_body  input:focus{
    border: solid 1px #888ddd;
}

.title {
    color: #626262;
    float:left;
}


.line_nav {
    margin: 10px 0;
}

.message_count {
    border: 1px solid #DEDEDE;
    color: #AD9217;
    font-size: 17px;
    padding: 10px;
}

.num {
    color: #2E8B57;
    padding: 15px 0;
}

.message {
    border: 1px outset #DEDEDE;
    padding: 20px;
}

.message_line_nav {
    background: none repeat scroll 0 0 #DEDEDE;
    height: 10px;
    width: 100%;
}

到此,我们就完成了显示所有留言的功能。

下面是一个截图;

本节到此结束。

如果对执行流程有疑惑,请阅读上一节。

 

  

 

评论 (0)

  • 最新在前
  • 最佳在前

第1章 Joomla入门教程

第3章 C计划

第5章 E计划

第6章 H计划

第7章 G计划

第9章 运行环境

第11章 主从与集群

第12章 模块开发

第13章 插件开发

第14章 j2.x组件开发教程

第15章 页面定制教程

第16章 页面构造器

第17章 joomla升级