РЕШЕНО! Вес материала - кастомно реализуемо?

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

Аватар пользователя iNFerNo iNFerNo 9 июня 2011 в 9:00

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

можно ли для каждой ноды как то задавать её вес в зависимости на какой странице она выводится или к какому материала она привязана (нодереференс например)???

Комментарии

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 9:14

Первая мысль - добавить в ноду поле CCK (textarea), в котором перечислить отношения "вид_views = позиция".

Ну, например:

news = 0
sport = 4
articles = 3

А во вьюсах использовать кастомный PHP-фильтр (Custom PHP Views Filter), в котором парсить содержимое этого поля и соответственно фильтровать по результату.

Как-то так.

зы: тяжеловато немного, но штатных решений вроде больше и нет.

Аватар пользователя iNFerNo iNFerNo 9 июня 2011 в 9:18

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

а с этим как?

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 9:32

Я честно говоря как-то не очень понял последний комментарий.

Ну делайте это поле (с перечислением отношений альбом/позиция песни) в ноде песни.
Дальше - уровень темизации ноды альбома.

Ещё лучше бы модуль написать.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 9 июня 2011 в 10:12

"OldWarrior" wrote:
Ну делайте это поле (с перечислением отношений альбом/позиция песни) в ноде песни.
Дальше - уровень темизации ноды альбома.

у нас обратная связка. указывается родитель. свой модуль для хождения по дереву. Посмотреть как работает можно здесь http://www.youtube.com/watch?v=y2zG1500hdo&feature=related

+ свой модуль задающий веса нод в таки разделах.(с помощью их доп. поля weight)

Получилось удобнее чем book.

Не выкладываю по той причине, что оно пока не настраиваемо нифига.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 9 июня 2011 в 11:02

"iNFerNo" wrote:
А что у вас под разделом подразумевается на видео?

типа материала "раздел". они дают древовидную структуру. раздел соержит статьи и разделы.
связка - Nodereference у детей.
+ у детей есть то самое CCK поле field_weight а на странице раздела ест кроме вкладки редактирования вкладка - "отсортировать детей".
так то.

Обратная схема - делать в родителе множественный Nodereference и цеплять там пицот детишек имхо не верна.
Правильный процесс - создал статью и там же указал родителя

book кстати делает подобные структуры. но сукабля таким неудобным образом + практически не темизируется.

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 11:07

"Ильич Рамирес Санчес" wrote:
у нас обратная связка. указывается родитель.

"Ильич Рамирес Санчес" wrote:
Обратная схема - делать в родителе множественный Nodereference и цеплять там пицот детишек имхо не верна.
Правильный процесс - создал статью и там же указал родителя

Так и я ж вроде про это:

"OldWarrior" wrote:
Ну делайте это поле (с перечислением отношений альбом/позиция песни) в ноде песни.
Дальше - уровень темизации ноды альбома.

То есть: потомок - это песня, альбом вроде как родитель. В ноде песни (потомка) перечисляем родителей и вес (позицию) для отображения в каждом родителе (альбоме). И кстати - да, можно использовать nodereference (ссылаясь на родителя), но вес тогда не укажешь...

iNFerNo, проще всего, имхо, именно такая схема, как я предлагал выше. Это если по-быстрому...
Остаётся только на уровне темы ноды (альбома) сделать PHP-сортировку потомков по весу, указанному в поле CCK.

Аватар пользователя iNFerNo iNFerNo 9 июня 2011 в 12:21

"Ильич Рамирес Санчес" wrote:
типа материала "раздел". они дают древовидную структуру. раздел соержит статьи и разделы.

а если раздел это лишь виртуально (на уровне страницы вьюхи) ??? схема та же?

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

например если создать сск поле с цифрами (весами, нумерация треков) задать выбирать несколько позиций

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

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 17:16

Вспомнил: есть же ещё возможность сделать составное поле CCK
(Модуль content_multigroup из CCK)
То есть - объединить NodeReference и вес (digit).
Тогда вроде всё ещё проще: используются стандартные возможности views для сортировки.
Но похоже, что content_multigroup сейчас используется только в CCK 3.0 - из 2-го CCK его изъяли.
Но если что - у меня остался модуль для второго, могу дать для экспериментов. Smile

зы: и ещё есть вариант попробовать применить Flexifield - тоже создаёт составные поля через промежуточный тип материала. Может даже с него и стоит начать...

Аватар пользователя iNFerNo iNFerNo 9 июня 2011 в 19:53

а как это

Вспомнил: есть же ещё возможность сделать составное поле CCK
(Модуль content_multigroup из CCK)
То есть - объединить NodeReference и вес (digit).

решает задачу у каждого ноды свой вес в зависимости от ... родителя...

это при создании песни 2 поля вылезет с весом ???

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 21:56

Не-не... не то.

Попробую чуть подробнее (как это могло бы быть в случае с content_multigroup):

1) создаём тип материала для потомков (т.е. песен), например Song

2) с помощью CCK создаём в нём составное поле (content_multigroup), скажем album_tracks_field, в которое включаем 2 вложенных поля, например:
- album_field (тип NodeReference, для ссылки на родителя, т.е. альбом)
- position_field (численный тип, позиция или вес) - для указания позиции в альбоме.
Таким образом, получаем одно сложное (составное) поле, которое используется одновременно и для указания альбома и для указания веса (позиции трека). Данные в нём связаны, поэтому поле по идее можно обрабатывать во Views как одно обычное поле. Улавливаете? То есть, отношение альбом-позиция у нас сохранено в одном поле.

3) ставим этому полю свойство multivalue, т.е. чтобы можно было добавлять неограниченное количество полей при создании ноды.

4) теперь для страницы альбома (т.е. как бы родителя) делаем Views (или модифицируем имеющийся), который бы отбирал потомки (тип Song), ссылающиеся на текущий альбом (album_tracks_field->album_field) и далее сортировал бы их по весу/позиции (album_tracks_field->position_field)

5) Внедряем этот вид Views в тип материала для альбома, если нужен именно материал, а не просто представление Views.

В общем, примерно так... Не ручаюсь, что не упустил какие-то детали, но общая схема такая.
Я реализовал где-то с год назад аналогичный вариант (в смысле с такими составными полями) для каталога гостиниц. Но, к сожалению, уже точно не помню, как именно сделал - то ли на flexifield, то ли всё же на content_multigroup.

И ещё раз всё-таки скажу: лучше всё же - писать модуль.

Аватар пользователя zolexiy@drupal.org zolexiy@drupal.org 9 июня 2011 в 23:17

можно, я такое делал ... причем жестоко так велосипедил Lol

не могу код найти. но суть примерно такова была:

на странице вывода дисплея вьюшки линк на кастомною страницу с передачей названия вьюшки, дисплея и аргументов
тобиш мы на любой страничке каталога кликаем "сортировать" .. и попадаем на обичную страничку з таблицей нод где только эти ноды что показывались (той же вьюшкой и фильтровал) .. ноды можно было совать туда-сюда, стандартно.. и сохранять .. при сохранении записывался вес каждой ноды в отдельную табличку где поля были: - первое это было(по моему) нид... поле:вес и поле уникального ключа, по которому можно было посмотреть именно для этой странички вес ноды. состояло чет типа с названия вьющки+названия дисплея + аргументы со странички этой вьюшки, где сортировка нужна..
а потом пишем к вьюшке обычный хендлер для сортировки, который по этой табличке и сортирует... как-то так было ))) извращение еще то... но в результате было:

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

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

Аватар пользователя OldWarrior OldWarrior 9 июня 2011 в 23:44

"RxB" wrote:
На flexifield вероятно, мульти-группы имеют ипические грабли с вьюсом

Вполне возможно. Дело давнее.
Я помню только, что много возился и с тем, и с другим.
Там бы тоже написать бы модуль, но заказчик непременно хотел, чтобы реализовано было именно через CCK-Views (он хотел впоследствии добавлять сам какие-то поля).

"<a href="mailto:zolexiy@drupal.org">zolexiy@drupal.org</a>" wrote:
можно, я такое делал ... причем жестоко так велосипедил =))

Ух! Аццкий кодинг! Wink

Аватар пользователя zolexiy@drupal.org zolexiy@drupal.org 9 июня 2011 в 23:53

"OldWarrior" wrote:
Ух! Аццкий кодинг! ;-)

но работало, че еще хотеть ? Lol

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

Аватар пользователя iNFerNo iNFerNo 10 июня 2011 в 9:10

"OldWarrior" wrote:
Flexifield -

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