【问题标题】:php code not working in default.ctp page in Cakephp2.8.5php 代码在 Cakephp2.8.5 的 default.ctp 页面中不起作用
【发布时间】:2016-11-17 17:08:23
【问题描述】:

提前谢谢,我是 cakephp 新手,我使用的是 cakephp2.8.5 版本。实际上,我想编写一个 php 代码来计算 mysql 数据库表中的记录数,将有序日期列的日期值与当前日期进行比较。我已经编写了代码,但我的菜单在 default.ctp 页面中。在订单检查菜单中,我必须以数字显示计数。 default.ctp 页面位于 app/view/Layout/default.ctp 那么如何在不使用控制器的情况下在 php 代码中创建计数值。

我的代码会将当前日期与表格列日期进行比较并计算计数。如何在不创建控制器页面的情况下将变量 $ordCounts 传递到 default.ctp 页面 如下:

<?php                     

$a = 0; 

for($j=0; $j<count($ordCounts) ;$j++)   
{
    $orderDate = $ordCounts[$j]['carts']['order_date'];          
    $currentDate = $dateTime;        
    $diff = strtotime($currentDate) - strtotime($orderDate);         
    $hour = $diff/(60*60);                             
    if($hour>24)  
    {
        $a++;           
    }
} 

echo $a; 

?>

【问题讨论】:

  • 你的意思是如何从控制器设置变量以在 default.ctp 页面中使用?

标签: cakephp


【解决方案1】:

AppController 中创建beforeRender() 方法

public function beforeRender(){
    parent::beforeRender();
    //here your code
    $this->set('a',$a);
}

$a 变量将在模板中可用

【讨论】:

    【解决方案2】:

    你可以用上面的代码创建一个函数,像这样计算 AppController 中的出现次数

    function countOccurences(){
        $a = 0; 
        for($j=0; $j<count($ordCounts) ;$j++)   
        {
            $orderDate = $ordCounts[$j]['carts']['order_date'];          
            $currentDate = $dateTime;        
            $diff = strtotime($currentDate) - strtotime($orderDate);         
            $hour = $diff/(60*60);                             
            if($hour>24)  
            {
                $a++;           
            }
        } 
        return $a;
    }
    

    然后在 AppController 的 beforeFilterMethod 中调用这个函数

    function beforeFilter(){
        parent::beforeFilter();
        $count = $this->countOccurences();
        $this->set('count',$count);
    }
    

    【讨论】:

    • 不,我的 default.ctp 页面出现了一些错误。实际上,我在 UsersController 中创建了一个 sql 查询,如下所示 public function orderCount() { //For 24 hrs Order check for all orders $ counts = $this->User->query("select * FROM carts LEFT JOIN 检查 carts.orderid = checks.order_id AND carts.exam_name = checks.exam WHERE checks.order_id 为 null AND checks.exam 为 null AND carts。 order_date set('count',$counts); }
    • 在 deafult.ctp 页面中我必须传递变量 count 24){$a++; } } 返回 $a;
    • 但我在第 120 行的 default.ctp 页面中遇到致命错误
    • 我的疑问是如果没有为 deafult.ctp 页面创建控制器和模型,我如何传递像这样的“count”变量 $this->set('count',$counts);进入default.ctp页面
    • 如果您不想创建模型或控制器,您可以随时使用 AppController.php 并在那里创建您的上述函数(其中包含 sql 查询),因为您使用的是查询函数,所以您不需要还必须担心模型,所以在我的 countOccurences 函数解决方案中,您可以调用查询,然后可以在 default.ctp 中访问它。虽然这不是一个好习惯。我建议您在此处粘贴错误跟踪
    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多