Why Drupal is Rockstar?

Preview:

DESCRIPTION

This slide is focusing on the strength of Drupal and why it is suited for enterprise solution.

Citation preview

2014 DevOps Day – Philippines2014 DevOps Day – PhilippinesFebruary 22, 2014February 22, 2014

Microsoft PhilippinesMicrosoft Philippines8th Floor, 6750 Ayala Ave., Makati City

{ Drupal }{ Drupal } : Being a Rockstar : Being a Rockstar

Gerald Z. VillorenteDevOps Engineer | Drupal Developer | Open-Source EnthusiastDevOps Engineer | Drupal Developer | Open-Source Enthusiast

Gerald Z. VillorenteDevOps Engineer | Drupal Developer | Open-Source EnthusiastDevOps Engineer | Drupal Developer | Open-Source Enthusiast

CommunityCommunity CodeCode DeploymentDeployment SecuritySecurity PerformancePerformance FlexibilityFlexibility DocumentationDocumentation DrushDrush Content ManagementContent Management

CommunityCommunity CodeCode DeploymentDeployment SecuritySecurity PerformancePerformance FlexibilityFlexibility DocumentationDocumentation DrushDrush Content ManagementContent Management

Agenda:Agenda:

CommunityCommunityDrupal is one of the largest open-source community in the planet.Drupal is one of the largest open-source community in the planet.

CommunityCommunityDrupal is one of the largest open-source community in the planet.Drupal is one of the largest open-source community in the planet.

April 2013April 2013April 2013April 2013

31,721 31,721 DevelopersDevelopers

31,721 31,721 DevelopersDevelopers

1,034,669 1,034,669 Active UsersActive Users1,034,669 1,034,669

Active UsersActive Users

MediumMediumIRC, Stackoverflow, D.O forum, ...IRC, Stackoverflow, D.O forum, ...

MediumMediumIRC, Stackoverflow, D.O forum, ...IRC, Stackoverflow, D.O forum, ...

CodeCodeDrupal is one of the largest open-source community in the planet.Drupal is one of the largest open-source community in the planet.

CodeCodeDrupal is one of the largest open-source community in the planet.Drupal is one of the largest open-source community in the planet.

PHPPHPPHPPHP

Community Community ContributionsContributionsCommunity Community

ContributionsContributions

25,58525,585 Modules Modules25,58525,585 Modules Modules

1,9411,941 ThemesThemes1,9411,941 ThemesThemes

765765 DistributionsDistributions765765 DistributionsDistributions

2,5402,540Code commitsCode commits

Just this week.Just this week.

2,5402,540Code commitsCode commits

Just this week.Just this week.

5,4205,420Issue CommentsIssue Comments

Just this week.Just this week.

5,4205,420Issue CommentsIssue Comments

Just this week.Just this week.

Coding StandardCoding StandardThe Drupal Coding Standards apply to code within Drupal and its The Drupal Coding Standards apply to code within Drupal and its

contributed modules. contributed modules.

Coding StandardCoding StandardThe Drupal Coding Standards apply to code within Drupal and its The Drupal Coding Standards apply to code within Drupal and its

contributed modules. contributed modules.

Indenting and Indenting and WhitespaceWhitespace

Use an indent of 2 spaces, with no tabs.Use an indent of 2 spaces, with no tabs.

Indenting and Indenting and WhitespaceWhitespace

Use an indent of 2 spaces, with no tabs.Use an indent of 2 spaces, with no tabs.

OperatorsOperatorsAll binary operators (operators that come between two values), such All binary operators (operators that come between two values), such

as +, -, =, !=, ==, >, etc. should have a space before and after the as +, -, =, !=, ==, >, etc. should have a space before and after the operator, for readability.operator, for readability.

OperatorsOperatorsAll binary operators (operators that come between two values), such All binary operators (operators that come between two values), such

as +, -, =, !=, ==, >, etc. should have a space before and after the as +, -, =, !=, ==, >, etc. should have a space before and after the operator, for readability.operator, for readability.

CastingCastingPut a space between the (type) and the $variable in a cast: Put a space between the (type) and the $variable in a cast:

(int) $mynumber.(int) $mynumber.

CastingCastingPut a space between the (type) and the $variable in a cast: Put a space between the (type) and the $variable in a cast:

(int) $mynumber.(int) $mynumber.

Control Control StructuresStructures

Control structures include if, for, while, switch, etc.Control structures include if, for, while, switch, etc.

Note:Note: Don't use "else if" -- always use elseif. Don't use "else if" -- always use elseif.

Control Control StructuresStructures

Control structures include if, for, while, switch, etc.Control structures include if, for, while, switch, etc.

Note:Note: Don't use "else if" -- always use elseif. Don't use "else if" -- always use elseif.

Alternate control Alternate control statement statement

syntax for templatessyntax for templatesIn templates, the alternate control statement syntax using : instead In templates, the alternate control statement syntax using : instead

of brackets is allowed. of brackets is allowed.

Alternate control Alternate control statement statement

syntax for templatessyntax for templatesIn templates, the alternate control statement syntax using : instead In templates, the alternate control statement syntax using : instead

of brackets is allowed. of brackets is allowed.

Line length Line length and wrappingand wrapping

In general, all lines of code should not be longer than 80 chars. In general, all lines of code should not be longer than 80 chars. Lines containing longer function names, function/class definitions, Lines containing longer function names, function/class definitions,

variable declarations, etc are allowed to exceed 80 chars. variable declarations, etc are allowed to exceed 80 chars. Control structure conditions may exceed 80 chars, if they are Control structure conditions may exceed 80 chars, if they are simple to read and understand. simple to read and understand. Conditions should not be wrapped into multiple lines.Conditions should not be wrapped into multiple lines.

Line length Line length and wrappingand wrapping

In general, all lines of code should not be longer than 80 chars. In general, all lines of code should not be longer than 80 chars. Lines containing longer function names, function/class definitions, Lines containing longer function names, function/class definitions,

variable declarations, etc are allowed to exceed 80 chars. variable declarations, etc are allowed to exceed 80 chars. Control structure conditions may exceed 80 chars, if they are Control structure conditions may exceed 80 chars, if they are simple to read and understand. simple to read and understand. Conditions should not be wrapped into multiple lines.Conditions should not be wrapped into multiple lines.

Function CallsFunction CallsFunctions should be called with no spaces between the function Functions should be called with no spaces between the function name, the opening parenthesis, and the first parameter; spaces name, the opening parenthesis, and the first parameter; spaces

between commas and each parameter, and no space between the between commas and each parameter, and no space between the last parameter, the closing parenthesis, and the semicolon.last parameter, the closing parenthesis, and the semicolon.

Function CallsFunction CallsFunctions should be called with no spaces between the function Functions should be called with no spaces between the function name, the opening parenthesis, and the first parameter; spaces name, the opening parenthesis, and the first parameter; spaces

between commas and each parameter, and no space between the between commas and each parameter, and no space between the last parameter, the closing parenthesis, and the semicolon.last parameter, the closing parenthesis, and the semicolon.

Function Function DeclarationsDeclarations

Arguments with default values go at the end of the argument list.Arguments with default values go at the end of the argument list.

Function Function DeclarationsDeclarations

Arguments with default values go at the end of the argument list.Arguments with default values go at the end of the argument list.

Class Class Constructor CallsConstructor CallsWhen calling class constructors with no arguments, always include When calling class constructors with no arguments, always include parentheses. This is to maintain consistency with constructors that parentheses. This is to maintain consistency with constructors that

have arguments.have arguments.

Class Class Constructor CallsConstructor CallsWhen calling class constructors with no arguments, always include When calling class constructors with no arguments, always include parentheses. This is to maintain consistency with constructors that parentheses. This is to maintain consistency with constructors that

have arguments.have arguments.

ArraysArraysArrays should be formatted with a space separating each element Arrays should be formatted with a space separating each element

(after the comma), and spaces around the => key association (after the comma), and spaces around the => key association operator.operator.

ArraysArraysArrays should be formatted with a space separating each element Arrays should be formatted with a space separating each element

(after the comma), and spaces around the => key association (after the comma), and spaces around the => key association operator.operator.

String String ConcatenationsConcatenations

Always use a space between the dot and the concatenated parts to Always use a space between the dot and the concatenated parts to improve readability.improve readability.

String String ConcatenationsConcatenations

Always use a space between the dot and the concatenated parts to Always use a space between the dot and the concatenated parts to improve readability.improve readability.

PHP Code TagsPHP Code TagsAlways use <?php to delimit PHP code, not the shorthand, <? . Always use <?php to delimit PHP code, not the shorthand, <? .

PHP Code TagsPHP Code TagsAlways use <?php to delimit PHP code, not the shorthand, <? . Always use <?php to delimit PHP code, not the shorthand, <? .

SemicolonsSemicolonsThe PHP language requires semicolons at the end of most lines, but The PHP language requires semicolons at the end of most lines, but allows them to be omitted at the end of code blocks. Drupal coding allows them to be omitted at the end of code blocks. Drupal coding

standards require them, even at the end of code blocks.standards require them, even at the end of code blocks.

SemicolonsSemicolonsThe PHP language requires semicolons at the end of most lines, but The PHP language requires semicolons at the end of most lines, but allows them to be omitted at the end of code blocks. Drupal coding allows them to be omitted at the end of code blocks. Drupal coding

standards require them, even at the end of code blocks.standards require them, even at the end of code blocks.

Example URLsExample URLsUse "example.com" for all example URLs, per Use "example.com" for all example URLs, per RFC 2606RFC 2606..

Example URLsExample URLsUse "example.com" for all example URLs, per Use "example.com" for all example URLs, per RFC 2606RFC 2606..

Naming Naming ConventionsConventions

Naming Naming ConventionsConventions

Functions Functions and variablesand variables

Functions and variables should be named using lowercase, and words Functions and variables should be named using lowercase, and words should be separated with an underscore. Functions should in should be separated with an underscore. Functions should in

addition have the grouping/module name as a prefix, to avoid name addition have the grouping/module name as a prefix, to avoid name collisions between modules.collisions between modules.

Functions Functions and variablesand variables

Functions and variables should be named using lowercase, and words Functions and variables should be named using lowercase, and words should be separated with an underscore. Functions should in should be separated with an underscore. Functions should in

addition have the grouping/module name as a prefix, to avoid name addition have the grouping/module name as a prefix, to avoid name collisions between modules.collisions between modules.

Naming Conventions:Naming Conventions:

Persistent Persistent VariablesVariables

Persistent variables (Persistent variables (variables/settings defined using Drupal's variables/settings defined using Drupal's variable_get()/variable_set() functionsvariable_get()/variable_set() functions) should be named using all ) should be named using all

lowercase letters, and words should be separated with an lowercase letters, and words should be separated with an underscore. They should use the grouping/module name as a prefix, underscore. They should use the grouping/module name as a prefix,

to avoid name collisions between modules.to avoid name collisions between modules.

Persistent Persistent VariablesVariables

Persistent variables (Persistent variables (variables/settings defined using Drupal's variables/settings defined using Drupal's variable_get()/variable_set() functionsvariable_get()/variable_set() functions) should be named using all ) should be named using all

lowercase letters, and words should be separated with an lowercase letters, and words should be separated with an underscore. They should use the grouping/module name as a prefix, underscore. They should use the grouping/module name as a prefix,

to avoid name collisions between modules.to avoid name collisions between modules.

Naming Conventions:Naming Conventions:

ConstantsConstants Constants should always be all-uppercase, with underscores to Constants should always be all-uppercase, with underscores to

separate words. (This includes pre-defined PHP constants like separate words. (This includes pre-defined PHP constants like TRUETRUE, , FALSEFALSE, and , and NULLNULL.).)

Module-defined constant names should also be prefixed by an Module-defined constant names should also be prefixed by an uppercase spelling of the module that defines them.uppercase spelling of the module that defines them.

In Drupal 8 and later, constants should be defined using the In Drupal 8 and later, constants should be defined using the constconst PHP language keyword (instead of define()), because it is better for PHP language keyword (instead of define()), because it is better for

performance. Ex: performance. Ex: <?php<?php const CACHE_TEMPORARY = -1; ?>const CACHE_TEMPORARY = -1; ?>

ConstantsConstants Constants should always be all-uppercase, with underscores to Constants should always be all-uppercase, with underscores to

separate words. (This includes pre-defined PHP constants like separate words. (This includes pre-defined PHP constants like TRUETRUE, , FALSEFALSE, and , and NULLNULL.).)

Module-defined constant names should also be prefixed by an Module-defined constant names should also be prefixed by an uppercase spelling of the module that defines them.uppercase spelling of the module that defines them.

In Drupal 8 and later, constants should be defined using the In Drupal 8 and later, constants should be defined using the constconst PHP language keyword (instead of define()), because it is better for PHP language keyword (instead of define()), because it is better for

performance. Ex: performance. Ex: <?php<?php const CACHE_TEMPORARY = -1; ?>const CACHE_TEMPORARY = -1; ?>

Naming Conventions:Naming Conventions:

Global VariablesGlobal VariablesIf you need to define global variables, their name should start with If you need to define global variables, their name should start with

a single underscore followed by the module/theme name and a single underscore followed by the module/theme name and another underscore.another underscore.

Global VariablesGlobal VariablesIf you need to define global variables, their name should start with If you need to define global variables, their name should start with

a single underscore followed by the module/theme name and a single underscore followed by the module/theme name and another underscore.another underscore.

Naming Conventions:Naming Conventions:

ClassesClassesSee - See - https://drupal.org/node/608152https://drupal.org/node/608152

ClassesClassesSee - See - https://drupal.org/node/608152https://drupal.org/node/608152

Naming Conventions:Naming Conventions:

File namesFile namesAll documentation files should have the file name extension ".txt" All documentation files should have the file name extension ".txt" to make viewing them on Windows systems easier. Also, the file to make viewing them on Windows systems easier. Also, the file

names for such files should be all-caps (e.g. README.txt instead of names for such files should be all-caps (e.g. README.txt instead of readme.txt) while the extension itself is all-lowercase (i.e. txt readme.txt) while the extension itself is all-lowercase (i.e. txt

instead of TXT).instead of TXT).

File namesFile namesAll documentation files should have the file name extension ".txt" All documentation files should have the file name extension ".txt" to make viewing them on Windows systems easier. Also, the file to make viewing them on Windows systems easier. Also, the file

names for such files should be all-caps (e.g. README.txt instead of names for such files should be all-caps (e.g. README.txt instead of readme.txt) while the extension itself is all-lowercase (i.e. txt readme.txt) while the extension itself is all-lowercase (i.e. txt

instead of TXT).instead of TXT).

Naming Conventions:Naming Conventions:

Helper ModulesHelper ModulesHelper ModulesHelper Modules

CoderCoderUsing Using PHP_CodesnifferPHP_Codesniffer, Coder includes “, Coder includes “Coder ReviewCoder Review” module that ” module that

can be use to check the Drupal coding standard of your custom can be use to check the Drupal coding standard of your custom modules, themes, css, and javascript.modules, themes, css, and javascript.

CoderCoderUsing Using PHP_CodesnifferPHP_Codesniffer, Coder includes “, Coder includes “Coder ReviewCoder Review” module that ” module that

can be use to check the Drupal coding standard of your custom can be use to check the Drupal coding standard of your custom modules, themes, css, and javascript.modules, themes, css, and javascript.

Helper Modules:Helper Modules:

DreditorDreditorA browser plug-in for reviewing patches and more.A browser plug-in for reviewing patches and more.

DreditorDreditorA browser plug-in for reviewing patches and more.A browser plug-in for reviewing patches and more.

Helper Modules:Helper Modules:

PAReviewPAReviewA set of scripts for reviewing project applications, which runs some A set of scripts for reviewing project applications, which runs some

coding tests.coding tests.

PAReviewPAReviewA set of scripts for reviewing project applications, which runs some A set of scripts for reviewing project applications, which runs some

coding tests.coding tests.

Helper Modules:Helper Modules:

PAReviewPAReviewA set of scripts for reviewing project applications, which runs some A set of scripts for reviewing project applications, which runs some

coding tests.coding tests.

PAReviewPAReviewA set of scripts for reviewing project applications, which runs some A set of scripts for reviewing project applications, which runs some

coding tests.coding tests.

Helper Modules:Helper Modules:

Grammar ParserGrammar ParserProvides an automated way of rewriting code files in compliance Provides an automated way of rewriting code files in compliance

with code standards.with code standards.

Grammar ParserGrammar ParserProvides an automated way of rewriting code files in compliance Provides an automated way of rewriting code files in compliance

with code standards.with code standards.

Helper Modules:Helper Modules:

I hate doing I hate doing manual code manual code

review! review! Can I automate it? Can I automate it? DLADLA!!

I hate doing I hate doing manual code manual code

review! review! Can I automate it? Can I automate it? DLADLA!!

DevOps DevOps Loves Loves

AutomationAutomationIf you're using version control, you can take advantage the “If you're using version control, you can take advantage the “hookhook” ”

feature in automating all reviews. You can combine feature in automating all reviews. You can combine Bash/PHP/Perl/Python script, Drush, and Coder to do the job.Bash/PHP/Perl/Python script, Drush, and Coder to do the job.

DevOps DevOps Loves Loves

AutomationAutomationIf you're using version control, you can take advantage the “If you're using version control, you can take advantage the “hookhook” ”

feature in automating all reviews. You can combine feature in automating all reviews. You can combine Bash/PHP/Perl/Python script, Drush, and Coder to do the job.Bash/PHP/Perl/Python script, Drush, and Coder to do the job.

DeploymentDeploymentDeploymentDeployment

FeaturesFeaturesEnables the capture and management of features in Drupal. A feature Enables the capture and management of features in Drupal. A feature

is a collection of Drupal entities which taken together satisfy a is a collection of Drupal entities which taken together satisfy a certain use-case.certain use-case.

FeaturesFeaturesEnables the capture and management of features in Drupal. A feature Enables the capture and management of features in Drupal. A feature

is a collection of Drupal entities which taken together satisfy a is a collection of Drupal entities which taken together satisfy a certain use-case.certain use-case.

Deployment:Deployment:

Configuration Configuration ManagementManagement

Enables the ability to keep track of specific configurations on a Enables the ability to keep track of specific configurations on a Drupal site, provides the ability to move these configurations Drupal site, provides the ability to move these configurations

between different environments (local, dev, qa, prod), and also between different environments (local, dev, qa, prod), and also move configurations between completely different sites (migrate move configurations between completely different sites (migrate configurations) without the use of modules with all configuration configurations) without the use of modules with all configuration

being owned by the site.being owned by the site.

Configuration Configuration ManagementManagement

Enables the ability to keep track of specific configurations on a Enables the ability to keep track of specific configurations on a Drupal site, provides the ability to move these configurations Drupal site, provides the ability to move these configurations

between different environments (local, dev, qa, prod), and also between different environments (local, dev, qa, prod), and also move configurations between completely different sites (migrate move configurations between completely different sites (migrate configurations) without the use of modules with all configuration configurations) without the use of modules with all configuration

being owned by the site.being owned by the site.

Deployment:Deployment:

hook_update_N()hook_update_N()Perform a single update. Called by Perform a single update. Called by update.phpupdate.php or or drush updbdrush updb..

hook_update_N()hook_update_N()Perform a single update. Called by Perform a single update. Called by update.phpupdate.php or or drush updbdrush updb..

Deployment:Deployment:

SecuritySecurityDrupal is one of the most secure open-source CMS/CMF project on Drupal is one of the most secure open-source CMS/CMF project on

the planet. Don't argue with me!the planet. Don't argue with me!

SecuritySecurityDrupal is one of the most secure open-source CMS/CMF project on Drupal is one of the most secure open-source CMS/CMF project on

the planet. Don't argue with me!the planet. Don't argue with me!

Roles Roles and Permissionsand Permissions

Roles Roles and Permissionsand Permissions

Security:Security:

Security TeamSecurity Team Perform analysis of core or contributed project code.Perform analysis of core or contributed project code. Resolve reported security issues in a Security Advisory.Resolve reported security issues in a Security Advisory. Provide assistance for contributed module maintainers in resolving Provide assistance for contributed module maintainers in resolving security issues. security issues. Provide documentation on how to write secure code.Provide documentation on how to write secure code. Provide documentation on securing your site.Provide documentation on securing your site.

Security TeamSecurity Team Perform analysis of core or contributed project code.Perform analysis of core or contributed project code. Resolve reported security issues in a Security Advisory.Resolve reported security issues in a Security Advisory. Provide assistance for contributed module maintainers in resolving Provide assistance for contributed module maintainers in resolving security issues. security issues. Provide documentation on how to write secure code.Provide documentation on how to write secure code. Provide documentation on securing your site.Provide documentation on securing your site.

Security:Security:

PerformancePerformanceGood integration with Varnish, NginX, Memcache, etcGood integration with Varnish, NginX, Memcache, etc

PerformancePerformanceGood integration with Varnish, NginX, Memcache, etcGood integration with Varnish, NginX, Memcache, etc

CachingCachingCachingCaching

MemcacheMemcacheGit / t/ is a distributed ɡɪGit / t/ is a distributed ɡɪ revision controlrevision control and source code and source code

management (SCM) system with an emphasis on speed. management (SCM) system with an emphasis on speed. - Wikipedia- Wikipedia

MemcacheMemcacheGit / t/ is a distributed ɡɪGit / t/ is a distributed ɡɪ revision controlrevision control and source code and source code

management (SCM) system with an emphasis on speed. management (SCM) system with an emphasis on speed. - Wikipedia- Wikipedia

Caching:Caching:

VarnishVarnishVarnish is an HTTP accelerator designed for content-heavy dynamic Varnish is an HTTP accelerator designed for content-heavy dynamic

web sites.web sites.

VarnishVarnishVarnish is an HTTP accelerator designed for content-heavy dynamic Varnish is an HTTP accelerator designed for content-heavy dynamic

web sites.web sites.

Caching:Caching:

BoostBoostBoost provides static page caching for Drupal enabling a very Boost provides static page caching for Drupal enabling a very

significant performance and scalability boost for sites that receive significant performance and scalability boost for sites that receive mostly mostly anonymous trafficanonymous traffic. For shared hosting this is your best option . For shared hosting this is your best option

in terms of improving performance.in terms of improving performance.

BoostBoostBoost provides static page caching for Drupal enabling a very Boost provides static page caching for Drupal enabling a very

significant performance and scalability boost for sites that receive significant performance and scalability boost for sites that receive mostly mostly anonymous trafficanonymous traffic. For shared hosting this is your best option . For shared hosting this is your best option

in terms of improving performance.in terms of improving performance.

Caching:Caching:

APCAPCOpcode cache for PHP.Opcode cache for PHP.

APCAPCOpcode cache for PHP.Opcode cache for PHP.

Caching:Caching:

FlexibilityFlexibilityFlexibilityFlexibility

HooksHooksInternal Drupal callbacks.Internal Drupal callbacks.

HooksHooksInternal Drupal callbacks.Internal Drupal callbacks.

Flexibility:Flexibility:

APIAPIApplication Programming Interface, a particular set of code and Application Programming Interface, a particular set of code and

specs that software programs can follow to communicate with each specs that software programs can follow to communicate with each other.other.

APIAPIApplication Programming Interface, a particular set of code and Application Programming Interface, a particular set of code and

specs that software programs can follow to communicate with each specs that software programs can follow to communicate with each other.other.

Flexibility:Flexibility:

Plethora of Plethora of Contributed Modules Contributed Modules

and Themesand Themes

Plethora of Plethora of Contributed Modules Contributed Modules

and Themesand Themes

Flexibility:Flexibility:

DocumentationDocumentationDocumentationDocumentation

DrushDrushThe coolest CLI tool to manage your Drupal site.The coolest CLI tool to manage your Drupal site.

DrushDrushThe coolest CLI tool to manage your Drupal site.The coolest CLI tool to manage your Drupal site.

Use in Use in DeploymentDeployment

Use in Use in DeploymentDeployment

Drush:Drush:

Remote Remote ManagementManagement

Site alias. Site alias. Ex: drush @[SITE].[ENV] vset maintenance_mode 0 -yEx: drush @[SITE].[ENV] vset maintenance_mode 0 -y

Remote Remote ManagementManagement

Site alias. Site alias. Ex: drush @[SITE].[ENV] vset maintenance_mode 0 -yEx: drush @[SITE].[ENV] vset maintenance_mode 0 -y

Drush:Drush:

Module Module ManagementManagement

Module Module ManagementManagement

Drush:Drush:

User User ManagementManagement

User User ManagementManagement

Drush:Drush:

Role Role ManagementManagement

Role Role ManagementManagement

Drush:Drush:

DB ManagementDB ManagementDB ManagementDB Management

Drush:Drush:

BackupBackupBackupBackup

Drush:Drush:

Clearing of CacheClearing of CacheClearing of CacheClearing of Cache

Drush:Drush:

Site Site MaintenanceMaintenance

Site Site MaintenanceMaintenance

Drush:Drush:

Content Content ManagementManagement

Content Content ManagementManagement

TaxonomyTaxonomyA powerful category system (taxonomy) that allows you to organize A powerful category system (taxonomy) that allows you to organize

and tag content.and tag content.

TaxonomyTaxonomyA powerful category system (taxonomy) that allows you to organize A powerful category system (taxonomy) that allows you to organize

and tag content.and tag content.

Content Management:Content Management:

Content TypesContent TypesArticle, News, Events, Listings, etc ...Article, News, Events, Listings, etc ...

Content TypesContent TypesArticle, News, Events, Listings, etc ...Article, News, Events, Listings, etc ...

Content Management:Content Management:

Questions?Questions?Questions?Questions?

Thank You!Thank You!Thank You!Thank You!

1. 1. http://drupal.orghttp://drupal.org2. 2. http://drupal.stackexchange.comhttp://drupal.stackexchange.com3. 3. https://drupal.org/communityhttps://drupal.org/community4. https://drupal.org/coding-standards4. https://drupal.org/coding-standards5. https://drupal.org/developing/best-practices5. https://drupal.org/developing/best-practices6. 6. http://stauffer.com/blog/2013/03/22/why-drupal-greatest-cms-earthhttp://stauffer.com/blog/2013/03/22/why-drupal-greatest-cms-earth7. 7. http://drush.wshttp://drush.ws8. https://github.com/drush-ops/drush8. https://github.com/drush-ops/drush

1. 1. http://drupal.orghttp://drupal.org2. 2. http://drupal.stackexchange.comhttp://drupal.stackexchange.com3. 3. https://drupal.org/communityhttps://drupal.org/community4. https://drupal.org/coding-standards4. https://drupal.org/coding-standards5. https://drupal.org/developing/best-practices5. https://drupal.org/developing/best-practices6. 6. http://stauffer.com/blog/2013/03/22/why-drupal-greatest-cms-earthhttp://stauffer.com/blog/2013/03/22/why-drupal-greatest-cms-earth7. 7. http://drush.wshttp://drush.ws8. https://github.com/drush-ops/drush8. https://github.com/drush-ops/drush

References:References:References:References:

Recommended