Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_replace a funkcje.
Forum PHP.pl > Forum > PHP
matix
Witam. Mam sobie taki kod:

  1. <?
  2.  
  3. function funkcja()
  4. {
  5. return 'test';
  6. }
  7.  
  8. $tresc = 'to ja, matix, {title}';
  9.  
  10. $tresc = preg_replace('#{title}#', funkcja(), $tresc);
  11.  
  12. echo ($tresc);
  13. ?>


Chciałbym teraz np. aby po wpisaniu tytułu funkcja pobrała odpowiednie (nie jedno tylko kilka) rekordy. Powtarzam - piszę nie rekord, tylko rekordy, gdyż, jeden można zwrócić bez problemu jako return. Lecz jak wiadomo, on zatrzymuje działanie pętli. Mam np coś takiego:

  1. <?
  2. function funkcja()
  3. {
  4. mysql_connect();  // pominalem dane
  5. mysql_select_db(); // tu tez
  6.  
  7. $zapytanie = mysql_query('select * from tytyly'); // tutaj np. jest 10 rekordow wybranych
  8.  
  9. while ($a = mysql_fetch_object($zapytanie))
  10. {
  11. // .. i co tutaj? 
  12. }
  13.  
  14. }
  15. ?>


Gdy wpiszę właśnie podczas pętli - echo to wiadomo - wyświetli się to w miejscu, gdzie jest napisana ta funkcja, czyli nie tam gdzie trzeba. Gdy dam return - z kolei wywoła się jeden rekord i zakończy się pętla bo to właśnie robi return po części.

Zwrócenie rekordów jako Array jest niemożliwe, gdyż trzeba skorzystać z
  1. <?php
  2. ?>
lub
  1. <?php
  2. ?>
a tego zrobić nie mogę.

Potrzebuję to do CMS-a, zarządzanie blokami, a dokładnie ich wyświetlanie w konkretnym miejscu.
Mam sobie plik left_menu.tpl np. a w nim:

  1. <div id="title">{title}</div>
  2. <div id="tresc">{tresc}</div>


Teraz potrzebuję własnie odebrać plik (robię to za pomocą file_get_contents()) i po prostu podmienic title i tresc na odpowiednią funkcję.

Proszę o pokazanie jakiegoś prostego sposobu, bo pewnie na smartach byłoby to wykonalne, ale ja wole swoje rozwiązania winksmiley.jpg
php programmer
To może jak nie możesz zwrócić samej tablicy
to zwróć stringa w postaci serialize

  1. <?php
  2. function DajTablice(){
  3. ...
  4. retrurn serialize($tablica)
  5. }
  6.  
  7.  
  8. $serial = DajTablice();
  9. $tablica = unserialize($serial);
  10. ?>
deirathe
A możę by tak
  1. <?php
  2. ?>
i w foreachu który będzie leciał przez tablice wyników wstawić
  1. <?php
  2. ?>
? np
  1. <?php
  2. preg_match_all('/{(.*)}/i',$tresc,$tablicawynikow);
  3. foreach(...){
  4.  ...
  5.  preg_replace($wynik,function(),$tresc);
  6. }
  7. ?>
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.