1. Understanding Drupal 1.1 Concept: Drupal as a CMS CMS Definition: Software tool for adding, publishing, editing, or removing website content via a web browser. Drupal: Flexible CMS based on LAMP stack (Linux, Apache, MySQL, PHP), with modular design. Drupal Core: Base download with essential CMS functionality, optional modules/themes, JS, CSS, and image assets. Reasons to use Drupal: General-purpose, robust basic functionality (user accounts, content management), open-source license. 1.2 Concept: Modules Definition: Sets of PHP, JavaScript, and/or CSS files that extend site features and add functionality. Enabled/disabled by installing/uninstalling. Core modules include User, Node, Field, Field UI, Menu UI, Views, Views UI. Additional modules available on Drupal.org or custom-built. 1.3 Concept: Themes Definition: Sets of files defining the visual look and feel of a site. Determines HTML markup and CSS styling around content. Core provides basic themes; many 3rd party themes (free/paid) available. Custom themes can be simple (single CSS file) or complex. 1.4 Concept: Distributions Definition: Single download providing site features and functions for a specific site type. Includes core software, contributed modules, themes, and pre-defined configuration. Types: Full-featured: Complete solution for specialized purposes (academic, business). Other: Quick-start tools for developers/site builders. 1.5 Concept: Types of Data Content: Information (text, images) displayed to site visitors; relatively permanent, editable. Configuration: Site information defining behavior/display, not content; relatively permanent, smaller text pieces (field labels, site name). State: Temporary information about site's current state (e.g., cron run times). Session: Subtype of State; information about individual visitor interactions (login status, cookies). 1.6 Concept: The Drupal Project FOSS: Free and Open Source Software, developed by a community, non-commercial license, source code freely available. Drupal Project: FOSS project developing core CMS, add-on modules, themes, translations, documentation, distributions. Community: Diverse global contributors. Drupal Association: Non-profit supporting the project (conventions, Drupal.org maintenance, promotion, grants, funding). 1.7 Concept: Drupal Licensing Drupal and contributed files on Drupal.org are licensed under GNU General Public License (GPL), version 2 or later. Allows free download, reuse, modification, distribution under GPLv2/v3 terms. Contributors retain copyright but release under same license. Drupal modules/themes are derivative works, must be distributed under GPLv2 or later. Content on Drupal.org is CC BY-SA 2.0 licensed. 2. Planning Your Site 2.1 Concept: Regions in a Theme Definition: Named areas in a theme (e.g., Header, Content, Sidebar) where content can be placed. Available regions vary by theme. The Content region is required; others are optional. 2.2 Planning Your Site Layout List information your site should present. Decide which information goes on which page/page type. Identify most important information per page. Decide main navigation items. Sketch designs for mobile and desktop, prioritizing phone-size layout. 2.3 Concept: Content Entities and Fields Content Entity (Entity): Item of content data (text, HTML, images, files) intended for display. Grouped into Entity Types , further divided into Entity Subtypes . Common Content Entity Types: Content item (Content type): Main page content (e.g., Basic page, Vendor, Recipe). Comment (Comment type): Commentary on content. User profile (none): Data related to user accounts. Custom block (Block type): Smaller chunks of text/images (e.g., hours/location in sidebar). Taxonomy term (Vocabulary): Used to classify content (e.g., Ingredients). File (none): Image or attachment file managed by the site. Contact form (Form type): Form for visitors to contact site owners. Field: Individual data storage within entities (e.g., formatted text, images, dates). Configurable by administrators on entity subtypes. 2.4 Concept: Modular Content Definition: Content generated automatically from other content items, rather than being edited as a whole page. Each piece of information is edited in one place (e.g., vendor info updated once, reflects on all recipe pages). Core Views module helps create composite pages/sections. View modes define different display methods for content items. 2.5 Planning your Content Structure Brainstorm required content. Decide best-fit content entity type for each piece. Divide into entity subtypes (e.g., Basic page, Vendor, Recipe content types). Determine fields needed for each subtype. Plan entity listings (pages/sections), including filters, sorting, displayed fields. Identify data type and allowed values for each field. Consider taxonomy term references for lists of allowed values. Consider references to other content entities. Example Farmers Market Structure: Entity type Entity subtype Examples Fields Content item Basic page Home page, about page Title, page body Content item Vendor A page for each vendor at the market Vendor name, page body, image, URL Content item Recipe A page for each submitted recipe Recipe name, page body, image, reference to Vendor, Ingredients taxonomy Custom block (generic) Copyright notice for footer, Hours and location for sidebar No special fields Taxonomy term Ingredients Carrots, tomatoes, and other recipe ingredients No special fields Contact form (generic) Generic contact form Name, email, subject, message User profile (none) Will not be displayed on site No special fields 2.6 Concept: Editorial Workflow Definition: Process for creating, reviewing, editing, and publishing content, involving multiple roles. Tools: Published/Unpublished status: Content items can be marked, with separate viewing permissions. Revision tracking: Stores older revisions for comparison/revert. Workflows module: Define workflow states and transitions (beyond published/unpublished). Content Moderation module: Assign permissions/roles to workflow transitions. Block placement: Create custom blocks, make visible when ready. 2.7 Concept: User Interface, Configuration, and Content translation Base Language: English for core, modules, themes. Sites can have non-English default or be multilingual. Translatable Information Types: User interface text: Built-in text (core, modules, themes). Can be downloaded; requires Interface Translation module. Configuration text: Editable text (field labels, site name). Translations included with UI text downloads; requires Configuration Translation module. Content text and files: Content fields can be translatable; requires Content Translation module. English elements: Administrative pages for configuration editing often remain in English; translating configuration is a separate step. 3. Installation 3.1 Concept: Server Requirements Disk space: ~100MB for core, more for modules, themes, media, backups, database. PHP: 8.1 or higher, minimum 64MB memory (more recommended). Required PHP extensions vary but are usually pre-installed by hosts. Web server: Apache (Recommended): 2.4.7+ (UNIX/Linux, OS X, Windows), with mod_rewrite enabled, AllowOverride All . PHP Local Server: Temporary local demo sites. Nginx: 0.7+ (UNIX/Linux, OS X, Windows), with ngx_http_rewrite_module . Microsoft IIS: 5, 6, 7, 8, or 10, with correct PHP config and URL Rewrite module for clean URLs. Database: MySQL: 5.7.8+ (MariaDB 10.3.7+, Percona 5.7.8+), InnoDB-compatible. PostgreSQL: 10.0+ with pg_trgm extension. SQLite: 3.26+ (for temporary local demo sites). 3.2 Concept: Additional Tools Drush & Drupal Console: Command-line tools for site operations (faster, automate tasks, additional functionality). Drush for core/contributed modules, Drupal Console for module programmers/site builders. Git: Version control system for keeping copies of files, revision history, merging changes, synchronizing sites. Composer: PHP dependency manager for downloading and installing libraries. Used by core, Drush, Drupal Console, and some contributed modules. Devel: Contributed module for debugging, inspecting code, analyzing database queries, generating dummy content. Drupal Console: Generates boilerplate code, interacts with Drupal sites. Coder: Checks modules/themes for coding standard compliance. Browser debugging tools: For CSS, HTML, JavaScript. 3.3 Concept: Methods for Downloading and Installing the Core Software Downloading Methods: Free online demo. One-click installer from hosting provider. Pre-configured environment/virtual machine. Manually from Drupal.org (for simple sites). Using Composer (recommended for complex sites or Drush use). Installation Methods: Behind-the-scenes installer (online demos, one-click). Interactive installer (on-line forms). Demo site installer (local temp site with PHP built-in server/SQLite). Command-line tool (Drush). 3.4 Preparing to Install Choose download/install methods. Set up URL and hosting, verify with simple HTML file. Create database and database user with full access. Download core software files to web root. 3.5 Using Composer to Download and Update Files Prerequisite: Composer installed. Updating files: If unable to install Composer on live server, transfer updated directories (vendor, autoload.php, composer.json, composer.lock) from local to live. Downloading Core: composer create-project drupal/recommended-project mydir Converting existing site to Composer: For Drupal 8.8.0+, files have config; add non-core modules/themes via composer require drupal/module_name . For older versions, see Drupal.org guide. Downloading Module/Theme: composer require drupal/short_name Updating Files: composer update drupal/short_name --with-dependencies (latest stable) or composer require drupal/short_name:version (specific version). 3.6 Downloading the Core Software Manually Go to Drupal.org > Build > Download & Extend. Download core software (zip/tar.gz) or a distribution. Upload to hosting account (HTML directory). Uncompress the file. Delete compressed file. Rename directory or reconfigure web hosting to match site's configured directory. 3.7 Running the Interactive Installer Open browser to site URL. Select language (e.g., English ), click Save and continue . Select installation profile (e.g., Standard ), click Save and continue . System requirements check (correct issues if any). Provide database details (name, username, password), click Save and continue . Installation progress bar. Configure site information (Site name: Anytown Farmers Market , Site email: info@example.com , Username: admin , secure password, Email address: admin@example.com ). Click Save and continue . Redirected to front page with "Congratulations" message. Optional: Fix file permissions for sites/default and sites/default/settings.php to be read-only. 4. Basic Site Configuration 4.1 Concept: Administrative Overview Administrative Menu (Toolbar module): Top/left menu for users with permission. Links vary by active modules/permissions. Content, Structure, Appearance, Extend, Configuration, People, Reports, Help. Toggle horizontal/vertical format. Contextual Links (Contextual Links module): Pencil icons near content for direct access to administrative/editing pages. 4.2 Editing Basic Site Information Navigate to Configuration > System > Basic site settings (admin/config/system/site-information). Site details: Site name: Anytown Farmers Market Slogan: Farm Fresh Food Email address: info@example.com Click Save configuration . Navigate to Configuration > Regional and language > Regional settings (admin/config/regional/settings). Locale: Default country: United States First day of week: Sunday Time zones: Default time zone: America > Los Angeles Users may set their own time zone: Unchecked Click Save configuration . 4.3 Installing a Module Administrative Interface: Navigate to Extend (admin/modules). Check modules to install (e.g., Actions UI). Click Install . Drush: Find module's machine name (e.g., action for Actions UI). Run drush pm:enable action . 4.4 Uninstalling Unused Modules Administrative Interface: Navigate to Extend > Uninstall (admin/modules/uninstall). Check modules to uninstall (Search, History, Actions UI). Click Uninstall (cannot uninstall if required by other modules). Confirm by clicking Uninstall . Drush: Find module's machine name (e.g., action ). Run drush pm:uninstall action . 4.5 Configuring User Account Settings Navigate to Configuration > People > Account settings (admin/config/people/accounts). Under Registration and cancellation , select Administrators only for user registration. Optionally, check Require email verification . Optionally, change default email address for notifications. Optionally, edit email templates under Emails . Click Save configuration . 4.6 Configuring the Theme Navigate to Appearance (admin/appearance). Under Olivero (default theme) , click Settings . Under Logo image , uncheck Use the logo supplied by the theme . Under Upload logo image , upload a logo file. Under Olivero Utilities , choose a color scheme or enter a custom color (e.g., #7db84a for Primary base color). Click Save configuration . Verify changes on the site. 5. Basic Page Management 5.1 Concept: Paths, Aliases, and URLs URL: Uniform Resource Locator, page's web address (e.g., example.com ). Path: Unique, last part of URL for a specific function/content (e.g., node/7 from http://example.com/node/7 ). Alias (URL Alias): User-friendly name for a path (e.g., /AboutUs for node/7 ). Provided by core Path module. 5.2 Creating a Content Item Navigate to Content > Add content > Basic page (node/add/page). Click Edit summary . Fields for Home page: Title: Home Summary: Opening times and location of City Market. Body: Welcome to City Market - your neighborhood farmers market! Open: Sundays, 9 AM to 2 PM, April to September Location: Parking lot of Trust Bank, 1st & Union, downtown Anytown. Published: Checked URL alias: /home Click Preview , then Back to content editing . Click Save . Repeat for an About page. 5.3 Editing a Content Item Navigate to Content (admin/content). Locate the content item (e.g., Home page). Click Edit in its row. Update the Body field (e.g., opening hours). Check Create new revision and add a Revision log message . Click Save . 5.4 Designating a Front Page for your Site Navigate to Configuration > System > Basic site settings (admin/config/system/site-information). Under Front page , replace /node with the desired path (e.g., /home ). Click Save configuration . Verify on site's home page. 5.5 Concept: Menu Definition: Collection of links for website navigation. Core Menu UI module manages the system. Displayed as hierarchical lists. New links usually go to Main navigation . Core menus (Standard profile): Main navigation, Administration, User account menu, Footer, Tools. Customization: Create new menus, add/reorder/rename links, change descriptions, move links. Links only shown if user has permission to view the linked page. 5.6 Adding a Page to the Navigation Navigate to Content (admin/content). Find About page, click Edit . Click Menu settings to expand. Check Provide a menu link . Menu options: Menu link title: About Description: History of the market Parent link: Weight: -2 Click Save . 5.7 Changing the Order of Navigation Navigate to Structure > Menus (admin/structure/menu). Click Edit Menu for Main navigation . Drag cross bar handles to reorder menu links (e.g., Home , then About ). Alternatively, use Show row weights . Click Save . Verify order on home page. 6. Setting Up Content Structure 6.1 Adding a Content Type Navigate to Structure > Content types (admin/structure/types). Click Add content type . Fields for Vendor: Name: Vendor Description: Information about a vendor Submission form settings: Title field label: Vendor name Preview before submitting: Optional Explanation or submission guidelines: (Leave blank) Publishing options: Published: Checked Promoted to front page: Unchecked Sticky at top of lists: Unchecked Create new revision: Checked Display settings: Display author and date information: Unchecked Menu settings: Available menus: Unchecked all. Click Save and manage fields . Repeat for Recipe content type (Name: Recipe , Description: A recipe submitted by a vendor , Title field label: Recipe name ). 6.2 Deleting a Content Type Navigate to Structure > Content types (admin/structure/types). Click Delete in the Operations dropdown for Article content type. Confirm by clicking Delete . 6.3 Adding Basic Fields to a Content Type Navigate to Structure > Content types , then Manage fields for Vendor content type. Click Add field . For Vendor URL: Label: Vendor URL Field type: Link Click Continue . Configure field: Label: Vendor URL Allowed number of values: Limited, 1 Help text: (Leave blank) Required field: Unchecked Allowed link type: External links only Allow link text: Disabled Click Save settings . Click Add field . For Main image: Label: Main image Field type: File upload , then Image Click Continue . Configure field: Label: Main image Allowed number of values: Limited, 1 Default image: (Leave blank) Help text: (Leave blank) Required field: Checked Allowed file extensions: png, gif, jpg, jpeg File directory: vendors Minimum image dimensions: 600 x 600 Maximum upload size: 5 MB Enable Alt field: Checked Alt field required: Checked Click Save settings . Add Main image to Recipe content type (re-use existing field). Create two Vendor content items ( Happy Farm , Sweet Honey ) with images and URLs. 6.4 Concept: Reference Fields Definition: Field representing a relationship between entities. Types: Content reference: Links to a content item (e.g., Recipe to Vendor). Taxonomy term reference: Links to a taxonomy term (e.g., Recipe to Ingredients vocabulary). User reference: Links to a user account. 6.5 Concept: Taxonomy Definition: Used to classify website content. Terms: Individual taxonomy entities (e.g., blog tags, recipe ingredients). Vocabulary: Set of terms (e.g., all blog post tags, all recipe ingredients). Vocabularies can be hierarchical or flat. Terms can have fields. Attached as reference fields to other entities. Term entry: Free tagging: New terms created on content editing form. Fixed list: Only existing terms can be chosen. Automatically creates taxonomy listing pages for each term. 6.6 Setting Up a Taxonomy Navigate to Structure > Taxonomy (admin/structure/taxonomy). Click Add vocabulary . For Ingredients: Name: Ingredients Description: (Leave blank) Click Save . Click Add term . Enter Butter in Name field, click Save . Add Eggs and Milk . Navigate to Structure > Content Types , then Manage fields for Recipe content type. Click Add field . For Ingredients field: Label: Ingredients Field type: Reference > Taxonomy term Click Save and continue . Configure field: Help text: Enter ingredients that site visitors might want to search for Type of item to reference: Taxonomy term Allowed number of values: Unlimited Reference method: Default Vocabulary: Ingredients Create referenced entities if they don’t already exist: Checked Click Save settings . 6.7 Adding a Reference Field Navigate to Structure > Content types , then Manage fields for Recipe content type. Click Add field . For Submitted by: Add a new field: Reference > Content Label: Submitted by Click Save and continue . Configure field (allowed values): Type of item to reference: Content Allowed number of values: Limited, 1 Click Save settings . Configure field (settings): Label: Submitted by Help text: Choose the vendor that submitted this recipe Required field: Checked Reference method: Default Content type: Vendor Sort by: Vendor name Sort direction: Ascending Click Save settings . 6.8 Concept: Forms and Widgets Forms: Web forms for administrators to edit content and configure settings. Content editing forms are configurable. Widgets: Define method for entering field data (e.g., autocomplete, select list). Configurable for each field on entity subtypes. Can configure widget settings (e.g., size of text field). Can hide/reorder fields. Multiple editing forms possible for entity subtypes (rarely used, except for user profile fields). 6.9 Changing Content Entry Forms Navigate to Content > Add content > Recipe (node/add/recipe) to see default form. Navigate to Structure > Content types , then Manage form display for Recipe content type. For Ingredients field, select Autocomplete (Tags style) in Widget column. Click Save . Verify changed behavior on Content > Add content > Recipe . Create two Recipe content items (e.g., Green Salad , Fresh Carrots ) with all fields, images, ingredients, and submitted by vendor. 6.10 Concept: View Modes and Formatters View mode: Context in which an entity is displayed (e.g., full page, teaser). Configurable to show/hide fields and apply formatters. Field formatter: Setting for displaying field values (e.g., trimmed text, linked taxonomy term). 6.11 Changing Content Display View a Vendor content item to identify display issues (e.g., labels, order, image size). Navigate to Structure > Content types , then Manage display for Vendor content type. For Main image and Vendor URL , select Hidden under Label column. Click gear wheel for Vendor URL field. Trim link text length: Blank Open link in new window: Checked Click Update . Drag fields to reorder ( Main image , Body , Vendor URL , Links ). Click Save . Verify changes on Vendor content item. Repeat similar steps for Recipe content type. 6.12 Concept: Image Styles Definition: Allows uploading a single image but displaying it in multiple variations by applying effects. Process: Configure image style with desired effects (admin/config/media/image-styles). Effects applied first time image requested in that style. Resulting image saved. Subsequent requests retrieve saved image. Core software provides various effects. 6.13 Setting Up an Image Style Navigate to Configuration > Media > Image styles (admin/config/media/image-styles). Click Add image style . Enter Extra medium (300x200) . Click Create new style . In Effect table, select Scale and crop , click Add . Configure effect: Width: 300 Height: 200 Click Add effect . Navigate to Structure > Content types . Click Manage display for Vendor content type. Click gear wheel for Main image field. Configure field: Image style: Extra medium (300x200) Link image to: Nothing Click Update . Click Save . Verify scaled image on Vendor content item. Repeat for Recipe content type. 6.14 Concept: Responsive Image Styles Core Responsive Image module provides responsive image styles. Images sized for different screen sizes (faster loading on mobile). Mapping between image styles and breakpoints (where design changes for screen size). Can use theme-defined or responsive image style-defined breakpoints. Used in display settings for Image fields, rendering with HTML5 picture tag or srcset / sizes attributes. 6.15 Concept: Text Formats and Editors Text formats: Change how HTML tags and text are processed/displayed. Composed of filters. Full text stored in database, filtered before display. Core Filter module provides functionality. Standard profile includes Basic HTML, Restricted HTML, Full HTML. Permissions control access to permissive text formats (e.g., Basic HTML filters dangerous tags). Editors: Each text format can be associated with a visual WYSIWYG editor (e.g., CKEditor via core CKEditor module). Configurable toolbars. Cross-site scripting (XSS): Security vulnerability where malicious script can be injected. Text formats must be configured to prevent this. 6.16 Configuring Text Formats and Editors Navigate to Configuration > Content authoring > Text formats and editors (admin/config/content/formats). Click Configure for Basic HTML . Verify CKEditor is selected as Text editor . Drag horizontal line button from Available buttons to Active toolbar . Under Filter settings > Limit allowed HTML tags and correct faulty HTML , verify is present. Click Save configuration . 7. Managing User Accounts 7.1 Concept: Users, Roles, and Permissions Users: Anonymous (not logged in), Authenticated (logged in), Administrative User 1. Permissions: Ability to perform actions (view/edit content, change config). Defined by modules, granted to roles. Roles: Group permissions. Authenticated and Anonymous roles exist by default. Administrator role often created by install profile. User accounts can be assigned multiple roles. Best practice to create specific roles (e.g., Vendor, Content editor, User manager, Administrator). 7.2 Concept: The User 1 Account First user account created during installation, ID is 1. Special: has all permissions regardless of assigned roles (often called "root user"). Recommendation: Create separate administrative accounts with Administrator role for clarity, security, and accountability. User 1 account cannot be deleted via administrative interface. 7.3 Creating a Role Navigate to People > Roles (admin/people/roles). Click Add Role . Type Vendor in Role name field. Click Save . 7.4 Creating a User Account Navigate to People (admin/people). Click Add user . Form fields: Email address: honey@example.com Username: Sweet Honey Password: (Secure password) Confirm password: (Repeat password) Status: Active Roles: Vendor Notify user of new account: Checked Picture: (Upload photo) Contact settings: Checked Click Create new account . Repeat for Happy Farm vendor. 7.5 Assigning Permissions to a Role Navigate to People > Roles (admin/people/roles). Click Edit permissions for Vendor role. Check following permissions: Contact: Use users’ personal contact forms Filter: Use the Restricted HTML text format Node: Recipe: Create new content Node: Recipe: Edit own content Node: Recipe: Delete own content Node: Vendor: Edit own content Click Save permissions . 7.6 Changing a User’s Roles Single-user editing: Navigate to People (admin/people). Locate user (e.g., admin ), click Edit . Scroll to Roles section, check Administrator . Click Save . Bulk editing: Navigate to People (admin/people). Locate users (e.g., Sweet Honey , Happy Farm ), check them. Select Add the Vendor role to the selected user(s) from Action list. Click Apply to selected items . 7.7 Assigning Authors to Content Navigate to Content (admin/content). Find Vendor content item (e.g., Happy Farm ), click Edit . Under Authoring information , start typing Happy Farm in Authored by field, select from list. Click Save . Repeat for Sweet Honey . 8. Blocks 8.1 Concept: Blocks Definition: Individual pieces of site's web page layout. Placed in theme regions. Managed on Block layout page (admin/structure/block). Examples: Who's online listing, main navigation, breadcrumb, main page content. Modules can make new blocks available (e.g., Search form from Search module). Custom blocks can be created. Each block has configuration settings for page display. Multiple copies possible. 8.2 Creating A Custom Block Navigate to Content > Blocks (admin/content/block). Click Add content block . Fields: Block description: Hours and location block Body: Open: Sundays, 9 AM to 2 PM, April to September Location: Parking lot of Trust Bank, 1st & Union, downtown Anytown. Click Save . 8.3 Placing a Block in a Region Navigate to Structure > Block layout (admin/structure/block). Ensure Olivero theme is selected. Locate Sidebar region, click Place block . Locate Opening hours and location block, click Place block . Configure block: Title: Hours and location Display title: Checked Region: Sidebar second Click Save block . Drag cross bar handles to reorder blocks within region, if needed. Click Save blocks . 9. Creating Listings with Views 9.1 Concept: Uses of Views Definition: A listing of content on a website. Core Views module handles display, Views UI module allows creation/editing. Displays data from virtually any content entity. Examples: Lists of vendors, recipes, recent content, users. Output forms: Table (sortable), grid, teasers/pictures, blocks, JSON, RSS, calendars, slideshows. 9.2 Concept: The Parts of a View Display: One or more outputs per view (Page, Block, Feed, Attachment). Format: Data output style (table, grid, HTML list; rendered entities or fields). Fields: Which content fields are output. Filter criteria: Limits data based on criteria (published, content type, field value). Can be exposed to users. Sort criteria: Defines output order. Contextual filters: Filters based on view display context (URL, date, etc.). Relationships: Expands displayed data by linking base content to other entities (e.g., author field links content to user). 9.3 Creating a Content List View Navigate to Structure > Views > Add view (admin/structure/views/add). View basic information: View name: Vendors View settings: Show: Content of type: Vendor sorted by: Title Page settings: Create a page: Checked Page title: Vendors Path: vendors Display format: Table Items to display: 10 Use a pager: Checked Create a menu link: Checked Menu: Main navigation Link text: Vendors Click Save and edit . Under Fields , click Add . Search for "image", check Main image , click Apply . Configure field: Content: Main Image: Create a label: Unchecked Image style: Medium (220x220) Link image to: Content Click Apply . Under Fields , click Add . Search for "body", check Body , click Apply . Configure field: Content: Body: Create a label: Unchecked Formatter: Summary or trimmed Trimmed limit: 120 Click Apply . Under Fields , click Content: Title (Title) . Uncheck Create a label , click Apply . Under Fields , click Rearrange . Drag fields to order: Image , Title , Body . Click Apply . Optionally, click Update preview . Click Save . Navigate to homepage, click Vendors in main navigation. 9.4 Duplicating a View Navigate to Structure > Views (admin/structure/views). Find "Vendors", click Duplicate . Name duplicate "Recipes", click Duplicate . Change Title field (under Title ) from "Vendors" to "Recipes", click Apply . Change Format field (under Format ) from "Table" to Grid . Click Apply . Retain default style options, click Apply . Remove Content: Body field (under Fields ) by clicking Remove . Change Content: Type (=Vendor) filter (under Filter criteria ) to Recipe (uncheck Vendor ). Click Apply . Add filter: Click Add (under Filter criteria ). Search "ingredients", check Ingredients (field_ingredients) , click Add and configure filter criteria . Click Apply and continue (for vocabulary/selection type). Expose filter: Expose this filter to visitors...: Checked Required: Unchecked Label: Find recipes using… Click Apply . Change Path field (under Page settings ) from "/vendors" to "recipes", click Apply . Change Menu field (under Page settings ) from "Normal: Vendors" to "Recipes", click Apply . Under Advanced > Other , click No in Use AJAX field. Check Use AJAX , click Apply . Click Save . Go to homepage, click Recipes in navigation. 9.5 Adding a Block Display to a View Navigate to Structure > Views , find "Recipes", click Edit . Click Add under Displays , then Block . Change Administrative name (under Block ) to "Recent recipes", click Apply . Change Title field (under Title ) from "Recipes" to "New recipes" (select This block (override) ), click Apply (this display) . Change Format field (under Format ) from "Grid" to Unformatted list (select This block (override) ), click Apply (this display) . Configure style options, click Apply . Configure Content: Main image field (under Fields ). Select This block (override) , set Image style to Thumbnail (100x100) . Click Apply (this display) . Remove Content: Ingredients (exposed) filter (under Filter criteria ). Select This block (override) , click Remove . Add Authored on to Sort criteria (under Sort criteria ). Select This block (override) . Check Authored on , click Add and configure sort criteria . Select Sort descending , click Apply . Configure Pager (under Pager ). Select This block (override) , choose Display a specified number of items , set Items to display to 5 . Click Apply . Click Save . Place "Recipes: Recent Recipes" block in Sidebar second region. 10. Making Your Site Multilingual 10.1 Adding a Language Install four core multilingual modules: Language, Interface Translation, Content Translation, Configuration Translation. Navigate to Configuration > Region and language > Languages (admin/config/regional/language). Click Add language . Select Spanish (or preferred language) from list, click Add language . Place Language switcher block in Sidebar second region. 10.2 Configuring Content Translation Navigate to Configuration > Regional and language > Content language and translation (admin/config/regional/content-language). Under Custom language settings , check Content , Content block , and Custom menu link . Choose subtypes to translate: Basic page for Content , Basic block for Content block , Custom menu link for Custom menu link . Verify settings for entity types: Default language: Site’s default language (English) Show language selector on create and edit pages: Checked Choose translatable fields for Basic page (e.g., Title , Published , URL alias , Body are Checked; Authored by , Authored on , Changed , Promoted to front page , Sticky at top of lists are Unchecked). Similarly, check appropriate boxes for Basic block and Custom menu link . Click Save configuration . 10.3 Translating Content Navigate to Content (admin/content). Locate Home page. Select Translate from dropdown in Home row. Click Add in Spanish row. (Optional: Remove "es" from URL to switch UI back to English if needed). Fill in translated fields: Title: Página principal Body: Bienvenido al mercado de la ciudad - ¡el mercado de agricultores de tu barrio! Horario: Domingos de 9:00 a 14:00. Desde Abril a Septiembre Lugar: parking del Banco Trust número 1. En el centro de la ciudad URL alias: pagina-principal Click Save (this translation) . View translated page on site's home page. 10.4 Translating Configuration Navigate to Configuration > Regional and Language > Configuration translation (admin/config/regional/config-translation). Click List in Views row. Click Translate in Recipes row. Click Add in Spanish row. Under Displays > Master Display settings > Recipes default display Options , translate Display title from "Recipes" to "Recetas". Under Exposed form > Reset options , translate Submit button text from "Apply" to "Applicar". Under Filters > (Empty) taxonomy term ID > Find recipes using… Expose , translate Label from "Find recipes using…" to "Encontrar recetas usando…". Click Save translation . Navigate to Recipes page, switch to Spanish, verify translations. 11. Extending and Customizing Your Site 11.1 Finding Modules Go to Drupal.org > Download & Extend > Modules. Filter search (e.g., Maintenance status: Actively maintained , Core compatibility: 9.x , Status: Full projects , Stability: Has a supported stable release , Security advisory coverage: Has security advisory coverage , Search modules: Admin Toolbar , Sort by: Most installed ). Click Search . Evaluate module on its project page (description, project info, installs/downloads, maintainers, issues, documentation). 11.2 Enabling and Disabling Maintenance Mode Administrative Interface: Navigate to Configuration > Development > Maintenance mode (admin/config/development/maintenance). Check Put site into maintenance mode . Optional: Edit Message to display when in maintenance mode . Click Save configuration . To disable: Uncheck Put site into maintenance mode , click Save configuration . Drush: Enable: drush config:set system.maintenance message "Optional message" -y , drush state:set system.maintenance_mode 1 --input-format=integer , drush cache:rebuild . Disable: drush state:set system.maintenance_mode 0 --input-format=integer , drush cache:rebuild . 11.3 Downloading and Installing a Module from Drupal.org Administrative Interface: On module's Drupal.org project page, copy tar.gz link from Downloads . Navigate to Extend (admin/modules). Click Add new module . Paste link in Add from a URL field. Click Continue . Click Enable newly added modules . Locate module (e.g., Admin toolbar ), check it. Click Install . Drush: Find project name (last part of project page URL). Download module (manually or Composer). Run drush pm:enable project_name . 11.4 Finding Themes Go to Drupal.org > Download & Extend > Themes. Filter search (e.g., Maintenance status: Actively maintained , Core compatibility: 9.x , Status: Full projects , Stability: Has a supported stable release , Security advisory coverage: Has security advisory coverage , Sort by: Most installed ). Click Search . Evaluate theme on its project page (description, screenshot, project info, installs/downloads, issues, documentation). 11.5 Downloading and Installing a Theme from Drupal.org Administrative Interface: On theme's Drupal.org project page, copy tar.gz link from Downloads . Navigate to Appearance (admin/appearance). Click Add new theme . Paste link in Add from a URL field. Click Continue . Click Install newly added themes . Locate new theme under Uninstalled themes , click Install and set as default . Drush: Find project name. Download theme (manually or Composer). Run drush theme:enable project_name , then drush config:set system.theme default project_name . 11.6 Manually Downloading Module or Theme Files When to use: File permission issues, FTP issues, custom module/theme, website/Drush methods fail. Downloading: Open project page, scroll to Downloads . Click tar.gz to download, or use wget command with link. Uploading & Unpacking: (New module/theme) Create contrib subdirectory in modules / themes . (Updating) Put site in maintenance mode. (Updating) Delete existing module/theme files. Upload .tar.gz (or archive) to appropriate directory. Extract files (creates subdirectory). Delete compressed file. Complete installation/update (refer back to module/theme specific instructions). 11.7 Concept: Development Sites Definition: Copies of a site for developing, updating, testing without affecting live site. Workflow: Local environment: Developers work on new features. Development site: Changes pushed, often using Git for version control. Staging site: Used for testing, client approval (QA, UAT). Recommended to have live content. Production site: Live site for visitors. 11.8 Making a Development Site Set up hosting, empty database for dev site. Make database dump file from live site (can compress, truncate cache tables). Drush: drush sql:dump --gzip --structure-tables-list="cache,cache_*" --result-file='PATH/TO/BACKUPFILE.sql' MySQL: mysqldump -u'USERNAME' -p'PASSWORD' DATABASENAME | gzip > PATH/TO/BACKUPFILE.sql.gz phpMyAdmin: Truncate cache tables, then Export SQL with gzip. Contributed Backup and Migrate module. Copy all files from live web root to dev web root. Edit sites/default/settings.php in dev site: update database name, username, password. Update $settings['trusted_host_patterns'] to dev URL. Ensure $settings['hash_salt'] is set to a unique random string. Import database dump into dev site's database. Use configuration overrides in settings.php for dev-specific settings (e.g., site name). 11.9 Deploying New Site Features (On dev site) Navigate to Configuration > Development > Configuration synchronization > Export > Single item . Select View , then Vendors . Copy configuration from textarea. (On production site) Navigate to Configuration > Development > Configuration synchronization > Import > Single item . Select View . Paste configuration. Click Import . Confirm. Verify import (e.g., Structure > Views ). 11.10 Synchronizing Configuration Versions (On source site) Navigate to Configuration > Development > Configuration synchronization > Export . Click Export . Save archive to local computer. (On destination site) Navigate to Configuration > Development > Configuration synchronization > Import . Browse for downloaded archive, click Upload . Review differences on synchronize page. Click Import all . 11.11 Managing File and Configuration Revisions with Git Initializing repository: Open terminal, change to site's top directory. Identify web root. Create/edit .gitignore in top directory ( sites/*/settings*.php , sites/*/files , config ). git init , git add -A . (Optional) git status to verify. git commit -m "Initial file add" . git remote add origin https://gitlab.com/example-name/example-repo.git . git push -u origin master . Updating files: git status to see changes. (Optional) git diff path/to/file.txt . git add -A (stage changes). git commit -m "commit message here" , git push . (Other copies) git pull . Copying files from repository: git clone https://gitlab.com/example-name/example-repo.git dirname Managing configuration in repository: Export full configuration archive (Section 11.10). Unpack archive into new directory (preferably outside web root), add to Git. On config changes, export/unpack again, update files in repository. To import to another site, make archive of config directory, import (Section 11.10). 12. Preventing and Fixing Problems 12.1 Concept: Cache Page cache: Stores intermediate results and final page output to speed up page load times. Core Internal Page Cache and Dynamic Page Cache modules use database caching. Affected cached data removed when content/data updates. Problems: corrupted data, outdated data, insufficient caching. Other cached data: Theme system caches template file info. Optimized CSS/JavaScript files stored in file system. System caches low-level PHP functions/classes. 12.2 Clearing the Cache Administrative Interface: Navigate to Configuration > Development > Performance (admin/config/development/performance). Click Clear all caches . Rebuild script: Add $settings['rebuild_access'] = TRUE; to sites/default/settings.php . Visit http://www.example.com/core/rebuild.php . Remove $settings['rebuild_access'] = TRUE; from settings.php . Drush: drush cache:rebuild (clears and rebuilds all). drush cache:clear (lists individual caches to choose from). drush cache:clear render (clears specific cache, e.g., render). 12.3 Concept: Data Backups Purpose: Prevent permanent data loss from computer failure, hacking, or accidental deletion. Frequency: Depends on site change rate; keep multiple backups. Verification: Test restoring data from backups. Complete backup includes: sites directory (including sites/default/settings.php ). Site's database data (can truncate cache tables). Uploaded files (usually sites/default/files ). Modules, themes, and customized software files. 12.4 Concept: Log Definition: Captures system events (usage, performance, errors, warnings). Found at Reports > Recent log messages (admin/reports/dblog). Logs may be cleared, not suitable for forensic logging (use Syslog module for that). 12.5 Concept: Status Report Definition: Overview of site parameters and detected problems. Found at Reports > Status report (admin/reports/status). Useful for support requests. 13. Security and Maintenance 13.1 Concept: Cron Cron tasks: Periodic administrative operations for site/module function (e.g., update checks, content indexing, file cleanup). Can be scheduled by Linux/Unix cron or core Automated Cron module. Status viewable in status report. 13.2 Configuring Cron Maintenance Tasks Review Status report for last cron run. Choose cron method: Automated Cron module: Default for Standard profile. Runs on page access, may not be suitable for low-traffic or long-running tasks. Configure interval at Configuration > System > Cron (admin/config/system/cron). External scheduler: Uninstall Automated Cron. Find cron URL (in Status report or Cron page). Use Cron daemon (Linux), Scheduled Tasks (Windows), cron SASS provider, or web host's cron manager to access URL regularly. 13.3 Concept: Security and Regular Updates Security updates: Fix security bugs in core, modules, themes. Critical updates announced on site admin pages. Apply promptly. Security team: Volunteers tracking security bugs, releasing updates, helping developers, maintaining security info. Reporting bugs: Confidential reporting via Drupal.org Security Team page. Regular updates: Add features, fix non-security bugs. Less critical. Test on development site before applying to live site. 13.4 Keeping Track of Updates Highly critical security announcements displayed on site admin pages. Configure email notifications for updates: Reports > Available updates > Settings . Subscribe to security announcements email list on Drupal.org. Follow @drupalsecurity on Twitter. Subscribe to RSS feeds for core/contributed project updates. 13.5 Updating the Core Software Backup your site. Edit settings.php : $settings['update_free_access'] = TRUE; Disable caching. Put site in maintenance mode. (If not Composer) Download new core tar.gz / zip from Drupal.org. Upload to temp directory. (If not Composer) Delete old core , vendor , and root files ( .htaccess , composer.json , autoload.php ). Copy new files from temp. Run update.php script ( http://www.example.com/update.php or drush updatedb ). Rerun if errors. Edit settings.php : $settings['update_free_access'] = FALSE; Take site out of maintenance mode. Clear cache. Re-enable caching. Verify updated version in Status report . 13.6 Updating a Module Check module-specific update instructions (project page, READMEs). Put site in maintenance mode. (If not Composer) Reports > Available updates > Update (admin/reports/updates/update). Check module, click Download these updates . Click Continue . Click Run database updates (or visit example.com/update.php ). Continue and apply all updates. Take site out of maintenance mode. Clear cache. 13.7 Updating a Theme Put site in maintenance mode. (If not Composer) Reports > Available updates > Update (admin/reports/updates/update). Check theme, click Download these updates . Click Continue . Click Run database updates (or visit example.com/update.php ). Continue to run updates. Take site out of maintenance mode. Clear cache. 14. Final Thoughts 14.1 Connecting with the Community Events: DrupalCon, Event Calendar (groups.drupal.org, drupical.com). Local groups: groups.drupal.org. Topical/language groups: groups.drupal.org, Drupal.org language communities. Chat: Slack, DrupalChat. Contribute: Developing modules/themes, translating UI, writing documentation, answering support. Reporting problems/features: Use issue queues (Drupal.org), search first. Security issues reported to security team. 14.2 Getting Support Free support: Slack/DrupalChat channels, local/language groups. Some contributed projects allow support requests in issues (check project documentation). Forums: Drupal.org Forums, Drupal Answers on StackExchange. Paid support: Drupal Marketplace. 14.3 Learning More Drupal Community Documentation Wiki: Basic to advanced topics. api.drupal.org: Reference for programmers. Drupal Planet: Aggregated blog posts about Drupal. Groups, events, meetups: (See 14.1). Training Marketplace: Paid training providers, Global Training Days for free/low-cost. Support sites: Useful for specific topics. 15. Glossary Ajax: Web technology to dynamically update parts of a web page without full reloads. Alias: User-friendly name for an internal URL path (e.g., /about for /node/5 ). Anonymous: User not logged in. Authenticated: User logged in. Block: Chunk of content displayed in theme regions. Breakpoint: Point where responsive design adjusts for different screen sizes. Bundle: Synonym for Entity subtype. Cache: Internal storage of time-consuming calculations to speed up site response. Coding standards: Rules for programmers to ensure consistent code. Composer: PHP dependency manager for installing Drupal projects. CMS: Content Management System. Configuration: Non-content site information (e.g., site name, content types). Content: Information displayed on site (text, images). Content item: Entity type for main page content. Content Management System (CMS): Tools for creating, modifying, organizing website information. Content type: Entity subtype for content items (e.g., basic page, vendor page). Contextual Filter (in a View): Filters view data based on context (e.g., URL). Contextual link: Link to administrative page for editing a feature, shown in context. Contributed: Modules, themes, distributions not part of Drupal core, downloaded from Drupal.org. Cron: Command scheduler for periodic tasks. Cross Site Scripting (XSS): Security vulnerability allowing malicious script injection. Devel: Module for development tasks (debugging, dummy content). Development site: Copy of live site for development/testing. Display (in a View): Type of view output (page, block, feed). Distribution: Single download for specific site types (core, modules, themes, pre-config). Drupal Association: Non-profit supporting Drupal project. Drupal core: Files, themes, profiles, modules in standard software download. Drupal console: Command line shell/scripting interface for Drupal. Drush: Command line shell/scripting interface for Drupal. Editorial Workflow: Process for creating, reviewing, editing, publishing content. Entity: Item of content or configuration data. Entity subtype: Grouping of entities sharing same fields within an entity type (synonym: bundle). Entity type: Overall type of an entity (e.g., content types, taxonomy terms). Field: Data attached to a content entity (e.g., image, text). Field bundle: Synonym for Entity subtype. Field formatter: Configuration for how field data is displayed. Field widget: Configuration for how field data is entered/edited on a form. Filter (in a View): Limits view data based on criteria (e.g., publication status). Formatter: See Field formatter. FOSS: Free and Open Source Software. Git: Version control system for managing code changes. GPL: GNU General Public License. Image style: Set of processing steps to transform an image. Installing: Preparing Drupal core/module/theme for usage. LAMP: Linux, Apache, MySQL, PHP stack. Log: List of recorded system events. Menu: Set of links for site navigation. Module: Software extending site features/functionality. Path: Unique last part of internal URL. Permission: Ability to perform an action on site. Reference field: Field representing relationship between entities. Region: Defined area of a page where content can be placed. Relationship (in a View): Expansion of view data by linking entities. Repository: Location where version control system stores project files. Responsive: Site/theme adjusts presentation to screen size. Revision: Record of past/present state of a content entity. Role: Named set of permissions applied to a user account. Security update: Update fixing security-related bug. Session: Information about individual site visitor interactions. Staging site: Copy of live site for testing/client approval. State: Temporary information about site's current state. Taxonomy: Process of classifying content. Taxonomy term: Term used to classify content. Text format: Configuration defining processing of user-entered text. Theme: Software/asset files determining site style/layout. UI: User Interface. Update: Newer version of site software. URL: Web page's unique address. User: Person interacting with site. User interface: Visible text, styles, images on site. User one (User 1): Initial user account with all permissions. Version Control System: Software managing file revisions. View: Formatted listing of data, typically from content entities. View mode: Set of field formatter configuration for entity fields. Vocabulary: Group of taxonomy terms. Widget: See Field widget. Wizard: Web form creating something with sensible defaults. Workflow: See Editorial Workflow. WYSIWYG: What You See Is What You Get editor. XSS: Cross Site Scripting.