0

非常讨厌的问题,我进行了很长时间的调查以找出错误的根源。我为此做了一个原始帖子,但我删除了它以创建一个新的新帖子。所以让我们从头开始。提前感谢您阅读本文直到最后。

我有一个 View Helper Pub.php。这个随机显示一个广告。$this->pub() 在 layout.phtml 和 phtml 视图文件中被调用。Helper 还会在显示之前增加展示次数。

发布.php

Class My_View_Helper_Pub extends Zend_View_Helper_Abstract {

public function pub( $place, $format ) {
    // Extract the active campaigns, then randomly select one
    $campaigns = $model->getActiveCampaigns();
    ...
    // Increase the number of view for this campaign (in MySQL)
    $model->increasePrint($campaign->id);

    // And display the banner
    echo $this->generateHtml($campaign->filename);

}

public function generateHtml($filename){
    // Generate the html according to the filename (image, flash, custom tag etc...)
    return $code;
}

增加打印()

public function increasePrint($id){

    $table = $this->getTable();

    $row = $table->find($id)->current();
    $row->imp_made = $row->imp_made + 1;

    return $row->save();
}

我的layout.phtml也很简单:

<html>
<head>
   <?= $this->pub(null, 'css') ?>
</head>
<body>
   <?= $this->pub(null, 'big_banner' ?>
</body>

问题:在某些操作中,布局中的广告被选中并增加了两次!好像帮手又被实例化了一样。

经过一番搜索,问题似乎来自另一个 View Helper:LogoEvent。此帮助程序通过返回正确的 HTML 代码来显示徽标/图像。

LogoEvent.php

class My_View_Helper_LogoEvent extends Zend_View_Helper_Abstract
{
    public function logoEvent($image, $taille = null){
        $image = trim($image);

        if ($taille){
            $width = "max-width: {$taille}px;";
    } else {
        $width = '';
    }

    if (!empty($image)){

        return '<img src="/images/agenda/logos/'. $image .'" style="'. $width .'" alt="Logo" />';

    } else {

        return '<img src="/images/agenda/logos/no-logo.png" style="'. $width .'" alt="No Logo" />';

    }
}

}

当我的硬盘上不存在该文件时,会发生双倍增量。真的很奇怪......我试过这个:

echo $this->logoEvent( 'existing_image.jpg', '100');
// No problem, everything works fine.

echo $this->logoEvent( 'unexisting_image.jpg', '100');
// => problem.

 echo htmlentities($this->logoEvent( 'unexisting_image.jpg', '100'));
 // No problem, everything works fine.

有人比我有更好的知识来找出可能是什么问题或找到它的方法......谢谢!

4

1 回答 1

0

我几乎可以肯定您的问题来自 .htaccess,在 ZF 中默认设置为将所有不存在的文件(-s条件)发送到 index.php,因此您的应用程序将再次启动(可能进入 ErrorController ,对于 404)。

将其添加到 .htaccess 中,看看它是如何适合的(它省略了某些要路由到 index.php 的文件):
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]

于 2011-12-03T05:40:29.737 回答