Cakephp 1.3, странное поведение на firefox при использовании ссылки $ this-> Html-> - PullRequest
0 голосов
/ 05 мая 2010

Привет,

Я получаю очень странный и непредсказуемый результат в Firefox при использовании следующего синтаксиса:

$this->Html->link($this->Html->div('p-cpt',$project['Project']['name']) . $this->Html->div('p-img',$this->Html->image('/img/projects/'.$project['Project']['slug'].'/project.thumb.jpg', array('alt'=>$project['Project']['name'],'width'=>100,'height'=>380))),array('controller' => 'projects', 'action' => 'view', $project['Project']['slug']),array('title' => $project['Project']['name'], 'escape' => false),false);

Хорошо, я знаю, что это большое, но терпите меня.

Смысл в том, чтобы получить следующий вывод:

<a href="x" title="x">
<div class="p-ctp">Name</div>
<div class="p-img"><img src="z width="y" height="a" alt="d" /></div>
</a>

Я не уверен, правильно ли это проверяется как на cakephp, так и в html, но это работает везде, кроме firefox. Вы можете увидеть результат здесь: http://www.gnomonconstructions.com/projects/browser Для воспроизведения результата используйте форму с разными категориями и нажмите кнопку поиска. В какой-то момент это произойдет !!

Хотя большую часть времени он отображает так, как должен, иногда он выдает неверный вывод, подобный этому:

<a href="x" title="x"></a>
<div class="p-cpt">
<a href="x" title="x">name</a>
</div>
<div class="p-img">
<a href="x" title="x"><img src="x" width="x" height="x" alt="x" /></a>
</div>

Похоже, это повторяет ссылку внутри каждого элемента.

Если честно, единственная причина, по которой я использовал этот синтаксис, заключалась в том, что cakephp поощряет его.

Любая помощь будет высоко ценится:)

1 Ответ

0 голосов
/ 06 мая 2010

Я предполагаю, что название некоторых проектов null.Согласно документации , если вы передадите null в качестве второго аргумента методу div(), он не сгенерирует закрывающий тег (и полученная разметка будет недействительной).

Пример неверной разметки, который вы вставили выше, похоже, пришел из Firebug, а не из Page Source.Используйте источник страницы для просмотра фактической разметки, отправленной в браузер.Якорный тег не повторяется.

Я переписал ваш код, чтобы лучше видеть, что происходит.Скопируйте его в одно из ваших представлений, измените 'My Project' на null и обратите внимание, как это повлияет на переменную $name_div:

<div class="p-cpt">My Project</div> превратится в <div class="p-cpt">.

<?php

$project['Project']['name'] = 'My Project';
$project['Project']['slug'] = 'my-project';

$image = $this->Html->image(
    '/img/projects/' . $project['Project']['slug'] . '/project.thumb.jpg',
    array(
        'alt' => $project['Project']['name'],
        'width' => 100,
        'height' => 380
    )
);

$name_div = $this->Html->div('p-cpt', $project['Project']['name']);

$image_div = $this->Html->div('p-img', $image);

$link = $this->Html->link(
    $name_div . $image_div,
    array(
        'controller' => 'projects',
        'action' => 'view',
        $project['Project']['slug']
    ),
    array(
        'title' => $project['Project']['name'],
        'escape' => false
    )
);


var_dump($image);
echo 'Notice what happens below if project name is null.';
var_dump($name_div);
var_dump($image_div);
var_dump($link);

echo $link;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...