А кто знает как вывести количество фото в ноде?

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

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 16:28

Привет всем!

А кто знает как вывести количество фото в ноде? Подскажите пожалуйста. Все фото загружены через одно imagefield поле.

Комментарии

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 16:38

leovka, ну не один ли хрен? Ну пусть машинное имя будет foto.

aleks_84, это куда? В tpl.php файлы темы возле вывода терминов?

А если мне нужно во вьхе вывести названия статей и фото в них:
Фото о рыбалке ( 12 фото )

Аватар пользователя shadowrun shadowrun 10 ноября 2015 в 11:47

Сейчас как раз этим сам и занимаюсь..скорее всего геморный путь избрал, но тем не менее работает.

вывел с помошью модуля Content templates ( предварительно посмотрев на структуру БД ) моя структура бд у меня в атаче
фотки выводились у меня в колонке delta и машинное имя поля content_field_fotogallery.

тоесть в Content templates выбираем нужный тип материала и вбиваем этот запрос
<?php
$result = db_result (db_query('SELECT COUNT(delta) FROM (content_field_fotogallery) WHERE nid='.$node->nid.''));
echo $result;
?>

иии..усе профит

Аватар пользователя aleks_84 aleks_84 18 августа 2011 в 16:52

"VasyOK" wrote:
aleks_84, это куда? В tpl.php файлы темы возле вывода терминов?

обычно в node.tpl.php, ну или куда вам там нужно. Во вьюхе думаю в шаблон вывода поля. Код для вьюхи не скажу, ни разу не требовалось.

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 16:54

А если вьюха самая обычная - название ноды и количество фоток в поле foto каждой ноды, то код запроса будет вроде такой же, только вместо
SELECT COUNT(delta)

Надо
SELECT COUNT(мое поле)

Аватар пользователя vitg vitg 18 августа 2011 в 17:29

"aleks_84" wrote:
зачем делать отдельный запрос, когда можно использовать данные, которые выгребает вьюха?

Плюсую. Где есть массив с выводимыми данными вызовите count()

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 18:00

В ноде вывести получилось. Во вьюхе чет не понял

Где оно там есть? Вывожу Поле: Содержимое Фото там можно формат фото задать. А как количество?

Аватар пользователя aleks_84 aleks_84 18 августа 2011 в 18:14

а количество нужно смотреть в шаблоне вывода поля(его подсмотреть можно открыв раздел Theme (тема, или как оно там переведено у них)

Аватар пользователя aleks_84 aleks_84 18 августа 2011 в 18:32

на странице редактирования представления. Там в столбике Basic settings (основные настройки?) в самом низу есть нужная вам ссылка. А сам файл шаблона лежит в папке модуля views\theme

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 18:46

До сегодняшнего дня мне казалось, что я умею с ним работать

Там у меня написано:
Поле Cодержимое: Фото (field_foto) (ID: field_foto_fid): views-view-field.tpl.php, views-view-field--field-foto-fid.tpl.php, views-view-field--galleryviews.tpl.php, views-view-field--galleryviews--field-foto-fid.tpl.php, views-view-field--page.tpl.php, views-view-field--page--field-foto-fid.tpl.php, views-view-field--galleryviews--page.tpl.php, views-view-field--galleryviews--page--field-foto-fid.tpl.php

Я так понимаю надо создать файл
field-foto-fid.tpl.php (или?)
views-view-field--galleryviews--field-foto-fid.tpl.php

и в нем написать... Э-э-э... А что в нем написать?

Аватар пользователя leovka leovka 18 августа 2011 в 19:54

"VasyOK" wrote:
Я так понимаю надо создать файл
field-foto-fid.tpl.php (или?)
views-view-field--galleryviews--field-foto-fid.tpl.php

и в нем написать... Э-э-э... А что в нем написать?

Да, нужно создать файл views-view-field--galleryviews--field-foto-fid.tpl.php а в него написать что-то вроде


<?php print "Count FOTO:".substr_count($output,"<img"); ?>
<?php 
print ($output); ?>
Аватар пользователя VasyOK VasyOK 18 августа 2011 в 21:40

<?phpprint "Count FOTO:".substr_count($output,"<img"); ?>

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

Вьюху с названием и фото сделал. Шаблон поля посмотрел - вот файлик закинул. Может что-то забыл.

Аватар пользователя Dan Dan 18 августа 2011 в 21:39

В node.tpl.php:
<?php if($node->type == 'rybalka'): ?>
Фото о рыбалке ( <?php print count($node->foto); ?> фото )
<?php endif; ?>
Можно использовать не общий шаблон node.tpl.php, а создать свой node-rybalka.tpl.php

Views тут не нужен - поле уже загружено и доступно - зачем ещё раз опрашивать БД?

Аватар пользователя Dan Dan 18 августа 2011 в 21:50

"VasyOK" wrote:
Dan, то что ты пишешь это я уже сделал, см. выше. Это в ноде. А теперь я во вьюхе пытаюсь.

Я бы хранил в ноде значение. Для вьюхи это будут либо подзапросы, либо группировки.

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 21:54

Нет я еще не понял.

leovka, спасибо. Действительно надо было нажать "Просканировать файлы шаблонов"

Теперь выводится, но только не то что надо.

<?phpprint "Count FOTO:".substr_count($output,"<img");?>

После этого выводится Count FOTO: 1

1 - в не зависимости от того сколько фоток в поле каждой ноды

Аватар пользователя aleks_84 aleks_84 18 августа 2011 в 23:39

сейчас посмотрел что творит views 2.12 при таком выводе... Это пиздец.

"shadowrun" wrote:

<?php
$result = db_result (db_query('SELECT COUNT(delta) FROM (content_field_fotogallery) WHERE nid='.$node->nid.''));
echo $result;
?>

по моему более "лёгкий" вариант.

Аватар пользователя VasyOK VasyOK 18 августа 2011 в 23:51

Спасибо aleks_84!
Да, действительно. Так оно и есть.

Поставил там 0 - и оно мне подсчитало.

Правда при этом во вьюхе выводятся все картинки из ноды. А как сделать чтобы выводилась только первая? При этом чтобы их количество все равно подсчитывалось.

Аватар пользователя aleks_84 aleks_84 19 августа 2011 в 0:00

"VasyOK" wrote:
Правда при этом во вьюхе выводятся все картинки из ноды. А как сделать чтобы выводилась только первая? При этом чтобы их количество все равно подсчитывалось.

навскидку:
чтобы отображалась 1-я из всех - в поле картинок в группировке выбрать: показывать 1 начиная с 0.
+ дописать запрос на получение кол-ва картинок.

Аватар пользователя leovka leovka 19 августа 2011 в 3:02

"aleks_84" wrote:
имхо лучше из $row данные брать

Из $row не взять. картинки в данном случае не в массиве, а одной строкой в $output

Аватар пользователя leovka leovka 19 августа 2011 в 3:08

"leovka" wrote:
Правда при этом во вьюхе выводятся все картинки из ноды. А как сделать чтобы выводилась только первая?

В настройках поля фотографий есть пункт "Группировать множественные значения"
Ставишь в поле "Показать 1 значение(я)"

Аватар пользователя VasyOK VasyOK 30 августа 2011 в 0:35

Всем привет!

А можно сделать в типе материала поле, которое подсчитывало бы количесво фоток в другом поле?

Ну а потом я это значение уже буду выводить куда мне надо.

Аватар пользователя VasyOK VasyOK 30 августа 2011 в 4:12

Поставил модуль. Добавил computed поле в материал.

Вписал
Computed Code:
$node_field[0]['value'] = sizeof($node->field_foto);

В отображении полей выбрал Computed Value

Не вижу я этого поля в ноде в результате. Может что-то не то делаю...

volocuga, это оно: http://drupal.org/node/879652 ?

Вписал также это все равно не работает

$count1 = count($node->field_foto);
$count2 = 0;

for($i = 0; $i < $count1; $i++) {
  $fid = $node->field_foto[$i]['fid'];
  $n = is_null($fid) || $fid == 0;
  if (!$n) {
    $count2++;
  }
}

$node_field[0]['value'] = $count2;

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 30 августа 2011 в 4:08

Ну перво наперво, нужно сначала загрузить сам объект нужной ноды (переменная $node), а то сейчас у тебя она просто в воздухе болтается

Аватар пользователя VasyOK VasyOK 30 августа 2011 в 15:27

???

volocuga, ну не понимаю. Может потому что с этим модулем раньше не приходилось работать. Что там написать надо?

Аватар пользователя VasyOK VasyOK 31 августа 2011 в 22:19

Код оставил

$count1 = count($node->field_foto);
$count2 = 0;

for($i = 0; $i < $count1; $i++) {
  $fid = $node->field_foto[$i]['fid'];
  $n = is_null($fid) || $fid == 0;
  if (!$n) {
    $count2++;
  }
}

$node_field[0]['value'] = $count2;

Тупой код конечно же проще попытаюсь.

Подсчитывает.
Но: результат показывается только после того, как отредактируешь нужную ноду.