نمایش نتایج 1 تا 7 از 7

نام تاپیک: منظور از کلاس template چیست؟

  1. #1

    منظور از کلاس template چیست؟

    با یاد خدا
    سلام دوستان گرامی
    در برخی مطالب دوستان توضیحاتی در مورد ساختار و یا استفاده از کلاس تمپلیت دادن
    اما از ابتدای کار نگفتن که کلا این کلاس چیه ؟
    ایا از قبل ساخته شده؟ یا یه مفهوم عام هست و خودمون بوجود میاریم؟

  2. #2
    کاربر دائمی آواتار wallfa
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    همدان
    پست
    414

    نقل قول: منظور از کلاس template چیست؟

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

    منظور در این سیستم هم همان موضوع است .
    یک کلاس که مربوط به سیستم قالب میشه ! و کد ها پی اچ پی از ساختار اچ تی ام ال جدا میکنه .

  3. #3

    نقل قول: منظور از کلاس template چیست؟

    کلیات رو گرفتم ولی هنوز کامل برام حضم نشده
    دوستان اگه حوصله دارین بیشتر توضیح بدین ممنون میشم
    اینکه تفاوت دوسیستم که یکیشون از این کلاس استفاده کرده و یکی نه چیه؟ مزایا؟ علت بوجود امدن این کلاس؟ و اینکه ایا استاندارد خاصی برای طراحی داره یا دلخواه و نسبت به سیستم هست

  4. #4

    نقل قول: منظور از کلاس template چیست؟

    دوستان کسی نیست جواب این موضوع رو بده

  5. #5
    کاربر دائمی
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    ایران، شیراز، ... ، خونمون، روبروی مانیتور
    پست
    539

    نقل قول: منظور از کلاس template چیست؟

    دوست عزیز ساختار های مختلفی برای کدنویسی به مرور زمان بوجود اومده که کارشون اینه که کدنویسی رو اصولی تر میکنن و نتیجش اینه که خوانایی کد بیشتر میشه و بعضی مزایای دیگه
    از جمله این روش ها الگوی MVC هست که کلا میاد لایه ی view رو از کدهای هسته نزم افزار جدا میکنه (معمولا بصورت شی گرا یا Object Oriented پیاده سازی میشه)
    یکی دیگه از روش ها نوشتن کدها به صورت فانکشنال هست...
    البته این روش ها روش های ثبت شده و کاملا ثابتی نیستند و برنامه نویس با توجه به کارش و با خلاقیت خودش میاد این روش ها رو تغییر میده و یا با هم ترکیب میکنه.

    حالا بریم سر اصل مطلب یا همون کلاس قالب

    ببینید شما 1 راه برای این که 1 نرم افزار رو با PHP بسازید اینه که کدهای HTML رو بنویسید و مابین اونها هرجا که لازمه کدهای PHP هسته نرم افزارتون رو بنویسید.
    اما عیب این روش چیه؟
    مشخصه که کدها کاملا نامرتب و اسپاگتی میشه و در واقع بخش view نرم افزار با هسته نرم افزار یکجا هست که بعدا برای تغییرات توی نرم افزارهای بزرگ شما رو دچار مشکل میکنه.
    ( مثلا برای تغییر ظاهر نرم افزار کدهای هسته نرم افزار هم جلوی شما هست! ) یا یکی دیگه از عیب هاش اینه که اگر خواستید قالب سایت رو در مناسبت های مختلف عوض کنید اینکار ممکن نیست.

    حالا یکی از چاره هایی که برای این مشکل اندیشیده شده استفاده از کلاس یا موتور قالب هست. (Template Engine)
    شیوه کار بدین صورت هست که شما 1 قالب که معمولا 1 صفحه HTML هست رو توسط PHP لود میکنید... در حین اجرای کدهای PHP و قبل از فرستادن چیزی به Output شما 1 سری پردازش ها رو داری، از جمله لود کردن از دیتابیس و...
    حالا فرض کنید تو صفحه HTML شما 1 تگ وجود داره به نام [sitetitle] . بعد شما میای عنوان سایت رو توسط PHP از دیتابیس و یا هرجای دیگه میخونی و براحتی اون تگ قالب رو با عنوان سایت جایگزین میکنی.
    اینجوریه که کدهای HTML شما از کدهای PHP تفکیک میشن و زیبایی و خوانایی و گسترش پذیری نرم افزار شما بیشتر میشه.

    این به طور خیلی ساده بود
    پیشنهاد میکنم برای آشنایی بیشتر با موتورهای قالب ساده کار کنید و کدهای اونا رو بخونید متوجه میشید که کارشون چیه
    ( تاکید میکنم ابتدا با موتورهای قالب ساده کار کنید و نه مثلا Smarty )

    موفق باشید

  6. #6

    نقل قول: منظور از کلاس template چیست؟

    نقل قول نوشته شده توسط AbiriAmir مشاهده تاپیک
    موفق باشید
    ميشه شما يك template engine ساده رو معرفي كنيد براي بررسي.

    چون اين اسمارتي خيلي پيچيدست.

    يك سادش رو معرفي كنيد ممنون ميشم.

  7. #7
    کاربر دائمی
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    ایران، شیراز، ... ، خونمون، روبروی مانیتور
    پست
    539

    نقل قول: منظور از کلاس template چیست؟

    بفرمایید این 1 نمونه هست مال سیستم مدیریت محتوای راش
    1 نمونه کامل تر هم بود اگر پیدا کردن میذارم همینجا



    <?php
    // Security
    if ( !defined( 'sec' ) ) {
    die( "You are not allowed to access this page directly!" );
    }
    class Template
    {
    var $tags = array( );
    var $required_tags = array( );
    var $blocks = array( );
    var $tpl = '';
    var $parsed_tpl = '';

    function load( $tpl = '' )
    {
    if ( !empty( $tpl ) ) {
    if ( !file_exists( $tpl ) ) {
    $this->tplerror( 'Could not find the template file <b>' . $tpl . "</b>" );
    return FALSE;
    }
    $tpl = @implode( '', @file( $tpl ) );
    $tpl = $tpl ? $tpl : $this->tplerror( 'Could not read the template file!' );
    $this->tpl = $tpl;
    }
    }
    function tplerror( $error )
    {
    echo $error;
    return FALSE;
    }
    function assign( $input, $value = '', $required = FALSE )
    {
    if ( is_array( $input ) ) {
    foreach ( $input as $tag => $value ) {
    if ( empty( $tag ) )
    $this->tplerror( 'R a s h C M S::The tag name shouldnt be empty.' );
    if ( $required == TRUE ) {
    $this->required_tags[ $tag ] = $value;
    } else {
    $this->tags[ $tag ] = $value;
    }
    }
    } elseif ( is_string( $input ) ) {
    if ( empty( $input ) )
    $this->tplerror( 'R a s h C M S::The tag name shouldnt be empty.' );
    else {
    if ( $required == TRUE ) {
    $this->required_tags[ $input ] = $value;
    } else {
    $this->tags[ $input ] = $value;
    }
    }
    } else {
    return FALSE;
    }
    return TRUE;
    }

    /*-----------------------------------------------------------------*/

    function block( $block_name, $block_array )
    {
    if ( !is_string( $block_name ) || empty( $block_name ) )
    $this->tplerror( 'R a s h C M S::Block name is not a string or is empty!' );

    if ( !is_array( $block_array ) )
    $this->tplerror( 'R a s h C M S::Block array is not an array!' );
    $this->blocks[ $block_name ][ ] = $block_array;
    }

    /*-----------------------------------------------------------------*/

    function parse( )
    {
    if ( empty( $this->tpl ) ) {
    return;
    }

    # blocks
    $tmp_blocknames = array( );
    foreach ( $this->blocks as $block_name => $block_arrays ) {
    if ( $anzahl = preg_match_all( '/<tag:' . preg_quote( $block_name, '/' ) . '>(.*)<\/tag:' . preg_quote( $block_name, '/' ) . '>/sU', $this->tpl, $matches ) ) {
    for ( $i = 0; $i < $anzahl; $i++ ) {
    $block_plus_definition = $matches[ 0 ][ $i ];
    $block = $matches[ 1 ][ $i ];

    if ( is_int( strpos( $block, '<!-- IF' ) ) ) {
    $parse_control_structures = TRUE;
    }

    $parsed_block = '';
    foreach ( $block_arrays as $block_array ) {
    $tmp = $block;
    if ( isset( $parse_control_structures ) ) {
    $tmp = $this->_parse_control_structures( $tmp, array_merge( $block_array, $this->tags, $this->required_tags ) );
    }
    foreach ( $block_array as $tag_name => $tag_value ) {
    $tmp = str_replace( '[' . $tag_name . ']', $tag_value, $tmp );
    }
    $parsed_block .= $tmp;
    }
    $this->tpl = str_replace( $block_plus_definition, $parsed_block, $this->tpl );
    $tmp_blocknames[ ] = $block_name;
    unset( $parse_control_structures );
    }
    }
    }
    if ( count( $this->blocks ) > 0 ) {
    $this->tpl = preg_replace( "/<(tag|\/tag):(" . implode( '|', $tmp_blocknames ) . ")>/", '', $this->tpl );
    }
    # unbenutze blcke entfernen
    $this->tpl = preg_replace( "/<tag:([a-zA-Z0-9_-]+)>.*<\/tag:\\1>( |\r|\n)?/msU", '', $this->tpl );

    # single tags
    foreach ( $this->required_tags as $tag_name => $tag_value ) {
    if ( !is_int( strpos( $this->tpl, $tag_name ) ) )
    $this->tplerror( 'R a s h C M S::Could not find tag <i>' . $tag_name . '</i> in the template file!' );
    else {
    $this->tpl = str_replace( '[' . $tag_name . ']', $tag_value, $this->tpl );
    }
    }
    foreach ( $this->tags as $tag_name => $tag_value ) {
    $this->tpl = str_replace( '[' . $tag_name . ']', $tag_value, $this->tpl );
    }

    # if & else
    $this->tpl = $this->_parse_control_structures( $this->tpl, array_merge( $this->tags, $this->required_tags ), $this->blocks );


    $this->parsed_tpl = $this->tpl;
    $this->tpl = '';
    }

    /*-----------------------------------------------------------------*/

    function showit( )
    {
    if ( !empty( $this->tpl ) ) {
    $this->parse();
    }
    print $this->parsed_tpl;
    }

    /*-----------------------------------------------------------------*/

    function dontshowit( )
    {
    if ( !empty( $this->tpl ) ) {
    $this->parse();
    }
    return $this->parsed_tpl;
    }

    /*-----------------------------------------------------------------*/

    function reset( )
    {
    $this->tpl = '';
    $this->parsed_tpl = '';
    $this->tags = array( );
    $this->required_tags = array( );
    $this->blocks = array( );
    }

    /*-----------------------------------------------------------------*/

    function _parse_control_structures( $tpl, $vars, $blocks = array( ) )
    {
    if ( $matchnumber = preg_match_all( '/<!-- IF (!?)((BLOCK )?)([_a-zA-Z0-9\-]+) -->(.*)((<!-- ELSEIF !\(\\1\\2\\4\) -->)(.*))?<!-- ENDIF \\1\\2\\4 -->/msU', $tpl, $matches ) ) {
    for ( $i = 0; $i < $matchnumber; $i++ ) {
    //print( $matches[8 ][$i] . '<br />');
    if ( !empty( $matches[ 2 ][ $i ] ) ) {
    $code = 'if( ' . $matches[ 1 ][ $i ] . 'isset($blocks[\'' . $matches[ 4 ][ $i ] . '\']) )' . "\n";
    } else {
    $code = 'if( ' . $matches[ 1 ][ $i ] . '( isset($vars[\'' . $matches[ 4 ][ $i ] . '\']) ) )' . "\n";
    }
    $code .= '{ $tpl = str_replace( $matches[0][$i], $this->_parse_control_structures( $matches[5][$i], $vars, $blocks ), $tpl ); }' . "\n";
    $code .= ' else ' . "\n";
    $code .= '{ $tpl = str_replace( $matches[0][$i], !empty($matches[7][$i]) ? $this->_parse_control_structures( $matches[8][$i], $vars, $blocks ) : \'\', $tpl ); }';
    eval( $code );
    }
    }
    return $tpl;
    }
    }
    ?>

تاپیک های مشابه

  1. منظور از کد پیج چیست؟
    نوشته شده توسط چنگیز مهدیقلی در بخش تحلیل و طراحی نرم افزار
    پاسخ: 9
    آخرین پست: یک شنبه 08 اردیبهشت 1398, 14:09 عصر
  2. منظور از کلاس partial چیست؟
    نوشته شده توسط mariaviolla در بخش C#‎‎
    پاسخ: 5
    آخرین پست: شنبه 20 شهریور 1395, 00:10 صبح
  3. کلاس ManagementObjectSearcher چیست؟
    نوشته شده توسط منصور بزرگمهر در بخش VB.NET
    پاسخ: 1
    آخرین پست: سه شنبه 30 تیر 1388, 18:20 عصر
  4. راه رسیدن به کلاس دیاگرام چیست؟
    نوشته شده توسط anjomshoa در بخش تحلیل و طراحی نرم افزار
    پاسخ: 2
    آخرین پست: چهارشنبه 20 دی 1385, 07:24 صبح
  5. منظور از این syntax چیست؟
    نوشته شده توسط ravanfar در بخش برنامه نویسی با Borland C++‎ Builder
    پاسخ: 3
    آخرین پست: یک شنبه 22 مرداد 1385, 21:27 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •