Drupal и CCK

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

Това е първата част от поредицата уроци за Drupal:
CCK - Content Construction Kit
CCK -> Views -> Panels
В тази статия ще разгледам Drupal модула CCK що за животно е то и има ли почва у нас.
В Dupal съдържанието без значение от типа и името му е Node.
Тук малко ще се отплесна и ще кажа, че това не важи за коментарите и потребителите.
Но с допълнителни модули те също могат да се превърнат в Nodes.
Node – това е най-малката градивна частица за съдържание в Drupal.
И скоро ще разберем защо.
Всеки node има основни характеристики.
А те са:

nid – Уникален ключ.
vid - ИД на версия на съдържанието.
type – Тип на съдържанието.
title - Заглавие.
uid – ИД на потребител.
status - Публикувано или не.
created – Кога е създадено.
changed - Кога е променено.
comment – Брой коментари.
promote – Да се показва ли на първа страница.
moderate – Това поле можете да го ползвате са свои цели.
sticky – Дали да се показва над всички други Nodes.

Тези данни се записват в таблицата node.
А в таблицата node_revisions се записва body и teaser и всички версии на съдържанието, ако има такива.
Сега да си представим, че искаме да добавим полета, които да съдържат допълнителни данни като забележка например.
Какво бихме направили, ако не разполагаме с Drupal модула CCK, а искаме да добавим тези данни към определено съдържание.
Най-вероятно бихме създали таблица Notes със следните полета.
Уникален ключ, номер на родителския node, note, note_id, nid, note.
Като релацията между двете таблици е от тип едно към много.
Но този подход има няколко съществени минуса.
Първо човек, които няма опит със SQL трудно би се справил да добави допълнително поле в таблицата или пък да му смени типа.
Освен това, ако искаме да ползваме това поле да търсим по него с помощта на модула Views няма да можем, защото тази таблица не е регистрирана в модула view, който, ще разгледаме в следващата статия.
И трябва да напишем специален код, с който да информираме модула views, че ние имаме related таблица и да можем да търсим по полета от нея.
Тук ще покажа илюстрация как някои модули създават таблици, които се обвързват с таблицата node.
cck-relations
От тази схема се вижда, че за съдържанието Blog не е нужна нова таблица и полета.
Но за модула Pool полетата, които ги има в системата на са достатъчни. И удебелените полета са добавени в допълнителна таблица.
И нейната структура изглежда по следния начин - nid,expiration,uid,vote_id .
Ако не искаме да пишем SQL и след това да правим специфично търсене със SQL и PHP.
Ето тук идва Drupal модула CCK, който върши всичко това за нас.
Ще разгледаме следната ситуация да предположим, че искаме да създадем съдържание с име Албум. Това съдържание ще има 2 допълнителни полета продуцент и година.
Сега стъпка по стъпка ще опиша как може да стане това.
Първо трябва да инсталираме Drupal модула CCK.
И да включим на необходимите неща. Можете да изтеглите модула от тук.
http://drupal.org/project/cck
Само да добавя, че към този модул могат да се добавят и други типове полета освен тези, които идват със самият модул.
Като например поле за емайл, което автоматично проверява дали попълненото от потребителя е валиден емайл.
Ето и линк към това допълнение за CCK - http://drupal.org/project/email
След като изтеглите модула и го де-архивирате. За да можете да го инсталирате трябва да го поставите в sites/all/modules
Ако нямате такава директория трябва да я създадете.
След това, нека отидем в администрацията на модули - admin/build/modules
Тук би трябвало да видим нещо подобно, като начало изберете това, което и аз съм избрал.
cck-options
След като успешно активирате модула може смело да отидете на типовете съдържание.
Там би трябвало, ако инсталацията ви е прясна да има само съдържание от тип Page и Story.
Разликата между тях е в няколко опции. Примерно в единият тип съдържание са изключени коментарите и не се публикува на първа страница.
На адрес - admin/content/types би трябвало да видите следното.
cck content types
Отгоре както виждате има Add content type. Нека добавим нашето ново съдържание Албум.
cck new content
Name:
В това поле трябва да попълним как ще се казва нашето съдържание.
Type:
В това поле трябва да попълним машинното име на нашият тип съдържание.
Това поле трябва да е задължително с малки букви и без интервали между думите. Също без тирета и специални символи. Само букви, числа и под тире.
Description:
Описанието мисля че на всички е ясно за какво служи.
Малко по-надолу виждаме – submission form

По подразбиране в Drupal двете полета са Title и Body. Но аз ги промених както се вижда на картинката.
Можем да укажем и минималния брой думи, за да може съдържанието да се публикува.
И обяснение за какво е това съдържание. Тези описания вършат много добра работа, ако имаме много типове съдържание. Хората, когато попълват лесно се ориентират за какво става въпрос.
Най-накрая стигаме и до Workflow.

  1. Published указва дали съдържанието ще се публикува автоматично след като го създадем.
  2. Promoted to front page: указва да ли да се появи на първа страница.
  3. Sticky at top of lists: указва дали да бъде над всички други на първа страница.
  4. Create new revision: указва дали съдържанието ще има версия.

След което е контрола на коментарите.

  1. Изключени.
  2. Само за четене.
  3. За четене и писане.

След което даваме Save Content Type.
Сега вече можем да създаваме съдържание от тип Албум.
node/add/album

Обаче както виждаме имаме съдържание албум, но полетата продуцент и година ги няма.
Ако отидем пак в admin/content/types
И кликнем върху Album ще видим следното.

Това е нашето съдържание с това, което създадохме преди малко.
Можем и да го променим в последствие, ако искаме. Но по интересното е линковете:
Manage fields – От тук можем да променяме настройки на поле, което вече сме създали.
Display fields – От тук начина, по който да се виждат полетата.
Add field – От тук да добавим ново поле.
Нека добавим ново поле Година. Изберете Add field.

Тук пак трябва да изберем Name(име) но този път това е името на полето – то също трябва да е само с малко букви без разстояния.
field type: Това е типа на полето.Аз съм избрал Integer тъй като полето ще бъде цифрово.
На следващата стъпка виждаме следният екран.

Тук в Label вече можем да пишем с големи букви. Дори да има няколко думи с интервали. Това което напишем тък ще се вижда като заглавие на полето във формата за създаване на съдържание.
Help text: Е описание на полето.
Default value: Тук можем да укажем стойност по подразбиране.
Можем и да напишем PHP код, който да ни генерира тази стойност по подразбиране.
Малко по-надолу това се вижда на следващата картинка.

Required - Тук можем да укажем дали полето е задължително.
Multiple values - дали полето може да има повече от една стойност.
Minimum – Минимална стойност.
Maximum: Максимална стойност.
Prefix: Какво да има пред полето.
Suffix: Какво да има след него – примерно знак за валута.
Allowed values list: Списък от позволени стойности разделят се със запетайка.

PHP code
– Тук можем да напишем код, който да попълни списъка с позволени стойности.
След което даваме Save field
И ще ни се отвори този екран.

Ако ви прави впечатление в момента се намираме в Manage Fields.
Тук се вижда, че нашето съдържание има title, body и year.
Weight: Това е как ще бъдат подредени полетата. Тоест кое след кое ще следва.
Тук трябва да се отбележи, че title и body има твърдо зададена тежест.
И не могат да бъдат променяни.
Title - 5, Body - 0.
Ако направим нашето поле - 1 то ще се появи преди body.
Но с title нещата стоят по малко по различен начин.
Нека направим полето с тежест - 1.
Сега, нека погледнем и Display Fields


Тук можем да укажем дали заглавието на полето да се вижда.
И самото съдържание как да се вижда в съкратената версия (teaser) и в пълната версия на статията (Full)
Сега по същите стъпки ще създам и полето продуцент.
Като ще опиша само разликите, за да не повтаряме едно и също.
Най-важното е, че полето ще бъде текстово.
Тук основните разлики са колко редa ще има полето. Защото след като полето е текстово то може да е голямо и да се напише доста текст в него. В нашият случай то ще бъде един ред.
Можем да зададем дали ще бъде чист текст или форматирано.
Форматираното поле прилича на Body. Можем да ползваме специални кодове, за да форматираме текст да бъде удебелен например.
Можем също да укажем и максималният размер в - Maximum length
Сега, нека видим как изглежда въвеждането на нашето ново съдържание.
За модула views в Drupal може да прочетете тук - Drupal Views
А ето тук защо аз избрах Drupal
Let make Drupal Rock.

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.