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

提速啦(69元起)香港大带宽CN2+BGP独享云服务器

香港大带宽服务器香港大带宽云服务器目前市场上可以选择的商家十分少,这次给大家推荐的是我们的老便宜提速啦的香港大带宽云服务器,默认通用BGP线路(即CN2+BGP)是由三网直连线路 中国电信骨干网以及HGC、NTT、PCCW等国际线路混合而成的高品质带宽(精品带宽)线路,可有效覆盖全球200多个国家和地区。(适用于绝大部分应用场景,适合国内外访客访问,域名无需备案)提速啦官网链接:点击进入香港Cer...

vpsdime7美元/月,美国达拉斯Windows VPS,2核4G/50GB SSD/2TB流量/Hyper-V虚拟化

vpsdime怎么样?vpsdime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:vpsdime夏日促销活动,美国达拉斯vps,2G内存/2核/20gSSD/1T流量,$20/年,此次推出一款Wi...

Vultr VPS新增第18个数据中心 瑞典斯德哥尔摩欧洲VPS主机机房

前几天还在和做外贸业务的网友聊着有哪些欧洲机房的云服务器、VPS商家值得选择的。其中介绍他选择的还是我们熟悉的Vultr VPS服务商,拥有比较多达到17个数据中心,这不今天在登录VULTR商家的时候看到消息又新增一个新的机房。这算是第18个数据中心,也是欧洲VPS主机,地区是瑞典斯德哥尔摩。如果我们有需要欧洲机房的朋友现在就可以看到开通的机房中有可以选择瑞典机房。目前欧洲已经有五个机房可以选择,...

drupal7为你推荐
access数据库修复编程怎样实现access中对数据库的修复功能。linux防火墙设置在linux iptables怎么开启centos6.5centos7和centos6.5的区别outlookexpress系统自带的outlook express有什么用?怎么用?申请支付宝账户申请支付宝账号注册申请支付宝账户怎么申请支付宝的账号?开放平台企鹅号和腾讯内容开放平台是一样的吗,有什么区别?碧海银沙网怎样在碧海银沙网里发布图片?爱买网超爱买网的特点爱买网超谁有http://www.25j58.com爱网购吧网站简介?
yardvps vpsio 免费网站监控 ixwebhosting 好看的桌面背景大图 搜狗抢票助手 服务器怎么绑定域名 xen 本网站在美国维护 双拼域名 刀片式服务器 idc是什么 91vps 创建邮箱 万网主机管理 中国电信测速器 华为k3 宿迁服务器 域名和主机 免费主页空间 更多