تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 12

نام تاپيک: Smarty يک Templating Engine برای PHP

  1. #1
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    10 Smarty يک Templating Engine برای PHP

    مقدمه : چرا از Template استفاده کنيم ؟
    در يک جمله می توان گفت برای جدا کردن منطق برنامه از نحوه ارائه!
    با استفاده از يک Templating Engine می توان به اين هدف درست يافت به ترتيبی که برنامه نويس در گير ارائه و طراح رابط کاربر درگير کار برنامه نويس نشوند و با يک زبان مشترک باهم تعامل خواند داشت. به اين ترتيب برنامه نويس خيلی راح می تواند منطق برنامهرا عوض کند بدون اينکه در گير ارائه شود و طراح نيز می تواند بدون کمک برنامه نويس شکل و شمايل يک سايت را کاملاً عوض کند.
    اين چند جمله بايد تا حدی برای شما روشن کرده باشد که با استفاده از اين روش تا چه حد انعطاف در کار بوجود می آيد. جالب نيست؟!

    تعداد زيادی Templating Engine برای PHP وجود دارد از کلاسهای PEAR گرفته تا Smarty و بسياری ابزار های ديگر، ولی با توجه به موضوع اين مقاله از ديگر ابزار ها صرف نظر کرده و به Smarty(
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ) می پردازيم .
    Smarty از PHP و Zend Engine استفاده می کند و با استفاده از آن، برنامه ها را با کمترين سربار نسبت به حالتی که از Template استفاده نشده باشد اجرا می شوند چون Smarty يک بار الگو را کامپايل کرده و تا وقتی که الگو تغيير پيدا نکد از نسخه کامپايل شده استفاده می نمايد. برای بالا بردن کارايی امکانات caching هم دارد.

    Smarty چگونه کار می کند ؟

    Smarty بصورت شی گرا طراحی شده و عمل می کند پس برای استفاده از آن بايد يک instance از آن ايجاد کنيم :



    <?php
    require_once('Smarty.class.php'); // use absolute path here, if necessary
    $smarty = new Smarty;
    ?>




    Smarty بصورت پيش فرض در همان شاخه ای که صدا می شود دنبال الگو می گردد ولی بنا به دلايل امنيتی الگوها نبايد در شاخه ای که از طريق وب قابل دسترسی هستند قرار گيرند برای معرفی مسير دايرکتوريهای Smarty به شکل زير عمل می کنيم :



    $smarty->template_dir = '/var/www/templates/app1/template/';
    $smarty->compile_dir = '/var/www/templates/app1/compile/';
    $smarty->config_dir = '/var/www/templates/app1/config/';
    $smarty->cache_dir = '/var/www/templates/app1/cache/';




    شاخه template شاخه ای است که Smarty در آن به دنبال فایلهای .tpl می گردد.
    شاخه compile شاخه ای است که Smarty در آن الگوهای کامپایل شده را ذخیره می کند.
    شاخه config شاخه ای است که Smarty در آن به دنبال فایلهای تنظیمات می گردد.
    شاخه cache شاخه ای است که Smarty در آن به دنبال فایلهایcache را ذخیره می کند.

    روش دیگری نیز برای معرفی این متغیر ها وجود دارد و آن هم استفاده از مفهوم ارث بری است :




    <?php
    // require the Smarty class
    require_once('Smarty.class.php');

    // extend the Smarty class
    class my_Smarty extends Smarty {

    function my_Smarty() {

    // create the Smarty object
    $this->Smarty();
    // set Smarty folders
    $this->template_dir = '/var/www/templates/app1/template/';
    $this->compile_dir = '/var/www/templates/app1/compile/';
    $this->config_dir = '/var/www/templates/app1/config/';
    $this->cache_dir = '/var/www/templates/app1/cache/';

    // set other Smarty options
    $this->use_sub_dirs = false;

    }

    }
    ?>





    حالا وقت آن رسیده که استفاده از Smarty را در عمل ببینیم :




    //test.php
    <?php
    // require the Smarty class
    require_once('Smarty.class.php');
    // extend the Smarty class
    class my_Smarty extends Smarty {

    function my_Smarty() {

    // create the Smarty object
    $this->Smarty();
    // set Smarty folders
    $this->template_dir = '/var/www/templates/app1/template/';
    $this->compile_dir = '/var/www/templates/app1/compile/';
    $this->config_dir = '/var/www/templates/app1/config/';
    $this->cache_dir = '/var/www/templates/app1/cache/';

    // set other Smarty options
    $this->use_sub_dirs = false;

    }

    }
    //creating an instance of my_smarty
    smarty=new my_smarty();
    // assign values from PHP
    $smarty->assign('title', 'this is a sample');
    $smarty->assign('testـstatement', 'Hello friends');

    // display a template
    $smarty->display('test.tpl');
    ?>








    //test.tpl
    <html>
    <head><title>{ $title }</title></head>
    <body> { $testـstatement }!</body>
    </html>



    هنگامی که مرور گر درخواستی برای صفحه test.php می فرستد مقدار متغیر ها بصورت \ویا توسط PHP مقدار دهی میشود و خروجی برای کار بر به شکل زیر خواه بود :

    [/code]


    Hello friends !

    [/code]

    استفاده ازفایلهای Configuration :
    این فایلهای برای طراحیان Template بسیار مفید است، چرا که می توانند تنظیماتی را که در سراسر سیستم استفاده می شود مانند رنگها و ... را در این فایلها قرار دهند.

  2. #2
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    5

    #config.conf
    # Sample configuration file
    # Pound signs are used for comments
    colorA=#cccccc
    colorB=#eeeeee
    title=\"iranphp – first Persian PHP Resource\"
    [test_section]
    test_section_title=\"test\"
    test_section_title_Color=#000000







    //test.tpl
    {config_load file=\"config.conf\"}
    <html>
    <head><title>{ $title }</title></head>
    <body bgcolor=\"{colorA}\"> { $testـstatement }!</body>
    </html>




    در مثال فوق با اجرای test.php مقادیر متغیر ها توسط PHP و Config فایل تعیین می شود و در نتیجه خروجی زیر تولید می شود :



    <html>
    <head><title>iranphp – first Persian PHP Resource </title></head>
    <body bgcolor=\"#cccccc\"> test!</body>
    </html>




    Smarty امکانات بسیار گسترده تراز آنچه در این مقاله به آن اشاره شد دارد از جمله فیلترها ،حلقه ها و عبارات شرطی و بسیاری امکانات دیگر که بررسی آنها خارج از بحث این مقاله است و در اینجا مراد نشان آشنایی با این Templating Engine بود .

    منابع :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشيد

  3. #3
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    پيش فرض

    نمونه برنامه
    تابع چک کردن صحت ادرس e-mail ی


    <?php

    function checkemail($email){
    list($mailbox,$domain) = split('@',$email,2);
    $state = 'domain';

    // find preferred mailserver
    if(getmxrr($domain,$mailhosts,$pref)){
    asort($pref);
    foreach($pref as $preferred){
    $mailserver = $mailhosts[key($pref)];
    break;
    }
    $state = "trying mailserver $mailserver\";
    $state = mailconnect($mailserver,$email);
    }else{
    // no mail exchange found try as host
    $state = \"No MX, trying $domain\";
    $state = mailconnect($domain,$email);
    }
    return $state;
    }

    function mailconnect($mailserver,$email){
    $myhostname = $SERVER_NAME;
    $connection = fsockopen($mailserver, 25);
    if($connection){
    $state = \"connected to $mailserver\";
    // Nothing to do with greeting
    //$smtpgreeting = fread($connection, 512);

    //if($smtpgreeting){
    fputs($connection, \"HELO $myhostname\r\n\");
    $hello = fgets($connection, 512);
    if($hello){
    $state = \"chatting to $mailserver: $hello\";
    fputs($connection, \"MAIL FROM: <webserver@$myhostname>\r\n\");
    $youok = fgets($connection, 512);
    if($youok){
    $state = \"chatting to $mailserver: $youok\";
    fputs($connection, \"RCPT TO: <$newaddress>\r\n\");
    $recepient = fgets($connection, 512);
    $state = \"chatting to $mailserver: $recepient\";
    if(ereg('250',$recepient)){
    fputs($connection, \"QUIT\r\n\");
    $deliverable = true;
    $state = false;
    }elseif(ereg('220',$recepient)){
    fputs($connection, \"QUIT\r\n\");
    $deliverable = true;
    $state = false;
    }else{
    $deliverable = false;
    $state = \"RCPT? $recepient $newaddress\";
    }
    }
    }else{
    $state = \"$mailserver not accepting mail now, please try again.\";
    }
    //}else{
    //$state = 'mailserver not greeting me';
    //break;
    //}
    }else{
    $state = \"$mailserver not listening\";
    }
    return $state;
    }
    ?>





    با استفاده از تابع checkmail می توانید وضعیت هر آدرس پست الکترونیکی را پیدا کنید . دقت کنید که این تابع وضعیت رو بر می گرداند شما می توانید با تغییر هر وضعیت به true یا false از صحت یا سقم آدرس پست الکترونیک با خبر شوید و آنرا در برنامه خود استفاده کنید

  4. #4
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    پيش فرض

    نمونه برنامه
    گرفتن متحوای یک سایت



    <?php
    function get_web_content($website_address) {
    $site_content=''; // to make notice happy
    $file_handle=fopen($website_address,"r\");
    while ($line=fgets($file_handle,1000))
    {
    $site_content.=$line;
    }

    fclose ($file_handle);

    return $site_content;
    }

    $website_address='http://www.yahoo.com';
    $site_content=get_web_content($website_address);

    ?>

  5. #5
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    پيش فرض

    نمونه برنامه



    ی Login - Logout

    <?php

    //need this to get session variables
    session_start();
    //Solution for -Page has Expired- error
    header("Cache-Control: \");
    header(\"pragma: \");


    //Check if session is ok or not
    if (!$PHPSESSID) {
    session_register(\"username\");
    } else if (!$visitors) {
    session_register(\"username\");
    }

    //is login button pressed
    if($login){
    if($loginname){
    if($password){
    if($loginname==\"test\" && $password==\"test\"){
    $username=\"Test User\";

    /* If you like jump to another page uncomment this and change
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    * to point where you like it
    *
    header(\"Location: http://www.intelligent-networks.com/\");
    exit;
    * */
    } else {
    $msg=\"Wrong username or password\";
    $username=\"\";
    }
    }else {
    $msg=\"Password missing\";
    $username=\"\";
    }
    } else {
    $msg=\"Username missing!\";
    $username=\"\";
    }
    }

    //*If logout unset all session variables
    if($logout){
    $username=\"\";
    }
    ?>

    <html>
    <head>
    </head>
    <body>
    <form name=\"logaction\" method=\"post\">
    <?php
    if(!$username){
    ?>
    Username<br>
    <input type=\"text\" name=\"loginname\" size=\"10\">
    <br>
    Password<br>
    <input type=\"password\" name=\"password\" size=\"10\">
    <br>
    <input type=\"submit\" name=\"login\" value=\"Login\">
    <br><br>
    Try <br>
    username:test<br>
    password:test<br>
    <?php
    //display login messages
    echo \"<br>\".$msg.\"<br>\n\";

    } else {
    //display user name
    echo \"User:\".$username.\"<br>\n\";
    ?>
    <input type=\"submit\" name=\"logout\" value=\"Logout\">

    <!--
    Enter here data here
    -->
    <?php
    }
    ?>
    </form>
    </body>
    </html>

  6. #6
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    پيش فرض

    نحوه اتصال به بانک اطلاعاتی MySQL ی

    <?php
    $link = mysql_connect("localhost\", \"mysql_user\", \"mysql_password\")
    or die(\"Could not connect\");
    print (\"Connected successfully\");
    mysql_close($link);
    ?>

  7. #7
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    پيش فرض

    ایجاد بانک اطلاعاتی جدید در MySQL سرور






    <?php
    $link = mysql_pconnect("localhost\", \"mysql_user\", \"mysql_password\")
    or exit(\"Could not connect\");

    if (mysql_create_db(\"my_db\")) {
    print (\"Database created successfully\n\");
    } else {
    printf (\"Error creating database: %s\n\", mysql_error ());
    }
    ?>
    در اینجا در صورتی که Username و Password شما دسترسی به ایجاد بانک جدید در MySQL داشته باشد بانکی با نام my_db ایجاد خواهد شد

  8. #8
    داره خودمونی میشه masoud_razor's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    germany
    پست ها
    134

    4 عالیه دستم درد نکنه

    بابا یکی یه تشویقی تشکری بکنه دمتون گرم

  9. #9
    حـــــرفـه ای neopersia's Avatar
    تاريخ عضويت
    Oct 2006
    پست ها
    3,580

    پيش فرض

    سلام و خسته نباشید
    من دو تا پیشنهاد دارم.
    اول اینکه کدهای PHP رو بزاری تو تگ [php] تا درست نشون داده بشه و راحت بشه اونا رو خوند.
    دومیش هم اینه که برای هر پست یا کد منبعشو بنویسی تا دوستانی که میخوان استفاده کنند در صورت نیاز به اطلاعات در مورد اون بتونن مراجعه کنند و همینطور اعتبار اون کد هم تا حدی مشخص میشه.
    مثلاً پست شماره 7 رو ببینید. میاد برای ارسال یک کوئری یک اتصال دائمی به دیتابیس ایجاد میکنه که حتی بعد از توقف اسکرپت هم بسته نمیشه! گذشته از اون اصلاً توی یک سرور واقعی به مشتری اجازه نمیدن با استفاده از php دیتابیس بسازه (به دلایل امنیتی)

    یه درخواست هم دارم در مورد عنوان تاپیک. عنوانی که انتخاب کردید فقط برای پستهای اول مناسبه. بهتره یک عنوان دیگه برای این تاپیک انتخاب بشه.

  10. #10
    کاربر فعال انجمن موسیقی David.Jn's Avatar
    تاريخ عضويت
    Jul 2007
    پست ها
    2,070

    پيش فرض

    سلام و خسته نباشید
    من دو تا پیشنهاد دارم.
    اول اینکه کدهای PHP رو بزاری تو تگ [php] تا درست نشون داده بشه و راحت بشه اونا رو خوند.
    دومیش هم اینه که برای هر پست یا کد منبعشو بنویسی تا دوستانی که میخوان استفاده کنند در صورت نیاز به اطلاعات در مورد اون بتونن مراجعه کنند و همینطور اعتبار اون کد هم تا حدی مشخص میشه.
    مثلاً پست شماره 7 رو ببینی....
    منم عجیب موافقم

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •