2012-01-13 7 views
4

私はウェブサイト上で.twigテンプレートを使用しますが、いくつかのビューではかなり論理的になる必要があります。私はtwigがこれとPHPでやるべきケーキを処理できるとは思わない。 (私はそれが何であるかの詳細を説明するつもりはなく、PHPで簡単に知ることができ、実際にコードを持っている)。問題は、タイプ.twigのベーステンプレートまたは親テンプレートに.PHPテンプレートを含めることができますか?.phpテンプレートに.twigベーステンプレートを含める

例(動作しない)以下 - blah.html.phpがbase.html.twigテンプレートを拡張するテンプレートです...

/いくつか/ web /ディレクトリ/バンドル名/リソース/ビュー/何とかブラウザオン/ blah.html.php

<?php $view->extend('::base.html.twig') ?> 

<?php $view['slots']->set('title', 'Welcome to nowhere!') ?> 

<?php $view['slots']->start('body') ?> 

    <div id="body"> 
     html stuff here, blah blah blah... 
     <?php .... ?> 
      complex php and html stuff, and so on... 
     </php end....?> 
     you get the idea... 
    </div> 

<?php $view['slots']->stop() ?> 

上記のコードは、(すなわち、テンプレートエンジンによって実行されない)、ブラウザにテキストとして基本テンプレート内のすべての.twigコードをレンダリングします。

PS - はい、私は両方.twigを持っているアプリ/設定/ config.yml

templating:  { engines: ['twig', 'php'] } 

[OK]を、ここでは "複雑な" ものの詳細がある... に設定された.PHPこれはsymfony 1.4でコード化されたサイトのバージョンから取られている - そのはsymfonyの2にアップグレードされていると私たちは本当にSymfony2の中にサービス層に配置する必要があり、すべての.twig

<?php foreach ($all_items as $item): ?> 
<tr> 
    <td valign="top"> 
     //<?php include_partial('global/item', array('item' => $item)) ?> 

<<< some code snipped out here >>> 

    <td valign="top"> 
     <table border="1" width="100%"> 
     <?php echo $form->renderFormTag('memberitems/additem') ?> 
     <?php echo $form['item_id']->render(array('value' => $item->getIid())) ?> 
     <?php echo $form['user_id']->render(array('value' => 1)) ?> 
     <?php echo $form['_csrf_token'] ?> 
      <tr> 
       <td width="50" colspan="2" align="center">Quantity<br><?php echo $form['quantity']->render() ?></td> 
       <td width="50" colspan="2" align="center">Amount<br><?php echo $form['value']->render() ?></td> 
       <td width="50" colspan="2" align="center"><input type="submit" value="Add"></td> 
      </tr> 
     </form> 

    <<< here is a complex portion, we're declaring a variable with a value >>> 
    <<< cant do this with twig - from what I know... >>> 

     <?php // determine if item is in registry - if so display "Currently Asking For:" ?> 
     <?php $is_in_registry = false; ?> 
     <?php foreach($member_items as $m_item): ?> 
     <?php if($m_item->getIid() == $item->getIid()): ?> 
     <?php  if($is_in_registry == false): ?> 
     <?php   $is_in_registry = true; ?> 
         <tr> 
          <td width="50" colspan="6" align="center"><br>Currently Asking For:</td> 
         </tr> 
     <?php  endif ?> 

     <?php echo $form->renderFormTag('memberitems/removeitem') ?> 
     <?php echo $form['item_id']->render(array('value' => $item->getIid())) ?> 
     <?php echo $form['user_id']->render(array('value' => 1)) ?> 
     <?php echo $form['id']->render(array('value' => $m_item->getMIid())) ?> 
     <?php echo $form['_csrf_token']->render() ?> 

         <tr> 
          <td width="50" colspan="4" align="center"> 
           <?php echo $m_item->getMIqty()." @ ".$m_item->getMIval() ?> 
          </td> 
          <td width="50" colspan="2" align="center"><input type="submit" value="Remove"></td> 
         </tr> 
        </form> 
     <?php endif ?> 
     <?php endforeach ?> 
+0

どのような複雑なもの?あなたは小枝機能またはマクロに置くことができます。 – solarc

+0

Carlosz - 私は複雑なものについていくつかの詳細を添えて質問を更新しました...これは、私が複雑と呼ぶものの1つの例です。複雑なことは、twigが複雑なことを意味します。この。 (私は間違っている可能性があります)。 – ElasticThoughts

答えて

4

複雑なロジックを使用します。テンプレートは、PHPに精通していないすべての開発者(フロントエンド開発者など)にとってきれいできれいに見えるはずです。

しかし、私はそのテンプレートでは、Twigで実行できなかったものは表示されません。それを証明するためにTwigで書かれたトリッキーな部分があります:

{% set is_in_registry = false %} 
{% for m_item in member_items %} 

    {% if m_item.getIid == item.getIid %} 
     {% if is_in_registry is false %} 
      {% set is_in_registry = true %} 
      <tr> 
       {# you should use css for styling the td #} 
       <td width="50" colspan="6" align="center"><br />Currently asking for:</td> 
      </tr> 
     {% endif %} 

     {{ form.renderFormTag('memberitems/removeitem') }} 
     {{ form.item_id.render({ value: item.getIid }) }} 
     {{ form.user_id.render({ value: 1 }) }} 
     {{ form.id.render({ value: m_item.getMIid }) }} 
     {{ form._csrf_token.render }} 

     <tr> 
      <td width="50" colspan="4" align="center"> 
       {{ m_item.getMIqty ~ ' @ ' ~ m_item.getMIval }} 
      </td> 
      <td width="50" colspan="2" align="center"><input type="submit" value="Remove"></td> 
     </tr> 
     {# didn't notice your form opening tag. I'm assuming you're dynamically generating it #} 
     </form> 
    {% endif %} 
{% endfor %} 
+0

gilden - 上記のコードをありがとう!私は、 "トリッキーな"ものは視野に入れてはいけないということに同意する。私は小枝が変数を宣言する能力を持っていたことを知らなかったが、これは複雑なコードの90%を解決するかもしれない。他の10%を後でサービスに移すことができるはずです。 – ElasticThoughts

+0

@CocoaNoob Twigは非常に強力で、拡張性はありますが、実際には制限はありません。あなたがすでにそれをやっていない場合に備えて、私はあなたが(本当に短い)[マニュアル](http://twig.sensiolabs.org/documentation)を読んで、Twigを最大限に活用することをお勧めします。 – gilden

+0

私はsymfony.comのサイト(http://symfony.com/doc/current/book/templating.html)で簡単な紹介を読んでいますが、http://twig.sensiolabs.orgの情報は読んでいません。 。それは次のことです!再度、感謝します! – ElasticThoughts

関連する問題