Как да станем приятели с вашите възгледи тип данни, drupalsn - социална мрежа за Drupal-разработчици
По искане на работниците да публикувам тук старата ми статия за интеграцията на техните типове данни в модул Разглеждан (Drupal 6).
При разработването на модули за Drupal, ние често се създават нови видове меки материали (т.е. възли). Макар понякога е изкушаващо за бързо програмиране на изхода на който и да е сортиран колекция от тези материали. Например, изходните възли-градове, подредени по азбучен ред, или древността, или групирани по държави. Такива полезни колекции могат да се образуват и много софтуер за създаване на всеки един от тях - не е много ефективен. Особено, ако след това искаме да променим нещо, да се слеят, или да конвертирате. Много по-спретнат - използвате модула Views.
Въпреки това, веднага след като предприемачът иска да получи с помощта Прегледи събирането на данни, създадени от тях - например, от импровизирана маса за нов тип материал - тя открива, че възгледите все още не са имали наясно с неговата маса. Така че, просто ни кажете за вашата маса модул Прегледи завинаги - по мое мнение, е много по-точно решение в сравнение с ръчното програмирани всички необходими представителства. Следваща - как да го направя.
Предполагам, че читателят вече знае как да програмно създадете свои собствени видове материали. Аз ще говоря с модула за пример, в който е бил създаден нов тип. И да не публикува кода на модула с нов тип описание, препоръчваме да свалите с:
Изтеглете mytest модул.
Модулът е вече приложена цялата допълнително ще бъдат обсъдени в статията.
Така че, ние имаме вид testnode материал. към който сме добавили две целочислени полета - int_count и int_total. съхраняват в таблицата на базата данни # 123; testnode # 125. Прегледи учат изтеглите тези полета от базата данни, да ги отпечатате, както и вид и да ги филтрирате колекция.
На първо място, уверявам Прегледи на коя версия на API, които използваме (и ние използваме версия 2.8 мнения с Drupal 6.x). За да направите това, ние добавяме към файл mytest.module предизвикателство кука hook_views_api:
След това Mytest.views.inc създадете файл, в който модул Прегледи може самостоятелно да намерите тяхната покана към правилните куките. Това е време да кажа Прегледи за нашата маса. За тази цел hook_views_data на куката # 40; # 41. връща масив с информация за следните таблици и техните полета. Изпълнение на куката трябва да се върне асоциативен масив формат $ данни # 91; "TABLE_NAME" # 93; # 91; "Imena_poley" # 93. Също така в масива за всяка таблица може да съдържа данни subarray $ # 91; "TABLE_NAME" # 93; # 91; "Таблица" # 93; обща информация на маса. Помислете за куката, с цел:
subarray # 91; "Таблица" # 93; Той съдържа основна информация за масата. елемент # 91; "Група" # 93; - име на групата, в която област сме рекламира ще се появи в падащите списъци на мнения. По принцип, можете да укажете името на групата за всеки от описаните области, но ако това не бъде направено - име на групата е наследен от раздела # 91; "Таблица" # 93.
Преди да се изброят полетата на таблицата # 123; testnode # 125. Малко отклонение показвания. Какво точно прави модула Прегледи, когато потребителят указва във лесен за употреба, макар и объркващо на пръв поглед, аргументите интерфейс колони, филтри полета, връзки и начини за сортиране? Точно така, Прегледи модул конкретна точка е SQL-заявка, извади от базата данни на данните, които потребителят е посочил, и да ги сортира, колкото е необходимо на потребителя. Така, че потребителят може да посочи в полеви маса възгледите на # 123; testnode # 125. вие трябва да кажете на модула за мнения, тя трябва да бъде поставена в SQL-заявка.
За всеки един от нашите области на масата, ние можем да се посочи следната информация:
# 91; "Заглавие" # 93; - заглавната част, така че това ще бъде показан в потребителския интерфейс възгледите на;
# 91; "Група" # 93; - ако искате, можем да уточни за група полета, различни от посочените в # 91; "Таблица" # 93; ;
# 91; "Помощ" # 93; - тук можете да зададете текста на помощта на тази област, потребителят ще види дребен шрифт до заглавието;
# 91; "Реално зрително поле" # 93; - ако данните на масива $ определихме като ключ за тази област синоним, в # 91; "Реално зрително поле" # 93; В момента името на полето в таблицата на базата данни трябва да бъдат изправени.
Тези елементи - заглавие, помощ, групови - имат повече декоративна цел. В допълнение към тях, трябва да попълните масив от елементи, които са от значение за работата на логика изгледи. Това са елементите # 91; "Поле" # 93. # 91; "Филтър" # 93. # 91; "Сортиране" # 93. # 91; "Аргумент" # 93; и # 91; "Връзка" # 93. отговарящи съответно за четене на областите от базата данни, полета филтрация (при използване къде), поле сортиране (РЕД ОТ), използването на полето като аргумент (а URL) и връзката (т.е. присъединяване друга маса през дадена област). И петте елемента трябва да са асоциативни масиви. В тях е необходимо да се въвеждат стойностите на т # 91; "Манипулатор" # 93. и също така, ако е необходимо, допълнителни елементи, които могат да варират в зависимост от # 91; "Манипулатор" # 93; ,
Коренът на модела е клас views_object. и вече от него наследява клас views_handler. класове Нишка получени от views_handler контролира поведението на елементите, определени от представянето на потребител (аргумент областта, филтри и така нататък). Т.е. товарачи - управляван клас, чиято основна задача е да се уверите, че всичко, което е трябвало да бъде добавен към въпрос от базата данни до желания резултат се получава, че е генериран от правилните текстови полета и така нататък. По този начин, потребителят може да използва полетата от таблицата # 123; testnode # 125; за генериране на собствените си идеи, трябва да се посочи за всяко поле в правилните манипулатори класове.
Манипулатори са много различни в зависимост от вида на данните, необходими за тяхното въздействие на искането, сложността на филтъра, ние искаме да се използват и други подобни. За нашия тест единица, ние се нуждаем товарачи views_handler_field (за вмъкване в конвенционалната искане поле), views_handler_filter_numeric (към филтъра може да се използва стойността на областта като номер) и views_handler_sort (нормален манипулатор, за да сортирате ASC / DESC без извратен). В резултат на това масата на полето # 123; testnode # 125; описваме, както следва:
Сега трябва да се върна в раздел # 91; "Таблица" # 93; $ Масив данни # 91; "Testnode" # 93. В допълнение към името на групата, тя съдържа важна информация за това дали е базовата таблица, или той трябва да бъде прикрепен към друг чрез генериране на мнения. База за маса - таблица, която е в центъра на гледки, като например таблицата на възел за Node изглед или маса на потребител - за оглед на потребителя. Дали нашата база за маса, ние ще питам за това в $ данните от масив # 91; "TABLE_NAME" # 93; # 91; "Таблица" # 93; # 91; "База" # 93; елементи # 91; "Поле" # 93; (В заглавието,-областта на първичния ключ), # 91; "Заглавие" # 93; (Таблица глава) # 91; "Помощ" # 93; (Помощ текст) и # 91; "База данни" # 93; (Информация база данни, ако масата не е в базата данни Drupal).
Но в този пример, базовата таблица, не, следователно, помисли друг масив - $ данни # 91; "TABLE_NAME" # 93; # 91; "Таблица" # 93; # 91; "Присъединете се към" # 93. В него трябва да се предостави информация за това как и за които се гледа на база маса трябва да се прикрепят таблицата с данни # 123; testnode # 125; :
Тъй като нашата таблица показва полетата за новия тип възел testnode, очевидно е, че ние бихме искали да ги добавите в таблицата # 123; възел # 125. така че областта и int_count int_total могат да бъдат показани в диалога за възела. За този раздел # 91; "Присъединете се към" # 93; ние създаваме масив # 91; "Възел" # 93; (Base име на таблица) и определете областта, на базата на които данните могат да се комбинират: "left_field" - поле в таблицата # 123; възел # 125; и "поле" - поле в таблицата # 123; testnode # 125. Листове, както се вижда от кода формира на база поле NID на.
В тази таблица интеграция # 123; testnode # 125; завършена. Модулът може да се инсталира веднага и Прегледи ви позволи да добавите към мнението на областта и int_count int_total. Можете да сортирате и филтрирате по техните стойности се отпечатват изображения.
Сега, обаче, да реши проблема чрез добавяне на "Vyuha" виртуален, че не съществува в таблицата # 123; testnode # 125; област. Нека той да се нарече процент и се изчислява от текущите и int_count int_total стойности в съответствие с формулата # 40; int_count * 100 / int_total # 41. т.е. представлява определен процент на броене на общия. В този пример, нека да видим как да добавите виртуален поле в гледки, как да се използват манипулатор с формулата на наставка и как да пиша завета им към съществуващите манипулатори.
На първо място, ние трябва да добавите поле процент. за които, както вече знаем, е елементът # 91; "Поле" # 93; :
Очевидно е, че не можем да използваме стандартната поле-манипулатор, защото тя ще се добави към полето за SQL-заявка "процент". и таблица # 123; testnode # 125; това поле не е налице. Вместо това, ние бихме искали да не се добавят към заявката, както и на изхода, за да получите резултат като число. За да направите това, ние ще се нуждаем от вашата собствена манипулатор, който ние наричаме mytest_handler_field_percentage. Честа практика в програмирането под Изгледи препоръчва първата дума в името на манипулатора е името на модула, а след това на водача и думата е опцията по Прегледи е, че той управлява (т.е. областта), а в края на името на полето от таблицата на базата данни. Изпълнение на манипулатора, разположен в mytest_handler_field_percentage.inc файл:
Като родител вземем манипулатор views_handler_field_numeric. тъй като този клас вече знае как да се справи с числовите полета, както и нашата виртуална областта - този номер. На първо място, ние замени метода на заявката # 40; # 41. който е отговорен за изменението на SQL-заявка. В нашия случай, ние не искаме да се добави нещо към заявката, така метод заявка # 40; # 41; - празен.
След това се занимавам с резултата, който ще бъде отбелязан в областта след мнението на искането. Е отговорен за това да направи метод # 40; $ ценности # 41. където всички $ стойностите на обектите се четат от стойностите на базата данни. Подтиснатия метода направи # 40; # 41; изчисляваме и да се върне в резултат на четене от полета на базата данни и int_count int_total. Имайте предвид, че името на таблицата # 123; testnode # 125; Тя е префикс за двете области. Ако int_count int_total или не бяха прочетени от базата данни, когато заявката се изпълнява, направи метод # 40; # 41; ще се върне 0. Въпреки това, този подход предполага, че потребителят трябва ръчно да добавите полета int_count и int_total презентацията. Ако искаме да се автоматизира процеса и да добавите тези полета, когато имаме нужда от процент поле. е необходимо да се приложи методът add_additional_fields # 40; # 41. или да добавите полета int_count и int_total в имот additional_field манипулатор в конструктора, или да ги добавите към заявката директно на метода на заявката # 40; # 41; ,
Сега, когато нов виртуален поле е описано, ние бихме искали да бъде в състояние да се справи с това на събиране на данни. За да направите това, поставете съществуваща манипулатор views_handler_sort_formula. Това изисква допълнителен параметър манипулатор формула от изчислената стойност, които ще бъдат сортирани събиране. Желаният формула се вмъква в Преглед на запитване част РЕД ОТ.
Ние също искаме да научи Прегледи филтрират проби от базата данни на процента на виртуалната сфера. За това също ще създаде нов манипулатор:
Хендлър mytest_handler_filter_percentage намира в едноименната .inc-файла. Той ще наследи от цифровата-филтър:
Тук ние замени метода на заявката # 40; # 41; към нашата формула е добавен вместо името на полето в искането за КЪДЕ части. За да направите това, първо се обадете $ това -> ensure_my_table # 40; # 41; ние виждаме, че искането ще бъде добавена към името на таблицата, която съдържа полето и int_count int_total. след това определя операция съгласно която има филтруване и посочва на действието на нашата формула. Sense цифров филтър наследство че вече дефинирано сравнение експлоатация номера (по-голямо от или равно на по-малко от, и т.н.) за него. В действителност, прилагането на метод, копиран от изпълнението на родителя се изисква да се промени само стойността на $ област.
Накрая, преди да Изгледи ще видят нашите новите манипулатори, трябва да добавите кука hook_views_handlers на файл за изпълнение mytest.views.inc:
Хък просто връща масив от новите манипулатори с информацията за това кои класове те наследи товарачи и какви файлове да ги търсим.
Това е всичко. Ние преподава Прегледи за четене, дисплей и използва, за да сортирате и филтрирате резултатите от заявките виртуална процент област. Остава само да изчистите кеш паметта от показванията на страницата "администраторски / изграждане / възгледи / инструменти" и модула е готов за работа. Проблемът е решен.
Това SOM, а не сателит, мисля умен търсачките разбират