merged branch fabpot/inline (PR #709)
authorFabien Potencier <fabien.potencier@gmail.com>
Tue, 24 Apr 2012 11:09:06 +0000 (13:09 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Tue, 24 Apr 2012 11:09:06 +0000 (13:09 +0200)
Commits
-------

07f13df fixed typo
0f623a1 added the parent as an argument to the embed tag (removes the need to use extends)
fab21d8 renamed the inline tag to embed
1b54780 tweaked examples
955726a changed the inline examples to not use even/odd to avoid confustion
fb07f3a renamed indice to index
fafde80 added more info in the docs
2fa8224 added the inline tag

Discussion
----------

added the inline tag

At Sensio, we manage websites with many mostly-static pages that share almost the same structure (with different content of course), but with some subtle differences. After trying many different possibilities (external templates, inheritance, macros, and some ugly ones that I won't even tell you about ;)) to structure our templates, we came to the conclusion that we needed a new concept.

This new concept is implemented via a new tag, `inline`, which I want to include in Twig 1.8 (not for the upcoming 1.7 which is due this week). But before merging this code into master, I want to gather some feedback from the community. One of my questions being: Will you use this new possibility?

I won't tell you more here as the tag is fully documented in the diff.

---------------------------------------------------------------------------

by oojacoboo at 2012-04-23T17:58:59Z

odd/even?  What other potential uses do you see?  I think I can see a couple, but generally speaking, unless it's a content site (ie. blog), the odd/even isn't very useful.  Reusing blocks even with minor customizations on a per page level is highly needed for our development processes, but an odd/even scenario is certainly not.

Maybe I'm missing something here.  What about passing attributes to a block or something?

---------------------------------------------------------------------------

by fabpot at 2012-04-23T18:02:51Z

@oojacoboo odd/even is just an example. Of course, this is not a real use case, this was just an attempt to find an example.

---------------------------------------------------------------------------

by stof at 2012-04-23T18:03:53Z

@oojacoboo there is no reference to odd/even in the code, only in the doc

---------------------------------------------------------------------------

by simensen at 2012-04-23T18:20:10Z

I think that it would be useful in some cases. I can't think of any places I could use it *right now* but I know I've had to jump through hoops on more than a few occasions to get things to work correctly. Being able to keep functionality like this in mind at the design stage might have made things easier in a few of those cases.

---------------------------------------------------------------------------

by lyrixx at 2012-04-23T18:21:34Z

I think it's a good idea.

---------------------------------------------------------------------------

by tyomo4ka at 2012-04-23T18:25:07Z

I think it will be great. Each time when I need to include templat that simple extends another one and replace one small block I think: "Why I should to create new template for it?". Thanks, @fabpot

---------------------------------------------------------------------------

by bmatzner at 2012-04-23T18:28:23Z

Right on. +1

---------------------------------------------------------------------------

by cranberyxl at 2012-04-23T18:40:17Z

I believe the concept is a good one, but the example using even and odd will confuse frontend developers because it's usually used in the context of loops and table striping. even changing it to styleA.twig and styleB.twig would be more understandable.

---------------------------------------------------------------------------

by lyrixx at 2012-04-23T19:01:32Z

@cranberyxl  +1

---------------------------------------------------------------------------

by fabpot at 2012-04-23T19:24:21Z

ok, I've just changed the examples to not used even/odd.

---------------------------------------------------------------------------

by jorgelbg at 2012-04-23T19:27:53Z

I think that the inline tag is a valid concept, but still I can't get it landed on a real case!

---------------------------------------------------------------------------

by sirowl at 2012-04-23T19:35:07Z

As a webdesigner with a steady foundation in CSS I find the term inline very confusing, I had to consult a developer to actually understand what was the idea of the tag as I so heavily associated it with CSS's terminology of inline.
The CSS terminololigy got me on the wrong track in terms of what the tag was supposed to be used for.
I have no good suggestion for a name for it, but inline could probably get very confusing for a lot of webdesigners making use of twig.

---------------------------------------------------------------------------

by fabpot at 2012-04-23T19:41:48Z

@sirowl `inline` was the best term I could come up with but I'm open to any other suggestion.

---------------------------------------------------------------------------

by sirowl at 2012-04-23T19:47:30Z

The best I could come up with is embed, as it is an embedded document of sorts.. or something along those lines.

---------------------------------------------------------------------------

by bschussek at 2012-04-23T19:48:54Z

I like `embed`.

---------------------------------------------------------------------------

by bmatzner at 2012-04-23T19:55:37Z

Hi Fabien, inline makes sense to me, although I understand @sirowl's comment, but I even find the concept quite comparable to the CSS display:block/display:inline logic. @sirowl's suggestion of "embed" would be just as fine, as it's just a matter of learning what this particular tag refers to. The ambiguation against the import tag is probably the most crucial, explaining the advantages of "inline" (or whatever) over doing an import

---------------------------------------------------------------------------

by Baachi at 2012-04-23T20:03:26Z

I lke ```embed```, too.

---------------------------------------------------------------------------

by Nami-Doc at 2012-04-23T20:11:42Z

I like `embed`, but `inline` is fine too.

---------------------------------------------------------------------------

by tijuan at 2012-04-23T20:36:39Z

I like the feature
I like embed

---------------------------------------------------------------------------

by pulse00 at 2012-04-23T20:56:41Z

+1 for `embed`

---------------------------------------------------------------------------

by mickaelandrieu at 2012-04-24T00:35:01Z

I like embed, inline for me is an CSS behavior

---------------------------------------------------------------------------

by matheo at 2012-04-24T04:29:05Z

+1 for `embed`

---------------------------------------------------------------------------

by fabpot at 2012-04-24T05:35:06Z

I've just renamed the `inline` tag to `embed`.

---------------------------------------------------------------------------

by sirowl at 2012-04-24T06:55:17Z

@fabpot agreed, much more clear to me now. Look forward to using it.

---------------------------------------------------------------------------

by pvanliefland at 2012-04-24T07:20:35Z

I would like to use this feature as well

---------------------------------------------------------------------------

by tristanbes at 2012-04-24T07:38:57Z

So if I take another example, to help me understand better

I do have a common structure stated as follows :
   ```
 <body>
    <div class="row">
        <div class="main">
            <div id="homepage">
               {% block content %}
            </div>
       </div>
    </div>
    </body>
```
Let's say for the other pages, the `id="homepage"` is replaced by `id="innerPage"` `id="specialLayout"`

So far I created 3 base template with those changes, so with the new `embed` tag, does this concept fits here or I misunderstood the function of `embed` feature ?

---------------------------------------------------------------------------

by ruian at 2012-04-24T07:47:38Z

@tristanbes with `embed`, you can "include" another twig template and modify directly these differents `block`.
If you want to understand you can read `embed` tests https://github.com/fabpot/Twig/blob/0f623a11129ce28a897dbd5b812241d8b3ea9730/test/Twig/Tests/Fixtures/tags/embed/

---------------------------------------------------------------------------

by samuelmichaud at 2012-04-24T08:02:42Z

Yes ! I will definitely use this ! Thanks

---------------------------------------------------------------------------

by michelsalib at 2012-04-24T08:05:47Z

As @samuelmichaud said we have some uses cases (such as menu generation, breadcrumbs or quick action embedding). So this feature makes total sense.

1  2 
CHANGELOG
lib/Twig/Environment.php
lib/Twig/Parser.php

diff --cc CHANGELOG
+++ b/CHANGELOG
@@@ -1,8 -1,8 +1,8 @@@
  * 1.8.0 (2012-XX-XX)
  
-  * n/A
+  * added an embed tag
  
 -* 1.7.0 (2012-XX-XX)
 +* 1.7.0 (2012-04-24)
  
   * fixed template line number in some exceptions
   * added an iterable test
Simple merge
Simple merge