<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:base="https://drupalize.me/">
  <channel>
    <title>11.0.x</title>
    <link>https://drupalize.me/</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Upgrade to Drupal 11</title>
  <link>https://drupalize.me/tutorial/upgrade-drupal-11</link>
  <description>&lt;span&gt;Upgrade to Drupal 11&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-10-31T16:00:13-05:00" title="Thursday, October 31, 2024 - 16:00" class="datetime"&gt;Thu, 10/31/2024 - 16:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3308&amp;amp;2=read" token="AwbLk5fDCrTGKdanYFjdnioP6cMCz6HisZ1ZC4wauVo"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3308&amp;amp;2=queue" token="QMKbqcnb01CP0R_RWPUTOIhgV-3oN1C5xz6we7Oka64"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/216" hreflang="en"&gt;Backend and Infrastructure&lt;/a&gt;&lt;/span&gt;&lt;span class="divider"&gt;,&lt;/span&gt;      &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/211" hreflang="en"&gt;Site Administration&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;There’s no one-size-fits-all path to upgrade from Drupal 10 to Drupal 11, but there is a set of common tasks that everyone will need to complete.&lt;/p&gt;
&lt;p&gt;In this tutorial we’ll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the differences between Drupal 10 and Drupal 11 that affect the upgrade path.&lt;/li&gt;
&lt;li&gt;Walk through the high-level steps required to upgrade from Drupal 10 to Drupal 11.&lt;/li&gt;
&lt;li&gt;Provide resources to help you create an upgrade checklist and start checking items off the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the major differences between Drupal 10 and 11.&lt;/li&gt;
&lt;li&gt;Audit your existing Drupal 10 projects for Drupal 11 readiness, and estimate the level of effort involved.&lt;/li&gt;
&lt;li&gt;Start the process of upgrading your site from Drupal 10 to Drupal 11.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;There’s no one-size-fits-all path to upgrade from Drupal 10 to Drupal 11, but there is a set of common tasks that everyone will need to complete.&lt;/p&gt;
&lt;p&gt;In this tutorial we’ll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the differences between Drupal 10 and Drupal 11 that affect the upgrade path.&lt;/li&gt;
&lt;li&gt;Walk through the high-level steps required to upgrade from Drupal 10 to Drupal 11.&lt;/li&gt;
&lt;li&gt;Provide resources to help you create an upgrade checklist and start checking items off the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the major differences between Drupal 10 and 11.&lt;/li&gt;
&lt;li&gt;Audit your existing Drupal 10 projects for Drupal 11 readiness, and estimate the level of effort involved.&lt;/li&gt;
&lt;li&gt;Start the process of upgrading your site from Drupal 10 to Drupal 11.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Create a Drupal 11 upgrade checklist, and understand what’s required to complete the items on the list.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;What Is Deprecated Code?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You may need to first &lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;Update Drupal's Minor Version&lt;/a&gt; to ensure your site is on Drupal 10.3.x or higher.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Drupal 11 released August 2, 2024&lt;/h2&gt;
&lt;p&gt;Drupal 11 was released on August 2, 2024. &lt;a href="https://www.drupal.org/about/11"&gt;Learn more about what's included in Drupal 11&lt;/a&gt; and read the &lt;a href="https://www.drupal.org/project/drupal/releases/11.0.0"&gt;Drupal 11.0.0 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Use &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status module&lt;/a&gt; on your Drupal 10 site to help you plan your upgrade. This module provides a report of what modules on your site have a Drupal 11-compatible release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Your site must be on &lt;strong&gt;Drupal 10.3.0 or later&lt;/strong&gt; to upgrade to Drupal 11. Update your Drupal 10.x site to the latest version of Drupal 10.3.x or later before upgrading to Drupal 11. See &lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;Update Drupal's Minor Version&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Quickstart&lt;/h2&gt;
&lt;p&gt;Here's the quick version; keep reading below for more details.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;composer require 'drupal/core-recommended:^11' 'drupal/core-composer-scaffold:^11' 'drupal/core-project-message:^11' --update-with-dependencies --no-update
# If you have drupal/core-dev installed
composer require 'drupal/core-dev:^11' --dev --update-with-dependencies --no-update
# If you have Drush installed (check recommended version)
composer require 'drush/drush:^13' --no-update
# Now, actually perform the update to the code itself.
composer update

# Then run any updates.
drush cr -y
drush updb

# Export configuration changes (and don't forget to commit the changes).
drush cex -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Differences between Drupal 10 and Drupal 11&lt;/h2&gt;
&lt;p&gt;From a technical perspective Drupal 11.0.0 is Drupal 10.3.0 with all &lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;deprecated code&lt;/a&gt; removed.&lt;/p&gt;
&lt;p&gt;Drupal 11 also includes updates to many of Drupal core’s dependencies, including CKEditor, Symfony, Twig, jQuery, and &lt;a href="https://www.drupal.org/project/drupal/releases/11.0.0"&gt;others&lt;/a&gt;. If you’ve got code in your project that relies on an older version of these dependencies, that code will need to be updated, too.&lt;/p&gt;
&lt;h3&gt;Notable 3rd-party dependency updates&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Drupal 10&lt;/th&gt;
&lt;th&gt;Drupal 11&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CKEditor 5.x&lt;/td&gt;
&lt;td&gt;CKEditor 5 v42.0.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Symfony 6.x&lt;/td&gt;
&lt;td&gt;Symfony 7.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twig 3.5.0&lt;/td&gt;
&lt;td&gt;Twig 3.9.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jQuery 4.x&lt;/td&gt;
&lt;td&gt;jQuery 4.0.0-beta2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Replace or uninstall deprecated core modules&lt;/h3&gt;
&lt;p&gt;Core modules that were marked as deprecated in Drupal 10 were removed in Drupal 11 and are now considered obsolete in Drupal 11. If your Drupal 10 site is using a deprecated core module, you should switch to a module that is compatible with Drupal 11. &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; module can give you recommendations on alternative modules. In most cases, the deprecated core module was ported to a contributed project. And so, you can install the ported contributed module as a replacement. If you have a deprecated module installed but your site is not using it, you should uninstall it before attempting to upgrade.&lt;/p&gt;
&lt;h4&gt;Removed modules&lt;/h4&gt;
&lt;p&gt;These core modules were deprecated in Drupal 10 and removed in Drupal 11.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete#s-actions-ui"&gt;Actions UI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete-modules-and-themes#s-activity-tracker"&gt;Activity Tracker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete-modules-and-themes#s-book"&gt;Book&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete-modules-and-themes#s-forum"&gt;Forum&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete-modules-and-themes#s-statistics"&gt;Statistics&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete-modules-and-themes#s-tour"&gt;Tour&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about &lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete"&gt;deprecated and obsolete extensions and what to do if your site uses them&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;When should I upgrade to Drupal 11?&lt;/h2&gt;
&lt;p&gt;Short answer: when your code is ready.&lt;/p&gt;
&lt;p&gt;The primary consideration should be whether the contributed modules you rely on, and your own custom modules, are Drupal 11 compatible. Once they are, there is no reason to not upgrade.&lt;/p&gt;
&lt;p&gt;If you're using Drupal 10 &lt;a href="https://www.drupal.org/blog/drupal-10-will-be-supported-until-the-release-of-drupal-12-in-mid-late-2026"&gt;you have until mid-late 2026&lt;/a&gt; to complete your upgrade. At that point, Drupal 12 will be released, Drupal 10.5.x will be unsupported, and Drupal 10 will have reached its end-of-life. There is also the &lt;a href="https://www.drupal.org/psa-2023-06-07"&gt;current Drupal 7 end-of-life date: January 5, 2025&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href="https://www.drupal.org/about/core/policies/core-release-cycles/schedule"&gt;Drupal core release schedule&lt;/a&gt; for details and potential updates to these dates.&lt;/p&gt;
&lt;h2&gt;Drupal 11 upgrade checklist&lt;/h2&gt;
&lt;p&gt;Make sure you can check off all the items in the list before you upgrade to Drupal 11.x:&lt;/p&gt;
&lt;div class="tutorial--steps"&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update to Drupal 10.3.x (or later)&lt;/h3&gt;
&lt;p&gt;Before you can upgrade your site to Drupal 11 it needs to be on &lt;strong&gt;10.3.0 or later&lt;/strong&gt;. Update your site to the latest release of Drupal 10 before upgrading to Drupal 11.&lt;/p&gt;
&lt;p&gt;If you need to update your Drupal 10 site, first &lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;learn how to perform a minor version update&lt;/a&gt;, then come back to this tutorial.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update all your contributed projects&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; You should update all your contributed modules and themes to Drupal 11 compatible versions while you're still on Drupal 10.&lt;/p&gt;
&lt;p&gt;It's a good idea to update all your contributed modules and themes to their latest versions as well. Before you can upgrade Drupal core to version 11, you'll need to ensure that all of your contributed projects are &lt;strong&gt;already Drupal 11 compatible&lt;/strong&gt;. In most cases this will mean updating to the latest version. In some cases this may require additional work if the module isn't already Drupal 11 ready.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/security-update-module"&gt;13.6 Updating a Module&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/security-update-theme"&gt;13.7 Updating a Theme&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at the project's page on Drupal.org for more details about compatibility:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/drupal11-project-info-example.png?itok=_JWQ7EKZ 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/drupal11-project-info-example.png?itok=H2--dY48 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal11-project-info-example.png?itok=JeWkqm6J 800w, https://drupalize.me/sites/default/files/styles/max_1280w/public/tutorials/images/drupal11-project-info-example.png?itok=dQErgMys 1280w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/drupal11-project-info-example.png?itok=9PtRzitx 1423w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="355" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal11-project-info-example.png?itok=JeWkqm6J"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;Acquia has created &lt;a href="https://dev.acquia.com/drupal11/deprecation_status"&gt;a useful tool for checking compatibility&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These are good for getting an estimate of what's going to be involved for your project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Check &lt;em&gt;Extend&lt;/em&gt; &amp;gt; &lt;em&gt;Uninstall&lt;/em&gt; for any deprecated modules (they will be listed at the top).&lt;/p&gt;
&lt;h4&gt;Use Upgrade Status module&lt;/h4&gt;
&lt;p&gt;When you're ready to start working on the Drupal 11 readiness of the modules installed on your site, use the &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; module on your &lt;strong&gt;current Drupal 10 site&lt;/strong&gt; to generate a report. Use the 4.x version for Drupal 10 to 11 upgrades.&lt;/p&gt;
&lt;p&gt;See the &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; project page for instructions on how to update development dependencies and download the project with Composer.&lt;/p&gt;
&lt;p&gt;After downloading the module with Composer, install the module with &lt;code&gt;drush en upgrade_status&lt;/code&gt; or via the &lt;em&gt;Extend&lt;/em&gt; administrative page.&lt;/p&gt;
&lt;p&gt;Use the &lt;em&gt;Manage&lt;/em&gt; administrative menu, navigate to &lt;em&gt;Reports&lt;/em&gt; &amp;gt; &lt;em&gt;Upgrade status&lt;/em&gt; to see the report and take action.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=-ehBbrHd 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=uxQXfpnN 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=U5Ft3sbA 800w, https://drupalize.me/sites/default/files/styles/max_1280w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=jgpD614u 1280w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=dBQ7cnBc 1600w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="404" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/upgrade_status_example_report_d11.png?itok=U5Ft3sbA"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;If a module isn't Drupal 11 compatible you've got a few options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update it yourself. This similar to updating custom code. (See below.)&lt;/li&gt;
&lt;li&gt;Wait for a future release of an updated Drupal 11-compatible version.&lt;/li&gt;
&lt;li&gt;Hire someone to do the updates for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend starting with your custom code. And once that's done, come back to your contributed modules and figure out which ones are the most critical for your project and see what you can do to help update them for Drupal 11. In many cases there's likely a patch already available and waiting for community members to test it out.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update your custom code&lt;/h3&gt;
&lt;p&gt;If your project has custom modules or themes, it's your responsibility to ensure that that code is compatible with Drupal 11. Using an IDE with support for the &lt;code&gt;@deprecated&lt;/code&gt; annotation can help you identify &lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;deprecated code&lt;/a&gt;. Drupal core deprecations (and new features) will have change records in &lt;a href="https://www.drupal.org/list-changes/drupal"&gt;Change records for Drupal core&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can use &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; to scan these projects as well. And then you'll need to remove all use of deprecated APIs. &lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;Learn more about what deprecated code is and how to deal with it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Even if you're not planning to upgrade to Drupal 11 now, you should start doing this. It'll save time in the future, and since Drupal 11 is backward-compatible with Drupal 10.3.0, it shouldn't affect your existing site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Verify your hosting meets the new requirements&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://www.drupal.org/docs/system-requirements"&gt;system requirements for Drupal&lt;/a&gt; have changed. (See also the "Platform requirements changes" heading in the &lt;a href="https://www.drupal.org/project/drupal/releases/11.0.0"&gt;release notes&lt;/a&gt;.) You'll want to make sure your web server, PHP, and MySQL/MariaDB are all running compatible versions. Upgrade Status will indicate if the &lt;strong&gt;Environment is incompatible&lt;/strong&gt; on its report as well. (This is only useful if the environment on which you're running Upgrade Status is the same as the environment in which you'll be hosting your Drupal 11 site.)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Check the Upgrade Status report&lt;/h3&gt;
&lt;p&gt;Using the &lt;em&gt;Manage&lt;/em&gt; administrative menu, navigate to &lt;em&gt;Reports&lt;/em&gt; &amp;gt; &lt;em&gt;Upgrade status&lt;/em&gt; and, if necessary, click the &lt;em&gt;Check available updates&lt;/em&gt; link under the &lt;strong&gt;Gather data&lt;/strong&gt; column.&lt;/p&gt;
&lt;p&gt;Once you have addressed all blockers to a Drupal 10 upgrade, you will see "N/A" in the &lt;strong&gt;Fix incompatibilities&lt;/strong&gt; column and "100%" in the &lt;strong&gt;Relax&lt;/strong&gt; column (along with other information).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=7G33fWuG 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=HbWMW6GI 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=wNz4n0GB 800w, https://drupalize.me/sites/default/files/styles/max_1280w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=2UOffZNr 1280w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=aABoWuJo 1600w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="634" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/upgrade_status_green_drupal11_ready.png?itok=wNz4n0GB"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Upgrade Drupal core&lt;/h2&gt;
&lt;p&gt;Sites running Drupal 10.2.x or earlier &lt;strong&gt;must first update to at least 10.3.x&lt;/strong&gt; before updating to Drupal 11. See &lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;Update Drupal's Minor Version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The instructions below assume you that your Drupal 10 project is using Composer to manage dependencies, and that you either started from the &lt;code&gt;drupal/recommended-project&lt;/code&gt; Composer template or you've updated your &lt;em&gt;composer.json&lt;/em&gt; to use the &lt;code&gt;drupal/recommended-project&lt;/code&gt;'s approach to scaffolding. If you're unsure, look for entries like &lt;code&gt;"drupal/core-recommended": "^10.3"&lt;/code&gt;, and &lt;code&gt;"drupal/core-composer-scaffold": "^10.3"&lt;/code&gt; in your &lt;em&gt;composer.json&lt;/em&gt; file. This is a good indication that you're using the current recommend approach.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Using the &lt;code&gt;--no-update&lt;/code&gt; flag updates the &lt;em&gt;composer.json&lt;/em&gt; entries without attempting to resolve and download any files. This allows us to batch updates to projects and avoid a "chicken-or-egg first"-type of issues with shared dependencies. You can also edit the version constraints in &lt;em&gt;composer.json&lt;/em&gt; manually.&lt;/p&gt;
&lt;div class="tutorial--steps"&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update &lt;code&gt;drupal/core-dev&lt;/code&gt; (if applicable)&lt;/h3&gt;
&lt;p&gt;If you have the &lt;code&gt;drupal/core-dev&lt;/code&gt; dependencies installed you'll need to update those with:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/core-dev:^11.0 --dev --no-update --update-with-dependencies
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update &lt;code&gt;drupal/core-*&lt;/code&gt; projects&lt;/h3&gt;
&lt;p&gt;Then update the &lt;code&gt;drupal/core-recommended&lt;/code&gt;, &lt;code&gt;drupal/core-composer-scaffold&lt;/code&gt;, and &lt;code&gt;drupal/core-project-message&lt;/code&gt; projects:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/core-recommended:^11.0 drupal/core-composer-scaffold:^11.0 drupal/core-project-message:^11.0 --no-update --update-with-all-dependencies
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Run &lt;code&gt;composer update&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Then tell Composer to try and resolve and download all the new code:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If this is successful, you'll see lines like the following in the output:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;  - Upgrading drupal/core-dev (10.3.5 =&amp;gt; 11.0.5)
  - Upgrading drupal/core (10.3.6 =&amp;gt; 11.0.5): Extracting archive
  - Upgrading drupal/core-recommended (10.3.6 =&amp;gt; 11.0.5)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you get any errors you'll need to troubleshoot what's causing the issue. We've tried to provide guidance on some common errors below.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Put your site in maintenance mode&lt;/h3&gt;
&lt;p&gt;Put your site in maintenance mode before continuing. If you don't, you may end up with a backup you can't revert to.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;drush state:set system.maintenance_mode 1
drush cache:rebuild
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or, using the administrative UI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance mode&lt;/strong&gt;: &lt;em&gt;Configuration&lt;/em&gt; &amp;gt; &lt;em&gt;Development&lt;/em&gt; &amp;gt; &lt;em&gt;Maintenance mode&lt;/em&gt; (&lt;em&gt;admin/config/development/maintenance&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear caches&lt;/strong&gt;: &lt;em&gt;Configuration&lt;/em&gt; &amp;gt; &lt;em&gt;Performance&lt;/em&gt; (&lt;em&gt;admin/config/development/performance&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Make a backup&lt;/h3&gt;
&lt;p&gt;Back up the database, as the next steps will make changes to your database schema and are not reversible.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Deploy your code&lt;/h3&gt;
&lt;p&gt;Deploy your code per your normal workflow.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Check for and run database updates&lt;/h3&gt;
&lt;p&gt;Assuming Composer was successful at upgrading your site's dependencies to Drupal 11,  check for database updates. (If Composer was not successful, you need to deal with those errors before continuing. See below for troubleshooting tips.)&lt;/p&gt;
&lt;p&gt;Using Drush:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;drush updatedb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or navigate to &lt;em&gt;/update.php&lt;/em&gt; and navigate through the Drupal database update wizard.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Take your site out of maintenance mode&lt;/h3&gt;
&lt;p&gt;After database updates have successfully run, take your site out of maintenance mode and rebuild caches.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;drush state:set system.maintenance_mode 0
drush cache:rebuild
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Celebrate! You've upgraded to Drupal 11!&lt;/h3&gt;
&lt;p&gt;Congratulations! You've upgraded your site to Drupal 11!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/available_updates_drupal11.png?itok=4Enl26GT 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/available_updates_drupal11.png?itok=S7QT7o2L 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/available_updates_drupal11.png?itok=GkPmPrVe 800w, https://drupalize.me/sites/default/files/styles/max_1280w/public/tutorials/images/available_updates_drupal11.png?itok=6ObnxSyz 1280w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/available_updates_drupal11.png?itok=CeZSilhj 1600w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="346" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/available_updates_drupal11.png?itok=GkPmPrVe"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Troubleshooting a Drupal 10 upgrade to Drupal 11&lt;/h2&gt;
&lt;h3&gt;Problem: Permission denied updating files in &lt;em&gt;sites/default/&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;In some cases you may need to modify the permissions on the &lt;em&gt;sites/default/&lt;/em&gt; directory, and files within it, so that they can be modified.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Set them to something more permissive:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;chmod 777 web/sites/default
find web/sites/default -name "*settings.php" -exec chmod 777 {} \;
find web/sites/default -name "*services.yml" -exec chmod 777 {} \;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Important!:&lt;/strong&gt; Remember to set permissions back after completing the update:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;chmod 755 web/sites/default
find web/sites/default -name "*settings.php" -exec chmod 644 {} \;
find web/sites/default -name "*services.yml" -exec chmod 644 {} \;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Problem: Composer can't install packages&lt;/h3&gt;
&lt;p&gt;If running &lt;code&gt;composer update&lt;/code&gt; results in message saying, "Your requirements could not be resolved to an installable set of packages.", there's a good chance that one or more of your contributed modules isn't Drupal 11 compatible. (Or at least the current release version of the project isn't.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Look for lines like this in the output:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;- drupal/recurly 1.5.0 requires drupal/core ~8.0 -&amp;gt; satisfiable by drupal/core[8.8.6, 8.0.0, 8.0.0-beta10, ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This indicates that the &lt;code&gt;drupal/recurly&lt;/code&gt; project requires Drupal 8.x, but we're asking for Drupal 9.x, therefore resulting in an incompatible set of dependencies.&lt;/p&gt;
&lt;p&gt;(While this is an example from upgrading from 8 to 9, you may encounter a similar situation for a particular project when you upgrade from 10 to 11.)&lt;/p&gt;
&lt;p&gt;If there's a &lt;code&gt;-dev&lt;/code&gt; version of the module that you know is compatible with Drupal 11 you could try installing that.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/recurly:1.x-dev --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If there's a patch in the issue queue see the next tip.&lt;/p&gt;
&lt;h3&gt;Problem: Contributed module only has a patch&lt;/h3&gt;
&lt;p&gt;Often times modules without a Drupal 11-compatible release will have a patch in the issue queue that makes the module work with Drupal 11, but hasn't been committed by the project maintainers yet.&lt;/p&gt;
&lt;p&gt;This can result in a sort of race condition, where Composer can't download the required module because it's not presenting as Drupal 11 compatible, so you need to apply a patch, but Composer can't apply the patch, if it can't resolve the dependency tree first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Try the &lt;a href="https://github.com/mglaman/composer-drupal-lenient"&gt;Lenient Composer Plugin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the transition from Drupal 8 to 9, a &lt;a href="https://drupalize.me/tutorial/install-contributed-module-no-drupal-9-release"&gt;lenient Composer endpoint&lt;/a&gt; was created to remove this barrier. For the same situation for Drupal 9 to 10 and 10 to 11 upgrades, a Composer plugin was created: &lt;a href="https://github.com/mglaman/composer-drupal-lenient"&gt;Lenient Composer Plugin&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In this tutorial, we looked at what's involved in making the transition from Drupal 10 to Drupal 11. This included going over the differences between the two, auditing your custom and contributed modules for compatibility, learning how to make things Drupal 11 compatible while still using Drupal 10. And then finally upgrading Drupal core once everything else is ready, and some troubleshooting tips for common problems.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Most of the Composer commands above can be replicated by directly editing your &lt;em&gt;composer.json&lt;/em&gt; file, and then running &lt;code&gt;composer update&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you're using Drupal 7, upgrading to Drupal 11 still requires a major migration. See our &lt;a href="https://drupalize.me/guide/learn-migrate-drupal"&gt;Learn to Migrate to Drupal guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/project/drupal/releases/11.0.0"&gt;Drupal 11.0.0 release notes&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/blog/drupal-10-will-be-supported-until-the-release-of-drupal-12-in-mid-late-2026"&gt;Drupal 10 will be supported until the release of Drupal 12 in mid-late 2026&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-8-or-later/how-to-upgrade-from-drupal-10-to-drupal-11"&gt;How to upgrade from Drupal 10 to Drupal 11&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/upgrading-drupal/prepare-major-upgrade"&gt;Preparing your site to upgrade to a newer major version&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/core-modules-and-themes/deprecated-and-obsolete"&gt;Deprecated and obsolete extensions&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/use-composer-your-drupal-project"&gt;Use Composer with Your Drupal Project&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/troubleshoot-common-composer-issues"&gt;Troubleshoot Common Composer Issues&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mglaman/composer-drupal-lenient"&gt;Drupal Lenient Composer Plugin&lt;/a&gt; (GitHub.com)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/node/3365413"&gt;Changes required for PHPUnit 10 compatibility&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-31T15:43:07-05:00" title="Thursday, October 31, 2024 - 15:43" class="datetime"&gt;October 31, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Thu, 31 Oct 2024 21:00:13 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3308 at https://drupalize.me</guid>
    </item>
<item>
  <title>Implement a Plugin Using PHP Attributes</title>
  <link>https://drupalize.me/tutorial/implement-plugin-using-php-attributes</link>
  <description>&lt;span&gt;Implement a Plugin Using PHP Attributes&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-10-18T18:20:24-05:00" title="Friday, October 18, 2024 - 18:20" class="datetime"&gt;Fri, 10/18/2024 - 18:20&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3301&amp;amp;2=read" token="FJwJ4Y0zgvN4N7W_6T7iDjSjbC4WnROBpB2GX4zi_gs"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3301&amp;amp;2=queue" token="VVm-avJ6abs71kPCUl-TY9ENij_mmMRczvhQL9XeJ5s"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;As of Drupal 10.2, most plugin types use &lt;a href="https://drupalize.me/tutorial/php-attributes"&gt;PHP attributes&lt;/a&gt; for discovery and metadata.&lt;/p&gt;
&lt;p&gt;In this tutorial, we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide a recipe for implementing PHP attribute-based plugins.&lt;/li&gt;
&lt;li&gt;Demonstrate how to figure out where the code and metadata should live for PHP attribute-based plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should have a recipe for getting started with implementing PHP attribute-based plugins, and a better understanding of how to figure out the details required to implement a given plugin type.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-17T15:36:28-05:00" title="Thursday, October 17, 2024 - 15:36" class="datetime"&gt;October 17, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 18 Oct 2024 23:20:24 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3301 at https://drupalize.me</guid>
    </item>
<item>
  <title>Implement a YAML Plugin</title>
  <link>https://drupalize.me/tutorial/implement-yaml-plugin</link>
  <description>&lt;span&gt;Implement a YAML Plugin&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-10-18T18:19:24-05:00" title="Friday, October 18, 2024 - 18:19" class="datetime"&gt;Fri, 10/18/2024 - 18:19&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3304&amp;amp;2=read" token="Fa9r6szRwZlXAEfFwT2xPzFJwOEWDxfADJO28_hfapo"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3304&amp;amp;2=queue" token="Eqa7hbdNn-LJbYJpyKgmxGNSwWPxgWzhplGI4LMYEcg"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Many of Drupal's APIs that look like a bunch of configuration in a YAML file (migrations, menu links, etc.) are actually plugins in disguise. The YAML from these files is used as arguments to a generic PHP plugin class which then behaves differently depending on the provided values. As a developer, you probably don't need to know that menu links are plugins, but it can be helpful when debugging or just trying to get a better understanding of the big picture.&lt;/p&gt;
&lt;p&gt;In this tutorial, we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn about how YAML-based plugins work&lt;/li&gt;
&lt;li&gt;Discuss how to find the implementation details for YAML-based plugins&lt;/li&gt;
&lt;li&gt;Walk through an example of implementing a YAML-based plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial, you should be able to recognize a YAML-based plugin definition, and author your own.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-17T19:02:08-05:00" title="Thursday, October 17, 2024 - 19:02" class="datetime"&gt;October 17, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 18 Oct 2024 23:19:24 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3304 at https://drupalize.me</guid>
    </item>
<item>
  <title>Implement a Plugin Using Annotations</title>
  <link>https://drupalize.me/tutorial/implement-plugin-using-annotations</link>
  <description>&lt;span&gt;Implement a Plugin Using Annotations&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-10-18T18:19:24-05:00" title="Friday, October 18, 2024 - 18:19" class="datetime"&gt;Fri, 10/18/2024 - 18:19&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3303&amp;amp;2=read" token="oQzaqwXQ4jVN8uyNT_8pdoKovwLVGVs4FqJX3Rjimds"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3303&amp;amp;2=queue" token="RFlm1YhkEyt4H6AjlezthHkS2Pm6PX16_Xw71Rrsf8k"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Prior to Drupal 10.2 most plugin implementations required the use of annotations alongside a PHP class. Now Drupal supports and recommends the use of &lt;a href="https://drupalize.me/tutorial/php-attributes"&gt;PHP attributes&lt;/a&gt; instead. During the transition, most developers will still need to know how to recognize and implement annotation-based plugins.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide a recipe for implementing annotation-based plugins.&lt;/li&gt;
&lt;li&gt;Demonstrate how to figure out where the code and metadata should live for annotation-based plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should have a recipe for getting started with implementing annotation-based plugins, and a better understanding of how to figure out the details required to implement a given plugin type.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-17T18:53:18-05:00" title="Thursday, October 17, 2024 - 18:53" class="datetime"&gt;October 17, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 18 Oct 2024 23:19:24 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3303 at https://drupalize.me</guid>
    </item>
<item>
  <title>PHP Attributes</title>
  <link>https://drupalize.me/tutorial/php-attributes</link>
  <description>&lt;span&gt;PHP Attributes&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-10-18T18:19:24-05:00" title="Friday, October 18, 2024 - 18:19" class="datetime"&gt;Fri, 10/18/2024 - 18:19&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3302&amp;amp;2=read" token="0716fcVdiG8-xxQt2l3ICBRpDu28WnCRuK2aYqITsB0"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3302&amp;amp;2=queue" token="4XP9VLBAFmDsxERbosRh7R5tHEkIOz0r6z7jOoRQo90"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;PHP attributes are a native PHP language feature, introduced in PHP 8.0, that provide a way to add metadata to classes, methods, properties, and functions in PHP code.&lt;/p&gt;
&lt;p&gt;In Drupal, this metadata is used by the &lt;a href="https://drupalize.me/tutorial/what-are-plugins"&gt;plugin system&lt;/a&gt; to aid in the discovery and configuration of plugin instances. As a Drupal developer, it's important to understand how to recognize, read, and write PHP attributes, as you'll encounter them when working with plugins.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll look at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What PHP attributes are&lt;/li&gt;
&lt;li&gt;The use case for attributes in Drupal&lt;/li&gt;
&lt;li&gt;An overview of the attribute syntax&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial, you should understand how attributes are used in Drupal and how to write them in your own code.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-08T16:09:26-05:00" title="Tuesday, October 8, 2024 - 16:09" class="datetime"&gt;October 8, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 18 Oct 2024 23:19:24 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3302 at https://drupalize.me</guid>
    </item>
<item>
  <title>Audience and Approach</title>
  <link>https://drupalize.me/tutorial/audience-and-approach</link>
  <description>&lt;span&gt;Audience and Approach&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-05-01T11:01:03-05:00" title="Wednesday, May 1, 2024 - 11:01" class="datetime"&gt;Wed, 05/01/2024 - 11:01&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3221&amp;amp;2=read" token="v0M1Q6rz_yUjtUujxD0znkQpVnXRTnBjnzmEFRoUoM4"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3221&amp;amp;2=queue" token="6V1jEpjfpaE3evwyKL7UvDblR0wKHK8Ts587eA5-WMs"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Are you ready to learn how to extend and customize Drupal sites in code? The Drupal Module Developer Guide will introduce you to extending Drupal with modules. You will learn foundational concepts and get hands-on practice with a variety of APIs used in Drupal coding and development. We'll be extending the site we built in the Drupal User Guide. If you're new to Drupal site building, we recommend that you walk through the &lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt; first.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Are you ready to learn how to extend and customize Drupal sites in code? The Drupal Module Developer Guide will introduce you to extending Drupal with modules. You will learn foundational concepts and get hands-on practice with a variety of APIs used in Drupal coding and development. We'll be extending the site we built in the Drupal User Guide. If you're new to Drupal site building, we recommend that you walk through the &lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt; first.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Decide if this guide is for you.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Audience&lt;/h2&gt;
&lt;p&gt;We created the Drupal Module Developer Guide for &lt;strong&gt;developers familiar with PHP but new to Drupal module development&lt;/strong&gt;. We assume you have a foundation in PHP development and want to expand your skills into Drupal. This guide is not for absolute beginners in coding or PHP. This guide is also suitable for folks with development experience in Drupal 7 but who need to get familiar with the latest API.&lt;/p&gt;
&lt;p&gt;You'll have the most success with this guide if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand PHP and object-oriented programming concepts.&lt;/li&gt;
&lt;li&gt;Are familiar with common site building and administration tasks in Drupal.&lt;/li&gt;
&lt;li&gt;Can navigate files and execute commands in a Terminal.&lt;/li&gt;
&lt;li&gt;Are familiar with &lt;a href="https://drupalize.me/tutorial/user-guide/install-composer?p=2368"&gt;downloading modules using Composer&lt;/a&gt; and installing them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Approach&lt;/h2&gt;
&lt;p&gt;In this guide, we use a project-based learning approach. You'll have the best learning experience if you read the guide in order and in full. Tutorials often build upon previous work. As you progress through the guide, we'll refactor and expand code examples from previous tutorials, to give you hands-on practice with new concepts and patterns.&lt;/p&gt;
&lt;h2&gt;Learning objectives&lt;/h2&gt;
&lt;p&gt;Upon completing this guide, you should be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plan the content architecture for a custom Drupal module.&lt;/li&gt;
&lt;li&gt;Build a module using Drupal core APIs and recognizable design patterns.&lt;/li&gt;
&lt;li&gt;Write secure code that adheres to Drupal coding standards and includes automated tests.&lt;/li&gt;
&lt;li&gt;Find documentation and blog posts on advanced topics, to expand your knowledge and skills.&lt;/li&gt;
&lt;li&gt;Engage with the global Drupal community.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;The Drupal Module Developer guide is for PHP programmers who are familiar with Drupal site building and administration but new to module development in the latest version of Drupal. This guide uses a project-based approach with a guiding scenario that was originally introduced in the Drupal User Guide.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Familiarize yourself with the project-based learning scenario we'll use in this guide at &lt;a href="https://drupalize.me/tutorial/guiding-scenario"&gt;Guiding Scenario&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/course/php-beginners-part-1"&gt;PHP for Beginners Part 1&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/course/php-beginners-part-2"&gt;PHP for Beginners Part 2&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/course/php-beginners-part-3"&gt;PHP for Beginners Part 3&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/topic/object-oriented-php"&gt;Object-Oriented PHP&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-05-02T15:07:44-05:00" title="Thursday, May 2, 2024 - 15:07" class="datetime"&gt;May 2, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Wed, 01 May 2024 16:01:03 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3221 at https://drupalize.me</guid>
    </item>
<item>
  <title>Guiding Scenario</title>
  <link>https://drupalize.me/tutorial/guiding-scenario</link>
  <description>&lt;span&gt;Guiding Scenario&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-05-01T11:01:02-05:00" title="Wednesday, May 1, 2024 - 11:01" class="datetime"&gt;Wed, 05/01/2024 - 11:01&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3213&amp;amp;2=read" token="ev4namp3g6j5AQzwH5U6dNYU8QzP1BcoyBIAzSY2NJw"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3213&amp;amp;2=queue" token="Qw6Zm0QC56GSQ-ccFzAL7-flexJCv3tOw1s6VPAzks4"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;We'll be working with the Anytown Farmers Market site, which we built in the &lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt;. Our goal is to extend and enhance this site using custom modules, to fulfill project-specific requirements. We use a narrative approach, which we hope will help you better understand the real-world applications of module development in Drupal.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;We'll be working with the Anytown Farmers Market site, which we built in the &lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt;. Our goal is to extend and enhance this site using custom modules, to fulfill project-specific requirements. We use a narrative approach, which we hope will help you better understand the real-world applications of module development in Drupal.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Explain the guiding scenario which ties together all the code examples in this guide, and provides a project-based learning approach to Drupal module development.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You're familiar with the Anytown Farmers Market site that we covered in the &lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You're familiar with the Drupal site building and administrative tasks and concepts taught in the Drupal User Guide.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The guiding scenario&lt;/h2&gt;
&lt;p&gt;You are a developer tasked with adding new features to the Anytown Farmers Market site. You can't add the features with Drupal's site building tools or any existing contributed modules, so you'll need to write some custom code. You're familiar with PHP, and web development using a CMS or framework, but this is your first time writing custom code for Drupal.&lt;/p&gt;
&lt;p&gt;You need to add the features below.&lt;/p&gt;
&lt;h3&gt;Weather forecast feature&lt;/h3&gt;
&lt;p&gt;A new page at the URL, &lt;em&gt;/weather&lt;/em&gt;, that shows the current weather forecast and details about any weather-related happenings for the next market weekend market. For example, an ice skating rink that's open in the winter or a market closure due to icy conditions. You'll need to retrieve the forecast using a remote API, and a site administrator should be able to fill out a form to publish current weather-related happenings.&lt;/p&gt;
&lt;h2&gt;Vendor attendance feature&lt;/h2&gt;
&lt;p&gt;A feature that enables vendors to say that they plan to attend the upcoming market and who the contact person is. While we could update this information through the vendor node edit form, we want a simplified UI, since we're asking vendors to do this every week.&lt;/p&gt;
&lt;p&gt;As you read through the guide and try out the described tasks, you may choose to follow the scenario as-is, or customize the tasks to suit another purpose.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://drupalize.me/tutorial/concept-what-are-modules"&gt;Let's get started&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;We introduced the guiding scenario and project requirements which we'll fulfill in this guide.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Can you write user stories that outline the work you'll be doing for this project?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/guide/drupal-user-guide"&gt;Drupal User Guide&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-05-02T15:07:44-05:00" title="Thursday, May 2, 2024 - 15:07" class="datetime"&gt;May 2, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Wed, 01 May 2024 16:01:02 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3213 at https://drupalize.me</guid>
    </item>
<item>
  <title>Concept: What Are Modules?</title>
  <link>https://drupalize.me/tutorial/concept-what-are-modules</link>
  <description>&lt;span&gt;Concept: What Are Modules?&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-05-01T11:01:01-05:00" title="Wednesday, May 1, 2024 - 11:01" class="datetime"&gt;Wed, 05/01/2024 - 11:01&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3208&amp;amp;2=read" token="iIaELVOf_UArn79BwMS9rZzmtTR5G1dCbTotK7nZ3sQ"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3208&amp;amp;2=queue" token="YLR32FDSdAhLAVU6mYG0Z-Qe9nWsMHMz5wU1LZ6ja4M"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Modules enable developers to customize Drupal without modifying the core software. To ensure a stable and upgradeable core system, Drupal defines integration points and patterns that developers can use to customize the system. Modules contain code (PHP, JavaScript, Twig, CSS, YAML, etc.) that can extend, alter, and enhance Drupal's features and functionality.&lt;/p&gt;
&lt;p&gt;In this tutorial, you'll learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What Drupal modules are and their role in Drupal architecture&lt;/li&gt;
&lt;li&gt;How modules interact with Drupal core to extend or alter site functionality&lt;/li&gt;
&lt;li&gt;About the types of modules: core, contributed, and custom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial, you should be able to explain what modules are in Drupal, and understand their role in defining a Drupal site's functionality.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Modules enable developers to customize Drupal without modifying the core software. To ensure a stable and upgradeable core system, Drupal defines integration points and patterns that developers can use to customize the system. Modules contain code (PHP, JavaScript, Twig, CSS, YAML, etc.) that can extend, alter, and enhance Drupal's features and functionality.&lt;/p&gt;
&lt;p&gt;In this tutorial, you'll learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What Drupal modules are and their role in Drupal architecture&lt;/li&gt;
&lt;li&gt;How modules interact with Drupal core to extend or alter site functionality&lt;/li&gt;
&lt;li&gt;About the types of modules: core, contributed, and custom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial, you should be able to explain what modules are in Drupal, and understand their role in defining a Drupal site's functionality.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Define what modules are and their role in extending, altering, and enhancing Drupal.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What are modules in Drupal?&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Modules&lt;/em&gt; are packages of code that use integration points or well-defined patterns to alter, extend, and enhance a Drupal site.&lt;/p&gt;
&lt;p&gt;From an end-user perspective, modules add or change functionality of a Drupal site. Administrative users can install modules through Drupal's &lt;em&gt;Extend&lt;/em&gt; administrative interface.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;
Learn more about how site builders use modules.
&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/understanding-modules"&gt;Concept: Modules&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/course/user-guide/extend-chapter"&gt;Extending and Customizing Your Site&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;p&gt;Each module has a specific purpose, ranging from feature enhancements to complex system integrations.&lt;/p&gt;
&lt;p&gt;From a developer's perspective, modules are packages of code (mostly PHP) that extend Drupal to add new features or alter existing functionality. Modules can be installed to enable their features, and uninstalled to turn features off.&lt;/p&gt;
&lt;p&gt;All modules are written in the same way and use the same patterns. Their exact implementation will vary depending on the intended use. A module intended for a specific project can take liberties and hard-code assumptions like a field's configuration options. A module intended for a global audience will need to be generic or configurable.&lt;/p&gt;
&lt;p&gt;A module developer can contribute and maintain their modules as a project hosted on Drupal.org. These modules are available for others to download, use, and collaboratively improve. The ecosystem of contributed modules is a key part of why Drupal is successful.&lt;/p&gt;
&lt;h2&gt;Types of modules in Drupal&lt;/h2&gt;
&lt;p&gt;As a developer, you'll work with &lt;em&gt;core&lt;/em&gt;, &lt;em&gt;contributed&lt;/em&gt;, and &lt;em&gt;custom modules&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Core modules&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Modules included with Drupal core.&lt;/li&gt;
&lt;li&gt;Live in the &lt;em&gt;/core/modules&lt;/em&gt; directory.&lt;/li&gt;
&lt;li&gt;Examples: Block, Comment, Field UI, Views&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Core modules provide Drupal's primary feature set, and contain many of the APIs that you'll engage with as a module developer. You'll work with these when you want to implement one of the APIs, use one of the services they provide, fix a bug in Drupal core, or help contribute to an upstream feature.&lt;/p&gt;
&lt;h3&gt;Contributed modules&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Modules downloaded from Drupal.org that are not part of Drupal core.&lt;/li&gt;
&lt;li&gt;Typically placed in the &lt;em&gt;/modules/contrib&lt;/em&gt; directory.&lt;/li&gt;
&lt;li&gt;Examples: Admin Toolbar, Devel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contributed modules are written to be generic and reusable. They are usually configurable with a settings form, and allow you to tailor their features to your specific use case. You'll work with these when you want to help fix a bug, maintain a module you've developed, and extend or alter a contributed module's features to meet the needs of your use case.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;Learn more about contributing modules.&lt;/summary&gt;
&lt;p&gt;Work with the community to help maintain and improve contributed modules.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/concept-using-and-improving-contributed-modules"&gt;Concept: Using and Helping Contributed Modules&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/concept-contributing-your-custom-modules"&gt;Concept: Contributing Your Custom Modules&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While not required, module contribution is an important part of the Drupal community ethos and a great way to learn.&lt;/p&gt;
&lt;/details&gt;
&lt;h3&gt;Custom modules&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Project-specific modules that you or another developer wrote specifically for your application.&lt;/li&gt;
&lt;li&gt;Typically placed in the &lt;em&gt;/modules/custom&lt;/em&gt; directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Custom modules are specific to a project and make application-specific tweaks to features provided by other modules. You'll work with these to define business-specific application logic. Custom modules are a place to create novel solutions that use APIs and integration points of existing core and contributed modules.&lt;/p&gt;
&lt;p&gt;Common use cases for custom modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Site-specific SEO enhancements&lt;/li&gt;
&lt;li&gt;Custom form processing and data validation rules&lt;/li&gt;
&lt;li&gt;Integration with 3rd-party APIs, especially internal ones&lt;/li&gt;
&lt;li&gt;Unique business logic&lt;/li&gt;
&lt;li&gt;Custom reporting and analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Don't hack core!&lt;/h2&gt;
&lt;p&gt;The Drupal community follows the mantra, "Don't hack core". Following this principle ensures your Drupal site remains extensible and maintainable. If you alter code that is part of Drupal's core software, you will potentially face the following problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loss of changes&lt;/strong&gt;: Any modifications will be overwritten during core software updates, which can lead to loss of functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing critical security updates&lt;/strong&gt;: If you're unable or reluctant to perform core updates because of code modifications to the core software within a project, your site could miss critical security updates and become vulnerable to attack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibility issues&lt;/strong&gt;: Custom changes might conflict with other subsystems or contributed modules, leading to unexpected behavior or errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance challenges&lt;/strong&gt;: Custom changes to the core software make it difficult for other developers or even your future self to understand and maintain the site.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more about the "don't hack core" philosophy in &lt;a href="https://drupal.stackexchange.com/a/59066"&gt;this insightful Drupal Answers post&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;What about bug fixes?&lt;/h3&gt;
&lt;p&gt;Bug fixes are regularly included in patch or minor updates to Drupal core and contributed modules. Which is why &lt;a href="https://drupalize.me/topic/minor-version-and-security-updates"&gt;keeping your Drupal site up-to-date&lt;/a&gt; is important. But, the fact is that sometimes fixing a bug in Drupal core or a contributed module does require "hacking" code that doesn't belong to you. This can be true when a bug fix is available through a patch contributed to an issue, but the patch is not yet part of the official release. Perhaps a better mantra would be &lt;strong&gt;"don't hack core, but when you do, use a patch."&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/cweagans/composer-patches"&gt;Composer Patches plugin&lt;/a&gt; makes Composer an ideal tool for tracking, downloading, and applying these patches.&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;Learn more about patching projects using Composer.&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/composer-configuration-drupal?p=0#toc-patching-c-0ghm0yp5"&gt;Composer Configuration for Drupal: Patching core and contributed modules&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/cweagans/composer-patches"&gt;Composer Patches plugin&lt;/a&gt; (GitHub.com)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/develop/using-composer/manage-dependencies#patches"&gt;Patching projects using Composer&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2&gt;Plugins, services, events, and hooks&lt;/h2&gt;
&lt;p&gt;Modules interact with the Drupal software through 4 primary patterns: &lt;em&gt;plugins&lt;/em&gt;, &lt;em&gt;services&lt;/em&gt;, &lt;em&gt;events&lt;/em&gt;, and &lt;em&gt;hooks&lt;/em&gt;. &lt;strong&gt;As a developer, these are the patterns that you'll need to learn to implement and apply in order to create custom modules.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plugins&lt;/strong&gt;: These are like the individual parts used to assemble a machine. They provide new features in a way that allows a Drupal administrator to choose one option from a list of many. For example, choosing specific blocks or field types when building your site makes the site unique.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt;: Think of services as specialized tools that can be swapped out. They handle specific tasks like sending emails or integrating with databases. You might have a drawer full of hammers, and they operate the same way, but you choose the right one depending on the job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt;: These are like triggers that react to certain actions or conditions within Drupal, such as entity validation or dynamic routing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: Hooks are like customizable attachment points in Drupal where you can "hook in" your own code to alter behavior or extend functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this guide, we'll explain and use each of these patterns as we develop custom modules for the &lt;a href="https://drupalize.me/tutorial/guiding-scenario"&gt;Anytown Farmers Market site&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Modules&lt;/em&gt; are packages of code that use integration points or well-defined patterns to alter, extend, and enhance a Drupal site. Modules can be installed or uninstalled by administrative users to add or remove functionality. Core modules live in the &lt;em&gt;core/modules&lt;/em&gt; directory and provide Drupal's primary features. Contributed modules typically live in &lt;em&gt;modules/contrib&lt;/em&gt; and available for download on Drupal.org. Custom modules live in &lt;em&gt;modules/custom&lt;/em&gt;, provide application-specific business logic, and integrate with other core and contributed modules. If you need to alter, enhance, or provide new features to a Drupal site, you should use modules instead of "hacking core". But, if you need to fix a bug, use Composer Patches if the fix is not yet part of an official release and a patch is available.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Have you encountered modules (sometimes called plugins, or extensions) in other CMS platforms or frameworks?&lt;/li&gt;
&lt;li&gt;Why would you want to be able to modify the way Drupal works without altering Drupal's code?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/project/project_module?f%5B0%5D=&amp;amp;f%5B1%5D=&amp;amp;f%5B2%5D=&amp;amp;f%5B4%5D=sm_field_project_type%3Afull&amp;amp;f%5B5%5D=&amp;amp;text=&amp;amp;solrsort=iss_project_release_usage%20desc&amp;amp;op=Search"&gt;List of contributed modules&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/understanding-modules"&gt;1.2. Concept: Modules&lt;/a&gt; (Drupal User Guide)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/course/user-guide/extend-chapter"&gt;Chapter 11. Extending and Customizing Your Site&lt;/a&gt; (Drupal User Guide)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=tMM-I70ksQA"&gt;DrupalCon New Orleans 2016: Altering, Extending, and Enhancing Drupal 8&lt;/a&gt; (YouTube.com)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-05-02T15:07:44-05:00" title="Thursday, May 2, 2024 - 15:07" class="datetime"&gt;May 2, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Wed, 01 May 2024 16:01:01 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3208 at https://drupalize.me</guid>
    </item>
<item>
  <title>Write a Unit Test</title>
  <link>https://drupalize.me/tutorial/write-unit-test</link>
  <description>&lt;span&gt;Write a Unit Test&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-04-26T17:45:47-05:00" title="Friday, April 26, 2024 - 17:45" class="datetime"&gt;Fri, 04/26/2024 - 17:45&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3232&amp;amp;2=read" token="9BO4KJR7fgie1mm84r4_8jr0qF34ZAZ921FKwP4OAP0"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3232&amp;amp;2=queue" token="ldnMgI-0b3a9TbvgmyJEkc-i696KcsyGoC1mBkm3Sj0"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Unit tests are the simplest among Drupal's test types, ideal for verifying code that performs computations. This tutorial guides through writing unit tests for the &lt;em&gt;anytown&lt;/em&gt; module, focusing on the &lt;code&gt;ForecastClient&lt;/code&gt; service, and illustrates how to use mocks for dependencies.&lt;/p&gt;
&lt;p&gt;In this tutorial, we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List potential unit tests for the &lt;em&gt;anytown&lt;/em&gt; module.&lt;/li&gt;
&lt;li&gt;Write tests for &lt;code&gt;ForecastClient&lt;/code&gt; service logic.&lt;/li&gt;
&lt;li&gt;Demonstrate how to mock services in unit tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to write PHPUnit Unit tests for logic in the &lt;em&gt;anytown&lt;/em&gt; module.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-09-30T10:21:09-05:00" title="Monday, September 30, 2024 - 10:21" class="datetime"&gt;September 30, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 26 Apr 2024 22:45:47 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3232 at https://drupalize.me</guid>
    </item>
<item>
  <title>Write a Kernel Test</title>
  <link>https://drupalize.me/tutorial/write-kernel-test</link>
  <description>&lt;span&gt;Write a Kernel Test&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2024-04-26T17:45:47-05:00" title="Friday, April 26, 2024 - 17:45" class="datetime"&gt;Fri, 04/26/2024 - 17:45&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3231&amp;amp;2=read" token="UlhNX0qHqg6npjk0grCh-V04bxJyjxnlEv78V3ZHpCQ"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=3231&amp;amp;2=queue" token="QrqDKjBPvaK3JGq-x40XiIyAJQwu8exaph-TrjHI9I0"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/2715" hreflang="en"&gt;11.0.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Kernel tests in Drupal enable module integration testing with Drupal core systems in a bootstrapped environment. Kernel tests bridge the gap between unit and functional tests. This tutorial focuses on writing kernel tests for the &lt;em&gt;anytown&lt;/em&gt; module, specifically to test the &lt;code&gt;ForecastClient&lt;/code&gt; service's caching logic and custom username validation.&lt;/p&gt;
&lt;p&gt;In this tutorial, we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore the parts of a kernel test.&lt;/li&gt;
&lt;li&gt;Write kernel tests for &lt;em&gt;anytown&lt;/em&gt; module features.&lt;/li&gt;
&lt;li&gt;Use mocks and the Drupal container in kernel tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial, you should be able to get started writing kernel tests to verify your module's integration with Drupal core.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-18T17:44:17-05:00" title="Friday, October 18, 2024 - 17:44" class="datetime"&gt;October 18, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 26 Apr 2024 22:45:47 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">3231 at https://drupalize.me</guid>
    </item>

  </channel>
</rss>
