hook_deleteQdrupal7
drupal7 时间:2021-04-13 阅读:(
)
ProDrupal7DevelopmentToddTomlinsonJohnK.
VanDykThirdEditionProDrupal7Development:ThirdEditionCopyright2010byToddTomlinsonandJohnK.
VanDykAllrightsreserved.
Nopartofthisworkmaybereproducedortransmittedinanyformorbyanymeans,electronicormechanical,includingphotocopying,recording,orbyanyinformationstorageorretrievalsystem,withoutthepriorwrittenpermissionofthecopyrightownerandthepublisher.
ISBN978-1-4302-2838-7ISBN978-1-4302-2839-4(eBook)DOI10.
1007/978-1-4302-2839-4987654321Trademarkednames,logos,andimagesmayappearinthisbook.
Ratherthanuseatrademarksymbolwitheveryoccurrenceofatrademarkedname,logo,orimageweusethenames,logos,andimagesonlyinaneditorialfashionandtothebenefitofthetrademarkowner,withnointentionofinfringementofthetrademark.
Theuseinthispublicationoftradenames,trademarks,servicemarks,andsimilarterms,eveniftheyarenotidentifiedassuch,isnottobetakenasanexpressionofopinionastowhetherornottheyaresubjecttoproprietaryrights.
PresidentandPublisher:PaulManningLeadEditor:MichelleLowmanTechnicalReviewers:JoshuaBrauer,RobertDouglass,PeterM.
WolaninEditorialBoard:SteveAnglin,MarkBeckner,EwanBuckingham,GaryCornell,JonathanGennick,JonathanHassell,MichelleLowman,MatthewMoodie,DuncanParkes,JeffreyPepper,FrankPohlmann,DouglasPundick,BenRenow-Clarke,DominicShakeshaft,MattWade,TomWelshCoordinatingEditor:AnitaCastroCopyEditor:MaryAnnFugateProductionSupport:PatrickCunninghamIndexer:BIMIndexing&ProofreadingServicesArtist:AprilMilneCoverDesigner:AnnaIshchenkoDistributedtothebooktradeworldwidebySpringerScience+BusinessMedia,LLC.
,233SpringStreet,6thFloor,NewYork,NY10013.
Phone1-800-SPRINGER,fax(201)348-4505,e-mailorders-ny@springer-sbm.
com,orvisitwww.
springeronline.
com.
Forinformationontranslations,pleasee-mailrights@apress.
com,orvisitwww.
apress.
com.
ApressandfriendsofEDbooksmaybepurchasedinbulkforacademic,corporate,orpromotionaluse.
eBookversionsandlicensesarealsoavailableformosttitles.
Formoreinformation,referenceourSpecialBulkSales-eBookLicensingwebpageatwww.
apress.
com/info/bulksales.
Theinformationinthisbookisdistributedonan"asis"basis,withoutwarranty.
Althougheveryprecautionhasbeentakeninthepreparationofthiswork,neithertheauthor(s)norApressshallhaveanyliabilitytoanypersonorentitywithrespecttoanylossordamagecausedorallegedtobecauseddirectlyorindirectlybytheinformationcontainedinthiswork.
ContentsataGlanceForewordxxvAbouttheAuthorsxxviAbouttheTechnicalReviewersxxviiAcknowledgmentsxxviiiIntroductionxxixChapter1:HowDrupalWorks1Chapter2:WritingaModule.
13Chapter3:Hooks,Actions,andTriggers33Chapter4:TheMenuSystem57Chapter5:WorkingwithDatabases89Chapter6:WorkingwithUsers.
115Chapter7:WorkingwithNodes.
137Chapter8:WorkingwithFields163Chapter9:TheThemeSystem185Chapter10:WorkingwithBlocks223Chapter11:TheFormAPI239Chapter12:ManipulatingUserInput:TheFilterSystem.
295Chapter13:SearchingandIndexingContent307Chapter14:WorkingwithFiles323iiiivCONTENTSATAGLANCEIIChapter15:WorkingwithTaxonomy343IIChapter16:Caching365IIChapter17:Sessions379IllChapter18:UsingjQuery389chapter10:LocalizationandTranslation417IIChapter20:XML-RPC451IIChapter21:WritingSecureCode.
465IIChapter22:DevelopmentBestPractices487IIChapter23:OptimizingDrupal499IIChapter24:InstallationProfiles.
525IIChapter25:Testing545IIAppendixA:DatabaseTableReference565IIAppendixB:Resources623Index111ContentsForewordxxvAbouttheAuthors.
xxviAbouttheTechnicalReviewersxxviiAcknowledgmentsxxviiiIntroductionxxixChapter1:HowDrupalWorks1WhatIsDrupal1TechnologyStack1Core2AdministrativeInterface3Modules3Hooks5Themes5Nodes6Fields6Blocks6FileLayout6ServingaRequest.
9TheWebServer'sRole9TheBootstrapProcess.
10vCONTENTSProcessingaRequest.
10ThemingtheData11Summary11IIIChapter2:WritingaModule.
13CreatingtheFiles.
13ImplementingaHook.
15AddingModule-SpecificSettings17DefiningYourOwnAdministrationSection.
25PresentingaSettingsFormtotheUser.
26ValidatingUser-SubmittedSettings.
29StoringSettings29UsingDrupal'svariablesTable29RetrievingStoredValueswithvariable_getO30FurtherSteps30Summary31IIChapter3:Hooks,Actions,andTriggers33UnderstandingEventsandTriggers.
33UnderstandingActions.
35TheTriggerUserInterface.
35YourFirstAction38AssigningtheAction.
39ChangingWhichTriggersanActionSupports40UsingtheContextinActions.
45HowtheTriggerModulePreparestheContext.
45ChangingExistingActionswithaction_info_alterQ.
46EstablishingtheContext.
47viCONTENTSHowActionsAreStored.
49TheactionsTable49ActionIDs49CallinganActionDirectlywithactions_doQ50DefiningYourOwnTriggerswithhook_trigger_infoQ51AddingTriggerstoExistingHooks.
54Summary55IIChapter4:TheMenuSystem.
57CallbackMapping51MappingURLstoFunctions51CreatingaMenuItem61PageCallbackArguments.
64PageCallbacksinOtherFiles67AddingaLinktotheNavigationBlock.
68MenuNesting.
69AccessControl70TitleLocalizationandCustomization72DefiningaTitleCallback.
72WildcardsinMenuItems74BasicWildcards.
74WildcardsandPageCallbackParameters.
75UsingtheValueofaWildcard.
75WildcardsandParameterReplacement77PassingAdditionalArgumentstotheLoadFunction78Special,PredefinedLoadArguments:%mapand%index79BuildingPathsfromWildcardsUsingto_argOFunctions79SpecialCasesforWildcardsandto_argOFunctions79viiCONTENTSAlteringMenuItemsfromOtherModules.
80AlteringMenuLinksfromOtherModules82KindsofMenultems.
82CommonTasks84AssigningCallbacksWithoutAddingaLinktotheMenu85DisplayingMenuItemsAsTabs.
85HidingExistingMenuItems.
87Usingmenu.
module.
87CommonMistakes.
88Summary88IIChapter5:WorkingwithDatabases89DefiningDatabaseParameters.
89UnderstandingtheDatabaseAbstractionLayer90ConnectingtotheDatabase.
91PerformingSimpleQueries.
92RetrievingQueryResults93GettingaSingleValue94GettingMultipleRows94UsingtheQueryBuilderandQueryObjects.
94GettingaLimitedRangeofResults95GettingResultsforPagedDisplay96OtherCommonQueries97InsertsandUpdateswithdrupal_write_recordO98TheSchemaAPI.
99UsingModule.
installFiles.
100CreatingTables.
100UsingtheSchemaModule.
102FieldTypeMappingfromSchematoDatabase.
103viiiCONTENTSDeclaringaSpecificColumnTypewithmysql_type106MaintainingTables108DeletingTablesonUninstall109ChangingExistingSchemaswithhook_schema_alterQ110ModifyingOtherModules'Querieswithhook_query_alterO111ConnectingtoMultipleDatabasesWithinDrupal112UsingaTemporaryTable113WritingYourOwnDatabaseDriver114Summary114IIIChapter6:WorkingwithUsers.
115The$userObject.
115TestingIfaUserIsLoggedIn118Introductiontouserhooks.
118Understandinghook_user_view($account,$view_mode)120TheUserRegistrationProcess.
122Usingprofile.
moduletoCollectUserInformation125TheLoginProcess125AddingDatatothe$userObjectatLoadTime127ProvidingUserInformationCategories.
129ExternalLogin130Summary135IIChapter7:WorkingwithNodes.
137SoWhatExactlyIsaNode137NotEverythingIsaNode140CreatingaNodeModule140Creatingthe.
installFile.
140Creatingthe.
infoFile143ixCONTENTSCreatingthe.
moduleFile143ProvidingInformationAboutOurNodeType144ModifyingtheMenuCallback.
145DefiningNode-Type-SpecificPermissionswithhook_permissionQ.
146LimitingAccesstoaNodeTypewithhook_node_accessQ147CustomizingtheNodeFormforOurNodeType148ValidatingFieldswithhook_validateQ.
149SavingOurDatawithhook_insertQ.
149KeepingDataCurrentwithhook_updateQ150CleaningUpwithhook_deleteQ.
150ModifyingNodesofOurTypewithhook_loadQ.
151Usinghook_viewQ.
151ManipulatingNodesThatAreNotOurTypewithhook_node_xxxxxQ.
153HowNodesAreStored.
155CreatingaNodeTypewithCustomContentTypes.
157RestrictingAccesstoNodes.
157DefiningNodeGrants.
157TheNodeAccessProcess159Summary161IIIChapter8:WorkingwithFields163CreatingContentTypes163AddingFieldstoaContentType165CreatingaCustomField169AddingFieldsProgrammatically.
181Summary183XCONTENTSIIChapter9:TheThemeSystem185Themes185InstallinganOff-the-ShelfTheme185BuildingaTheme.
186The.
infoFile194AddingRegionstoYourTheme194AddingCSSFilestoYourTheme194AddingJavaScriptFiles195AddingSettingstoYourTheme195UnderstandingTemplateFiles198TheBigPicture198Thehtml.
php.
tplFile.
200OverridingTemplateFiles.
214OtherTemplateFiles215OverridingThemableItems216OverridingwithTemplateFiles.
219AddingandManipulatingTemplateVariables219UsingtheThemeDeveloperModule.
221Summary221IIIChapter10:WorkingwithBlocks.
223WhatIsaBlock223BlockConfigurationOptions226BlockPlacement.
227DefiningaBlock228UsingtheBlockHooks.
229BuildingaBlock.
230EnablingaBlockWhenaModuleIsInstalled237xiCONTENTSBlockVisibilityExamples238DisplayingaBlocktoLogged-InUsersOnly.
238DisplayingaBlocktoAnonymousUsersOnly238Summary238IIIChapter11:TheFormAPI.
239UnderstandingFormProcessing.
239InitializingtheProcess241SettingaToken.
241SettinganID241CollectingAllPossibleFormElementDefinitions241LookingforaValidationFunction242LookingforaSubmitFunction243AllowingModulestoAltertheFormBeforeIt'sBuilt.
243BuildingtheForm243AllowingFunctionstoAltertheFormAfterIt'sBuilt243CheckingIftheFormHasBeenSubmitted.
244FindingaThemeFunctionfortheForm244AllowingModulestoModifytheFormBeforeIt'sRendered244RenderingtheForm244ValidatingtheForm245SubmittingtheForm.
246RedirectingtheUser.
246CreatingBasicForms.
247FormProperties.
249FormIDs249Fieldsets250ThemingForms.
253SpecifyingValidationandSubmissionFunctionswithhook_formsQ.
257CallOrderofTheme,Validation,andSubmissionFunctions.
258xiiCONTENTSWritingaValidationFunction.
258FormRebuilding262WritingaSubmitFunction263ChangingFormswithhook_form_alterQ.
263SubmittingFormsProgrammaticallywithdrupal_form_submitQ.
265DynamicForms.
265FormAPIProperties.
273PropertiesfortheRootoftheForm273PropertiesAddedtoAllElements274PropertiesAllowedinAllElements.
275FormElements277Summary293chapter12:ManipulatingUserInput:TheFilterSystem.
295Filters295FiltersandTextformats.
296InstallingaFilter.
300KnowingWhentoUseFilters.
300CreatingaCustomFilter.
301Implementinghook_filter_infoQ302TheProcessFunction302HelperFunction303Summary305chapter13:SearchingandIndexingContent307BuildingaCustomSearchPage307TheDefaultSearchForm.
308TheAdvancedSearchForm.
308AddingtotheSearchForm.
309xiiiCONTENTSUsingtheSearchHTMLIndexer312WhentoUsetheIndexer313HowtheIndexerWorks313Summary322IIIChapter14:WorkingwithFiles323HowDrupalServesFiles.
323ManagedandUnmanagedDrupalAPis323PublicFiles325PrivateFiles.
325PHPSettings325MediaHandling.
326UploadField.
327VideoandAudio.
328FileAPI328DatabaseSchema.
328CommonTasksandFunctions329AuthenticationHooksforDownloading340Summary342IIIChapter15:WorkingwithTaxonomy343TheStructureofTaxonomy343CreatingaVocabulary.
343CreatingTerms344AssigningaVocabularytoaContentType.
344KindsofTaxonomy345Flat346Hierarchical346MultipleHierarchical347xivCONTENTSViewingContentbyTerm.
349UsingANDandORinURLs349SpecifyingDepthforHierarchicalVocabularies349AutomaticRSSFeeds350StoringTaxonomies351Module-BasedVocabularies352CreatingaModule-BasedVocabulary352KeepingInformedofVocabularyChangeswithTaxonomyHooks352CommonTasks354DisplayingTaxonomyTermsAssociatedwithaNode.
354BuildingYourOwnTaxonomyQueries.
355Usingtaxonomy_select_nodesO355TaxonomyFunctions.
355RetrievingInformationAboutVocabularies355Adding,Modifying,andDeletingVocabularies356RetrievingInformationAboutTerms.
357Adding,Modifying,andDeletingTerms.
358RetrievingInformationAboutTermHierarchy.
359FindingNodeswithCertainTerms362AdditionalResources363Summary363IIChapter16:Caching365KnowingWhentoCache.
365HowCachingWorks.
366HowCachingIsUsedWithinDrupalCore368MenuSystem.
368CachingFilteredText.
368AdministrationVariablesandModuleSettings.
369XVCONTENTSBlocks372UsingtheCacheAPI374Summary378IllChapter17:Sessions.
379WhatAreSessions379Usage379Session-RelatedSettings381In.
htaccess381Insettings.
php.
381Inbootstrap.
inc.
382RequiringCookies.
383Storage383SessionLifeCycle.
384SessionConversations.
385FirstVisit.
386SecondVisit.
386UserwithanAccount386CommonTasks386ChangingtheLengthofTimeBeforeaCookieExpires.
386ChangingtheNameoftheSession387StoringDataintheSession387Summary388IIChapter18:UsingjQuery.
389WhatIsjQuery389TheOldWay.
390xviCONTENTSHowjQueryWorks391UsingaCSSIDSelector.
391UsingaCSSClassSelector392jQueryWithinDrupal392YourFirstjQueryCode.
393TargetinganElementbyID396MethodChaining.
396AddingorRemovingaClass.
397WrappingExistingElements.
397ChangingValuesofCSSElements.
398WheretoPutJavaScript.
399OverridableJavaScript402BuildingajQueryVotingWidget405BuildingtheModule.
407UsingDrupal.
behaviors414WaystoExtendThisModule.
415Compatibility415NextSteps415Summary416IIChapter19:LocalizationandTranslation417EnablingtheLocaleModule.
417UserInterfaceTranslation417Strings417TranslatingStringswithtO418ReplacingBuilt-InStringswithCustomStrings419xviiCONTENTSStartingaNewTranslation429Generating.
potFileswithTranslationTemplateExtractor429Creatinga.
potFileforYourModule.
430Creating.
potFilesforanEntireSite.
431InstallingaLanguageTranslation.
432SettingUpaTranslationatInstallTime.
432InstallingaTranslationonanExistingSite.
433Right-to-LeftLanguageSupport434LanguageNegotiation.
435Default436PathPrefixOnly438PathPrefixwithLanguageFallback440URLOnly441ContentTranslation.
442IntroducingtheContentTranslationModule442MultilingualSupport442MultilingualSupportwithTranslation444Localization-andTranslation-RelatedFiles447AdditionalResources448Summary449IIIChapter20:XML-RPC451WhatIsXML-RPC451PrerequisitesforXML-RPC451XML-RPCClients.
452XML-RPCClientExample:GettingtheTime452XML-RPCClientExample:GettingtheNameofaState.
453HandlingXML-RPCClientErrors.
454xviiiCONTENTSASimpleXML-RPCServer457MappingYourMethodwithhook_xmlrpcQ458AutomaticParameterTypeValidationwithhook_xmlrpcO459Built-InXML-RPCMethods461system.
listMethods461system.
methodSignature462system.
methodHelp462system.
getCapabilities462system.
multiCall463Summary463IIChapter21:WritingSecureCode.
465HandlingUserInput465ThinkingAboutDataTypes.
465Usingcheck_plainOandtOtoSanitizeOutput468Usingfilter_xssOtoPreventCross-SiteScriptingAttacks470Usingfilter_xss_adminQ.
472HandlingURLsSecurely.
472MakingQueriesSecurewithdb_queryQ473KeepingPrivateDataPrivatewithhook_query_alterQ.
476DynamicQueries.
477PermissionsandPageCallbacks.
477Cross-SiteRequestForgeries(CSRF)478FileSecurity.
478FilePermissions479ProtectedFiles.
479FileUploads.
480FilenamesandPaths480EncodingMailHeaders.
481xixCONTENTSFilesforProductionEnvironments.
482SSLSupport.
482Stand-AlonePHP.
483AJAXSecurity,a.
k.
a.
RequestReplayAttack485FormAPISecurity485ProtectingtheSuperuserAccount.
486Summary486IIChapter22:DevelopmentBestPractices487CodingStandards487LineIndentionandWhitespace487Operators487Casting487ControlStructures.
488FunctionCalls488FunctionDeclarations489FunctionNames.
489ClassConstructorCalls.
490Arrays490Quotes491StringConcatenators.
491Comments491DocumentationExamples.
492DocumentingConstants493DocumentingFunctions.
493DocumentingHookImplementations495IncludingCode.
495PHPCodeTags495Semicolons496XXCONTENTSExampleURLs.
496NamingConventions.
496CheckingYourCodingStylewithCoderModule.
496FindingYourWayAroundCodewithgrep497Summary498IIIChapter23:OptimizingDrupal499CachingIstheKeytoDrupalPerformance499OptimizingPHP501SettingPHPOpcodeCacheFileto/dev/zero.
502PHPProcessPoolSettings502TuningApache503mod_expires503MovingDirectivesfrom.
htaccesstohttpd.
conf.
504MPMPreforkvs.
ApacheMPMWorker.
504BalancingtheApachePoolSize505DecreasingApacheTimeout.
505DisablingUnusedApacheModules506UsingNginxInsteadofApache506UsingPressflow.
506Varnish506NormalizingincomingrequestsforbetterVarnishhits.
507Varnish:findingextraneouscookies.
508Boost508Boostvs.
Varnish509xxiCONTENTSLinuxSystemTuningforHighTrafficServers509UsingFastFileSystems.
510DedicatedServersvs.
VirtualServers511AvoidingCallingExternalWebServices511DecreasingServerTimeouts.
512DatabaseOptimization.
512EnablingMySQL'sQueryCache.
512MySQLlnnoDBPerformanceonWindows513DrupalPerformance.
513Eliminating404Errors.
513DisablingModulesYou'reNotUsing.
514Drupai-SpecificOptimizations514PageCaching.
514BandwidthOptimization514PruningtheSessionsTable514ManagingtheTrafficofAuthenticatedUsers.
515Runningcron515Architectures516SingleServer516SeparateDatabaseServer.
516SeparateDatabaseServerandaWebServerCluster517MultipleDatabaseServers518FindingtheBottleneck.
518Summary523xxiiCONTENTSIIIChapter24:InstallationProfiles.
525CreatingaNewInstallationProfile525Theenhanced.
infoFile526Theenhanced.
profileFile527Theenhanced.
installFile.
527Usinghook_install_tasksandhook_install_tasks_alter543Summary544IIIChapter25:Testing545SettingUptheTestEnvironment545HowTestsAreDefined550TestFunctions556TestAssertions560Summary563IIIAppendixA:DatabaseTableReference565IIIAppendixB:Resources.
623Code623TheDrupalSourceCodeRepositoryonGIT.
623Examples623DrupalAPIReference.
624SecurityAdvisories.
624UpdatingModules.
624UpdatingThemes.
624Handbooks624Forums624xxiiiCONTENTSMailingLists625Development625Themes625Translations625UserGroupsandInterestGroups.
625InternetRelayChat625NorthAmerica.
627Europe627Asia628LatinAmericaICaribbean629Oceania629Africa629Videocasts629Weblogs629Conferences630Contribute630Index631xxivForewordFouryearsago,Iwrotetheforewordforthefirsteditionofthisbook.
WhatwasmissingatthattimewasadeveloperbookforDrupal.
Sincethen,ProDrupalDevelopmenthasmadeanincrediblecontributiontoDrupal'ssteadygrowth.
Idon'tthinkIknowasingleDrupaldeveloperwhodoesn'townacopyoftheProDrupalDevelopmentbook.
Drupal,throughitsopensourcenature,hasbecomemuchgreaterthanIeverimagineditwould.
Whatdidn'tchangeistheDrupaldevelopercommunity'shealthydesiretoinnovate,torespondtotheever-changinglandscapeofwebdevelopment,andtoprovidewebdevelopersanalmostinfiniteamountofflexibility.
ChangeisaconstantintheDrupalcommunityandkeytooursuccess.
AlotofthesuccessofDrupaltodaycanbeattributedtoDrupal6.
However,fromthedaythatDrupal6wasreleasedalmostthreeyearsago,we'vebeenworkingreallyhardonDrupal7.
Morethan800individualcontributorshavepatchesincludedinDrupal7core.
Drupal7willfeaturesomeofthebiggestarchitecturalchangesinthehistoryofDrupal,willshipwithmanyAPIimprovements,andwillbeabletopowerbiggersitesthaneverbefore.
ThenetresultisthatDrupal7isanevenbetterwebapplicationdevelopmentplatformthanDrupal6,anditwillfuelalotofDrupal'sgrowthoverthenextyears.
AllthesechangesalsomeanthatthepreviousProDrupalDevelopmentbookswentoutofdate.
Fortunately,thethirdeditionofthisbookfixesallthat.
ThisbookcoversallofthecapabilitiesanddeveloperfacilitiesinDrupal7,andprovidesdeepinsightintotheinnerworkingsanddesignchoicesbehindDrupal7.
ArmedwiththisbookandacopyofDrupal'ssourcecode,youhaveeverythingyouneedtobecomeaDrupalexpert.
If,alongtheway,youhavefiguredouthowtodosomethingbetter,withfewerlinesofcodeormoreelegantlyandfasterthanbefore,getinvolvedandhelpusmakeDrupalevenbetter.
I'dlovetoreviewandcommityourDrupalcorepatches,andI'msuremanyoftheothercontributorswouldtoo.
DriesBuytaertDrupalFounderandProjectLeadXXVxxviAbouttheAuthorsToddTomlinsonisthevicepresidentofeGovernmentSolutionsatServerLogicCorporationinPortland,Oregon.
Todd'sfocusoverthepast15yearshasbeenondesigning,developing,deploying,andsupportingcomplexwebsolutionsforpublicandprivatesectorclientsallaroundtheworld.
HehasbeenusingDrupalastheprimaryplatformforcreatingbeautifulandfeature-richsitessuchashttp:I/arapahoelibraries.
org/ald/.
PriortoServerLogic,ToddwastheseniordirectorofeBusinessStrategicServicesforOracleCorporation,wherehehelpedOracle'slargestclientsdeveloptheirstrategicplansforleveragingtheWebasacorecomponentoftheirbusiness.
HeisalsotheformervicepresidentofInternetSolutionsforClaremontTechnologyGroup,vicepresidentandCTOofEmeraldSolutions,managingdirectorforCNFVentures,andaseniormanagerwithAndersenConsulting/Accenture.
ToddhasaBSincomputerscienceandanMBA,andheisinthedissertationphaseforhisPhD.
Todd'spassionforDrupalisevidentinhisobsessionwithevangelizingabouttheplatformandhisenthusiasmwhenspeakingwithclientsaboutthepossibilitiesofwhattheycanaccomplishusingDrupal.
Ifyouwanttoseesomeoneliterally"lightup,"stophimonthestreetandaskhim,"WhatisDrupalandwhatcanitdoforme"HeisalsotheauthorofApress'sBeginningDrupal7.
JohnK.
VanDykbeganhisworkwithcomputersonablackBellandHowellAppleIIbyprintingoutandporingovertheBASICcodeforLittleBrickOutinordertoincreasethepaddlewidth.
Later,hemanipulatedtimingloopsinassemblytogivePac-Manalargertimeslicethantheghosts.
BeforediscoveringDrupal,JohnwasinvolvedwiththeUserLandFrontiercommunityandusedPlonebeforewritinghisowncontentmanagementsystem(withMattWestgate)usingRuby.
JohnisaseniorwebarchitectatLullabot,aDrupaleducationandconsultingfirm.
Beforethat,JohnwasasystemsanalystandadjunctassistantprofessorintheentomologydepartmentatIowaStateUniversityofScienceandTechnology.
Hismaster'sthesisfocusedoncoldtoleranceofdeerticks,andhisdoctoraldissertationwasontheeffectivenessofphotographicallycreatedthree-dimensionalvirtualinsectsonundergraduatelearning.
JohnliveswithhiswifeTinainAmes,Iowa.
Theyhomeschooltheirpasselofchildren,whohavebecomeusedtobedtimestorieslike"TheAdventuresofaNodeRevisionintheLandofMultipleJoins.
"AbouttheTechnicalReviewersJoshuaBrauerjumpedontotheWorldWideWebasanaspiringtechnicaljournalismstudentworkingwithcontentmanagementsystemsin1995.
SincebecomingamemberoftheDrupalcommunityin2003,JoshuahasbeeninvolvedwithrunningDrupalsitesofallsizes.
In2007JoshualeftworkinITmanagementtodevotehisfull-timeprofessionalefforttoDrupal.
JoshuaisoneoftheleadersoftheBoiseDrupalUsersGroupandcanfrequentlybefoundgivingtalksatconferences,camps,localmeetups,andanywhereelsepeopleareinterestedinhearingaboutDrupal.
Joshua'swritingsaboutDrupalcanbefoundonlineathttp:I/joshuabrauer.
com.
AsaDrupalistatAcquia,JoshuaworkswithcustomersfromsmallsitestolargeenterprisesonallphasesoftheirDrupalexperience,frompre-planningthroughhostingandoperations.
JoshuafindsgreatinspirationintheDrupalcommunityanditsmanysignificantaccomplishments.
WhendisconnectedfromtheWeb,Joshuacanbefoundbehindacamera,enjoyingthewonderfulvarietyofbeautifulplacesonourplanet.
RobertDouglassistheseniorDrupaladvisoratAcquia,Inc.
,apermanentmemberoftheDrupalAssociation,andafoundingmemberofDieDrupai-Initiative,Germany'sDrupal-orientednonprofit.
Heisactiveasamodulemaintainer,corecontributor,andspeakeratvariousDrupaleventsandconferences.
HisApressprojectsincludeBuildingOnlineCommunitieswithDrupal,phpBB,andWordPress(author,2005),ProDrupalDevelopment(technicalreviewer,2007),andProDrupalDevelopment,SecondEdition(technicalreviewer,2008).
PeterM.
WolaninhasbeenworkingwithDrupalsincelate2005,whenafriendwhohadbeenaHowardDeansupporterinvolvedhiminaprojecttobuildanewWebpresenceforthelocalDemocraticPartyclub,andtheystartedbuildingthesiteonDrupal4.
7beta.
PetersoonbecameasinterestedinthechallengeaffixingbugsandaddingfeaturesinDrupalcoreandcontributedmodulesashewasinactualsitebuilding.
HebecameanotedcontributortoDrupal5,6,and7,andamemberoftheDrupaldocumentationteam.
HejoinedtheDrupalsecurityteamandwaselectedin2010asapermanentmemberoftheDrupalAssociation.
PeterjoinedtheAcquiaengineeringteamin2008andenjoysthecompanyofhisstellarcolleagues.
Beforeallthis,PetergraduatedcumlaudefromPrincetonUniversity,receivedadoctoraldegreeinphysicsfromtheUniversityofMichigan,andconductedpost-doctoralandindustrialresearchinbiophysicsandmolecularbiology.
xxviiAcknowledgmentsBeth,foryournever-endingsupport,encouragement,love,andlaughter-thankyouforbringingbacktheabilitytodreambigaboutthefuture.
Mydaughters,Anna,Alissa,andEmma,forgivingupcountlesshoursoftimewithDadwhileIwrotethebook.
Myparents,forgivingmethetoolsIneededtoembarkonthejourneysthatI'vetraveled.
Mygrandmother,forsparkingthefiretobecomeanauthor.
Dries,withoutyourvisionandpassionfortheplatform,therewouldn'tbeaProDrupalDevelopmentbook.
TheAquiateam,forjumpinginandlendingyoursupportwhileItackledthetoughsectionsofthebookWebchick(a.
k.
a.
AngieByron),foryourdedicationtotheplatformandyourrelentlesseffortstolaunchDrupal7.
Thethousandsofdeveloperswhohavecontributedtotheplatformtomakeitwhatitistoday.
Myclients,forembracingthetechnologyandsharingtheexcitementoverwhatitcando.
Jason,Darren,Kathryn,andSteve-myteammateswhowakeupeverymorningexcitedtodiscoversomethingnewthatDrupalcando-forputtingupwithmywilddreamsabouthowDrupalcandoanything.
xxviiiIntroductionInitsrelativelyshortlife,DrupalhashadatremendousimpactonthelandscapeoftheInternet.
Asawebcontentmanagementsystem,Drupalhasenabledthecreationoffeature-andcontent-richwebsitesfororganizationslargeandsmall.
Asawebapplicationframework,Drupalischangingthewaythatpeoplethinkaboutwebapplicationdevelopment.
WhenIexperiencedthepoweroftheDrupalplatformforthefirsttime,Iknewthatitwassomethingmorethanjustanothercontentmanagementsolution.
WhenIsawhoweasilyandquicklyIcouldbuildfeature-richwebsites,IshiftedgearsandfocusedmyentirecareeraroundDrupal.
I'moftenaskedthequestion,"WhatisDrupal"TheshortanswerisDrupalisanopensourcewebcontentmanagementsystemthatallowsyoutoquicklyandeasilycreatesimpletocomplexwebsitesthatspaneverythingfromasimpleblogtoacorporatewebsite,asocialnetworkingwebsite,orvirtuallyanythingyoucandreamup.
WhatyoucanbuildwithDrupalislimitedonlytoyourimagination,thetimeyouhavetospendwiththeplatform,andyourknowledgeaboutDrupal'scapabilities-whichistheimpetusbehindthisbook.
Asanopensourceplatform,Drupal'scommunityisconstantlyimprovingtheplatformandextendingthefunctionalityofthecoreplatformbycreatingnewandexcitingadd-onmodules.
Ifthere'sanewconceptcreatedontheWeb,it'slikelythattherewillbeanewDrupalmodulethatenablesthatconceptinamatterofdays.
It'sthecommunitybehindtheplatformthatmakesDrupalwhatitistoday,andwhatitwillbecomeinthefuture.
I'llshowyouhowtoleveragethefeaturescontributedbythecommunity,makingiteasyforyoutobuildincrediblesolutionswithminimaleffort.
TheveryactofpickingupthisbookisthefirststepinyourjourneydownthepathoflearninghowtouseDrupal.
Ifyouwillwalkwithmethroughtheentirebook,you'llhavetheknowledgeandexperiencetobuildcomplexandpowerfulDrupal-basedwebsites.
You'llalsohavethefoundationnecessarytomovebeyondthebasics,expandingontheconceptsIcoverinthisbook.
LearningDrupalislikelearningeverynewtechnology.
Therewillbebumpsandhurdlesthatcauseyoutostepbackandscratchyourhead.
Ihopethebookhelpssmooththebumpsandprovidesyouwithenoughinformationtoeasilyjumpoverthosehurdles.
IlookforwardtoseeingyourworksontheWebandhopetobumpintoyouatanupcomingDrupalCon.
Iwillendonanoteofcarefreeabandon-learntosteal!
Onceyou'velearnedthepiecesofthepuzzleandhowtocombinethem,thereisverylittlenewtoinvent.
Everynewideayoudiscoverisamerepermutationoftheoldideas.
Andideasarefree!
EverycoolfeaturediscussedonTVshowsorpresentedinthebrochuresorwebsitesofcommercialHAcompaniescanbetaken,adapted,andimplementedwiththeinformationpresentedhereusingverylittleeffort.
Andthenyouwillgraduatefromanautomatedhometoasmarthometoapersonalizedsmarthome!
xxix
BuyVM 商家算是有一些年头,从早年提供低价便宜VPS主机深受广大网友抢购且也遭到吐槽的是因为审核账户太过于严格。毕竟我们国内的个人注册账户喜欢账户资料乱写,毕竟我们看英文信息有些还是比较难以识别的,于是就注册信息的时候随便打一些字符,这些是不能通过的。前几天,我们可以看到BUYVM商家有新增加迈阿密机房,而且商家有提供大硬盘且不限制流量的VPS主机,深受有一些网友的喜欢。目前,BUYVM商家有...
全新PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套餐等诸多功能,值得使用。链接: https://pan.baidu.com/s/1ti6XqJ22tp1ULTJw7kYHog?pwd=sarg 提取码: sarg文件解压密码 www.wn7...
wordpress投资主题模版是一套适合白银、黄金、贵金属投资网站主题模板,绿色大气金融投资类网站主题,专业高级自适应多设备企业CMS建站主题 完善的外贸企业建站功能模块 + 高效通用的后台自定义设置,简洁大气的网站风格设计 + 更利于SEO搜索优化和站点收录排名!点击进入:wordpress投资主题模版安装环境:运行环境:PHP 7.0+, MYSQL 5.6 ( 最低主机需求 )最新兼容:完美...
drupal7为你推荐
去哪儿网称不会转型做在线代理客户flashtoupian小学语文 拼音表http404未找到为什么网站上传,打开看不到,显示HTTP 404 - 未找到文件php计划任务php定时任务,只执行一次,不要死循环163yeah请问网易的163,126,yeah,VIP,188邮箱各有什么特点?sqlserver2000挂起安装sqlserver2000时总提示有挂起操作!大飞资讯伯乐资讯是什么公司爱买网超艾比安高达厉害吗,今天在网上看到的万代的果断入手了,168贵吗,不知道这款高达厉不厉害tumblr上不去百度为什么经常打不开
免费虚拟主机空间 动态域名解析软件 t楼 外贸主机 paypal认证 777te 52测评网 蜗牛魔方 全站静态化 hostloc 爱奇艺vip免费试用7天 太原网通测速平台 1美金 服务器监测 路由跟踪 游戏服务器出租 双线空间 国外网页代理 测试网速命令 网络速度 更多