ugrás a tartalomhoz

TWIG TAG írása - valaki ért hozzá?

gtoma · 2015. Nov. 8. (V), 11.47
Sziasztok!

Szeretnék twig-hez írni egy saját TAG kezelőt, és van egy kis problémám.
Ért valaki hozzá? :)

Bocsánat, de ha nem, akkor nem fárasztanálak titeket még a problémával sem.
 
1

Félig kapcsolódik

Hidvégi Gábor · 2015. Nov. 8. (V), 13.29
A PHP önmagában egy sablonmotor, miért használsz még ezen felül egy PHP-ban megírt sablonrendszert?
11

Ezen én is gondolkodtam egy

csabessz47 · 2015. Nov. 12. (Cs), 12.23
Ezen én is gondolkodtam egy ideig, de nekem a block-ok és extendek (layoutok) használata a legnagyobb előnye.
Ahogy a Laravel blade-jénél is.
2

Egy twig-hez készült TAG

smokey · 2015. Nov. 8. (V), 21.16
Egy twig-hez készült TAG kezelőt pontosan hogyan kell elképzelni?
3

Twig

janoszen · 2015. Nov. 9. (H), 10.00
A Twig doksija megvolt? Eleg jol le van irva hogy hogyan kell sajat tageket berakni ha erre gondolsz. http://twig.sensiolabs.org/doc/advanced.html
4

Meg volt

gtoma · 2015. Nov. 9. (H), 10.46
Igazából, mivel ez nem speciálisan twig fórum, de a kérdés erősen twig kérdés, ezért nem akartam leírni. Viszont azt hiszem, kénytelen leszek. Bocsánat, ha valakit feleslegesen tartok fel.

Szóval:
szeretném ha az alábbi dolog működne:

{% setWindowData {
     width: '700',
     height: '600',
     title: "Módosítás: {{ User.name }}"
} %}
Ennek eredménye (html kimenete) ilyen kellene legyen:
data-window="{'width':'700','height': 600, 'title':'Módosítás: AzÉnNevem'"

Ahogy most állok:
class setWindowData extends \Twig_TokenParser {

    public function parse(\Twig_Token $token) {
        $line = $token->getLine();
        $value = array_merge(array (), $this->getInlineParams($token));
        return new setWindowDataNode($value, $line, $this->getTag());
    }

    public function getTag() { return 'setWindowData'; }

    protected function getInlineParams(\Twig_Token $token) {
        $parameterString = '';
        $stream = $this->parser->getStream();
        while (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
            $parsedParameters = $this->parser->getExpressionParser()->parseExpression();            
            $parameterString = $this->parser->getEnvironment()->compile($parsedParameters);
            var_dump($parameterString);
            exit;

        }
        $stream->expect(\Twig_Token::BLOCK_END_TYPE);
        $params["arrayString"] = $parameterString;
        return $params;
    }
} 
a 17.sor var_dump() eredménye egy string, ami a json-ből convertált arrayt tartalmazza.
azaz (string) "array('width'=>'700', 'height' => '600', 'title' => 'Módosítás: {{ User.name }}')"

És ebből látszik is a probléma. Azzal még elvagyok, hogy nem array, hanem STRING az eredmény - benne az array -al, de ami sokkal fontosabb:

Nem "fordítja" a {{ }} ben lévő változó neveket.
A stringet valahogy át kellene küldenem újra egy értelmezőn, ami belövi hozzá legalább a változókat, de nem vágom hogyan.
5

Miert?

janoszen · 2015. Nov. 9. (H), 11.07
Miert nem hasznalsz erre a celra egy makrot? Tok folosleges rajta erolkodni es ugyanugy at tudsz neki adni parametereket. Sokkal karbantarthatobb lesz mint egy egyedi tag.

Egyebkent a problema az, hogy igy kell megadni a taget meghivaskor:

{% setWindowData {  
     width: '700',  
     height: '600',  
     title: "Módosítás: " ~ User.name
} %}  
(A ~ jel a konkatenalas Twigben.)
6

Zseniális! Köszönöm!

gtoma · 2015. Nov. 9. (H), 13.11
Köszönöm, ez végül is megoldotta, és működő képes.

macro: Ahogy én látom azt "deklarálni" kellene a template-ben, azonban én ekkor csak 1 db template-et rántok be (ajaxal tölt elemeket interakcióra), tehát mindegyik előtt deklarálhatnám.

Lehet hogy rosszul látom, még csak néhány hónapja dolgozom twig-el.
7

Rosszul

janoszen · 2015. Nov. 9. (H), 14.01
Csinalj egy twig filet a macroidnak es azt huzd be mindegyikbe importtal:
{% import "utils.html.twig" as utils %}

{{ utils.myMacro() }}
A sajat tagek irasa szerintem mindenkeppen kerulendo, hacsak tenyleg nincs mas megoldas, mert nem trivialis lekovetni debugolaskor hogy ez hol tortent.
8

Köszönöm a tanácsot!

gtoma · 2015. Nov. 9. (H), 15.08
Azonban megkérdezhetem, miért látod kerülendőnek a saját tagek írását?

Tényleg kíváncsi vagyok, és tanulni akarok. :)
9

Gondolj bele

janoszen · 2015. Nov. 9. (H), 15.14
1. Tobb kod. Karban kell tartani, valtozhat a Twig API amihez hozza kell igazitani, stb.
2. Egy sitebuilder, aki csak mersekelten ert PHP-ul, nem feltetlenul fogja tudni modositani.
3. Nem ott van ahol a template, ergo ha valami felremukodes van, turni kell, hol is van implementalva.
4. El kell valasztani egymastol a megjelenest es a mukodest, a PHP kodnal eleg nagy az esely arra, hogy elkezd megint osszefolyni.
10

Nagyon köszönöm!

gtoma · 2015. Nov. 10. (K), 11.13
Megfogadom a tanácsodat, köszi!