28.08 2008

Do czego można używać {capture} w Smarty?

Kategoria: php/db

Ostatnio takie pytanie zadał mi znajomy podczas rozmowy na gg. Początkowo zdziwiło mnie to trochę, ale po głębszym zastanowieniu doszedłem do wniosku, że faktycznie ciężko z głowy podać przykłady sensownego użycia {capture}. Rzuciłem okiem do ostatniego projektu i znalazłem dwa najważniejsze użycia {capture} w Smarty:
* tworzenie treści popupów (HTML),
* tworzenie elementów wielokrotnego użycia.

W przypadku pierwszym przykład jest dość prosty:

{capture name="prodinfo"}
<table>
	<tr><th>Nazwa</th><td>{$item.product.name}</td></tr>
	<tr><th>Kod</th><td>{$item.product.code}</td></tr>
	<tr><th>Cena</th><td>{$item.product.price}</td></tr>
</table>
{/capture}

a poniżej używamy utworzonego HTMLa jako paramteru (powinno być właściwie
text=$smarty.apture.prodinfo|replace:’”‘:’”‘}, żeby uniknąć problemów w javascript):

<a href="/Procucts/1/"
  {popup text=$smarty.capture.prodinfo}>Product 1</a>

W drugim przypadku jest coś takiego (występuje w {foreach item=i}):

{capture name="pid"}pid-{$pro.id}-{$i.month}-{$i.year}{/capture}
<a href="javascript:ShowProduct( '{$smarty.capture.pid}' ); ">
  Pokaż produkt X</a>

co tworzy link do “jakiegoś produktu” - ta część zaś składa się z elementów tabeli dotyczących podsumowania samego produktu,
jak i wszystkich jego elementów:

<tr id="{$smarty.capture.prodid}" style="display: none;">
  <a href="/asdfasdf/">Wszystko dotyczące produktu X</a>
</td></tr>
<tr id="{$smarty.capture.prodid}-0">...</tr>
<tr id="{$smarty.capture.prodid}-1">...</tr>
...
</tr>

Przy czym javascriptowa funkcja ShowProductAndInfo() pobiera początek “id” dla zarówno linii produktu jak i pozostałych linii (robię for() od zera aż do pierwszego nie znalezionego elementu).

To najczęstsze moje użycie {capture} – a do czego Ty używasz {capture}?

One Response to “Do czego można używać {capture} w Smarty?”

  1. Zyx

    Podam przykład z OPT, który posiada identyczną instrukcję. Wiadomo, że wygenerowanie URL-a za pomocą routera pochłania trochę czasu. Dlatego gdy musiałem ten sam adres wyświetlić w kilku miejscach, generowanie opakowywałem w , a wynik wyświetlałem później wszędzie tam, gdzie był mi potrzebny.

Leave a Reply

O mnie...

  Programista, freelancer - prowadzący małą działalność gospodarczą (oprogramowanie dla małych i średnich przedsiębiorstw) - szukam przede wszystkim wyzwań i ciekawych projektów, dopiero później rozmawiam o pieniądzach.
  Na blogu znajdziesz informacje zarówno o sprawach firmowych, jak i prywatnych (choć tych jest zdecydowanie więcej).

Kategorie

ostatnio ulubiony

www.danceshaker.com - mój w pełni swój, pierwszy “poważny” serwis, nad którym zamierzam poważniej popracować! Na razie we wczesnej fazie beta, ale już wrzuciłem i dodałem linka na blogu, żeby ulubione google znalazło serwis. Na starcie lekko ponad 1000 filmików z różnego rodzaju tańcami - począwszy od hip-hopu, przez elektro, tańce uliczne aż po tango i foxtrota. Informacje do filmików też są jeszcze w powijakach, ale mam nadzieję, że z czasem wszystko się ładnie uzupełni (z waszą pomocą).

Lista TODO jest ogromna, nie będę jej jeszcze publikował, postaram się wybić parę robaków do końca tygodnia. Blog na google już postawiony, ale pusty - to jest pierwsza informacja dotycząca serwisu. Zostaje jeszcze optymalizacja i kilka innych kroków, które jednak nie mogą opóźniać startu. Nie ma jeszcze reklam.. miałe nie pisać todo, ale się rozkręciłem.

Zapraszam do rzucenia okiem i podesłania ew uwag.

W międzyczasie założyłem bloga dla danceshakera,  i rozwinąłem kilka rzeczy. Przejrzałem też API mikroblogów - w niektórych serwis publikuje już linki do filmików. Ciągłym problemem jest brak linków do serwisu i mała oglądalność. Pojawił się pierwszy raz gugiel - myślę, że pierwsze sensowne wyniki pojawią się dopiero pod koniec przyszłego tygodnia.

Checking Page Ranking