twig gistfile1.twig

gistfile1.twig
			{% if article.authors.length %}
				{% set author = article.authors.shift() %}
					By <a href="{{ author.url }}">{{ author.name }}</a>
					{% for author in article.authors %}
						,<a href="{{ author.url }}">{{ author.name }}</a>
					{% endfor %}
			{% else %}
				&nbsp;
			{% endif %}

twig gistfile1.twig

gistfile1.twig
<title>{{title}}{% if title is true %} - {% else %}Student Press Law Center</title>

twig main.php

main.php
<?php
return array(
    'components' => array(
        ...
        'viewRenderer' => array(
            'class' => 'ext.ETwigViewRenderer',
            'globals' => array(
                'Yii' => 'Yii',
                'Captcha' => 'CCaptcha',
            ),
            'functions' => array(
                'link' => 'CHtml::link',
                'form' => 'CHtml::beginForm',
                'endform' => 'CHtml::endForm',
                'sform' => 'CHtml::statefulForm',
                'errors' => 'CHtml::errorSummary',
                '_text' => 'CHtml::textField',
                'label' => 'CHtml::activeLabel',
                'text' => 'CHtml::activeTextField',
                'password' => 'CHtml::activePasswordField',
                'checkbox' => 'CHtml::activeCheckBox',
                'submit' => 'CHtml::submitButton',
            ),
        ),
        ...
register.php
<?php if (Yii::app()->user->hasFlash('error')): ?>
<div class="flash-error">
    <div class="center">
        <?php echo Yii::app()->user->getFlash('error'); ?><br />
        <?php echo CHtml::link('新規登録画面に戻る', array('/user/register')); ?> 
    </div><!-- /.center -->
</div><!-- /.flash-error -->
<?php else: ?>

<p>
    新規登録を行います<br />
    以下のフォームに必要な情報を入力してください
</p>

<div class="form">
    <?php echo CHtml::statefulForm(); ?> 
    <?php echo CHtml::errorSummary($model); ?>

    <div class="row">
        <?php echo CHtml::activeLabel($model, 'username'); ?> 
        <?php echo CHtml::activeTextField($model, 'username', array('maxlength' => 32)); ?> 
    </div><!-- /.row -->

    <div class="row">
        <?php echo CHtml::activeLabel($model, 'email'); ?> 
        <?php echo CHtml::activeTextField($model, 'email', array('maxlength' => 64)); ?> 
    </div><!-- /.row -->

    <div class="row">
        <?php echo CHtml::activeLabel($model, 'password'); ?> 
        <?php echo CHtml::activePasswordField($model, 'password', array('maxlength' => 64)); ?> 
    </div><!-- /.row -->

    <div class="row">
        <?php echo CHtml::activeLabel($model, 'verifyPassword'); ?> 
        <?php echo CHtml::activePasswordField($model, 'verifyPassword', array('maxlength' => 64)); ?>
    </div><!-- /.row -->

    <?php if (CCaptcha::checkRequirements()): ?>
    <div class="row">
        <?php $this->widget('CCaptcha'); ?> 
        <?php echo CHtml::activeLabel($model, 'verifyCode'); ?> 
        <?php echo CHtml::activeTextField($model,'verifyCode'); ?> 
    </div><!-- /.row -->
    <?php endif; ?>

    <div class="row buttons">
        <?php echo CHtml::submitButton('登録内容を確認する', array('name' => 'confirm')); ?> 
    </div><!-- /.row buttons -->

    <?php echo CHtml::endForm(); ?>
</div><!-- /.form -->
<?php endif; ?>
register.twig
{% if App.user.hasFlash('error') %}
<div class="flash-error">
    <div class="center">
        {{ App.user.getFlash('error') }}<br />
        {{ link('新規登録画面に戻る', ['/user/register']) }}
    </div><!-- /.center -->
</div><!-- /.flash-error -->
{% else %}

<p>
    新規登録を行います<br />
    以下のフォームに必要な情報を入力してください
</p>

<div class="form">
    {{ sform() }}
    {{ errors(model) }}

    <div class="row">
        {{ label(model, 'username') }}
        {{ text(model, 'username', {'maxlength': 32}) }}
    </div><!-- /.row -->

    <div class="row">
        {{ label(model, 'email') }}
        {{ text(model, 'email', {'maxlength': 64}) }}
    </div><!-- /.row -->

    <div class="row">
        {{ label(model, 'password') }}
        {{ password(model, 'password', {'maxlength': 64}) }}
    </div><!-- /.row -->

    <div class="row">
        {{ label(model, 'verifyPassword') }}
        {{ password(model, 'verifyPassword', {'maxlength': 64}) }}
    </div><!-- /.row -->

    {% if Captcha.checkRequirements %}
    <div class="row">
        {{ this.widget('CCaptcha', [], true) }}
        {{ label(model, 'verifyCode') }}
        {{ text(model, 'verifyCode') }}
    </div><!-- /.row -->
    {% endif %}

    <div class="row buttons">
        {{ submit('登録内容を確認する', {'name': 'confirm'}) }}
    </div><!-- /.row buttons -->

    {{ endform() }}
</div><!-- /.form -->
{% endif %}

twig _form.twig

_form.twig
<div class="form">
{% set form = this.beginWidget('CActiveForm', {
    'id': 'hoge-form',
    'enableAjaxValidation': false,
}) %}

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    {{ form.errorSummary(model) }}
    
    <div class="row">
        {{ form.labelEx(model, 'userid') }}
        {{ form.textField(model, 'userid') }}
        {{ form.error(model, 'userid') }}
    </div><!-- /.row -->

    <div class="row">
        {{ form.labelEx(model, 'fuga') }}
        {{ form.textField(model, 'fuga', {'size': 60, 'maxlength': 64}) }}
        {{ form.error(model, 'fuga') }}
    </div><!-- /.row -->

    <div class="row">
        {{ form.labelEx(model, 'piyo') }}
        {{ form.textField(model, 'piyo', {'size': 60, 'maxlength': 64}) }}
        {{ form.error(model, 'piyo') }}
    </div><!-- /.row -->

    <div class="row buttons">
        {{ C.Html.submitButton(model.isNewRecord ? 'Create' : 'Save') }}
    </div><!-- /.row buttons -->

{% do this.endWidget %}
</div><!-- form -->
_view.twig
<div class="view">
    <b>{{ data.getAttributeLabel('id')|e }}</b>
    {{ C.Html.link(data.id|e, {0: 'view', 'id': data.id}) }}
    <br />
    
    <b>{{ data.getAttributeLabel('userid')|e }}</b>
    {{ data.userid|e }}
    <br />
    
    <b>{{ data.getAttributeLabel('fuga')|e }}</b>
    {{ data.fuga|e }}
    <br />

    <b>{{ data.getAttributeLabel('piyo')|e }}</b>
    {{ data.piyo|e }}
    <br />
</div><!-- /.view -->
admin.twig
{% do this.setBreadCrumbs({
    'Hoges': ['index'],
    0: 'Manage',
}) %}

{% do this.setMenu([
    {'label': 'List Hoge', 'url': ['index']},
    {'label': 'Create Hoge', 'url': ['create']},
]) %}

{{ void(App.clientScript.registerScript('search', "
$('.search-button').click(function(){
    $('.search-form').toggle();
    return false;
});
$('.search-form form').submit(function(){
    $.fn.yiiGridView.update('hoge-grid', {
        data: $(this).serialize()
    });
    return false;
});
")) }}

<h1>Manage Hoges</h1>

<p>
You may optionally enter a comparison operator (<b>&lt;</b>, <b>&lt;=</b>, <b>&gt;</b>, <b>&gt;=</b>, <b>&lt;&gt;</b>
or <b>=</b>) at the beginning of each of your search values to specify how the comparison should be done.
</p>

{{ C.Html.link('Advanced Search', '#', {'class': 'search-button'}) }}
<div class="search-form" style="display:none">
{% include 'views/hoge/_search.twig' with {'model': model} %}
</div><!-- /.search-form -->

{% do this.widget('zii.widgets.grid.CGridView', {
    'id': 'hoge-grid',
    'dataProvider': model.search,
    'filter': model,
    'columns': [
        'id', 'userid', 'fuga', 'piyo',
        {'class': 'CButtonColumn'},
    ],
}) %}
column1.twig
{% extends 'views/layouts/main.twig' %}

{% block container %}
<div class="container">

    <div id="content">
        {% block content %}
        {{ content }}
        {% endblock content %}
    </div><!-- /#content -->

</div><!-- /.container -->
{% endblock container %}
column2.twig
{% extends 'views/layouts/main.twig' %}

{% block container %}
<div class="container">

    <div class="span-19">
        <div id="content">
            {% block content %}
            {{ content }}
            {% endblock content %}
        </div><!-- ./content -->
    </div><!-- /.span-19 -->

    <div class="span-5 last">
        <div id="sidebar">
            {% do this.beginWidget('zii.widgets.CPortlet', {
                'title': 'Operations',
            }) %}
            {% do this.widget('zii.widgets.CMenu', {
                'items': this.menu,
                'htmlOptions': {'class': 'operations'},
            }) %}
            {% do this.endWidget %}
        </div><!-- /.sidebar -->
    </div><!-- /.span-5 last -->

</div><!-- /.container -->
{% endblock container %}
index.twig
{% do this.setBreadcrumbs(['Hoges']) %}

{% do this.setMenu([
    {'label': 'Create Hoge', 'url': ['create']},
    {'label': 'Manage Hoge', 'url': ['admin']},
]) %}

<h1>Hoges</h1>

{% do this.widget('zii.widgets.CListView', {
    'dataProvider': dataProvider,
    'itemView': '_view',
}) %}
main.twig
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="ja" />
    <!-- blueprint CSS framework -->
    <link rel="stylesheet" type="text/css" href="{{ App.baseUrl }}/css/screen.css" media="screen, projection" />
    <link rel="stylesheet" type="text/css" href="{{ App.baseUrl }}/css/print.css" media="print" />
    <!--[if lt IE 8]>
    <link rel="stylesheet" type="text/css" href="{{ App.baseUrl }}/css/ie.css" media="screen, projection" />
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="{{ App.baseUrl }}/css/main.css" />
    <link rel="stylesheet" type="text/css" href="{{ App.baseUrl }}/css/form.css" />
    <title>{{ this.pageTitle|e }}</title>
</head>
<body>
<div class="container" id="page">

    <div id="header">
        <div id="logo">{{ App.name|e }}</div>
    </div><!-- /#header -->

    <div id="mainmenu">
        {% do this.widget('zii.widgets.CMenu', {
            'items': [
                {'label': 'Home', 'url': ['/hoge/index']},
                {'label': 'About', 'url': ['/site/about']},
                {'label': 'Contact', 'url': ['/site/contact']},
                {'label': 'Login', 'url': ['/site/login'], 'visible': App.user.isGuest},
                {'label': 'Logout ('~App.user.name~')', 'url': ['/site/logout'], 'visible': not App.user.isGuest},
                {'label': 'Gii', 'url': ['/gii']},
            ],
        }) %}
    </div><!-- /#mainmenu -->

    {% if this.breadcrumbs %}
        {% do this.widget('zii.widgets.CBreadcrumbs', {
            'links': this.breadcrumbs,
        }) %}
    {% endif %}

    {% block container %}
    {% endblock container %}

    <div id="footer">
        Copyright &copy; {{ now|date('Y') }} by My Company.<br/>
        All Rights Reserved.<br/>
        {{ Yii.powered }}
    </div><!-- /#footer -->

</div><!-- /.container #page -->
</body>
</html>
update.twig
{% do this.setBreadcrumbs({
    'Hoges': ['index'],
    (model.id): {0: 'view', 'id': model.id},
    0: 'Update',
}) %}

{% do this.setMenu([
    {'label': 'List Hoge', 'url': ['index']},
    {'label': 'Create Hoge', 'url': ['create']},
    {'label': 'View Hoge', 'url': {0: 'view', 'id': model.id}},
    {'label': 'Manage Hoge', 'url': ['admin']},
]) %}

<h1>Update Hoge {{ model.id }}</h1>

{% include 'views/hoge/_form.twig' with {'model': model} %}
view.twig
{% do this.setBreadcrumbs({
    'Hoges': ['index'],
    0: model.id,
}) %}

{% do this.setMenu([
    {'label': 'List Hoge', 'url': ['index']},
    {'label': 'Create Hoge', 'url': ['create']},
    {'label': 'Update Hoge', 'url': {0: 'update', 'id': model.id}},
    {'label': 'Delete Hoge', 'url': '#', 'linkOptions': {'submit': {0: 'delete', 'id': model.id}, 'confirm': 'Are you sure you want to delete this item?'}},
    {'label': 'Manage Hoge', 'url': ['admin']},
]) %}


<h1>View Hoge #{{ model.id }}</h1>

{% do this.widget('zii.widgets.CDetailView', {
    'data': model,
    'attributes': [
        'id', 'userid', 'fuga', 'piyo', 'is_deleted',
    ]
}) %}

twig 访问twig上下文变量

访问twig上下文变量

filename.html.twig
{% for key, value in _context %}
  <li>{{ key }}</li>
{% endfor %}