Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
Dobrý den. Mám problém s mým template systémem po nasazení dibi a už si nevím rady. Pokud bude mít někdo náladu a čas mi pomoct budu jedině rád...
class.template.php: <?php class Template { private $DB; public function __construct(DB $DB) { $this->DB = $DB; } public function sqlDefaultTemplate($string) { $sql = $this->DB->query("SELECT * FROM [:pref:page] where page = %s", mypage("page")); return $sql->fetchSingle($string); } public function insertTemplate($temp, $in = false) { $content = file_get_contents("./system/template/".$temp.".html"); if ($in) { foreach ($in as $k => $v) { $content = str_replace("{#$k}", $v, $content); } } return $content; } public function template_admin() { load_page("admin/php_modules/".$this->sqlDefaultTemplate("page")."/index.php"); //php modul administrace load_page("themes/admin/".get_current_lang()."/index.php"); //šablona s html modulem administrace } public function template_inc() { if(file_exists("php_modules/".$this->sqlDefaultTemplate("page")."/index.php")) { load_page("php_modules/".$this->sqlDefaultTemplate("page")."/index.php"); //php modul } $bad_url = str_replace("index.php", "", $_SERVER['PHP_SELF']); $serv_url = "."".$bad_url]."".$bad_url]."".$bad_url]http://".$_SERVER['SERVER_NAME']."".$bad_url; $h = array(); $h['title'] = title(); $h['language'] = get_current_lang(); $h['keywords'] = options("seo_keywords"); $h['author'] = options("author"); $h['description'] = options("seo_description"); if(!$this->sqlDefaultTemplate("style")){ $h['style'] = ($serv_url."themes/web/".get_current_lang()."/".options("template")."/images/styles.css"); } else { $h['style'] = ($serv_url."themes/web/".get_current_lang()."/".options("template")."/images/".$this->sqlDefaultTemplate("style").".css"); } ob_start(); load_page("/themes/web/".get_current_lang()."/".options("template")."/skin/".$this->sqlDefaultTemplate("skin").".php"); $load_c = ob_get_contents(); ob_end_clean(); $c = array(); $c['content'] = $load_c; echo $this->insertTemplate('head', $h); echo $this->insertTemplate('content', $c); echo $this->insertTemplate('footer'); } public function print_template() { $tpl = $this->sqlDefaultTemplate("page"); if(!empty($tpl)) { //administrace if ($this->sqlDefaultTemplate("type") == "admin") { $this->template_admin(); } //obsah if ($this->sqlDefaultTemplate("type") == "inc") { $this->template_inc(); } } else { //neexistující stránka redirect_page("defense", "1"); } } } core.php: load_page("system/class/class.template.php"); //načte stránku class.template.php $template = new Template($DB); $template->print_template(); |
||
Tori Profil |
Co přesně dělá funkce load_page? Umí si ošetřit situaci, kdy jí chybně zadáte absolutní adresu od rootu filesystému (ř.58)?
A mohl byste napsat, co to má dělat a nedělá. Zkuste prosím do řádku 45 mezi řetězce http:// a $_SERVER přidat značku pro rušení bbcode: [>!] , je to nějaké přeházené.
|
||
Fisak Profil |
#3 · Zasláno: 17. 10. 2012, 22:52:38
Tori:
to sice neumí ale adresy sou tam dobré.. jde o ten db layer.. dřív sem to dělal klasicky $link = mysql_connect(...); $res = mysql_query('...', $link); while ($row = mysql_fetch_assoc($res)) { ... } |
||
Tori Profil |
#4 · Zasláno: 17. 10. 2012, 22:57:44
Aha, hned se mi to zdálo divné a kouknutí do API to zdání potvrdilo - řádky 10-11 by měly vypadat spíš takhle:
$sql = $this->DB->query("SELECT %n FROM [:pref:page] where [page] = %s", $string, mypage("page")); return $sql->fetchSingle(); |
||
Fisak Profil |
#5 · Zasláno: 17. 10. 2012, 23:00:26 · Upravil/a: Fisak
Tori:
děkuji.. ale stále mi to hlásí chybu :( fakt už si nevím rady... tady je verze bez dibi layeru class.template.php: <?php class Template { private $db; public function __construct(db $db) { $this->db = $db; } public function sqlDefaultTemplate($string) { $sql = $this->db->query_system("SELECT * FROM page where page = '".mypage("page")."'"); $Data_TMP=mysql_fetch_assoc($sql); return $Data_TMP[$string]; } public function insertTemplate($temp, $in = false) { $content = file_get_contents("./system/template/".$temp.".html"); if ($in) { foreach ($in as $k => $v) { $content = str_replace("{#$k}", $v, $content); } } return $content; } public function template_admin() { load_page("admin/php_modules/".$this->sqlDefaultTemplate("page")."/index.php"); //php modul administrace load_page("themes/admin/".get_current_lang()."/index.php"); //šablona s html modulem administrace } public function template_inc() { if(file_exists("php_modules/".$this->sqlDefaultTemplate("page")."/index.php")) { load_page("php_modules/".$this->sqlDefaultTemplate("page")."/index.php"); //php modul } $h = array(); $h['title'] = title(); $h['language'] = get_current_lang(); $h['keywords'] = options("seo_keywords"); $h['author'] = options("author"); $h['description'] = options("seo_description"); if(!$this->sqlDefaultTemplate("style")){ $h['style'] = ("./themes/web/".get_current_lang()."/".options("template")."/images/styles.css"); } else { $h['style'] = ("./themes/web/".get_current_lang()."/".options("template")."/images/".$this->sqlDefaultTemplate("style").".css"); } ob_start(); load_page("/themes/web/".get_current_lang()."/".options("template")."/skin/".$this->sqlDefaultTemplate("skin").".php"); $load_c = ob_get_contents(); ob_end_clean(); $c = array(); $c['content'] = $load_c; echo $this->insertTemplate('head', $h); echo $this->insertTemplate('content', $c); echo $this->insertTemplate('footer'); } public function print_template() { $tpl = $this->sqlDefaultTemplate("page"); if(!empty($tpl)) { //administrace if ($this->sqlDefaultTemplate("type") == "admin") { $this->template_admin(); } //obsah if ($this->sqlDefaultTemplate("type") == "inc") { $this->template_inc(); } } else { //neexistující stránka redirect_page("defense", "1"); } } } core.php: load_page("system/class/class.template.php"); $db = new db(); $template = new Template($db); $template->print_template(); šlo jen o to upravit dotazy tak aby fungovali na dibi |
||
Tori Profil |
#6 · Zasláno: 17. 10. 2012, 23:12:21
Fisak:
A nechcete nám oběma ušetřit čas a rovnou psát, jakou chybu to hlásí, co přesně nefunguje atd.? Ještě to možná mělo být takhle, teď si nejsem jistá jestli se musí hodnoty psát hned za modifikátorem, nebo až všechny naráz. $this->DB->query("SELECT %n", $string, " FROM [:pref:page] where [page] = %s", mypage("page")); |
||
Fisak Profil |
#7 · Zasláno: 17. 10. 2012, 23:15:23 · Upravil/a: Fisak
Tori:
class.db.php je umístění dibi.min.php Warning: DB::addSubst() is deprecated; use DB::getSubstitutes()->expr = val; instead. in F:\localhost\insignia\system\class\class.db.php on line 805 Call Stack # Time Memory Function Location 1 0.0122 338200 {main}( ) ..\index.php:0 2 0.0351 385160 require_once( 'F:\localhost\insignia\system\config-db.php' ) ..\index.php:23 3 0.0722 2498256 DB::addSubst( ) ..\config-db.php:25 4 0.0722 2498440 trigger_error ( ) ..\class.db.php:80 ( ! ) Notice: Undefined variable: DB in F:\localhost\insignia\system\core.php on line 15 Call Stack # Time Memory Function Location 1 0.0122 338200 {main}( ) ..\index.php:0 2 0.3839 2664184 require_once( 'F:\localhost\insignia\system\core.php' ) ..\index.php:29 $template = new Template($DB); Catchable fatal error: Argument 1 passed to Template::__construct() must be an instance of DB, null given, called in F:\localhost\insignia\system\core.php on line 15 and defined in F:\localhost\insignia\system\class\class.template.php on line 5 Call Stack # Time Memory Function Location 1 0.0122 338200 {main}( ) ..\index.php:0 2 0.3839 2664184 require_once( 'F:\localhost\insignia\system\core.php' ) ..\index.php:29 3 0.4280 2705992 Template->__construct( ) ..\core.php:15 jinak sem přejmenoval dibi::query na DB::query ale to jste si nejspíš již všimnul |
||
Kcko Profil |
#8 · Zasláno: 17. 10. 2012, 23:22:35
Tori:
Oba způsoby jsou možné. Fisak: Nauč se debugovat dotazy přes dibi::dump(); // za každým zavolaným dotazem, tím si ho vypíšeš a uvidíš co je špatně a co ne. |
||
Fisak Profil |
#9 · Zasláno: 18. 10. 2012, 00:25:17 · Upravil/a: Fisak
Kcko:
no ono to totiž neni v tom dotazu.. nejspíš to bude v napojení na to dibi .. v tom constructoru public function __construct(db $db) { $this->db = $db; } ten dotaz sem zkoušel mimo tuhle třídu a funguje normálně v pohodě.. |
||
Kcko Profil |
#10 · Zasláno: 18. 10. 2012, 00:55:22
tak to vyhod, dibi můžes používat staticky. Není důvod to dělat jinak.dibi::
... |
||
Fisak Profil |
#11 · Zasláno: 18. 10. 2012, 01:26:58
Kcko:
paráda děkuju to je to co sem potřeboval !!! ještě jedna chybka.. nevíte někdo prosím o co se může jednat ?? Warning: DB::addSubst() is deprecated; use DB::getSubstitutes()->expr = val; instead. in F:\localhost\insignia\system\class\class.db.php on line 805 Call Stack # Time Memory Function Location 1 0.0756 338440 {main}( ) ..\index.php:0 2 0.0977 385400 require_once( 'F:\localhost\insignia\system\config-db.php' ) ..\index.php:23 3 0.1383 2498512 DB::addSubst( ) ..\config-db.php:25 4 0.1383 2498696 trigger_error ( ) ..\class.db.php:805 |
||
Prochy Profil |
#12 · Zasláno: 18. 10. 2012, 10:07:52
Ale dyť ti to hlásí to varování, co máš za problém. Už jenom kdyby si zkusil použít překladač, tak zjistíš v čem je problém.
A navíc stačí hodit do googlu hodit addsubst deprecated a najdeš to hned na prvním odkazu. Možná by si příště mohl projevit více snahy. :-) |
||
Fisak Profil |
#13 · Zasláno: 18. 10. 2012, 12:05:48
Prochy:
dobře paráda díky :-) |
||
Časová prodleva: 12 let
|
0