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
这两天Linode发布了十八周年的博文和邮件,回顾了过去取得的成绩和对未来的展望。作为一家运营18年的VPS主机商,Linode无疑是有一些可取之处的,商家提供基于KVM架构的VPS主机,支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,所有机器提供高出入网带宽,最低仅$5/月($0.0075/小时)。This month marks Linod...
Hostodo在九月份又发布了两款特别套餐,开设在美国拉斯维加斯、迈阿密和斯波坎机房,基于KVM架构,采用NVMe SSD高性能磁盘,最低1.5GB内存8TB月流量套餐年付34.99美元起。Hostodo是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,美国三个地区机房,支持支付宝或者PayPal、加密货币等付款。下面列出这两款主机配置信息。CP...
pacificrack在最新的7月促销里面增加了2个更加便宜的,一个月付1.5美元,一个年付12美元,带宽都是1Gbps。整个系列都是PR-M,也就是魔方的后台管理。2G内存起步的支持Windows 7、10、Server 2003\2008\2012\2016\2019以及常规版本的Linux!官方网站:https://pacificrack.com支持PayPal、支付宝等方式付款7月秒杀VP...
drupal7为你推荐
areaiphonelinux防火墙设置如何在Linux中启动/停止和启用/禁用FirewallD和Iptables防火墙outlookexpress家里电脑老是弹出“outlook express”这个东西,怎么除去啊?刚刚网新员工入职自我介绍怎么写?站点管理有关站点的知识介绍?引擎收录搜索引擎收录和反向链接什么意思?织梦去版权织梦dedecms如何去除版权中的Power by DedeCms顽固木马专杀工具腾讯顽固木马专杀怎么授权顽固木马专杀工具360顽固木马专杀工具怎么样,和超级巡警比呢?百度分享工具百度云这个软件有什么作用
免费网站空间申请 域名大全 主机点评 themeforest idc测评网 搜狗抢票助手 标准机柜尺寸 eq2 绍兴高防 ca4249 40g硬盘 柚子舍官网 33456 web服务器安全 无限流量 网站加速软件 免费的asp空间 实惠 云服务是什么意思 server2008 更多