5

私は問題に遭遇しましたが、それは私にとってはまったく明確ではなく、理解するのが難しいものです。私は自分のサイトのすべてのページに表示されるはずのカレンダーウィジェットを作成しようとしました。だから、私はそれが平均的なテンプレートであるべきだと思います(議論なし、すべてのサイトなし)。小枝のテンプレートとしてやってみました。カレンダーをレンダリングできましたが、日付オブジェクトの取得に問題がありました(カレンダーをレンダリングするための適切な引数を取得するために必要です)。しばらくして、メインのtwigテンプレート(layout.html.twig)に含まれるphpテンプレートを作成しようとしました。成功しません。config.ymlでphpエンジンを有効にしましたが、役に立ちません-phpテンプレートは実際に含まれていますが、phpファイルではなく通常のファイルとして(phpスクリプトとして解析されません)(ただし、phpエンジンは機能しているので、レンダリングしようとしましたそれが機能するコントローラーからのphpテンプレート)。

この問題を解決するにはどうすればよいですか?

メインconfig.yml

imports:
    - { resource: parameters.ini }
    - { resource: security.yml }

framework:
    #esi:             ~
    translator:      { fallback: %locale% }
    secret:          %secret%
    charset:         UTF8
    router:          { resource: "%kernel.root_dir%/config/routing.yml" }
    form:            true
    csrf_protection: true
    validation:      { enable_annotations: true }
    templating:      { engines: ['twig', 'php'] }
    session:
        default_locale: %locale%
        auto_start:     true

# Twig Configuration
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    # java: /usr/bin/java
    filters:
        cssrewrite: ~
        # closure:
        #     jar: %kernel.root_dir%/java/compiler.jar
        # yui_css:
        #     jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

# Swiftmailer Configuration
#swiftmailer:
#    transport: %mailer_transport%
#    host:      %mailer_host%
#    username:  %mailer_user%
#    password:  %mailer_password%

jms_security_extra:
    secure_controllers:  true
    secure_all_services: false

# services:
#    TpsaMailer:

#        class: Tpsa\TestBundle\Controller\MailerController

layout.html.twig

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

{% block stylesheets %}
<link rel="stylesheet" type="text/css"
href="{{ asset('bundles/tpsablog/css/main.css') }}">
{% endblock %}

{% block javascripts %}
<!-- empty javascripts -->
{% endblock %}

<title>
{% block title %}
{% trans %}blog.programisty.duga{% endtrans %}
{% endblock %}
</title>

</head>
<body>
<div id="all">
    <div id="top">
        {% block top %}
            <div style="float: left" class="right">
                            <img style="float: left;
                            vertical-align: middle; margin: 8px
                            8px 8px 0px" src="{{ asset('bundles/tpsablog/images/glider.png') }}">
                <h4>{% trans %}blog.programisty.duga{% endtrans %}</h4>
                <div style="font-size: 8px">
                    {% trans %}ciekawosc.wiedza.niewygodne{% endtrans %}
                    <!-- Ciekawość i wiedza... To, co jest niewygodne dla
                    władzy -->
                </div>

            </div>
            <div style="float: right">
                <a href="{{ path('HomePage') }}">{% trans %}strona.glowna{% endtrans %}</a>
                <a href="{{ path('AboutPage') }}">{% trans %}o.mnie{% endtrans %}</a>
                <a href="{{ path('TBB_mess_add') }}">{% trans %}napisz.do.mnie{% endtrans %}</a>
                {% if is_granted('IS_AUTHENTICATED_FULLY') %}
                {{ app.user.username }}
                <a href="{{ path('TBB_tag_list_homepage') }}">{% trans %}tagi{% endtrans %}</a>
                <a href="{{ path('TBB_mess_list_homepage') }}">{% trans %}wiadomosci{% endtrans %}</a>
                <a href="{{ path('logout') }}">{% trans %}wyloguj{% endtrans %}</a>
                {% else %}
                <a href="{{ path('login') }}">{% trans %}zaloguj{% endtrans %}</a>
                {% endif %}
                <div style="text-align: center; margin: 10px 0px">
                <a href="{{ path('TBB_rss') }}">
                <img src="{{ asset('bundles/tpsablog/images/rss.png')
                }}" alt="rss channel">  
                </a>
                <a href="http://www.facebook.com/duga.chernobyl"
                target="_blank">
                <img src="{{ asset('bundles/tpsablog/images/facebook.png') }}"
                alt="facebook"> 
                </a>
                <a href="http://www.youtube.com/user/DugaEye"
                target="_blank">
                <img src="{{ asset('bundles/tpsablog/images/youtube.png') 
                }}" alt="youtube">
                </a>
                </div>
            </div>
            <div style="clear:both"></div>
        {% endblock %}
    </div>

    <div id="frame">
        <div id="left">
        {% block content %}
            {% trans %}TODO{% endtrans %}
        {% endblock %}
        </div>
        <div id="right">
        {% block panel %}
            <div style="text-align: left">
                <div style="text-align: center">    
                <h4>{% trans %}profil.duga.eye{% endtrans %}</h4>
                <img style="width: 100px" src="{{
                asset('bundles/tpsablog/images/photo.jpg')
                }}">
                </div>
                <div style="font-weight:900; margin-top: 10px">
                <ul>
                <li>{% trans %}wiek{% endtrans %}: 21</li>
                <li>{% trans %}miejsce{% endtrans %}: /dev/null</li>
                <li>{% trans %}zainteresowania{% endtrans %}: {% trans %}programowanie.hacking.filozofia{% endtrans %}</li>
                <li>{% trans %}email{% endtrans %}: <a
                href="mailto:duga(dot)eye(at)gmx(dot)com">Mail</a>
                </ul>
                </div>
            </div>
            <h3>{% trans %}reklamy{% endtrans %}</h3>
            {% include '::calendar.html.php' %}
        {% endblock %}
        </div>
    </div>

    <div id="footer">
        {% block footer %}
        {% trans %}footer{% endtrans %}
        {% endblock %}
    </div>


</div>
</body>
</html>

php Dateオブジェクトから適切なパラメータoffset、number、koniec、aktualnyを取得するにはどうすればよいですか?(現在はハードコーディングされています)

calendar.html.twig

{% include '::calendar.html.php' %}

{% set offset = 1 %}
{% set number = 28 %}
{% set koniec =  7 - ((offset + number) % 7) %}
{% set aktualny = 13 %}
<table border="0" style="text-align: center">
<thead>
<tr>
<td>{% trans %}pn{% endtrans %}</td>
<td>{% trans %}wt{% endtrans %}</td>
<td>{% trans %}sr{% endtrans %}</td>
<td>{% trans %}czw{% endtrans %}</td>
<td>{% trans %}pt{% endtrans %}</td>
<td>{% trans %}sob{% endtrans %}</td>
<td>{% trans %}nie{% endtrans %}</td>
</tr>
<tbody>
{% if offset % 7 != 0 %}
<tr>
{% for i in range(0,offset-1,1) %}<td><br></td>{% endfor %}
{% endif %}
{% for i in 1..number %}
{% if (i+offset)%7 == 1 %}<tr>{% endif %}
<td>
{% if i == aktualny %}
<span style="color: red">{{ i }}</span>
{% else %}
{{ i }}

{% endif %} 

</td>
{% if (i+offset)%7 == 0  %}</tr>{% endif %}
{% endfor %}
{% if koniec  < 7 %}
{% for i in 1..koniec %}
<td><br></td>
{% endfor %}
</tr>
{% endif %}
</tbody>
</table>

小枝テンプレートに含めることでphpテンプレートとして実行する必要があるphpテンプレートですが、1つのテンプレートとして解析および実行されません。

calendar.html.php

ppp<?php echo  ('ala') ?>ooo

ソースに「pppooo」を含めるだけで、htmlタグとして処理されて表示されません。

必要に応じてdepsファイル

[symfony]
    git=http://github.com/symfony/symfony.git
    version=v2.0.9

[twig]
    git=http://github.com/fabpot/Twig.git
    version=v1.5.1

[monolog]
    git=http://github.com/Seldaek/monolog.git
    version=1.0.2

[doctrine-common]
    git=http://github.com/doctrine/common.git
    version=2.1.4

[doctrine-dbal]
    git=http://github.com/doctrine/dbal.git
    version=2.1.5

[doctrine]
    git=http://github.com/doctrine/doctrine2.git
    version=2.1.5

[swiftmailer]
    git=http://github.com/swiftmailer/swiftmailer.git
    version=v4.1.5

[assetic]
    git=http://github.com/kriswallsmith/assetic.git
    version=v1.0.2

[twig-extensions]
    git=http://github.com/fabpot/Twig-extensions.git

[metadata]
    git=http://github.com/schmittjoh/metadata.git
    version=1.0.0

[SensioFrameworkExtraBundle]
    git=http://github.com/sensio/SensioFrameworkExtraBundle.git
    target=/bundles/Sensio/Bundle/FrameworkExtraBundle
    version=origin/2.0

[JMSSecurityExtraBundle]
    git=http://github.com/schmittjoh/JMSSecurityExtraBundle.git
    target=/bundles/JMS/SecurityExtraBundle
    version=origin/1.0.x

[SensioDistributionBundle]
    git=http://github.com/sensio/SensioDistributionBundle.git
    target=/bundles/Sensio/Bundle/DistributionBundle
    version=origin/2.0

[SensioGeneratorBundle]
    git=http://github.com/sensio/SensioGeneratorBundle.git
    target=/bundles/Sensio/Bundle/GeneratorBundle
    version=origin/2.0

[AsseticBundle]
    git=http://github.com/symfony/AsseticBundle.git
    target=/bundles/Symfony/Bundle/AsseticBundle
    version=v1.0.1
4

3 に答える 3

6

単一の応答で小枝とphpを組み合わせて使用​​することはできません(そうすることで、小枝のポイントの一部を回避することになります。これは、デザイナーがビューに過度のロジックを作成するのを防ぐためです)。

symfonyのドキュメントはこれについてもっと明確にすべきであると思います(現時点では、基本的に「両方を有効にして、好きなことをする」と書かれています)。

別のコントローラーを埋め込む場合は、別の応答を提供できるはずであり、その応答はphpベースにすることができます。

于 2013-04-11T19:41:46.113 に答える
2

注:以下のスニペットは完全にテストされていません。

http://twig.sensiolabs.org/doc/functions/date.html

この関数dateは\DateTimeオブジェクトを作成しているようです。

{% set now = date() %}
{% set offset = date(now.format('Y/m/01')).format(w) %} {# weekday of 1st day #}
{% set number = now.format('t') %} {# days in month #}
{% set koniec = 7 - ((offset + number) % 7) %}
{% set aktualny = now.format('n') %} {# today #}

ただし、元のphpファイル(たとえば「calendar.php」)を小枝に含めたい場合は、それを機能させるために拡張子を作成する必要があります。

class CalendarExtension extends \Twig_Extension
{
    private $pathToPhp; //store that where the php file is

    public function setPhpFile($pathToPhp)
    {
        $this->pathToPhp = $pathToPhp;
    }

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('calendar', array($this, 'showCalendar'))
        );
    }

    public function showCalendar([put arguments here if you need])
    {
        ob_start();
        include ($this->pathToPhp);
        return ob_get_clean();
    }
}

上記を機能させるには、コンテナに「タグ付き」サービスを作成する必要があります。

in app/config/config.yml

services:
    calendar_twig_extension:
        class: __Namespace__\CalendarExtension
        calls:
            - [setPhpFile, [__path to your calendar.php__]]
        tags:
            - [name: twig.extension]

二重に下線が引かれた単語は置き換える必要があります。

  • __名前空間__:CalendarExtensionの名前空間
  • _ _calendar.phpへのパス__:calendar.phpへのフルパス。%kernel.root_dir%などのパラメーターを使用して、プロジェクト相対パスを管理できます。

これらを使用すると、最終的に簡単に書くことができます

{{ calendar([arguments for CalendarExtension::showCalendar]) }}
于 2013-12-17T06:30:45.920 に答える
1

{% render 'ApplicationBundle:Controller:action' %}phpテンプレートのレンダリングを使用して、アクションでカレンダーphpテンプレートをレンダリングすることを検討しましたか?

カレンダーの小枝をレンダリングするアクションでカレンダーのphpをレンダリングし、phpテンプレートの出力を単純な小枝変数として渡すこともできます。

{{ var|raw }}注:このような変数を表示するには、内部にhtmlタグがあるかどうかを忘れないでください。

注2:symfony2.2以降、レンダリングパラメータは次のように変更されました。{% render url('route_name') %}

于 2013-01-11T16:11:14.440 に答える