Drupal - Views

Posted by Stanislav Nedelchev on Wed, 11/05/2008 - 21:06

Втората част от поредицата уроци за Drupal.
CCK -> Views -> Panels
Drupal модула Views – Или нещо като Visual Query Builder.
И как можем да изведем данни от нашата база.
Първо ще започнем с това какво е този термин – query.
В буквален превод Query означава търсене.
Обикновено в SQL сървърите, какъвто е MySQL а друпал Drupal и с него.
Малко отклонение Drupal може да работи и с друг тип сървъри примерно Postgre.
Данни от базата могат да се извлекат с помощта на оператора Select.
Примерно със следното търсене (query).
Много често можете да чуете думата заявка.

Select * from node. 

Ние ще извлечем като резултат всички колони и редове от таблицата Node. Но ако искаме да покажем само Node със ИД = 1 или пък само нашият тип съдържание Албум какво да направим?

Select * from node where nid = ’1’

Добавяме клаузата Where тази заявка ще ни покаже само един ред, където ИД-то на Node е 1.
Аналогично можем да покажем и само съдържание от тип Албум.

Select * from node where type = ‘album’

Сега нещо малко по-сложно ще извлечем нод с ИД = 1 и тип Албум.

Select * from node where nid = ‘1’ and type = ‘album’

Дотук добре но ако искаме да покажем само Title.
Тогава ще трябва да изберем и колоните, които искаме да извлечем.
Лесно като фасул просто сменяме * с title
Select title from node where nid = ‘1’ and type = ‘album’
Дотук всичко изглежда доста добре.
Но сега да добавим и нашите нови полета: година и продуцент.
Как става тази хватка?
Със специалния оператор JOIN.
Тук няма да се впускам в големи подробности за видовете JOIN.
Само ще кажа най използваните и основната им разлика.
А те са: RIGHT и LEFT.
Ако e INNER то тогава от родителската таблица се извличат само тези редове, които имат подчинени записи в подчинената таблица.
А ако е OUTER то тогава се показват всички редове от родителската таблица дори и да няма подчинени такива.
И за да го разберем по-добре ще го илюстрирам с пример.
Ако изпълним този код.

SELECT title, field_year_value, field_producer_value FROM node n
inner join content_type_album cta on n.nid = cta.nid

Ще видим следния резултат.

Виждаме, че има само 2 реда това е така, защото има само 2 нода от тип Албум.
Това е така, защото сме използвали RIGHT JOIN.
Сега ще видим какъв е резултатът, ако ползваме LEFT JOIN.

Тук се вижда, че имаме всички Nodes. Без значение дали те имат свързани полета.
Продуцент и дата от таблицата - content_type_album
Както виждаме модула CCK си е създал необходимата таблица и полета в нея.
Ако си спомняте тях ги направихме в предишният туториал.
Дотук всичко е екстра, ако се чувствате добре с ползването на SQL Можете да си пишете заявките сам. Но пак ще се натъкнете на затруднение. После ще трябва да из печатате и резултата на екрана на браузъра с помощта на PHP.
Ако всичкия този SQL, PHP и таблици ви идват в повече. Бъдете спокоен тук идва модула Views. Той ще свърши цялата тази черна работа за Вас.
Стига толкова общи приказки преминаваме право напред в дебрите на модула Views.
Нека го инсталираме като за начало.
Можете да го изтеглите от тук.
http://drupal.org/project/views
И да включите най-основните неща от тук по следния начин.
admin/build/modules

След което можем да отидем в потребителския интерфейс на модула и да разгледаме какво ни предлага.
admin/build/views

Тук се вижда, че дори има няколко готови, които можем да изключим и дори да редактираме.
Нека първо обясним за линковете отгоре.
List – Показва всички Views
Add – Добавяме ново.
Import – Импортираме view, което сме експортирали преди.
Theme wizard – Това е за по напреднали генерира PHP код.
Който да добавите в необходимите файлове. И да го промените по ваше усмотрение, за да промените изгледа както на вас ви харесва.
Tools – От тук може да почистим кеша.
Сега вече може да кликнем на Add
На първо място е Basic Information.

Name: Тук трябва да укажем името на нашето View.
Access: Кой ще има права да го гледа.
Description: Ето тук ще напишем нашето описание.
Сега да погледнем какви ни предлага Page:

Provide Page View – това означава да бъде създадена страница, на която да можем да виждаме нашето view като малко по-надолу можем да укажем на какъв път да се отваря.
URL: Това е пътят, на който да се отваря примерно http://site.com/albums
View Type: Тук можем да укажем как да се вижда нашето съдържание.
Възможните опции са следните:
Full Nodes: Този изглед показва цялото съдържание.
Teaser List: Този изглед показва съкратената версия на съдържанието.
Table View: Този изглед показва съдържанието в табличен вид.
List View: Този изглед показва съдържанието в списък.

Тук е важно да отбележим, че ако искаме да покажем само определени полета и да сменим реда им на показване това работи са в последните 2 режима.
И също така има допълнителни модули, които ни предоставят още различни видове изгледи като например модула. http://drupal.org/project/views_bonus
Title: Това е заглавието на нашата страница.
Use Pager: Дали да се създадат страници, ако резултатите са повече от указаните за страница.
Breadcrumb trail should not include "Home" – Да не се добавя home е навигацията.
Nodes per Page: Колко статии да се показват на страница.
Това свойство е много удобно ако създадете блок и искате този блок да е на първа и да виждате само една новина, която е най-новата примерно.

Тук можем да укажем заглавие и подложка на нашата страница.
Както и какъв текст да изведе, ако няма резултат.
Също така можем да ползваме и PHP, ако искаме да постигнем нещо специфично.
И така стигаме до настройките на менюто.
Само с две думи ще кажа, че от тук можете да укажете дали да се вижда в системата за навигация или не. Но меню системата на друпал е доста сложна и мисля за нея да направя отделен туториал.

Създаването на блок много прилича на създаването на страница.
Като разликата е в това, че няма ULR, който да задаваме и можем да укажем дали да има линк more.

Ето тук вече стигнахме и до интересните неща. Тук можем да добавим кои полета от нашето съдържание да се виждат и как да бъдат подредени.
От падащият списък можете да избирате какво да бъде видимо.
А то включва доста неща, но за момента нас ни интересува.
Node ID, Node Title, Продуцент и Year.
Добавяме тези полета. Можем също да укажем дали искаме да сортираме по дадено поле. Да определим как да се вижда то.
Зависимост от типа на полета в случая да разгледаме полето Node Title.
В options можем да укажем да бъде хипер връзка или не.
В sortable дали ще сортираме по това поле и в default sort как да бъде сортирането по азбучен ред или обратно. Със стрелките в дясно можем да сменим кое поле след кое да се показва.

И така след като сме добавили нашите полета. Нека запишем нашето view.
Като укажем в provide page, че искаме изгледа да бъде Table Views.
След като го запишем и отидем на URL-a Който сме указали би трябвало да видим следния резултат.

Вижда се title, header и footer, който сме задали.
Node Title, Node ID, Продуцент.
Явно аз съм пропуснал да добавя годината това може лесно да стане, като изберем EDIT.
Сега обаче ние ще направим нещо по-интересно ще покажем всички албуми без другото съдържание.
Сега ще се запознаем с филтрите.
Тук се вижда, че съм избрал да филтрирам по полето Node Type и съм указал.
Че искам да се показа само съдържание, което е от тип албум.
Сигурно забелязвате, че има бутон expose. За него ще говори малко по-късно.

Сега, ако запишем нашето view и го отворим страницата с него ще видим само албуми.
Сега ще разгледаме сортирането и след това ще се впуснем в малко по-сложни неща като аргументите и exposed filters.
Най от-долу са настройките за сортиране. Както вече се досещате от там можем да зададем сортиране по дадено поле. Което не задължително да се вижда.
Ето и пример:
В случая съм избрал да сортирам данните възходящо по датата на създаване на съдържанието.
Сега ще добавим и годината към филтрите вижте картинката по-долу.
И ще изберем бутона expose на полето година.

На картинката по-долу можем да видим, че вече имам полето година exposed.
И какви настройки можем да му зададем.
Първо ще обясня какво се случва след като направим даден филтър exposed.
И след това ще се спра на различните опции.

Ето и как изглежда нашият exposed filter.

В този случай аз съм избрал, че искам да ми се покажат само албуми, на които годината е 1996. Избираме Is equal to пишем в полето цифрата и натискаме бутона Submit.
След което резултатът е само един ред е това е Албума на Manowar от 1996 г.
Опциите могат да бъдат:
Is greater than – по голямо.
Is greater that or equal – по голямо или равно.
Is equal – е равно.
Is not equal – не е равно.
Is less than or equals - по малко или равно.
Is less than – е по малко.
Това са опциите за цифрово поле. за текстово поле те са по различни.
А те са:
Is one of - Е едно от тези.
Is not one of - Не никое о тези.
Като ви се дава списък, от който можете да избирате повече от едно с Ctrl.
Сега ще поговорим и за самите опции на exposed filters.

Label: Можем да сложим етикет над полето, по което филтрираме.
Optional: Можем да укажем, че филтъра незадължителен.
Force Single: Не можем да избираме повече от една опция.
Lock Operator: Падащият списък с възможности за избор изчезва. И остава само един избор, какъвто сме избрали за оператор във Filters.
Filter settings default: И аз незнам какво прави.

Сега ще разгледаме и аргументите и с това мисля, че в общи линии се запознахме какво представляват views.
За да покажем аргументите как работят трябва да премахнем всички филтри и exposed filters.
И да добавим аргумент по следния начин.

За сега само сме изпрали аргумента да бъде година и ако няма резултати да покаже.
Page not found.
Как можем да използваме този аргумент.
Простя трябва след адреса на нашето View да добавим аргумента по следния начин:
albums/1996
И резултатът ще бъде следният:

Само Manowar.Защото искаме само албум с година 1996.
Аргументите работят подобно на exposed filters, но се подават след URL-a
С наклонена черта.
Това е много удобно в много случаи, а съвсем скоро ще видим как може да направим наистина хитри неща с Views и Panels и аргументите.
Може да добавяме колкото искаме аргументи. Като например ако добавим за аргумент и Node Type. За да имаме резултат трябва да подадем и двата аргумента по следния начин:
/albums/1996/album
Път към нашето view/година/тип съдържание.
За Drupal CCK можете да прочетете тук - Drupal CCK
Let make Drupal Rock.

Comments

Nice one, нещо за панелите?

Евала за всички уроци дотук :)

Ще му дойде времето и на панелите.
Дори и по-итересни неща.

Разбираема и полезна информация! Благодаря,че сте си направили този труд! Пожелавам Ви успех във всички начинания!

Благодаря за коментарите.
Това ме вдъхнови да се донапиша статията за панелите и една за новия друпал 7
Поздрави на всички които искат да ползват друпал.

Мисля да направя един урок и за Views 2 съвсем скоро.

Благодаря за полезната информация.
Поздрави!

Благодарности за полезната статия!

Благодарности за статията и поздравления за целия сайт!

И аз благодаря за поздравленията.
Лошото е , че ни ми остава време да напиша нещо ново.
Или поне да направя статия за Views 2

Add new comment

Refresh Type the characters you see in this picture. Type the characters you see in the picture; if you can't read them, submit the form and a new image will be generated. Not case sensitive.  Switch to audio verification.