Sizin çiftleşmiş stratejileri nelerdir?

5 Cevap php

Benim kendi küçük çerçeve geliştirmeye çalışacağız. Bunun için, bazı çiftleşmiş teknikleri kadar okumak istiyorum. Ben çiftleşmiş gerçekten karmaşık bir konu olduğunu biliyorum, ama bazı stratejiler bilerek doğru olanı bulmanıza yardımcı olabilir.

, Sen bir söz varsa, sadece örneğin "smarty" yazmayın lütfen. Arkasında kavramı hakkında biraz yazmak.

Bana bir fikir ile başlayalım: şeyler basit hale getirmek için, benim şablon dosyalarını HTML içerdiği sadece PHP dosyalarıdır. Şablonları diğer şablonları içerebilir. Veri şablonu için tüm verileri içeren bir ilişkisel dizidir bir $ veri değişkeni aracılığıyla şablonlar içine sokulur.

Yani, ilk aşamada bir kontrolör bazı eylem gerçekleştiren ve $ veri dizisi oluşturur. Sonra, uygun bir şablon dahil edilecektir.

Bir Şablon sadece şablonlar, aynı zamanda denetleyicileri eklemek gerekebilir: Sorunlar. yani (bir şablon içinde ele alınması gereken çok karmaşık arkasında oldukça karmaşık mantığı ile) bir kırıntı veya menü görüntüleniyor.

5 Cevap

, Bölüm Web Presentation Patterns bir göz var, özellikle Template View, Transform View, Two-Step View. Galeta unu veya sayfalama işleme gibi şeyler için, bir View Helper pattern kullanabilir.

I really enjoyed zend-framework approach to this, and have used it myself in our framework. You will have a view class with will have things like:

$view = new View();
$view->setTemplatesPath('.....');
$view->assign('name','value');
$view->render('index');

render yöntemi depolanan tüm değişkenleri alır ve onları özellikleri yapmak ve şablonları var olacak, böylece Yolu kümesi temelinde şablon içerecektir:

<?php echo $this->foo; ?>
....
<?php echo $this->load('header'); // this includes another template ?>

Bu yerine (WHAT?!?) Ben sadece ilk etapta Görünüm çağırır Controller görünüm için tüm gerekli verileri hesaplamak Görünümünde bir denetleyicisi çağırmak, ben bunu tam olarak nasıl olduğunu.

A View should never call a Controller / Model! ANCAK, sen böyle bir şey yapabilirsiniz gerekiyorsa:

function Controller($pathToControler) // instantiates and returns the Controller
function Model($pathToModel) // instantiates and returns the Model

Bu şekilde, iç görünüm böyle bir şey yapabilirsiniz:

$this->Controller('path/to/blog/tags.php')->List();

Yine, bu desen kullanmak gerekir ben sadece onları teşvik etmek, size çözüm değil veriyorum.

Benzer şekilde, ayrıca bu gibi bir görünüm içinde başka bir görünümü arama yapabilirsiniz:

$this->View('path/to/views/header.php', array('title' => 'Hello World!'));

Şöyle Benim stratejisi:

  1. Deneyin ve hiçbiri aşağı şablonu ve mümkünse PHP az kullanın.
  2. I have created classes for various components commonly found in web pages, one of them is tpanel which I am using to demonstrate the concept below
  3. Örneğin TPanel bir menü oluşturmak için tüm mantığı işlemek, 'navigation_menu' için küçük bir şablon ayrıştırır ve genel şablona nihai dahil sonucunu gönderir.

Etkili Ben, Drupal ne çok benzer 'blok' oluşturma - Eğer aşina iseniz.

        $this->load->library('tpanel');
        $s=$this->tpanel->get('date',$data);
        $s.=$this->tpanel->get('navigation_menu',$data);
        $s.=$this->tpanel->get('ajax_menu',$data);
        $s.=$this->tpanel->get('spacer',$data);
        $data['title']='List of Databases';
        $post=$this->uri->segment(5);
        $blog=(file_get_contents('../'.$dir.'/'.$post.'.dat'));
        $s.=markdown($blog);
        $data['content']=$s;
        $view='/admin/admin_simple_view';

Sistem ne yukarıda göstermiştir ki çok daha esnektir. Örneğin tpanel->get('ajax_menu, $data) ayrıca jQuery kullanarak komut dosyası ayarları yönetir.

Ben de son zamanlarda Django bakarak edilmiştir ve çiftleşmiş bazı çok iyi fikirler var. Onların mirası idare özellikle nasıl bir Python programcı olmasa bile, bir görünüm elde değer olabilir.

Bu doğrudan soru ile ilgili değil, ancak istemci tarafı çiftleşmiş kabul var? John Resig web hizmetleri ve diğer Ajax teknikleri ile çalışacak bir Yaptı micro-template Javascript vardır. Bu şablon için bir get veya post yapmak ve sonra da verileri başka bir olsun / yazı yapmak oldukça basit. Oldukça kullanışlı.