Autor Zpráva
tomaspo
Profil *
Hezký den,
z MYSQL vypisuji data

echo $radek[něco];

Potřeboval bych vyřešit, aby když se v $radek[něco] narazí na tag <include>nejakysoubor.php</include>, tak aby se echo přerušilo, naincludoval se soubor a pak se pokračovalo v echu.

Jde to nějak jednoduše? Stačí mě nasměrovat. Děkuji.
Alphard
Profil
Co v tom nejakysoubor.php je? I když parser, který splní požadavek, jde napsat na pár řádků, bylo by dobré najít řešení bez includování php souborů.
tomaspo
Profil *
Slovy:

Dělám profily různých kulturních zařízení - míst, kde se pořádají kulturní akce. Součástí každého profilu má být i seznam kulturních akcí, které se v tomto zařízení pořádají. Ta data o akcích se berou úplně z jiné databáze.

Já ten seznam kulturních akcí prostě potřebuju vložit do výpisu těla článku $radek[něco] (profilu organizace), přičemž u každého článku na jiné místo.

Potřebuju, aby to mohl dělat ten, kdo obsluhuje redakční systém. Nemusí to být vůbec přes include.

Může to být např. že vloží tag [poradatel]22[/poradatel].

Jde mi o to, jak přerušit to ECHO, vložit vlastní skript v případě nalezení tagu, a pak pokračovat....


[poradatel]22[/poradatel] = přerušení ECHO, spuštění skriptu s načtením organizace id 22 a pokračování ECHO
Chro_
Profil *
$neco = $radek['neco'];
if (substr($neco, 0, 9) === '<include>' && substr($neco, -10) === '</include>')
{
include trim(str_replace(array('<include>', '</include>'), '', $neco));
}
else
{
echo $neco;
}
Alphard
Profil
$widgetRepository = [
    'time' => function() { return date('H:i:s'); },
    'date' => function() { return date('d.m.Y'); },
];

# priklad s use je tady proto, abyste se dostal k databazi nebo celkove do systemu bez globalnich promennych
$widgetReplace = function($widget) use ($widgetRepository) {
    return $widgetRepository[$widget[1]]();
};

$in = 'Nejaky uzivatelsky retezec, do ktereho chceme doplnit widget: [widget]time[/widget], [widget]date[/widget]';

$result = preg_replace_callback('~\[widget\](.*?)\[\/widget\]~iu', $widgetReplace, $in);

echo $result;
tomaspo
Profil *
Chro:
Díky, ale toto mi vypsalo

<include>karel.php</include>
Chro_
Profil *
Protože jsem to špatně pochopil a ty tagy jsou určitě součástí širšího textu v $radek[neco], ne jen ony a mezi nima název souboru. Drž se řešení od Alpharda, ten to vyhmátl.
tomaspo
Profil *
Alphard:
Super, díky moc. Tady ten Váš kód nevypíše nic. Ale najdu chybu a použiju, už asi vím jak na to, děkuji
Alphard
Profil
tomaspo:
Tady ten Váš kód nevypíše nic.
Já si to zkoušel, vypíše.
Nejaky uzivatelsky retezec, do ktereho chceme doplnit widget: 22:14:55, 29.12.2014
Snad máte dostatečně novou verzi PHP, občas s těmito hračkami narazím na problém, že to tazatelé na historických verzích nespustí.
tomaspo
Profil *
Alphard:
PHP Version 5.2.17 a chybu to nehází :-(
Alphard
Profil
tomaspo:
PHP Version 5.2.17 a chybu to nehází :-(
A něco jiného vám chybu hází? Tohle by totiž mělo skončit chybou, anonymní funkce tak jak je používám byly přidány až v 5.3.
Verze 5.2 z roku 2006 je už dlouho stará a nepodporovaná. Je mi jasné, že změna hostingu není vždy snadná, ale zůstávat u této verze nelze doporučit.

Takže bohužel, ale pořád můžete callback u funkce preg_replace_callback() dle příkladu v manuálu přepsat tak, aby fungoval i na starší verzi. Tady už se použití global pro přístup mimo funkci asi nevyhnete, ale pořád můžete přímo includovat nějaký soubor.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: