??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲最大福利视频网站,亚洲小说图区综合在线,国产成人综合亚洲一区http://www.tkk7.com/cph8066/category/33393.html天将降大M是h也!zh-cnTue, 29 Jul 2008 06:28:27 GMTTue, 29 Jul 2008 06:28:27 GMT60谈FleaPHP中的表关联!http://www.tkk7.com/cph8066/archive/2008/07/29/218391.html姜大?/dc:creator>姜大?/author>Tue, 29 Jul 2008 06:02:00 GMThttp://www.tkk7.com/cph8066/archive/2008/07/29/218391.htmlhttp://www.tkk7.com/cph8066/comments/218391.htmlhttp://www.tkk7.com/cph8066/archive/2008/07/29/218391.html#Feedback0http://www.tkk7.com/cph8066/comments/commentRss/218391.htmlhttp://www.tkk7.com/cph8066/services/trackbacks/218391.html
在FleaPHP中,支持以下四种兌关系Q?br />          
      * HAS_ONE
      * HAS_MANY
      * MANY_TO_MANY
      * BELONGS_TO
         
分别对应FLEA_Db_TableDataGateway表中?$hasOne,$hasMany,$manyToMany,$belongsTo 属?br />
我们下面q 老师Q学生,学生案Q班U的例子说说q几个关pR?br />
以下是SQL代码Q?br />
 1 //学生?br />  2 Create TABLE `testDB`.`student` (
 3   `stu_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
 4   `stu_name` VARCHAR(20NOT NULL,
 5   `stu_class_id` INTEGER UNSIGNED NOT NULL,
 6   PRIMARY KEY (`stu_id`)
 7 )
 8 
 9 //学生案?br /> 10 Create TABLE `testDB`.`stu_record` (
11   `record_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
12   `stu_id` INTEGER UNSIGNED NOT NULL,
13   `family_add` VARCHAR(150NULL,
14   `family_tel` VARCHAR(20NULL,
15   PRIMARY KEY (`record_id`)
16 )
17 
18 //教师?br /> 19 Create TABLE `testDB`.`teacher` (
20   `teacher_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
21   `teacher_name` VARCHAR(20NOT NULL,
22   PRIMARY KEY (`teacher_id`)
23 )
24 
25 //班?br /> 26 Create TABLE `testDB`.`classes` (
27   `class_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
28   `class_name` VARCHAR(20NOT NULL,
29   PRIMARY KEY (`class_id`)
30 )
31 
32 //׃教师与班U是多对多关p,所有徏立一个中间连接表以表C兌
33 Create TABLE `testDB`.`link_teacher_classes` (
34   `link_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
35   `teacher_id` INTEGER UNSIGNED NOT NULL,
36   `class_id` INTEGER UNSIGNED NOT NULL,
37   PRIMARY KEY (`link_id`)
38 )


现在Q徏好表之后Q我们还要写几个l承自FLEA_Db_TableDataGateway父类的类Q以对应数据库中的StudentQTeacherQClasses表(q接表不用了Q如下:
 1 //学生表对应的c?/span>
 2 class Model_Student extends FLEA_Db_TableDataGateway{
 3         var $tableName = 'student';
 4         var $primaryKey = 'stu_id';
 5        
 6         /*
 7            q是一对一关系Q一个学生对应唯一的一个Record案
 8            tableClass 对应要与之关联一对一的表的对象类Q即案表的c?br />  9            foreignKey是在案表中Q对应学生表的一个外键接q字D,
10            用该字段标识该档案属于哪个学?br /> 11            mappingName 是用于在你查询学生信息Ӟ学生档案字段的别?br /> 12         */
13         var $hasOne = array(
14                     'tableClass' => 'Model_Record',
15                     'foreignKey' => 'stu_id',
16                     'mappingName' => 'record'
17         );
18         /*
19            q是从属关系Q一个学生属于某一个班U,换过来说是班与学生一对多Q?br /> 20            一个班U有多个学生Q而学生就只属于一个班U?br /> 21            tableClass 指定该类要与之有从属关系的类Q这里是班c?br /> 22            foreignKey q里指定的是该表里的q接外表的字D,q里是学生表的班UID字段
23            注意Q这里的foreignKey指的是本表的字段Q而上面hasOne关系中的foreignKey
24            指的是外表中的字D,要注意区分清?br /> 25            mappingNameq里׃多说了,跟上面的一P也是用于昄区分的别?br /> 26         */
27         var $belongsTo = array(
28                 array(
29             'tableClass' => 'Model_Classes',
30             'foreignKey' => 'stu_class_id',
31             'mappingName' => 'class'
32         )
33         );
34 }
35 
36 //案表对应的c?/span>
37 class Model_Record extends FLEA_Db_TableDataGateway{
38         var $tableName = 'stu_record';
39         var $primaryKey = 'record_id';
40 }
41 
42 //教师表对应的c?/span>
43 class Model_Teacher extends FLEA_Db_TableDataGateway{
44         var $tableName = 'teacher';
45         var $primaryKey = 'teacher_id';
46 
47         /*
48            q里立了教师与班的多对多关系Q一个教师可以教多个班
49            而一个班U也有多个教?br /> 50            tableClass 指定要徏立多对多关系的表的类
51            joinTable q个属性要注意一个,q个是指定教师表与班U表关系的连接表
52            ׃二维表的数据l构的原因,所以多对多关系要用一个中间表Q即q接表)来表C?br /> 53            q接表中指明两个表各自的主键ID可以了Q以两个字段作复合主键,如不用复?br /> 54            主键Q就新增加一个字D作主键也可Q这没关p?br /> 55         */
56         var $manyToMany = array(
57                 array(
58             'tableClass' => 'Model_Classes',
59             'mappingName' => 'class',
60             'joinTable' => 'link_teacher_classes',
61         )
62         );
63 }
64 
65 class Model_Classes extends FLEA_Db_TableDataGateway{
66         var $tableName = 'classes';
67         var $primaryKey = 'class_id';
68 
69         /*
70             q里立了班U与学生的一对多关系
71             tableClass 指定该表的类要与哪个表的cd立一对多关系
72             foreignKey 外键IDQ这里即指定学生表中定义的班UIDQ这个是外表的字D?br /> 73         */
74         var $hasMany = array(
75                 array(
76             'tableClass' => 'Model_Student',
77             'foreignKey' => 'stu_class_id',
78             'mappingName' => 'students'
79         )
80         );
81 
82         var $manyToMany = array(
83         // ׃多对多关pL双向的,所以班U表也可以定义上与教师表的多对多关系
84         // 也可以不写,看需求而定Q比如你x看某个班U信息时Q一q显C?br /> 85         // 有多个任课老师的话Q那在q个班c里加上关系Q我q里׃写了。。?/span>
86         );
87 }


以上的代码就建立好了关系了,现在只管使用是了?br /> 不过q提醒大家一点,在每个关p里Q都有一?‘enabled’ 的属性,如果讄?false的话Q则是将该关pȝ掉,所以查询出来的l果没有该关系的相应数据,q样可以节省效率Q按需要时才打开相应的关联,该属性默认ؓtrue 可以如下讄Q?br />
1 array(
2     'tableClass' => 'Model_Student',
3     'foreignKey' => 'stu_class_id',
4     'mappingName' => 'students',
5     ‘enabled’ => false
6 )


现在我们来测试一下数据。(事先自行插入几行数据用以试Q?br />
1 $classManager = FLEA::getSingleton('Model_Classes');
2 $class =& $classManager->find(array('class_id' => 1));
3 dump($class);


出现l果如下Q?br />

q个例子已含盖了q四个关联关pȝ基本用法了,其它的就׃们来探烦了,不久后,我将会发表一下这此关联方面的高应用Q有旉的话会写写这斚w的东ѝ敬h待!




]]>
FleaPHP初哥报到(2)Q-用户注册与显C?/title><link>http://www.tkk7.com/cph8066/archive/2008/07/29/218387.html</link><dc:creator>姜大?/dc:creator><author>姜大?/author><pubDate>Tue, 29 Jul 2008 05:58:00 GMT</pubDate><guid>http://www.tkk7.com/cph8066/archive/2008/07/29/218387.html</guid><wfw:comment>http://www.tkk7.com/cph8066/comments/218387.html</wfw:comment><comments>http://www.tkk7.com/cph8066/archive/2008/07/29/218387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cph8066/comments/commentRss/218387.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cph8066/services/trackbacks/218387.html</trackback:ping><description><![CDATA[      q篇文章是接着上一,在上一的基础上加了用h册功能,注册成功后显C用户信息,׃旉关系Q没有详l研I实C么功能例子用于教学,本来我也只是FleaPHP初学者,所以,虽然例子十分的傻瓜式单,但就当是我在学FleaPHP时的快速练习吧?br />       q里只实C个注册功能,有经验的应该闭上眼睛都能做出来了Q所以我q里的只是演CZ下FleaPHP的大概操作流E的Q也是它的l构都是差不多,我在之前W一的那个Model_Userc里Q加了几个方法:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;">1</span> <span style="color: #000000;">    </span><span style="color: #008000;">//</span><span style="color: #008000;">d一个新用户</span><span style="color: #008000;"><br /> </span><span style="color: #008080;">2</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> addNewUser(</span><span style="color: #800080;">$user</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">3</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #800080;">$this</span><span style="color: #000000;">-></span><span style="color: #000000;">_tbUser</span><span style="color: #000000;">-></span><span style="color: #000000;">create(</span><span style="color: #800080;">$user</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">4</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">5</span> <span style="color: #000000;">    </span><span style="color: #008000;">//</span><span style="color: #008000;">用主键加载一个用?/span><span style="color: #008000;"><br /> </span><span style="color: #008080;">6</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> loadUser(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">7</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #800080;">$this</span><span style="color: #000000;">-></span><span style="color: #000000;">_tbUser</span><span style="color: #000000;">-></span><span style="color: #000000;">find(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">8</span> <span style="color: #000000;">    }</span></div> <br /> <br /> q在Default.php里,也就是在Default的Controller里加了一个action与一个方法函敎ͼ<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> actionRegister(){<br /> </span><span style="color: #008080;"> 2</span> <span style="color: #000000;">        </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Model_User;<br /> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;">        </span><span style="color: #800080;">$username</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;">        </span><span style="color: #800080;">$password</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br /> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        </span><span style="color: #800080;">$password2</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">password2</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br /> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;">       <br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #008080;">strlen</span><span style="color: #000000;">(</span><span style="color: #800080;">$username</span><span style="color: #000000;">) </span><span style="color: #000000;"><</span><span style="color: #000000;"> </span><span style="color: #000000;">6</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">用户名要?-10位!</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">10</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">11</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;">12</span> <span style="color: #000000;">       <br /> </span><span style="color: #008080;">13</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$password</span><span style="color: #000000;"> </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #800080;">$password2</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">14</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">你输入的密码不一_请重新输入!</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">15</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">16</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">17</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;">18</span> <span style="color: #000000;">       <br /> </span><span style="color: #008080;">19</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #008080;">strlen</span><span style="color: #000000;">(</span><span style="color: #800080;">$password</span><span style="color: #000000;">) </span><span style="color: #000000;"><</span><span style="color: #000000;"> </span><span style="color: #000000;">6</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">20</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">密码要求6-10位!</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">21</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">22</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">23</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;">24</span> <span style="color: #000000;">       <br /> </span><span style="color: #008080;">25</span> <span style="color: #000000;">        </span><span style="color: #800080;">$user</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br /> </span><span style="color: #008080;">26</span> <span style="color: #000000;">                    </span><span style="color: #000000;">'</span><span style="color: #000000;">name</span><span style="color: #000000;">'</span><span style="color: #000000;">         </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #800080;">$username</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;">27</span> <span style="color: #000000;">                    </span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">     </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #800080;">$password</span><span style="color: #000000;"><br /> </span><span style="color: #008080;">28</span> <span style="color: #000000;">                );<br /> </span><span style="color: #008080;">29</span> <span style="color: #000000;">        </span><span style="color: #800080;">$newUserId</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-></span><span style="color: #000000;">addNewUser(</span><span style="color: #800080;">$user</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">30</span> <span style="color: #000000;">       <br /> </span><span style="color: #008080;">31</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$newUserId</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">32</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">注册成功Q?/span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">33</span> <span style="color: #000000;">            </span><span style="color: #800080;">$this</span><span style="color: #000000;">-></span><span style="color: #000000;">showinfo(</span><span style="color: #800080;">$newUserId</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">34</span> <span style="color: #000000;">        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br /> </span><span style="color: #008080;">35</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">出现错误Q注册失败!</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">36</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/error.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">37</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;">38</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">39</span> <span style="color: #000000;">   <br /> </span><span style="color: #008080;">40</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> showinfo(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">){<br /> </span><span style="color: #008080;">41</span> <span style="color: #000000;">        </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Model_User;<br /> </span><span style="color: #008080;">42</span> <span style="color: #000000;">        </span><span style="color: #800080;">$user</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-></span><span style="color: #000000;">loadUser(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">43</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/userinfo.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">44</span> <span style="color: #000000;">    }</span></div> <br /> <br /> q都很直观了Q大家注意的是流E的控制与{U,如果是开发小目的话Q这可能q会觉得ȝQ但当项目稍大时Q程序结构将会很直观Q控制流E很清淅?br /> <br /> 之后在View文g多w加了register.php  error.php{View文gQ也主要是Html的,应尽量把逻辑代码与UI代码分开Q这里只是初入门,q点会介绍与Smarty模板技术结合用的文章?br /> <br /> 最l源码下载:[down=attachments/month_0710/k20071016235619.rar]点击下蝲此文件[/down]<br /> <br /> <br /> <img src ="http://www.tkk7.com/cph8066/aggbug/218387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cph8066/" target="_blank">姜大?/a> 2008-07-29 13:58 <a href="http://www.tkk7.com/cph8066/archive/2008/07/29/218387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FleaPHP初哥报到(1)Q-单登?/title><link>http://www.tkk7.com/cph8066/archive/2008/07/29/218386.html</link><dc:creator>姜大?/dc:creator><author>姜大?/author><pubDate>Tue, 29 Jul 2008 05:57:00 GMT</pubDate><guid>http://www.tkk7.com/cph8066/archive/2008/07/29/218386.html</guid><wfw:comment>http://www.tkk7.com/cph8066/comments/218386.html</wfw:comment><comments>http://www.tkk7.com/cph8066/archive/2008/07/29/218386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cph8066/comments/commentRss/218386.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cph8066/services/trackbacks/218386.html</trackback:ping><description><![CDATA[      ׃忙,很少旉学学 FleaPHP 框架Q不q之前也看了看学了点东西Q感觉FleaPHP框架q是很不错的Q有良好的MVC模式l构Q比较方便的数据库操作,好东西不敢独享,所以献上我在学习FleaPHP中的一点小心得Q适合初接?FleaPHP 框架的同学,PHP基础不太好的话,先补习一下PHP再看看这pd的文章?br />       本例子是我刚学FleaPHP框架时的练习,一步一步@序渐q,刚开始的例子昑־比较单,都只是熟习他的环境而已Q不q我采用增量开发的模式Q慢慢完善深入,同学们记得专心上堂哦Q做好功译֓。(文章的末ְ提供完整源代码打包,׃幅有限Q所以文章中贴出来的代码有的只是片段Q?br />       q篇是我?FleaPHP 学习W记的开,做的是一个简单的d功能Q牛刀试吧,认大家认识一?FleaPHP 的MVCl构与基本数据库操作Q如果是?FleaPHP q不知道是什么东西的话,可以C下网站了解了解?a title="fleaphp.org" >fleaphp.org</a><br /> <br /> 数据库准备:数据库里只有一个表  tb_user   里面有三个字D,id Qname Qpassword 够简单吧[smile]<br /> <br /> 我的q个FleaPHP应用的目录结构如下:<br /> <img alt="" src="http://www.tkk7.com/images/blogjava_net/cph8066/h20071010223143.jpg" width="88" height="73" /><br /> <br /> 图中可以看到׃个index.php主页文gQ一个app与一个FLEA文g夹,因ؓFleaPHP是采用单一入口框架Q所以就只有一个index.php文gQ所以的h都经p个文件再q行分类分发Q这样可以提高代码的安全性,可以程序其它文件放|到URL讉K不到的地方,在index.php里引用该路径可以了。不q有点要注意的是文g的\径的正确性?br /> app文g夹就是我的程序代码放|的地方Q里面有ControllerQModelQViewQTable文g夹,Controller文g多w是FleaPHP的命名约定的Q最好用这L命名Q因Z跟据h到该文g夹中扄对应的类文g的,好,我们先来看看index.php的代码:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #000000;"><?</span><span style="color: #000000;">php<br /> </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">./FLEA/FLEA.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">import(</span><span style="color: #008080;">dirname</span><span style="color: #000000;">(</span><span style="color: #ff00ff;">__FILE__</span><span style="color: #000000;">)</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">/app</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;"><br /> </span><span style="color: #008080;"> 5</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 准备数据库连接信?/span><span style="color: #008000;"><br /> </span><span style="color: #008080;"> 6</span> <span style="color: #800080;">$dsn</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">    </span><span style="color: #000000;">'</span><span style="color: #000000;">driver</span><span style="color: #000000;">'</span><span style="color: #000000;">        </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">mysql</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    </span><span style="color: #000000;">'</span><span style="color: #000000;">host</span><span style="color: #000000;">'</span><span style="color: #000000;">          </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">localhost</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    </span><span style="color: #000000;">'</span><span style="color: #000000;">login</span><span style="color: #000000;">'</span><span style="color: #000000;">         </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">root</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;">10</span> <span style="color: #000000;">    </span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">      </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">root</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;">11</span> <span style="color: #000000;">    </span><span style="color: #000000;">'</span><span style="color: #000000;">database</span><span style="color: #000000;">'</span><span style="color: #000000;">      </span><span style="color: #000000;">=></span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">test</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br /> </span><span style="color: #008080;">12</span> <span style="color: #000000;">);<br /> </span><span style="color: #008080;">13</span> <span style="color: #000000;"><br /> </span><span style="color: #008080;">14</span> <span style="color: #000000;">set_app_inf(</span><span style="color: #000000;">'</span><span style="color: #000000;">dbDSN</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #800080;">$dsn</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">15</span> <span style="color: #000000;"><br /> </span><span style="color: #008080;">16</span> <span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">runMVC();<br /> </span><span style="color: #008080;">17</span> <span style="color: #000000;">?></span></div> <br /> <br />       p么个三四行代码,E序启动了Q呵呵,不过后面q有呢。。?br /> 先来解析一下,W一句是 require("./FLEA/FLEA.php"); 是要先导入FleaPHP的核心引擎,所以之前大家看C有个FLEA文g夹,是FLEA的核心引擎啦Q这个大家先不用它Q等到要研究他的源代码时再看吧,qx的用就看看提供的API文够了?br />       同学们注意了QFLEA::import(dirname(__FILE__)."/app"); q句的作用是什么?q个import函数是FLEA的静态函敎ͼ用于你的程序文件夹导入q来Q如果有玩过Java的同学应该知道多吧Q当FleaPHP接收C个请求时Q会分析URL再调用相对的Controller和ActionQ?br /> 如:http://localhost/fleatest/index.php?controller=Shop&action=checkout q里卌用Shop控制器里面的checkout动作Q而FleaPHP怎么知道我的控制器代码放在哪里呢Q就是靠importq个语句了,程序文件夹导入q来之后QFleaPHP会自dq个文g多w找Controller文g夹再找Shop.phpq个cLӞ所以,如果你ؓ了安全v见,程序文件夹攑֜了其它访问不到的地方Q就得靠q个import来导入,以FleaPHP能正找到所需要的Controller。(可能说得啰嗦了[redface]Q打字篏了,烧根烟先Q同学们息片刻Q)<br /> <br /> 接下?dsnq个数组是存放你连接数据库的信息啦Q聪明的同学一眼看出来了。之后当然要讄入FleaPHP配置里面啦,用这个set_app_inf('dbDSN',$dsn);Q之后,FLEA::runMVC(); q个是启动了。我们输入的URL?http://localhost/fleatest/index.phpQ由于FleaPHP默认的Controller是DefaultQ默认的Action是IndexQ所以,q时QFleaPHP׃跛_app/Controller/Default.phpq个面来,代码如下Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #000000;"><?</span><span style="color: #000000;">php<br /> </span><span style="color: #008080;"> 2</span> <span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">loadClass(</span><span style="color: #000000;">"</span><span style="color: #000000;">Model_User</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;"> 3</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Controller_Default<br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;">{<br /> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> actionIndex(){<br /> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">   <br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> actionLogin(){<br /> </span><span style="color: #008080;">10</span> <span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">新徏一个对应user数据表操作的Model对象</span><span style="color: #008000;"><br /> </span><span style="color: #008080;">11</span> <span style="color: #000000;">        </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Model_User;<br /> </span><span style="color: #008080;">12</span> <span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">Ҏ(gu)用户输入的用户名查找数据库有没有存在</span><span style="color: #008000;"><br /> </span><span style="color: #008080;">13</span> <span style="color: #000000;">        </span><span style="color: #800080;">$result</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-></span><span style="color: #000000;">findByName(</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">username</span><span style="color: #000000;">'</span><span style="color: #000000;">]);<br /> </span><span style="color: #008080;">14</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #0000ff;">empty</span><span style="color: #000000;">(</span><span style="color: #800080;">$result</span><span style="color: #000000;">)){<br /> </span><span style="color: #008080;">15</span> <span style="color: #000000;">            </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">该用户不存在Q?/span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">16</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);       <br /> </span><span style="color: #008080;">17</span> <span style="color: #000000;">        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br /> </span><span style="color: #008080;">18</span> <span style="color: #000000;">            </span><span style="color: #008000;">//</span><span style="color: #008000;">判断密码是否相同</span><span style="color: #008000;"><br /> </span><span style="color: #008080;">19</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$result</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">] </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">]){<br /> </span><span style="color: #008080;">20</span> <span style="color: #000000;">                </span><span style="color: #800080;">$username</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$result</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">name</span><span style="color: #000000;">'</span><span style="color: #000000;">];<br /> </span><span style="color: #008080;">21</span> <span style="color: #000000;">                </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/welcome.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">22</span> <span style="color: #000000;">            }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br /> </span><span style="color: #008080;">23</span> <span style="color: #000000;">                </span><span style="color: #800080;">$message</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">'</span><span style="color: #000000;">密码不正,请重新输入!</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">24</span> <span style="color: #000000;">                </span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">25</span> <span style="color: #000000;">            }<br /> </span><span style="color: #008080;">26</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;">27</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">28</span> <span style="color: #000000;">}<br /> </span><span style="color: #008080;">29</span> <span style="color: #000000;">?></span></div> <br /> <br />       Z么类名是 Controller_Default Q这都是FleaPHP的命名规则,大家可以d|看看它的命名规则,q里׃多啰嗦了。现在,它将会调用actionIndex的默认action函数Q里面只引入了一个php文gQ那是d界面的页面?br /> <br />       在登录界面的Form里,讄好action提交路径Q它提交到Default控制器的Login动作QactionQ,里面实例化了一个Model对象Q该对象是封装了对表tb_user的操作,之后E序逻辑是跟据d成功与否来进行相应的信息表示啦,单的实现了从Controller -> Model -> View 的MVC讉K操作程?br /> 大概的结构就q么单了?br /> <br /> 最后符上源代码Q[down=attachments/month_0710/520071010232245.rar]点击下蝲此文件[/down]<br /> <br /> 大家如果有什么疑问,可以留言或发到我邮箱里!<br /> <br /> <br /> <img src ="http://www.tkk7.com/cph8066/aggbug/218386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cph8066/" target="_blank">姜大?/a> 2008-07-29 13:57 <a href="http://www.tkk7.com/cph8066/archive/2008/07/29/218386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP学习pd Smarty模板技术(四)http://www.tkk7.com/cph8066/archive/2008/07/29/218385.html姜大?/dc:creator>姜大?/author>Tue, 29 Jul 2008 05:55:00 GMThttp://www.tkk7.com/cph8066/archive/2008/07/29/218385.htmlhttp://www.tkk7.com/cph8066/comments/218385.htmlhttp://www.tkk7.com/cph8066/archive/2008/07/29/218385.html#Feedback0http://www.tkk7.com/cph8066/comments/commentRss/218385.htmlhttp://www.tkk7.com/cph8066/services/trackbacks/218385.html~存

      功能强大的应用程序一般都有很大的开销Q通常是数据获取和处理操作带来的。对于Web应用E序Q这个问题是׃HTTP协议的无状态性造成的。由于HTTP协议是无状态的Q对于每个页面请求,都要重复地执行相同的操作Q而不论数据是否修攏V要让应用程序在世界范围最大的|络中可用,会ɘq个问题q一步恶化。所以,毫不奇怪,Zdx设法地让Web应用E序q行得更高效。对此有一U特别有效的解决Ҏ(gu)Q这也是最合理的方案之一Q将动态页面{换成静态页面,只有在页面内Ҏ(gu)修改之后才重新构建,或者定期地重新构徏。Smarty提供了这样一个特性,一般称为页面缓存?br />     如果要用缓存,需要首先通过讄Smarty 的缓存属性来启用~存Q如下:
1 <?php
2   require("Smarty.class.php");
3   $smarty = new Smarty;
4   $smarty->caching = 1;
5    $smarty->display("news.tpl");
6 ?>

      启用~存后,调用 display() ?fetch() Ҏ(gu)在指定模?(?cache_dir 属性指? 中保存目标模板的内容?br />
    处理~存生命?/strong>

      ~存的页面在?$cache_lifetime 属性指定的生命期(以秒为单位)内有效,默认?600U,?时。因此,如果希望修改此设|,可以设|这个属性,如下Q?br />
1 <?php
2     require("Smarty.class.php");
3     $smarty = new Smarty;
4     $smarty->caching = 1;
5     //讄生命周期
6    $smarty->cache_lifetime = 1800;
7     $smarty->display("news.tpl");
8 ?>

在此对象的生命期内,后箋调用和缓存的模板都用此生命期?br />     有可能需要覆盖以前设|的~存生命期,从而能分别控制每个模板的缓存生命期。通过?caching 属性设|ؓ2可以做到这一点,如下Q?br />
1 <?php
2     require("Smarty.class.php");
3     $smarty = new Smarty;
4     $smarty->caching = 2;
5     $smarty->cache_lifetime = 1200;
6     $smarty->display("news.tpl");
7 ?>

在这里,news.tpl 模板的生命期讄?0分钟Q它覆盖了前面设|的全局生命期倹{?br />
通过 is_cached( ) 消除处理开销

    如前面所qͼ~存模板q能消除处理开销Q如果禁用缓存(只启用编译)Q这些处理开销L会发生。但是,默认情况下ƈ没有启用~存。要启用~存Q需要把处理指o攑֜ if 条g中,q执?is_cached( )Ҏ(gu)Q如下:
 1 <?php
 2     require("Smarty.class.php");
 3     $smarty = new Smarty;
 4     $smarty->caching = 1;
 5    
 6     if (! $smarty->is_cached("news.tpl")){
 7         $conn = mysql_connect("localhost","name","pwd");
 8         $db = mysql_select_db("news");
 9         $query = "select * from news";
10         
11     }
12     $smarty->display("news.tpl");
13 ?>

      在这个例子中Q将首先验证模板news.tpl是否有效。如果有效,则蟩q数据库讉KQ否则才讉K数据库?br />
为每个模板创建多个缓?/strong>
   
    M指定的Smarty模板都可以用于ؓ整个新闻,博客等提供一个通用界面。由于同一个模板用来生成不同数量的不同,那么如何~存一个模板的多个实例呢?{案比你惛_的要单。Smarty的开发h员实际不已经解决了这个问题,可以通过display()Ҏ(gu)为缓存模板的每个实例指派一个唯一标识W。例如,假设有一个用生成用户信息的模板,q希望缓存这个模板的各个实例Q?br />
 1 <?php
 2     require("Smarty.class.php");
 3     require("User.class.php");
 4 
 5     $smarty = new Smarty;
 6     $smarty->caching = 1;
 7 
 8     //Ҏ(gu)不同的用户ID来区分不同的用户实例来判断有没有被缓?/span>
 9     if(! is_cached("userinfo.tpl",$_GET['userid'])){
10         $user = new User();
11 
12         $smarty->assign("name",$user->getName());
13         $smarty->assign("address",$user->getAddress());
14     }
15     
16     /*
17       当显C时也根据该用户的ID来区分将哪个实例q行~存Q而不影响其它用户的缓?br /> 18     x用userid 值来区分同一个缓存模板的不同实例Q所有用户都q一个模板,
19     但信息都不尽相同Q所以不能统一~存Q要独立分开~存
20    */
21     $smarty->display("userinfo.tpl",$_GEG['userid']);
22 ?>

特别注意下面一行:
    $smarty->display("userinfo.tpl",$_GEG['userid']);
q一行对于此脚本有两个功能,一斚w获取名ؓ$_GET['userinfo'] ?userinfo.tpl ~存版本Q另一斚wQ如果还不存在这个缓存,则用q个名字来缓存该模板实例。采用这U方式,可以LCؓ指定模板~存L数量的实例?br />
关于~存的结?/strong>

    模板~存大大提升了应用程序的性能Q如果决定将Smarty集成到工E中来,应当认真地考虑~存。但是,因ؓ大多数强大的Web应用E序功能都体现在其动态性上Q所以一斚w要考虑到性能提升Q另一斚w也要考虑到缓存页面随旉是否仍有效,要在q二者之间进行权衡?br />

]]>
PHP学习pd Smarty模板技术(三)http://www.tkk7.com/cph8066/archive/2008/07/29/218383.html姜大?/dc:creator>姜大?/author>Tue, 29 Jul 2008 05:51:00 GMThttp://www.tkk7.com/cph8066/archive/2008/07/29/218383.htmlhttp://www.tkk7.com/cph8066/comments/218383.htmlhttp://www.tkk7.com/cph8066/archive/2008/07/29/218383.html#Feedback0http://www.tkk7.com/cph8066/comments/commentRss/218383.htmlhttp://www.tkk7.com/cph8066/services/trackbacks/218383.htmlSmarty 的配|文?/strong>

      开发h员一直用配|文件来存储定应用E序行ؓ和操作的数据。例如,php.ini 文g负责定PHP的大量行为。对于Smarty Q模板设计h员也可以利用配置文g的强大作用。例如,设计人员可以使用配置文g存储面标题、用h息以及有必要集中存储的Q何信息?br />       以下是一个示例配|文?Q名?app.configQ:

#Global Variables
appName = "PMNP News Service"
copyright = "Copyright 2005 PMNP News Service, Inc."

[Aggregation]
title = "Recent News"
warning = "Copyright warning.Use of this information is for personal use only."

[Detail]
title = "A Closer Look..."

      中括号中包围的项UCؓ?section)。节之外的项都认为是全局的。这此项应当在定义Q何节之前定义?br />      
    下面展C如何用config_load 函数来加载配|文Ӟq会解释如何在模板中引用配置变量?br />     配置文g存储?configs 目录中,q用Smarty函数 config_load 加蝲。下面是加蝲配置文g app.config 的示例:
    {config_load file="app.config"}
但是要记住,此调用只能加载配|文件的全局变量。如果要加蝲特定的节Q需要?section 属性指定。所以,可以使用以下语法加蝲 app.config 的节 Aggregation:
      {config_load file="app.config" section="Aggregation"}
      另外两个可选参Cl如下:
    scopeQ确定所加蝲的配|变量的作用域。默认情况下讄为localQ表C变量只能用于本地模ѝ其它可能的讄包括 parent ?global 。作用域讄?parent Ӟ变量可用于本地模板和调用模板。作用域设ؓglobal Ӟ变量则可以用于所有模ѝ?br />     sectionQ指定加载配|文件的特定节。因此,如果只对某个特定节感兴趣Q可以只加蝲该节Q而非整个文g?br />
引用配置变量

      配置文g中变量的引用方式与其它变量的引用方式有所不同。实际上Q这些配|变量用几U不同的语法来引用,下面介l这个内宏V?br />     1?
      ?Smarty 模板中,可以在变量前面加?h引用配置变量。例如:
      {#title}
      2、Smarty?smarty.config变量
    引用配置变量Ӟ如果喜欢更ؓ正式的语法,可以使用 Smarty ?$smarty.config 变量。例如:
      {$smarty.config.title}
      3、get_config_vars() Ҏ(gu)
    array get_config_vars([string variablename])
      get_config_vars() Ҏ(gu)q回一个数l,包含加蝲的所有配|变量倹{如果只Ҏ(gu)个变量值感兴趣Q可以通过 variablename 传入该变量。例如,如果只对以上 app.config  配置文g?Aggregation 节的 title 感兴,可以首先使用 config_load 函数加蝲该节Q?br />       {config_load file="app.config" section="Aggregation"}
然后Q在模板中启用PHP的节中调?get_config_vars( )Q如下:
      $title = smarty->get_config_vars("title");
当然Q无论选择哪一U获取配|参数的语法Q都不要忘记首先使用 config_load 函数加蝲配置文g?br />

]]>
PHP学习pd Smarty模板技术(二)http://www.tkk7.com/cph8066/archive/2008/07/29/218379.html姜大?/dc:creator>姜大?/author>Tue, 29 Jul 2008 05:49:00 GMThttp://www.tkk7.com/cph8066/archive/2008/07/29/218379.htmlhttp://www.tkk7.com/cph8066/comments/218379.htmlhttp://www.tkk7.com/cph8066/archive/2008/07/29/218379.html#Feedback0http://www.tkk7.com/cph8066/comments/commentRss/218379.htmlhttp://www.tkk7.com/cph8066/services/trackbacks/218379.htmlSmarty 的表现逻辑


      W一~文章中Q只单的讲述了Smarty里的基本原理Q也׃几个变量的D已Q而本节中Q将会讲qSmarty的逻辑表示l构Q比如它的分支,修饰W,q代{结构的表达?br />
     Q?Q?注释Q?/strong>

      中Smarty中,也可以用注释,设计人员可以用注释在模板面中传递一些说明信息等。在Smarty中的注释为:{* Hello Jiang! *}Q大家可以看刎ͼSmarty中的注释是用{**}来包围的Q可以单行,也可以多行,比如可以q样写:
      {* Hello
           Jiang! *}

     Q?Q变量修饰符Q?/strong>

      在Smarty中,可以为变量添加修饰符Q用于对变量q行一些Smarty已定义好的操作,变量修饰W的写法是:
      {$var|modifier}
其中Q?var 是变量,modifier 是修饰符的单词,意ؓҎ(gu)定变量进行某U修饰操作?br />
      1、capitalize 修饰W?br />       capitalize 修饰W用于对变量内的g所有单词的首字母变为大写,可看CZQ?br />       $smarty = new Smarty;
      $smarty->assign("$title","hello jiang zone");
      $smarty->display("index.tpl");

index.tpl 内容为:
      {$title|capitalize}

      2、count_words
      count_words 函数l计变量中的单词L

      3、date_format
      date_format 函数是PHP strftime() 函数的包装器Q它能将可以被strftime()解析的Q何日?旉格式字符串{换ؓ某种Ҏ(gu)格式?br />
      4、default
      default 函数当应用层没有q回值时Qdefault为指C特定变量的默认值提供了一U简单的方式?br />
      5、strip_tags
      strip_tags 函数删除变量字符串中的标{受如Q?br />       $smarty->assign("name","<b>Jiang</b>");
      模板里这样写Q{$name|strip_tags}
      会输入如下name的|"Jiang"Q它?yu)?lt;b></b>删除了。所以,没有输出_体

      6、truncate
      truncate 函数变量字W串截取为指定数量的字符。]


      Q?Q控制结?/strong>

      1、if-elseif-else
      Smarty 的if语句与PHP语言中的if语句相同Q与PHP一P可以使用一些条仉定符如下Q?br />       eq            gt            gte            ge
      lt              lte            le              ne
      neq          is even     is not even   is odd
      is not odd  div by     event by    not
      mod         odd by      ==            !=
      >              <              <=            >=
CZQ?br />       {if $var > 5}
          <p>Hello JiangZone</p>
      {/if}

      2、foreach
      foreach 标记的作用与PHP语句中的命o相同。但如下所C,其语法大不相同。它?个参敎ͼ其中两个是必要的Q?br />       form : q个必要参数指定目标数组的名?br />       item : q个必要参数指定当前元素的名?br />       key : q个可选参数指定当前键的名?br />       name : q个可选参数指定节的名。这个名是Q意的Q应当设|ؓ一个描q性的名字?br /> 看看如下例子Q?br /> require("Smarty.class.php");
$smarty = new Smarty;
$daysofweek = array("Mon","Tues","Weds","Thu","Fri","Sat","Sun");     
$smarty->assign("daysofweek",$daysofweek);
$smarty->display("daysofweek.tpl");     

以下是daysofweek.tpl模板文gQ?br /> {foreach from=$daysofweek item=$day}
      {$day}<br />
{/foreach}

      3、foreachelse
      foreachelse 标记?foreach 一起用,与用于字W串?default 标记作用cMQ数lؓI时 foreachelse 标记可以生成某个候选结果。以下是一个?foreachelse 的模板示例:
{foreach key=key item=item from=$titles}
      {$key}: {$item}<br />
{foreachelse}
      <p>No states matching your query were found.</p>
{/foreach}
注意Qforeachelse 不用结束括P它嵌入到foreach中,q与elseif嵌入到if语句中很cM?br />

      Q?Q语?/strong>
      Smarty 提供了几个用于完成特DQ务的语句?br />       1、include
      include语句与PHP包中的同名语句相同,只是它只用于其它模板导入到当前模板。例如,假设希望在Smarty模板中导入两个文Ӟheader.tpl ?footer.tpl Q可以如下完成:
{include file="header.tpl"}
{include file="footer.tpl"}

      2、insert
      insert 标记?include 标记的功能相同,只是它要导入不会被缓存的数据。例如,可以使用q个函数插入l常更新的数据,如股h(hun)|天气预报或其它在很短旉内就要改变的内容。它也接受几个参敎ͼ一个是必要的,另外三个是可选的Q?br />       name : q个必要参数定insert函数的名?br />       assign : q个可选参数可用于输出给变量Q而不是直接发送到输出?br />       script : q个可选参数可以指向在导入文g前直接执行的一个PHP脚本。当输出文g的内容依赖于脚本所完成的某个特定动作时Q可以用此参数。例如,可以执行一个PHP脚本Q返回某个默认的股票h攑֜不可~存的输Z?br />       var : q个可选参数用于传入所有插入模板用的其它参数。可以通过q种方式传递很多参数?br />
      3、literal
      literal 标记告诉Smarty Q标C嵌入的Q何数据都应当原样输出Q不需要{换。这个标记量常用于在模板中嵌入JavaScript 和CSS Q从而不需要担心与 Smarty 的定界符冲突?br />
      4、php
      可以使用php函数在模板中嵌入PHP代码。{php}{/php}标记中的M代码都由PHP引擎处理?br />

]]>PHP学习pd Smarty模板技术(一Q?/title><link>http://www.tkk7.com/cph8066/archive/2008/07/29/218375.html</link><dc:creator>姜大?/dc:creator><author>姜大?/author><pubDate>Tue, 29 Jul 2008 05:46:00 GMT</pubDate><guid>http://www.tkk7.com/cph8066/archive/2008/07/29/218375.html</guid><wfw:comment>http://www.tkk7.com/cph8066/comments/218375.html</wfw:comment><comments>http://www.tkk7.com/cph8066/archive/2008/07/29/218375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cph8066/comments/commentRss/218375.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cph8066/services/trackbacks/218375.html</trackback:ping><description><![CDATA[      其实本h也正在学PHPQ所以就把学习PHP时的心得体会与所学到的知识分享一下吧Q所以这一pd教程Q或者是心得吧)Q将围绕在初学PHPq程中遇到的问题和需要注意的地方?br />       q是关于PHP中Smarty模板技术的W一~,Z么要说模板技术呢Q原因很单,如果你想做一个合格的PHPE序员的话,如果你想开发一个结构合理、移植方便的pȝ的话Q那p留意一下PHP的模板技术,而在PHP的模板技术中QSmarty是一个不错的选择?br />       使用模板化主要有两个原因Q?、可以用同L代码Zؓ不同的目标生成数据?、应用程序设计h员(负责创徏和维护界面的人)可以与应用程序开发h员独立工作,因ؓ用表现和逻辑q密不可分地纠~在一赗但模板化引擎如何完成这U分?有趣的是Q大多数实现的做法与~程语言非常怼Qؓ完成各种与界面有关的d提供了良好的定义的语法和命o集?br />       Smarty提供了很多强大的功能?br />       1、强大的表现逻辑<br />       2、模板编?br />       3、缓?br />       4、高度可配置和可扩展<br />       5、安?br /> <br />       如何使用SmartyQ?br />       使用Smarty与用其它Q何类库一栗对于初学者,只需要在执行脚本中Smartycd可用。实现这一炚w常容易,使用  require()  语句卛_Q?br />       require("Smarty.class.php");<br /> 之后Q就可以实例化Smartyc:<br />       $smarty = new Smarty;<br /> 现在Q就可以用Smarty来做东西了。下面看看一个小例子Q?br /> 以下是模板文?index.tpl Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 2</span> <span style="color: #000000;">    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;">        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span><span style="color: #000000;">{$title}</span><span style="color: #0000ff;"></</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;">    </span><span style="color: #0000ff;"></</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;">    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">body </span><span style="color: #ff0000;">bgcolor</span><span style="color: #0000ff;">="#ffffff"</span><span style="color: #ff0000;"> text</span><span style="color: #0000ff;">="#000000"</span><span style="color: #ff0000;"> link</span><span style="color: #0000ff;">="#0000ff"</span><span style="color: #ff0000;"> vlink</span><span style="color: #0000ff;">="#800080"</span><span style="color: #ff0000;"> alink</span><span style="color: #0000ff;">="#ff0000"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">        Hi,{$name}.Welcome to the wonderful world of Smarty.<br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">        </span><span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    </span><span style="color: #0000ff;"></</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008080;">10</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span></div> <br /> 以下是PHP面斚w代码  index.phpQ?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><?</span><span style="color: #000000;">php<br />     </span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />     </span><span style="color: #800080;">$smarty</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Smarty;<br />     </span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-></span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">JiangZone</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />     </span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-></span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">title</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">Jiang's Blog</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />    <br />     </span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-></span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">index.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #000000;">?></span></div> <br /> <br /> 从以上两D代码可以看得到Qindex.tpl文g是页面文Ӟ没有业务逻辑代码Q只有{$name},{$title}Q初学者可能觉得怪,不过如果有Java基础的话Q应该看得出Q它跟Jsp的EL表达式有点类|或者跟标签库功能有点像。这L上去Q页面跟E序逻辑分开来了Q设计师专注于他的页面设计,需要放入处理后的值的话,加上个{$name}{标讎ͼ而程序员则专注于E序逻辑的实玎ͼ处理结果放到模杉K面那里相应的变量位置。明gh可能很快看得出,上面PHP代码里,$smarty->assign("name","JiangZone");是一个对模板赋值的q程Q意Zؓ模板中的变量$name 的D为字W串“JiangZone”Q下面的也是一P而最后那句,$smarty->display("index.tpl");则是上面设|好的值应用到index.tpl模板上,q将应用后的l果输出到客L?br /> <img src ="http://www.tkk7.com/cph8066/aggbug/218375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cph8066/" target="_blank">姜大?/a> 2008-07-29 13:46 <a href="http://www.tkk7.com/cph8066/archive/2008/07/29/218375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[PHP初学心得]PHP初学注意QPOST获取同名表单Ҏ(gu)l?/title><link>http://www.tkk7.com/cph8066/archive/2008/07/29/218374.html</link><dc:creator>姜大?/dc:creator><author>姜大?/author><pubDate>Tue, 29 Jul 2008 05:45:00 GMT</pubDate><guid>http://www.tkk7.com/cph8066/archive/2008/07/29/218374.html</guid><wfw:comment>http://www.tkk7.com/cph8066/comments/218374.html</wfw:comment><comments>http://www.tkk7.com/cph8066/archive/2008/07/29/218374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cph8066/comments/commentRss/218374.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cph8066/services/trackbacks/218374.html</trackback:ping><description><![CDATA[      我在初学PHP期间Q学了点入门文章Q学了学语法Q就惛_点小东西来练l手Q做什么好呢?做个购物R吧,面都做好了Q现在正写代码进去,试q行Q但有个问题,我在产品列表里明明是选了几个产品的,x选中了几?Checkbox Qcheckbox 的名字都?prodno" 但怎么在PHP里用 $_POST['prodno'] 来获取它的|L只获取到最后的那个checkbox 的|Z么?查了form几遍Q没有错误,再检查了PHP几遍Q也没错啊[loo]Q其实是checkbox里的name错了Q当时不知道PHP要这PQ郁闷了Q我以前做Java都是q样写的呀Q有什么问题?做ASPӞ也是q样写也没错呀Q问题出在哪呢?<br />       后来?is_array($_POST['prodno']) 得到的是falseQ不会吧QPHP不会获取重复名字的表单?唉,后来上网Google了一,原来PHP里获取重复名字的表单DJSP/ASP{的都不一PJSP的直接用 request.getParameterValues("prodno"); q回的是一个String[] 数组Q但PHP的差别在于,要将form里的 checkbox ?name 写成Q?prodno[] 是要多了后面那Ҏ(gu)括号Q之后PHP?$_POST['prodno'] 获得的就是一?array Q唉Q这样都行,不过后来xQ这个可能跟PHP的一个语法有兛_Q在PHP里,数组是可以这栯值的Q?br /> <br />       $arr[] = 'aaa';<br />       $arr[] = 'bbb';<br />       $arr[] = 'ccc';<br /> <br />       q样写的话,$arr 里就有三个|key分别?Q?Q?Q而value分别?aaa','bbb','ccc',<br /> 是说在PHP里,你给数组赋值的话,不写key的话Q他会默认用递增的数字来自动当key,所以,当表单提交到PHP里时Q实际上是 <br /> <br />       $prodno[] = 'a';<br />       $prodno[] = 'b';<br /> <br />       所以,?$_POST['prodno'] 的值就?prodno 的|所以它是一个数l,<br /> 而如果表单里name的值写?prodno 的话Q就会是<br /> <br />       $prodno = 'a';<br />       $prodno = 'b';<br /> <br />       所以,大家可以看得出问题所在了Q这?prodno的值始l会l最后的那个D盖,所以就出现我之前的现像我用$_POST['prodno']获取到的值L我最后的那个checkbox的|所以更不用说is_array()了,当然是得到false了?br /> 所以,对于一些有其它~程语言基础的h来说Q学PHP的话Q要注意q点Q跟别的语言都不同?br /> <img src ="http://www.tkk7.com/cph8066/aggbug/218374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cph8066/" target="_blank">姜大?/a> 2008-07-29 13:45 <a href="http://www.tkk7.com/cph8066/archive/2008/07/29/218374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转蝲] d杜绝PHP的session cookie错误http://www.tkk7.com/cph8066/archive/2008/07/29/218373.html姜大?/dc:creator>姜大?/author>Tue, 29 Jul 2008 05:44:00 GMThttp://www.tkk7.com/cph8066/archive/2008/07/29/218373.htmlhttp://www.tkk7.com/cph8066/comments/218373.htmlhttp://www.tkk7.com/cph8066/archive/2008/07/29/218373.html#Feedback0http://www.tkk7.com/cph8066/comments/commentRss/218373.htmlhttp://www.tkk7.com/cph8066/services/trackbacks/218373.html
只要你写qPHP代码,怿都遇上过q个大多时候都令h莫明其妙的warning?.今天我们来搞定?..............

看了PHP手册Q回{如下:

消息“WarningQ?Cannot send session cookie - headers already sent。。?#8221;或?#8220;Cannot add header information - headers already sent。。?#8221;?br />
函数 header()Qsetcookie() ?session 函数需要在输出中增加头信息。但是头信息只能在其它Q何输出内容之前发送。在使用q些函数前不能有MQ如 HTMLQ的输出。函?headers_sent() 能够查?zhn)的脚本是否已l发送了头信息。请参阅“输出控制函数”?br />
意思是Q不要在使用上面的函数前有Q何文字,IQ回车,I格{。但。。。问题是Q这{案q不令h满意。因为往往E序在其他PHP环境下运行却正常?br />  

首先Q这错误是怎么产生的呢Q让我们来看看PHP是如何处理HTTP header输出和主体输出的?br />
PHP 脚本开始执行时Q它可以同时发送header(标题)信息和主体信息?Header信息(来自 header() ?SetCookie() 函数)q不会立卛_送,相反Q它被保存到一个列表中?q样可以允怽修改标题信息Q包括缺省的标题(例如 Content-Type 标题Q。但是,一旦脚本发送了M非标题的输出Q例如,使用 HTML ?print() 调用)Q那么PHP必d发送完所有的HeaderQ然后终?HTTP header。而后l箋发送主体数据。从q时开始,Md或修改Header信息的试N是不允许的,q会发送上q的错误消息之一?br />
?那我们来解决它:

W方法:把错误警告全不显C?
掩耳盗铃之计,具体Ҏ(gu)׃说了 ^_^#

解决Ҏ(gu)Q?br />
1)适用于有权限~辑PHP。INI的h

打开php。ini文g(你应试比我清楚你的php。ini在哪?Q找?br />
output_buffering =改ؓon或者Q何数字。如果是IIS6Q请一定改为ONQ不然你的PHP效率会奇慢?br />
2)使用虚拟LQ不能编辑PHP。INIQ怎么办?

单:

在你的空间根目录下徏立一个。htaccess文gQ内容如下:

AllowOverride All
PHP_FLAG output_buffering On

不幸的情冉|Q还是不行?全部|页都不能显C啦Q?br />
那么Q你可以打电(sh)话骂一通空间商Q然后让他给你把apache的。htaccess AllowOverride打开

3)在PHP文g里解?br />
ob_start()
启用output buffering机制?Output buffering支持多层?-- 例如Q可以多ơ调?ob_start() 函数?br />
ob_end_flush()
发送output bufferQ输出缓Ԍq禁用output buffering机制?br />
ob_end_clean()
清除output buffer但不发送,q禁用output buffering?br />
ob_get_contents()
当前的output bufferq回成一个字W串。允怽处理脚本发出的Q何输出?br />
原理Q?br />
output_buffering 被启用时Q在脚本发送输出时QPHPq不发送HTTP header。相反,它将此输出通过道QpipeQ输入到动态增加的~存中(只能在PHP 4?中用,它具有中央化的输出机Ӟ。你仍然可以修改/dheaderQ或者设|cookieQ因为header实际上ƈ没有发送。当全部脚本l止ӞPHP自动发送HTTP header到浏览器Q然后再发送输出缓冲中的内宏V?br />

]]>
վ֩ģ壺 һֻ߹ۿ| ɫַѴȫ| ĻƷѾþ| Ļ| Ůۺһ| ĻþþƷA | www.999ƷƵۿ| mvߵӰ| 98ƷȫѹۿƵ| Ļȫȫ1| һëƬѲ| 18ŮˮѸëƬ| 18ëƬѲ| һ234޿Ƶ| AAƬ߹ۿ| ѹۿavëƬվ| ձѵӰһ| ޵ӰպƷ| ۺ| þѾƷav| avƬ߹ۿ| ޾Ʒavˮ| ŮվƵ| ý61| 㽶Ѳ| 2019ĻƵ| avþþþòվ| Ѹ弤Ƶ| Av߲| ޾Ʒ˳| ޻ɫַ| ղһ | ɫwwwۺ| ޴ɫwwwַ| ۺ| þwww˳ɿƬ| Ƶ߹ۿƵվWWW| www.ɫվ| þ99ۺϾƷҳ| þþ97ɫ | AV˾Ʒ|