• 01-10-2014, 09:07:20
    #1
    Daha önceden düz mantık php kodlarken artık OOP'e geçmeye karar verdim. Öncelikle class yapısını iyice öğrenmem gerekiyor. Bu yüzden basit bir mvc yapısı hazırlayarak hem mantığını kavramak hem de öğrenme işlemini tamamladıktan sonra kullanacağım herhangi bir php framework'te çuvallamak istemiyorum. Sorunumu anlatacak olursam:

    Anasayfam için bir Home.php controller dosyası oluşturdum ve içeriğini şu şekilde yaptım:

    Home.php Controller dosyamdaki index fonksiyonum

    public function index()
        {
          $this->view('home', array(
            'header'        => $this->model('header')->main(),
            'topmenu'     => $this->model('menu')->topmenu(),
            'mainmenu'   => $this->model('menu')->mainmenu()
            )
          );
        }

    header.php modelim


    class Header extends Model {
        public function main()
        {
        	$settings 	        = $this->db->query('SELECT * from tm_settings where id=1')->fetch();
            $title 	        = $settings['title'];
            $description 	= $settings['description'];
            $keywords 	= $settings['keywords'];
        }   
    }

    model dosyalarımı oluşturup ilgili kısımları çektim. Menülerimde herhangi bir problem yok. Fakat model dosyası içinde html kod kullanmak istemediğim için header bilgilerimi (title,description,keywords) view klasöründe header.php oluşturup bunun içinde göstermek istiyorum ve bu header.php dosyasının home.php ile bütünleşik olması gerekiyor.

    1. sorum Controller dosyası içinden modelimizi çağırıp işlemi view dosyasına aktarıyoruz buraya kadar problem yok fakat model klasörümdeki header.php dosyasının içeriğini direkt olarak controller dosyasına çağırmadan view dosyasına nasıl aktarabilirim?

    2. Birinci sorumda yapmaya çalıştığım şey mantıksız ise eğer title,description,keywords gibi değerleri alabilmek için nasıl bir yol izlemem gerekiyor. Yani header modelinde main fonksiyonumun içindeki $title değişkenini nasıl view'e aktarabilirim. Aktaramıyorsak her biri için fonksiyon mu yazmam gerekiyor? (Burası biraz kafamı kurcalıyor)

    3. Benim amacım her controller dosyasında header bilgilerini tekrar tanımlamak istememem. 1 tane header dosyam olsun bütün controller dosyalarımı bu header modeli ile birlikte view'e aktarayım.
  • 01-10-2014, 10:32:44
    #2
    Üyeliği durduruldu
    return kullanarak fonksiyonlardan veri alabilirsin.

    class Header extends Model {
        public function main()
        {
          $settings           = $this->db->query('SELECT * from tm_settings where id=1')->fetch();
            $title            = $settings['title'];
            $description    = $settings['description'];
            $keywords    = $settings['keywords'];
    return array("title"=>$title,"desc"=>$description,"key"=>$keywords);
        }   
    }
    
    $veri=$this->model->fonksiyon();
    echo '<pre>';
    print_r($veri);
  • 01-10-2014, 10:43:33
    #3
    tolgatasci adlı üyeden alıntı: mesajı görüntüle
    return kullanarak fonksiyonlardan veri alabilirsin.

    class Header extends Model {
        public function main()
        {
          $settings           = $this->db->query('SELECT * from tm_settings where id=1')->fetch();
            $title            = $settings['title'];
            $description    = $settings['description'];
            $keywords    = $settings['keywords'];
    return array("title"=>$title,"desc"=>$description,"key"=>$keywords);
        }   
    }
    
    $veri=$this->model->fonksiyon();
    echo '<pre>';
    print_r($veri);
    Teşekkürler cevabın için fakat şöyle bir durum var. Diyelim ki benim Header model classımın içindeki main() fonksiyonumda $test = "bu bir test yazısıdır"; şeklinde bir değişken tanımlayıp bunu return ettiğimde controller dosyamda 'header' => $this->model('header')->main(), şeklinde tanımlayıp view dosyamda <?php echo $header; ?> dediğim zaman return ettiğim değeri basıyordu. Fakat şöyle bir durum var. Senin verdiğin kodda array dizisi içindeki verileri ayrı ayrı almam gerekiyor. Yani atıyorum $this->model('header')->main()->title dediğim zaman bana title değişkeninin çıktısını vermesi lazım.
  • 01-10-2014, 10:49:55
    #4
    Üyeliği durduruldu
    kesinlikle hayır
    return edilen değer view data yolluyorsun ya

    header' => $this->model('header')->main(),

    header viewde şöyle yapıcaksın <?=$header['title']?>
  • 01-10-2014, 10:58:56
    #5
    tolgatasci adlı üyeden alıntı: mesajı görüntüle
    kesinlikle hayır
    return edilen değer view data yolluyorsun ya

    header' => $this->model('header')->main(),

    header viewde şöyle yapıcaksın <?=$header['title']?>
    Teşekkür ederim şimdi istediğim gibi oldu. Peki bu son sorum. 'header' => $this->model('header')->main(), Şeklinde çağırıp dediğin gibi kodumu home.php view dosyasına eklediğimde görünüyor buraya kadar bir sıkıntı yok. Fakat bu sefer her controller dosyamda aynı şeyleri tanımlamak zorunda kalacağım. Halbuki burası sabit bir yer. Yani ben bu header modelim için bir header.php view dosyası hazırlayıp bu kodlarımı orada çalıştırıp header modelimi home.php contoller dosyama öyle çağırmam gerekiyor. Kısacası 'header' => $this->model('header')->main() dediğim anda header.php view dosyasının görünmesini nasıl sağlarım?
  • 01-10-2014, 13:16:51
    #6
    Üyeliği durduruldu
    CI genel olarak view olayı aşaması şudur.
    $this->load->view("tema.php",$yollucagindataarray);

    $this->load->view("header.php",$headerdata);
    $this->load->view("home.php",$headerdata);
    $this->load->view("footer.php",$headerdata);

    Burada malisef istediğin şekilde olması için ayrı ayrı yollaman gerekiyor
    bununla beraber

    http://williamsconcepts.com/ci/codei...ries/template/
    https://github.com/philsturgeon/codeigniter-template
    https://github.com/scotch-io/stencil
    http://jeromejaglale.com/doc/php/codeigniter_template

    bu template sistemlerini inceleyin güzel sınıflardır
  • 01-10-2014, 14:13:06
    #7
    tolgatasci adlı üyeden alıntı: mesajı görüntüle
    CI genel olarak view olayı aşaması şudur.
    $this->load->view("tema.php",$yollucagindataarray);

    $this->load->view("header.php",$headerdata);
    $this->load->view("home.php",$headerdata);
    $this->load->view("footer.php",$headerdata);

    Burada malisef istediğin şekilde olması için ayrı ayrı yollaman gerekiyor
    bununla beraber

    http://williamsconcepts.com/ci/codei...ries/template/
    https://github.com/philsturgeon/codeigniter-template
    https://github.com/scotch-io/stencil
    http://jeromejaglale.com/doc/php/codeigniter_template

    bu template sistemlerini inceleyin güzel sınıflardır
    $this->view('header', array(
    	  	'header'    	=> $this->model('header')->main('home'),
            'search'		=> $this->model('search')->searchform(),
            'topmenu'  		=> $this->model('menu')->topmenu(),
            'mainmenu'  	=> $this->model('menu')->mainmenu()
    	  	)
    	  );
          $this->view('home', array(
            'mainslider'	=> $this->model('slider')->mainslider(),
            'newsletter'	=> $this->model('newsletter')->subscribeform()
            )
          );
    Şu şekilde kullanınca işimi fazlasıyla gördü. Teşekkür ederim ilgin ve yardımların için
  • 01-10-2014, 14:15:54
    #8
    Hazır bir framework kullanırsanız, MVC yapıya çok daha hızlı ve kolay alışırsınız. Üstelik, inceleyebileceğiniz bir sürü döküman, soru sorabileceğiniz bir çok topluluk olur. Sıfırdan bir omurgayı ayağa kaldırmayla zaman kaybetmeyin derim.

    Tavsiyem: Laravel.
  • 01-10-2014, 14:24:31
    #9
    atay adlı üyeden alıntı: mesajı görüntüle
    Hazır bir framework kullanırsanız, MVC yapıya çok daha hızlı ve kolay alışırsınız. Üstelik, inceleyebileceğiniz bir sürü döküman, soru sorabileceğiniz bir çok topluluk olur. Sıfırdan bir omurgayı ayağa kaldırmayla zaman kaybetmeyin derim.

    Tavsiyem: Laravel.
    Niyetliyim. Özellikle de laravel kullanmak için can atıyorum diyebilirim. Ama dediğim gibi. Düz mantık php kodlayan biriyim. Önce OOP mantığını kavramam lazım. Kavrarken de basit işlerimi aradan çıkarmam lazım. Bu şekilde iyice öğrenip öyle laravel veya benzeri bir framework'e geçme gibi bir düşüncem var. Yani önce eksiklerimi gidereyim.