2015-02-05 95 views
0

我有多個模型,我想將變量$section添加到,然後在sidenav.ctp中使用該值來動態更改邊欄。例如,我的型號有:如何在CakePHP模型中設置變量並在視圖中訪問它?

class Resource extends AppModel { 
    public $section = 'section1'; 
    public $displayField = 'name'; 
    public $order = 'modified DESC'; 

    //validation, relationships, etc. 
} 

然後,我有另一種模式,如:

class Topic extends AppModel { 
    public $section = 'section2'; 
    public $tablePrefix = ''; 

    //validation, relationships, etc. 
} 

所以在sidenav.ctp我想要做的事,如:

<?php if ($this->section == 'section1') { ?> 
    <li><?php echo $this->Html->link(__('Resources'), array('controller' => 'resources', 'action' => 'index')); ?></li> 
    <li><?php echo $this->Html->link(__('Topics'), array('controller' => 'topics', 'action' => 'index')); ?> </li> 
    <li><?php echo $this->Html->link(__('Log Out'), array('controller' => 'users', 'action' => 'logout')); ?> </li> 
<?php } ?> 

<?php if ($this->section == 'section2') { ?> 
    <li><?php echo $this->Html->link(__('Resources1'), array('controller' => 'resources', 'action' => 'index')); ?></li> 
    <li><?php echo $this->Html->link(__('Topics1'), array('controller' => 'topics', 'action' => 'index')); ?> </li> 
    <li><?php echo $this->Html->link(__('Log Out1'), array('controller' => 'users', 'action' => 'logout')); ?> </li> 
<?php } ?> 

但訪問$section這樣不起作用。我無法弄清楚如何在模型中設置值,然後在視圖中訪問它。我知道我可以在控制器中設置值,然後通過$section訪問它,但這需要我將它放在每個函數中。

+0

爲什麼模型?我認爲沒有必要。 – Salines 2015-02-05 21:30:14

+0

如果我將它放在控制器中,我將如何設置它,因此我不需要將它分別放在每個函數中? – WOUNDEDStevenJones 2015-02-05 21:31:14

+0

你會爲不同的模型顯示不同的菜單? – Salines 2015-02-05 21:34:26

回答

0

嘗試在你的視圖文件$this->name == 'ModelName'

這樣的例子:

<li <?php if($this->name == 'Users'){?> class="active" <?php } ?> > 
      <a href="<?php echo $this -> Html -> url(array('plugin' => false, 'controller' => 'pages', 'action' => 'dashboard')); ?>"> 
       <i class="fa fa-dashboard"></i> 
       <span><?php echo __('Dashboard', true); ?></span> 
       <span class="label label-warning pull-right">1</span> 
      </a> 
     </li> 

OR

在控制器

beforeFilter或beforeRender方法:

//access variable from model 
$this->set('sections',$this->User->section); 

//or set direct  
$this->set('sections','section1'); 
+0

'$ this-> name'會給我模型本身的名稱,但我試圖在每個模型中設置一個自定義變量,以便我可以在視圖中訪問它們。 – WOUNDEDStevenJones 2015-02-05 21:41:35

+0

是的,它會給你模型的名稱。你可以像我所說的那樣使用它。但是由於你堅持使用自己的變量,我在我的答案中編輯和添加了這些功能。 – Salines 2015-02-05 22:36:00

+0

我知道我可以做一些類似於if($ model =='Model1'|| $ model =='Model2'|| $ model =='Model3'){/ * show menu1 * /} else if($ model''Model4'){/ * show menu2 * /}',但我希望能夠定義每個模型屬於哪個「部分」,而不必將這些長條件置於任何想要具有此功能的位置。 – WOUNDEDStevenJones 2015-02-06 15:33:31

0

查看的/元素可以由任何控制器調用並呈現,所以它們不會自動理解你想要引用的數據,除非你將它從模型傳遞到視圖。 最近你可以做什麼沒有任何用處會迴應路由器模型的方法,但結果取決於你的網址。

+0

「除非你將它從模型傳遞到視圖」 - 這就是我想要做的。到目前爲止,我的最大努力是在控制器中使用'beforeFilter'並在那裏設置變量。 – WOUNDEDStevenJones 2015-02-06 15:27:23

0

可以節省定義全球變量

Configure::write('my_var','this is model variable'); 

訪問您的視圖文件這個變量這樣

echo Configure::read('my_var'); 
相關問題