Autor Zpráva
Kcko
Profil
Snazim se vymyslet jak sobe i svym redaktorum ulehcim a zprijemnim praci na webu.

Jde v podstate o to ze budou do clanku a vubec do vsech "statickych" casti webu mit moznost vkladat zastupne znacky
typu {DATE} , {SEASON_RESULT:79}, {STATIC_CONTACT_TABLE} a ty se samozrejme pote dynamicky nahradi za skutecny obsah.

Jenze ten obsah nebude jednotny.

Muze nabyvat techto podob

- klasicky HTML blok ( tabulka, nekolik odstavcu atd)
- jedna php funkce ( treba na zobrazeni datumu )
- proceduralni php blok
- instance objektu a vyvolani nekolika metod
- opet nejaky php blok, ktery dostane navic nejakym preg_match-em parametry primo ze zastupne znacky (viz {SEASON_RESULT:79}, tim by se mohla vyvolat treba funkce season_result(79);
- mix vsech bodu


Pro lepsi predstavu, prikladam dump DB tabulky

CREATE TABLE `templates` (
  `id` smallint(6) NOT NULL auto_increment,
  `template` text NOT NULL,
  `php_code` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Vypisuji data pro tabulku `templates`
--

INSERT INTO `templates` (`id`, `template`, `php_code`) VALUES
(1, '{STATIC_TABLE}', '<table>\r\n<tbody><tr>\r\n	<th colspan="2">Komentá?e</th>\r\n</tr>\r\n<tr>\r\n	<td class="w100">?lánky</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-1/">280</a></td>\r\n</tr>\r\n<tr>\r\n	<td class="w100">Vlastní zápasy</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-2/">509</a></td>\r\n\r\n</tr>\r\n<tr>\r\n	<td class="w100">Cizí zápasy</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-3/">638</a></td>\r\n</tr>\r\n<tr>\r\n	<td class="w100">Diskusní fórum</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-4/">171</a></td>\r\n</tr>\r\n</tbody>\r\n</table>'),
(3, '{DATE}', 'date("d.m.Y");'),
(4, '{LONG_PHP_CODE}', '$a   = array(1, 2, 3);\r\n$out = null;\r\nforeach ($a as $i)\r\n{\r\n $out .= $a . "<br />";\r\n}\r\n'),
(5, '{RESULTS:80}', '$o = new Results();\r\n$o->setSeason(80);\r\necho $o->draw();');


a php soubor ve kterem by se mela cela akce odehrat


<?php 


mysql_connect("localhost", "root", "");
mysql_select_db("templates");

$q = "SELECT * FROM templates";
$q = mysql_query($q);

$rows = array();
while($r = mysql_fetch_assoc($q))
{
	$rows[$r['template']] = $r['php_code'];
}


	//print_R($rows);
	ob_start();
?>

			<h1>NADPIS</h1>
			<p>odstavec </p>
			
			<p>Dynamicka cast: {DATE}</p>
			
			<p>Tabulka: {STATIC_TABLE}</p>
			
			<p>Tabulka2: {LONG_PHP_CODE}</p>

	


<?php
	$out = ob_get_clean();
	
	/*
	 tady je jeste nahrazeni, ale jak?  JAK???
	*/
	
	echo $out;
?>




Doufam, ze je problem jasny :-) , diky za nejakou radu
Alphard
Profil
něco jako tohle?
http://nettephp.com/cs/quick-start-6

Nette to AFAIK ještě cachuje, někde v tempu si vytváří soubory s normálními php příkazy (kvůli rychlosti)
Kcko
Profil
Ne , to neni ono. Ja se nepotrebuji ucit ani nechci aby se nekdo kdo pracuje s nasim webem ( NENI KOMERCNI , je fotbalovy a delam ho uz 3 roky zcela zadarmo ) neucil novou syntaxi. Proste chci aby pouzil nejakou zastupnou znacku, kde ja doplnim urcity kod ktery se pak magicky provede a je zcela fuk co v nem bude.

Priklad:

Proste si vem ze user pise clanek a chce si tam umistit fotbalovou tabulku

tak se podiva do seznamu a vidi

{SOCCER_TABLE:70} // a vykopne mu to dynamicky funkci soccerTable(70);


Proste je seznam zastupnych znacek a k nim kod ( html nebo php - 1 prikaz, vice prikazu, cely blok ...) a to potrebuju "zpracovat" a vymenit za zastupnou znacku.
Str4wberry
Profil
Prvně bych ten název (text) zástupného znaku obalil něčím, co by šlo použít pro nalezení zástupných znaků. Aby bylo jasné, že text mezi nějakými znaky (sekvencí znaků) je klíčové slovo. A potom už je to klasické nahrazení. Jestliže je PHP kód uložený v databázi, budeš zřejmě muset použít eval.
Mastodont
Profil
{SOCCER_TABLE:70} // a vykopne mu to dynamicky funkci soccerTable(70); 

Já používám preg_replace_callback, čili mám seznam značek a ty uvnitř nějaké funce volám a nahradím obsah značek za něco jiného. Sám nápad je dobrý, jen bych nepsal iks funkcí, ale jen jednu.
tiso
Profil
Kcko - myslím, že si značne komplikuješ život... Pokiaľ potrebuješ do DB uložiť nejaký PHP kód, ktorý sa má vykonávať, tak je niečo zle... Čo ti bráni mať ho priamo v PHP súbore?
Kcko
Profil
1 {SOCCER_TABLE:70} // a vykopne mu to dynamicky funkci soccerTable(70);
Já používám preg_replace_callback, čili mám seznam značek a ty uvnitř nějaké funce volám a nahradím obsah značek za něco jiného. Sám nápad je dobrý, jen bych nepsal iks funkcí, ale jen jednu.

Kdybych chtel vzdy pouzit pouze 1 funkci / metodu , proste neco co vrati vystup tak bych topic nezakladal.

To mi jiz funguje viz



//---------- microsite ----------//
$co    				    = array("~{MICROSITE=(\d+)}~eis");
$za_co 					= array("new Microsite($1)");
$output					= preg_replace($co, $za_co, $output);

//---------- anketa ----------//
$co    				    = array("~{ANKETA=(\d+)}~eis");
$za_co 					= array("Poll::ZobrazAnketu($1)");
$output  				= preg_replace($co, $za_co, $output);



kde $output je nashromazdeny buffer celeho webu ( pomoci output funkci ).

Pro me je momentalne problem vymyslet nejaky zpusob, aby to bylo variabilni, cili jak jsem psal vyse.

Abych mohl jednou vlozit html blok, jindy pouze 1 php funkci, potom zase vetsi php blok ...

Ale aspon mam nad cim premyslet.


tiso
Bez urazky, ale tvuj prispevek je uplne k nicemu. Nepotrebuji nazor, kde je lepsi mit ulozeny php kod, proste chci mit tuto moznost, to kdo k tomu bude mit pristup je jiz moje starost.

Jinak komplikace zivota to neni, prave naopak, az to bude vymyslene a zrealizovane, usnadni to praci mne a mym kolegum na fotbalovem portale, poskytne to velkou miru variability. O tom se, ale bavit dal nechci, topic je o necem jinem.

Diky za pochopeni
tiso
Profil
Kcko - ja som ťa len varoval...
Mastodont
Profil
Kcko
Pro me je momentalne problem vymyslet nejaky zpusob, aby to bylo variabilni, cili jak jsem psal vyse.
Čemu na názvu funkce preg_replace_callback jsi nerozuměl? :-) Napíšeš si vlastní funkci, ve které analyzuješ, jaká značka byla nalezena a podle toho ji něčím nahradíš. Vyžaduje to jen to, aby se všechny značky daly zachytit regulárem.
Kcko
Profil
Mastodont

No ano, callback jsem pouzil jednou na nejake zpetne doplnovani jmen v komentarich pod clankem.. Ja si to behem vikendu vyzkousim, me nejde o zachyceni znacky, ale potom o nahrazeni znacky tim blokem urciteho kodu ( html, 1 fce php , blok v php ), tak aby to vratilo 1 vystup a zamenilo to za znacku.

Uvidime, kazdopadne dik.
matak
Profil
jak sem ti psal v icq, myslím, že php kód nepatří do dtb, bál bych se změny funkcí, nekonzistentnosti kódu, možného přepsání jinde zavedených proměnných nebo funkcí, proto bych funkce udržoval v php kódu a jen vytvořil nějaký převodník v dtb pro redaktory, který by jen linkoval na ty správné funkce, co ty funkce dělají už si můžeš upravit v kódu

dle mého do šablon a do dtb nepatří logika aplikace


<?
function getMyDate() {
	return date("d.m.Y");
}
function getScoreTable() {
	return '<table><tbody><tr><th colspan="2">Komentáře</th></tr><tr><td class="w100">články</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-1/">280</a></td></tr><tr><td class="w100">Vlastní zápasy</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-2/">509</a></td></tr><tr><td class="w100">Cizí zápasy</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-3/">638</a></td></tr><tr><td class="w100">Diskusní fórum</td><td><a href="/statistika/vypis-komentaru-uzivatele/hrac-1/typ-4/">171</a></td></tr></tbody></table>';
}


function tpl($id) {
	$code=array(
		'STATIC_TABLE'=>'getScoreTable',
		'DATE'=>'getMyDate'
	);
	$func=$code[$id[1]];
	if ($func) return $func();
	else return "---neznám---";
}
$out='<h1>NADPIS</h1><p>odstavec </p><p>Dynamicka cast: {DATE}</p><p>Tabulka: {STATIC_TABLE}</p><p>Tabulka2: {LONG_PHP_CODE}</p>';
echo preg_replace_callback("/\{(.*?)\}/s", "tpl", $out);
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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