Как во вьюхе вывести значение одного из полей - только в одном количестве

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

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 19:51

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

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

на скрине, я хочу убрать то что чёрным обведено

ВложениеРазмер
Иконка изображения scr.png64.78 КБ

Комментарии

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 20:13

Вооот!вы правильлно меня поняли, я тоже думал, что по идее это поле просто нужно через PHP выводить, с проверкой, какое по счёту это поле, если первое то выводи, если не первое то тишина

Я сам честно говоря не знал как объяснить, но если вкратце, то просто одной из полей вьюхи, выводить только первое по счёту

Правда, это моё поле ИТОГО - это поле типа ДРУГАЯ ВЬЮХА, т.е. вьюха в вьюхе
не знаю, прокатит ли тут PHP

в общем буду очень признателен за код

Аватар пользователя roman-yrv roman-yrv 21 октября 2013 в 21:22

Переопределите соответствующий файл *.tpl.php, который отвечает за циклический вывод элементов вьюхи.
Например, views-view-table.tpl.php, если у Вас views выводится в виде таблицы.

И там уже сделайте проверку.
Если выводимый row - первый, то у поля "итоговая цена" оставлять его значение, иначе его делать пустым.

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 21:33

roman-yrv wrote:
Переопределите соответствующий файл *.tpl.php, который отвечает за циклический вывод элементов вьюхи.
Например, views-view-table.tpl.php, если у Вас views выводится в виде таблицы.

И там уже сделайте проверку.
Если выводимый row - первый, то у поля "итоговая цена" оставлять его значение, иначе его делать пустым.

Как я вас понимаю, то у моей вьюхи есть как бы собственная PHP которая отвечает за вывод информации
её имя зависит от машинное имени, в моём случае это views-view-field--stroka-zakazov.tpl.php
эту строку взял из вьюхи OTHER > THEME

как я понял если я возьму оригинальный файл вывода поля вьюхи views-view-field.tpl.php

Содержимое которого:

<?php

/**
* @file
* This template is used to print a single field in a view.
*
* It is not actually used in default Views, as this is registered as a theme
* function which has better performance. For single overrides, the template is
* perfectly okay.
*
* Variables available:
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
*
* When fetching output from the $row, this construct should be used:
* $data = $row->{$field->field_alias}
*
* The above will guarantee that you'll always get the correct data,
* regardless of any changes in the aliasing that might happen if
* the view is modified.
*/
?>
<?php print $output; ?>

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

а дальше, его уже править, и изменять логику
верно понимаю вот эту часть?

Аватар пользователя roman-yrv roman-yrv 21 октября 2013 в 21:39

Берете нужный файл из views/theme, копируете его в подпапку templates папки своей темы, при необходимости этот файл переименовываете (например, если нужно темизировать таким образом не все вьюхи, а только определенную).
Далее этот файл правите, как Вам нужно.
Очищаете кэш.
И, по идее, всё.

Вот здесь об этом более-менее понятно написано
http://www.area53.ru/drupal/temizaciya-views-drupal.html

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 21:40

вопрос только теперь такой, какой код должен быть в этой новой PHP-шке. который проверил бы что, если мол поле под именем ITOGOVAYA_CENA - первое, то выводи, если не первое то вообще пропускай вывод

нашёл что то подобное делают
https://drupal.org/node/1024158#comment-3995862
но плохо допирается, в PHP плохо соображаю, и API Drupal не ахти

Аватар пользователя roman-yrv roman-yrv 21 октября 2013 в 21:49

Я бы это делал не на уровне темизации одного поля, а на уровне темизации цикла выводимых строк (товаров).
Либо на уровне темизации одного товара - только я вот не помню, можно ли там определить, какая по счету строка выводится ...

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 22:03

В моём случае просто вот это поле ИТОГОВАЯ ЦЕНА это поле другой вьюхи, которая показывает итоговую цену в зависимости от того какой ей контекстный фильтр послали, т.е. на той стороне как мне кажется смысла нет править, т.к. даже пускай если она одно пошлёт значение обратно, эта, основная вьюха, это одно значение и расплодит на все футболки

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

а как добраться до уровня темизации одного поля, это тоже какой то файл с ещё более длинным именем, или это в этом же файле всё творится

вы меня простите Smile я дуб дубом в этом, пока лишь так. прикладник в друпале

ААА, разобрался как дойти до уровня темизации поля, как же теперь сделать, чтобы в нём выводить только первое значение :/

Аватар пользователя roman-yrv roman-yrv 21 октября 2013 в 22:05

Этот файл будет выполняться при каждом выводе поля.

Просто ставится проверка на то, что в данном случае запись - первая.

Аватар пользователя andreystrelkov andreystrelkov 21 октября 2013 в 22:07

roman-yrv wrote:
Этот файл будет выполняться при каждом выводе поля.

Просто ставится проверка на то, что в данном случае запись - первая.

УГУ! ROFL Только что из себя это проверка представляет, какой код у неё Smile
я уже чувствую что совсем рядом Smile

Аватар пользователя albee29 albee29 9 февраля 2014 в 5:01

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