PDA

View Full Version : سوال: smarty template engine



tehro0n
سه شنبه 02 خرداد 1391, 14:34 عصر
من اسمارتي را روي لوكال هاست نصب كردم ولي چون اطلاعات كاملي دريافت نكردم چند سئوال برام پيش اومده

پوشه بندي صفحات كه ساب دومين هستند به چه صورت انجام ميشه؟
براي مثال من صفحه اصلي + صفحه فرعي دارم كه ساب دومين هم هست.. براي صفحه اصلي فراخوني از پوشه template به راحتي انجام ميشه چون در كلاس مربوطه (Smarty.class.php در پوشه libs) آدرس داده شده اما در صفحه فرعي كه در پوشه ديگري باشه نميشه template رو فراخواني كرد! و حتما بايد دستي كلاس را تعريف كرد


class Application extends Smarty
{
// Class constructor
public function __construct()
{
// selfpointer needed by some other class methods
$this->smarty = $this;
if (is_callable('mb_internal_encoding')) {
mb_internal_encoding(Smarty::$_CHARSET);
}
$this->start_time = microtime(true);
// set default dirs
$this->setTemplateDir('.' . DS . '../templates' . DS)
->setCompileDir('.' . DS . '../templates_c' . DS)
->setPluginsDir(SMARTY_PLUGINS_DIR)
->setCacheDir('.' . DS . '../cache' . DS)
->setConfigDir('.' . DS . '../include/configs' . DS);

$this->debug_tpl = 'file:' . dirname(__FILE__) . '../debug.tpl';
if (isset($_SERVER['SCRIPT_NAME'])) {
$this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
}
}
}

كه در حالت عادي كلاس فايل ها به صورت زير است


$this->setTemplateDir('.' . DS . 'templates' . DS)

كه البته همين حالت براي فراخواني فايل هاي header و footer.tpl مشكل ايجاد مي كنه و مجبور شدم براي صفحات فرعي header و footer جداگانه تعريف كنم تا جاوا ها و css هاي آن ها را به درستي اجرا كنه!

-------------------------------------------------------------------------

سئوال بعديم در مورد نحوه گرفتن اطلاعات از ديتابيس است

تا آنجا كه من ديدم اطلاعات را در صفحه php مي خونن و آن ها را به صورت آرايه به فايل هاي tpl اسمارتي مي فرستند سپس آن جا نيز دوباره با حلقه section اين اطلاعات را نمايش مي دهند!
ولي اين كار درست نيست چون دوبار داره تو حلقه مي افته! چي كار كنم كه مثل php يكبار اطلاعات لود بشه؟

نمونه صفحه php


// Copyright © ToolsIR.com Inc. All rights reserved

require_once('include/_config.php');
require(SMARTY_CLASS);
date_default_timezone_set('Asia/Tehran');
$_REQUEST_TIME = gmmktime();

$ads = mysql_fetch_object (
mysql_query (
"SELECT
`id`,`image`
FROM
`ads`
WHERE
`end_time` > $_REQUEST_TIME
ORDER BY rand() LIMIT 1", $con));

$res = mysql_query (
"SELECT
`share`,`text`,`url`,`title`
FROM
`text`
ORDER BY `id` ASC", $con);

$i=0;
while ($row = mysql_fetch_object($res)) {
$_share[$i] = $row->share;
$_text[$i] = $row->text;
$_url[$i] = $row->url;
$_title[$i] = $row->title;
$i++;
}

$smarty = new Smarty;
$smarty->force_compile = true;
//$smarty->debugging = true;
//$smarty->caching = true;
//$smarty->cache_lifetime = 10;

$smarty->assign("ads",$ads);
$smarty->assign("res",$res);
$smarty->assign("share",$_share);
$smarty->assign("text",$_text);
$smarty->assign("url",$_url);
$smarty->assign("title",$_title);

$smarty->display('index.tpl');
?>

كه در اينجا متغير ADS رو راحت ميشه به صورت شي گرا خوند ولي متغير res رو يكبار به صورت آرايه در آوردم و يكبار هم بايد با section اينارو بخونم!

آخرين ورژن اسمارتي هم كه من ازش استفاده مي كنم رو هم ضميمه كردم ولي يكسري تغييرات اينكه محتويات پوشه demo رو به صفحه root در كنار پوشه libs قرار دادم.

tehro0n
چهارشنبه 03 خرداد 1391, 04:07 صبح
فقط اومدید دانلود کردید و رفتید؟
خوب حداقل سلامی هم می کردید! تشکری چیزی برای دریافت آخرین ورژن :لبخند:

tehro0n
چهارشنبه 17 خرداد 1391, 23:26 عصر
peeeeeeeeeeeeeeeeeeeeeeeeeeekh