Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Zend_View - odpowiednik smartowego {strip}
Forum PHP.pl > Forum > PHP > Frameworki
NoiseMc
Jak w temacie ... jak to zrealizowac
LBO
filtrem
NoiseMc
Moglbys zarzucic przykladem? I jak to zrealizowac z blokiem HTML, a nie z calym plikiem / widokiem.

W tej chwili uzywam Placeholdera:
  1. <?php $this->placeholder ('parking-spot-owners-box')->captureStart () ?>
  2. <div class="module-box-container-small">
  3. <div class="module-box-stretch">
  4. <img id="parking-spot-owners-box" src="images/parkingspotowners.gif" alt="Parking Spot Owners" border="0" usemap="#Map" />
  5. <map name="Map" id="Map">
  6. <area shape="rect" coords="13,45,272,115" href="<?= $this->baseHref ?>/lot-registration" />
  7. </map>
  8. </div>
  9. </div>
  10. <?php $this->placeholder ('parking-spot-owners-box')->captureEnd () ?>
  11. <?= preg_replace ('!s+!', ' ', $this->placeholder ('parking-spot-owners-box')) ?>


A chcialbym uzyskac cos na zasadzie:
  1. <?php $this->startStrip () ?>
  2. <div class="module-box-container-small">
  3. <div class="module-box-stretch">
  4. <img id="parking-spot-owners-box" src="images/parkingspotowners.gif" alt="Parking Spot Owners" border="0" usemap="#Map" />
  5. <map name="Map" id="Map">
  6. <area shape="rect" coords="13,45,272,115" href="<?= $this->baseHref ?>/lot-registration" />
  7. </map>
  8. </div>
  9. </div>
  10. <?php $this->endStrip () ?>
LBO
Przepraszam, nie używam Smarty i źle zrozumiałem.

Poczytałem troszkę i chyba, żeby jak najbardziej odwzorować działanie funckji o którą pisałeś należałoby napisać własny helper, o!

Szkoda, że Zend_View_Helper_Placeholder_Container_Abstract::captureEnd() nie zwraca zbuforowanej wartości, bo można by go echo'wać od razu.

edit:

$this->startStrip()

to nawet nie helper, tylko rozszerzenie widoku. Musiałbyś dopisać te metody do Widoku i tyle.

Proszę - najprostsza implementacja helpera jak mi przyszła do głowa. Luźno oparta o placeholdera.

  1. <?php
  2. class Something_View_Helper_Strip
  3. {
  4. protected $_lock = false;
  5.  
  6. public function strip()
  7. {
  8. if (!$this->_lock) {
  9. $this->_lock = true;
  10. } else {
  11. $this->_lock = false;
  12. $data = ob_get_clean();
  13.  
  14. // Tutaj wklep kod odpowiedzialny za usuniecie nadmiarowych znaków przechwyconego 
    output'u ($data)
  15.  
  16. print $data;
  17. }
  18. }
  19. }
  20. ?>


Używanie jest banalne:

  1. // w szablonie widoku
  2.  
  3. <?$this->strip();?>
  4. fds fgdfgd
  5.  
  6.  
  7. gdfggd
  8.  dg
  9.  
  10. fdg
  11. <?$this->strip();?>


Jak doczytałeś w kodzie, sam zaimplementuj działanie metody strip.

Powodzenia.

P.S. sorry za kilkakrotne zmienianie posta, ale tak naprawdę zend'a nie używam również - miałem krótkie zetknięcie z tym frameworkiem.
NoiseMc
Hehe dokladnie w tym samym momencie chyba wpadlismy na to samo biggrin.gif
Dziala aczkolwiek nie podoba mi sie to ze helper printuje ... zamiast zwracac jak placeholder.
Bede mial wiecej czasu to napisze cos opartego na idei dzialania placeholdera,

Dzieki za pomoc
LBO
Zawsze możesz poszerzyć klasę placeholdera albo zmienić print na return w moim przykładzie smile.gif
NoiseMc
Racja. Szkoda ze glowna metoda helpera musi sie nazywac tak jak ostatni czlon nazwy jego klasy w ten sposob helper w tym wypadku moze miec tylko $this->strip ().
Wolalbym moc zrobic na przyklad $this->stripper->startCapturing (), a potem $this->stripper->outputStripped() ... nic sprobuje pobawic sie pozniej placeholderem i zobacze co z tego mozna wykrecic biggrin.gif
Sabistik
Nie ma problemu zrobić helpera który będzie działał tak jak opisałeś
  1. <?php
  2. $this->stripper()->startCapturing ();
  3. $this->stripper()->outputStripped();
  4. ?>


Po prostu niech metoda stripper w klasie helpera zwraca $this.

A nie pasuje Ci escape() albo rozszerzenie klasy view o własną funkcje strip() - to chyba najprostszy sposób. i wtedy używać tego capture placeholdera?
NoiseMc
Cytat
Po prostu niech metoda stripper w klasie helpera zwraca $this.

Bosko i to bylo zdanie kluczowe smile.gif

  1. <?php
  2.  
  3. class Noise_View_Helper_BlockFormatter
  4. {
  5. private $lock = false;
  6. private $capturingLine; 
  7.  
  8. public function blockFormatter ()
  9. {
  10. return $this;
  11. }
  12.  
  13. public function captureStart ()
  14. {
  15. if ($this->lock)
  16. {
  17. throw new Zend_View_Exception ('Capturign already started in line: ' . $this->capturingLine);
  18. }
  19. else
  20. {
  21. ob_start ();
  22.  
  23. $this->capturingLine = __LINE__;
  24. $this->lock = true; 
  25. }
  26. }
  27.  
  28. public function getStripped ()
  29. {
  30. $this->lock = false;
  31. $content = ob_get_clean ();
  32.  
  33. $content = preg_replace ('!s+!', ' ', $content);
  34.  
  35. return $content;
  36. }
  37. }
  38. ?>

  1. <?php $this->blockFormatter ()->captureStart () ?>
  2. <div class="module-box-container-small">
  3. <div class="module-box-stretch">
  4. <img id="parking-spot-owners-box" src="images/parkingspotowners.gif" alt="Parking Spot Owners" border="0" usemap="#Map" />
  5. <map name="Map" id="Map">
  6. <area shape="rect" coords="13,45,272,115" href="http://{$masterUrl}/lotregistration.php" />
  7. </map>
  8. </div>
  9. </div>
  10. <?= $this->blockFormatter ()->getStripped () ?>


Co do rozszerzania klasy View to ... poki moge wole korzystac z tego tak jak Zend zaleca wykorzystujac wszystko co dali ... dopiero jak braknie to bede rozszerzal smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.