Извън рамките
Съвсем не беше изненада, че една ужким бърза и проста инсталацийка на друпал като услуга за стар приятел вирално се разрастна в досадно сложен проект, който утрепа голяма част от лайняното ми ежедневие.
Но тъй като в крайна сметка през фекалния му каймак изплува едно ново за мен ноухау, няма как да не го споделя с виртуалната общественост.
Проблемът се състои в това как да изкараме дадени CCK полета от даден node извън границите на content-а и същевременно полетата да се показват само когато въпросният node е отворен.
След дълго ровене и търсене за апокрифни модули с алтруистичната надежда, че някой добросъвестен девелопер вече се е сетил за този проблем и дори намиране на един горе-долу удобен (CCK blocks), се присетих, че решението би могло да се крие в аргументите на views, които досега винаги са били криптична тъмна магия за мен.
Решението е следното:
- Прави се view, което да филтрира съответния node тип, чиито полета искаме да извадим и показваме
- Настройката за ред на View трябва да е fields
- Трябва да се дефинират желаните от нас CCK полета в графата fields с подходящото форматиране (при мен едно от тях беше файлово поле със SWF tools formatter, т.е. флаш плейър за аудио файл)
- Arguments -> Provide default argument -> Node ID from URL
- Нов block display за view-то
- Блокът се наглася да се показва в желания от нас регион, примерно някой от sidebar-овете
Какво се случва на практика? Views вади полетата от избрания node тип, слага ги в блока и ги показва, но само когато в адреса на отворения node фигурира името му, т.е. само когато даден node е отворен в момента.
Удобството е, че могат да се изкарат повече от едно полета, да се форматират както човек иска, да им се изкарат label-ите и т.н.
Искрено се надявам това на практика тривиално, но за мен важно постижене, да бъде оценено от получилия го даром, но едва ли.