vykonání PHP kódu v šabloně

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
iru
Člen | 110
+
0
-

Mám v databázi položku, v ní text, normální HTML kód, ale taky část PHP kódu, kterou potřebuji, aby se při výpisu do šablony vykonala. Za normálních okolností mi to latte neumožní. Jak to můžu obejít? Děkuji za radu.

CZechBoY
Člen | 3608
+
0
-

Proč máš v databázi (nebo kde) uloženy php?

{php $code}

Nejede?

iru
Člen | 110
+
0
-

ne nejede. To co je v databázi vypadá například takto:

	<a href="/images/files/test-20208.doc" target="_blank">test vlozeni</a>
</p>

<?php
echo 'dsfasdas';
?>

<p>nejaky dalsi text</p>

Jde o to, že si uživatel potřebuje na různá místa vkládat krátké php kódy, které budou vypisovat určitá data, ale jejich pozice není předem daná a musí být umístitelná kamkoli do textu.

David Matějka
Moderator | 6445
+
0
-

opravdu potrebujes mit v databazi ulozeny php kod? neni to zbytecny bezpecnostni riziko?

Co konkretne ten php kod ma delat?

CZechBoY
Člen | 3608
+
0
-

Nemůžeš použít sprintf a proměnné si vytáhnout zvlášť?

iru
Člen | 110
+
0
-

zobrazovat aktuální informace z jiných zdrojů (xml feedy apod…) a taky služba, která poskytuje nějaké rozhraní kde se k datům přistupuje pomocí PHP…

Editoval iru (31. 7. 2015 11:35)

iru
Člen | 110
+
0
-

CZechBoY nemůžu, neznám kde bude skript v textu umístěný, ani jaký bude, kolik skriptů tam bude…

David Matějka
Moderator | 6445
+
+1
-

nebude ti stacit nejaky jednoduchy placeholder nahrazeny pres preg_replace_callback?

neco jako

preg_replace_callback('~{(?<name>\w+)}~', $source, function($match) {
	if ($match['name'] === 'xml') {
		return $this->fetchXml();
	}
});

PHP kod v databazi by mel byt vzdy az to krajni reseni

iru
Člen | 110
+
0
-

David Matějka to by fungovalo na to XML, ale co s externí službou, ke které se musí přistupovat přes PHP a kterou já už obsluhovat nebudu? Vím že by to tak nemělo být, ale nevím jak jinak to řešit

Myiyk
Člen | 321
+
0
-

Databáze je na uložení dat a PHP na samostatný program. Pokud potřebuješ mít program uložen v databázi, tak je něco špatně.

Klasické nahrazování textů můžeš udělat jak psal @DavidMatějka.

Pokud chceš nějaké věci např. s externí službou, tak si na to udělej komponentu a nastavení v další tabulce nebo nějaké tabulce na nastavení. To vidím jako čisté řešení.

iru
Člen | 110
+
0
-

Myiyk já si na to nemůžu udělat komponentu, ten kód nebudu psát já, tudíž nevím jaký kód tam bude, já mám jan za úkol ho tam umožnit vložit do libovolného místa (jiného textu, který sama také tvořit nebudu)

ale s tím co píšeš mě napadá, že bych místo kódu tam mohla uložit něco zástupného a to pak nahradit kódem, který dám jinam

Editoval iru (31. 7. 2015 14:25)

matopeto
Člen | 395
+
0
-

tak jedine nejaky eval(); ked uz to musi byt, ale mat tam nejakeho zaskodneho uzivatela, mas po serveri :)

Editoval matopeto (31. 7. 2015 15:08)

iru
Člen | 110
+
0
-

matopeto to poběží na vlastním serveru toho uživatele a nic jiného tam nebude, takže je v jeho vlastním zájmu nebýt k sobě záškodný :-)

Pavel Kravčík
Člen | 1180
+
0
-

A co mu dát omezený FTP přístup a includovat jeden soubor.php, který on bude moci měnit?

iru
Člen | 110
+
0
-

kzk_cz napsal(a):

A co mu dát omezený FTP přístup a includovat jeden soubor.php, který on bude moci měnit?

je to jeho server, má přístup ke všemu :-)

a bude se jednat o více různých skriptů na různých místech…

Editoval iru (31. 7. 2015 16:13)

Pavel Kravčík
Člen | 1180
+
0
-

iru napsal(a):

kzk_cz napsal(a):

A co mu dát omezený FTP přístup a includovat jeden soubor.php, který on bude moci měnit?

je to jeho server, má přístup ke všemu :-)

a bude se jednat o více různých skriptů na různých místech…

V tom případě by mě opravdu zajímal nějak konkrétní příklad až to bude hotové. :)

llook
Člen | 407
+
0
-

iru napsal(a):

kzk_cz napsal(a):

A co mu dát omezený FTP přístup a includovat jeden soubor.php, který on bude moci měnit?

je to jeho server, má přístup ke všemu :-)

a bude se jednat o více různých skriptů na různých místech…

Když má přístup ke všemu, tak by mohlo jít použít něco podobného (ale nezkoušel jsem to):

ini_set('allow_url_include', 1);
file_put_contents('php://memory', $data);
require 'php://memory';
ini_set('allow_url_include', 0);
iru
Člen | 110
+
0
-

@llook děkuji, vyzkouším