weppos | 15 Dec 23:43 2007

[7145] trunk/documentation/manual/it/module_specs/Zend_Uri.xml: Italian manual:

Revision 7145 Author weppos Date 2007-12-15 16:42:55 -0600 (Sat, 15 Dec 2007)

Log Message

Italian manual: * Translated Zend_URI

Added Paths

Diff

Added: trunk/documentation/manual/it/module_specs/Zend_Uri.xml (0 => 7145)

--- trunk/documentation/manual/it/module_specs/Zend_Uri.xml (rev 0) +++ trunk/documentation/manual/it/module_specs/Zend_Uri.xml 2007-12-15 22:42:55 UTC (rev 7145) <at> <at> -0,0 +1,184 <at> <at> +<sect1 id="zend.uri.chapter"> + <title>Zend_Uri</title> + + <sect2 id="zend.uri.overview"> + <title>Panoramica</title> + + <para> + <code>Zend_Uri</code> è un componente che fornisce supporto nella manipolazione e validazione di + <ulink url="http://www.w3.org/Addressing/">Uniform Resource Identifier</ulink> (URI). + <code>Zend_Uri</code> esiste principalmente come servizio per altri componenti, ad esempio <code>Zend_Http_Client</code>, ma è altrettanto utile come componente autonomo. + </para> + + <para> + Gli URI cominciano sempre con uno schema, seguito da ':' (due punti). + La costruzione dei differenti tipi di schema varia sensibilmente. + La classe <code>Zend_Uri</code> fornisce un metodo factory che restituisce una sottoclasse di se stessa specializzata su uno schema specifico. La sotto classe è chiamata <code>Zend_Uri_&lt;scheme&gt;</code>, dove <code>&lt;scheme&gt;</code> è lo schema in caratteri minuscoli con la prima lettera maiuscola. + Un'eccezione alla regola è rappresentata dallo schema HTTPS che è gestito anch'esso da <code>Zend_Uri_Http</code>. + </para> + </sect2> + + <sect2 id="zend.uri.creation"> + <title>Creazione di un nuovo URI</title> + + <para> + <code>Zend_Uri</code> costruirà un nuovo URI da zero solo se lo schema è passato a <code>Zend_Uri::factory()</code>. + </para> + + <example id="zend.uri.creation.example-1"> + <title>Esempio di creazione di un nuovo URI con <code>Zend_Uri::factory()</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +// Per creare un nuovo URI da zero, passare solo lo schema +$uri = Zend_Uri::factory('http'); + +// $uri instanceof Zend_Uri_Http]]> + </programlisting> + </example> + + <para> + Per creare un nuovo URI da zero è sufficiente passare solo lo schema a <code>Zend_Uri::factory()</code><footnote><para>Al momento in cui si scrive, Zend_Uri supporta solo gli schemi HTTP e HTTPS.</para></footnote> . + Se si fornisce uno schema non supportato, il metodo genera un'eccezione <code>Zend_Uri_Exception</code>. + </para> + + <para> + Se lo schema o l'URI fornito è supportato, <code>Zend_Uri::factory()</code> restituisce una sottoclasse di se stessa specializzata nello schema da creare. + </para> + </sect2> + + <sect2 id="zend.uri.manipulation"> + <title>Manipolazione di un URI esistente</title> + + <para> + Per manipolare un URI esistente passare l'intero URI a<code>Zend_Uri::factory()</code>. + </para> + + <example id="zend.uri.manipulation.example-1"> + <title>Esempio di manipolazione di un URI esistente con <code>Zend_Uri::factory()</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +// Per manipolare un URI esistente, passarlo come parametro +$uri = Zend_Uri::factory('http://www.zend.com'); + +// $uri instanceof Zend_Uri_Http]]> + </programlisting> + </example> + + <para> + L'URI è parsato e validato. Se l'URI non è valido verrà immediatamente generata un'eccezione <code>Zend_Uri_Exception</code>. + Altrimenti, <code>Zend_Uri::factory()</code> restitusce una sottoclasse di se stessa specializzata nello schema da manipolare. + </para> + </sect2> + + <sect2 id="zend.uri.validation"> + <title>Validazione di un URI</title> + + <para> + Si può usare la funzione <code>Zend_Uri::check()</code> se è solo necessario validare un URI esistente. + </para> + + <example id="zend.uri.validation.example-1"> + <title>Esempio di validazione di un URI con <code>Zend_Uri::check()</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +// Validazione del formato dell'URI +$valid = Zend_Uri::check('http://uri.in.questione'); + +// $valid è TRUE per un URI valido, altrimenti FALSE.]]> + </programlisting> + </example> + + <para> + <code>Zend_Uri::check()</code> restituisce un booleano, una forma molto più conveniente che utilizzare <code>Zend_Uri::factory()</code> e catturare l'eccezione. + </para> + </sect2> + + <sect2 id="zend.uri.instance-methods"> + <title>Metodi d'istanza in comune</title> + + <para> + Ogni istanza di una sottoclasse di<code>Zend_Uri</code> (es. <code>Zend_Uri_Http</code>) contiene diversi metodi d'istanza utili per lavorare con ogni tipo di URI. + </para> + + <sect3 id="zend.uri.instance-methods.getscheme"> + <title>Restituzione dello Schema dell'URI</title> + + <para> + Lo schema dell'URI è la parte dell'URI che precede i ":" (due punti). + Per esempio, in <code>http://www.zend.com</code> lo schema è <code>http</code>. + </para> + + <example id="zend.uri.instance-methods.getscheme.example-1"> + <title>Esempio di restituzione dello schema di un oggetto <code>Zend_Uri_*</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +$uri = Zend_Uri::factory('http://www.zend.com'); + +$scheme = $uri->getScheme(); // "http"]]> + </programlisting> + </example> + + <para> + Il metodo d'istanza <code>getScheme()</code> restituisce solo la parte corrispondente allo schema dell'oggetto URI. + </para> + + </sect3> + + <sect3 id="zend.uri.instance-methods.geturi"> + <title>Restituzione dell'intero URI</title> + + <example id="zend.uri.instance-methods.geturi.example-1"> + <title>Esempio di restituzione dell'intero URI di un oggetto <code>Zend_Uri_*</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +$uri = Zend_Uri::factory('http://www.zend.com'); + +echo $uri->getUri(); // "http://www.zend.com"]]> + </programlisting> + </example> + + <para> + Il metodo <code>getUri()</code> restituisce una stringa corrispondente alla rappresentazione dell'intero URI. + </para> + </sect3> + + <sect3 id="zend.uri.instance-methods.valid"> + <title>Validazione dell'URI</title> + + <para> + <code>Zend_Uri::factory()</code> esegue sempre una validazione dell'URI passato e non crea una nuova istanza di una sottoclasse di <code>Zend_Uri</code> se l'URI fornito è invalido. + Tuttavia, dopo la creazione di un'istanza di una sottoclasse di <code>Zend_Uri</code> da un nuovo URI o da uno esistente, è possibile che l'URI diventi invalido successivamente ad una manipolazione. + </para> + + <example id="zend.uri.instance-methods.valid.example-1"> + <title>Esempio di validazione di un oggetto <code>Zend_Uri_*</code></title> + + <programlisting role="php"><![CDATA[<?php +require_once 'Zend/Uri.php'; + +$uri = Zend_Uri::factory('http://www.zend.com'); + +$isValid = $uri->valid(); // TRUE]]> + </programlisting> + </example> + + <para> + Il metodo d'istanza <code>valid()</code> fornisce un modo per controllare che l'oggetto URI sia ancora valido. + </para> + </sect3> + + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/it/module_specs/Zend_Uri.xml ___________________________________________________________________ Name: svn:keywords + Id Name: svn:eol-style + native
matthew | 16 Dec 02:53 2007

[7146] trunk/incubator/tests/Zend/View/Helper: * Added explicit tests for conditional stylesheets

Revision 7146 Author matthew Date 2007-12-15 19:53:08 -0600 (Sat, 15 Dec 2007)

Log Message

* Added explicit tests for conditional stylesheets * Fixed bug with conditional stylesheets (as reported by Kris Jurka)

Modified Paths

Diff

Modified: trunk/incubator/library/Zend/View/Helper/HeadLink.php (7145 => 7146)

--- trunk/incubator/library/Zend/View/Helper/HeadLink.php 2007-12-15 22:42:55 UTC (rev 7145) +++ trunk/incubator/library/Zend/View/Helper/HeadLink.php 2007-12-16 01:53:08 UTC (rev 7146) <at> <at> -273,7 +273,9 <at> <at> return ''; } - if (isset($attributes['conditionalStylesheet'])) { + if (isset($attributes['conditionalStylesheet']) + && (false !== $attributes['conditionalStylesheet'])) + { $link = '<!--[if ' . $attributes['conditionalStylesheet'] . ']> ' . $link . '<![endif]-->'; }

Modified: trunk/incubator/tests/Zend/View/Helper/HeadLinkTest.php (7145 => 7146)

--- trunk/incubator/tests/Zend/View/Helper/HeadLinkTest.php 2007-12-15 22:42:55 UTC (rev 7145) +++ trunk/incubator/tests/Zend/View/Helper/HeadLinkTest.php 2007-12-16 01:53:08 UTC (rev 7146) <at> <at> -294,6 +294,33 <at> <at> $this->assertEquals('ie6', $item->conditionalStylesheet); } + public function testConditionalStylesheetNotCreatedByDefault() + { + $this->helper->setStylesheet('/styles.css'); + $item = $this->helper->getValue(); + $this->assertObjectHasAttribute('conditionalStylesheet', $item); + $this->assertFalse($item->conditionalStylesheet); + + $string = $this->helper->toString(); + $this->assertContains('/styles.css', $string); + $this->assertNotContains('<!--[if', $string); + $this->assertNotContains(']>', $string); + $this->assertNotContains('<![endif]-->', $string); + } + + public function testConditionalStylesheetCreationOccursWhenRequested() + { + $this->helper->setStylesheet('/styles.css', 'screen', 'ie6'); + $item = $this->helper->getValue(); + $this->assertObjectHasAttribute('conditionalStylesheet', $item); + $this->assertEquals('ie6', $item->conditionalStylesheet); + + $string = $this->helper->toString(); + $this->assertContains('/styles.css', $string); + $this->assertContains('<!--[if ie6]>', $string); + $this->assertContains('<![endif]-->', $string); + } + public function testSettingAlternateWithTooFewArgsRaisesException() { try {
takagi | 16 Dec 03:05 2007

[7147] trunk/documentation/manual/ja: - sync Japanese document with r7078, r7086, and r7103.

Revision 7147 Author takagi Date 2007-12-15 20:04:58 -0600 (Sat, 15 Dec 2007)

Log Message

- sync Japanese document with r7078, r7086, and r7103.

Modified Paths

Added Paths

Diff

Added: trunk/documentation/manual/ja/figures/zend.layout.quickstart.example.png

(Binary files differ)
Property changes on: trunk/documentation/manual/ja/figures/zend.layout.quickstart.example.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Modified: trunk/documentation/manual/ja/manual.xml.in (7146 => 7147)

--- trunk/documentation/manual/ja/manual.xml.in 2007-12-16 01:53:08 UTC (rev 7146) +++ trunk/documentation/manual/ja/manual.xml.in 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -135,6 +135,7 <at> <at> <xi:include href="module_specs/Zend_Filter-FilterChains.xml" /> <xi:include href="module_specs/Zend_Filter-WritingFilters.xml" /> <xi:include href="module_specs/Zend_Filter_Input.xml" /> + <xi:include href="module_specs/Zend_Filter-Inflector.xml" /> </chapter> <chapter id="zend.gdata"> <title>Zend_Gdata</title> <at> <at> -165,9 +166,17 <at> <at> <xi:include href="module_specs/Zend_Json-Objects.xml" /> <xi:include href="module_specs/Zend_Json-xml2json.xml" /> </chapter> + <chapter id="zend.layout"> + <title>Zend_Layout</title> + <xi:include href="module_specs/Zend_Layout-Introduction.xml" /> + <xi:include href="module_specs/Zend_Layout-QuickStart.xml" /> + <xi:include href="module_specs/Zend_Layout-Options.xml" /> + <xi:include href="module_specs/Zend_Layout-Advanced.xml" /> + </chapter> <chapter id="zend.loader"> <title>Zend_Loader</title> <xi:include href="module_specs/Zend_Loader.xml" /> + <xi:include href="module_specs/Zend_Loader-PluginLoader.xml" /> </chapter> <chapter id="zend.locale"> <title>Zend_Locale</title> <at> <at> -312,7 +321,7 <at> <at> <xi:include href="module_specs/Zend_View-Introduction.xml" /> <xi:include href="module_specs/Zend_View-Controllers.xml" /> <xi:include href="module_specs/Zend_View-Scripts.xml" /> - <xi:include href="module_specs/Zend_View-Helpers.xml" /> + <xi:include href="module_specs/Zend_View-Helpers.xml" parse="xml" /> </chapter> <chapter id="zend.xmlrpc"> <title>Zend_XmlRpc</title>

Added: trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ActionStack.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ActionStack.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ActionStack.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,89 <at> <at> +<sect3 id="zend.controller.actionhelpers.actionstack"> + <title>ActionStack</title> + + <para> + <code>ActionStack</code> ヘルパーは、リクエストをフロントコントローラの + <link linkend="zend.controller.plugins.actionstack">ActionStack</link> + プラグインに格納します。これにより、 + リクエストの実行時にアクションのキューを作成しやすくなります。 + このヘルパーは、アクションを追加する際に + 新しいリクエストオブジェクトを指定するか + アクション/コントローラ/モジュール の設定を指定するかのいずれかを用います。 + </para> + + <note> + <title>ActionStack ヘルパーを起動すると ActionStack プラグインが初期化される</title> + + <para> + <code>ActionStack</code> を起動すると、暗黙のうちに + <code>ActionStack</code> プラグインを登録します。 + つまり、この機能を使う際に明示的に <code>ActionStack</code> + プラグインを登録する必要はないということです。 + </para> + </note> + + <example id="zend.controller.actionhelpers.actionstack.simple"> + <title>アクション、コントローラおよびモジュール名によるタスクの追加</title> + + <para> + 単純にアクションとコントローラそしてモジュール + (およびオプションでリクエストパラメータ) + を指定して <code>Zend_Controller_Action::_forward()</code> + をコールするのが一番シンプルな方法です。 + </para> + + <programlisting role="php"><![CDATA[<?php +class FooController extends Zend_Controller_Action +{ + public function barAction() + { + // 2 つのアクションをスタックに格納して + // /foo/baz/bar/baz をコールします + // (FooController::bazAction() にリクエスト変数 bar == baz を指定したもの) + $this->_helper->actionStack('baz', 'foo', 'default', array('bar' => 'baz')); + + // /bar/bat のコール + // (BarController::batAction()) を追加します + $this->_helper->actionStack('bat', 'bar'); + } +} +?>]]></programlisting> + + </example> + + <example id="zend.controller.actionhelpers.actionstack.simple"> + <title>リクエストオブジェクトによるタスクの追加</title> + + <para> + 時にはリクエストオブジェクトのオブジェクト指向的な部分が使いたいこともあるでしょう。 + そんな場合はこのオブジェクトを <code>ActionStack</code> + ヘルパーに渡すこともできます。 + </para> + + <programlisting role="php"><![CDATA[<?php +class FooController extends Zend_Controller_Action +{ + public function barAction() + { + // 2 つのアクションをスタックに格納して + // /foo/baz/bar/baz をコールします + // (FooController::bazAction() にリクエスト変数 bar == baz を指定したもの) + $request = clone $this->getRequest(); + $request->setActionName('baz') // コントローラやモジュールは指定せず、 + ->setParams(array('bar' => 'baz')); // 現在の値を使用します + $this->_helper->actionStack($request); + + // /bar/bat のコール + // (BarController::batAction()) を追加します + $request = clone $this->getRequest(); + $request->setActionName('bat') // モジュールは指定せず、 + ->setControllerName('bar'); // 現在の値を使用します + $this->_helper->actionStack($request); + } +} +?>]]></programlisting> + </example> +</sect3> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ActionStack.xml ___________________________________________________________________ Name: svn:executable + *

Modified: trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ViewRenderer.xml (7146 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ViewRenderer.xml 2007-12-16 01:53:08 UTC (rev 7146) +++ trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers-ViewRenderer.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -393,6 +393,104 <at> <at> </itemizedlist> <para> + パス指定をよりきめ細かく行うには、 + <link linkend="zend.filter.inflector">Zend_Filter_Inflector</link> + を使用します。実は、<code>ViewRenderer</code> + はパスのマッピングを行う際に既にインフレクタを使用しています。 + インフレクタに手を入れたい (独自のインフレクタを使用したり、 + デフォルトのインフレクタに手を加えたりしたい) 場合は、 + 以下のメソッドを使用します。 + </para> + + <itemizedlist> + <listitem> + <para> + <code>getInflector()</code> は、インフレクタを取得します。 + まだ <code>ViewRenderer</code> にインフレクタが存在しない場合は、 + デフォルトの規則にもとづいたインフレクタを作成します。 + </para> + + <para> + By default, it uses static rule references for the suffix + and module directory, as well as a static target; this + allows various <code>ViewRenderer</code> properties the + ability to dynamically modify the inflector. + </para> + </listitem> + + <listitem><para> + <code>setInflector($inflector, $reference)</code> は、 + <code>ViewRenderer</code> で使用する独自のインフレクタを設定します。 + <code>$reference</code> が true の場合は、 + 対象だけでなくサフィックスやモジュールディレクトリも + <code>ViewRenderer</code> のプロパティへの静的な参照とします。 + </para></listitem> + </itemizedlist> + + <note> + <title>デフォルトの検索方式</title> + + <para> + <code>ViewRenderer</code> は、 + パスの正規化を行ってビュースクリプトによる検索を簡単にします。 + デフォルトのルールは次のようなものです。 + </para> + + <itemizedlist> + <listitem> + <para> + <code>:module</code>: + CamelCase 形式の単語がダッシュで分割され、 + すべて小文字になります。たとえば + "FooBarBaz" は "foo-bar-baz" となります。 + </para> + + <para> + 内部的には、インフレクタはフィルタ + <code>Zend_Filter_Word_CamelCaseToDash</code> および + <code>Zend_Filter_StringToLower</code> を使用します。 + </para> + </listitem> + + <listitem> + <para> + <code>:controller</code>: + CamelCase 形式の単語がダッシュで分割され、 + アンダースコアはディレクトリ区切り文字に変換され、 + すべて小文字になります。たとえば + "FooBar" は "foo-bar" となり、そして "FooBar_Admin" + は "foo-bar/admin" となります。 + </para> + + <para> + 内部的には、インフレクタはフィルタ + <code>Zend_Filter_Word_CamelCaseToDash</code>、 + <code>Zend_Filter_Word_UnderscoreToSeparator</code> および + <code>Zend_Filter_StringToLower</code> を使用します。 + </para> + </listitem> + + <listitem> + <para> + <code>:action</code>: + CamelCase 形式の単語がダッシュで分割され、 + 英数字以外の文字はダッシュに変換され、 + すべて小文字になります。たとえば + "fooBar" は "foo-bar" となり、"foo-barBaz" + は "foo-bar-baz" となります。 + </para> + + <para> + 内部的には、インフレクタはフィルタ + <code>Zend_Filter_Word_CamelCaseToDash</code>、 + <code>Zend_Filter_PregReplace</code> および + <code>Zend_Filter_StringToLower</code> を使用します。 + </para> + </listitem> + </itemizedlist> + </note> + + <para> <code>ViewRenderer</code> API の最後に紹介するのは、 実際にビュースクリプトのパスを決定するメソッドと ビューのレンダリングを行うメソッドです。以下をご覧ください。

Modified: trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers.xml (7146 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers.xml 2007-12-16 01:53:08 UTC (rev 7146) +++ trunk/documentation/manual/ja/module_specs/Zend_Controller-ActionHelpers.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -226,6 +226,7 <at> <at> <code>ViewRenderer</code> です。 </para> + <xi:include href="Zend_Controller-ActionHelpers-ActionStack.xml" /> <xi:include href="Zend_Controller-ActionHelpers-FlashMessenger.xml" /> <xi:include href="Zend_Controller-ActionHelpers-Redirector.xml" /> <xi:include href="Zend_Controller-ActionHelpers-ViewRenderer.xml" />

Added: trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins-ActionStack.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins-ActionStack.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins-ActionStack.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,59 <at> <at> +<sect3 id="zend.controller.plugins.standard.actionstack"> + <title>ActionStack</title> + + <para> + <code>ActionStack</code> プラグインは、リクエストをスタックで管理します。 + <code>postDispatch</code> プラグインとして動作します。 + 現在のリクエストオブジェクトで既に転送先が指定されている + (別のアクションがコールされている) 場合は、何も行いません。 + 転送されていない場合はスタックの最上位の要素を取り出し、 + そのリクエストが指すアクションに転送します。 + スタックの処理は LIFO (後入れ先出し) 方式で行います。 + </para> + + <para> + このプラグインをフロントコントローラから取得するには、 + <code>Zend_Controller_Front::getPlugin('Zend_Controller_Plugin_ActionStack')</code> + とします。プラグインオブジェクトを取得したら、 + さまざまな仕組みを利用できるようになります。 + </para> + + <itemizedlist> + <listitem><para> + <code>getRegistry()</code> および <code>setRegistry()</code>。 + <code>ActionStack</code> は、内部的に + <code>Zend_Registry</code> のインスタンスを使ってスタックを管理しています。 + 別のレジストリインスタンスでこれを置き換えたり、 + インスタンスを取得したりする際にこれらのアクセサを使用します。 + </para></listitem> + + <listitem><para> + <code>getRegistryKey()</code> および <code>setRegistryKey()</code>。 + これらは、スタックに格納する際にレジストリのどのキーを使用するかを指定します。 + デフォルト値は 'Zend_Controller_Plugin_ActionStack' です。 + </para></listitem> + + <listitem><para> + <code>getStack()</code> は、 + そのアクションのスタック全体を取得します。 + </para></listitem> + + <listitem><para> + <code>pushStack()</code> および <code>popStack()</code> + は、それぞれスタックへの追加とスタックからの取り出しを行います。 + <code>pushStack()</code> にはリクエストオブジェクトを渡します。 + </para></listitem> + </itemizedlist> + + <para> + さらに <code>forward()</code> メソッドが存在します。 + このメソッドにはリクエストオブジェクトを渡し、 + フロントコントローラにおける現在のリクエストオブジェクトの状態を + ここで渡したオブジェクトの状態に設定します。 + そして、リクエストを未ディスパッチ状態に戻します + (ディスパッチループの次の処理に強制的に進ませます)。 + </para> +</sect3> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins-ActionStack.xml ___________________________________________________________________ Name: svn:executable + *

Modified: trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins.xml (7146 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins.xml 2007-12-16 01:53:08 UTC (rev 7146) +++ trunk/documentation/manual/ja/module_specs/Zend_Controller-Plugins.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -218,6 +218,7 <at> <at> エラー処理用のプラグインが標準で組み込まれています。 </para> + <xi:include href="Zend_Controller-Plugins-ActionStack.xml" /> <xi:include href="Zend_Controller-Plugins-ErrorHandler.xml" /> </sect2> </sect1>

Added: trunk/documentation/manual/ja/module_specs/Zend_Filter-Inflector.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Filter-Inflector.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Filter-Inflector.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,480 <at> <at> +<sect1 id="zend.filter.inflector"> + <title>Zend_Filter_Inflector</title> + + <para> + <code>Zend_Filter_Inflector</code> + は、指定したターゲットに対して + ルールにもとづいた文字列変換を行うための汎用的なツールです。 + </para> + + <para> + たとえば、CamelCase 形式の単語をパス形式に変換したりするような作業を行います。 + 読みやすさや OS のポリシーなどの理由で、小文字への変換を行ったりダッシュ + ('-') で単語を区切ったりといったこともあるでしょう。 + インフレクタは、このような作業を行うことができます。 + </para> + + <para> + <code>Zend_Filter_Inflector</code> は + <code>Zend_Filter_Interface</code> を実装しています。 + インフレクションを実行するには、オブジェクトのインスタンスで + <code>filter()</code> をコールします。 + </para> + + <example id="zend.filter.inflector.camel_case_example"> + <title>CamelCaseText を別形式に変換する</title> + + <programlisting role="php"><![CDATA[<?php +$inflector = new Zend_Filter_Inflector('pages/:page.:suffix'); +$inflector->setRules(array( + ':page' => array('Word_CamelCaseToDash', 'StringToLower'), + 'suffix' => 'html' +)); + +$string = 'CamelCasedWords'; +$filtered = $page->filter(array('page' => $string)); // pages/camel-cased-words.html + +$string = 'this_is_not_camel_cased'; +$filtered = $page->filter(array('page' => $string)); // pages/this_is_not_camel_cased.html +?>]]></programlisting> + </example> + + <sect2 id="zend.filter.inflector.operation"> + <title>操作</title> + + <para> + インフレクタには、ひとつの <emphasis>ターゲット</emphasis> + とひとつあるいは複数の <emphasis>ルール</emphasis> が必要です。 + ターゲットは基本的に文字列であり、置き換えを行うプレースホルダを定義します。 + プレースホルダは、先頭に ':' をつけて <code>:script</code> + のように定義します。 + </para> + + <para> + <code>filter()</code> をコールするときに、 + ターゲット内の変数に対応する キー/値 + のペアを配列で渡します。 + </para> + + <para> + ターゲット内の個々の変数に対して、ゼロ個以上のルールを関連づけることができます。 + ルールとして指定できるのは、<emphasis>静的な</emphasis> ルールか + <code>Zend_Filter</code> クラスです。静的なルールは、 + 指定されたテキストで置き換えを行います。 + それ以外の場合は、ルールで指定されたクラスを使用してテキストを変換します。 + クラスを指定する際には、共通のプレフィックスを除いた短いクラス名を使用します。 + </para> + + <para> + たとえば <code>Zend_Filter</code> の具象実装クラスなら何でも使用可能です。 + しかし、これを使用する際には 'Zend_Filter_Alpha' あるいは 'Zend_Filter_StringToLower' + とするのではなく単に 'Alpha' あるいは 'StringToLower' + だけで指定するということです。 + </para> + </sect2> + + <sect2 id="zend.filter.inflector.paths"> + <title>その他のフィルタ向けのパスの設定</title> + + <para> + <code>Zend_Filter_Inflector</code> は、 + <code>Zend_Loader_PluginLoader</code> + を使用してインフレクションに使用するフィルタの読み込みを行います。 + デフォルトでは、 + <code>Zend_Filter</code> で始まる任意のフィルタを使用できます。 + このプレフィックスで始まるけれどももっと深い階層にあるフィルタ、たとえば + Word 系のフィルタなどを使用したい場合は、プレフィックス Zend_Filter + を除いた名前を指定します。 + </para> + + <programlisting role="php"><![CDATA[<?php +// ルールとして Zend_Filter_Word_CamelCaseToDash を使用します +$inflector->addRules(array('script' => 'Word_CamelCaseToDash')); +?>]]></programlisting> + + <para> + 別のパスを使用するには、プラグインローダへのプロキシとして + <code>Zend_Filter_Inflector</code> のユーティリティメソッド + <code>addFilterPrefixPath()</code> を使用します。 + </para> + + <programlisting role="php"><![CDATA[<?php +$inflector->addFilterPrefixPath('My_Filter', 'My/Filter/'); +?>]]></programlisting> + + <para> + あるいは、プラグインローダをインフレクタから取得して、 + それを直接操作することもできます。 + </para> + + <programlisting role="php"><![CDATA[<?php +$loader = $inflector->getPluginLoader(); +$loader->addPrefixPath('My_Filter', 'My/Filter/'); +?>]]></programlisting> + + <para> + フィルタのパスを変更するための詳細なオプションは、<link + linkend="zend.loader.pluginloader">PluginLoader + のドキュメント</link> を参照ください。 + </para> + </sect2> + + <sect2 id="zend.filter.inflector.targets"> + <title>インフレクタのターゲットの設定</title> + + <para> + インフレクタのターゲットは、変数用のプレースホルダを含む文字列となります。 + プレースホルダは、先頭に識別子をつけて表します。 + デフォルトの識別子はコロン (':') です。 + そしてその後に変数名を続け、たとえば ':script' や ':path' + のようになります。 + <code>filter</code> メソッドは、識別子の後に続く変数を探して置換します。 + </para> + + <para> + 識別子を変更するには + <code>setTargetReplacementIdentifier()</code> メソッドを使用するか、 + コンストラクタの 3 番目の引数で指定します。 + </para> + + <programlisting role="php"><![CDATA[<?php +// コンストラクタ経由 +$inflector = new Zend_Filter_Inflector('#foo/#bar.#sfx', null, '#'); + +// アクセサ経由 +$inflector->setTargetReplacementIdentifier('#'); +?>]]></programlisting> + + <para> + 普通はコンストラクタでターゲットを指定することになるでしょう。 + しかし、あとでターゲットを設定しなおしたくなることもあるかもしれません + (たとえば、 + <code>ViewRenderer</code> や <code>Zend_Layout</code> + といったコアコンポーネントのデフォルトのインフレクタを変更したい場合など)。 + この際に使用できるのが <code>setTarget()</code> です。 + </para> + + <programlisting role="php"><![CDATA[<?php +$inflector = $layout->getInflector(); +$inflector->setTarget('layouts/:script.phtml'); +?>]]></programlisting> + + <para> + さらに、クラスのメンバーを用意して + インフレクタのターゲットを変更できるようにしたくなるかもしれません。 + 毎回直接ターゲットを変更する必要がなくなる + (メソッドコールを少なくできる) からです。 + そのためには <code>setTargetReference()</code> を使用します。 + </para> + + <programlisting role="php"><![CDATA[<?php +class Foo +{ + /** + * <at> var string インフレクタのターゲット + */ + protected $_target = 'foo/:bar/:baz.:suffix'; + + /** + * コンストラクタ + * <at> return void + */ + public function __construct() + { + $this->_inflector = new Zend_Filter_Inflector(); + $this->_inflector->setTargetReference($this->_target); + } + + /** + * ターゲットを設定してインフレクタのターゲットを更新します + * + * <at> param string $target + * <at> return Foo + */ + public function setTarget($target) + { + $this->_target = $target; + return $this; + } +} +?>]]></programlisting> + </sect2> + + <sect2 id="zend.filter.inflector.rules"> + <title>インフレクションのルール</title> + + <para> + 先ほど説明したように、静的なルールとフィルタを使用したルールのふたつがあります。 + </para> + + <sect3 id="zend.filter.inflector.rules.static"> + <title>静的なルール</title> + + <para> + 静的なルールは、単なる文字列の置換を行います。 + これは、ターゲットの中の、 + ほぼ固定であるが開発者が変更できるようにさせたい部分などに使用します。 + <code>setStaticRule()</code> メソッドを使用して、ルールの設定や変更を行います。 + </para> + + <programlisting role="php"><![CDATA[<?php +$inflector = new Zend_Filter_Inflector(':script.:suffix'); +$inflector->setStaticRule('suffix', 'phtml'); + +// あとで変更します +$inflector->setStaticRule('suffix', 'php'); +?>]]></programlisting> + + <para> + ターゲットと同様、静的ルールも参照で指定することができます。 + これにより、メソッドコールをせずに変数を更新するだけでルールを変更できるようになります。 + これは、クラスの中で内部的にインフレクタを使用している場合に便利です。 + ユーザにいちいちインフレクタを取得させる必要がなくなります。 + これを実現するために使用するのが + <code>setStaticRuleReference()</code> メソッドです。 + </para> + + <programlisting role="php"><![CDATA[<?php +class Foo +{ + /** + * <at> var string サフィックス + */ + protected $_suffix = 'phtml'; + + /** + * コンストラクタ + * <at> return void + */ + public function __construct() + { + $this->_inflector = new Zend_Filter_Inflector(':script.:suffix'); + $this->_inflector->setStaticRuleReference('suffix', $this->_suffix); + } + + /** + * サフィックスを設定し、インフレクタの静的ルールを更新します + * + * <at> param string $suffix + * <at> return Foo + */ + public function setSuffix($suffix) + { + $this->_suffix = $suffix; + return $this; + } +} +?>]]></programlisting> + </sect3> + + <sect3 id="zend.filter.inflector.rules.filters"> + <title>Filter Inflector ルール</title> + + <para> + <code>Zend_Filter</code> のフィルタ群も、インフレクタのルールとして使用できます。 + 静的なルールと同様、こちらもターゲットの変数にバインドされます。 + 静的なルールとは異なり、複数のフィルタによるインフレクションを行うこともあります。 + これらのフィルタは順番に処理されるので、 + 最終的にほしいデータを考慮してフィルタの登録順を決めるようにしましょう。 + </para> + + <para> + ルールを追加するには、<code>setFilterRule()</code> + (その変数に対する既存のルールをすべて上書きします) あるいは + <code>addFilterRule()</code> (その変数に対する既存のルールを保持し、 + 新たなルールを最後に追加します) を使用します。 + フィルタは、以下のいずれかの形式で指定します。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>文字列</emphasis>。 + フィルタのクラス名、あるいはクラス名からプレフィックス + (インフレクタのプラグインローダーで登録されたもの。 + デフォルトは 'Zend_Filter') + を取り除いた部分となります。 + </para></listitem> + + <listitem><para> + <emphasis>Filter オブジェクト</emphasis>。 + <code>Zend_Filter_Interface</code> + を実装した任意のオブジェクトのインスタンスをフィルタとして渡せます。 + </para></listitem> + + <listitem><para> + <emphasis>配列</emphasis>。 + 上で説明した文字列やフィルタオブジェクトを配列にしたものです。 + </para></listitem> + </itemizedlist> + + <programlisting role="php"><![CDATA[<?php +$inflector = new Zend_Filter_Inflector(':script.:suffix'); + +// ルールとして Zend_Filter_Word_CamelCaseToDash フィルタを使用するように設定します +$inflector->setFilterRule('script', 'Word_CamelCaseToDash'); + +// 文字列を小文字変換するルールを追加します +$inflector->addFilterRule('script', new Zend_Filter_StringToLower()); + +// 複数のルールを一括して指定します +$inflector->setFilterRule('script', array( + 'Word_CamelCaseToDash', + new Zend_Filter_StringToLower() +)); +?>]]></programlisting> + </sect3> + + <sect3 id="zend.filter.inflector.rules.multiple"> + <title>多くのルールを一度に設定する</title> + + <para> + 一般に、各変数に対して個別にインフレクタルールを設定するよりも、 + 一括してルールを設定できたほうが楽でしょう。 + <code>Zend_Filter_Inflector</code> の <code>addRules()</code> + メソッドや <code>setRules()</code> メソッドを使用すると、 + 一括設定することができます。 + </para> + + <para> + それぞれのメソッドには、変数/ルール のペアの配列を指定します。 + ルールには、(文字列、フィルタオブジェクトあるいはその配列などの) + いずれの形式でも指定できます。変数名には特別な記法を用い、 + それによって静的ルールとフィルタルールを切り替えます。 + 使用する記法は次のとおりです。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>':' プレフィックス</emphasis>: フィルタルール。 + </para></listitem> + + <listitem><para> + <emphasis>プレフィックスなし</emphasis>: 静的ルール。 + </para></listitem> + </itemizedlist> + + <example id="zend.filter.inflector.rules.multiple.example"> + <title>複数のルールの一括設定</title> + + <programlisting role="php"><![CDATA[<?php +// Could also use setRules() with this notation: +$inflector->addRules(array( + // フィルタルール + ':controller' => array('CamelCaseToUnderscore','StringToLower'), + ':action' => array('CamelCaseToUnderscore','StringToLower'), + + // 静的なルール + 'suffix' => 'phtml' +)); +?>]]></programlisting> + </example> + </sect3> + </sect2> + + <sect2 id="zend.filter.inflector.utility"> + <title>ユーティリティメソッド</title> + + <para> + <code>Zend_Filter_Inflector</code> のユーティリティメソッド群には、 + プラグインローダーの取得や設定、 + ルールの操作や取得、 + 例外をスローするかどうかやその時期の設定といったことを行えるものがあります。 + </para> + + <itemizedlist> + <listitem><para> + <code>setPluginLoader()</code> は、 + 独自のプラグインローダーを設定してそれを + <code>Zend_Filter_Inflector</code> で使いたい場合に使用します。 + <code>getPluginLoader()</code> は、 + 現在設定されているプラグインローダーを取得します。 + </para></listitem> + + <listitem><para> + <code>setThrowTargetExceptionsOn()</code> は、 + 指定した置換識別子がターゲットで見つからなかった場合に + <code>filter()</code> が例外をスローするかどうかを設定します。 + デフォルトでは、例外は一切スローされません。 + <code>isThrowTargetExceptionsOn()</code> は、 + 現在の設定状態を返します。 + </para></listitem> + + <listitem><para> + <code>getRules($spec = null)</code> は、 + すべての変数に登録されているすべてのルールを返します。 + あるいは、指定した変数について登録されているルールだけを返します。 + </para></listitem> + + <listitem><para> + <code>getRule($spec, $index)</code> は、 + 指定した変数のひとつのルールを取得します。 + これは、ある変数に対するルールを定義したフィルタチェインから + 特定のフィルタを取り出したい場合に便利です。 + <code>$index</code> は必須です。 + </para></listitem> + + <listitem><para> + <code>clearRules()</code> は、 + 現在登録されているルールをすべてクリアします。 + </para></listitem> + </itemizedlist> + </sect2> + + <sect2 id="zend.filter.inflector.config"> + <title>Zend_Filter_Inflector での Zend_Config の使用法</title> + + <para> + <code>Zend_Config</code> を使用してルールを設定したり、 + フィルタのプレフィックスのパスやその他のインフレクタの状態を設定することができます。 + そのためには、Zend_Config オブジェクトをコンストラクタあるいは + <code>setConfig()</code> に渡します。 + 設定可能な項目は以下のとおりです。 + </para> + + <itemizedlist> + <listitem><para> + <code>target</code> は、インフレクションのターゲットを指定します。 + </para></listitem> + + <listitem><para> + <code>filterPrefixPath</code> は、 + インフレクタが使用するフィルタの プレフィックス/パス + のペアを指定します。 + </para></listitem> + + <listitem><para> + <code>throwTargetExceptionsOn</code> は、 + インフレクション処理の後にまだ置換識別子が残っていた場合に + 例外をスローするかどうかを boolean 値で指定します。 + </para></listitem> + + <listitem><para> + <code>targetReplacementIdentifier</code> は、 + ターゲット文字列内で置換変数を表すために使用する文字を指定します。 + </para></listitem> + + <listitem><para> + <code>rules</code> は、インフレクションルールの配列を指定します。 + 値、あるいは値の配列をキーに指定し、 + <code>addRules()</code> と同じ形式となります。 + </para></listitem> + </itemizedlist> + + <example id="zend.filter.inflector.config.example"> + <title>Zend_Filter_Inflector での Zend_Config の使用法</title> + + <programlisting role="php"><![CDATA[<?php +// コンストラクタで +$config = new Zend_Config($options); +$inflector = new Zend_Filter_Inflector($config); + +// あるいは setConfig() で +$inflector = new Zend_Filter_Inflector(); +$inflector->setConfig($config); +?>]]></programlisting> + </example> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->

Added: trunk/documentation/manual/ja/module_specs/Zend_Layout-Advanced.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Layout-Advanced.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Layout-Advanced.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,248 <at> <at> +<sect1 id="zend.layout.advanced"> + <title>Zend_Layout の高度な使用法</title> + + <para> + <code>Zend_Layout</code> には、高度な使用法がいろいろあります。 + たとえばさまざまなビューの実装やファイルシステム上のレイアウトに対応させたりといったことです。 + </para> + + <para> + 主な拡張ポイントは次のとおりです。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>ビューオブジェクトのカスタマイズ</emphasis>。 + <code>Zend_Layout</code> は、 + <code>Zend_View_Interface</code> を実装した任意のクラスを使用することができます。 + </para></listitem> + + <listitem><para> + <emphasis>フロントコントローラプラグインのカスタマイズ</emphasis>。 + <code>Zend_Layout</code> に標準で含まれているフロントコントローラプラグインは、 + レイアウトを自動的にレンダリングしてからレスポンスを返します。 + これを独自のプラグインで置き換えることができます。 + </para></listitem> + + <listitem><para> + <emphasis>アクションヘルパーのカスタマイズ</emphasis>。 + <code>Zend_Layout</code> に標準で含まれているアクションヘルパーは、 + ほとんどの場合にそのまま使えるでしょう。 + これは、レイアウトオブジェクト自信へのプロキシとなっています。 + </para></listitem> + + <listitem><para> + <emphasis>レイアウトスクリプトのパス解決方法のカスタマイズ</emphasis>。 + <code>Zend_Layout</code> では、独自の <link + linkend="zend.filter.inflector">インフレクタ</link> + を使用してレイアウトスクリプトのパス解決方法を行うことができます。 + あるいは、標準のインフレクタを設定して独自のルールを指定することもできます。 + </para></listitem> + </itemizedlist> + + <sect2 id="zend.layout.advanced.view"> + <title>ビューオブジェクトのカスタマイズ</title> + + <para> + <code>Zend_Layout</code> では、 + <code>Zend_View_Interface</code> を実装した任意のクラスや + <code>Zend_View_Abstract</code> を継承した任意のクラスを用いて + レイアウトスクリプトをレンダリングすることができます。 + 独自のビューオブジェクトを単純に + constructor/<code>startMvc()</code> のパラメータとして渡すか、 + あるいはアクセサ <code>setView()</code> で設定します。 + </para> + + <programlisting role="php"><![CDATA[<?php +$view = new My_Custom_View(); +$layout->setView($view); +?>]]></programlisting> + + <note> + <title>Zend_View の実装がすべて同じというわけではない</title> + + <para> + <code>Zend_Layout</code> では + <code>Zend_View_Interface</code> を実装した任意のクラスを使用できますが、 + その中で様々な <code>Zend_View</code> ヘルパー + (特にレイアウトヘルパーや + <link linkend="zend.view.helpers.initial.placeholder">プレースホルダ</link> + ヘルパー) + が使用できなければ問題となることもあるでしょう。 + これは、<code>Zend_Layout</code> + がオブジェクトの中の変数を自分自身と + <link linkend="zend.view.helpers.initial.placeholder">プレースホルダ</link> + で使えるようにしているからです。 + </para> + + <para> + これらのヘルパーをサポートしていない <code>Zend_View</code> + の実装を使用する場合は、レイアウト変数をビューに取り込む方法を見つける必要があります。 + たとえば <code>Zend_Layout</code> オブジェクトを継承して + <code>render()</code> メソッドにビューへの変数を渡すようにするか、 + あるいは独自のプラグインクラスを作成して + レイアウトのレンダリングの前に変数を渡すようにするといった方法があります。 + </para> + + <para> + あるいは、もしあなたの使用するビュー実装が何らかのプラグイン機構をサポートしているのなら、 + 'Zend_Layout' プレースホルダ経由で + <link linkend="zend.view.helpers.initial.placeholder"> + プレースホルダヘルパー</link> + を使用して変数にアクセスすることができます。 + </para> + + <programlisting role="php"><![CDATA[<?php +$placeholders = new Zend_View_Helper_Placeholder(); +$layoutVars = $placeholders->placeholder('Zend_Layout')->getArrayCopy(); +?>]]></programlisting> + </note> + </sect2> + + <sect2 id="zend.layout.advanced.plugin"> + <title>フロントコントローラプラグインのカスタマイズ</title> + + <para> + MVC コンポーネントと組み合わせて使用するときに、 + <code>Zend_Layout</code> はフロントコントローラプラグインを登録します。 + このプラグインは、ディスパッチループを抜ける前の最後のアクションで + レイアウトをレンダリングします。 + ほとんどの場合はデフォルトのプラグインで十分でしょうが、 + もし独自のプラグインを作成したい場合は、 + 作成したプラグインクラスの名前を + <code>startMvc()</code> メソッドの + <code>pluginClass</code> オプションで指定します。 + </para> + + <para> + ここで使用するプラグインクラスは + <code>Zend_Controller_Plugin_Abstract</code> + を継承したものでなければなりません。また、コンストラクタの引数で + レイアウトオブジェクトのインスタンスを受け取れるようにする必要があります。 + それ以外の実装内容については自由に決めることができます。 + </para> + + <para> + デフォルトのプラグインは + <code>Zend_Layout_Controller_Plugin_Layout</code> + です。 + </para> + </sect2> + + <sect2 id="zend.layout.advanced.helper"> + <title>アクションヘルパーのカスタマイズ</title> + + <para> + MVC コンポーネントと組み合わせて使用するときに、 + <code>Zend_Layout</code> はアクションコントローラヘルパーを + ヘルパーブローカに登録します。デフォルトのヘルパーである + <code>Zend_Layout_Controller_Action_Helper_Layout</code> + は、レイアウトオブジェクトのインスタンス自身に対する + (何もしない) プロキシとしてはたらきます。 + たいていの場合はこれで十分でしょう。 + </para> + + <para> + 独自の機能を書きたい場合は、 + <code>Zend_Controller_Action_Helper_Abstract</code> + を継承したアクションヘルパークラスを作成します。 + そして、そのクラス名を + <code>startMvc()</code> メソッドの + <code>helperClass</code> オプションに指定します。 + 実装の詳細は自由に決められます。 + </para> + </sect2> + + <sect2 id="zend.layout.advanced.inflector"> + <title>レイアウトスクリプトのパス解決方法のカスタマイズ: インフレクタの使用法</title> + + <para> + <code>Zend_Layout</code> は、<code>Zend_Filter_Inflector</code> + を使用して確立したフィルタチェインで + レイアウト名からレイアウトスクリプトのパスへの変換を行います。 + デフォルトで使用するルールは、まず 'CamelCaseToDash'、 + その後に 'StringToLower'、そして最後にサフィックス 'phtml' + を追加してパスを作成します。たとえば次のようになります。 + </para> + + <itemizedlist> + <listitem><para> + 'foo' は 'foo.phtml' に変換されます。 + </para></listitem> + + <listitem><para> + 'FooBarBaz' は 'foo-bar-baz.phtml' に変換されます。 + </para></listitem> + </itemizedlist> + + <para> + これを変更するには二通りの手段があります。 + <code>Zend_Layout</code> のインスタンスに関連づけられている + インフレクタのルールを変更するか、 + あるいは独自のインフレクタのインスタンスを作成してそれを + <code>Zend_Layout::setInflector()</code> で渡します。 + </para> + + <example id="zend.layout.advanced.inflector.directmodification"> + <title>Zend_Layout のインフレクタを直接変更する</title> + + <para> + インフレクタは、ターゲットと (ひとつあるいは複数の) + ルールを持っています。<code>Zend_Layout</code> + が使用するデフォルトのターゲットは ':script.:suffix' + です。':script' には登録されているレイアウト名、そして + ':suffix' にはインフレクタの静的なルールが渡されます。 + </para> + + <para> + たとえば、レイアウトスクリプトのサフィックスを + 'html' に変更して、CamelCase + 形式の名前をダッシュではなくアンダースコアで区切るようにし、 + かつ小文字への変換もやめてみましょう。 + さらに、スクリプトの格納先を 'layouts' + サブディレクトリに変更します。 + </para> + + <programlisting role="php"><![CDATA[<?php +$layout->getInflector()->setTarget('layouts/:script.:suffix') + ->setStaticRule('suffix', 'html') + ->setFilterRule(array('CamelCaseToUnderscore')); +?>]]></programlisting> + </example> + + <example id="zend.layout.advanced.inflector.custom"> + <title>インフレクタのカスタマイズ</title> + + <para> + ほとんどの場合は、既存のインフレクタを修正するだけで十分でしょう。 + hしかし、さまざまな場所で別の形式のオブジェクトを使い分けたいこともあります。 + <code>Zend_Layout</code> はそんな場合にも対応しています。 + </para> + + <programlisting role="php"><![CDATA[<?php +$inflector = new Zend_Filter_Inflector('layouts/:script.:suffix'); +$inflector->addRules(array( + ':script' => array('CamelCaseToUnderscore'), + 'suffix' => 'html' +)); +$layout->setInflector($inflector); +?>]]></programlisting> + </example> + + <note> + <title>インフレクションを無効にできます</title> + + <para> + インフレクションを無効にしたり有効にしたりするには、 + <code>Zend_Layout</code> オブジェクトのアクセサを使用します。 + これは、たとえばレイアウトビュースクリプトを絶対パスで指定したい場合などに便利です。 + また、レイアウトスクリプトを指定するためのインフレクションが特に不要な場合にも便利です。 + 有効にしたり無効にしたりするには、単純に <code>enableInflection()</code> メソッドおよび + <code>disableInflection()</code> メソッドを使用します。 + </para> + </note> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->

Added: trunk/documentation/manual/ja/module_specs/Zend_Layout-Introduction.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Layout-Introduction.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Layout-Introduction.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,52 <at> <at> +<sect1 id="zend.layout.introduction"> + <title>導入</title> + + <para> + <code>Zend_Layout</code> は、 + 有名な「ツーステップビューパターン」を実装したものです。 + 開発者は、アプリケーションのコンテンツを別のビューの中に埋め込むことができます。 + この「別のビュー」は、通常はサイトのテンプレートとなります。 + このようなテンプレートのことを、他の多くのプロジェクトでは + <emphasis>レイアウト</emphasis> と呼んでいます。 + そこで Zend Framework でもその用語を使用することにします。 + </para> + + <para> + <code>Zend_Layout</code> の目標を以下にまとめます。 + </para> + + <itemizedlist> + <listitem><para> + Zend Framework の MVC コンポーネントと組み合わせて使用する際に、 + レイアウトの選択とレンダリングを自動化する。 + </para></listitem> + + <listitem><para> + レイアウト関連の変数やコンテンツに対して個別のスコープを用意する。 + </para></listitem> + + <listitem><para> + レイアウトの名前やレイアウトスクリプトの解決 (インフレクション)、 + レイアウトスクリプトのパスなどを設定できるようにする。 + </para></listitem> + + <listitem><para> + レイアウトを無効にしたり、 + レイアウトスクリプトやその他の状態を変更したりできるようにする。 + これらの操作はアクションコントローラおよびビュースクリプトの両方から行えるようにする。 + </para></listitem> + + <listitem><para> + <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link> + と同じルール (インフレクション) でスクリプトの解決を行うが、 + 別のルールも使用できるようにする。 + </para></listitem> + + <listitem><para> + Zend Framework の MVC コンポーネント以外からも使用できるようにする。 + </para></listitem> + </itemizedlist> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_Layout-Introduction.xml ___________________________________________________________________ Name: svn:executable + *

Added: trunk/documentation/manual/ja/module_specs/Zend_Layout-Options.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Layout-Options.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Layout-Options.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,223 <at> <at> +<sect1 id="zend.layout.options"> + <title>Zend_Layout の設定オプション</title> + + <para> + <code>Zend_Layout</code> にはさまざまな設定オプションがあります。 + オプションを設定する方法には次のようなものがあります。 + まずアクセサメソッドをコールすること、 + 次に配列や <code>Zend_Config</code> オブジェクトをコンストラクタあるいは + <code>startMvc()</code> に渡すこと、 + オプションの配列を <code>setOptions()</code> に渡すこと、 + そして <code>Zend_Config</code> オブジェクトを <code>setConfig()</code> + に渡すことです。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>layout</emphasis>: + 使用するレイアウト。現在のインフレクタを使用して名前を解決し、 + 適切なレイアウトビュースクリプトを使用します。デフォルトでは、この値は + 'layout' で、'layout.phtml' に解決されます。 + アクセサは <code>setLayout()</code> と <code>getLayout()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>layoutPath</emphasis>: + レイアウトビュースクリプトの基底パス。 + アクセサは <code>setLayoutPath()</code> と + <code>getLayoutPath()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>contentKey</emphasis>: + デフォルトのコンテンツに使用するレイアウト変数 + (MVC と組み合わせて使用する場合のみ)。 + デフォルト値は 'content' です。 + アクセサは <code>setContentKey()</code> と + <code>getContentKey()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>mvcSuccessfulActionOnly</emphasis>: + MVC とともに使用します。このフラグを true にすると、 + アクションが例外をスローした際にレイアウトをレンダリングしません + (これにより、 + <link linkend="zend.controller.plugins.errorhandler">ErrorHandler + プラグイン</link> を使用している際の二重レンダリング問題を回避します)。 + デフォルトでは、このフラグは true です。 + アクセサは <code>setMvcSuccessfulActionOnly()</code> と + <code>getMvcSuccessfulActionOnly()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>view</emphasis>: + レンダリングの際に使用するビューオブジェクト。 + MVC と組み合わせて使用した場合、 + ビューオブジェクトを明示しなければ <code>Zend_Layout</code> は + <link linkend="zend.controller.actionhelpers.viewrenderer"> + ViewRenderer</link> + で登録されたビューオブジェクトを使用します。 + アクセサは <code>setView()</code> と + <code>getView()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>helperClass</emphasis>: + <code>Zend_Layout</code> を MVC + コンポーネントを組み合わせて使用する際のアクションヘルパークラス。 + デフォルトでは、これは + <code>Zend_Layout_Controller_Action_Helper_Layout</code> です。 + アクセサは <code>setHelperClass()</code> と + <code>getHelperClass()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>pluginClass</emphasis>: + <code>Zend_Layout</code> を MVC + コンポーネントを組み合わせて使用する際のフロントコントローラプラグインクラス。 + デフォルトでは、これは + <code>Zend_Layout_Controller_Plugin_Layout</code> です。 + アクセサは <code>setPluginClass()</code> と + <code>getPluginClass()</code> です。 + </para></listitem> + + <listitem><para> + <emphasis>inflector</emphasis>: + レイアウト名をレイアウトビュースクリプトのパスに解決する際に使用するインフレクタ。 + 詳細は <link + linkend="zend.layout.advanced.inflector"> + <code>Zend_Layout</code> インフレクタのドキュメント + </link> を参照ください。 + アクセサは <code>setInflector()</code> と + <code>getInflector()</code> です。 + </para></listitem> + </itemizedlist> + + <note> + <title>helperClass と pluginClass は startMvc() で渡す必要がある</title> + + <para> + <code>helperClass</code> と + <code>pluginClass</code> の設定を有効にするには、 + <code>startMvc()</code> のオプションで指定する必要があります。 + それ以降で指定しても効果はありません。 + </para> + </note> + + <sect2 id="zend.layout.options.examples"> + <title>例</title> + + <para> + 以下の例では、次のような <code>$options</code> + 配列と <code>$config</code> オブジェクトを前提としています。 + </para> + + <programlisting role="php"><![CDATA[<?php +$options = array( + 'layout' => 'foo', + 'layoutPath' => '/path/to/layouts', + 'contentKey' => 'CONTENT', // MVC を使わない場合は無視されます +); +?>]]></programlisting> + + <programlisting role="php"><![CDATA[<?php +/** +[layout] +layout = "foo" +layoutPath = "/path/to/layouts" +contentKey = "CONTENT" +*/ +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); +?>]]></programlisting> + + <example id="zend.layout.options.examples.constructor"> + <title>オプションをコンストラクタあるいは startMvc() で渡す</title> + + <para> + コンストラクタおよび静的メソッド <code>startMvc()</code> + は、どちらもオプションの配列か + <code>Zend_Config</code> オブジェクトを受け取ることができます。 + 受け取った内容をもとに + <code>Zend_Layout</code> インスタンスの設定を行います。 + </para> + + <para> + まず、配列を渡す方法を見てみましょう。 + </para> + + <programlisting role="php"><![CDATA[<?php +// コンストラクタを使用します +$layout = new Zend_Layout($options); + +// startMvc() を使用します +$layout = Zend_Layout::startMvc($options); +?>]]></programlisting> + + <para> + 次に config オブジェクトを使用する方法です。 + </para> + + <programlisting role="php"><![CDATA[<?php +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); + +// コンストラクタを使用します +$layout = new Zend_Layout($config); + +// startMvc() を使用します +$layout = Zend_Layout::startMvc($config); +?>]]></programlisting> + + <para> + 基本的に、これは <code>Zend_Layout</code> + インスタンスをカスタマイズするためのもっとも簡単な方法となります。 + </para> + </example> + + <example id="zend.layout.options.examples.setoptionsconfig"> + <title>setOption() および setConfig() の使用</title> + + <para> + 時には、インスタンスを作成した後で <code>Zend_Layout</code> + を設定したくなることもあるでしょう。そんな場合は + <code>setOptions()</code> や <code>setConfig()</code> + を使用します。 + </para> + + <programlisting role="php"><![CDATA[<?php +// オプションの配列を使用します +$layout->setOptions($options); + +// Zend_Config オブジェクトを使用します +$layout->setConfig($options); +?>]]></programlisting> + + <para> + しかし、ここで注意すべき点があります。 + <code>pluginClass</code> や <code>helperClass</code> + のように、オプションによってはこのメソッドで指定しても無意味なものもあるのです。 + これらは、コンストラクタあるいは <code>startMvc()</code> + メソッドで指定する必要があります。 + </para> + </example> + + <example id="zend.layout.options.examples.accessors"> + <title>アクセサの使用</title> + + <para> + 最後に、<code>Zend_Layout</code> + のインスタンスをアクセサで設定することもできます。 + すべてのアクセサは流れるようなインターフェイスを実装しており、 + メソッドコールを連結して行えます。 + </para> + + <programlisting role="php"><![CDATA[<?php +$layout->setLayout('foo') + ->setLayoutPath('/path/to/layouts') + ->setContentKey('CONTENT'); +?>]]></programlisting> + </example> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_Layout-Options.xml ___________________________________________________________________ Name: svn:executable + *

Added: trunk/documentation/manual/ja/module_specs/Zend_Layout-QuickStart.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Layout-QuickStart.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Layout-QuickStart.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,292 <at> <at> +<sect1 id="zend.layout.quickstart"> + <title>Zend_Layout クイックスタート</title> + + <para> + <code>Zend_Layout</code> の使用法は大きくふたつに分けられます。 + Zend Framework の MVC を使用する方法とそれ以外の方法です。 + </para> + + <sect2 id="zend.layout.quickstart.layouts"> + <title>レイアウトスクリプト</title> + + <para> + どちらにしても、まずはレイアウトスクリプトを作成しなければなりません。 + レイアウトスクリプトは、単純に Zend_View + (あるいはその他のあなたが使用しているビュー実装) を用いて作成します。 + レイアウト変数の登録には <code>Zend_Layout</code> の + <link linkend="zend.view.helpers.initial.placeholder">プレースホルダ</link> + を使用します。プレースホルダへのアクセスは、 + プレースホルダヘルパーを使用するか、 + あるいはレイアウトヘルパーのレイアウトオブジェクトのプロパティを使用します。 + </para> + + <para> + たとえばこのようになります。 + </para> + + <programlisting role="php"><![CDATA[ +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>私のサイト</title> +</head> +<body> +<?php + // レイアウトヘルパーで使用するコンテンツのキーを取得します + echo $this->layout()->content; + + // プレースホルダヘルパーで 'foo' キーを取得します + echo $this->placeholder('Zend_Layout')->foo; + + // レイアウトオブジェクトを取得し、そこから変数のキーを取得します + $layout = $this->layout(); + echo $layout->bar; + echo $layout->baz; +?> +</body> +</html> +]]></programlisting> + + <para> + <code>Zend_Layout</code> は <code>Zend_View</code> + を用いてレンダリングをしているので、 + 登録されているビューヘルパーはすべて使用することができます。 + またビューに登録されている変数も使用することができます。 + 特に便利なのは、さまざまな <link + linkend="zend.view.helpers.initial.placeholder">プレースホルダヘルパー</link> + を使用できることでしょう。 + これらを用いると、たとえば &lt;head&gt; + セクションやナビゲーション部などのコンテンツを取得することができます。 + </para> + + <programlisting role="php"><![CDATA[ +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title><?= $this->headTitle() ?></title> + <?= $this->headScript() ?> + <?= $this->headStyle() ?> +</head> +<body> + <?= $this->render('header.phtml') ?> + + <div id="nav"><?= $this->placeholder('nav') ?></div> + + <div id="content"><= $this->layout()->content ?></div> + + <?= $this->render('footer.phtml') ?> +</body> +</html> +]]></programlisting> + </sect2> + + <sect2 id="zend.layout.quickstart.mvc"> + <title>Zend_Layout を Zend Framework の MVC で使用する方法</title> + + <para> + <code>Zend_Controller</code> には拡張用の機能が豊富に用意されています。 + これは <link linkend="zend.controller.plugins">フロントコントローラ + プラグイン</link> や <link + linkend="zend.controller.actionhelpers">アクションコントローラ + ヘルパー</link> によって実現されているものです。 + <code>Zend_View</code> にも <link + linkend="zend.view.helpers">ヘルパー</link> は存在します。 + <code>Zend_Layout</code> を MVC コンポーネントとともに使用すると、 + これらのさまざまな拡張ポイントの恩恵を受けることになります。 + </para> + + <para> + <code>Zend_Layout::startMvc()</code> は、オプションの設定項目を指定して + <code>Zend_Layout</code> のインスタンスを作成します。 + そして、フロントコントローラプラグインを登録し、 + ディスパッチループの終了後にレイアウトの中身をレンダリングするようにします。 + また、アクションヘルパーを登録して、 + アクションコントローラからレイアウトオブジェクトにアクセスできるようにします。 + さらに、ビュースクリプトからレイアウトのインスタンスを取得するには + <code>layout</code> ビューヘルパーを使用します。 + </para> + + <para> + まずは、MVC と組み合わせるための Zend_Layout + のインスタンスの作成方法を見てみましょう。 + </para> + + <programlisting role="php"><![CDATA[<?php +// 起動ファイル内で +Zend_Layout::startMvc(); +?>]]></programlisting> + + <para> + <code>startMvc()</code> には、オプションの配列あるいは + <code>Zend_Config</code> オブジェクトを渡すことができます。 + これによってインスタンスをカスタマイズします。 + オプションの詳細については <xref linkend="zend.layout.options" /> + を参照ください。 + </para> + + <para> + アクションコントローラからは、 + アクションヘルパーでレイアウトのインスタンスにアクセスします。 + </para> + + <programlisting role="php"><![CDATA[<?php +class FooController extends Zend_Controller_Action +{ + public function barAction() + { + // このアクションではレイアウトを無効にします + $this->_helper->layout->disableLayout(); + } + + public function bazAction() + { + // このアクションでは別のレイアウトスクリプトを使用します + $this->_helper->layout->setLayout('foobaz'); + }; +} +?>]]></programlisting> + + <para> + ビュースクリプトでは、<code>layout</code> + ビューヘルパーを用いてレイアウトオブジェクトにアクセスします。 + このビューヘルパーは、他のヘルパーとは異なり引数を受け取りません。 + そして文字列ではなくオブジェクトを返します。 + これにより、レイアウトオブジェクトのメソッドをすぐにコールできるようになります。 + </para> + + <programlisting role="php"><![CDATA[ +<?php $this->layout()->setLayout('foo'); // 別のレイアウトを設定します ?> +]]></programlisting> + + <para> + MVC に登録した <code>Zend_Layout</code> + のインスタンスを取得するには、静的メソッド + <code>getMvcInstance()</code> を使用します。 + </para> + + <programlisting role="php"><![CDATA[<?php +// startMvc() がまだコールされていない場合は null を返します +$layout = Zend_Layout::getMvcInstance(); +?>]]></programlisting> + + <para> + 最後に、<code>Zend_Layout</code> + のフロントコントローラプラグインが持つ、 + レイアウトのレンダリング以外の重要な機能をひとつ紹介します。 + レスポンスオブジェクトから名前つきセグメントをすべて取得し、 + それをレイアウトの変数に代入するというものです。 + このとき 'default' セグメントは 'content' という名前の変数に代入します。 + これにより、アプリケーションのコンテンツにアクセスして + それをビュースクリプト内でレンダリングできるようになります。 + </para> + + <para> + たとえば、こんな例を考えてみましょう。あなたの書いたコードがまず + <code>FooController::indexAction()</code> を実行し、 + デフォルトのレスポンスセグメントに何らかのコンテンツをレンダリングしてから + <code>NavController::menuAction()</code> に転送します。 + ここでは、レンダリングしたコンテンツをレスポンスセグメント + 'nav' に格納します。最後に + <code>CommentController::fetchAction()</code> + に転送してコメントを取得しますが、その内容はデフォルトのレスポンスセグメントに + (追記する方式で) レンダリングします。 + そして、ビュースクリプト側ではそれを個別にレンダリングします。 + </para> + + <programlisting role="php"><![CDATA[ +<body> + <!-- /nav/menu のレンダリング --> + <div id="nav"><?= $this->layout()->nav ?></div> + + <!-- /foo/index + /comment/fetch のレンダリング --> + <div id="content"><?= $this->layout()->content ?></div> +</body> +]]></programlisting> + + <para> + この機能は、ActionStack <link linkend="zend.controller.actionhelpers.actionstack"> + アクションヘルパー</link> や <link + linkend="zend.controller.plugins.standard.actionstack">プラグイン</link> + と組み合わせて使うと非常に便利です。 + アクションのスタックを作成してそれをループさせ、 + ウィジェット形式のページを作成するというわけです。 + </para> + </sect2> + + <sect2 id="zend.layout.quickstart.standalone"> + <title>Zend_Layout を単体のコンポーネントとして使用する方法</title> + + <para> + 単体のコンポーネントとして使用した場合は、Zend_Layout + を MVC に組み込んだ場合に使用できる機能のほとんどが使えなくなります。 + しかし、それでも次のふたつのメリットがあります。 + </para> + + <itemizedlist> + <listitem><para> + レイアウト変数のスコープの管理。 + </para></listitem> + + <listitem><para> + レイアウトビュースクリプトとその他のビュースクリプトの分離。 + </para></listitem> + </itemizedlist> + + <para> + 単体のコンポーネントとして使用するには、 + 単純にレイアウトオブジェクトのインスタンスを作成して + 各種アクセサで状態を設定し、 + オブジェクトのプロパティに変数を設定してから + レイアウトをレンダリングします。 + </para> + + <programlisting role="php"><![CDATA[<?php +$layout = new Zend_Layout(); + +// レイアウトスクリプトのパスを設定します +$layout->setLayoutPath('/path/to/layouts'); + +// 変数を設定します +$layout->content = $content; +$layout->nav = $nav; + +// 別のレイアウトスクリプトを選択します +$layout->setLayout('foo'); + +// 最終的なレイアウトをレンダリングします +echo $layout->render(); +?>]]></programlisting> + </sect2> + + <sect2 id="zend.layout.quickstart.example"> + <title>サンプルレイアウト</title> + + <para> + 一枚の絵のほうがが千の言葉よりも雄弁なこともあります。 + これは、サンプルのレイアウトスクリプトをすべてまとめたときに + どのように表示されるのかを示すものです。 + </para> + + <para> + <inlinegraphic align="center" valign="middle" + fileref="figures/zend.layout.quickstart.example.png" format="PNG" /> + </para> + + <para> + 実際の要素の並び順は、使用する CSS によってさまざまに異なります。 + たとえば、絶対位置指定を用いれば、 + ナビゲーション部を本文よりも後に表示させても上部に表示させることができるでしょう。 + 同じことが、サイドバーやヘッダにもいえます。 + しかし、そのコンテンツを作り出すもとの仕組みは同じです。 + </para> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_Layout-QuickStart.xml ___________________________________________________________________ Name: svn:executable + *

Added: trunk/documentation/manual/ja/module_specs/Zend_Loader-PluginLoader.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_Loader-PluginLoader.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_Loader-PluginLoader.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,196 <at> <at> +<sect1 id="zend.loader.pluginloader"> + <title>プラグインのロード</title> + + <para> + Zend Framework の多くのコンポーネントはプラグイン方式を採用しており、 + クラスのプレフィックスとクラスファイルへのパスを指定して動的に機能を読み込むことができます。 + このファイルは <code>include_path</code> にある必要がなく、 + また標準の命名規約に従っている必要もありません。 + <code>Zend_Loader_PluginLoader</code> は、この処理のための共通機能を提供します。 + </para> + + <para> + <code>PluginLoader</code> の基本的な使用法は Zend Framework + の命名規約に従った形式です。各クラスを個別のファイルに分けて、 + アンダースコアをディレクトリ区切り文字としてパスを解決します。 + オプションのクラスプレフィックスを指定して、 + 特定のプラグインクラスをロードする際の先頭にそれを付加することができます。 + また、パスの検索は LIFO (後入れ先出し) 方式で行います。 + LIFO 方式の検索とクラスプレフィックスを用いることで、 + プラグインに独自の名前空間を指定することができます。 + そして、事前に登録されているプラグインを上書きできるようになります。 + </para> + + <sect2 id="zend.loader.pluginloader.usage"> + <title>基本的な使用例</title> + + <para> + 次のようなディレクトリ構造とクラスファイル群の構成を考えてみましょう。 + トップディレクトリと library ディレクトリは + include_path に含まれているものとします。 + </para> + + <programlisting role="txt"><![CDATA[ +application/ + modules/ + foo/ + views/ + helpers/ + FormLabel.php + FormSubmit.php + bar/ + views/ + helpers/ + FormSubmit.php +library/ + Zend/ + View/ + Helper/ + FormLabel.php + FormSubmit.php + FormText.php +]]></programlisting> + + <para> + では、プラグインローダーを作成してビューヘルパー群の場所を指定しましょう。 + </para> + + <programlisting role="php"><![CDATA[<?php +$loader = new Zend_Loader_PluginLoader(); +$loader->addPrefixPath('Zend_View_Helper', 'Zend/View/Helper/') + ->addPrefixPath('Foo_View_Helper', 'application/modules/foo/views/helpers') + ->addPrefixPath('Bar_View_Helper', 'application/modules/bar/views/helpers'); +?>]]></programlisting> + + <para> + こうしておけば、クラス名のプレフィックスを除いた部分を指定するだけで + ビューヘルパーをロードできるようになります。 + </para> + + <programlisting role="php"><![CDATA[<?php +// 'FormText' ヘルパーをロードします +$formTextClass = $loader->load('FormText'); // 'Zend_View_Helper_FormText'; + +// 'FormLabel' ヘルパーをロードします +$formLabelClass = $loader->load('FormLabel'); // 'Foo_View_Helper_FormLabel' + +// 'FormSubmit' ヘルパーをロードします +$formSubmitClass = $loader->load('FormSubmit'); // 'Bar_View_Helper_FormSubmit' +?>]]></programlisting> + + <para> + クラスを読み込めたら、次はそのインスタンスを作成します。 + </para> + + <note> + <title>同じプレフィックスでの複数のパスの登録</title> + + <para> + 時には、同じプレフィックスを複数のパスで使用することもあるかもしれません。 + <code>Zend_Loader_PluginLoader</code> + は、実際には各プレフィックスに対応するパスを配列で管理しています。 + そして、最後に登録されたパスから順に検索を行います。 + これは、incubator のコンポーネントを使用する場合などに便利です。 + </para> + </note> + + <note> + <title>インスタンス作成時のパスの定義</title> + + <para> + プレフィックスとパス + (あるいはプレフィックスと複数のパス) のペアの配列を、 + オプションのパラメータとしてコンストラクタに渡すことができます。 + </para> + + <programlisting role="php"><![CDATA[<?php +$loader = new Zend_Loader_PluginLoader(array( + 'Zend_View_Helper' => 'Zend/View/Helper/', + 'Foo_View_Helper' => 'application/modules/foo/views/helpers', + 'Bar_View_Helper' => 'application/modules/bar/views/helpers' +)); +?>]]></programlisting> + </note> + + <para> + <code>Zend_Loader_PluginLoader</code> には、 + 複数のプラグインの間でオブジェクトを共有する機能もあります。 + その際にシングルトンインスタンスを作成する必要はありません。 + この機能は、静的レジストリを用いて実現しています。 + インスタンスを作成する際に、 + コンストラクタの 2 番目のパラメータでレジストリを指定します。 + </para> + + <programlisting role="php"><![CDATA[<?php +// プラグインを静的レジストリ 'foobar' に保存します +$loader = new Zend_Loader_PluginLoader(array(), 'foobar'); +?>]]></programlisting> + + <para> + <code>PluginLoader</code> がインスタンス化したその他のコンポーネントで + このレジストリ名を使用すると、すでに読み込まれているパスやプラグインを使用できます。 + </para> + </sect2> + + <sect2 id="zend.loader.pluginloader.paths"> + <title>プラグインのパスの操作</title> + + <para> + 先ほどのセクションの例では、プラグインローダーでパスを追加する方法を示しました。 + では、すでに読み込まれているパスを調べたりそれを削除したりしたい場合は、 + いったいどうすればいいのでしょうか? + </para> + + <itemizedlist> + <listitem><para> + <code>getPaths($prefix = null)</code> は、 + <code>$prefix</code> を省略した場合は + すべてのパスをプレフィックス / パスのペアで返します。 + <code>$prefix</code> を指定した場合は、 + そのプレフィックスに対応するパスのみを返します。 + </para></listitem> + + <listitem><para> + <code>clearPaths($prefix = null)</code> は、 + デフォルトですべての登録済みパスをクリアします。 + <code>$prefix</code> を指定した場合は、 + そのプレフィックスに関連づけられたパスが登録されている場合にそれだけをクリアします。 + </para></listitem> + + <listitem><para> + <code>removePrefixPath($prefix, $path = null)</code> は、 + 指定したプレフィックスに関連づけられた特定のパスを削除します。 + <code>$path</code> を省略した場合は、 + そのプレフィックスのすべてのパスを削除します。 + <code>$path</code> を指定した場合は、 + そのパスが存在すればそのパスだけを削除します。 + </para></listitem> + </itemizedlist> + </sect2> + + <sect2 id="zend.loader.pluginloader.checks"> + <title>プラグインの確認とクラス名の取得</title> + + <para> + 時には、プラグインクラスがロードされているかどうかを調べてから何かを行いたいこともあるでしょう。 + <code>isLoaded()</code> は、プラグイン名を受け取ってその状態を返します。 + </para> + + <para> + <code>PluginLoader</code> の使用法としてもうひとつよくあるのが、 + 読み込まれているクラスの完全なクラス名を調べることです。 + <code>getClassName()</code> がこの機能を実現しています。 + 一般に、これは <code>isLoaded()</code> と組み合わせて使用します。 + </para> + + <programlisting role="php"><![CDATA[<?php +if ($loader->isLoaded('Adapter')) { + $class = $loader->getClassName('Adapter'); + $adapter = call_user_func(array($class, 'getInstance')); +} +?>]]></programlisting> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->

Added: trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Action.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Action.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Action.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,47 <at> <at> +<sect3 id="zend.view.helpers.initial.action"> + <title>Action ビューヘルパー</title> + + <para> + <code>Action</code> ビューヘルパーは、 + ビュースクリプトから指定したコントローラのアクションを実行し、 + その結果のレスポンスオブジェクトを返します。 + これは、特定のアクションが再利用可能なコンテンツを返す場合や、 + いわゆる "ウィジェット風" のコンテンツを返す場合に便利です。 + </para> + + <para> + 最終的に <code>_forward()</code> されたりリダイレクトされたりするアクションは使えず、 + 空の文字列を返します。 + </para> + + <para> + <code>Action</code> ビューヘルパーの API + はコントローラアクションを起動する大半の MVC + コンポーネントと同じで、<code>action($action, + $controller, $module = null, array $params = array())</code> + のようになります。<code>$action</code> と <code>$controller</code> + は必須です。モジュールを省略した場合はデフォルトのモジュールを使用します。 + </para> + + <example id="zend.view.helpers.initial.action.usage"> + <title>Action ビューヘルパーの基本的な使用法</title> + + <para> + たとえば <code>CommentController</code> に + <code>listAction()</code> というメソッドがあったとしましょう。 + コメント一覧を取得するために現在のリクエストからこのメソッドを起動するには、 + 次のようにします。 + </para> + + <programlisting role="php"><![CDATA[ +<div id="sidebar right"> + <div class="item"> + <?= $this->action('list', 'comment', null, array('count' => 10)); ?> + </div> +</div> +]]></programlisting> + </example> +</sect3> +<!-- +vim:se ts=4 sw=4 et: +--> Property changes on: trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Action.xml ___________________________________________________________________ Name: svn:executable + *

Added: trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Partial.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Partial.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Partial.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,192 <at> <at> +<sect3 id="zend.view.helpers.initial.partial"> + <title>Partial ヘルパー</title> + + <para> + <code>Partial</code> ビューヘルパーは、 + 指定したテンプレートを自分自身の変数スコープ内でレンダリングします。 + 主な使い道は、 + 再利用可能な部分テンプレートを変数名の競合を気にせずに使うというものです。 + さらに、特定のモジュールから部分ビュースクリプトを指定できるようになります。 + </para> + + <para> + <code>Partial</code> と兄弟関係にある <code>PartialLoop</code> + ビューヘルパーは、反復処理可能なデータを渡して + その各要素に対してレンダリングを行うものです。 + </para> + + <example id="zend.view.helpers.initial.partial.usage"> + <title>Partial の基本的な使用法</title> + + <para> + partial の基本的な使用法は、 + 自分自身のビューのスコープで部分テンプレートをレンダリングすることです。 + 次のようなスクリプトを考えてみましょう。 + </para> + + <programlisting role="php"><![CDATA[ +<?php // partial.phtml ?> +<ul> + <li>From: <?= $this->escape($this->from) >?</li> + <li>Subject: <?= $this->escape($this->subject) >?</li> +</ul> +]]></programlisting> + + <para> + これを、ビュースクリプトから次のようにコールします。 + </para> + + <programlisting role="php"><![CDATA[ +<?= $this->partial('partial.phtml', array( + 'from' => 'Team Framework', + 'subject' => 'view partials')); ?> +]]></programlisting> + + <para> + レンダリングした結果は、このようになります。 + </para> + + <programlisting role="html"><![CDATA[ +<ul> + <li>From: Team Framework</li> + <li>Subject: view partials</li> +</ul> +]]></programlisting> + + <note> + <title>モデルは何?</title> + + <para> + <code>Partial</code> ビューヘルパーが使用するモデルは、 + 次のいずれかとなります。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>配列</emphasis>。 + 配列を渡す場合は、連想配列形式でなければなりません。 + そのキーと値のペアがビューに渡され、 + キーが変数名となります。 + </para></listitem> + + <listitem><para> + <emphasis>toArray() メソッドを実装したオブジェクト</emphasis>。 + そのオブジェクトの <code>toArray()</code> + メソッドを実行した結果が、ビューオブジェクトに渡されます。 + </para></listitem> + + <listitem><para> + <emphasis>標準のオブジェクト</emphasis>。 + それ以外のオブジェクトについては、 + <code>object_get_vars()</code> の結果 + (そのオブジェクトのすべての public プロパティ) + がビューオブジェクトに渡されます。 + </para></listitem> + </itemizedlist> + </note> + </example> + + <example id="zend.view.helpers.initial.partial.partialloop"> + <title>PartialLoop による反復処理可能なモデルのレンダリング</title> + + <para> + 一般に、ループ内で partial + を使用して特定のコンテンツを繰り返しレンダリングしたくなることもあるでしょう。 + こうすることで、繰り返し表示される大量のコンテンツや複雑な表示ロジックを + ひとつにまとめることができます。 + しかし、この方法はパフォーマンスに影響を及ぼします。 + というのも、partial ヘルパーをループ内で毎回実行することになるからです。 + </para> + + <para> + <code>PartialLoop</code> ビューヘルパーは、 + この問題を解決します。これを使用すると、反復処理可能な内容 + (配列、あるいは <code>Iterator</code> を実装したオブジェクト) + をモデルに渡せるようになります。 + そしてその各要素が partial スクリプトへモデルとして渡されます。 + 各要素の内容は、<code>Partial</code> + ビューヘルパーが受け付ける任意の形式のモデルとすることができます。 + </para> + + <para> + 次のような部分ビュースクリプトを考えます。 + </para> + + <programlisting role="php"><![CDATA[ +<? // partialLoop.phtml ?> + <dt><?= $key ?></dt> + <dd><?= $value ?></dd> + +]]></programlisting> + + <para> + そして "モデル" はこのようになります。 + </para> + + <programlisting role="php"><![CDATA[<?php +$model = array( + array('key' => 'Mammal', 'value' => 'Camel'), + array('key' => 'Bird', 'value' => 'Penguin'), + array('key' => 'Reptile', 'value' => 'Asp'), + array('key' => 'Fish', 'value' => 'Flounder'), +); +?>]]></programlisting> + + <para> + そして、ビュースクリプト内で + <code>PartialLoop</code> ヘルパーを実行します。 + </para> + + <programlisting role="php"><![CDATA[ +<dl> +<?= $this->partialLoop('partialLoop.phtml', $model) ?> +</dl> +]]></programlisting> + + <programlisting role="html"><![CDATA[ +<dl></dl> + <dt>Mammal</dt> + <dd>Camel</dd> + + <dt>Bird</dt> + <dd>Penguin</dd> + + <dt>Reptile</dt> + <dd>Asp</dd> + + <dt>Fish</dt> + <dd>Flounder</dd> + +</dl> +]]></programlisting> + </example> + + <example id="zend.view.helpers.initial.partial.modules"> + <title>他のモジュールの Partial のレンダリング</title> + + <para> + 時には partial が別のモジュールに存在することもあるでしょう。 + そのモジュールの名前がわかっていれば、モジュール名を + <code>partial()</code> あるいは <code>partialLoop()</code> + の 2 番目の引数として渡し、 + <code>$model</code> を 3 番目の引数に移動させることができます。 + </para> + + <para> + たとえば、'list' モジュールにある pager というスクリプトを使用したい場合は、 + 次のようにします。 + </para> + + <programlisting role="php"><![CDATA[ +<?= $this->partial('pager.phtml', 'list', $pagerData) ?> +]]></programlisting> + + <para> + こうすると、特定の partial を他のモジュールで再利用できるようになります。 + 再利用可能な partial は、共有のビュースクリプトのパスに配置することをおすすめします。 + </para> + </example> +</sect3> +<!-- +vim:se ts=4 sw=4 et: +-->

Added: trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Placeholder.xml (0 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Placeholder.xml (rev 0) +++ trunk/documentation/manual/ja/module_specs/Zend_View-Helpers-Placeholder.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -0,0 +1,203 <at> <at> +<sect3 id="zend.view.helpers.initial.placeholder"> + <title>Placeholder ヘルパー</title> + + <para> + <code>Placeholder</code> ビューヘルパーは、 + ビュースクリプトとビューのインスタンスとの間でコンテンツを永続化させます。 + それ以外の便利な機能としては次のようなものがあります。 + たとえばコンテンツの集約、ビュースクリプトの内容をキャプチャして後で再利用、 + コンテンツの前後へのテキストの追加 (そして集約したコンテンツ間のセパレータの追加) + などです。 + </para> + + <example id="zend.view.helpers.initial.placeholder.usage"> + <title>プレースホルダの基本的な使用法</title> + + <para> + プレースホルダの基本的な使用法は、ビューのデータを永続化させることです。 + <code>Placeholder</code> ヘルパーを起動する際にプレースホルダ名を指定し、 + ヘルパーはプレースホルダコンテナオブジェクトを返します。 + これを処理するなり、単純に echo するなりして使用できます。 + </para> + + <programlisting role="php"><![CDATA[ +<?php $this->placeholder('foo')->set("Some text for later") ?> + +<?php + echo $this->placeholder('foo'); + // 出力は "Some text for later" となります +?> +]]></programlisting> + </example> + + <example id="zend.view.helpers.initial.placeholder.aggregation"> + <title>プレースホルダによるコンテンツの集約</title> + + <para> + プレースホルダによるコンテンツの集約も、時には便利です。 + たとえば、ビュースクリプトで変数の配列を保持し、 + 後で表示するためのメッセージを取得しておくと、 + それをどのようにレンダリングするかを後で決めることができます。 + </para> + + <para> + <code>Placeholder</code> ビューヘルパーは、 + <code>ArrayObject</code> を継承したコンテナを使用します。 + これは、配列をより高機能に操作できるものです。 + さらに、コンテナに格納された内容をフォーマットするために + さまざまなメソッドが用意されています。 + </para> + + <itemizedlist> + <listitem><para> + <code>setPrefix($prefix)</code> は、 + コンテンツの先頭に付加するテキストを設定します。 + <code>getPrefix()</code> を使用すると、 + その時点での設定内容を取得できます。 + </para></listitem> + + <listitem><para> + <code>setPostfix($prefix)</code> は、 + コンテンツの末尾に付加するテキストを設定します。 + <code>getPostfix()</code> を使用すると、 + その時点での設定内容を取得できます。 + </para></listitem> + + <listitem><para> + <code>setSeparator($prefix)</code> は、 + 各コンテンツの間に挿入するテキストを設定します。 + <code>getSeparator()</code> を使用すると、 + その時点での設定内容を取得できます。 + </para></listitem> + + <listitem><para> + <code>setIndent($prefix)</code> は、 + コンテンツの字下げ幅を設定します。 + 整数値を渡すと、渡された数のスペースを使用します。 + 文字列を渡すと、その文字列を使用します。 + <code>getIndent()</code> を使用すると、 + その時点での設定内容を取得できます。 + </para></listitem> + </itemizedlist> + + <programlisting role="php"><![CDATA[ +<!-- 最初のビュースクリプト --> +<?php $this->placeholder('foo')->exchangeArray($this->data) ?> +]]></programlisting> + + <programlisting role="php"><![CDATA[ +<!-- 後で使用するビュースクリプト --> +<?php +$this->placeholder('foo')->setPrefix("<ul>\n <li>") + ->setSeparator("</li><li>\n") + ->setIndent(4) + ->setPostfix("</li></ul>\n"); +?> + +<?php + echo $this->placeholder('foo'); + // 順序なしリストをきれいに字下げして出力します +?> +]]></programlisting> + + <para> + <code>Placeholder</code> コンテナオブジェクトは + <code>ArrayObject</code> を継承しているので、 + 単純にコンテナに格納するのではなく + そのコンテナの特定のキーにコンテンツを格納するのも簡単です。 + キーへのアクセスは、オブジェクトのプロパティか配列のキーのいずれでも可能です。 + </para> + + <programlisting role="php"><![CDATA[ +<?php $this->placeholder('foo')->bar = $this->data ?> +<?php echo $this->placeholder('foo')->bar ?> + +<?php +$foo = $this->placeholder('foo'); +echo $foo['bar']; +?> +]]></programlisting> + </example> + + <example id="zend.view.helpers.initial.placeholder.aggregation"> + <title>プレースホルダによるコンテンツのキャプチャ</title> + + <para> + 時には、プレースホルダの中身を + テンプレートに渡しやすいようビュースクリプトで保持することもあるでしょう。 + <code>Placeholder</code> ビューヘルパーは、 + 任意のコンテンツをキャプチャして後でレンダリングすることができます。 + そのために使用する API は次のようなものです。 + </para> + + <itemizedlist> + <listitem> + <para> + <code>captureStart($type, $key)</code> は、 + コンテンツのキャプチャを開始します。 + </para> + + <para> + <code>$type</code> は、 + <code>Placeholder</code> の定数 <code>APPEND</code> あるいは + <code>SET</code> のいずれかとなります。<code>APPEND</code> + を指定すると、キャプチャされたコンテンツが + プレースホルダ内の現在のコンテンツの末尾に追加されます。 + <code>SET</code> の場合は、 + キャプチャされたコンテンツをそれ単体でプレースホルダの値として使用します + (それまでに登録されていたコンテンツを上書きします)。 + デフォルトの <code>$type</code> は + <code>APPEND</code> です。 + </para> + + <para> + <code>$key</code> には、コンテンツのキャプチャ先として + プレースホルダのコンテナの特定のキーを指定することができます。 + </para> + + <para> + <code>captureStart()</code> は、 + <code>captureEnd()</code> がコールされるまで他のキャプチャをロックします。 + 同一のプレースホルダコンテナでキャプチャをネストすることはできません。 + しようとすると例外が発生します。 + </para> + </listitem> + + <listitem><para> + <code>captureEnd()</code> は、 + コンテンツのキャプチャを終了して、 + <code>captureStart()</code> + がコールされたときの指定に応じてそれをコンテナに格納します。 + </para></listitem> + </itemizedlist> + + <programlisting role="php"><![CDATA[ +<!-- デフォルトのキャプチャは追記モードです --> +<?php $this->placeholder('foo')->captureStart() +foreach ($this->data as $datum): ?> +<div class="foo"> + <h2><?= $datum->title ?></h2> + <p><?= $datum->content ?></p> +</div> +<?php $this->placeholder('foo')->captureEnd() ?> + +<?php echo $this->placeholder('foo') ?> +]]></programlisting> + + <programlisting role="php"><![CDATA[ +<!-- 特定のキーにキャプチャします --> +<?php $this->placeholder('foo')->captureStart('SET', 'data') +foreach ($this->data as $datum): ?> +<div class="foo"> + <h2><?= $datum->title ?></h2> + <p><?= $datum->content ?></p> +</div> +<?php $this->placeholder('foo')->captureEnd() ?> + +<?php echo $this->placeholder('foo')->data ?> +]]></programlisting> + </example> +</sect3> +<!-- +vim:se ts=4 sw=4 et: +-->

Modified: trunk/documentation/manual/ja/module_specs/Zend_View-Helpers.xml (7146 => 7147)

--- trunk/documentation/manual/ja/module_specs/Zend_View-Helpers.xml 2007-12-16 01:53:08 UTC (rev 7146) +++ trunk/documentation/manual/ja/module_specs/Zend_View-Helpers.xml 2007-12-16 02:04:58 UTC (rev 7147) <at> <at> -1,5 +1,4 <at> <at> -<sect1 id="zend.view.helpers"> - +<sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2003/XInclude"> <title>ビューヘルパー</title> <para> <at> <at> -35,7 +34,6 <at> <at> 後で <code>$this->helperName()</code> がコールされたときには再利用されます。 </para> - <sect2 id="zend.view.helpers.initial"> <title>付属のヘルパー</title> <at> <at> -199,6 +197,9 <at> <at> </form>]]> </programlisting> + <xi:include href="Zend_View-Helpers-Action.xml" /> + <xi:include href="Zend_View-Helpers-Partial.xml" /> + <xi:include href="Zend_View-Helpers-Placeholder.xml" /> </sect2> <sect2 id="zend.view.helpers.paths">
jason_qi | 16 Dec 03:20 2007

[7148] trunk/documentation/manual/zh/module_specs/Zend_Layout-QuickStart.xml: add new translation of Zend_Layout-QuickStart.xml based its English version 7078

Revision 7148 Author jason_qi Date 2007-12-15 20:19:53 -0600 (Sat, 15 Dec 2007)

Log Message

add new translation of Zend_Layout-QuickStart.xml based its English version 7078

Added Paths

Diff

Added: trunk/documentation/manual/zh/module_specs/Zend_Layout-QuickStart.xml (0 => 7148)

--- trunk/documentation/manual/zh/module_specs/Zend_Layout-QuickStart.xml (rev 0) +++ trunk/documentation/manual/zh/module_specs/Zend_Layout-QuickStart.xml 2007-12-16 02:19:53 UTC (rev 7148) <at> <at> -0,0 +1,216 <at> <at> +<sect1 id="zend.layout.quickstart"> + <title>Zend_Layout 快速入门</title> + + <para> + <code>Zend_Layout</code>有两个基本用例:带有Zend Framework MVC和不带。 + </para> + + <sect2 id="zend.layout.quickstart.layouts"> + <title>布局脚本</title> + + <para> + 在两种情况下都需要创建布局脚本。布局脚本简单地使用Zend_View(或者无论哪种你在使用的视图实现)。布局变量用<code>Zend_Layout</code> <link linkend="zend.view.helpers.initial.placeholder">placeholder</link> 注册,可以通过占位符助手或者通过布局助手从布局对象的对象属性里获取。 + </para> + + <para> + 如下例: + </para> + + <programlisting role="php"><![CDATA[ +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>My Site</title> +</head> +<body> +<?php + // fetch 'content' key using layout helper: + echo $this->layout()->content; + + // fetch 'foo' key using placeholder helper: + echo $this->placeholder('Zend_Layout')->foo; + + // fetch layout object and retrieve various keys from it: + $layout = $this->layout(); + echo $layout->bar; + echo $layout->baz; +?> +</body> +</html> +]]></programlisting> + + <para> + 因为<code>Zend_Layout</code>使用<code>Zend_View</code>来解析,你也可以使用任何视图助手注册,并也可以访问任何先前分配的视图变量。特别有用的是各种各样的<link linkend="zend.view.helpers.initial.placeholder">占位符助手</link>,因为它允许为如 &lt;head&gt;节(section)、导航(navigation)等区域获取内容: + </para> + + <programlisting role="php"><![CDATA[ +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title><?= $this->headTitle() ?></title> + <?= $this->headScript() ?> + <?= $this->headStyle() ?> +</head> +<body> + <?= $this->render('header.phtml') ?> + + <div id="nav"><?= $this->placeholder('nav') ?></div> + + <div id="content"><= $this->layout()->content ?></div> + + <?= $this->render('footer.phtml') ?> +</body> +</html> +]]></programlisting> + </sect2> + + <sect2 id="zend.layout.quickstart.mvc"> + <title> 和Zend Framework MVC一起使用 Zend_Layout </title> + + <para> + <code>Zend_Controller</code>通过<link linkend="zend.controller.plugins">前端控制器插件</link> 和 <link linkend="zend.controller.actionhelpers">动作控制器助手</link> 提供了一组丰富的扩展函数。<code>Zend_View</code> 也有<link linkend="zend.view.helpers">助手</link>。当和(Zend Framework)MVC组件一起使用时,<code>Zend_Layout</code> 利用这些多种扩展点。 + </para> + + <para> + <code>Zend_Layout::startMvc()</code>创建一个带有任何你提供给它的可选配置的<code>Zend_Layout</code>的实例。接着它注册一个前端控制器插件,一旦派遣循环完成,这个插件就解析带有任何应用程序内容的布局,并且注册一个动作助手允许从动作控制器来访问布局对象。另外,可以任何时候用<code>布局</code>视图助手从视图脚本抓取布局实例。 + </para> + + <para> + 首先,来看看如何初始化Zend_Layout来和MVC一起使用: + </para> + + <programlisting role="php"><![CDATA[<?php +// In your bootstrap: +Zend_Layout::startMvc(); +?>]]></programlisting> + + <para> + <code>startMvc()</code> 可以带一个可选的数组或<code>Zend_Config</code> 对象来定制实例;这些选项详见<xref linkend="zend.layout.options" /> 。 + </para> + + <para> + 在动作控制器例,你可以把局实例作为一个动作助手来访问: + </para> + + <programlisting role="php"><![CDATA[<?php +class FooController extends Zend_Controller_Action +{ + public function barAction() + { + // disable layouts for this action: + $this->_helper->layout->disableLayout(); + } + + public function bazAction() + { + // use different layout script with this action: + $this->_helper->layout->setLayout('foobaz'); + }; +} +?>]]></programlisting> + + <para> + 在视图脚本里,可以通过<code>layout</code>视图助手来访问布局对象。这个视图助手和其它的有细微的区别:不带参数,返回一个对象而不是一个字符串值。这允许在布局对象里立即调用方法: + </para> + + <programlisting role="php"><![CDATA[ +<?php $this->layout()->setLayout('foo'); // set alternate layout ?> +]]></programlisting> + + <para> + 在任何时候,通过<code>getMvcInstance()</code> 静态方法获取和MVC一起注册的<code>Zend_Layout</code>的实例: + </para> + + <programlisting role="php"><![CDATA[<?php +// Returns null if startMvc() has not first been called +$layout = Zend_Layout::getMvcInstance(); +?>]]></programlisting> + + <para> + 最后,<code>Zend_Layout</code> 的前端控制器插件有一个除解析布局外的重要特征:它从响应对象获取所有被命名的段(segments)并分配它们为布局变量,分配‘default’段给变量‘content’。这允许访问应用程序内容和在视图脚本里解析。 + </para> + + <para> + 作为例子,让代码首先点击<code>FooController::indexAction()</code> ,它解析一些内容到缺省的响应段,并接着转发给<code>NavController::menuAction()</code> ,它解析内容给'nav'响应段。最后,转发给<code>CommentController::fetchAction()</code> 并取得一些注释,但是也解析那些给缺省响应段(追加内容给那个段)。视图脚本可以接着分别解析: + </para> + + <programlisting role="php"><![CDATA[ +<body> + <!-- renders /nav/menu --> + <div id="nav"><?= $this->layout()->nav ?></div> + + <!-- renders /foo/index + /comment/fetch --> + <div id="content"><?= $this->layout()->content ?></div> +</body> +]]></programlisting> + + <para> + 当和动作堆栈 <link linkend="zend.controller.actionhelpers.actionstack">动作助手</link> 和 <link linkend="zend.controller.plugins.standard.actionstack">插件</link>一起协同使用时,这个特性特别有用,通过循环可以设置一个动作堆栈,这样就创建一个部件化的页面。 + </para> + </sect2> + + <sect2 id="zend.layout.quickstart.standalone"> + <title>使用Zend_Layout做为独立的组件</title> + + <para> + 做为独立组件,Zend_Layout不提供和MVC一起使用那样的方便和更多的功能。然而,它仍有两个主要优点: + </para> + + <itemizedlist> + <listitem><para> + 布局变量范围 + </para></listitem> + + <listitem><para> + 从其它视图脚本分离视图脚本布局 + </para></listitem> + </itemizedlist> + + <para> + 当用作独立组件,简单地初始化布局对象,使用不同的访问器来设置状态、设置变量为对象属性和解析布局: + </para> + + <programlisting role="php"><![CDATA[<?php +$layout = new Zend_Layout(); + +// Set a layout script path: +$layout->setLayoutPath('/path/to/layouts'); + +// set some variables: +$layout->content = $content; +$layout->nav = $nav; + +// choose a different layout script: +$layout->setLayout('foo'); + +// render final layout +echo $layout->render(); +?>]]></programlisting> + </sect2> + + <sect2 id="zend.layout.quickstart.example"> + <title>尝试一下布局</title> + + <para> + 有时候百闻不如一见。下面是一个布局脚本例子来展示它是如何工作的。 + </para> + + <para> + <inlinegraphic align="center" valign="middle" + fileref="figures/zend.layout.quickstart.example.png" format="PNG" /> + </para> + + <para> + 基于所设置的CSS文件,实际元素的顺序可能不同;例如:如果使用绝对位置,导航稍后显示在文档种,但仍在顶部;对于sidebar或header同样适用,然而实际的显示内容的机制保持相同。 + </para> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->
takagi | 16 Dec 03:24 2007

[7149] trunk/documentation/manual/ja/module_specs/Zend_Locale-Functions.xml: sync Japanese document with r7141.

Revision 7149 Author takagi Date 2007-12-15 20:24:01 -0600 (Sat, 15 Dec 2007)

Log Message

sync Japanese document with r7141.

Modified Paths

Diff

Modified: trunk/documentation/manual/ja/module_specs/Zend_Locale-Functions.xml (7148 => 7149)

--- trunk/documentation/manual/ja/module_specs/Zend_Locale-Functions.xml 2007-12-16 02:19:53 UTC (rev 7148) +++ trunk/documentation/manual/ja/module_specs/Zend_Locale-Functions.xml 2007-12-16 02:24:01 UTC (rev 7149) <at> <at> -490,12 +490,38 <at> <at> <code>getQuestion()</code> を使用すると、 ユーザに問い合わせるときに使用する単語あるいは正規表現文字列を含む配列を、 特定の $locale (デフォルトは、そのオブジェクトのロケール) - にあわせて返します。この配列には六つの要素が含まれます。それぞれが - "はい"、"いいえ" とその省略形、 - そして適切にパースするための正規表現文字列を表します。 - 以下の例を参照ください。 + にあわせて返します。 + 返される配列の中身は次のようになります。 </para> + <itemizedlist> + <listitem> + <para> + <emphasis role="strong">yes および no</emphasis>: + yes および no に対応する一般的な文字列表現です。 + これは、yesarray および noarray の最初の要素でもあり、もっとも一般的な内容です。 + </para> + + <para> + <emphasis role="strong">yesarray および noarray</emphasis>: + yes および no に対応する内容をすべて含む配列です。 + 言語によっては単に「はい」「いいえ」以外の返答を持つものもあります。 + 一般に、これは完全な文字列とその省略形になります。 + </para> + + <para> + <emphasis role="strong">yesexpr および noexpr</emphasis>: + 正規表現で、ユーザの回答から yes か no かを判定できるようにします。 + </para> + </listitem> + </itemizedlist> + + <para> + これらのすべての情報は当然地域化されており、 + 設定されているロケールによって変化します。 + 以下の例で、どのような情報が取得できるのかを確認してみましょう。 + </para> + <example id="zend.locale.getquestion.example-1"> <title>getQuestion()</title> <programlisting role="php"><![CDATA[<?php <at> <at> -509,16 +535,35 <at> <at> Array ( - [yes]ja[/yes] - [no]nein[/no] - [yesabbr]j[/yesabbr] - [noabbr]n[/noabbr] - [yesexpr]^([yY]([eE][sS])?)|([jJ][aA]?)[/yesexpr] - [noexpr]^([nN]([oO]|([eE][iI][nN]))?)[/noexpr] + [yes] => ja + [no] => nein + [yesarray] => Array + ( + [0] => ja + [1] => j + ) + + [noarray] => Array + ( + [0] => nein + [1] => n + ) + + [yesexpr] => ^([jJ][aA]?)|([jJ]?) + [noexpr] => ^([nN]([eE][iI][nN])?)|([nN]?) )]]> </programlisting> </example> + <note> + <para> + 1.0.3 までは、<emphasis role="strong">yesabbr</emphasis> + もロケールデータから取得可能でした。 + 1.1 以降、この情報は単体では存在しません。しかし、同じ情報を + <emphasis role="strong">yesarray</emphasis> + から取得できます。 + </para> + </note> </sect2> <sect2 id="zend.locale.getlocalelist">
jason_qi | 16 Dec 09:53 2007

[7150] trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml: add new translation of Zend_Layout-Advanced.xml based its English version 7078

Revision 7150 Author jason_qi Date 2007-12-16 02:53:00 -0600 (Sun, 16 Dec 2007)

Log Message

add new translation of Zend_Layout-Advanced.xml based its English version 7078

Added Paths

Diff

Added: trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml (0 => 7150)

--- trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml (rev 0) +++ trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml 2007-12-16 08:53:00 UTC (rev 7150) <at> <at> -0,0 +1,159 <at> <at> +<sect1 id="zend.layout.advanced"> + <title>Zend_Layout \xB8߼\xB6\xD3÷\xA8</title> + + <para> + <code>Zend_Layout</code> \xD3\xD0\xCE\xDE\xCA\xFD\xD3\xC3\xC0\xFD\xCCṩ\xB8\xF8Ը\xD2\xE2\xD0޸\xC4\xCB\xFC\xD2\xD4\xCA\xCAӦ\xB2\xBBͬ\xB5\xC4\xCA\xD3ͼʵ\xCF֡\xA2\xCEļ\xFEϵͳ\xB2\xBC\xBEּ\xB0\xB8\xFC\xB6\xE0\xB5ĸ߼\xB6\xBF\xAA\xB7\xA2\xD5ߡ\xA3 + </para> + + <para> + \xD6\xF7Ҫ\xB5\xC4\xC0\xA9չ\xB5\xE3\xCAǣ\xBA + </para> + + <itemizedlist> + <listitem><para> + <emphasis>\xB6\xA8\xD6\xC6\xCA\xD3ͼ\xB6\xD4\xCF\xF3\xA1\xA3</emphasis> <code>Zend_Layout</code> \xD4\xCA\xD0\xEDʹ\xD3\xC3\xC8κ\xCEʵ\xCF\xD6<code>Zend_View_Interface</code> \xB5\xC4\xC0ࡣ + </para></listitem> + + <listitem><para> + <emphasis>\xB6\xA8\xD6\xC6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE\xA1\xA3</emphasis> <code>Zend_Layout</code> \xBA\xCD\xD4ڷ\xB5\xBB\xD8\xCF\xECӦ֮ǰ\xD7Զ\xAF\xBD\xE2\xCEֵı\xEA׼ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFEһ\xC6𷢲\xBC\xA1\xA3\xC4\xE3\xBF\xC9\xD2\xD4\xCC滻\xC4\xE3\xD7Լ\xBA\xB5IJ\xE5\xBC\xFE\xA1\xA3 + </para></listitem> + + <listitem><para> + <emphasis>\xB6\xA8\xD6ƶ\xAF\xD7\xF7\xD6\xFA\xCA֡\xA3</emphasis> <code>Zend_Layout</code> \xBAͱ\xEA׼\xB6\xAF\xD7\xF7\xD6\xFA\xCA\xD6һ\xC6𷢲\xBC\xA3\xAC\xD2\xF2Ϊ\xD5\xE2\xB8\xF6\xD6\xFA\xCAֶ\xD4\xD3ڲ\xBC\xBEֶ\xD4\xCF\xF3\xD7Լ\xBA\xCA\xC7һ\xB8\xF6\xD1ƴ\xFA\xC0dumb proxy\xA3\xA9\xA3\xAC\xCB\xF9\xD2\xD4\xCB\xFCӦ\xB8\xC3\xCAʺϴ󲿷ֵ\xC4\xD0\xE8\xC7\xF3\xA1\xA3 + </para></listitem> + + <listitem><para> + <emphasis>\xB6\xA8\xD6Ʋ\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6\xA3\xA8resolution\xA3\xA9</emphasis>\xA1\xA3<code>Zend_Layout</code> \xD4\xCA\xD0\xEDΪ\xB2\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6ʹ\xD3\xC3\xC4\xE3\xD7Լ\xBA\xB5\xC4 <link linkend="zend.filter.inflector">\xB1\xE4\xD0\xCE\xC6\xF7\xA3\xA8inflector\xA3\xA9</link> \xA3\xAC\xBB\xF2\xD5߼򵥵\xD8\xD0޸ĸ\xBD\xBCӵı\xE4\xD0\xCE\xC6\xF7\xC0\xB4ָ\xB6\xA8\xC4\xE3\xD7Լ\xBA\xB5ı\xE4\xD0ι\xE6\xD4\xF2\xA1\xA3 + </para></listitem> + </itemizedlist> + + <sect2 id="zend.layout.advanced.view"> + <title>\xB6\xA8\xD6\xC6\xCA\xD3ͼ\xB6\xD4\xCF\xF3</title> + + <para> + <code>Zend_Layout</code> \xD4\xCA\xD0\xED\xC8κ\xCEʵ\xCF\xD6 <code>Zend_View_Interface</code> \xB5\xC4\xC0\xE0\xBB\xF2\xD5\xDF\xC0\xA9չ <code>Zend_View_Abstract</code> \xC0\xB4\xBD\xE2\xCEֽű\xBE\xA1\xA3\xBC򵥵ذѶ\xA8\xD6Ƶ\xC4\xCA\xD3ͼ\xB6\xD4\xCF\xF3\xB5\xB1\xD7\xF7\xB2\xCE\xCA\xFD\xB4\xAB\xB5ݸ\xF8 constructor/<code>startMvc()</code>\xA3\xAC\xBB\xF2\xD5\xDF\xD3\xC3<code>setView()</code> \xB7\xC3\xCE\xCA\xC6\xF7\xC0\xB4\xC9\xE8\xD6\xC3\xCB\xFC\xA3\xBA + </para> + + <programlisting role="php"><![CDATA[<?php +$view = new My_Custom_View(); +$layout->setView($view); +?>]]></programlisting> + + <note> + <title>\xB2\xBB\xCA\xC7\xCB\xF9\xD3е\xC4 Zend_View ʵ\xCFֶ\xBC\xB5\xC8ͬ</title> + + <para> + \xCB\xE4Ȼ<code>Zend_Layout</code>\xD4\xCA\xD0\xEDʹ\xD3\xC3\xC8κ\xCEʵ\xCF\xD6<code>Zend_View_Interface</code>\xB5\xC4\xC0࣬\xC8\xE7\xB9\xFB\xCB\xFC\xC3Dz\xBB\xC4\xDCʹ\xD3ø\xF7\xD6\xD6<code>Zend_View</code>\xD6\xFA\xCA֣\xACҲ\xBF\xC9\xC4\xDC\xD3\xF6\xB5\xBD\xCE\xCA\xCC⣬\xCCر\xF0\xCADz\xBC\xBEֺ\xCD<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB</link>\xD6\xFA\xCA֡\xA3\xD5\xE2\xCA\xC7\xD2\xF2Ϊ<code>Zend_Layout</code>ͨ\xB9\xFD\xCB\xFC\xD7Լ\xBA\xBA\xCD<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB</link>\xD4ڿ\xC9\xD3õĶ\xD4\xCF\xF3\xC0\xEF\xC9\xE8\xD6ñ\xE4\xC1\xBF\xA1\xA3 + </para> + + <para> + \xC8\xE7\xB9\xFBҪʹ\xD3\xC3һ\xB8\xF6\xB6\xA8\xD6ƵIJ\xBB֧\xB3\xD6\xD5\xE2Щ\xD6\xFA\xCA\xD6<code>Zend_View</code>ʵ\xCF֣\xAC\xC4\xC7ô\xD0\xE8Ҫ\xD5ҵ\xBDһ\xB8\xF6\xB0취\xB0Ѳ\xBC\xBEֱ\xE4\xC1\xBF\xB8\xF8\xCA\xD3ͼ\xA1\xA3\xD5\xE2\xBF\xC9\xD2\xD4ͨ\xB9\xFD\xC1\xBD\xB8\xF6\xB0취\xC0\xB4ʵ\xCF֣\xBA\xC0\xA9չ<code>Zend_Layout</code>\xB6\xD4\xCF\xF3\xBA͸ı\xE4<code>render()</code>\xB7\xBD\xB7\xA8\xC0\xB4\xB4\xAB\xB5ݱ\xE4\xC1\xBF\xB8\xF8\xCA\xD3ͼ\xA3\xBB\xBB\xF2\xD5ߣ\xAC\xB4\xB4\xBD\xA8\xD7Լ\xBA\xB5IJ\xE5\xBC\xFE\xC0࣬\xD4ڽ\xE2\xCE\xD6ǰ\xB4\xAB\xB5\xDD\xCB\xFC\xC3ǡ\xA3 + </para> + + <para> + \xD7\xF6Ϊ\xCC滻\xB7\xBD\xB0\xB8\xA3\xAC\xC8\xE7\xB9\xFB\xC4\xE3\xB5\xC4\xCA\xD3ͼʵ\xCF\xD6֧\xB3\xD6\xC8κ\xCE\xD6\xD6\xC0\xE0\xB5IJ\xE5\xBC\xFE\xA3\xAC\xC4\xE3\xBF\xC9\xD2\xD4ͨ\xB9\xFD'Zend_Layout'ռλ\xB7\xFBʹ\xD3\xC3<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB\xD6\xFA\xCA\xD6</link>\xA3\xBA + </para> + + <programlisting role="php"><![CDATA[<?php +$placeholders = new Zend_View_Helper_Placeholder(); +$layoutVars = $placeholders->placeholder('Zend_Layout')->getArrayCopy(); +?>]]></programlisting> + </note> + </sect2> + + <sect2 id="zend.layout.advanced.plugin"> + <title>\xB6\xA8\xD6\xC6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE</title> + + <para> + \xB5\xB1\xBA\xCDMVC\xD7\xE9\xBC\xFEһ\xC6\xF0ʹ\xD3ã\xAC<code>Zend_Layout</code>ע\xB2\xE1һ\xB8\xF6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE\xA3\xAC\xD5\xE2\xB8\xF6\xB2\xE5\xBC\xFE\xB0ѽ\xE2\xCE\xD6\xD7\xF6Ϊ\xD4\xDA\xCD˳\xF6\xC5\xC9Dzѭ\xBB\xB7֮ǰ\xB5\xC4\xD7\xEE\xBA\xF3һ\xB8\xF6\xB6\xAF\xD7\xF7\xA1\xA3\xD4ڴ\xF3\xB6\xE0\xCA\xFD\xC7\xE9\xBF\xF6\xCF£\xACȱʡ\xB5IJ\xE5\xBC\xFE\xCA\xCA\xD3ã\xAC\xB5\xAB\xC8\xE7\xB9\xFB\xC4\xE3\xCF\xF3д\xC4\xE3\xD7Լ\xBA\xB5ģ\xAC\xBF\xC9\xD2\xD4ͨ\xB9\xFD\xB4\xAB\xB5\xDD<code>pluginClass</code>ѡ\xCF\xEE\xB8\xF8<code>startMvc()</code>\xB7\xBD\xB7\xA8\xC0\xB4ָ\xB6\xA8\xB2\xE5\xBC\xFE\xC0\xE0\xB5\xC4\xC3\xFB\xB3\xC6ȥ\xBC\xD3\xD4ء\xA3 + </para> + + <para> + Ϊ\xD5\xE2\xB8\xF6Ŀ\xB5\xC4\xCB\xF9д\xB5\xC4\xC8κβ\xE5\xBC\xFE\xC0ཫ\xD0\xE8Ҫ\xC0\xA9չ<code>Zend_Controller_Plugin_Abstract</code>\xA3\xAC\xB2\xA2Ӧ\xB8ý\xD3\xCA\xDCһ\xB8ֶ\xD4\xCF\xF3ʵ\xC0\xFD\xD7\xF6Ϊ\xB2\xCE\xCA\xFD\xB8\xF8\xB9\xB9\xD4\xEC\xC6\xF7\xA1\xA3\xC1\xED\xCD⣬\xC4\xE3\xB5\xC4ʵ\xCF\xD6ϸ\xBD\xDAȡ\xBE\xF6\xD3\xDA\xC4㡣 + </para> + + <para> + \xB1\xBBʹ\xD3\xC3ȱʡ\xB2\xE5\xBC\xFE\xC0\xE0\xCA\xC7<code>Zend_Layout_Controller_Plugin_Layout</code>\xA1\xA3 + </para> + </sect2> + + <sect2 id="zend.layout.advanced.helper"> + <title>\xB6\xA8\xD6ƶ\xAF\xD7\xF7\xD6\xFA\xCA\xD6</title> + + <para> + \xB5\xB1\xBA\xCDMVC\xD7\xE9\xBC\xFEһ\xC6\xF0ʹ\xD3ã\xAC<code>Zend_Layout</code>\xD3\xC3\xD6\xFA\xCA־\xAD\xBC\xCDע\xB2\xE1һ\xB8\xF6\xB6\xAF\xD7\xF7\xBF\xD8\xD6\xC6\xC6\xF7\xD6\xFA\xCA֡\xA3ȱʡ\xD6\xFA\xCA֣\xAC<code>Zend_Layout_Controller_Action_Helper_Layout</code>\xA3\xAC\xB0\xE7\xD7\xF7һ\xB8\xF6\xD1ƴ\xFA\xC0\xED\xB8\xF8\xB2\xBC\xBEֶ\xD4\xCF\xF3ʵ\xC0\xFD\xD7Լ\xBA\xA3\xAC\xB2\xA2Ӧ\xB8\xC3\xCAʺϴ\xF3\xB6\xE0\xCA\xFD\xD3\xC3\xC0\xFD\xA1\xA3 + </para> + + <para> + \xC8\xE7\xB9\xFB\xC4\xE3\xBE\xF5\xB5\xC3\xD0\xE8Ҫд\xB6\xA8\xD6Ƶĺ\xAF\xCA\xFD\xA3\xAC\xBC򵥵\xD8дһ\xB8\xF6\xC0\xA9չ<code>Zend_Controller_Action_Helper_Abstract</code> \xB5Ķ\xAF\xD7\xF7\xD6\xFA\xCA\xD6\xC0ಢ\xB0\xD1\xC0\xE0\xC3\xFB\xD7\xF6Ϊ<code>helperClass</code>ѡ\xCF\xB5ݸ\xF8<code>startMvc()</code>\xB7\xBD\xB7\xA8\xA3\xACϸ\xBDھ\xCDȡ\xBE\xF6\xD3\xDA\xC4\xE3\xC1ˡ\xA3 + </para> + </sect2> + + <sect2 id="zend.layout.advanced.inflector"> + <title>\xB6\xA8\xD6Ʋ\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6\xA3\xA8Resolution\xA3\xA9\xA3\xBAʹ\xD3ñ\xE4\xD0\xCE\xC6\xF7\xA3\xA8Inflector\xA3\xA9</title> + + <para> + Ϊ\xB7\xAD\xD2벼\xBE\xD6\xC3
jason_qi | 16 Dec 09:56 2007

[7151] trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml: convert it to utf-8

Revision 7151 Author jason_qi Date 2007-12-16 02:55:55 -0600 (Sun, 16 Dec 2007)

Log Message

convert it to utf-8

Modified Paths

Diff

Modified: trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml (7150 => 7151)

--- trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml 2007-12-16 08:53:00 UTC (rev 7150) +++ trunk/documentation/manual/zh/module_specs/Zend_Layout-Advanced.xml 2007-12-16 08:55:55 UTC (rev 7151) <at> <at> -1,37 +1,37 <at> <at> <sect1 id="zend.layout.advanced"> - <title>Zend_Layout \xB8߼\xB6\xD3÷\xA8</title> + <title>Zend_Layout 高级用法</title> <para> - <code>Zend_Layout</code> \xD3\xD0\xCE\xDE\xCA\xFD\xD3\xC3\xC0\xFD\xCCṩ\xB8\xF8Ը\xD2\xE2\xD0޸\xC4\xCB\xFC\xD2\xD4\xCA\xCAӦ\xB2\xBBͬ\xB5\xC4\xCA\xD3ͼʵ\xCF֡\xA2\xCEļ\xFEϵͳ\xB2\xBC\xBEּ\xB0\xB8\xFC\xB6\xE0\xB5ĸ߼\xB6\xBF\xAA\xB7\xA2\xD5ߡ\xA3 + <code>Zend_Layout</code> 有无数用例提供给愿意修改它以适应不同的视图实现、文件系统布局及更多的高级开发者。 </para> <para> - \xD6\xF7Ҫ\xB5\xC4\xC0\xA9չ\xB5\xE3\xCAǣ\xBA + 主要的扩展点是: </para> <itemizedlist> <listitem><para> - <emphasis>\xB6\xA8\xD6\xC6\xCA\xD3ͼ\xB6\xD4\xCF\xF3\xA1\xA3</emphasis> <code>Zend_Layout</code> \xD4\xCA\xD0\xEDʹ\xD3\xC3\xC8κ\xCEʵ\xCF\xD6<code>Zend_View_Interface</code> \xB5\xC4\xC0ࡣ + <emphasis>定制视图对象。</emphasis> <code>Zend_Layout</code> 允许使用任何实现<code>Zend_View_Interface</code> 的类。 </para></listitem> <listitem><para> - <emphasis>\xB6\xA8\xD6\xC6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE\xA1\xA3</emphasis> <code>Zend_Layout</code> \xBA\xCD\xD4ڷ\xB5\xBB\xD8\xCF\xECӦ֮ǰ\xD7Զ\xAF\xBD\xE2\xCEֵı\xEA׼ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFEһ\xC6𷢲\xBC\xA1\xA3\xC4\xE3\xBF\xC9\xD2\xD4\xCC滻\xC4\xE3\xD7Լ\xBA\xB5IJ\xE5\xBC\xFE\xA1\xA3 + <emphasis>定制前端控制器插件。</emphasis> <code>Zend_Layout</code> 和在返回响应之前自动解析布局的标准前端控制器插件一起发布。你可以替换你自己的插件。 </para></listitem> <listitem><para> - <emphasis>\xB6\xA8\xD6ƶ\xAF\xD7\xF7\xD6\xFA\xCA֡\xA3</emphasis> <code>Zend_Layout</code> \xBAͱ\xEA׼\xB6\xAF\xD7\xF7\xD6\xFA\xCA\xD6һ\xC6𷢲\xBC\xA3\xAC\xD2\xF2Ϊ\xD5\xE2\xB8\xF6\xD6\xFA\xCAֶ\xD4\xD3ڲ\xBC\xBEֶ\xD4\xCF\xF3\xD7Լ\xBA\xCA\xC7һ\xB8\xF6\xD1ƴ\xFA\xC0dumb proxy\xA3\xA9\xA3\xAC\xCB\xF9\xD2\xD4\xCB\xFCӦ\xB8\xC3\xCAʺϴ󲿷ֵ\xC4\xD0\xE8\xC7\xF3\xA1\xA3 + <emphasis>定制动作助手。</emphasis> <code>Zend_Layout</code> 和标准动作助手一起发布,因为这个助手对于布局对象自己是一个哑代理(dumb proxy),所以它应该适合大部分的需求。 </para></listitem> <listitem><para> - <emphasis>\xB6\xA8\xD6Ʋ\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6\xA3\xA8resolution\xA3\xA9</emphasis>\xA1\xA3<code>Zend_Layout</code> \xD4\xCA\xD0\xEDΪ\xB2\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6ʹ\xD3\xC3\xC4\xE3\xD7Լ\xBA\xB5\xC4 <link linkend="zend.filter.inflector">\xB1\xE4\xD0\xCE\xC6\xF7\xA3\xA8inflector\xA3\xA9</link> \xA3\xAC\xBB\xF2\xD5߼򵥵\xD8\xD0޸ĸ\xBD\xBCӵı\xE4\xD0\xCE\xC6\xF7\xC0\xB4ָ\xB6\xA8\xC4\xE3\xD7Լ\xBA\xB5ı\xE4\xD0ι\xE6\xD4\xF2\xA1\xA3 + <emphasis>定制布局脚本路径解析(resolution)</emphasis>。<code>Zend_Layout</code> 允许为布局脚本路径解析使用你自己的 <link linkend="zend.filter.inflector">变形器(inflector)</link> ,或者简单地修改附加的变形器来指定你自己的变形规则。 </para></listitem> </itemizedlist> <sect2 id="zend.layout.advanced.view"> - <title>\xB6\xA8\xD6\xC6\xCA\xD3ͼ\xB6\xD4\xCF\xF3</title> + <title>定制视图对象</title> <para> - <code>Zend_Layout</code> \xD4\xCA\xD0\xED\xC8κ\xCEʵ\xCF\xD6 <code>Zend_View_Interface</code> \xB5\xC4\xC0\xE0\xBB\xF2\xD5\xDF\xC0\xA9չ <code>Zend_View_Abstract</code> \xC0\xB4\xBD\xE2\xCEֽű\xBE\xA1\xA3\xBC򵥵ذѶ\xA8\xD6Ƶ\xC4\xCA\xD3ͼ\xB6\xD4\xCF\xF3\xB5\xB1\xD7\xF7\xB2\xCE\xCA\xFD\xB4\xAB\xB5ݸ\xF8 constructor/<code>startMvc()</code>\xA3\xAC\xBB\xF2\xD5\xDF\xD3\xC3<code>setView()</code> \xB7\xC3\xCE\xCA\xC6\xF7\xC0\xB4\xC9\xE8\xD6\xC3\xCB\xFC\xA3\xBA + <code>Zend_Layout</code> 允许任何实现 <code>Zend_View_Interface</code> 的类或者扩展 <code>Zend_View_Abstract</code> 来解析布局脚本。简单地把定制的视图对象当作参数传递给 constructor/<code>startMvc()</code>,或者用<code>setView()</code> 访问器来设置它: </para> <programlisting role="php"><![CDATA[<?php <at> <at> -40,18 +40,18 <at> <at> ?>]]></programlisting> <note> - <title>\xB2\xBB\xCA\xC7\xCB\xF9\xD3е\xC4 Zend_View ʵ\xCFֶ\xBC\xB5\xC8ͬ</title> + <title>不是所有的 Zend_View 实现都等同</title> <para> - \xCB\xE4Ȼ<code>Zend_Layout</code>\xD4\xCA\xD0\xEDʹ\xD3\xC3\xC8κ\xCEʵ\xCF\xD6<code>Zend_View_Interface</code>\xB5\xC4\xC0࣬\xC8\xE7\xB9\xFB\xCB\xFC\xC3Dz\xBB\xC4\xDCʹ\xD3ø\xF7\xD6\xD6<code>Zend_View</code>\xD6\xFA\xCA֣\xACҲ\xBF\xC9\xC4\xDC\xD3\xF6\xB5\xBD\xCE\xCA\xCC⣬\xCCر\xF0\xCADz\xBC\xBEֺ\xCD<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB</link>\xD6\xFA\xCA֡\xA3\xD5\xE2\xCA\xC7\xD2\xF2Ϊ<code>Zend_Layout</code>ͨ\xB9\xFD\xCB\xFC\xD7Լ\xBA\xBA\xCD<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB</link>\xD4ڿ\xC9\xD3õĶ\xD4\xCF\xF3\xC0\xEF\xC9\xE8\xD6ñ\xE4\xC1\xBF\xA1\xA3 + 虽然<code>Zend_Layout</code>允许使用任何实现<code>Zend_View_Interface</code>的类,如果它们不能使用各种<code>Zend_View</code>助手,也可能遇到问题,特别是布局和<link linkend="zend.view.helpers.initial.placeholder">占位符</link>助手。这是因为<code>Zend_Layout</code>通过它自己和<link linkend="zend.view.helpers.initial.placeholder">占位符</link>在可用的对象里设置变量。 </para> <para> - \xC8\xE7\xB9\xFBҪʹ\xD3\xC3һ\xB8\xF6\xB6\xA8\xD6ƵIJ\xBB֧\xB3\xD6\xD5\xE2Щ\xD6\xFA\xCA\xD6<code>Zend_View</code>ʵ\xCF֣\xAC\xC4\xC7ô\xD0\xE8Ҫ\xD5ҵ\xBDһ\xB8\xF6\xB0취\xB0Ѳ\xBC\xBEֱ\xE4\xC1\xBF\xB8\xF8\xCA\xD3ͼ\xA1\xA3\xD5\xE2\xBF\xC9\xD2\xD4ͨ\xB9\xFD\xC1\xBD\xB8\xF6\xB0취\xC0\xB4ʵ\xCF֣\xBA\xC0\xA9չ<code>Zend_Layout</code>\xB6\xD4\xCF\xF3\xBA͸ı\xE4<code>render()</code>\xB7\xBD\xB7\xA8\xC0\xB4\xB4\xAB\xB5ݱ\xE4\xC1\xBF\xB8\xF8\xCA\xD3ͼ\xA3\xBB\xBB\xF2\xD5ߣ\xAC\xB4\xB4\xBD\xA8\xD7Լ\xBA\xB5IJ\xE5\xBC\xFE\xC0࣬\xD4ڽ\xE2\xCE\xD6ǰ\xB4\xAB\xB5\xDD\xCB\xFC\xC3ǡ\xA3 + 如果要使用一个定制的不支持这些助手<code>Zend_View</code>实现,那么需要找到一个办法把布局变量给视图。这可以通过两个办法来实现:扩展<code>Zend_Layout</code>对象和改变<code>render()</code>方法来传递变量给视图;或者,创建自己的插件类,在解析布局前传递它们。 </para> <para> - \xD7\xF6Ϊ\xCC滻\xB7\xBD\xB0\xB8\xA3\xAC\xC8\xE7\xB9\xFB\xC4\xE3\xB5\xC4\xCA\xD3ͼʵ\xCF\xD6֧\xB3\xD6\xC8κ\xCE\xD6\xD6\xC0\xE0\xB5IJ\xE5\xBC\xFE\xA3\xAC\xC4\xE3\xBF\xC9\xD2\xD4ͨ\xB9\xFD'Zend_Layout'ռλ\xB7\xFBʹ\xD3\xC3<link linkend="zend.view.helpers.initial.placeholder">ռλ\xB7\xFB\xD6\xFA\xCA\xD6</link>\xA3\xBA + 做为替换方案,如果你的视图实现支持任何种类的插件,你可以通过'Zend_Layout'占位符使用<link linkend="zend.view.helpers.initial.placeholder">占位符助手</link>: </para> <programlisting role="php"><![CDATA[<?php <at> <at> -62,38 +62,38 <at> <at> </sect2> <sect2 id="zend.layout.advanced.plugin"> - <title>\xB6\xA8\xD6\xC6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE</title> + <title>定制前端控制器插件</title> <para> - \xB5\xB1\xBA\xCDMVC\xD7\xE9\xBC\xFEһ\xC6\xF0ʹ\xD3ã\xAC<code>Zend_Layout</code>ע\xB2\xE1һ\xB8\xF6ǰ\xB6˿\xD8\xD6\xC6\xC6\xF7\xB2\xE5\xBC\xFE\xA3\xAC\xD5\xE2\xB8\xF6\xB2\xE5\xBC\xFE\xB0ѽ\xE2\xCE\xD6\xD7\xF6Ϊ\xD4\xDA\xCD˳\xF6\xC5\xC9Dzѭ\xBB\xB7֮ǰ\xB5\xC4\xD7\xEE\xBA\xF3һ\xB8\xF6\xB6\xAF\xD7\xF7\xA1\xA3\xD4ڴ\xF3\xB6\xE0\xCA\xFD\xC7\xE9\xBF\xF6\xCF£\xACȱʡ\xB5IJ\xE5\xBC\xFE\xCA\xCA\xD3ã\xAC\xB5\xAB\xC8\xE7\xB9\xFB\xC4\xE3\xCF\xF3д\xC4\xE3\xD7Լ\xBA\xB5ģ\xAC\xBF\xC9\xD2\xD4ͨ\xB9\xFD\xB4\xAB\xB5\xDD<code>pluginClass</code>ѡ\xCF\xEE\xB8\xF8<code>startMvc()</code>\xB7\xBD\xB7\xA8\xC0\xB4ָ\xB6\xA8\xB2\xE5\xBC\xFE\xC0\xE0\xB5\xC4\xC3\xFB\xB3\xC6ȥ\xBC\xD3\xD4ء\xA3 + 当和MVC组件一起使用,<code>Zend_Layout</code>注册一个前端控制器插件,这个插件把解析布局做为在退出派遣循环之前的最后一个动作。在大多数情况下,缺省的插件适用,但如果你象写你自己的,可以通过传递<code>pluginClass</code>选项给<code>startMvc()</code>方法来指定插件类的名称去加载。 </para> <para> - Ϊ\xD5\xE2\xB8\xF6Ŀ\xB5\xC4\xCB\xF9д\xB5\xC4\xC8κβ\xE5\xBC\xFE\xC0ཫ\xD0\xE8Ҫ\xC0\xA9չ<code>Zend_Controller_Plugin_Abstract</code>\xA3\xAC\xB2\xA2Ӧ\xB8ý\xD3\xCA\xDCһ\xB8ֶ\xD4\xCF\xF3ʵ\xC0\xFD\xD7\xF6Ϊ\xB2\xCE\xCA\xFD\xB8\xF8\xB9\xB9\xD4\xEC\xC6\xF7\xA1\xA3\xC1\xED\xCD⣬\xC4\xE3\xB5\xC4ʵ\xCF\xD6ϸ\xBD\xDAȡ\xBE\xF6\xD3\xDA\xC4㡣 + 为这个目的所写的任何插件类将需要扩展<code>Zend_Controller_Plugin_Abstract</code>,并应该接受一个布局对象实例做为参数给构造器。另外,你的实现细节取决于你。 </para> <para> - \xB1\xBBʹ\xD3\xC3ȱʡ\xB2\xE5\xBC\xFE\xC0\xE0\xCA\xC7<code>Zend_Layout_Controller_Plugin_Layout</code>\xA1\xA3 + 被使用缺省插件类是<code>Zend_Layout_Controller_Plugin_Layout</code>。 </para> </sect2> <sect2 id="zend.layout.advanced.helper"> - <title>\xB6\xA8\xD6ƶ\xAF\xD7\xF7\xD6\xFA\xCA\xD6</title> + <title>定制动作助手</title> <para> - \xB5\xB1\xBA\xCDMVC\xD7\xE9\xBC\xFEһ\xC6\xF0ʹ\xD3ã\xAC<code>Zend_Layout</code>\xD3\xC3\xD6\xFA\xCA־\xAD\xBC\xCDע\xB2\xE1һ\xB8\xF6\xB6\xAF\xD7\xF7\xBF\xD8\xD6\xC6\xC6\xF7\xD6\xFA\xCA֡\xA3ȱʡ\xD6\xFA\xCA֣\xAC<code>Zend_Layout_Controller_Action_Helper_Layout</code>\xA3\xAC\xB0\xE7\xD7\xF7һ\xB8\xF6\xD1ƴ\xFA\xC0\xED\xB8\xF8\xB2\xBC\xBEֶ\xD4\xCF\xF3ʵ\xC0\xFD\xD7Լ\xBA\xA3\xAC\xB2\xA2Ӧ\xB8\xC3\xCAʺϴ\xF3\xB6\xE0\xCA\xFD\xD3\xC3\xC0\xFD\xA1\xA3 + 当和MVC组件一起使用,<code>Zend_Layout</code>用助手经纪注册一个动作控制器助手。缺省助手,<code>Zend_Layout_Controller_Action_Helper_Layout</code>,扮作一个哑代理给布局对象实例自己,并应该适合大多数用例。 </para> <para> - \xC8\xE7\xB9\xFB\xC4\xE3\xBE\xF5\xB5\xC3\xD0\xE8Ҫд\xB6\xA8\xD6Ƶĺ\xAF\xCA\xFD\xA3\xAC\xBC򵥵\xD8дһ\xB8\xF6\xC0\xA9չ<code>Zend_Controller_Action_Helper_Abstract</code> \xB5Ķ\xAF\xD7\xF7\xD6\xFA\xCA\xD6\xC0ಢ\xB0\xD1\xC0\xE0\xC3\xFB\xD7\xF6Ϊ<code>helperClass</code>ѡ\xCF\xB5ݸ\xF8<code>startMvc()</code>\xB7\xBD\xB7\xA8\xA3\xACϸ\xBDھ\xCDȡ\xBE\xF6\xD3\xDA\xC4\xE3\xC1ˡ\xA3 + 如果你觉得需要写定制的函数,简单地写一个扩展<code>Zend_Controller_Action_Helper_Abstract</code> 的动作助手类并把类名做为<code>helperClass</code>选项传递给<code>startMvc()</code>方法,细节就取决于你了。 </para> </sect2> <sect2 id="zend.layout.advanced.inflector"> - <title>\xB6\xA8\xD6Ʋ\xBC\xBEֽű\xBE·\xBE\xB6\xBD\xE2\xCE\xF6\xA3\xA8Resolution\xA3\xA9\xA3\xBAʹ\xD3ñ\xE4\xD0\xCE\xC6\xF7\xA3\xA8Inflector\xA3\xA9</title> + <title>定制布局脚本路径解析(Resolution):使用变形器(Inflector)</title> <para> - Ϊ\xB7\xAD\xD2벼\xBE\xD6\xC3
matthew | 16 Dec 17:20 2007

[7152] trunk/incubator/tests/Zend/View/Helper: * Escape separator and values for title elements

Revision 7152 Author matthew Date 2007-12-16 10:20:14 -0600 (Sun, 16 Dec 2007)

Log Message

* Escape separator and values for title elements

Modified Paths

Diff

Modified: trunk/incubator/library/Zend/View/Helper/HeadTitle.php (7151 => 7152)

--- trunk/incubator/library/Zend/View/Helper/HeadTitle.php 2007-12-16 08:55:55 UTC (rev 7151) +++ trunk/incubator/library/Zend/View/Helper/HeadTitle.php 2007-12-16 16:20:14 UTC (rev 7152) <at> <at> -64,9 +64,13 <at> <at> public function toString($indent = null) { - $this->setPrefix('<title>') - ->setPostfix('</title>'); + $items = array(); + foreach ($this as $item) { + $items[] = htmlentities((string) $item); + } - return parent::toString(); + $separator = htmlentities($this->getSeparator()); + + return '<title>' . implode($separator, $items) . '</title>'; } }

Modified: trunk/incubator/tests/Zend/View/Helper/HeadTitleTest.php (7151 => 7152)

--- trunk/incubator/tests/Zend/View/Helper/HeadTitleTest.php 2007-12-16 08:55:55 UTC (rev 7151) +++ trunk/incubator/tests/Zend/View/Helper/HeadTitleTest.php 2007-12-16 16:20:14 UTC (rev 7152) <at> <at> -120,6 +120,26 <at> <at> $placeholder = $this->helper->headTitle('Bar', 'APPEND')->setSeparator(' :: '); $this->assertEquals('<title>Foo :: Bar</title>', $placeholder->toString()); } + + public function testToStringEscapesEntries() + { + $this->helper->headTitle('<script type="text/javascript">alert("foo");</script>'); + $string = $this->helper->toString(); + $this->assertNotContains('<script', $string); + $this->assertNotContains('</script>', $string); + } + + public function testToStringEscapesSeparator() + { + $this->helper->headTitle('Foo') + ->headTitle('Bar') + ->setSeparator(' <br /> '); + $string = $this->helper->toString(); + $this->assertNotContains('<br />', $string); + $this->assertContains('Foo', $string); + $this->assertContains('Bar', $string); + $this->assertContains('br /', $string); + } } // Call Zend_View_Helper_HeadTitleTest::main() if this source file is executed directly.
thomas | 16 Dec 17:24 2007

[7153] trunk/documentation/manual/de/module_specs: German Docu:

Revision 7153 Author thomas Date 2007-12-16 10:24:36 -0600 (Sun, 16 Dec 2007)

Log Message

German Docu: - translated Zend_Layout

Added Paths

Diff

Added: trunk/documentation/manual/de/module_specs/Zend_Layout-Advanced.xml (0 => 7153)

--- trunk/documentation/manual/de/module_specs/Zend_Layout-Advanced.xml (rev 0) +++ trunk/documentation/manual/de/module_specs/Zend_Layout-Advanced.xml 2007-12-16 16:24:36 UTC (rev 7153) <at> <at> -0,0 +1,227 <at> <at> +<sect1 id="zend.layout.advanced"> + <title>Erweiterte Verwendung von Zend_Layout</title> + + <para> + <code>Zend_Layout</code> hat eine Vielzahl an Verwendungsmöglichkeiten für den fortgeschrittenen + Entwickler der es für seine unterschiedlichen View Implementationen, Dateisystem Layouts, und anderes + adaptieren will. + </para> + + <para> + Die Hauptpunkte der Erweiterung sind: + </para> + + <itemizedlist> + <listitem> + <para> + <emphasis>Eigene View Objekte.</emphasis> <code>Zend_Layout</code> erlaubt es jede Klasse + zu verwenden die <code>Zend_View_Interface</code> implementiert. + </para> + </listitem> + + <listitem> + <para> + <emphasis>Eigene Front Kontroller Plugins.</emphasis> <code>Zend_Layout</code> wird mit einem + Standard Front Kontroller Plugin ausgeliefert der das Layout automatisch darstellt bevor die + Antwort zurückgegeben wird. Es kann ein eigenes Plugin verwendet werden. + </para> + </listitem> + + <listitem> + <para> + <emphasis>Eigene Action Helfer.</emphasis> <code>Zend_Layout</code> wird mit einem Standard + Action Helfer ausgeliefert der für die meiden Zwecke ausreichend sein sollte da er ein dummer + Proxy für das Layout Objekt selbst ist. + </para> + </listitem> + + <listitem> + <para> + <emphasis>Eigene Auflösung von Layout Skript Pfaden</emphasis>. <code>Zend_Layout</code> erlaubt + es einen eigenen <link linkend="zend.filter.inflector">Beugungsmechanismum</link> für die + Auflösung der Layout Skript Pfade zu verwenden, oder einfach die beigefügte Beugung zu verändern + und eigene Beugungsregeln zu spezifizieren. + </para> + </listitem> + </itemizedlist> + + <sect2 id="zend.layout.advanced.view"> + <title>Eigene View Objekte</title> + + <para> + <code>Zend_Layout</code> erlaubt es jede Klasse für die Darstellung der Layout Skripte zu verwenden + die <code>Zend_View_Interface</code> implementiert oder <code>Zend_View_Abstract</code> erweitert. + Es muß einfach das eigene View Objekt als Parameter dem Konstruktor/<code>startMvc()</code> + übergeben werden, oder es mit der <code>setView()</code> Zugriffsmethode gesetzt werden: + </para> + + <programlisting role="php"><![CDATA[<?php +$view = new My_Custom_View(); +$layout->setView($view); +?>]]></programlisting> + + <note> + <title>Nicht alle Zend_View Implementationen sind gleich</title> + + <para> + Wärend es <code>Zend_Layout</code> erlaubt jede Klasse zu verwenden die + <code>Zend_View_Interface</code> implementiert, können Fälle auftreten in denen es nicht + möglich ist die verschiedenen <code>Zend_View</code> Helfer anzupassen, speziell die + Layout und <link linkend="zend.view.helpers.initial.placeholder">Platzhalter</link> Helfer. + Das ist weil <code>Zend_Layout</code> die Variablen die im Objekt gesetzt werden über + sich selbst und <link linkend="zend.view.helpers.initial.placeholder">Platzhalter</link> + bereitstellt. + </para> + + <para> + Wenn eine eigene <code>Zend_View</code> Implementation verwendet werden soll die diese Helfer + nicht unterstützt, muß ein Weg gefunden werden um die Layout Variablen in die View zu bekommen. + Das kann entweder durch die Erweiterung vom <code>Zend_Layout</code> Objekt und der Anpassung + der <code>render()</code> Methode zur Übergabe von Variablen zur View geschehen, oder durch + die Erstellung einer eigenen Plugin Klasse die diese vor der Darstellung des Layouts übergibt. + </para> + + <para> + Alternativ kann auf diese Variablen, wenn die View Implementation jegliche Art von Plugin + Möglichkeiten unterstützt, über die 'Zend_Layout' Platzhalter zugegriffen werden, indem der + <link linkend="zend.view.helpers.initial.placeholder">Platzhalter Helfer</link> verwendet wird: + </para> + + <programlisting role="php"><![CDATA[<?php +$placeholders = new Zend_View_Helper_Placeholder(); +$layoutVars = $placeholders->placeholder('Zend_Layout')->getArrayCopy(); +?>]]></programlisting> + </note> + </sect2> + + <sect2 id="zend.layout.advanced.plugin"> + <title>Eigene Front Controller Plugins</title> + + <para> + Wenn <code>Zend_Layout</code> mit den MVC Komponenten verwendet wird, registriert es ein Front + Kontroller Plugin das das Layout als letzte Aktion darstellt bevor die Bearbeitungsschleife + beendet wird. In den meisten Fällen, wird das Standardplugin ausreichen, aber sollte es gewünscht + sein ein eigenes zu schreiben, kann der Name der Pluginklasse die geladen werden soll durch die + übergabe der <code>pluginClass</code> Option an die <code>startMvc()</code> Methode spezifiziert + werden. + </para> + + <para> + Jede Plugin Klasse die für diesen Zweck geschrieben wird, muß + <code>Zend_Controller_Plugin_Abstract</code> erweitern, und sollte eine Instanz eines Layout Objektes + als Instanz für den Konstruktor akzeptieren. Andernfalls sind die Details der Implementation in + eigenen Händen. + </para> + + <para> + Die Standardmäßig verwendete Plugin Klasse ist <code>Zend_Layout_Controller_Plugin_Layout</code>. + </para> + </sect2> + + <sect2 id="zend.layout.advanced.helper"> + <title>Eigene Action Helfer</title> + + <para> + Wenn <code>Zend_Layout</code> mit den MVC Komponenten verwendet wird, registriert es einen Action + Controller Helfer mit dem Helfer Broker. Der Standardhelfer, + <code>Zend_Layout_Controller_Action_Helper_Layout</code> arbeitet als dummer Proxy zur Layout + Objekt Instanz selbst, und sollte für die meisten Zwecke ausreichend sein. + </para> + + <para> + Sollte es gewünscht sein eigene Funktionalitäten zu schreiben, kann einfach eine Action Helfer Klasse + geschrieben werden die <code>Zend_Controller_Action_Helper_Abstract</code> erweitert und den + Klassennamen als <code>helperClass</code> Option an die <code>startMvc()</code> Methode übergeben + werden. Details der Implementiert oblieben jedem selbst. + </para> + </sect2> + + <sect2 id="zend.layout.advanced.inflector"> + <title>Auflösung eigener Layout Skript Pfade: Verwenden der Beugung</title> + + <para> + <code>Zend_Layout</code> verwendet <code>Zend_Filter_Inflector</code> um eine Filterkette zu + erstellen für die Übersetzung eines Layout Namens zu einem Layout Skript Pfad. Standardmäßig + verwendet es die 'CamelCaseToDash' Regeln gefolgt von 'StringToLower' und dem Anhang 'phtml' um + den Namen in einen Pfad zu transformieren. Einige Beispiele: + </para> + + <itemizedlist> + <listitem> + <para> + 'foo' wird transformiert zu 'foo.phtml'. + </para> + </listitem> + + <listitem> + <para> + 'FooBarBaz' will be transformed to 'foo-bar-baz.phtml'. + </para> + </listitem> + </itemizedlist> + + <para> + Es gibt zwei Optionen für die Änderung der Beugung: Änderung der Beugungsregeln und des Ziels + der Beugung die mit der <code>Zend_Layout</code> Instanz gekoppelt ist, oder Erstellung einer + eigenen Beugungsinstanz und dessen Übergabe an <code>Zend_Layout::setInflector()</code>. + </para> + + <example id="zend.layout.advanced.inflector.directmodification"> + <title>Direkte Änderung der Zend_Layout Beugung</title> + + <para> + Beugung hat ein Ziel und ein oder mehrere Regeln. Das Standardziel das von + <code>Zend_Layout</code> verwendet wird ist: ':script.:suffix'; ':script' wird als registrierter + Layoutname übergeben, wärend ':suffix' eine statische Regel der Beugung ist. + </para> + + <para> + Angenommen man will das das Layout Skript mit der Endung 'html' endet, und es ist gewünscht + das CamelCase Wörter mit Unterstrichen statt Bindestrichen getrennt werden und der Name nicht + kleingeschrieben wird. Zusätzlich ist es gewünscht in einem 'layouts' Unterverzeichnis nach den + Skripts nachzuschauen. + </para> + + <programlisting role="php"><![CDATA[<?php +$layout->getInflector()->setTarget('layouts/:script.:suffix') + ->setStaticRule('suffix', 'html') + ->setFilterRule(array('CamelCaseToUnderscore')); +?>]]></programlisting> + </example> + + <example id="zend.layout.advanced.inflector.custom"> + <title>Eigene Beugung</title> + + <para> + In den meisten Fällen ist es ausreichend den bestehenden Beugungsmechanismus zu verändern. + Trotzdem kann man eine Beugung haben die in verschiedenen Orten verwendet werden soll, mit + unterschiedlichen Objekten von unterschiedlichen Typen. <code>Zend_Layout</code> unterstützt das. + </para> + + <programlisting role="php"><![CDATA[<?php +$inflector = new Zend_Filter_Inflector('layouts/:script.:suffix'); +$inflector->addRules(array( + ':script' => array('CamelCaseToUnderscore'), + 'suffix' => 'html' +)); +$layout->setInflector($inflector); +?>]]></programlisting> + </example> + + <note> + <title>Beugung kann ausgeschaltet werden</title> + + <para> + Beugung kann ausgeschaltet und eingeschaltet werden indem eine zugriffsmethode auf dem + <code>Zend_Layout</code> Objekt verwendet wird. Das kann nützlich sein wenn man einen + absoluten Pfad für ein Layout Skript spezifizieren will, oder man weiß das der Mechanismus + den man für die Spezifikation des Layout Skripts verwenden will, keine Beugung benötigt. + Es können einfach die <code>enableInflection()</code> und <code>disableInflection()</code> + Methoden verwendet werden. + </para> + </note> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->

Added: trunk/documentation/manual/de/module_specs/Zend_Layout-Options.xml (0 => 7153)

--- trunk/documentation/manual/de/module_specs/Zend_Layout-Options.xml (rev 0) +++ trunk/documentation/manual/de/module_specs/Zend_Layout-Options.xml 2007-12-16 16:24:36 UTC (rev 7153) <at> <at> -0,0 +1,205 <at> <at> +<sect1 id="zend.layout.options"> + <title>Zend_Layout Konfigurations Optionen</title> + + <para> + <code>Zend_Layout</code> hat eine Variation an Konfigurations Optionen. Diese können durch den Aufruf + entsprechender Zugriffsmethoden gesetzt werden, durch die Übergabe eines Arrays oder + <code>Zend_Config</code> Objektes an den Konstruktor oder <code>startMvc()</code>, durch die Übergabe + eines Arrays von Optionen an <code>setOptions()</code>, oder der Übergabe eines <code>Zend_Config</code> + Objektes an <code>setConfig()</code>. + </para> + + <itemizedlist> + <listitem> + <para> + <emphasis>layout</emphasis>: Das Layout das verwendet werden soll. Verwendet die aktuelle Beugung + um den Namen, der dem entsprechenden Layout View Skript angegeben wurde, aufzulösen. + Standardmäßig ist dieser Wert 'layout' und wird zu 'layout.phtml' aufgelöst. Zugriffsmethoden + sind <code>setLayout()</code> und <code>getLayout()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>layoutPath</emphasis>: Der Basispfad zu den Layout View Skripten. Zugriffsmethoden + sind <code>setLayoutPath()</code> und <code>getLayoutPath()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>contentKey</emphasis>: Die Layout Variable die für Standardinhalte verwendet wird + (wenn mit dem MVC verwendet). Der Standardwert ist 'content'. Zugriffsmethoden sind + <code>setContentKey()</code> und <code>getContentKey()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>mvcSuccessfulActionOnly</emphasis>: Wenn MVC verwendet wird, dann wird das Layout + nicht dargestellt wenn eine Aktion eine Ausnahme wirft und dieses Flag true ist (das wird + verwendet um zu verhindern das das Layout doppelt dargestellt wird wen das + <link linkend="zend.controller.plugins.errorhandler">ErrorHandler Plugin</link> verwendet wird. + Standardmäßig ist dieses Flag true. Zugriffsmethoden sind + <code>setMvcSuccessfulActionOnly()</code> und <code>getMvcSuccessfulActionOnly()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>view</emphasis>: Das View Objekt das für die Darstellung verwendet wird. Wenn mit + MVC verwendet, dann versucht <code>Zend_Layout</code> das View Objekt zu verwenden das mit + <link linkend="zend.controller.actionhelpers.viewrenderer">dem ViewRenderer</link> registriert + wurde wenn kein explizites View Objekt übergeben wurde. Zugriffsmethoden sind + <code>setView()</code> und <code>getView()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>helperClass</emphasis>: Die Action Helfer Klasse die verwendet wird wenn + <code>Zend_Layout</code> mit den MVC Komponenten verwendet wird. Standardmäßig ist das + <code>Zend_Layout_Controller_Action_Helper_Layout</code>. Zugriffsmethoden sind + <code>setHelperClass()</code> und <code>getHelperClass()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>pluginClass</emphasis>: Das Front Kontroller Plugin das verwendet wird wenn + <code>Zend_Layout</code> mit den MVC Komponenten verwendet wird. Standardmäßig ist das + <code>Zend_Layout_Controller_Plugin_Layout</code>. Zugriffsmethoden sind + <code>setPluginClass()</code> und <code>getPluginClass()</code>. + </para> + </listitem> + + <listitem> + <para> + <emphasis>inflector</emphasis>: Die Beugung die verwendet werden soll wenn Layout Namen zu + Layout Skript Pfaden aufgelöst werden; siehe <link linkend="zend.layout.advanced.inflector">die + <code>Zend_Layout</code> Beugungs Dokumentation für weitere Details</link>. + Zugriffsmethoden sind <code>setInflector()</code> und <code>getInflector()</code>. + </para> + </listitem> + </itemizedlist> + + <note> + <title>HelferKlasse und PluginKlasse müssen an startMvc() übergeben werden</title> + + <para> + Damit die <code>helperClass</code> und <code>pluginClass</code> Einstellungen wirken, müssen + diese als Option an <code>startMvc()</code> übergeben werden; wenn sie später gesetzt werden, + haben Sie keinen Effekt. + </para> + </note> + + <sect2 id="zend.layout.options.examples"> + <title>Beispiele</title> + + <para> + Die folgenden Beispiele nehmen das folgende <code>$options</code> Array und <code>$config</code> + Objekt an: + </para> + + <programlisting role="php"><![CDATA[<?php +$options = array( + 'layout' => 'foo', + 'layoutPath' => '/path/to/layouts', + 'contentKey' => 'CONTENT', // Ignoriert wenn MVC nicht verwendet wird +); +?>]]></programlisting> + + <programlisting role="php"><![CDATA[<?php +/** +[layout] +layout = "foo" +layoutPath = "/path/to/layouts" +contentKey = "CONTENT" +*/ +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); +?>]]></programlisting> + + <example id="zend.layout.options.examples.constructor"> + <title>Optionen an den Konstruktor oder startMvc() übergeben</title> + + <para> + Beide, der Konstruktor und die statische <code>startMvc()</code> Methode akzeptieren entweder + ein Array von Optionen oder ein <code>Zend_Config</code> Objekt mit Optionen um die + <code>Zend_Layout</code> Instanz zu konfigurieren. + </para> + + <para> + Zuerst zeigen wir die Übergabe eines Arrays: + </para> + + <programlisting role="php"><![CDATA[<?php +// Konstruktor verwenden: +$layout = new Zend_Layout($options); + +// startMvc() verwenden: +$layout = Zend_Layout::startMvc($options); +?>]]></programlisting> + + <para> + Und jetzt die Verwendung eines Config Objekts: + </para> + + <programlisting role="php"><![CDATA[<?php +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); + +// Konstruktor verwenden: +$layout = new Zend_Layout($config); + +// startMvc() verwenden: +$layout = Zend_Layout::startMvc($config); +?>]]></programlisting> + + <para> + Grundsätzlich ist das der einfachste Weg um die <code>Zend_Layout</code> Instanz anzupassen. + </para> + </example> + + <example id="zend.layout.options.examples.setoptionsconfig"> + <title>setOption() und setConfig() verwenden</title> + + <para> + Machmal ist es notwendig das <code>Zend_Layout</code> Objekt zu Konfigurieren nachdem es + instanziiert wurde; <code>setOptions()</code> und <code>setConfig()</code> bieten einen + schnellen und einfachen Weg das zu tun: + </para> + + <programlisting role="php"><![CDATA[<?php +// Ein Array von Optionen verwenden: +$layout->setOptions($options); + +// Ein Zend_Config Objekt verwenden: +$layout->setConfig($options); +?>]]></programlisting> + + <para> + Es ist zu beachten das einige Optionen, wie <code>pluginClass</code> und + <code>helperClass</code>, keinen Effekt haven wenn Sie mit Hilfe dieser Methode übergeben werden; + sie müssen mit dem Konstruktor oder der <code>startMvc()</code> Methode übergeben werden. + </para> + </example> + + <example id="zend.layout.options.examples.accessors"> + <title>Zugriffsmethoden verwenden</title> + + <para> + Letztendlich kann die <code>Zend_Layout</code> Instanz auch über Zugriffsmetoden konfiguriert + werden. Alle Zugriffsmethoden implementieren ein Flüssiges Interface, was bedeutet das Ihre + Aufrufe gekettet werden können: + </para> + + <programlisting role="php"><![CDATA[<?php +$layout->setLayout('foo') + ->setLayoutPath('/path/to/layouts') + ->setContentKey('CONTENT'); +?>]]></programlisting> + </example> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->
jason_qi | 16 Dec 19:52 2007

[7154] trunk/documentation/manual/zh/module_specs/Zend_Layout-Options.xml: add new translation of Zend_Layout-Options.xml based its English version 7078

Revision 7154 Author jason_qi Date 2007-12-16 12:52:33 -0600 (Sun, 16 Dec 2007)

Log Message

add new translation of Zend_Layout-Options.xml based its English version 7078

Added Paths

Diff

Added: trunk/documentation/manual/zh/module_specs/Zend_Layout-Options.xml (0 => 7154)

--- trunk/documentation/manual/zh/module_specs/Zend_Layout-Options.xml (rev 0) +++ trunk/documentation/manual/zh/module_specs/Zend_Layout-Options.xml 2007-12-16 18:52:33 UTC (rev 7154) <at> <at> -0,0 +1,150 <at> <at> +<sect1 id="zend.layout.options"> + <title>Zend_Layout 配置选项</title> + + <para> + <code>Zend_Layout</code>有多种配置选项。这些都可以用调用适当的访问器来设置,传递数组或<code>Zend_Config</code>对象给构造器或<code>startMvc()</code>,传递选项数组给<code>setOptions()</code>,或传递<code>Zend_Config</code>对象给to <code>setConfig()</code>。 + </para> + + <itemizedlist> + <listitem><para> + <emphasis>layout</emphasis>:被使用的布局。使用当前变形器来解析提供给合适的布局视图脚本的名称。缺省地,这个值是'layout'并解析为'layout.phtml'。访问器是<code>setLayout()</code> 和 <code>getLayout()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>layoutPath</emphasis>: 布局视图脚本的基本路径。访问器是<code>setLayoutPath()</code> 和 <code>getLayoutPath()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>contentKey</emphasis>: 用于缺省内容(和MVC一起使用)的布局变量。缺省值是'content'。访问器是<code>setContentKey()</code> 和 <code>getContentKey()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>mvcSuccessfulActionOnly</emphasis>: 当使用MVC,当动作抛出一个异常并且这个标志为true,布局将不被解析(这是为了防止当<link linkend="zend.controller.plugins.errorhandler">ErrorHandler plugin</link> 在使用时,布局被双重解析)。缺省地,这个标记是true。访问器是<code>setMvcSuccessfulActionOnly()</code> 和 <code>getMvcSuccessfulActionOnly()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>view</emphasis>: 当解析时使用的视图对象。当和MVC一起使用时,如果没有视图对象被显式传递,<code>Zend_Layout</code> 将尝试使用用<link linkend="zend.controller.actionhelpers.viewrenderer">the ViewRenderer</link> 注册的视图对象。访问器是<code>setView()</code> 和 <code>getView()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>helperClass</emphasis>: 当和MVC组件一起使用<code>Zend_Layout</code> 时的动作助手。 缺省是 <code>Zend_Layout_Controller_Action_Helper_Layout</code>。访问器是 <code>setHelperClass()</code> 和 <code>getHelperClass()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>pluginClass</emphasis>: 当和MVC组件一起使用<code>Zend_Layout</code> 时的前端控制器插件类。缺省是 <code>Zend_Layout_Controller_Plugin_Layout</code>。访问器是 <code>setPluginClass()</code> 和 <code>getPluginClass()</code>。 + </para></listitem> + + <listitem><para> + <emphasis>inflector</emphasis>: 当解析布局名给布局视图脚本路径时的变形器;参见<link linkend="zend.layout.advanced.inflector"> <code>Zend_Layout</code> 变形器文档有更多细节 </link>。访问器是 <code>setInflector()</code> 和 <code>getInflector()</code>。 + </para></listitem> + </itemizedlist> + + <note> + <title>助手类和插件类必须传递给startMvc()</title> + + <para> + 为了<code>helperClass</code>和<code>pluginClass</code>设置有效,它们必须作为选项传递给<code>startMvc()</code>;如果以后设置,它们就没有影响。 + </para> + </note> + + <sect2 id="zend.layout.options.examples"> + <title>范例</title> + + <para> + 下面的例子假定使用<code>$options</code>数组和<code>$config</code>对象: + </para> + + <programlisting role="php"><![CDATA[<?php +$options = array( + 'layout' => 'foo', + 'layoutPath' => '/path/to/layouts', + 'contentKey' => 'CONTENT', // ignored when MVC not used +); +?>]]></programlisting> + + <programlisting role="php"><![CDATA[<?php +/** +[layout] +layout = "foo" +layoutPath = "/path/to/layouts" +contentKey = "CONTENT" +*/ +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); +?>]]></programlisting> + + <example id="zend.layout.options.examples.constructor"> + <title>传递选项给构造器或startMvc()</title> + + <para> + 为了配置<code>Zend_Layout</code>实例,构造器和<code>startMvc()</code> 静态方法都可以接受选项数组或带有选项的<code>Zend_Config</code> 对象。 + </para> + + <para> + 首先,看一下传递数组: + </para> + + <programlisting role="php"><![CDATA[<?php +// Using constructor: +$layout = new Zend_Layout($options); + +// Using startMvc(): +$layout = Zend_Layout::startMvc($options); +?>]]></programlisting> + + <para> + 现在使用配置对象: + </para> + + <programlisting role="php"><![CDATA[<?php +$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); + +// Using constructor: +$layout = new Zend_Layout($config); + +// Using startMvc(): +$layout = Zend_Layout::startMvc($config); +?>]]></programlisting> + + <para> + 基本上,这是定制<code>Zend_Layout</code>实例的最简单的方法。 + </para> + </example> + + <example id="zend.layout.options.examples.setoptionsconfig"> + <title>使用setOption() 和 setConfig()</title> + + <para> + 有时候在<code>Zend_Layout</code> 对象初始化以后才需要配置;<code>setOptions()</code> 和 <code>setConfig()</code>让你快速而起容易地来做: + </para> + + <programlisting role="php"><![CDATA[<?php +// Using an array of options: +$layout->setOptions($options); + +// Using a Zend_Config object: +$layout->setConfig($options); +?>]]></programlisting> + + <para> + 然而要注意特定的选项,如<code>pluginClass</code> 和 <code>helperClass</code>,当用这个方法传递,将没有效果;它们需要传递给构造器或者<code>startMvc()</code> 方法。 + </para> + </example> + + <example id="zend.layout.options.examples.accessors"> + <title>使用访问器</title> + + <para> + 最后,通过访问器来配置<code>Zend_Layout</code> 实例。所有的访问器实现一个流畅的接口,意味这它们的调用可能被链接: + </para> + + <programlisting role="php"><![CDATA[<?php +$layout->setLayout('foo') + ->setLayoutPath('/path/to/layouts') + ->setContentKey('CONTENT'); +?>]]></programlisting> + </example> + </sect2> +</sect1> +<!-- +vim:se ts=4 sw=4 et: +-->

Gmane