Не найденное изображение в View_Helper вызывает несколько запросов БД в другом View_Helper - PullRequest
0 голосов
/ 02 декабря 2011

Очень неприятная проблема, я провел очень долгое расследование, чтобы выяснить причину ошибки.Я сделал для этого оригинальный пост, но удалил его, чтобы создать новый свежий пост.Итак, начнем с самого начала.Заранее спасибо за прочтение этого до конца.

У меня есть View Helper Pub.php.Это случайное отображение рекламы.$ this-> pub () вызывается в layout.phtml и в файлах просмотра phtml.Помощник также увеличивает количество показов перед его отображением.

Pub.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;
}

IncreasePrint ()

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>

Проблема: при некоторых действиях объявления в макете отбираются и увеличиваются дважды!Как будто помощник был снова создан.

После некоторого поиска проблема, похоже, исходит от другого помощника вида: 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.

Кто-то обладает лучшими знаниями, чем я, чтобы выяснить, в чем может быть проблема, или способ ее найти ..Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2011

Я почти уверен, что ваша проблема из .htaccess, где по умолчанию в ZF настроено отправлять все несуществующие файлы (условие -s) в index.php, таким образом ваше приложение будет запускатьсяснова (возможно, в ErrorController, для 404).

Вместо этого добавьте это в .htaccess, посмотрите, как он подходит (он пропускает определенные файлы, которые нужно направить в index.php):
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]

...