2011-11-18 13 views
7

Pracuję nad rodzajem mini strony deski rozdzielczej, która ma bloki o określonej funkcjonalności. Używam symfony2 Mam dedykowaną trasę/instagram, który dostaje fragment html, który pokazuje wszystkie obrazy zrobione w naszym miejscu.Używanie Twig do dynamicznych plików JavaScript

Chcę odświeżyć ten blok co 10 minut, więc muszę uruchomić następujący javascript, w funkcji z setTimeout, pominięty dla jasności.

jQuery('.gallery').load("/instagram", function() { 
    jQuery('.gallery').cycle({ 
     fx: 'fade' 
    }); 
}); 

Ten kod znajduje się "@ KunstmaanDashboardBundle/Resources/public/js/instagram.js" że biegnę przez Assetic dla konkatenacji i optymalizacji.

{% javascripts 
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery-1.7.min.js' 
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery.cycle.lite.js' 
    '@KunstmaanDashboardBundle/Resources/public/js/*' 
    filter='closure' 
%} 
    <script src="{{ asset_url }}"></script> 
{% endjavascripts %} 

To działa, ale nie czujesz się jak jest to optymalne podejście, ponieważ mam hardcode trasy w funkcji load(). Aby rozwiązać ten problem i trzeba przesunąć instagram.js treści do szablonu Twig i zmień ją na:

jQuery('.gallery').load("{{ path('KunstmaanDashboardBundle_instagram') }}", function() { 
    jQuery('.gallery').cycle({ 
     fx: 'fade' 
    }); 
}); 

Ale w ten sposób tracę optymalizację i oddzielenie od świadczeń treści o Assetic. A nasz niestandardowy kod jest najbardziej potrzebny w tej optymalizacji.

Więc moje pytanie brzmi: w jaki sposób można połączyć Assetic Javascript (i CSS dla tej sprawy) z parsera Twig więc mogę umieścić powyższy kod w pliku instagram.js i sprawiają, że działa :)

Odpowiedz

8

You nie może obecnie przetwarzać danych wyjściowych szablonów Twig przy pomocy Assetic, ponieważ Assetic zrzuca statycznie zasoby do produkcji, podczas gdy szablony Twig są przetwarzane w środowisku wykonawczym.

Aby rozwiązać ten problem, można użyć funkcji FOSJsRoutingBundle do ujawnienia trasy i przetworzenia jej strony klienta, a następnie można przetworzyć kod JavaScript za pomocą oprogramowania Assetic.

+0

Działa to doskonale. Dzięki! – Roderik

0

znalazłem rozwiązanie dzięki tym poście How to use YUI compressor in Symfony2 routing/controller:

$response = $this->renderView('template.html.twig'); 

    $path = $this->container->getParameter('kernel.root_dir'); 
    $ac = new \Assetic\Asset\StringAsset($response , array(new \Assetic\Filter\Yui\JsCompressorFilter($path . '/Resources/java/yuicompressor-2.4.7.jar'))); 

    $compressJS = $ac->dump(); 
    return new Response($compressJS, 200, array('Content-Type' => 'text/javascript')); 
Powiązane problemy