Drupal 6 / Views2 Стиль сетки: целые ячейки связаны с узлами

На своем сайте Drupal я создал страницу Users с помощью модуля Views, который представляет собой просто красиво оформленную сетку (HTML-таблицу) пользователей. Я показываю несколько полей для каждого из них, и имя и изображение профиля настроены для ссылки на узел пользователя.

Как лучше всего изменить его так, чтобы вся ячейка (HTML td) ссылалась на пользовательский узел? РЕДАКТИРОВАТЬ: Меня интересует не добавление тегов ссылок HTML, а доступ к URL-адресам каждой страницы профиля.

Я попытался изменить тему представления (переопределив вывод Style, например, views-view-grid - users.tpl.php), но не вижу элегантного способа получить URL-адрес пользовательского узла.

РЕДАКТИРОВАТЬ: Я реализовал временное решение в javascript, которое просматривает HTML-код каждой ячейки, извлекает URL-адрес первой ссылки и использует его, но нет ли лучшего способа сделать это как-то с использованием переменных Drupal?

Спасибо за вашу помощь.


person jackocnr    schedule 11.05.2010    source источник


Ответы (4)


Как насчет чего-то вроде этого ... JavaScript не нужен

В вашей таблице:

<td><a href="..." class="td_link">the link</a></td>
...

В вашем файле CSS:

.td_link {
   display: block; 
   width: 100%;
}

Итак, в основном все, что вам нужно сделать, это добавить класс к вашей ссылке и небольшой фрагмент CSS.

person the_e    schedule 11.05.2010
comment
Спасибо за предложение, но это производит ужасный эффект - он просто превращает весь контент в ссылку (весь текст / изображения), но без промежутков между контентом или краем div. Я предполагаю, что единственное решение, позволяющее использовать весь div, - это javascript, и это нормально. Проблема в том, что я не вижу, как элегантным способом получить фактический URL-адрес пользовательского узла. Информация находится прямо в содержимом ячеек - поле имени и изображения ссылается на пользовательский узел, но, похоже, я не могу получить доступ к этой информации с помощью файлов пользовательских шаблонов темы ... - person jackocnr; 11.05.2010
comment
Как неловко; Я только что понял, что ваш метод блочной ссылки действительно делает то, что я хочу. Не уверен, что я делал раньше неправильно - возможно, какие-то странные проблемы с приоритетом CSS. Это действительно лучшее решение для использования JS для превращения целых div в ссылки ... Спасибо. - person jackocnr; 24.05.2010
comment
если вам это нравится, примите это;) я рад, что вы смогли заставить его работать, хотя - person the_e; 25.05.2010
comment
Я отметил его как полезный, но не могу принять его как ответ, потому что он не решает мою основную проблему: доступ к URL-адресу профиля каждого пользователя из файла шаблона настраиваемых представлений. - person jackocnr; 25.05.2010
comment
ааа, извини, подумал, проблема устранилась - person the_e; 25.05.2010

Хорошо, я нашел лучший (супер простой) способ извлечения URL-адреса профиля, а также преодолел несколько проблем со всем решением для блочных ссылок (приписываемых espais), которые, как я думал, стоит задокументировать. Итак, вот полное решение моей исходной проблемы:

1) Добавьте файл настраиваемого шаблона, чтобы переопределить views-view-fields.tpl.php (см. http://views-help.doc.logrus.com/help/views/using-theme - спасибо barraponto за полезную ссылку). В этом настраиваемом файле вы должны заключить весь код в ссылку и добавить div clear-fix непосредственно перед концом, чтобы растянуть ссылку на всю высоту контейнера.

<a class="td-link" href="user/<?php print $row->uid; ?>">
...
<div class="clear-fix"></div>
</a>

2) Теперь вам нужно избавиться от любых других ссылок внутри каждого элемента сетки, так как вам не разрешено вкладывать HTML-ссылки (вызывает действительно странное поведение). Первое, что нужно сделать, это отредактировать представление и убедиться, что ни в одном из полей не установлен флажок «связать это поле с его пользователем». Затем, если вы хотите включить поле с изображением профиля, вам нужно добавить небольшой модуль исправления, потому что по умолчанию нет способа остановить это поле как ссылку! Вы можете получить модуль из этого комментария: http://drupal.org/node/720772#comment-2757536

3) Наконец, CSS. Добавьте в файл style.css своей темы следующее:

a.td-link {
    display: block;
    color: #000;
    text-decoration: none;
    border: 1px solid #E9EFF3;
}
a.td-link:HOVER {border-color: #85b3d4;}
a.td-link label {cursor: pointer;}
div.clear-fix {clear: both;}

Это удаляет форматирование ссылки из текста (поскольку мы хотим, чтобы весь блок выглядел как ссылка, а не только текст), и растягивает ссылку, чтобы заполнить контейнер. Это также делает графику курсора согласованной и добавляет красивый эффект границы при наведении курсора на блок. Помните, что вы также можете добавить собственный класс CSS в представление, что значительно упрощает и упрощает выбор элементов для стилизации в коде CSS.

person jackocnr    schedule 25.05.2010
comment
lol, это может действительно решить проблему с меню, у меня есть ... баллы за это;) - person the_e; 25.05.2010

Важно различать настоящие ссылки с тегами ‹a> и произвольные элементы, по которым вы можете щелкнуть. Даже если вас не волнует семантика, вам следует позаботиться о том, чтобы ваши посетители не использовали JavaScript, особенно поисковые системы.

Вместо того, чтобы превращать блочный элемент в ссылку, вы должны превратить ссылку в блочный элемент, как это предлагается в частности. Один из способов получить больший контроль над разметкой - использовать настраиваемые поля для добавления открывающих и закрывающих тегов для вашей ссылки. вокруг остальных ваших полей.

person Scott Reynen    schedule 11.05.2010
comment
К сожалению, предложение espais не дает желаемого эффекта (см. Мой комментарий). На самом деле меня устраивает использование javascript - я рад, что мои посетители разрешили это, и это не проблема для поисковых систем, потому что, как я уже сказал, ячейки также содержат обычные ссылки на тот же конец. Я обновил свой исходный вопрос, чтобы подробнее рассказать о моей проблеме. - person jackocnr; 11.05.2010

Спайс и Скотт-Рейнен правы. но вместо того, чтобы размещать каждое поле под несколькими элементами ‹a›, каждый из которых оформлен с помощью css, чтобы превратить их в блоки (которые могут иметь поля и отступы), почему бы не использовать один элемент ‹a›?

если все предназначено для ссылки на одно и то же место, вы можете разместить все это вместе под одним элементом ‹a›, хотя каждый элемент должен быть встроенным элементом (‹span› вместо ‹div›). вы можете сделать это, изменив шаблон строки: проверьте http://views-help.doc.logrus.com/help/views/using-theme

в вашем случае скопируйте шаблоны из модуля представлений в папку вашей темы и переименуйте их, как указано в вашем представлении «Тема: Информация». убедитесь, что не выводятся ‹div› или ‹p› или любой другой элемент блока. если вам нужно разорвать линии, используйте ‹br›.

person Capi Etheriel    schedule 19.05.2010
comment
обратите внимание, что вы можете стилизовать элементы ‹span› с помощью display: block; и, таким образом, примените к нему поля и отступы. - person Capi Etheriel; 19.05.2010
comment
Спасибо за совет. С тех пор я понял, что espais был прав. Моя единственная проблема сейчас - это доступ к URL-адресу профиля пользователя из этого настраиваемого файла шаблона. Я просто не знаю, какие переменные доступны для моего PHP-кода в этих файлах шаблонов ... - person jackocnr; 24.05.2010