CakePHP - Nasıl bir öğe adına sayfa başlığı ayarlarım?

10 Cevap php

Tamam, bu yüzden kendimi CakePHP çerçeveyi öğretmeye çalışıyorum, ve ben kendim için basit bir demo uygulaması vurmak çalışıyorum.

Ben kontrolörleri, görüş ve modelleri tüm kurmak ve çalışma var, ama ben temel online yardım gösterileri biraz daha fazla bir şey yapmak istiyorum.

Aşağıdaki gibi bir guitars_controller.php dosya var ...

<?php
class GuitarsController extends AppController {
    var $name = 'Guitars';
    function index() {
    	$this->set('Guitars', $this->Guitar->findAll());
    	$this->pageTitle = "All Guitars";
    }
    function view($id = null) {
    	$this->Guitar->id = $id;
    	$this->set('guitar', $this->Guitar->read());
        // Want to set the title here.
    }
}
?>

'Guitar' nesne 'Adı' adında bir özelliği içerir, ve ben tek sayfa görünümleri için PageTitle olarak ayarlamak mümkün istiyorum.

Herkes, ben nasıl yapardım lütfen işaret edebilir?

NB: Ben bu tarz verilere set, ama bana, o ilgili veri nerede uygulama hakkında genel anlaşmazlık olduğunu biliyoruz.

10 Cevap

Bu eylemler agnostik modeldir böylece app / app_controller.php dosyaya konabilir

<?php
class AppController extends Controller {
    function index() {
        $this->set(Inflector::variable($this->name), $this->{$this->modelClass}->findAll());
        $this->pageTitle = 'All '.Inflector::humanize($this->name);
    }
    function view($id = null) {
        $data = $this->{$this->modelClass}->findById($id);
        $this->set(Inflector::variable($this->modelClass), $data);
        $this->pageTitle = $data[$this->modelClass][$this->{$this->modelClass}->displayField];
    }
}
?>

/ Gitar (GuitarsController devralan) AppController yılında bir çalıştırılacak böylece yok senin gitar denetleyicisi dizin eylemi, çağıracağı için tarayıcınızı işaret. Görünüm eylem için aynı. Bu aynı zamanda vb DrumsController, KeyboardsController vb için çalışacak

Siz denetleyicisi bu ayarlayabilirsiniz:

function view($id = null) {
    $guitar = $this->Guitar->read(null, $id);
    $this->set('guitar', $guitar);
    $this->pageTitle = $guitar['Guitar']['name'];
}

Veya görünümünde:

<? $this->pageTitle = $guitar['Guitar']['name']; ?>

Görünümünde ayarlamak değeri zaten denetleyicisi ayarlanmış olabilir herhangi bir değeri geçersiz kılar.

Güvenlik için, pageTitle html-kodlar bu keyfi verileri görüntüler senin düzen / görünüm enjeksiyon saldırıları ve kırık html önlemek için emin olmalısınız

<?php echo h( $title_for_layout ); ?>

Oo paradigmanın kendi yanıta yanıt. Onun böyle:

function view($id) {
    $this->Guitar->id = $id;
    $this->Guitar->read();
    $this->pageTitle = $this->Guitar->data['Guitar']['name'];
    $this->set('data', $this->Guitar->data);
}

Id set ve geçerli vb ise bu url kullanıcı girişi olduğundan arada, sen kontrol etmelisiniz.

CakePHP 1.3 itibariyle, ayar sayfası başlığı değiştirildi.

$this->pageTitle = "Title"; //deprecated

$this->set("title_for_layout",Inflector::humanize($this->name)); // new way of setting title

Not: Daha Inflector hakkında: http://api13.cakephp.org/class/inflector#method-Inflector

$this->pageTitle = $this->Guitar->Name;

Bu olsa View gitmeli, ben PHP veya cakePHP yok, ama bir görünüm yapmak gereken bir şey değil, denetleyici şu.

Bu denetleyici gitmek gerekir. Bkz this

"Ama ben temel online yardım gösterileri biraz daha fazla bir şeyler yapmak istiyorum."

Her zaman ovmak değil mi? O kadar belgeleri gerçekten çok yardımcı olmuyor ki bir minimum yöneliktir. Sen mevcut öğreticiler birçok tamamlayabilirsiniz ama yakında rezervasyonun kapalı 1 adım olarak karışıklık Eh setleri in, çıplak asgari yanlısı veya geliştirici maksimum ya ama nadiren vurur kolaylığı, netlik ve derinlik tatlı nokta.

Ben şu anda sadece bu yüzden, onu anlamanın "en iyi uygulama" yolu, tutarsızlıkları düzeltmek varsayımlar geçiştirilmiştir netleştirmek ve özünde alabilirsiniz benim kendi kullanımı için bazı Zend Framework belgelerine yeniden yazıyorum. Benim mantra: kolaylığı, netlik, derinlik. , Netlik, derinlik kolaylığı.

Aşağıdaki gibi ah, hiçbiri-açık cevap ...

$this->pageTitle = $this->viewVars['guitar']['Guitar']['Name'];

Ben denetleyicisi aşağıdaki kodu koyarak bu bulundu (dürüst olmak gerekirse, ödedi bir ihtimaldi)

echo "<pre>"; print_r($this);echo "</pre>";

Yardım etmeye çalıştı herkese teşekkürler.

echo "<pre>"; print_r($this);echo "</pre>";

nasıl

pr( $this );

Tamam, ben gerçekten görünümünde yerine denetleyicisi sayfa başlığını ayarlamak istiyorum. Yani burada ne yaptım:

class CustomersController extends AppController {

    var $name = 'Customers';

    function beforeFilter() {
        parent::beforeFilter();
        $this->set('menu',$this->name);
        switch ($this->action) {
          case 'index':
            $this->title = 'List Customer';
            break;
          case 'view':
            $this->title = 'View Customer';
            break;
          case 'edit':
            $this->title = 'Edit Customer';
            break;
          case 'add':
            $this->title = 'Add New Customer';
            break;
          default:
            $title = 'Welcome to '.$name;
            break;
        }
        $this->set('title',$this->title);
      }

Hüner $this->title herhangi bir eylem içinde, bu iş olmaz ayarlanamaz olmasıdır. Bu web sayfası ancak beforeFilter bunu yapabilir, render sonra harekete ulaşır gibi geliyor bana.