点击【编辑按钮】---这个在数据列表助手里面helperlist
/**
* Display edit action link
*/
public function displayEditLink($token = null, $id, $name = null)
{
$tpl = $this->createTemplate('list_action_edit.tpl');
if (!array_key_exists('Edit', self::$cache_lang))
self::$cache_lang['Edit'] = $this->l('Edit', 'Helper');
$tpl->assign(array(
'href' => $this->currentIndex.'&'.$this->identifier.'='.
$id.'&update'.$this->table.($this->page && $this->page > 1 ?
'&page='.(int)$this->page : '').'&token='.($token != null ? $token : $this->token),
'action' => self::$cache_lang['Edit'],
'id' => $id
));
return $tpl->fetch();
}
进入编辑页面
==============================
===第二步====
在后台控制器admincontroller
/** @var string|false Object identifier inside the associated table */
protected $identifier = false; 如:id_a9c
构造器中赋值
if (!$this->identifier) $this->identifier = 'id_'.$this->table;
在后台页面控制器的构造器中赋值
$this->table = 'a9c';
initProcess();根据get或post过来的值,调用控制器中的相应方法进行处理。
如:增加,修改,删除,批量处理,导入导出等,有自己的规范????????
elseif (isset($_GET['update'.$this->table]) && isset($_GET[$this->identifier]))
$this->display = 'edit';
========第三部==
initContent() ,
if ($this->display == 'edit' || $this->display == 'add')
{
if (!$this->loadObject(true))
return;
// ddd("商品分类组合。。。。");
$this->content .= $this->renderForm(); //* Function used to render the form for this controller
进入商品编辑页面
$this->fields_form = array(array('form' => $this->fields_form));
====第四部==================
调用表格助手
$helper = new HelperForm($this);
$this->setHelperDisplay($helper);
$form = $helper->generateForm($this->fields_form);
其中, /** @var array Edit form to be generated */
protected $fields_form;//在页面控制器设置参数
/** @var array of forms fields */
protected $fields_form = array();//这个是在HelperForm中定义的数组变量
generate()方法中:
switch ($params['type'])
{
case 'categories':
case 'file':
case 'color':
case 'date':
case 'textarea':
case 'shop11'://
case 'shop22'://
case 'shop' :
}
这里之前已经修改了助手,增加了shop11,shop22。其实最好是override 重写助手。
框架是支持的,但不必要特意的重构。
现在想法是以后修改到这些代码的时候,在进行refactor重构了,然后测试。
若以后的需求不用修改这些代码,那就直接用,不必一定重构。
这样,应该是一个比较现实的思考。
项目进度,代码可读性(维护),
代码性能,代码的灵活性(模块化)等要综合性的考虑。
===第5步,模板=====
helperform构造器 __construct中,指定smarty默认模板及路径
$this->base_folder = 'helpers/form/';
$this->base_tpl = 'form.tpl';
array(
'type' => 'text',
'label' => $this->l('会员编号'),
'name' => 'id_customer',
'required' => false,
),
$input.type == 'hidden' radio shop text tags textbutton swap
select switch textarea checkbox change-password
password birthday group shop11 shop22 categories
file categories_select asso_shop color date datetime
free html
{if isset($input.html_content)}
{$input.html_content}
{else}
{$input.name}
{/if}
===============后台编辑页面 start
--------------------------
数据呈现
1. 相关控制器
2. initcontent方法 编辑,添加 进入 renderform,查看 进入 renderview
3. renderform 参数数组 ,相应字段 ,类型、标签 、名字
4. 调用上级 控制器相应的方法 ,
5. 生成 HelperForm对象
6. 此对象中的 方法 generateForm处理3中的参数
7. generate具体处理,
8. 得到参数类型,(这个类型在哪里设置需要确定????????)
这个参数与下面的模板对应
/o2o/admin1568/themes/default/templatehelpers/helpers/form/form.tpl中
{elseif $input.type == 'shop'}
<span style="display:none">{$input.html}</span>
9. 在对应的类型后 ,可根据 名字加入区分要调用的功能函数(动作)
10. 功能函数 调用(商品分类,店铺,语言等,其中语言还需以后验证是否这样)的树形结构
11. 调用这个树形结构的render,设置树的参数,调用上级树
12. 用这个树形结构指定的模板中呈现数据
数据绑定
1. 相关控制器的上级控制器中add,update方法中增加调用的方法名称
2. 该方法中调用 实体类中的方法 ,init()对要绑定的数据表进行设置,进行数据绑定
3. 12所指定的模板中相应所选框的名字
注: 编辑模板中的action与模板,hook之间的关系可以参考
features中的form模板,中间测试用的<h1>标签
目前给注释了,测试的时候可以打开
这个hook可以认为是模板中的占位符号
===============end========