[РЕШЕНО] Задачка по views

Главные вкладки

Аватар пользователя dem-on dem-on 25 июля 2011 в 9:23

Всем знаком модуль views, позволяющий выводить нужную нам информацию. Так вот столкнулся со след проблемой - допустим есть представление, выводящее изображение из определенной ноды. Изображений для показа - 2. Как между этими двумя элементами-изображениями вставить текст?

Комментарии

Аватар пользователя vitg vitg 25 июля 2011 в 9:29

сначала поле с изображением, показать первое изображение
поле текста
поле с изображением, показать одно, начиная со второго

Аватар пользователя dem-on dem-on 25 июля 2011 в 9:44

а где эти настройки - показать первое и показать одно, начиная со второго?
скорее всего вы меня неправильно поняли, у меня есть 2 ноды, у каждой по изображению, с помощью views выводятся эти изображения, причем в случайной позиции, мне нужно между ними строчку текста вставить

Аватар пользователя vitg vitg 25 июля 2011 в 10:25

"dem-on" wrote:
скорее всего вы меня неправильно поняли, у меня есть 2 ноды, у каждой по изображению, с помощью views выводятся эти изображения, причем в случайной позиции, мне нужно между ними строчку текста вставить

Давайте еще подробнее, все еще не представил, как это работает

Аватар пользователя dem-on dem-on 25 июля 2011 в 10:42

щас постараюсь объяснить:
1. создал тип ноды "менеджер" с полем изображение
2. создал две ноды типа "менеджер", добавив на каждую ноду по изображению
3. создал представление в котором добавляю поле "содержимое:изображение" с фильтром по типу материала "менеджер"
4. кол-во элементов для показа - 2 (необходимо чтобы лишь 2 менеджера были показаны)
5. в сортировке указал чтобы порядок был произвольным, т.е. чтобы при каждой перезагрузке страницы менялся порядок менеджеров (чтобы не было так что один менеджер постоянно наверху, а другой - внизу)
6. это представление выводится в блок в виде двух изображений, между ними необходимо вставить электронный ящик, по-сути простой тект. Как его добавить туда?

Аватар пользователя drupby drupby 25 июля 2011 в 11:30

"drupby" wrote:
Модуль Views Custom Field http://drupal.org/project/views_customfield
позволяет вставлять текстовые поля.

Я же написал ,устанавливаешь этот модуль и вставляешь произвольные поля ,хочешь - php , хочешь - html ,хочешь простой текст.

Аватар пользователя vitg vitg 25 июля 2011 в 12:02

Может, как вариант, создать 2 блока из views. Под первым через views_customfield добавить email

Но лучше всего вывести блок через свой модуль.

Аватар пользователя dem-on dem-on 25 июля 2011 в 12:16

Я видимо плохо разбираюсь в этом модуле, но он не решает проблему, а вот ссылка на статью решает, только выскакивает ошибка:

Fatal error: Cannot use object of type view as array in Z:\home\site1\www\sites\all\themes\bluespan\template.php on line 79

на 79 строке у меня следующее:

<?php
if (!empty($vars['title'])) {
?>

а вообще вот весь код:

<?php
function bluespan_views_view_unformatted__managers_block($vars) {
  
$output '';
  if (!empty(
$vars['title'])) { //злополучная строка
    
$output .= '<h3>' $vars['title'] . '</h3>';
  }
  foreach (
$vars['rows'] as $id => $row) {
    if (
$id && $id == 0) {
      
$output .= '<a href="mailto:mail@mail.ru">mail@mail.ru</a>';
    }
    
$output .= '<div class="' $vars['classes_array'][$id] . '">';
    
$output .= $row;
    
$output .= '</div>';
  }
  return 
$output;
}
?>
Аватар пользователя drupby drupby 25 июля 2011 в 12:22

"dem-on" wrote:
Я видимо плохо разбираюсь в этом модуле, но он не решает проблему, а вот ссылка на статью решает, только выскакивает ошибка:

Fatal error: Cannot use object of type view as array in Z:\home\site1\www\sites\all\themes\bluespan\template.php on line 79


Решение работает с views 3 только ,если views 2 ,то может и ошибка выскочить.

Аватар пользователя dem-on dem-on 26 июля 2011 в 8:45

решил следующим образом:
в папке с темой создал файл типа views-view-unformatted--[машинное имя представления].tpl.php
а в нем следующее содержание:


<?php
// $Id: views-view-unformatted.tpl.php,v 1.6 2008/10/01 20:52:11 merlinofchaos Exp $
/**
 * file views-view-unformatted.tpl.php
 * Default simple view template to display a list of rows.
 *
 * ingroup views_templates
 */
?>
<?php 
if (!empty($title)): ?>
  <h3><?php print $title?></h3>
<?php endif; ?>
<?php 
foreach ($rows as $id => $row): ?>
  <!-- После первого элемента вставляем e-mail -->
  <?php if ($id && $id == 0): ?> 
    <a id="manager_mail" href="mailto:mail@mail.ru">mail@mail.ru</a>
  <?php endif; ?>
  <div class="<?php print $classes[$id]; ?>">
    <?php print $row?>
  </div>
<?php endforeach; ?>

Далее необходимо зайти в представление в настройку "Тема: Информация", внизу щелкнуть по "Пересканировать файлы шаблона".

Аватар пользователя otmoroz otmoroz 26 июля 2011 в 9:31

просто в поле с картинкой, поставить галкук "заменить вывод на" прописываешь само изображение из примера ниже и дальше текст.

Аватар пользователя drupby drupby 26 июля 2011 в 9:48

"otmoroz" wrote:
просто в поле с картинкой, поставить галкук "заменить вывод на" прописываешь само изображение из примера ниже и дальше текст.

В таком случае текст выведется после каждого из 2 изображений ,а надо между первым и вторым посередине и один раз .

Аватар пользователя dem-on dem-on 26 июля 2011 в 14:49

1 и 2-е изображения это одно поле
так что в таком случае после каждого изображения выведется такой текст

Аватар пользователя dem-on dem-on 27 июля 2011 в 7:57

пересмотрел, но или до меня не дошло, или ты меня неправильно понял, повторюсь, у меня с каждой ноды берется по 1 изображению, вот


Аватар пользователя drupby drupby 27 июля 2011 в 10:10

А если поле-изображение выводится к примеру 5 раз ,можно ли каждое из них заключить в div с 5-ью разными id ?

Аватар пользователя drupby drupby 27 июля 2011 в 10:24

"dem-on" wrote:
а у тебя эти изображения берутся сразу с одной ноды(5 изображений) или с разных нод по одной?

с разных нод по одной - это одно поле field_image ,выводимое с 5 нод .

Аватар пользователя dem-on dem-on 27 июля 2011 в 10:59

можно протемизировать, но случай будет работать если в представлении есть лишь одно поле-изображение, примерно так:


<?php
// $Id: views-view-unformatted.tpl.php,v 1.6 2008/10/01 20:52:11 merlinofchaos Exp $
/**
 * file views-view-unformatted.tpl.php
 * Default simple view template to display a list of rows.
 *
 * ingroup views_templates
 */
?>
<?php 
if (!empty($title)): ?>
  <h3><?php print $title?></h3>
<?php endif; ?>
<?php 
foreach ($rows as $id => $row): ?>
   <div class="<?php print $classes[$id]; ?>">
  <?php for($i=1$i<=5$i++) { ?> 
    <div id="rowid-<?php print $i?>"><?php print $row?></div>
  <?php ?>
  </div>
<?php endforeach; ?>

если в представлении будут другие поля, то они тоже обернутся дивами с уникальным id

Аватар пользователя drupby drupby 27 июля 2011 в 11:06

Но можно же остальные поля "исключить из вывода" ,а в каком то одном выбрать "заменить выводимое поле значением " и там обернуть остальные поля своими дивами .

Аватар пользователя drupby drupby 27 июля 2011 в 11:48

Но если на сайте несколько представлений ,то все unformatted представления будут так темизироваться .
А views-view-unformatted-номер_представления(или машинное имя?).tpl.php будет темизировать отдельное представление или по другому будет имя файла tpl.php для отдельного представления ?

Аватар пользователя dem-on dem-on 27 июля 2011 в 12:05

Нет, файл будет темизировать только отдельное представление, если имя файла будет выглядеть след образом:
views-view-unformatted--[машинное имя представления].tpl.php
только после создания такого файла нужно перейти в представлении в графу Тема: Информация и внизу нажать пересканировать файлы шаблона.
Лучше всего прогуглить тему по темизации во views