<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>4's symfony blog &#187; 模板</title>
	<atom:link href="http://www.foolbirds.com/t/%e6%a8%a1%e6%9d%bf/feed" rel="self" type="application/rss+xml" />
	<link>http://www.foolbirds.com</link>
	<description>all about symfony</description>
	<lastBuildDate>Fri, 14 Oct 2011 12:36:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>symfony1.2的后台(generate-admin)模板结构</title>
		<link>http://www.foolbirds.com/generate-admin-templates-structure.html</link>
		<comments>http://www.foolbirds.com/generate-admin-templates-structure.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 09:24:43 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[后台]]></category>
		<category><![CDATA[模板]]></category>
		<category><![CDATA[结构]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=722</guid>
		<description><![CDATA[这里所指的后台模块是指由propel:generate-admin生成的后台管理模块，在symfony中可以自动生成一套强大的管理后台，并且可以订制或者重写模块中的动作或者模板，这里我们简单介绍一下模板的组成结构。
比如我们要给Test对象生成一套管理后台，那么我们使用命令
./symfony propel:generate-admin backend Test --module=test
然后我们访问backend/test, 这样你会看到一个自动生成的管理页面, 其程序在cache/app_name/env_name/modules/autoMudule/ 目录下. 我们这里主要分析模板目录templates, symfony1.2生成了以下的模板
indexSuccess.php # 列表页
_assets.php # 载入样式和脚本
_flashes.php # 消息框
_list_header.php # 页首
_list.php # 列表
_list_td_stacked.php
_list_th_stacked.php
_list_th_tabular.php # 列标题
_list_td_batch_actions.php # 复选框
_list_td_tabular.php # 一条记录
_list_field_boolean.php # boolean类型的表示方式
_list_td_actions.php # 对象操作
_list_batch_actions.php # 批量操作
_pagination.php # 分页条
_list_actions.php # 操作, 新建等
_filters.php # 过滤器
_filters_field.php # 过滤器中的一项
_list_footer.php # 页尾
newSuccess.php # 新建页
editSuccess.php # 编辑页和新建页用了同一种结构
_assets.php # 载入样式和脚本
_flashes.php # 消息框
_form.php # 表单
_form_fieldset.php # 一组表单项
_form_field.php [...]]]></description>
			<content:encoded><![CDATA[<p>这里所指的后台模块是指由propel:generate-admin生成的后台管理模块，在symfony中可以自动生成一套强大的管理后台，并且可以订制或者重写模块中的动作或者模板，这里我们简单介绍一下模板的组成结构。</p>
<p>比如我们要给Test对象生成一套管理后台，那么我们使用命令</p>
<p><code>./symfony propel:generate-admin backend Test --module=test</code></p>
<p>然后我们访问backend/test, 这样你会看到一个自动生成的管理页面, 其程序在cache/app_name/env_name/modules/autoMudule/ 目录下. 我们这里主要分析模板目录templates, symfony1.2生成了以下的模板</p>
<blockquote><p>indexSuccess.php # 列表页</p>
<p style="padding-left: 30px;">_assets.php # 载入样式和脚本<br />
_flashes.php # 消息框<br />
_list_header.php # 页首<br />
_list.php # 列表</p>
<p style="padding-left: 60px;">_list_td_stacked.php<br />
_list_th_stacked.php<br />
_list_th_tabular.php # 列标题<br />
_list_td_batch_actions.php # 复选框<br />
_list_td_tabular.php # 一条记录</p>
<p style="padding-left: 90px;">_list_field_boolean.php # boolean类型的表示方式</p>
<p style="padding-left: 60px;">_list_td_actions.php # 对象操作</p>
<p style="padding-left: 30px;">_list_batch_actions.php # 批量操作</p>
<p style="padding-left: 30px;">_pagination.php # 分页条<br />
_list_actions.php # 操作, 新建等<br />
_filters.php # 过滤器</p>
<p style="padding-left: 60px;">_filters_field.php # 过滤器中的一项</p>
<p style="padding-left: 30px;">_list_footer.php # 页尾</p>
<p>newSuccess.php # 新建页<br />
editSuccess.php # 编辑页和新建页用了同一种结构</p>
<p style="padding-left: 30px;">_assets.php # 载入样式和脚本<br />
_flashes.php # 消息框<br />
_form.php # 表单</p>
<p style="padding-left: 60px;">_form_fieldset.php # 一组表单项</p>
<p style="padding-left: 90px;">_form_field.php # 一个表单项</p>
<p style="padding-left: 30px;">_form_actions.php # 操作, 提交, 取消等<br />
_form_footer.php # 页尾</p>
<p style="padding-left: 30px;">
</blockquote>
<p>上面的缩进代表了调用关系, 为了更直观的表现出模板的结构, 做了下面两个图片</p>
<p>图1, 列表页的组成</p>
<p><img class="aligncenter size-full wp-image-723" title="index" src="http://www.foolbirds.com/wp-content/uploads/2009/04/index.png" alt="index" width="808" height="456" /></p>
<p>图2, 新建和修改页的结构</p>
<p><img class="aligncenter size-full wp-image-724" title="new" src="http://www.foolbirds.com/wp-content/uploads/2009/04/new.png" alt="new" width="555" height="377" /></p>
<p>本文完.</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/use_symfony_filter_to_filteredurl.html" title="使用symfony filter 过滤URL">使用symfony filter 过滤URL</a></li><li><a href="http://www.foolbirds.com/%e4%bb%bfsymfony%e6%9c%ba%e5%88%b6%e5%ae%9e%e7%8e%b0%e4%b8%8d%e7%94%a8require%e6%88%96%e8%80%85include%e6%9d%a5%e5%ae%9e%e4%be%8b%e5%8c%96%e7%b1%bb.html" title="仿symfony机制实现不用require或者include来实例化类">仿symfony机制实现不用require或者include来实例化类</a></li><li><a href="http://www.foolbirds.com/use-datetime-in-php5-1-x-with-symfony.html" title="symfony1.4 DateTime对于PHP低版本的兼容问题">symfony1.4 DateTime对于PHP低版本的兼容问题</a></li><li><a href="http://www.foolbirds.com/%e5%a6%82%e4%bd%95%e5%9c%a8fixtures-yml%e5%86%99%e5%be%aa%e7%8e%af%e6%b7%bb%e5%8a%a0%e6%95%b0%e6%8d%ae.html" title="如何在fixtures.yml写循环添加数据">如何在fixtures.yml写循环添加数据</a></li><li><a href="http://www.foolbirds.com/symfony-1-4-database-utf8.html" title="symfony 1.4 数据库 utf8设置">symfony 1.4 数据库 utf8设置</a></li><li><a href="http://www.foolbirds.com/symfony-cheat-sheet.html" title="symfony cheat sheet">symfony cheat sheet</a></li><li><a href="http://www.foolbirds.com/cheat-sheets.html" title="Cheat Sheets!">Cheat Sheets!</a></li><li><a href="http://www.foolbirds.com/how-to-use-swift-to-send-mail-in-symfon.html" title="如何使用swift发送邮件">如何使用swift发送邮件</a></li><li><a href="http://www.foolbirds.com/batch-in-symfony12.html" title="symfony1.2下的命令行程序(batch)">symfony1.2下的命令行程序(batch)</a></li><li><a href="http://www.foolbirds.com/wideimage-in-symfony.html" title="在Symfony中使用第三方图片处理工具WideImage">在Symfony中使用第三方图片处理工具WideImage</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/generate-admin-templates-structure.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在admin generator中加入复杂的自定义列</title>
		<link>http://www.foolbirds.com/admin-generator-list-display.html</link>
		<comments>http://www.foolbirds.com/admin-generator-list-display.html#comments</comments>
		<pubDate>Wed, 24 Dec 2008 04:56:49 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[模板]]></category>
		<category><![CDATA[组件]]></category>

		<guid isPermaLink="false">http://symfony.bobhero.net/?p=220</guid>
		<description><![CDATA[在admin generator的list动作中， 我们可能希望在列表上加入自定义的列， symfony 1.2直接或间接的为我们提供了一些方法.

插入一个字段(field)
插入一个&#8221;虚拟字段&#8221;
插入局部模板(partial)
插入组件(component)

在generator.yml中, 我们可以修改list动作中列表显示的数据.
// 请将"."替换成" "
list:
..sort: [id, asc]
..display: [id, =name, _partial, ~component]
..max_per_page: 10
..object_actions:
....first_action:
......label: "first action"
......action: first
......params: class=className
...._edit: -
...._delete: -
sort项是list的动作的默认排序方式, display是行表行中要显示的基本数据, object_actions定义可以对该对象执行的操作.
这里我们重点讲解display, display定义要在list行中显示的对象属性或者自定义内容, 其元素可以是以&#8221;_&#8221;开头的局部模板名, 也可以是以&#8221;~&#8221;开头的组件名, 或者是一个字段名, 字段名前面也可以以&#8221;=&#8221;开头, 表示该字段是一个指向编辑页面的链接.
我们所说的字段名, 其实并不是真正意义上的数据库字段, 而是对象中的getter方法, 也就是说, 我们要显示在list中的字段, 并不一定要在数据库中真是存在.
下面看一个例子:
__ schema.yml __
propel:
..shop:
....__attributes: { phpName: Shop }
....id:
....name:         { type: varchar(60), required:true }
__ generator.yml __
list:
..sort: [...]]]></description>
			<content:encoded><![CDATA[<p>在admin generator的list动作中， 我们可能希望在列表上加入自定义的列， symfony 1.2直接或间接的为我们提供了一些方法.</p>
<ol>
<li>插入一个字段(field)</li>
<li>插入一个&#8221;虚拟字段&#8221;</li>
<li>插入局部模板(partial)</li>
<li>插入组件(component)</li>
</ol>
<p>在generator.yml中, 我们可以修改list动作中列表显示的数据.</p>
<pre name="code" class="php">// 请将"."替换成" "
list:
..sort: [id, asc]
..display: [id, =name, _partial, ~component]
..max_per_page: 10
..object_actions:
....first_action:
......label: "first action"
......action: first
......params: class=className
...._edit: -
...._delete: -</pre>
<p>sort项是list的动作的默认排序方式, display是行表行中要显示的基本数据, object_actions定义可以对该对象执行的操作.</p>
<p>这里我们重点讲解display, display定义要在list行中显示的对象属性或者自定义内容, 其元素可以是以&#8221;_&#8221;开头的局部模板名, 也可以是以&#8221;~&#8221;开头的组件名, 或者是一个字段名, 字段名前面也可以以&#8221;=&#8221;开头, 表示该字段是一个指向编辑页面的链接.</p>
<p>我们所说的字段名, 其实并不是真正意义上的数据库字段, 而是对象中的getter方法, 也就是说, 我们要显示在list中的字段, 并不一定要在数据库中真是存在.</p>
<p>下面看一个例子:</p>
<p>__ schema.yml __</p>
<pre name="code" class="php">propel:
..shop:
....__attributes: { phpName: Shop }
....id:
....name:         { type: varchar(60), required:true }</pre>
<p>__ generator.yml __</p>
<pre name="code" class="php">list:
..sort: [id, asc]
..display: [id, =name, description]
..max_per_page: 10
..object_actions:
...._edit: -
...._delete: -</pre>
<p>在generator.yml的list动作的display项中, description字段是在数据库中并不存在的, 所以我们要在shop对象中添加如下方法:</p>
<p>__ /lib/model/Shop.php __</p>
<pre name="code" class="php">// 被注释掉的代码是标准的getter和setter应该有的部分, 但并不是我们例子中必须的.
public function getDescription()
{
//  return $this-&gt;description;
return "some description";
}

//public function setDescription($value)
//{
//  $this-&gt;description = $value;
//}</pre>
<p>这样, 我们就在shop/list的每一行都加了一个内容为&#8221;some description&#8221;的列.</p>
<p>可能很多人象bobhero一样, 不想去创建一个模板, 其实我也不想, 但我更不想多写很多代码, 因为我比较懒, 所以我使用了下面的方法来实现和上面一样的功能.</p>
<p>__ generator.yml __</p>
<pre name="code" class="php">list:
..sort: [id, asc]
..display: [id, =name, ~description]
..max_per_page: 10
..object_actions:
...._edit: -
...._delete: -</pre>
<p>~description, 前面说过以&#8221;~&#8221;开头的元素是一个组件, 那么我们建立下面的组件.</p>
<pre name="code" class="php">__ /apps/app/modules/shop/actions/components.class.php __

&lt;?php
class shopComponents extends sfComponents
{
public function executeDescription(sfWebRequest $request)
{
echo "some description";
return sfView::NONE;// 这句为了使组件不调用模板, 因为组件和动作一样, 会自动调用相应的模板.
}
}</pre>
<p>虽然上面的方法都达到了相同的效果, 但实际上还是有很大区别的, 组件更适合用于复杂的逻辑处理, 而getter却显得很吃力.</p>
<p>有了描述之后, 可能我们还想给商店加个图标, 我们可以使用局部模板来实现, 修改generator.yml如下.</p>
<p>__ generator.yml __</p>
<pre name="code" class="php">list:
..sort: [id, asc]
..display: [_logo, id, =name, description]
..max_per_page: 10
..object_actions:
...._edit: -
...._delete: -</pre>
<p>之后我们创建模板/apps/app/modules/shop/templates/_logo.php</p>
<p>__ /apps/app/modules/shop/templates/_logo.php __</p>
<pre name="code" class="php">&lt;?php echo img_tag($shop-&gt;getId().".gif");?&gt;</pre>
<p>这样我们在每列的id前面加入了一个以id命名的gif图片, 当然图片是要上传的, 至于如何上传图片不在本文的讨论范围之内, 可以搜索本站的其他文章.</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="symfony1.2的后台(generate-admin)模板结构">symfony1.2的后台(generate-admin)模板结构</a></li><li><a href="http://www.foolbirds.com/partial-and-layout.html" title="局部模板和全局模板">局部模板和全局模板</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/admin-generator-list-display.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>局部模板和全局模板</title>
		<link>http://www.foolbirds.com/partial-and-layout.html</link>
		<comments>http://www.foolbirds.com/partial-and-layout.html#comments</comments>
		<pubDate>Tue, 16 Dec 2008 02:47:11 +0000</pubDate>
		<dc:creator>zhuozi</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://symfony.bobhero.net/?p=50</guid>
		<description><![CDATA[1.全局模板 放在 myproject/appa/myapp/templates/ 下面
   在apps/myapp/config/view.yml  指定layout 就可以了
2.局部模板  放在myapp/module/mymodule/templates/下面
   文件名以_开头  e.g. _name
    在视图页面 用  进行引用
3.如果局部模板想要直接使用全局变量，在全局模板里面需要把参数传给局部模板
symfony1.2的后台(generate-admin)模板结构在admin generator中加入复杂的自定义列]]></description>
			<content:encoded><![CDATA[<p>1.全局模板 放在 myproject/appa/myapp/templates/ 下面<br />
   在apps/myapp/config/view.yml  指定layout 就可以了<br />
2.局部模板  放在myapp/module/mymodule/templates/下面<br />
   文件名以_开头  e.g. _name<br />
    在视图页面 用 <?php include_partial('name') ?> 进行引用<br />
3.如果局部模板想要直接使用全局变量，在全局模板里面需要把参数传给局部模板</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/generate-admin-templates-structure.html" title="symfony1.2的后台(generate-admin)模板结构">symfony1.2的后台(generate-admin)模板结构</a></li><li><a href="http://www.foolbirds.com/admin-generator-list-display.html" title="在admin generator中加入复杂的自定义列">在admin generator中加入复杂的自定义列</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/partial-and-layout.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

