如何创建一个MVC模式的Joomla组件教程(十四) - 创建管理员界面 增加管理功能
直到目前为止,管理界面没有什么实际用户,除了显示数据。我们需要增加一些按钮和链接,从而能执行管理功能。
The Toolbar
toolbar是Joomla组件管理控制面板的顶部。这个组件同样也需要一个,在Joomla中这是非常简单的。现在来增加按钮来处理添加,修改,删除记录,还需要增加一个toolbar上的标题。
以下的代码就可以添加按钮了,为添加按钮,我们使用了Joomla的 JToolBarHelper 静态类。
JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' );
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
以上的三个方法创建了三个按钮,deleteList()有三个可选参数,一是提示用户确认删除的字符串,二是请求中需要发送的task,默认是remove,三是显示在删除按钮下边的文字。
editListX()和addNewX()方法有两个参数,一是task(默认的是edit和add),二是按钮下显示的文字。
请注意JText::_ 方法,这是一个处理多语言的方便的函数,这个寻找你语言文件中对应的字符串,并返回转换后的字符串,如果没有找到字符串,将直接返回传递给JText::_的字符串。如果你要翻译你的组件,你要做的工作就是创建一个语言文件,这个语言文件包含字符串的map集合。
复选框和链接
按钮现在有了,可是修改和删除是要针对已存在的记录。但是需要用户选择那些记录需要进行这些操作。因此,我们在模板中添加了复选框。我们在表格中添加额外的一列。在这一个列的表头中,我们添加了一个复选框,这个复选框用来选中和清除所有复选框的装提案。
<th width="20">
<input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->items ); ?>);" />
</th>
Joomla的Javascript包含了一个函数checkAll,这里我们使用了这个函数。
接下来需要给每一行添加一个复选框,Joomla的JHTML类有一个函数JHTML::_(),以下就是代码:
$checked = JHTML::_( 'grid.id', $i, $row->id );
$row =& $this->items[$i];
<td>
<?php echo $checked; ?>
</td>
需要需要修改记录的时候,先选中复选框,然后再点击上边的edit按钮,这样的操作比较繁琐,因此,我们要添加一个链接,直接进入编辑界面。
以下是代码:
$link = JRoute::_( 'index.php?option=com_hello>controller=hello>task=edit>cid[]='. $row->id );
<td>
<a href="/<?php echo $link; ?>"><?php echo $row->greeting; ?></a>
</td>
值得注意的是,链接中的controller指向hello controller,这个controller处理数据操作。
在返回看以下form,其中有四个隐藏的输入域。第一个是option,这是是进入component必须的,第二是task,对应这toolbar上的按钮操作,如果没有这个字段,javascript将报错,从而操作失败。第三个字段是boxchecked,主要是有多少复选框被选中,edit和delete按钮操作会检查这个字段不小于0,最后一个是controller,这个输入决定采用那个controller.
以下是模板 default.php 的代码清单:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="index.php" method="post" name="adminForm">
<div id="editcell">
<table class="adminlist">
<thead>
<tr>
<th width="5">
<?php echo JText::_( 'ID' ); ?>
</th>
<th>
<?php echo JText::_( 'Greeting' ); ?>
</th>
</tr>
</thead>
<?php
$k = 0;
for ($i=0, $n=count( $this->items ); $i < $n; $i++)
{
$row =& $this->items[$i];
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $row->id; ?>
</td>
<td>
<?php echo $row->greeting; ?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
</div>
<input type="hidden" name="option" value="com_hello" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="controller" value="hello" />
</form>
现在hellos view完成了,去试试吧。