V souboru Smarty.class.php je následující:
class Smarty
{
var $template_dir = "/3w/chytrak.cz/d/domena/template";
...
}
Mám definovanou konstantu SMARTY_TEMPLATE_DIR, jejíž hodnota je zadaná v konfiguračním souboru stránek (/3w/chytrak.cz/d/domena/template). Nevím jak přiřadit tu konstantu k $template_dir v class. Ona asi bude lokální nebo co. Global nefunguje ani na konstanty ani na proměnné. Já s class moc pracovat neumím. Kde je chyba?
v prvom rade sa neuc pouzivat class v php4, ale rovno prejdi na php5.
tu tvoju otazku som velmi nepochopil.
Mám definovanou konstantu SMARTY_TEMPLATE_DIR.
Toto chapem tak, ze si dakde urobil
define('SMARTY_TEMPLATE_DIR','...');
jejíž hodnota je zadaná v konfiguračním souboru stránek (/3w/chytrak.cz/d/domena/template)
toto nechapem
co je v tom template?
to akoze tak je cesta /3w/chytrak.cz/d/domena/template?
mozno som to pochopil:
mam 2 varianty ako som to pochopil>
1) (dufam ze nie)
ty chces zistit to /3w/chytrak.cz/d/domena/template z dakeho suboru z tade.
pritom stranka ti bezi uplne inde, a ty potrebujes vytahat conf. subory z tade..
potom musis ukladat cestu niekde v zakladnom konf. subore este na zaciatku...
len neviem co to ma spolocne s objektmi.
2)
mozno chces toto:
define('SMARTY_TEMPLATE_DIR','/3w/chytrak.cz/d/domena/template');
class Smarty
{
private $template_dir = SMARTY_TEMPLATE_DIR;
...
}
PHP 5 nepoužívám jednoduše proto, že na webzdarma je PHP Verze 4.3.4 Správně si pochopil to 2.) Prostě jednoduše potřebuju přiřadit tu konstantu (kterou jsem si definoval a jejíž hodnota je uložena v konfiguračním souboru stránek) proměnné $template_dir. Smysl celé věci spočívá v tom, že pak budu mít jenom ten jeden konfigurační soubor a kvůli nastavení SMARTY se nebudu muset hrabat někde jinde. To řešení které navrhuješ ale nefunguje - proto se na to taky ptám.
<?
define('SMARTY_TEMPLATE_DIR','/3w/chytrak.cz/d/domena/template');
class Smarty
{
private $template_dir = SMARTY_TEMPLATE_DIR;
public function __construct(){
echo $this->template_dir;
}
}
$s = new Smarty();
?>
tento skript mi vypise /3w/chytrak.cz/d/domena/template
mozno je cas na prejdenie na php5
npr.
www.php5.cz
Tak mě to nevypíše nic :o(
Opravuji. Vypíše to následující chybovou hlášku:
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /3w/chytrak.cz/d/domena/test.php on line 7
to bude tym private a public, ..
a skus namiesto __construct() pouzit Smarty
tak to prirad v konstruktoru.
class a {
var $cosi;
function a() {
$this->cosi = 'tady si prirad, co chces';
}
}
$objekt = new a();
echo $objekt->cosi;
# vypise tady si prirad, co chces';
netreba php5, staci cist navody.
teoreticky by si asi mohol urobit daco taketo:
class Smarty
{
var $template_dir = "/3w/chytrak.cz/d/domena/template";
...
}
$s = new Smarty();
$s->template_dir = SMARTY_TEMPLATE_DIR;
akurat to nemozes pouzit v konsturktore.
Jako promiň, ale co je tohle za radu? Mě jde právě o to, abych dostal tu konstantu do konstruktoru. Natvrdo tam tu cestu můžu napsat vždycky, ale já jí chtěl mít v konfiguračním souboru, abych jí nemusel složitě hledat kdesi v konstruktorech až zapomenu, kde se na stránkách co nastavuje.
tak by to slo takto:
class a {
var $cosi;
function a($adr='') {
$this->cosi = $adr;
}
}
$objekt = new a('http://...');
případně z té adresy někde v konfiguráku udělat konstantu nebo proměnnou a tu pak předat místo řetězce...
No jo, ale já nevím kde všude se ta třída Smarty používá. Proto jsem chtěl upravit jenom jí ale takhle bych to musel přepsat všude v systému, kde ten objekt volám.
No, teď jsi mě zmátl, co vlastně potřebuješ?
zkoušel jsem toto"
define('KONSTANTA', 'to neni blbost');
class a {
var $cosi="blbost";
function a() {
$this->cosi = KONSTANTA;
}
}
$o = new a();
echo $o->cosi;
a vypsalo to hodnotu konstanty, možná bude problém v řádku
$this->cosi = KONSTANTA;
kdy proměnnou ve třídě musíš adresovat jako $this->cosi ne jako $cosi.
Ne?
No ano, to je v podstatě ono, ale nefunguje to. K pochopení toho co přesně chci by bylo nutno vidět soubor Smarty.class.php, který je jistě známý všem co smarty používají. Prostě a jednoduše bych potřeboval aby fungovalo:
soubor Smarty.class.php:
class Smarty
{
var $template_dir = konstanta_co_jsem_zaregistroval_podle_configu;
...
}
Jinak ten soubor obsahuje funkcí strašně moc v nichž je jak správně uvádíš:
...
$this->cosi = $this->template_dir;
...
spoustakrát a já bych musel tu konstantu odkazovat ve všech případech, což je složité až nereálné.