• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
متد output()
#1
سلام دوستان.
یک سوال کوچیک :
در قسمت User Guide از CI گفته شده شما میتونید از متد _output() برای نمایش خروجی و امنیت بیشتر استفاده کنید . یه مثال هم زده که استفاده و کاربردش رو متوجه نشدم .
یعنی به جای اینکه خروجی رو مستقیما echo کنیم ، میشه متد output رو فراخوانی کرد ؟ با تعداد پارامتر های متغیر ؟
میشه یه مثال کوچیک بزنید .
ممنونم
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#2
شما که توی خروجی فقط متن نداری ، حتماً یه سری استایل و غیره رو هم هر باره باید فراخوانی کنی .
واسه همین یه متد میسازی که دو تا آرگومان میگیره ، یکیش اسم فایلی که قراره برای ویو استفاده بشه دومش اطلاعاتی که براش ست میشه .
  پاسخ
تشکر شده توسط : pary_daryayi
#3
ممنون. توضیحی که شما دادید معادل این هستش ؟ درسته ؟
کد:
function index()
{
$data['title']='my titile';
$this->load->view('tem/panel',$data);
}
ولی من منظورم این نیست.
تو این لینک link قسمت Processing Output رو متوجه نشدم.
یعنی شما میگید توضیحی که این قسمت داده ، معادل همین کدی هست که نوشتم ؟
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#4
ببینید ما در برنامه نویسی شی گرایی ، به هر متد وظیفه ای میدیم .
که اصطلاحاً بهشون میگیم اکشن .
توی کنترلرتون باید یک متد رو وظیفه نمایش خروجی بذارید تا بتونید به راحتی با تغییر یک متد ، تغییرات لازم رو اعمال کنید .
اومدیم بعد از دو ماه خواستید خروجی رو کش کنید ، اگه تمام درخواست های خروجی توی یک متد باشه فقط کافیه همون متد رو تغییر بدید .
بیایید کمی بیشتر بریم ، کل معماری MVC برای منظم تر کردن برنامه و توسعه و خطایابی راحتتر هست.
مثلاً توی همین CI شما توی کنترلر به دیتابیس دسترسی دارید ، یعنی حتی بدون استفاده از یک دونه مدل هم میتونید تموم برنامه تون رو بنویسید اما بهتره که از مدل استفاده کنید .
الانم این متد _output هم همینه .
البته یه چیز بگم ، اگه متد رو _output بذارید همزمان با فراخوانی متد ، کلاس output هم فراخونده میشه که برای تنظیمات هدر و ... استفاده میشه . (برای کنترلر های کپچا خوبه .)
این یه قسمتی از اسکریپت دانلود شاپ هست .
متد _out رو یه نگا بندازید .

کد پی‌اچ‌پی:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class 
Site extends CI_Controller {
    
    var 
$site_title NULL;
    
    function 
__construct()
    {
        
parent::__construct();
        
$this->load->model('Sitemodel','site');
        
$this->load->model('Appmodel','app');
        
$this->output->enable_profiler(1);
    }


    public function 
index()
    {
        
$this->home();
    }
    
    
// ---- product ---\\

    /* index , home */
    
function home()
    {
        
$data['pagenumber'] = $this->site->pagenumber('ds_product',"`status`='publish'",'','post');
        
$data['items'] = $this->site->get_product_home();
        
//$this->site_title= '';
        
$this->_out('home',$data);
    }
    
    
/* post/product */
    
function post($uri='' $NULL =NULL)
    {
        
$NULL === NULL or show_404();
        
        
$uri urldecode($uri);
        
$uri_fix url_fix($uri);
        
$uri_fix == $uri or show_404();
        
        
$data['items'] = $this->site->get_product_single($uri);
            foreach(
$data['items'] as $item)
            {
                
$this->site_title $item->title;
                break;
            }
        
$this->_out('single',$data);
    }
    
    
/* archive */
    
function archive($y=0,$m=0)
    {
        
$y = (int) big_intval($y);
        
$m = (int) big_intval($m);
        
        if(
$y<1350 or $y>1500 or $m<or $m>12)
            
show_404();
            
        
$archive "{$y}-{$m}";
        
$data['pagenumber'] = $this->site->pagenumber('ds_product',"`status`='publish' and `archive`='{$archive}'","archive/{$y}/{$m}/",'post');
        
$data['items'] = $this->site->get_product_archive($archive);
        
        
$month = array('','فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند');
        
$this->site_title $month[$m].' '.$y;
        
        
$this->_out('archive',$data);
    }

    
// ------- extra --- \\
    
function contact()
    {
        
$data['msg'] = '';
        if( ! empty(
$_POST))
            
$data['msg'] = $this->site->add_contact();
        
$this->site_title 'تماس با ما';
        
$this->_out('contact',$data);
    }
    
    function 
tribune()
    {
        
$this->site_title 'تریبون';
        
$data['msg'] = '';
        if( ! empty(
$_POST))
            
$data['msg'] = $this->site->add_tribune();
        
        
$data['pagenumber'] = $this->site->pagenumber('ds_tribune',"`status`='publish'",'tribune','post');
        
$data['items'] = $this->site->get_tribune();
        
        
$this->_out('tribune',$data);
        
    }
// ============== buy =================\\
    
function buy($id 0)
    {
        if(isset(
$_POST['action']) and $_POST['action'] === 'buy')
            
$data['msg'] = $this->site->buy($id);
            
        
//load module
        
$this->load->model('Paymentmodule','pay');
        
$data['getway'] = $this->pay->get_getway();
        
$data['product'] = $this->site->buy_it($id);
        
$this->site_title $data['product']['title'];
        
$this->_out('buy',$data);
    }
    
    
/* callback*/
    
function callback($getway NULL $rand 'rand' $time_stamp 'time',$buy_id 'buy',$null=NULL)
    {
        
$null === NULL or show_404();
        if(
is_null($getway) or !_is_numeric($rand) or !_is_numeric($time_stamp) or !_is_numeric($buy_id))
            
show_404();
            
        
$data $this->site->callback($getway,$rand,$time_stamp,$buy_id);
        
$this->_out('callback',$data);
    }
    
//=== OUT ===\\
    
function _out($name 'home' $data= array('not_things'=>'empty'))
    {
        
//set title
        
$site_title $this->main->get_option('site_title');
        if( ! empty(
$this->site_title))
            
$this->app->set_var('site_title' $site_title.' » '.$this->site_title);
        else
            
$this->app->set_var('site_title' ,$site_title);
                
        
$data['data_pattern'] = $this->main->get_option('date_post_pattern');
        
$data_app['app'] = $this->app ;
        
        
$this->load->view('site/header',$data_app);
        
$this->load->view("site/$name",$data);
        
$this->load->view('site/sidebar');
        
$this->load->view('site/footer');

    }

  پاسخ
تشکر شده توسط : pary_daryayi masoud1990
#5
خیلی ممنونم...
یه سوال کلی دیگه :
من تازه CI رو شروع کردم و فقط یه درک کلی ازش دارم ، میخوام بدونم باید به تمام فایل ها و کلاس ها مسلط بود ( مثلا فایل های پوشه ی core ) یا به همین User Guide و نحوه ی کار با فریم ورک اکتفا کنم ؟ دونستن تمام اونها لازمه ؟
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#6
خیر لازم نیست .
شما فقط بخش user guide رو بخونید تموم اونچه که لازم دارید رو داره .
حقیقتش CI به همین داکیومنتش معروفهBlush

در مورد کدهای هسته ، هر وقت خواستید تسلط کلی روی پیاده سازی کلی فریم ورک داشته باشین بخونینش .
البته خوندن بعضی کلاسهاش خالی از لطف نیست .Wink
  پاسخ
تشکر شده توسط : pary_daryayi
#7
آقا رضا این مثال اسکریپت دانلود شاپ خیلی خوب بود . بازم تشکر .
الان من قسمت ظاهری سایت رو درست کردم و یه منو گذاشتم که روی هر کدوم که کلیک میشه center سایتم محتواش عوض میشه . فعلا از پایگاه چیزی خونده نمیشه و فرض کنیم مطالب ساده ی از پیش آماده قراره نمایش داده بشه.
این کد رو ببینید بی زحمت :
کد:
public function home()
    {
        $data['page']='home';
        $data['home']='home';
        $this->_out('tem','panel',$data);
        
    }
    
    public function skills()
    {
        $data['page']='skills';
        $data['skills']='skills';
        $this->_out('tem','panel',$data);
        
    }
        
    function _out($folder ='tem', $name = 'panel' ,$data= array('not_things'=>'empty'))
    {
                
                $this->load->view('tem/baner');
                $this->load->view('tem/header');
                $this->load->view("$folder/$name",$data);
                
        
    }

الان روی منوی home که کلیک میشه مثلا کلمه ی home و روی skills که کلیک میشه کلمه ی skills نمایش داده میشه . تا اینجا درسته.
فقط یه سوال ؟ الان فرض کنیم صفحه ی اول سایتمون به جای کلمه ی home ، یه مطلب طولانی داریم با یه سری عکس و استایل خودش . آیا این درسته که با $data به این شکل بفرستیم. یا یه صفحه ی دیگه تعریف کنم و فراخوانی کنم ؟ یعنی میخوام یه صفحه ی دیگه رو از view‌بخونم و در center نشون بدم.
میشه راهنمایی کنید.
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط : Reza
#8
نقل قول:فقط یه سوال ؟ الان فرض کنیم صفحه ی اول سایتمون به جای کلمه ی home ، یه مطلب طولانی داریم با یه سری عکس و استایل خودش . آیا این درسته که با $data به این شکل بفرستیم. یا یه صفحه ی دیگه تعریف کنم و فراخوانی کنم ؟ یعنی میخوام یه صفحه ی دیگه رو از view‌بخونم و در center نشون بدم.
راستش خوب متوجه نشدم منظورت رو اما مشکلی نیست ، میتونی هر چیزی رو ست کنی .
  پاسخ
تشکر شده توسط :
#9
----------------- ویرایش : حل شد .Smile
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان