Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 18. 3. 2009, 22:34:42
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 |
#2 · Zasláno: 18. 3. 2009, 22:43:15
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 |
#3 · Zasláno: 18. 3. 2009, 22:47:07 · Upravil/a: Kcko
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 |
#4 · Zasláno: 18. 3. 2009, 23:14:51
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 |
#5 · Zasláno: 18. 3. 2009, 23:44:36
{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 |
#6 · Zasláno: 18. 3. 2009, 23:49:05
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 |
#7 · Zasláno: 19. 3. 2009, 09:11:10
„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 |
#8 · Zasláno: 19. 3. 2009, 09:36:36
Kcko - ja som ťa len varoval...
|
||
Mastodont Profil |
#9 · Zasláno: 19. 3. 2009, 09:49:30
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 |
#10 · Zasláno: 19. 3. 2009, 10:00:33
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 |
#11 · Zasláno: 19. 3. 2009, 10:58:16
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); ?> |
||
Časová prodleva: 15 let
|
0