| 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: 17 let
|
|||
0