Очень неприятная проблема, я провел очень долгое расследование, чтобы выяснить причину ошибки.Я сделал для этого оригинальный пост, но удалил его, чтобы создать новый свежий пост.Итак, начнем с самого начала.Заранее спасибо за прочтение этого до конца.
У меня есть 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.
Кто-то обладает лучшими знаниями, чем я, чтобы выяснить, в чем может быть проблема, или способ ее найти ..Спасибо!