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

Pia云服务香港月20元游戏提供香港CN2云服务器

Pia云商家在前面有介绍过一次,根据市面上的信息是2018的开办的国人商家,原名叫哔哔云,目前整合到了魔方云平台。这个云服务商家主要销售云服务器VPS主机业务和服务,云服务器采用KVM虚拟架构 。目前涉及的机房有美国洛杉矶、中国香港和深圳地区。洛杉矶为crea机房,三网回程CN2 GIA,自带20G防御。中国香港机房的线路也是CN2直连大陆,比较适合建站或者有游戏业务需求的用户群。在这篇文章中,简...

Kinponet是谁?Kinponet前身公司叫金宝idc 成立于2013年 开始代理销售美国vps。

在2014年发现原来使用VPS的客户需求慢慢的在改版,VPS已经不能满足客户的需求。我们开始代理机房的独立服务器,主推和HS机房的独立服务器。经过一年多的发展,我们发现代理的服务器配置参差不齐,机房的售后服务也无法完全跟上,导致了很多问题发生,对使用体验带来了很多的不便,很多客户离开了我们。经过我们慎重的考虑和客户的建议。我们在2015开始了重大的改变, 2015年,我们开始计划托管自己...

华纳云,3折低至优惠云服务器,独立服务器/高防御服务器低至6折,免备案香港云服务器CN2 GIA三网直连线路月付18元起,10Mbps带宽不限流量

近日华纳云发布了最新的618返场优惠活动,主要针对旗下的免备案香港云服务器、香港独立服务器、香港高防御服务器等产品,月付6折优惠起,高防御服务器可提供20G DDOS防御,采用E5处理器V4CPU性能,10Mbps独享CN2 GIA高速优质带宽,有需要免备案香港服务器、香港云服务器、香港独立服务器、香港高防御服务器、香港物理服务器的朋友可以尝试一下。华纳云好不好?华纳云怎么样?华纳云服务器怎么样?...

drupal7为你推荐
yw372:ComIE主页被修改为http://www.hao372.com/ 桌面上的IE图标还变成了两个重庆网络公司一九互联我重庆2013年7月毕业,报到证上写的是A公司,档案也在A公司,半年后我辞职,到B公司上班,档案也德国iphone禁售令德国买iPhone现在多少钱?asp.net空间哪里可以申请asp空间的?sqlserver2000挂起SQL server2000 安装为什么老是提示挂起?波音737起飞爆胎为什么很少见到飞机轮胎爆胎?资费标准电信套餐资费介绍表爱优网为什么优酷土豆等视频网站那么多人上传视频电子商务世界世界前十大电子商务企业名字工具条有什么工具条比较好
中文域名注册 工信部域名备案查询 日本vps 香港ufo cpanel主机 rak机房 sub-process 双12活动 双11抢红包攻略 阿里云代金券 debian6 青果网 免费网站申请 web服务器的架设 秒杀预告 免费防火墙 流量计费 免费测手机号 100mbps Updog 更多