Есть модуль с помощью которого можно ноде назначить вес и потом по этому весу будут формироваться списки нод (если сортировка по весу задана), но что делать если например одна и таже нода в разных видах отсортированных страниц (вьюх) должна быть на разных позициях...
можно ли для каждой ноды как то задавать её вес в зависимости на какой странице она выводится или к какому материала она привязана (нодереференс например)???
Комментарии
Первая мысль - добавить в ноду поле CCK (textarea), в котором перечислить отношения "вид_views = позиция".
Ну, например:
news = 0
sport = 4
articles = 3
А во вьюсах использовать кастомный PHP-фильтр (Custom PHP Views Filter), в котором парсить содержимое этого поля и соответственно фильтровать по результату.
Как-то так.
зы: тяжеловато немного, но штатных решений вроде больше и нет.
а если тип материала альбом (нода 1) и песни (нода 2) у нод 2 нужны веса что бы в разных Нодах 1, ноды 2 были на разных позициях... Т.е. в зависимости какой нод 1 открыт такие ноды 2 отфильтровываются и выводятся в ноде 1 со своими весами которые подвязаны на именно эту ноду 1, те же ноды материала ноды 2 в другом альбоме (нода 1) уже будет иметь другие веса (если заданно будет)
а с этим как?
Я честно говоря как-то не очень понял последний комментарий.
Ну делайте это поле (с перечислением отношений альбом/позиция песни) в ноде песни.
Дальше - уровень темизации ноды альбома.
Ещё лучше бы модуль написать.
у нас обратная связка. указывается родитель. свой модуль для хождения по дереву. Посмотреть как работает можно здесь http://www.youtube.com/watch?v=y2zG1500hdo&feature=related
+ свой модуль задающий веса нод в таки разделах.(с помощью их доп. поля weight)
Получилось удобнее чем book.
Не выкладываю по той причине, что оно пока не настраиваемо нифига.
А что у вас под разделом подразумевается на видео?
типа материала "раздел". они дают древовидную структуру. раздел соержит статьи и разделы.
связка - Nodereference у детей.
+ у детей есть то самое CCK поле field_weight а на странице раздела ест кроме вкладки редактирования вкладка - "отсортировать детей".
так то.
Обратная схема - делать в родителе множественный Nodereference и цеплять там пицот детишек имхо не верна.
Правильный процесс - создал статью и там же указал родителя
book кстати делает подобные структуры. но сукабля таким неудобным образом + практически не темизируется.
Так и я ж вроде про это:
То есть: потомок - это песня, альбом вроде как родитель. В ноде песни (потомка) перечисляем родителей и вес (позицию) для отображения в каждом родителе (альбоме). И кстати - да, можно использовать nodereference (ссылаясь на родителя), но вес тогда не укажешь...
iNFerNo, проще всего, имхо, именно такая схема, как я предлагал выше. Это если по-быстрому...
Остаётся только на уровне темы ноды (альбома) сделать PHP-сортировку потомков по весу, указанному в поле CCK.
а если раздел это лишь виртуально (на уровне страницы вьюхи) ??? схема та же?
т.е.
создан альбом
создан исполнитель
создаем песню ципляем ее к альбому и к исполнителю.
для альбома делаем вьюху которая и выводит трек лист. но в разных альбомах могут быть одни и теже песни, разница лишь в весе.
например если создать сск поле с цифрами (весами, нумерация треков) задать выбирать несколько позиций
и потом как-то назначать вес исходя из того если альбом такой-то вес берется такой-то для одной и той же ноды-песни.
Вспомнил: есть же ещё возможность сделать составное поле CCK
(Модуль content_multigroup из CCK)
То есть - объединить NodeReference и вес (digit).
Тогда вроде всё ещё проще: используются стандартные возможности views для сортировки.
Но похоже, что content_multigroup сейчас используется только в CCK 3.0 - из 2-го CCK его изъяли.
Но если что - у меня остался модуль для второго, могу дать для экспериментов.
зы: и ещё есть вариант попробовать применить Flexifield - тоже создаёт составные поля через промежуточный тип материала. Может даже с него и стоит начать...
а как это
(Модуль content_multigroup из CCK)
То есть - объединить NodeReference и вес (digit).
решает задачу у каждого ноды свой вес в зависимости от ... родителя...
это при создании песни 2 поля вылезет с весом ???
Не-не... не то.
Попробую чуть подробнее (как это могло бы быть в случае с 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.
И ещё раз всё-таки скажу: лучше всё же - писать модуль.
На flexifield вероятно, мульти-группы имеют ипические грабли с вьюсом
можно, я такое делал ... причем жестоко так велосипедил
не могу код найти. но суть примерно такова была:
на странице вывода дисплея вьюшки линк на кастомною страницу с передачей названия вьюшки, дисплея и аргументов
тобиш мы на любой страничке каталога кликаем "сортировать" .. и попадаем на обичную страничку з таблицей нод где только эти ноды что показывались (той же вьюшкой и фильтровал) .. ноды можно было совать туда-сюда, стандартно.. и сохранять .. при сохранении записывался вес каждой ноды в отдельную табличку где поля были: - первое это было(по моему) нид... поле:вес и поле уникального ключа, по которому можно было посмотреть именно для этой странички вес ноды. состояло чет типа с названия вьющки+названия дисплея + аргументы со странички этой вьюшки, где сортировка нужна..
а потом пишем к вьюшке обычный хендлер для сортировки, который по этой табличке и сортирует... как-то так было ))) извращение еще то... но в результате было:
ноды не трогал вообще, никаких сск и прочих изменений.. на любой страничке каталога можно было просто нажать "сортировка" и мышкой посовать эти ноды туда-сюда ... и они уже только на этой страничке и были в том порядке, в котором я их поставил ....
готовых решений нет, я искал.. только писать свой "велосипед"-модуль, который это и будет делать.. мое решение работало, причем нормально. .. другое дело что чуть коду написал своего ...и местами не понятного
Вполне возможно. Дело давнее.
Я помню только, что много возился и с тем, и с другим.
Там бы тоже написать бы модуль, но заказчик непременно хотел, чтобы реализовано было именно через CCK-Views (он хотел впоследствии добавлять сам какие-то поля).
Ух! Аццкий кодинг!
но работало, че еще хотеть ?
не - если так взять, то суть проста... просто в отдельную таблицу сохраняем нид, вес, и ключ, который формируется с названия вьюшки, дисплея и аргументов(можно и фильтров) , а потом просто по этой таблице сортировку делать, по полю "вес" ...
а как запустить функционал модуля. установил его, поставил. в сск полях новый тип. забил его. а как туда поляприкучивать чтобы они появились при создании, сейчас там только добавить... кнопка.
Говорят модуль глучный и лучше сск 3 юзать (мультигруппы)
с их помощью решаемая задача?
Все решил задачу. Не прошло и года.
Спасибо за наводку.
А как именно решили?
Может кому ещё пригодится...
Так как и написано. Добавил мультигруппу туда 2 поля. для каждой пары свое значение позиции
Как называется такой модуль?
так и называется Вес.
Но он только для drupal 6, может подскажете есть ли для 7 что-нибудь подобное?