<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url><loc>https://drupalize.me/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url>
<url><loc>https://drupalize.me/about</loc><changefreq>yearly</changefreq><priority>0.6</priority></url>
<url><loc>https://drupalize.me/blog</loc><changefreq>daily</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/faq</loc><changefreq>yearly</changefreq><priority>0.6</priority></url>
<url><loc>https://drupalize.me/blog/group-subscriptions-are-ready</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/introduction-drush</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-javascript-and-variables-through-module</loc><lastmod>2025-05-16T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Adding JavaScript and Variables Through a Module</video:title><video:description>Shows how to pass variables from the PHP and Drupal side over to the front-end JavaScript scripts that are running so that you can use the Drupal interface to create customized settings that will appear in your jQuery scripts.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ho5WceN2sFZGvb6BbDvMLDWPiLqHYwZ517bgRQ63EaE.jpg.jpg</video:thumbnail_loc><video:duration>1152</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jquery-and-javascript-drupal-review</loc><lastmod>2025-05-16T22:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>jQuery and JavaScript in Drupal Review</video:title><video:description>A review of all of the material covered within the jQuery &amp; JavaScript in Drupal series.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XBXL6rv-cqToU_xpnepwh_IOjIE8F5lY4Y_j8qrQQMo.jpg.jpg</video:thumbnail_loc><video:duration>915</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/making-tables-sortable-jquery</loc><lastmod>2025-05-16T21:49Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Making Tables Sortable with jQuery</video:title><video:description>Shows the steps involved in converting a regular table into a table that is sortable by columns that you specify.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gGfcPIfGR25puuk_yAE5EDJ2sf7OUPkTwww9RMI64-8.jpg.jpg</video:thumbnail_loc><video:duration>988</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/javascript-related-form-api-properties</loc><lastmod>2025-05-16T21:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>JavaScript-Related Form Api Properties</video:title><video:description>A review of the Form API properties that provide interactive user interface elements by automatically adding JavaScript behaviors to the form elements.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/R4-2vkqmsigZ3_bhLF9BQ1gom-TfhxHrkchdZ1IlF6M.jpg.jpg</video:thumbnail_loc><video:duration>528</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dynamic-forms-drupal-6-ahah-framework</loc><lastmod>2025-05-16T21:51Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Dynamic Forms in Drupal 6: Ahah Framework</video:title><video:description>Goes through how to implement the AHAH framework in Drupal 6 in order to provide more dynamic interactions on a Drupal form.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/74XmrhCVj3yIT4djCu3TwK65AAoo_ZEWd-N5OstT4D4.jpg.jpg</video:thumbnail_loc><video:duration>927</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/ajax-framework-drupal-7</loc><lastmod>2025-05-16T21:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Ajax Framework in Drupal 7</video:title><video:description>See how the new JavaScript APIs and ajax framework in Drupal 7 allows you to implement dynamic behaviors without having to register a menu callback in the menu system or to write any jQuery code.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0v0BzD5AIOAukW6CSpDOl0Z0EWBpqN76dyTMuYh2uBQ.jpg.jpg</video:thumbnail_loc><video:duration>969</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/javascript-form-dependencies-states-system</loc><lastmod>2025-05-16T21:57Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>JavaScript Form Dependencies with the States System</video:title><video:description>Create dependencies between form elements so that you can show/hide or disable/enable one form setting based upon the form state of another from setting.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hBPLfHuQf-eGFZWWsef4PDZx380plkydTYUE4JWRsb8.jpg.jpg</video:thumbnail_loc><video:duration>1447</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/go-drupalize-yourself-even-lower-price</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/javascript-related-drupal-contrib-modules</loc><lastmod>2025-05-16T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>JavaScript-Related Drupal Contrib Modules</video:title><video:description>Go on a brief tour of other jQuery and JavaScript-related contributed modules that are worth knowing about.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mOtSiREamKlfhf3nbXVPFPWYlFWewGAH6-RB9_mluU4.jpg.jpg</video:thumbnail_loc><video:duration>429</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/announcing-new-payment-options</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/coding-drush-series</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-firebug</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Firebug</video:title><video:description>Overview the &lt;a href=&quot;http://getfirebug.com&quot;&gt;Firebug extension&lt;/a&gt; for Firefox and how it can be used to aid in the development of Javascript. Real time development and debugging of Javascript. 

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/deU_wRdvCne7lrzVCR2P1C6sObd39xH2z6vI1pGrDQg.jpg.jpg</video:thumbnail_loc><video:duration>719</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jquery-effects-and-animations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>jQuery Effects and Animations</video:title><video:description>&lt;p&gt;Learn about using jQuery to apply animation and effects to DOM elements. Show and hide things on the page using the fade, slide, and hide/show methods. Chain multiple effects together to create animations. And use the jQuery .animate() function to preform more complex animations.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yjVBuDvCwsgA8G7sUimYoAopm94efszxO984VeYezGE.jpg.jpg</video:thumbnail_loc><video:duration>954</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jquery-events</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>jQuery Events</video:title><video:description>&lt;p&gt;Learn how to respond to the actions that a user performs on a page using jQuery events. Attach event handlers to DOM elements and respond to mouse events like click and hover, and keyboard events such as someone pressing or releasing a key. Finally learn about responding to special events that only occur on form elements. This chapter gives a description of each of the available jQuery events and how or when they are triggered. Check out http://quirksmode.org/js/keys.html for more information on compatibility for assigning keyboard events across multiple browsers.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NGJyXM5RXKEHHu4rJ1hi9fccsz7Nw6Htak8G5TU4Q5k.jpg.jpg</video:thumbnail_loc><video:duration>1625</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-jquery-scripts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding jQuery Scripts</video:title><video:description>&lt;p&gt;Add a jQuery Javascript file to Drupal following best practice methods for including javascript files on the page. Learn about how your custom jQuery scripts are loaded on to the page, and when they get executed. Introduces jQuery&amp;#39;s no-conflict mode and provides some best practice examples for writing your own jQuery files within the context of Drupal as a whole.&lt;/p&gt;
&lt;p&gt;Note: To avoid hiding all blocks on your page, target your blocks more specifically. For example, &lt;code&gt;#sidebar .block .content &lt;code&gt; &lt;/code&gt;&lt;/code&gt; Also, inspect your markup for the existence of a class of title on the h3, which may or may not be applied in your theme. The new example below does not include the title class.&lt;/p&gt;

&lt;pre&gt;
(function($){
  $(document).ready(function(){
    
    $(&#039;#sidebar .block .content&#039;).hide();
    $(&#039;#sidebar .block h3&#039;).css(&#039;cursor&#039;, &#039;pointer&#039;).click(function(){
      $(this).parent().children(&#039;.content&#039;).slideToggle();
    });

  });
})(jQuery);
&lt;/pre&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jj3Bhvtj8le7Hd2-MyyqHNTwszFBJ_F0x4fgyr68dcE.jpg.jpg</video:thumbnail_loc><video:duration>893</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dom-manipulation-jquery</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>DOM Manipulation with jQuery</video:title><video:description>&lt;p&gt;Use jQuery to manipulate DOM elements including adding and removing classes to an HTML element, changing the content of an element, wrap a set of elements with a new element, adding new elements to the page using prepend and append methods and the related prependTo and appendTo methods. Use jQuery to manipulate properties height, width, and position of any DOM element. Finally learn how to use jQuery to completely remove selected DOM elements from the page.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/CWR2OIQXwkPN2gvEQlBCYJXDfh25MI-f922sedOXI-4.jpg.jpg</video:thumbnail_loc><video:duration>1302</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dom-traversing-jquery</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>DOM Traversing with jQuery</video:title><video:description>&lt;p&gt;Traverse the DOM tree using jQuery to find the children, parents, and other nearby elements of any selected element on the page. Learn how to select an element up the page and reliably locate it&amp;#39;s siblings by traversing up the DOM to a parent element and then back down using find. Use additional jQuery methods to filter a list of DOM elements down using find to apply an additional selector to the list, not to filter out elements that do not match a set of criteria and more.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tzZ1QrY2NS-TmDP6rVGEvay5amHOPPsszc9DaGAIZK4.jpg.jpg</video:thumbnail_loc><video:duration>1333</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/site-building-drupal-7</loc><lastmod>2024-07-19T23:23Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/upgrading-and-updating-your-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Upgrading and Updating Your Site</video:title><video:description>Once you have your site up and running it is very important to keep your site up to date and secure. Both Drupal core and contributed projects continue to improve the software with bug fixes and security updates. In this chapter we look at using the core Update Manager, and explain how to read the various reports about our site&#039;s status. Before we walk through the process up updating a contributed module, as well as our version of Drupal core, we also make sure we do a backup.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8yCB6lwD_6jPxxI8doK1pSH9TctNpPLoYvYBwlJVdZ4.jpg.jpg</video:thumbnail_loc><video:duration>1242</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-site-building-drupal-7</loc><lastmod>2024-07-19T23:15Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Site Building with Drupal 7</video:title><video:description>In this series we will walk through the process of building a basic Drupal 7 site. We start with installation and cover all of the major pieces of site building, including content, menus, blocks, users, and adding modules and themes. Along the way we&#039;ll define all of the common Drupal terminology and at the end you will have your first Drupal site, as well as the basic building blocks to build many more sites. This video gives an overview of the series.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cQnSXJS8F6n6xI9D_MvC4cPU2fgc3_2zmyJErIAi5lc.jpg.jpg</video:thumbnail_loc><video:duration>71</video:duration><video:publication_date>2012-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/calling-all-curious-drupal-beginners</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/introduction-omega-3x</loc><lastmod>2020-03-03T19:54Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/finish-960-robots-omega-sub-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title> Finish the 960 Robots Omega Sub-Theme</video:title><video:description>So, we now have all of our CSS and HTML in our sub-theme. In this lesson, we&#039;ve moved over the remaining files that our theme will need, like the images folder, and our node template files. The last step to finish this theme up, is to modify our CSS to take advantage of the responsive framework we already have in place. To do that we&#039;ll:
&lt;ul&gt;
  &lt;li&gt;Review the theme files&lt;/li&gt;
  &lt;li&gt;Look at our default CSS file&lt;/li&gt;
  &lt;li&gt;See the responsive changes&lt;/li&gt;
&lt;/ul&gt;
We&#039;re in the home stretch with our theme, so let&#039;s make our CSS responsive and wrap things up.

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/x1k9Go0uRrScZv1wHQfxHXP4sw6XIJ9hlYoqzNUu1xA.jpg.jpg</video:thumbnail_loc><video:duration>472</video:duration><video:publication_date>2012-11-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-new-omega-zone</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a New Omega Zone</video:title><video:description>In this lesson we have fast-forwarded some by completing the conversion of our old page.tpl.php into the new Omage theme. We&#039;ll take a look at the work we&#039;ve done to get to this point, and then deal with what looks like could be a tricky HTML wrapper problem by creating a new zone for our theme, and configuring it to meet our needs. So, we&#039;ll:
&lt;ul&gt;
  &lt;li&gt;Review templates and variables&lt;/li&gt;
  &lt;li&gt;Add a new zone to our theme&lt;/li&gt;
  &lt;li&gt;Configure our regions with the new zone&lt;/li&gt;
&lt;/ul&gt;
This is where we can really see how to blend the usefulness of code and configuration in Omega, to accomplish our task in a very simple way.

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zsejGecE0nQQCptuRbLw1sUHF0LssbeIfIp6G1VklKY.jpg.jpg</video:thumbnail_loc><video:duration>568</video:duration><video:publication_date>2012-11-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-template-variables-omega</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add Template Variables in Omega</video:title><video:description>We have a custom template file that has the HTML that we want, but not all of variables are coming through yet, and instead we are getting &quot;Undefined variable&quot; errors. In this lesson we&#039;re going to take care of that, as well as making sure our custom variables from the original 960 Robots get moved over as well. Omega has its own best practices around adding preprocess and process functions to a sub-theme, so we&#039;ll walk through what Omega expects, and how to use the files and examples that Omega is providing for us. So we&#039;re going to:
&lt;ul&gt;
  &lt;li&gt;Look at the Omega best practices&lt;/li&gt;
  &lt;li&gt;Create a process include file&lt;/li&gt;
  &lt;li&gt;Add our region variables&lt;/li&gt;
  &lt;li&gt;Add our custom variable from 960 Robots&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NZJyKRFlkKA-u4kLXsByCF1VK00_g6X8OvtWB_uVe5w.jpg.jpg</video:thumbnail_loc><video:duration>623</video:duration><video:publication_date>2012-11-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/omega-global-css-and-custom-templates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Omega Global CSS and Custom Templates</video:title><video:description>For this lesson we get to finally start to convert our 90 Robots theme into our Omega sub-theme. We&#039;re going to take a look at what we have the original 960 Robots files, and start to move that into our 960 Robots Omega theme. To start things off we will:
&lt;ul&gt;
  &lt;li&gt;Review theme files&lt;/li&gt;
  &lt;li&gt;Move main.css into the global.css file&lt;/li&gt;
  &lt;li&gt;Begin converting the page.tpl.php&lt;/li&gt;
  &lt;li&gt;Create a custom region template&lt;/li&gt;
&lt;/ul&gt;
Here is where the rubber meets the road for making our sub-theme look the way we want it to, so let&#039;s dive in.

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jW9VRouMh-0vvq3RL6oLu3rs0u-jo91hPpRXkojjfbE.jpg.jpg</video:thumbnail_loc><video:duration>884</video:duration><video:publication_date>2012-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/understand-omega-css-and-dom</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Understand Omega CSS and DOM</video:title><video:description>The combination of Omega, Alpha and our new 960 robots base theme means that there are a pile ton of CSS files included in our pages now. These CSS files provide the foundation for some of the coolest features in Omega like the mobile first approach and the ability to provide a responsive design. Lets take a look at
&lt;ul&gt;
  &lt;li&gt;The various CSS files included by alpha, Omega, and our subtheme and how they work together&lt;/li&gt;
  &lt;li&gt;Do a quick expirement to demonstrate the various CSS files associated with Omega&#039;s media queries&lt;/li&gt;
  &lt;li&gt;Talk abou the HTML output by the Omega theme and how it&#039;s structured.&lt;/li&gt;
&lt;/ul&gt;
So put on your goggles beacuse we&#039;re about dive deep into the land of responsive CSS.

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/75hZVhuiUql1V9tyrfOz6trGktJOO-P_7QJxAjC3RgE.jpg.jpg</video:thumbnail_loc><video:duration>704</video:duration><video:publication_date>2012-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/export-omega-theme-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Export Omega Theme Settings</video:title><video:description>In this lesson we will be covering how take all the settings we have made for our 960 robots subtheme and export it into code.  We will cover multiple ways of doing this and why this is a good practice to get into when working with different environements and/or other team members. We also cover adding features to the .info file from our exisiting theme into our new Omega sub-theme. So basically, this lesson will cover
&lt;ul&gt;
  &lt;li&gt;Exporting your theme &lt;/li&gt;
  &lt;li&gt;Why export?&lt;/li&gt;
  &lt;li&gt;3 Different methods of export&lt;/li&gt;
  &lt;li&gt;More theme conversion&lt;/li&gt;
&lt;/ul&gt;
Once the lesson is complete you will become an exporting guru and impress your friends at just about any gathering with your Omega Exporting amesomeness.

&lt;h3&gt;Additional resources&lt;/h3&gt;

You can download the final &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots_omega&quot;&gt;Ninesixty Robots Omega theme&lt;/a&gt; as a regular project from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jQq2_wtXAjuIahqPA69-FdUxcQlPJhaUoPbHjcgCcjY.jpg.jpg</video:thumbnail_loc><video:duration>640</video:duration><video:publication_date>2012-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-mysql-command-line</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using MySQL from Command Line</video:title><video:description>&lt;p&gt;This video looks at the basics of working with MySQL from the command line. We get into the mysql environment and look at databases, tables and fields. We cover creating and deleting databases, creating a user, and querying within a particular database.&lt;/p&gt;

&lt;strong&gt;Note:&lt;/strong&gt; In some places the command line prompt is cut-off. The YouTube version of this video doesn&#039;t have the cut-off problem. We are working on getting this fixed, but in the meantime, check out the YouTube version instead.

&lt;a href=&quot;https://www.youtube.com/watch?v=JoVLldJXzzs&amp;list=PLVqGqrTs4ZWOhcApSWYIX_rnPMZDAClJa&amp;index=14&amp;t=0s&quot;&gt;Command Line Basics 13: Using MySQL from Command Line&lt;/a&gt; (youtube.com)

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wvElcRc5p1j_gtiRExJNh-CHigvWowdbAigDXAFYH60.jpg.jpg</video:thumbnail_loc><video:duration>522</video:duration><video:publication_date>2012-11-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/module-development-drupal-7</loc><lastmod>2024-07-19T23:25Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/altering-specific-forms-and-customizing-validation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering Specific Forms and Customizing Validation</video:title><video:description>This video shows how to target a specific form with the &lt;a href=&quot;http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_form_FORM_ID_alter/7&quot;&gt;hook_form_FORM_ID_alter&lt;/a&gt; and creating a customized validation function for a form.

Note: There is a typo in this video. (The code is correct in the downloadable example file attached to the previous video.)

In the &lt;code&gt;demo_validate_password()&lt;/code&gt; function, the following line shown in the video &lt;code&gt;if (in_array($form[&#039;values&#039;][&#039;pass&#039;], $badpasswords)) {&lt;/code&gt; should be &lt;code&gt;if (in_array($form_state[&#039;values&#039;][&#039;pass&#039;],  $badpasswords)) {&lt;/code&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1icSGmBC6_4sRYPkqsKSPFU0ThduOd_p2hhZ80ZcbiY.jpg.jpg</video:thumbnail_loc><video:duration>848</video:duration><video:publication_date>2011-12-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/wysiwyg-and-media-management</loc><lastmod>2020-03-03T00:14Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/media-management</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Media Management</video:title><video:description>In this lesson we cover the concepts behind getting media (images) into your site.  We describe the two common methods as inline or image field and the advantages/disadvantages of both. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gg6OMvNkkNvqIDkJZxGcflsY3dn_ezERISWVIBkzeZA.jpg.jpg</video:thumbnail_loc><video:duration>253</video:duration><video:publication_date>2012-08-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/omega-libraries-css-and-advanced-element-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Omega Libraries, Css, and Advanced Element Settings</video:title><video:description>Besides working with sections, zones, regions, and responzive settings, Omega provides lots of other features that make using it a good choice for your theme.  Omega also offers:
&lt;ul&gt;
  &lt;li&gt;Ability to enable/disable script libraries&lt;/li&gt;
  &lt;li&gt;Ability to enable/disable theme style sheets&lt;/li&gt;
  &lt;li&gt;Ability to enable/disable core/contrib stylesheets&lt;/li&gt;
  &lt;li&gt;Typical theme settings&lt;/li&gt;
&lt;/ul&gt;
Getting to know these settings certianly helps set the look and fell as well as the capabilties of your theme.  With the ability to do things like adding the Equal heights library and enabling it across your zones is just a handy feature and it&#039;s free with Omega.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TyORWDKbtrXx1Y4UTW4ZalYZFUBRSnNcIoLGYgG_j_8.jpg.jpg</video:thumbnail_loc><video:duration>310</video:duration><video:publication_date>2012-11-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-omega-sub-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title> Create an Omega Sub-Theme</video:title><video:description>In this lesson we&#039;re going to get started with Omega by getting the base theme and creating our new sub-theme. We&#039;re going to be doing the following tasks:
&lt;ul&gt;
  &lt;li&gt;Enable Omega and Omega Tools&lt;/li&gt;
  &lt;li&gt;Use Omega Tools to create our sub-theme&lt;/li&gt;
  &lt;li&gt;Enable the new theme&lt;/li&gt;
  &lt;li&gt;Review the files of the new theme&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/uDnEBq2tD0U5H59xrGD0Q1m2PoNTszvtbRHL5pBJsSw.jpg.jpg</video:thumbnail_loc><video:duration>515</video:duration><video:publication_date>2012-10-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/attend-real-world-drupal-workshop-drupalcon-sydney</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/debugging-settings-omega</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Debugging Settings in Omega</video:title><video:description>Omega offers a simple, yet nice set, of debugging tools that assist you when it comes to laying your site out in a 960 grid.  Grid layous consist of columns that your content can span accross and part of these debuggung tools is the ability to turn on and off a visual indication of the particular column layout you are using. Omega also gives you the ability to toggle on and off a visual indication of all the regions availabile in your theme. Inside the theme settings you also have the ability to turn these features on or off all together or by role. So in this lesson we will cover:
&lt;ul&gt;
  &lt;li&gt;Omega debugging tools&lt;/li&gt;
  &lt;li&gt;Grid and region visual indicators&lt;/li&gt;
  &lt;li&gt;Omega debugging settings&lt;/li&gt;
&lt;/ul&gt;
We will also show you how these tools can cause some frustration when it comes to testing the layout of your site espcially in areas that don&#039;t have content yet available.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5HX1es4Wpfp_t0K5QtB5iKdSIf1YQ-rJHFf49B1_yj4.jpg.jpg</video:thumbnail_loc><video:duration>339</video:duration><video:publication_date>2012-10-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/omega-demo-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Omega Demo Site</video:title><video:description>Before we can really dive in to learning Omega we need to do a couple of basic setup tasks. Mostly, we need a Drupal 7 site that has some content for us to look at while we are theming. In this lesson we&#039;re going to:
&lt;ul&gt;
  &lt;li&gt;Generate some content with devel generate module&lt;/li&gt;
  &lt;li&gt;Install the &lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt; from drupal.org&lt;/li&gt;
  &lt;li&gt;Place some blocks in to the regions provided by the 960 Robots theme and talk a bit about what it gives us so that we can begin to understand how we might convert it to an Omega sub-theme&lt;/li&gt;
&lt;/ul&gt;

Under the Downloads tab, there is a copy of the final database and the files directory for this Demo site.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/prpject/devel&quot;&gt;Devel module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yznYGakkeBFv0ezkE3lXnjreBufgVj4yVMh3rdADHP4.jpg.jpg</video:thumbnail_loc><video:duration>551</video:duration><video:publication_date>2012-10-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/omega-overview-and-terminology</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Omega Overview and Terminology</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;re going to take a look at the Omega theme, cover some basic terminology around it, and discuss the advantages and challenges of using it. Specifically this lesson will cover:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Omega features&lt;/li&gt;
	&lt;li&gt;Helper modules&lt;/li&gt;
	&lt;li&gt;Where to find documentation&lt;/li&gt;
	&lt;li&gt;Omega terminology&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/omega&quot;&gt;Omega theme&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/omega_tools&quot;&gt;Omega Tools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Delta module&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/819164&quot;&gt;Omega Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/psqtm9BpKhnqEm484xKRckgA0x1N6qgj0B-opG2J3fc.jpg.jpg</video:thumbnail_loc><video:duration>580</video:duration><video:publication_date>2012-10-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/building-websites-drupal-7-using-panels</loc><lastmod>2020-03-06T22:26Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/templates-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Templates for Content</video:title><video:description>&lt;p&gt;Drupal site builders have long wanted to rearrange the display of each piece of content. The page manager module provides us with a default node view context we can use to accomplish just this. In this lesson you will learn how to break an article into two columns.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7dQPcGKuX2XUHwwPkh6CXoYra23d6YnbprW08RIMWaU.jpg.jpg</video:thumbnail_loc><video:duration>482</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/coding-views-drupal-7</loc><lastmod>2024-07-19T23:27Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/databasics-default-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Databasics Default View</video:title><video:description>In this lesson, we pull our work together by creating a new view on the site that uses the work we&#039;ve done so far with exposing our data, and creating our handlers. Once we create the view, we&#039;ll export it and add it to our module as a default view.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Zg8bwH1Ih0372DmxXXeUCIpqGrBG2WkSbor-a0sz_94.jpg.jpg</video:thumbnail_loc><video:duration>942</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-sort-handlers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing Custom Sort Handlers</video:title><video:description>In this lesson Joe demonstrates how to extend the default views sort handler and create a new one for use on our table that will allow us to sort the data returned from a  query with the rows that belong to the currently logged in user at the top of the list. This lesson builds on information from the previous couple of lessons regarding implementing views handlers and general coding for views best practices.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XIMQn3KwXvlF0EKTWqXpKRXNIw2mrdyurD3EJXe07l8.jpg.jpg</video:thumbnail_loc><video:duration>954</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-filter-handlers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing Custom Filter Handlers</video:title><video:description>In this lesson Joe takes a look at writing a custom filter handler by building on the knowledge gained about writing handlers from the previous lessons. Filter handlers control how data in a table is treated when being used in the context of a views filter including things like how the data is represented, what the form for filtering looks like and more.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/d9dj-yBtW_HpKy_kJpMzAHdq1Tn3POGyEAI6shUwmR8.jpg.jpg</video:thumbnail_loc><video:duration>1288</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-access-plugin</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Access Plugin</video:title><video:description>In our original Databasics module, we had some access control around who could see the tab we are providing on the user page. Now that we have switched that tab to being a view, we need to still add that access control back. In this lesson, we will work with a new feature of Views: plugins. We will create an access plugin that gives us the freedom to add our own custom access control, along with settings to give our users a choice about what access they&#039;d like to use.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3Nmc_7wf9LJ9Td-l9xBpuNi2x71PtPRsjOP8K8gVVW0.jpg.jpg</video:thumbnail_loc><video:duration>1328</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-fields-do-not-exist-database</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Fields That Do Not Exist in the Database</video:title><video:description>In this video we&#039;ll look at adding yet another field handler, but in this instance we will be adding a Views field that does not directly map to an actual field in the database. Instead we will be creating our own variation on some data and adding it as a field that can be used in our views — a field that shows the percentage of page views as a black bar graph.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Gt6kQouXrdGV8sz-QvdzgFfbHk_MH-diPK90xbOdsSI.jpg.jpg</video:thumbnail_loc><video:duration>717</video:duration><video:publication_date>2012-10-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-default-view-exporting-existing-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a Default View by Exporting an Existing View</video:title><video:description>One of the most common things to do with Views is export a view from your site and store it in code as a default View. This is what Features module does when you create a feature with a view in it. In this lesson we&#039;ll export our sample site&#039;s view and add it to our module with hook_views_default_views().

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OottShd2QcGejz4rds1zhNAQUw_DFbkasqX3I7D2000.jpg.jpg</video:thumbnail_loc><video:duration>515</video:duration><video:publication_date>2012-09-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-field-handlers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing Custom Field Handlers</video:title><video:description>In this video Joe will walk through writing a custom field handler for views. Demonstrating how to extend the set of handlers that come with the views module in order to provide new functionality or for dealing with new types of data. In this case we&#039;ll look at how to treat the numerical values in the databasics module as percentages in views. The method used to write a field handler in this video is similar to overriding other handlers like filters and sorts that will be discussed in coming chapters and provides some important foundations for understanding how to work with all views handlers.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/lullabot/databasics&quot;&gt;Databasics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JreEYB0Njoo_yXXduqkgRSqm7v7u45W8h3GkqsLmAwE.jpg.jpg</video:thumbnail_loc><video:duration>1215</video:duration><video:publication_date>2012-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exposing-your-modules-tables-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exposing Your Module&#039;s Tables to Views</video:title><video:description>In this video Joe looks at using &lt;code&gt;hook_views_data()&lt;/code&gt; in order to describe a database table to views such that views is capable of making queries to that table. We’ll talk about describing the table itself, and how to get it to appear in the views UI as an option that can be used as a base table.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;h3&gt;Modules Needed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/lullabot/databasics&quot;&gt;Databasics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1jqToAchfwSalMojHqMDW2Xp7p_jQyVBxRBIBVawEp0.jpg.jpg</video:thumbnail_loc><video:duration>1087</video:duration><video:publication_date>2012-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/quickly-duplicating-variants-cloning</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Quickly Duplicating Variants by Cloning</video:title><video:description>&lt;p&gt;Now that you&amp;rsquo;ve manually created a new variant for your front page, this lesson will teach you a much faster way to duplicate an existing variant. This technique is useful if your variants are very similar to one another.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7q8dY3zmc5RDBqZWP326kgviic0Of2Q2UqUdAZNnAQQ.jpg.jpg</video:thumbnail_loc><video:duration>376</video:duration><video:publication_date>2012-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-different-versions-same-page-variants</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Different Versions of the Same Page (variants)</video:title><video:description>&lt;p&gt;Panels and the Page manager module allow you to create different versions of the same page (called variants) under different circumstances. In this lesson you will learn how to build two different versions of the content on your home page. People who are logged in to your site will see a different home page than people who are not.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rUqep80x2yyGCR74u2qmsGB3kZxPuzeTjoL9I--7Mp4.jpg.jpg</video:thumbnail_loc><video:duration>478</video:duration><video:publication_date>2012-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-field-handlers-continued</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title> Writing Custom Field Handlers Continued...</video:title><video:description>This video continues the process of adding a custom field handler started in the previous chapter.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/lullabot/databasics&quot;&gt;Databasics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I2FNdbTod6CUl86pkgnh5kp1TezmzUdNO-ygU1qKEUM.jpg.jpg</video:thumbnail_loc><video:duration>1026</video:duration><video:publication_date>2012-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/theming-basics-drupal-7</loc><lastmod>2024-06-27T23:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/creating-info-file-and-adding-css</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating the .info File and Adding CSS</video:title><video:description>&lt;p&gt;This chapter goes through the minimum steps for registering a theme within Drupal by creating a .info file. It also shows the syntax for a theme to be able to add custom CSS to your site as we start to implement our example design.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZiCCoOXAaYL4xXhVgwh1Dt9WGeJkdUOoyB97cjxT2Ug.jpg.jpg</video:thumbnail_loc><video:duration>614</video:duration><video:publication_date>2011-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-theming-basics-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Theming Basics for Drupal 7</video:title><video:description>&lt;p&gt;Theming Basics for Drupal 7 will provide a solid foundation for translating designs into Drupal themes. You&amp;#39;ll learn to work with .info and tpl.php template files, how to add CSS and JavaScript, how to work with the render system new in Drupal 7, how to override templates, create regions, and use the Theme Developer tool. You&amp;#39;ll start with the original HTML, CSS and JavaScript template files that were provided by the designer so that you can follow along in translating the design into a Drupal 7 theme. The video explains Drupal&amp;#39;s design vernacular, concepts, and special needs. We&amp;#39;ll show you how to associate the proper CSS &amp;amp; Javascript files, add all of the necessary regions, and control the HTML output through page and node-specific templates. You&amp;#39;ll learn about the best tools and strategies for controlling the look and feel of your Drupal website. &lt;/p&gt;

&lt;p&gt;This series will cover the basics of Drupal theming while the more advanced theming topics of working with the template.php file will be covered in the &lt;a href=&quot;series/advanced-theming-drupal-7-series&quot;&gt;Advanced Theming for Drupal 7 series&lt;/a&gt;. These videos pair with each other, and will finish the complete implementation of the 960 Robots theme used in both videos. You can download the theme we&amp;#39;re building from Drupal.org: &lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Examples in this video are based on Drupal 7 and its variants. &lt;/p&gt;
 
&lt;p&gt;In this introduction video, we set the stage for the Theming Basics series. We give an overview of what Drupal theming is, the common files we will work with, and the overall steps involved. Then we start off by defining and taking a look at the .info file and HTML template (tpl.php) files. We talk about regions and theme features, introduce the render() function, and explain dynamic templates. While we are teaching Drupal 7 theming, we also make sure to point out the important differences between Drupal 6 and 7.&lt;/p&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/devel_themer&quot;&gt;Theme developer at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/oi2ttcrImycGCz_Kf0DFSFjOylXetjTgVpgvG8joPIU.jpg.jpg</video:thumbnail_loc><video:duration>1120</video:duration><video:publication_date>2011-09-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-multi-column-home-page</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting up a Multi-Column Home Page</video:title><video:description>&lt;p&gt;Drupal would like to assume that every page on your website will use the same layout. As it turns out, this is often not the case. The home page of your site, in particular, regularly uses a different layout. In this lesson we will demonstrate how you can use Panels to build a unique home page layout for your site.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels module — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YmTtr3ybvc-97WMc5RQtcePkkZ00UtU7WPa-9CDkzok.jpg.jpg</video:thumbnail_loc><video:duration>592</video:duration><video:publication_date>2012-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exposing-your-modules-tables-views-continued</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title> Exposing Your Module&#039;s Tables to Views Continued...</video:title><video:description>In this video Joe continues the discussion of using &lt;code&gt;hook_views_data()&lt;/code&gt; to describe a module&#039;s table to the views module. Building on what was covered in the previous chapter we now deal with exposing one of the individual columns from our table as a field that views can use for filters, sorts, and to display.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;h3&gt;Modules Needed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/lullabot/databasics&quot;&gt;Databasics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Oc7dYlt7dR-2VQZHAMyhpG4QA9hzh34lJ8dcjfRH6Qs.jpg.jpg</video:thumbnail_loc><video:duration>931</video:duration><video:publication_date>2012-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/re-introducing-databasics-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Re-Introducing the Databasics Module</video:title><video:description>In this chapter Joe will take a look at where to get a copy of the &lt;a href=&quot;videos/overview-database-layer-drupal-7&quot;&gt;databasics code&lt;/a&gt; and what it does already. Throughout the rest of this series we will be working towards replacing functionality from the databasics modules with views integration in order to allow for greater flexibility in the ways that our module can be used. We&#039;ll talk about each of this pieces of functionality in this chapter.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/Lullabot/databasics/tree/7.x-complete&quot;&gt;Databasics module on GitHub&lt;/a&gt;
&lt;a href=&quot;videos/overview-database-layer-drupal-7&quot;&gt;Overview of the Database Layer in Drupal 7&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q5DfEHhgN72miHShnhtzCvAcAHEtwBJZxgAZiNLw8pQ.jpg.jpg</video:thumbnail_loc><video:duration>534</video:duration><video:publication_date>2012-09-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/telling-views-about-your-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Telling Views About Your Module</video:title><video:description>To get things started, in this lesson we&#039;ll create a new module, and use hook_views_api() to let Views know we want to use its API.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2l0rDm4mRLpAD87121YdghQOA1lttEWkDrNmIRuaxyQ.jpg.jpg</video:thumbnail_loc><video:duration>342</video:duration><video:publication_date>2012-09-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/advanced-theming-drupal-7</loc><lastmod>2024-07-19T23:28Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/altering-variables-preprocess-functions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering Variables with Preprocess Functions</video:title><video:description>In this video we introduce the template.php file and create our first preprocess function. We explain what the preprocess hooks are and how to name the function properly, then we show a list of existing variables, and how to modify one of those existing variables.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ap0rv_SPngcCShtdJNsHMBJS-EHHQrKUc50KGGja2UI.jpg.jpg</video:thumbnail_loc><video:duration>876</video:duration><video:publication_date>2011-11-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/finding-additional-views-help-and-resources</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Finding Additional Views Help and Resources</video:title><video:description>In this lesson, we give a brief overview of utilizing a very important feature when it comes to working with Drupal and that&#039;s Drupal.org. We show you how to get to the Views API documentation that is now part of Drupal&#039;s API documentation and teach you how to use the search function for finding particular function.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/views-developers&quot;&gt;Views for Developers&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/topic/display-content-views&quot;&gt;Display Content with Views&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/v19IN7a0ejyD85HHW6jpdD75dlOR_UNOrQJcIXe0EbE.jpg.jpg</video:thumbnail_loc><video:duration>282</video:duration><video:publication_date>2012-09-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-your-local-environment</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting up Your Local Environment</video:title><video:description>In this lesson we cover setting up your local environment and getting the necessary modules to make Coding with Views easier and possible when it comes to following along with this series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5UoeDvmZRGEK7juMTyg19Oo3R2IsRp4FCyWnumdxh10.jpg.jpg</video:thumbnail_loc><video:duration>312</video:duration><video:publication_date>2012-09-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/our-approach-data-migration-upgrade</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/tips-and-tricks-images</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Tips and Tricks with Images</video:title><video:description>In this lesson we bring everything we have learned in this series and just round it out with some tips and tricks now that we have images in our content.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iHHUnnmCtvkX0MiJMRJ1F9U3He8DWVbrpyuoOeTTc84.jpg.jpg</video:thumbnail_loc><video:duration>680</video:duration><video:publication_date>2012-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/more-text-formats-and-using-editor</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More Text Formats and Using an Editor</video:title><video:description>In this lesson we go a little deeper on working with Text Formats and having the ability to create different WYSIWYG editor situations for different users/roles. We also go over the process of using and editor and best practices when doing so.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/okAGYcIWL7K-eTOi5OqmM4snhTekC52OgEGD037d3DM.jpg.jpg</video:thumbnail_loc><video:duration>785</video:duration><video:publication_date>2012-08-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/images-and-imce-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Images and the IMCE Module</video:title><video:description>&lt;p&gt;In this lesson we cover the IMCE Module and utilizing it to get images into your content. We cover the configurations that are unique to this module such as user upload paths and different per role restrictions when it comes to uploading images. We discuss how this module integrates perfectly with your editors &amp;quot;Image&amp;quot; button and creates a pretty easy work flow for the average web user.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/imce&quot;&gt;IMCE&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/imce_wysiwyg&quot;&gt;IMCE WYSIWYG API Bridge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GD01ZyG24JBbNZiGfSMGUS-LMJsfPZJJTq78kcE6VFI.jpg.jpg</video:thumbnail_loc><video:duration>428</video:duration><video:publication_date>2012-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/images-and-media-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Images and the Media Module</video:title><video:description>In this lesson we cover using the Media Module and how it works for both methods of getting images into your content.  The Media Module has the ability to be a widget for the image field or a button inside your editor.  We discuss the pros and cons of these methods and you could get the best out of both with just a little tip.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/media&quot;&gt;Media&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IjPoV8GJ2XPxZF7keUBVCm0bWuaZ0kSGqbAftsHmoIU.jpg.jpg</video:thumbnail_loc><video:duration>731</video:duration><video:publication_date>2012-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/display-suite-drupal-7</loc><lastmod>2020-03-03T00:08Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/changes-display-suite-version-2</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Changes in Display Suite Version 2</video:title><video:description>This lesson covers all the updates/differences in the latest 2.x version versus other Drupal 7 releases. The new 2.x version of Display Suite is still in active development at the time that this video was published, but we want to make sure you know the changes that are coming when the new version is finally released. This video is very important to view if you are using Display Suite version 2 for the first time and have watched other videos in this series. It covers UI changes/updates as well as feature differences.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KuyUjFgz4xVd6uwSn1kuSgrECdQtKIAsXd4TfYF3mcM.jpg.jpg</video:thumbnail_loc><video:duration>908</video:duration><video:publication_date>2012-08-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-exportables</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite Exportables</video:title><video:description>In this lesson we cover how all over the configurations we have learned using Display Suite are able to be exported to code.  This video shows how to do this using CTool but can also be done with Features as well.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;
&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/F32Vxb36w74zKKvuegywkPz4gjhGxcfdEMVMa-bwQUo.jpg.jpg</video:thumbnail_loc><video:duration>571</video:duration><video:publication_date>2012-08-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/coding-rules</loc><lastmod>2024-07-23T23:57Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/creating-rules-action</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a Rules Action</video:title><video:description>This chapter shows how to create a basic Rules action. It covers:

&lt;ul&gt;
  &lt;li&gt;The role of the module.rules.inc file&lt;/li&gt;
  &lt;li&gt;Using hook_rules_action_info&lt;/li&gt;
  &lt;li&gt;Writing action callbacks&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6X_vgGl786RRLQqH-WlwWyEXpAceMEvDYRsN81bwruo.jpg.jpg</video:thumbnail_loc><video:duration>501</video:duration><video:publication_date>2012-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/coding-rules-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Coding for Rules Overview</video:title><video:description>&lt;p&gt;This series covers the basics and some more of how to write your own plugins to extend the &lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;Rules module&lt;/a&gt;. It includes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A conceptual overview of the Rules modules&lt;/li&gt;
	&lt;li&gt;Writing action plugins&lt;/li&gt;
	&lt;li&gt;Managing rules data as parameters for Rules plugins&lt;/li&gt;
	&lt;li&gt;Writing conditions&lt;/li&gt;
	&lt;li&gt;Writing and invoking Rules events&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This intro chapter contains a quick presentation of the Rules module from a conceptual perspective. It includes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Actions, conditions, events&lt;/li&gt;
	&lt;li&gt;Data types: the importance of entities, relationships and tokens&lt;/li&gt;
	&lt;li&gt;Lists and loops&lt;/li&gt;
	&lt;li&gt;Components and parameters&lt;/li&gt;
	&lt;li&gt;Some words about the Rules user interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you would like to see more about configuring Rules before continuing this series on writing code to integrate with the Rules module, you can watch the &lt;a href=&quot;videos/introduction-rules&quot;&gt;Learning the Rules Framework series&lt;/a&gt;. Note that Johan is using the &lt;a href=&quot;http://drupal.org/project/module_filter&quot;&gt;Module filter&lt;/a&gt; module to provide the tabs and filter box on his module administration page.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0WplRiwrZGE3sQIBjM8RMYXUoyOZLl1TgCyCc-VAoK8.jpg.jpg</video:thumbnail_loc><video:duration>858</video:duration><video:publication_date>2012-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-views-displays</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite Views Displays</video:title><video:description>In this lesson we cover another &quot;extra&quot; of Display Suite, Views Displays.  This basically allows you to take over a view template file and use Display Suite to layout your views.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;
&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wEiIyGXHI2dF1R-TSWHOEcLt83lpESwWz7dycpb4ce4.jpg.jpg</video:thumbnail_loc><video:duration>353</video:duration><video:publication_date>2012-08-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jquery-macro-maker-demonstration-module</loc><lastmod>2025-05-16T21:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>The jQuery Macro Maker Demonstration Module</video:title><video:description>Goes over the Macro Maker demonstration module in order to show what functionality we will be building over the next couple of chapters.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/a5D6jpJewTSMxkUe2pYJmymg9i3QqsjsOZnN2TgGkFs.jpg.jpg</video:thumbnail_loc><video:duration>721</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/various-display-suite-extras</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Various Display Suite Extras</video:title><video:description>In this lesson we cover several extra options provided by the included &quot;Extras&quot; module with display suite. We will show how turning on the Contextual Links extra makes it easier to edit a layout when viewing an entity that is using it.  We also look at the Page Title extra that allows you to hide/show the title for a particular layout.  Finally we discuss a very powerful feature that allows you to have an option of an end user to select between different view modes.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nATOpT_9YXQmuceOWThYz_WpNUFrIxG7GJMIeY5YCdY.jpg.jpg</video:thumbnail_loc><video:duration>578</video:duration><video:publication_date>2012-08-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/region-block</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Region to Block</video:title><video:description>In this lesson we learn how you can take a display region and create a block out of it to be placed in Drupal core&#039;s block system.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EsCNOaq7ijHmq73XN36DDk7OCpQ5dWi3nQ_JRdqAlAQ.jpg.jpg</video:thumbnail_loc><video:duration>220</video:duration><video:publication_date>2012-08-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-search-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite Search Display</video:title><video:description>In this lesson we cover using the search display portion of Display Suite.  This allows you to have a custom layout for your search results as well as your user search results.  Display Suite offers lots of functionality here that you just can&#039;t get with a core configuration of search.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LlkA0kKnprwZmuq39iK-ad9KWn59onvWQNBj82Uxrb0.jpg.jpg</video:thumbnail_loc><video:duration>536</video:duration><video:publication_date>2012-08-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite Fields</video:title><video:description>In this lesson we cover adding different type of custom fields to your layout using Display Suite. From adding a custom code field, blocks, to dynamic fields, each of these can be moved around your layout and replicated/modified across different display modes.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-TKeUuphqfrBVLY9jfROdClbUJz3lDtlhQ-ZdQcfncA.jpg.jpg</video:thumbnail_loc><video:duration>664</video:duration><video:publication_date>2012-07-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/organic-groups-drupal-7</loc><lastmod>2020-03-03T18:14Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-access-control</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Access Control</video:title><video:description>In this lesson Joe Shindelar covers all aspects of Organic Groups and access control.  He describes how Drupal&#039;s access API allows for Organic Groups to function in such a way that certain groups and/or pieces of content can be hidden from users that don&#039;t have access to it.  He demonstrates how you can add fields to groups and/or content types to have fine control over this access control on an individual basis versus the defaults. He also demonstrates how you can switch this control at any time to give a user access to content they may not have had access to at time of publication.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NXevpVFJBY4ayG3YntfzsO8fxJHMTmVqK3lRiL1juRE.jpg.jpg</video:thumbnail_loc><video:duration>1228</video:duration><video:publication_date>2012-06-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Views</video:title><video:description>In this lesson we give a tour of some of the views that Organic Groups and Organic Groups Extra created and are using.  We give a brief understanding of how all the references and relationships can make Organic Groups a confusing thing to grasp.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/og_extras&quot;&gt;OG Extras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0Y2qOSFZr3ctHWN_HVQmLw7u0JmvW1aALyaYPKMe_5o.jpg.jpg</video:thumbnail_loc><video:duration>483</video:duration><video:publication_date>2012-07-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-advanced-conceptsfields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Advanced Concepts/fields</video:title><video:description>In this lesson Karen will go into more detail about how the Entity Reference and other group and reference fields work in Organic Groups. She will  show how you can add more fields to the membership and display them in Views. Karen will also illustrate how to create additional membership types, like a membership that is intended to be temporary rather than permanent.

Note: This video was recorded using older versions of some of the modules. At the time there where 2 different og_reference* fields that you needed to handle. og_reference and og_group_ref_other_groups_ref, in current versions of the modules used there is just one og_reference field.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/computed_field&quot;&gt;Computed Field&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/r-MTJng3g0QtX_UZci4WoyrpD5NugfqMUuOwQnRPJWI.jpg.jpg</video:thumbnail_loc><video:duration>1634</video:duration><video:publication_date>2012-07-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/displaying-content-without-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Displaying Content without Panels</video:title><video:description>In this lesson we take the approach of using the Organic Groups Extra module to spruce up our team pages with relevant content. By itself Organic Groups doesn&#039;t do a whole lot to display either a useful groups page or the relationships between a piece of content and the group itself. Instead it relies on modules that are geared towards that specific task like Panels or Organic Groups Extras. Joe shows us how we can use OG Extras to make the group page itself a bit more useful by displaying some additional information like a list of group members and the list of all the content that&#039;s been posted in that group.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/og_extras&quot;&gt;OG Extras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/eva&quot;&gt;EVA: Entity Views Attachment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VNK3Jd3XFA2Ye0tZo8aGySaUCoxnqxHV5VcsAfATjcY.jpg.jpg</video:thumbnail_loc><video:duration>1547</video:duration><video:publication_date>2012-07-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/requirements-organic-groups</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Requirements for Organic Groups</video:title><video:description>In this chapter, Joe Shindelar goes over all the necessary modules needed to get organic groups up and running.  He also discusses that there are two methods using two different modules for viewing group information and content.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference_prepopulate&quot;&gt;Entityreference Prepopulate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og_extras&quot;&gt;OG Extras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Drupalize.me - Installing and Enabling Modules &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1h-VS1lcmJM-K77bF6SviPEmQW7k2NLsEywGRQyWzMw.jpg.jpg</video:thumbnail_loc><video:duration>454</video:duration><video:publication_date>2012-06-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-organic-groups-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>An Introduction to Organic Groups with Drupal 7</video:title><video:description>&lt;p&gt;In this video series Karen Stevenson, Michelle Lauer, and Joe Shindelar take a look at the &lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt; module for Drupal 7. The series starts from the basics, goes through the various required modules used to build a site with Organic Groups, and then gets in depth with creating groups, adding content to groups, and dealing with group membership. In addition to the basics of creating groups, the series also takes a look at the various settings related to both access control and permissions and how you can combine them to create private and public groups. Next we show you how to use the OG Extras module to display more information on the main group page and then how to use the Panels module to display group content and other advanced Fields and Views configuration related to OG. This video assumes that you understand the basics of content, fields, and Views in Drupal. If you need a refresher on these topics, consider reviewing these other tutorial series:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: There have been significant changes to Organic Groups since this lesson was made. We use the 7.x-2.x-dev version from May 2012, or the equivalent of 7.x-2.0-alpha3, in our lessons. Though we would like to revisit and update this series, we have no current schedule to complete that. The best place to figure out what has changed and why, would be the Organic Groups issue queue on Drupal.org (http://drupal.org/project/issues/search/og).&lt;/em&gt;&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nlrB20YhX1N-sWrTDznPw3xsqc4NM1kQJbFvSHJ_v0c.jpg.jpg</video:thumbnail_loc><video:duration>402</video:duration><video:publication_date>2012-06-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/groups-member-perspective</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Groups from a Member Perspective</video:title><video:description>In this video Michelle takes a look at our example site, My Town Sports, from a member&#039;s perspective. We can review a list of groups, subscribe and unsubscribe, and create content for a group we belong to.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nDMRKwNkWEQhhip8ExWlYjJPfzlnLVGO5a2oGKaR_xg.jpg.jpg</video:thumbnail_loc><video:duration>265</video:duration><video:publication_date>2012-06-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/calendars-drupal-7</loc><lastmod>2020-03-06T22:23Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/advanced-calendar-concepts-and-configurations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Advanced Calendar Concepts and Configurations</video:title><video:description>&lt;p&gt;In this video we take a look at several advanced configuration options when working with calendars. We start off by talking about the various pager options available and how that works with AJAX, and then we explain how you can keep track of the current date that someone is viewing the calendar in as they move through the various displays. We wrap up by covering three methods for working with caching to improve your site&amp;#39;s performance, as calendars can be intensive, depending on the site. We&amp;#39;ll discuss caching with the &lt;a href=&quot;http://drupal.org/project/entitycache&quot;&gt;Entity cache module&lt;/a&gt;, using the Date API date caching, and then review using views caching.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/entitycache&quot;&gt;Entity cache module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xbhOq8DwC59GzhZHI0-bm2HNBKUKsfRhIDujW_-jPqk.jpg.jpg</video:thumbnail_loc><video:duration>646</video:duration><video:publication_date>2012-06-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Overview</video:title><video:description>In this presentation Karen walks us through the basic concepts of the Organic Groups 7.2 module, also known as OG. She looks at what OG can do for us, explains how it works in Drupal 7 with entities, and does a brief comparison of OG with a multi-site installation.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XoJjyOVyEoanopQ92b8UpX3R7tHhBSL1a22Jt_1c2WM.jpg.jpg</video:thumbnail_loc><video:duration>370</video:duration><video:publication_date>2012-06-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overriding-theme-functions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overriding Theme Functions</video:title><video:description>In this video we will look at overriding a theme function instead of working with the template files. We will be modifying the breadcrumb using theme_breadcrumb(). to do this we&#039;ll use the &lt;a href=&quot;http://drupal.org/project/devel_themer&quot;&gt;Theme Developer module&lt;/a&gt; to help us find what we&#039;re looking for, and then we&#039;ll walk through how to override. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/devel_themer&quot;&gt;Theme Developer module&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GJH-rtYFQzTz4hAoCw8m1AARAE8bSxF-6AaTZbvDQ6U.jpg.jpg</video:thumbnail_loc><video:duration>558</video:duration><video:publication_date>2011-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-drupal-menu-system</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of the Drupal Menu System</video:title><video:description>Provides a overview presentation for how Drupal&#039;s menu system takes care of incoming requests via the index.php. Then it walks through the process of implementing a simple module that hooks into Drupal&#039;s menu system at the path of &lt;code&gt;/magic.&lt;/code&gt; It then executes a page callback function of &lt;code&gt;menu_magic_basic(),&lt;/code&gt; which outputs some simple markup text.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x&quot;&gt;hook_menu() documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9WyRRpIoYn-KEltB68w-ghppDHgJg_wc_J3WnwsTn_E.jpg.jpg</video:thumbnail_loc><video:duration>1083</video:duration><video:publication_date>2011-12-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-preprocess-function-theme-function</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a Preprocess Function for a Theme Function</video:title><video:description>In this video we will see how we can create our own preprocess function for a theme function (not just templates). We&#039;re going to use this to display the user&#039;s full name on the site wherever the the username would normally appear. We start by creating a full name field, and then show how to get this working on our site.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TnaEdnwFDCqTqnat4VD2Uqzd9Ikro7u8XG97SBuQ1Ag.jpg.jpg</video:thumbnail_loc><video:duration>641</video:duration><video:publication_date>2011-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-conditional-css-and-javascript</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Conditional CSS and Javascript</video:title><video:description>In this video we will look at how to add CSS and JavaScript to our site using &lt;code&gt;drupal_add_css()&lt;/code&gt; and &lt;code&gt;drupal_add_js()&lt;/code&gt;. We will also show using these functions to conditionally add the CSS and JavaScript, within our page preprocess function.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QjGQiXCtfH2j0obmslhCR0ubvCMfqtY8mN29a009XCI.jpg.jpg</video:thumbnail_loc><video:duration>614</video:duration><video:publication_date>2011-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dynamic-templates-themehooksuggestions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Dynamic Templates with theme_hook_suggestions</video:title><video:description>In this video we&#039;ll see how we can create our own template suggestions. We&#039;ll do this in our node preprocess function to create a new node template that will be used depending on the day of the week.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/--uTM5KKyBry98Pk-9rMb7fsNUAggOV2PZhhd-V-1XM.jpg.jpg</video:thumbnail_loc><video:duration>815</video:duration><video:publication_date>2011-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-multiplerepeating-dates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display of Multiple/Repeating Dates</video:title><video:description>&lt;p&gt;In this lesson we will cover what is necessary to use repeating/multiple dates on a single event. After getting the proper modules installed and a content type to handle repeating dates, we show you how the calendar module handles this out of the box. We go even further and explain how everything is setup to give you a better understanding of all the settings necessary to make this happen.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ySY1mqTEfD8QRB9rHNDg3IMbYxpYhON2zOxS7isIUdQ.jpg.jpg</video:thumbnail_loc><video:duration>438</video:duration><video:publication_date>2012-06-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-day-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Day View</video:title><video:description>&lt;p&gt;In this lesson we will configure the day view even further by adding our taxonomy field as a method of grouping events. This will give us the ability to show events grouped together in a column to further organize our day view.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_auLncZbyqm8z4xwZvi3OB-44rHwtzH7OvTqI_d0SRk.jpg.jpg</video:thumbnail_loc><video:duration>174</video:duration><video:publication_date>2012-06-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/crowd-sourced-subtitles-free-drupal-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/customizing-day-and-week-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Day and Week View</video:title><video:description>&lt;p&gt;In this lesson we will cover customizing the day and week view. Sometimes your events may have the same or close to the same start times, this can start to make your calendar look very complicated. We will show you how to utilize the overlapping feature and all of the settings to make the display easier to look at for your viewers. We will also discuss how to bring focus to certain time periods and some more advanced settings pertinent to the week and month view.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OzE9tFBjIpV0CR4lD-7uMGFDZAux1cN6-J-zJQUhTCc.jpg.jpg</video:thumbnail_loc><video:duration>611</video:duration><video:publication_date>2012-06-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/striping-and-legend-block</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Striping and Legend Block</video:title><video:description>&lt;p&gt;In this lesson we add some usability to our calendars with color-coded striping. You get to pick which colors represent which taxonomy terms so that each calendar event is marked. Alternatively, you can stripe your calendars by content type. We also add the Legend block to our sidebar that shows what each color represents.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Yprfz2-4U482yH_UMyCVDRkvrOVHJoYGuWs1sudVyPs.jpg.jpg</video:thumbnail_loc><video:duration>485</video:duration><video:publication_date>2012-05-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-month-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Month View</video:title><video:description>&lt;p&gt;Do you find that you have too many events on one day and that it is skewing the look and feel of your calendar? You have options! You can set a maximum number of events that display per day and include a &amp;#39;more&amp;#39; link that takes you directly to the View of that specific day. Does that inconsistency bother you? You can make the link appear for any day that has any number of events.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2YE1c_T0dFEID0croA4eQWD_53uOTLG2vHfyax3pYNk.jpg.jpg</video:thumbnail_loc><video:duration>225</video:duration><video:publication_date>2012-05-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-month-and-week-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Month and Week View</video:title><video:description>&lt;p&gt;In this lesson, we cover how to customize the Month and Week view of the calendar. The primary concept in this video deals with the different ways of displaying an event that covers multiple days and how it is outputted to the screen.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tz068XE72S6H4WHP0z-x0vCuBRo-VxnA_vIy65Wrehc.jpg.jpg</video:thumbnail_loc><video:duration>230</video:duration><video:publication_date>2012-05-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/ical-feed</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>iCal Feed</video:title><video:description>&lt;p&gt;In this lesson we show you how to add an iCal feed to a new calendar and an existing calendar. We cover the required modules for an iCal display as well as the configurations necessary for it to work properly. We also show you what an iCal feed looks like and how you can remove certain fields from it.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/project/date_ical&quot;&gt;Date iCal module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/entity&quot; title=&quot;Entity API&quot;&gt;Entity API module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mi8Uhg8HM8AoK1XxZUaFfB49WAUsuJKqYnorzmQqE5c.jpg.jpg</video:thumbnail_loc><video:duration>749</video:duration><video:publication_date>2012-05-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/calendar-blocks</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Calendar Blocks</video:title><video:description>&lt;p&gt;In this chapter we will cover utilizing some built in blocks that come with the calendar module. We&amp;#39;ll show you how to setup and configure a mini calendar block as well as an upcoming events block.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8hkh_zvP4C-1taNdJswNSyVi0PVMHs3C2eIMO2cekzg.jpg.jpg</video:thumbnail_loc><video:duration>411</video:duration><video:publication_date>2012-05-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/calendar-views-displays</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Calendar Views Displays</video:title><video:description>&lt;p&gt;In this chapter we will discuss how an administrator can change the look of a calendar display. Out of the box and using the views template, a calendar is ready to go, but sometimes you just want to change things up. This video will cover the basics of editing a views display to make the calendar week view a list of events instead of the standard calendar week display.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DKlnXBJVEXg-Ft46wTxP6o2gViR_2g9pJsZs7OMZceY.jpg.jpg</video:thumbnail_loc><video:duration>321</video:duration><video:publication_date>2012-05-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/page-links-content-creation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>In-Page Links for Content Creation</video:title><video:description>&lt;p&gt;In this chapter we will cover a little hidden gem of the calendar module. We will show you how to place a link at the top of a calendar display to quickly jump into adding content to the calendar based on the content type used.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I6if7qvpvhEYoEWnVYi1oQirvBPOI0gMi_K1PzQY9BM.jpg.jpg</video:thumbnail_loc><video:duration>241</video:duration><video:publication_date>2012-05-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/day-week-display-configurations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Day of Week Display Configurations</video:title><video:description>&lt;p&gt;In this chapter we will show you some configurations of the calendar that allow you to modify how it outputs things like Monday versus Mon. These configurations can be modified in each calendar display and blocks for what makes sense to the implementation used.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BmsYLJesShOdGVs_U13bEiXDElA5D13UGNpoSRUA4No.jpg.jpg</video:thumbnail_loc><video:duration>209</video:duration><video:publication_date>2012-05-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/come-meet-us-badcamp</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/calendar-series-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Calendar Series Overview</video:title><video:description>In this series, we give you step-by-step tutorials to get a calendar on your website.

We’ll create a field that will help you get data into your calendar, go over all the proper modules you need to install, and introduce you to a new way of getting your calendar going with a template. Then we’ll configure some blocks, add them to our website to display a mini calendar and upcoming events, and bring taxonomy in to get some organization inside your calendar. We’ll customize the look and feel of the calendar and get involved in using repeating dates or multiple dates.

By the end of this series, you will become a calendar guru.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt; 
 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WMnm9HD5lL-Nhu40MtAtOtjxH5KucTV5C_NoJzgTNeM.jpg.jpg</video:thumbnail_loc><video:duration>114</video:duration><video:publication_date>2012-05-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-event-data-work</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create Event Data to Work with</video:title><video:description>&lt;p&gt;In this starting chapter, Karen is going to set up some basic things we&amp;#39;ll need to start building calendars. We&amp;#39;ll enable the modules we need, including &lt;a href=&quot;http://drupal.org/project/date&quot;&gt;Date&lt;/a&gt; and &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;, and take care of some core configuration for our dates. Then we&amp;#39;ll use Date Tools (which comes packaged with the Date module) to quickly create an Event content type with a date field, and use &lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt; to generate a bunch of dummy content so we can see how things are shaping up as we start building. If you would like to see more detail about creating Date fields you can review the &lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7 series&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/555a2s0r0hkBz2-WcnVECBDKoL36u2JSWoicjj7eTYk.jpg.jpg</video:thumbnail_loc><video:duration>995</video:duration><video:publication_date>2012-05-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-started-calendar</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Started with Calendar</video:title><video:description>&lt;p&gt;In this chapter we will get a calendar up and running on our demo site. We will cover the necessary modules, how to install them, as well as basic site configurations. We&amp;#39;ll also show how simple it is to get a calendar on your site using a views template, and then give a tour of some calendar features.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot; title=&quot;Calendar Module&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot; title=&quot;CTools&quot;&gt;CTools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot; title=&quot;Views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3I3fuQyr895CQqVypW91kXONwHtHu2AV3Cb3dr2YPfs.jpg.jpg</video:thumbnail_loc><video:duration>553</video:duration><video:publication_date>2012-05-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/translating-design-drupal-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Translating a Design into a Drupal Theme</video:title><video:description>This video goes through some of the strategies for translating a design into a Drupal theme. We talk about the two approaches of adding the HTML to an existing Drupal theme template vs. inserting dynamic variables into the HTML provided by our designer. Throughout this video, we&#039;re going to be assuming that our designer has delivered the full HTML, CSS and JavaScript to us, and we&#039;ll be adding in the dynamic variables. In this process we start to look at the design and start to break it up into it&#039;s component Drupal parts and start to strategize for how to build out the site and implement the design..

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E-guurvdIXFEmVQRWnZ5iqdwp7wX-xmD9n4bwlsTrKE.jpg.jpg</video:thumbnail_loc><video:duration>320</video:duration><video:publication_date>2011-09-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/dates-drupal-7</loc><lastmod>2020-03-06T22:22Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-dates-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to the Dates Series</video:title><video:description>&lt;p&gt;When you learn how Drupal handles dates, you can create event functionality, listing pages with a unique result set, and calendars. The Dates Series begins with basic configurations and the contributed modules required to integrate with other functionality. In addition to creating a new content type for our Date field via the wizard, we also explore all possible configuration choices by diving deeper into the Date field. Once we have content on our site, we move into displaying the content in unique ways in Views by using basic filters, exposed filters and contextual filters. Other demonstrations in this series include working with multiple date fields, repeating dates and integrating with the Context module.&lt;/p&gt;
&lt;p&gt;If you would like to work along with the video, the entire demo site can be &lt;a href=&quot;http://drupalize.me/videos/introduction-dates-series#downloads&quot;&gt;downloaded&lt;/a&gt; and set up (it is found on the introduction video&amp;#39;s Downloads tab). The zip file includes the Drupal files, the database, and a README.txt file to explain setting it up. The site was created using the Demonstration module so that you can switch back and forth among the finished states of the various chapters.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QbOR2E2ksqQNb352qUYaKO1A_ups3k9rsNPsdIOMQj8.jpg.jpg</video:thumbnail_loc><video:duration>91</video:duration><video:publication_date>2012-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/integrating-context-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Integrating with the Context Module</video:title><video:description>In this final video Kyle will show us how to use the Date context module, which comes as a part of the Date project, along with the &lt;a href=&quot;http://drupal.org/project/context&quot;&gt;Context module&lt;/a&gt; to display some blocks based on the date associated with the content we are viewing. We create two blocks, one for dates in the future, and another for dates in the past. We then configure Context to display the correct block based on the content&#039;s date.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/oYVpVuXwI7uJ9St1Hxpr51bZwqC0ceKOBuLtbsy7T8A.jpg.jpg</video:thumbnail_loc><video:duration>454</video:duration><video:publication_date>2012-05-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/grouping-views-results-date</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Grouping Views Results by Date</video:title><video:description>in this chapter Kyle shows you how to create a view of content which shows the content grouped by the year in which it was created. We&#039;ll be making a table view that displays the title and post date, but is also grouped such that there will be one table displayed per year.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IddGPv8IWduQ3uj63USuIxb0cOBHNLrbxyVb3IOk1YE.jpg.jpg</video:thumbnail_loc><video:duration>513</video:duration><video:publication_date>2012-05-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-summary-views-dates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Summary Views with Dates</video:title><video:description>In this video Kyle will show you how to use views to create a summary list block which lists the months and years for our content, and shows how many posts were created in each month/year. We&#039;ll be using Views contextual filters and the core date created field.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AhVZBliypWu1o1wLW1_jpd76kZFuXvX8iAw-btU1l0k.jpg.jpg</video:thumbnail_loc><video:duration>365</video:duration><video:publication_date>2012-05-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/repeating-dates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Repeating Dates</video:title><video:description>In this chapter we go one step further with multiple-value date fields, and use the Date Repeat API and Field to create automatically repeating dates. We cover all of the different ways you can configure a repeating date and explain what is going on behind the scenes.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qIjZ6cSeuffaxG796PTF_cHPSMMvL3f4YWK5gWRQi0M.jpg.jpg</video:thumbnail_loc><video:duration>951</video:duration><video:publication_date>2012-04-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dates-views-contextual-filters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Dates as Views Contextual Filters</video:title><video:description>In this chapter we will walk through using dates as contextual filters, also known as arguments in Drupal-speak. We will create a block which shows us content per month, based on pur date field, and allow users to page through the months.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YeZ29GItJLDvaulC3hu5mSXLQWzAUwSBSArzQMbOxZE.jpg.jpg</video:thumbnail_loc><video:duration>1128</video:duration><video:publication_date>2012-04-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/content-types-multiple-value-date-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Content Types with a Multiple-Value Date Field</video:title><video:description>In this chapter Karen introduces you to using the date field with multiple values. She looks at how to set up a content type with multiple dates, tweak the way they are displayed, and also how to use a multiple-value date in a view.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/j4I4CqGhXwRRIlY3AhOIli9HEX961GdEvuE6No8gDuY.jpg.jpg</video:thumbnail_loc><video:duration>899</video:duration><video:publication_date>2012-04-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/more-views-date-filters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More on Views Date Filters</video:title><video:description>In this chapter we continue working with Date filters in Views and look at using the created and updated core date fields.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xM9QoXovP76awxegRAP8cvkPw-eoqG8YfVlMGd_y0n0.jpg.jpg</video:thumbnail_loc><video:duration>823</video:duration><video:publication_date>2012-04-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-view-exposed-date-filters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a View with Exposed Date Filters</video:title><video:description>In this chapter Michelle will walk us through using our new date field with Views to create a listing of our content showing the dates associated with them. We&#039;ll be listing our date content, with an exposed filter for selecting the date range, and we look at how to set relative dates to fill in the form&#039;s default values.

You&#039;ll need to the &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt; and &lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;Chaos Tools&lt;/a&gt; modules for this chapter. If you would like a refresher on using Views, you can watch our &lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7 series&lt;/a&gt;.

Note: With an update in Date module (7.x-2.x), you can now change the format of the date in the exposed filter. It&#039;s not a completely smooth process, but here are some instructions for how to get this working.

1. Ensure that the following modules and their dependencies are enabled: Date, Date Views, Date Popup, Views UI.
2. Add a date field to a content type. Collect only the date (not the time -- uncheck hours, minutes, seconds). Create some content with a date.
3. Create a new view of fields filtered by the content type in which you added a date field.
4. Update the format as described in the video to table and add a label to the Title field.
5. Add the date field to fields. Choose the &quot;short&quot; format to display.
6. Add the date field to filters. Select &quot;day&quot; as granularity.
7. Expose the date filter. Configure it as described in the video.
8. The exposed date filter should show a long format in the text field, which is not what we want.
9. In a new tab, go to Configuration &gt; Regional and Language &gt; Date and time &gt; Types
10. For the Date Type of &quot;Short&quot;, select the 2nd option (10/21/2014 - 12:29). Save configuration.
11. Go back to your view and refresh the page. The date popup format should now be in the short format. It should now respect whatever format you choose for &quot;Short&quot; in the Date and Type settings.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OwU3ATX89MnrYy4e_sBruhM2tTqzOYpDDfNkLAr9P8Y.jpg.jpg</video:thumbnail_loc><video:duration>1090</video:duration><video:publication_date>2012-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-date-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Date Field</video:title><video:description>In this chapter we dive deeper into the Date field and look at all the configuration options that come with the Date field out of the box. We&#039;ll also enable the Date All Day and Date Popup modules to see some nice additions to our main Date field.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5YfrGxxHh27CupHbwvcDGank4X6HIQMBJeTj8L8IzpA.jpg.jpg</video:thumbnail_loc><video:duration>1284</video:duration><video:publication_date>2012-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/date-configuration-and-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Date Configuration and Settings</video:title><video:description>In this chapter, Karen turns on the &lt;a href=&quot;http://drupal.org/project/date&quot;&gt;Date&lt;/a&gt;, Date API, and Date tools modules, and walks us through some initial configuration of core date settings, so that we can use Date module properly. We look at the site timezone settings, as well as talk about the core date formats. Then we go ahead and create some new custom date formats and date types.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C42G31uu-DHHQsPVvsDGSPaLFu3peWYavl-USL8gzQ8.jpg.jpg</video:thumbnail_loc><video:duration>970</video:duration><video:publication_date>2012-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-7-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal 7 Overview</video:title><video:description>&lt;p&gt;Drupal 7 co-maintainer Angie Byron gives a overview of some of the new Drupal 7 features, themes and user interface. She is joined by Nate Haug, Jeff Robbins, Jeff Eaton and Kent Bye who also provide a lot of insights through dynamic conversation, questions, and a fast-paced, hands-on tour of the major highlights of the new Drupal 7 release.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_wI3wF_ibcDkeropSdjQx7b41kFdgv8vEtVxD5jpT0w.jpg.jpg</video:thumbnail_loc><video:duration>3678</video:duration><video:publication_date>2011-01-05</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/orientation-new-drupal-7-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Orientation to a New Drupal 7 Site</video:title><video:description>In this chapter we take a tour of the administrative toolbar that is provided by default in Drupal 7. We quickly review the Dashboard, Content, Structure, Appearance, People, and Modules sections. Under Configuration we review some of the more important configuration screens. Then we move on to the Reports section and talk about the importance of the Status report screen. We wrap things up by showing how to use the Shortcuts bar, and a quick look at where to find your built-in help documentation. 

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YVuyzd4GzKbptZpYo5dBnGeJveWUZZmwqqFtaS1FWfc.jpg.jpg</video:thumbnail_loc><video:duration>1047</video:duration><video:publication_date>2012-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/learn-flag-series</loc><lastmod>2024-07-23T21:49Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/setting-flags-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting Flags with Rules</video:title><video:description>This screencast covers the following topics:

&lt;ul&gt;
  &lt;li&gt;How to set a flag using Rules&lt;/li&gt;
  &lt;li&gt;Parameters used when setting a flag with Rules&lt;/li&gt;
  &lt;li&gt;Some words about creating loop actions with Rules&lt;/li&gt;
&lt;/ul&gt;

If you need a refresher on Rules, check out the &lt;a href=&quot;videos/introduction-rules&quot;&gt;Learning the Rules framework&lt;/a&gt; series.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/s-8DITB_VJMHI05VS3gGlFKdrMyPullq2edC31p__ss.jpg.jpg</video:thumbnail_loc><video:duration>464</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/learn-flag-basic-concepts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Learn Flag Basic Concepts</video:title><video:description>This screencast covers the following topics:

&lt;ul&gt;
  &lt;li&gt;Installing the Flag module&lt;/li&gt;
  &lt;li&gt;What flags are and how they are used on your website&lt;/li&gt;
  &lt;li&gt;The default bookmarks flag, and its view&lt;/li&gt;
&lt;/ul&gt;

We also see a few other generally useful modules in action, though not germane to using Flag:

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/admin_menu&quot;&gt;Administration Menu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/module_filter&quot;&gt;Module Filter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RGsl3163nIq__FN0-ybMDEpuIadoVYLO6CQwo40hCxc.jpg.jpg</video:thumbnail_loc><video:duration>404</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/global-node-flags</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Global Node Flags</video:title><video:description>This screencast covers the following topics:

&lt;ul&gt;
  &lt;li&gt;What global flags are and how to create them&lt;/li&gt;
  &lt;li&gt;How to create node flags&lt;/li&gt;
  &lt;li&gt;How to create a view showing flagged content, using relationships&lt;/li&gt;
  &lt;li&gt;How to use &lt;a href=&quot;http://drupal.org/project/draggableviews&quot;&gt;DraggableViews&lt;/a&gt; to sort flagged nodes manually&lt;/li&gt;
&lt;/ul&gt;

If you need a review of using Views relationships, you can find that in the &lt;a href=&quot;videos/configuring-views-relationships&quot;&gt;Configuring Views relationships video&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/F1u35HfpOuNhPnsoHjyvnvHfSM6IBmeHjkU1P8uukXk.jpg.jpg</video:thumbnail_loc><video:duration>992</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/non-global-flags</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Non-Global Flags</video:title><video:description>This screencast covers the following topics, using the example of flagging comments as spam and then creating an admin interface to manage them:

&lt;ul&gt;
  &lt;li&gt;What non-global flags are, and how to create them&lt;/li&gt;
  &lt;li&gt;How to create flags on comments&lt;/li&gt;
  &lt;li&gt;How to access flag count data in Views&lt;/li&gt;
  &lt;li&gt;How to create a simple Bulk Operations view&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3B2ejNQqHNZ27Ou4S-inIjtsTL0MV5ngNbIEJspfk4w.jpg.jpg</video:thumbnail_loc><video:duration>544</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/strategies-finding-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Strategies for Finding Modules</video:title><video:description>In this video we take a look at where to find modules to add to your site, along with talking about things to look t when evaluating a module. In addition to looking at lists on Drupal.org, like http://drupal.org/project/usage, we also review a project&#039;s page to see what clues we can find, and we take a quick look at a project&#039;s issue queue.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ctWAejMDLd4tbtgRZui1u6atbBYerIQ3LJtv69eXPJQ.jpg.jpg</video:thumbnail_loc><video:duration>596</video:duration><video:publication_date>2012-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/working-blocks-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with Blocks in Drupal 7</video:title><video:description>In this chapter Michelle will explain what blocks are and how we can use them on our site. We&#039;ll look at the demo regions where we can place our blocks, and move some things around. We&#039;ll also look at creating our own simple custom block, along with covering the ways that we can change the visibility settings.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2NG0WEJAb9bbGNGoP5k8AZyNxbWSb6k5QBCvPCJWmwI.jpg.jpg</video:thumbnail_loc><video:duration>561</video:duration><video:publication_date>2012-04-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-menus-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Menus in Drupal 7</video:title><video:description>In this video we take a tour of Drupal menus, and show you how you can modify existing menu items and create your own.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Cx5mrWPs270hJfhUuCZD50hfWoRaUZEXFudBjRQSuaM.jpg.jpg</video:thumbnail_loc><video:duration>269</video:duration><video:publication_date>2012-03-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-listing-pages-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create Listing Pages with Views</video:title><video:description>In this chapter we&#039;ll quickly cover how to create lists of our Press Releases to display on the site. We&#039;ll be using the Views module to create a block that can sit in the sidebar, as well as a full listing page with its own menu item. You will need to already have the &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views module&lt;/a&gt; downloaded and enabled on your site. If you need help installing a contributed module, watch the &lt;a href=&quot;videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and Enabling Modules in Drupal 7 video&lt;/a&gt; from this series.

To get a complete tutorial on using Views, you can watch our &lt;a href=&quot;http://drupalize.me/videos/overview-views&quot;&gt;Intro to Views for Drupal 7 series&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hjq7CvJPUagTsZG_o-HPHTmJehv6Z8JzOmyb6XIK3MI.jpg.jpg</video:thumbnail_loc><video:duration>395</video:duration><video:publication_date>2012-03-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/working-people-roles-and-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with People - Roles and Permissions</video:title><video:description>In this chapter we talk about the powerful and flexible user system in Drupal. We&#039;ll create new users and roles, and walk through how the permissions work with them.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/uS9_bY5BtlWPzVTXJr8_N7HnaJOw9HXm_fPtv3LLmiU.jpg.jpg</video:thumbnail_loc><video:duration>441</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/must-have-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Must Have Modules</video:title><video:description>In this chapter we take a look at some of the most popular contributed modules to get a sense of what is possible with Drupal and which modules many sites are currently using. We&#039;ll take a quick look at:

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/token&quot;&gt;Token&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/pathauto&quot;&gt;Pathauto&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/backup_migrate&quot;&gt;Backup and Migrate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/date&quot;&gt;Date&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot;&gt;Calendar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/webform&quot;&gt;Webform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FvKmaX-iXWrLopS6iqUVUoFW4pE27-sVCmOf-U-JB4k.jpg.jpg</video:thumbnail_loc><video:duration>726</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalizeme-has-been-pinkie-pie-zed-improved</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/private-files-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Private Files in Drupal 7</video:title><video:description>In this chapter, we look at the Drupal file system configuration, and we set up our site to give us private file storage. We&#039;ll talk about what that means, and the benefits and drawbacks to Drupal&#039;s private files.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eg2kYcUxA58y7Gqs2xs5vChKb-aDq1ZR2yDS2GAMPJ4.jpg.jpg</video:thumbnail_loc><video:duration>240</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-cron-and-search-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring Cron and Search in Drupal 7</video:title><video:description>In this chapter Joe covers two really important tools for most sites: cron and search. We start by explaining what cron is, and how core provides us with a basic cron tool. We also walk through how to set up your own custom cron if the core settings don&#039;t suit you. Next we look at Drupal&#039;s core search and the various ways you can configure that.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Lk9vShZbyAMFvBtmirbl6oCRRxGjAOUoBRSMnUhHhnY.jpg.jpg</video:thumbnail_loc><video:duration>1214</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/preparing-launch</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Preparing for Launch</video:title><video:description>In this chapter we&#039;re going to go through a launch checklist to make sure we have a few things all set up before we actually put our site out there. We discuss:
&lt;ul&gt;
  &lt;li&gt;error reporting settings&lt;/li&gt;
  &lt;li&gt;403 and 404 pages&lt;/li&gt;
  &lt;li&gt;performance optimization and caching&lt;/li&gt;
  &lt;li&gt;reviewing the status reports&lt;/li&gt;
  &lt;li&gt;disabling unnecessary modules&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FLGFs0L3ne1lYganzdTKKlrofEQrCLmN2yumjPJkfTw.jpg.jpg</video:thumbnail_loc><video:duration>785</video:duration><video:publication_date>2012-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/miscellaneous-tips-when-coding-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Miscellaneous Tips When Coding for Rules</video:title><video:description>This screencast gives miscellaneous tips when writing Rules plugins, such as:

&lt;ul&gt;
  &lt;li&gt;Some words on declaring new data types for Rules&lt;/li&gt;
  &lt;li&gt;How to restrict access to plugins&lt;/li&gt;
  &lt;li&gt;How to form alter plugin configuration forms&lt;/li&gt;
  &lt;li&gt;How to provide additional form validation&lt;/li&gt;
  &lt;li&gt;How to use the &quot;base&quot; property to provide a non-default callback function&lt;/li&gt;
  &lt;li&gt;How to invoke events programmatically with all arguments in a single array&lt;/li&gt;
  &lt;li&gt;How to use drupal_static() to share variables/values with other parts of Drupal&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KE9o22yQ9HXGilQO1R0SXWqLjjHYqtKuK9XZ_y6e-xI.jpg.jpg</video:thumbnail_loc><video:duration>528</video:duration><video:publication_date>2012-04-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-taxonomy</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Taxonomy</video:title><video:description>In this chapter we talk about Drupal&#039;s taxonomy system, which is a way to organize our content. We&#039;ll walk through the steps to create a new vocabulary, add some terms, and then use it with our Press Release content type.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3jNRcK_e0vC8NkMqitI3h2MaJtpqz4GSVReHx9lXQ0k.jpg.jpg</video:thumbnail_loc><video:duration>488</video:duration><video:publication_date>2012-03-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-rules-action-parameters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Rules Action Parameters</video:title><video:description>This screencast shows how to add parameters to your actions, for example to allow site builders to select which user object an action should work with.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BNdb-ppocqc9fbjVZO5f56ljdEzOyR9winSWLSpzBsc.jpg.jpg</video:thumbnail_loc><video:duration>585</video:duration><video:publication_date>2012-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/changing-theme-your-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Changing the Theme on Your Site</video:title><video:description>In this chapter, we talk all about changing the look and feel of your site with themes. We start by reviewing the settings that come with our default core theme, Bartik. Then we go to Drupal.org to look at available contributed themes, how to look for themes, and discuss what a base theme is. We&#039;ll finish up by actually installing a new contributed theme, &lt;a href=&quot;http://drupal.org/project/zeropoint&quot;&gt;Zero Point&lt;/a&gt;, and making some configuration changes.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LH6tMfDjxfvQqEbdNcbXUcnMkkUcZ7RtTi8LE2mM6cA.jpg.jpg</video:thumbnail_loc><video:duration>889</video:duration><video:publication_date>2012-04-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/providing-new-parameters-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Providing New Parameters for Rules</video:title><video:description>This screencast shows:

&lt;ul&gt;
  &lt;li&gt;How to declare that an action provides new data objects to Rules&lt;/li&gt;
  &lt;li&gt;How to actually send the created data to Rules&lt;/li&gt;
  &lt;li&gt;How to save parameters that are manipulated by the action (but not created by it)&lt;/li&gt;
&lt;/ul&gt;

The example used creates an action that returns the number of hits in a selected view.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fht3wThf1izaDmKIAoGnwStEdiFDKxsM6aVTYO28waw.jpg.jpg</video:thumbnail_loc><video:duration>707</video:duration><video:publication_date>2012-04-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/additional-rules-action-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Additional Rules Action Settings</video:title><video:description>This screencast shows how to:

&lt;ul&gt;
  &lt;li&gt;Use text as an input parameter for an action&lt;/li&gt;
  &lt;li&gt;Provide your action configuration with a customized select list&lt;/li&gt;
  &lt;li&gt;Restrict input for a parameter to &quot;direct input&quot; (and not data selection)&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/W4FNkCEqcGO2D3q3OW8jSNcEQ5blD5hK3aMb4zQtGfg.jpg.jpg</video:thumbnail_loc><video:duration>924</video:duration><video:publication_date>2012-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/declaring-conditions-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Declaring Conditions for Rules</video:title><video:description>This screencast shows how to create a condition plugin for Rules:

&lt;ul&gt;
  &lt;li&gt;How to declare new conditions for Rules&lt;/li&gt;
  &lt;li&gt;How to provide the condition callbacks with parameters to act on&lt;/li&gt;
  &lt;li&gt;The big similarities and the few differences between actions and conditions&lt;/li&gt;
&lt;/ul&gt;

In the example, a condition is built to check which view type a provided view has.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/R0KtMJPFzRQ4st22iJH84m8VFnCbtZiVoXqR2iI_stM.jpg.jpg</video:thumbnail_loc><video:duration>682</video:duration><video:publication_date>2012-04-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-features-video-released</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/invoking-rules-events</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Invoking Rules Events</video:title><video:description>This screencast shows how to:

&lt;ul&gt;
  &lt;li&gt;Invoke a Rules event&lt;/li&gt;
  &lt;li&gt;Send parameter data to a Rules event&lt;/li&gt;
&lt;/ul&gt;
This is shown by an event triggered every time a view is being rendered, sending the name of the view as a parameter.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OnPt1NhF7DhUSWdz6GVV6Hw4atiMj3qk6zM93vhKlCM.jpg.jpg</video:thumbnail_loc><video:duration>375</video:duration><video:publication_date>2012-04-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/declaring-events-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Declaring Events for Rules</video:title><video:description>This screencast shows how to:

&lt;ul&gt;
  &lt;li&gt;Declare a Rules event&lt;/li&gt;
  &lt;li&gt;Declare the data provided by the event&lt;/li&gt;
  &lt;li&gt;Use that data in a rule&lt;/li&gt;
&lt;/ul&gt;

The example used creates an event &quot;View is being rendered&quot;, passing along information about which view is being used.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MC9SP9zkOb9oYjHWjmCGMbwbkjpXfCnL4DvjF5qLNxs.jpg.jpg</video:thumbnail_loc><video:duration>465</video:duration><video:publication_date>2012-04-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/building-content-types-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Building Content Types in Drupal 7</video:title><video:description>In this video we&#039;ll start talking about the structure of content on the site by explaining what a content type is and how to create our own custom content types. First we review the two content types that are provided by Drupal core, Article and Basic Page, and then we dive into creating our own new content type, a Press Release. We also add a few fields and review configuring the field display.

For more instruction on using Fields and Image styles, check out these other series:
&lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;
&lt;a href=&quot;videos/using-image-styles-node-display&quot;&gt;Image Styles&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E8XDQhhSpxxPcPJzOaPRiJliv_l5nI6vybYrwpvh6co.jpg.jpg</video:thumbnail_loc><video:duration>1309</video:duration><video:publication_date>2012-03-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-and-enabling-modules-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing and Enabling Modules in Drupal 7</video:title><video:description>In this video we walk through two methods for downloading and installing new modules. First we use the administrative interface on our site to install a new module with a URL, and then we download a module directly from Drupal.org and place the files in the proper location in our Drupal files. We also talk about some best practices for organizing your modules in your file system.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/23T5HX5Lf-9T-_nf73qGRfwq4mC6QCcPcaMakmUYXi8.jpg.jpg</video:thumbnail_loc><video:duration>637</video:duration><video:publication_date>2012-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing Drupal 7</video:title><video:description>To get things started in this series we&#039;ll install Drupal 7. We start in Drupal.org to download the code, review some important points to watch for when copying the files, then we show how to set up a database using PHPMyAdmin before we dive into the Drupal installer.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/install&quot;&gt;Installing Drupal 7 (Community Documentation on drupal.org)&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/T5VIx88a9i2Iuu0xmQotVXmHPvM6UQw1rhjuB6oZV2E.jpg.jpg</video:thumbnail_loc><video:duration>533</video:duration><video:publication_date>2012-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-podcast-about-drupal-8-initatives</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-writing-views-handlers-and-panels-variants</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/creating-dynamic-forms-states-system</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Dynamic Forms with the States System</video:title><video:description>This video shows the basic syntax for creating form dependencies with the states system. For a more information about the states system, then be sure to check out &lt;a href=&quot;http://drupalize.me/videos/javascript-form-dependencies-states-system&quot;&gt;JavaScript form dependencies with the States System.&lt;/a&gt;

&lt;strong&gt;Note:&lt;/strong&gt; There is a typo in the code used in this video. The function &lt;code&gt;form_fun_states_form()&lt;/code&gt; is missing a parameter, and should be: &lt;code&gt;function form_fun_states_form($form, &amp;$form_state)&lt;/code&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9D6NOkHiuSUL3_8JRhCObhOJTZ0xWtqpj7kNTVy_TLA.jpg.jpg</video:thumbnail_loc><video:duration>449</video:duration><video:publication_date>2011-12-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/tips-writing-secure-code</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Tips for Writing Secure Code</video:title><video:description>When writing code for the web it is very important that you pay attention to security. Drupal provides many tools to help you out and in this presentation we&#039;ll look at what those are and how to make sure you use them properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21common.inc/group/sanitization/7&quot;&gt;Sanitization functions&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/writing-secure-code&quot;&gt;Writing secure code&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rnBuoXAL0cptreI-2sreioM48eiiF-OiixZjEjchLXE.jpg.jpg</video:thumbnail_loc><video:duration>500</video:duration><video:publication_date>2012-02-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/learning-page-manager</loc><lastmod>2024-07-23T21:35Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/page-manager-import-and-export-plus-additional-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Page Manager Import and Export Plus Additional Modules</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Manual import/export of Page manager settings.&lt;/li&gt;
  &lt;li&gt;Import/export using Features.&lt;/li&gt;
  &lt;li&gt;Some words about the custom rulesets module.&lt;/li&gt;
  &lt;li&gt;Some words about the custom content panes module.&lt;/li&gt;
  &lt;li&gt;Some words about the stylizer module.&lt;/li&gt;
  &lt;li&gt;Some words (but not enough!) about mini panels.&lt;/li&gt;
  &lt;li&gt;Some words about Panels everywhere.&lt;/li&gt;
  &lt;li&gt;Some words and a quick demonstration of Panels in-place editor.&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-40GEpkI_Wpz7fgC5NuLuUElOPMhM8EfJykmEGKKM3Q.jpg.jpg</video:thumbnail_loc><video:duration>529</video:duration><video:publication_date>2012-01-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-context</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>The Views Context</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Creating a Context display type in Views.&lt;/li&gt;
  &lt;li&gt;Placing individual View rows in your custom page.&lt;/li&gt;
  &lt;li&gt;Displaying other View render elements in your custom page (such as the pager or header).&lt;/li&gt;
  &lt;li&gt;Using the View context to load further contextual object.&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vQZJHxT5vjG81fStYIIRpt7-bCDuHFirDUZlEwl-J-U.jpg.jpg</video:thumbnail_loc><video:duration>781</video:duration><video:publication_date>2012-01-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/we-interrupt-you-tell-you-more-about-being-interrupted</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/more-contextual-objects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More Contextual Objects</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
&lt;li&gt;Adding new contextual objects with manual selection.&lt;/li&gt;
&lt;li&gt;Adding new contextual objects with relationships.&lt;/li&gt;
&lt;li&gt;Chaining contextual objects, with the example of loading a node term, and then loading the term top level parent (or not).&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hddpOB_63QV8u0tVvhKFrudUAyWD1e2Bvv_M8utbyPI.jpg.jpg</video:thumbnail_loc><video:duration>719</video:duration><video:publication_date>2012-01-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/contextual-administration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Contextual Administration</video:title><video:description>This tutorial covers the following topics:

&lt;ul&gt;
&lt;li&gt;The Contextual Administration module and variant type.&lt;/li&gt;
&lt;li&gt;Auto-populating node reference fields for new nodes.&lt;/li&gt;
&lt;li&gt;A quick glance at other functionality in Contextual Administration: vocabulary administration pages, user administration pages, quick content handling pages, and more.&lt;/li&gt;
&lt;li&gt;Using the local actions menu type.&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cD4jdA6c17-pxNHOFYp4lktU4iuNbfHCVaBXHm78irA.jpg.jpg</video:thumbnail_loc><video:duration>653</video:duration><video:publication_date>2012-01-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/rearrange-node-edit-form</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Rearrange Node Edit Form</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Rearranging the node edit form with Panels.&lt;/li&gt;
  &lt;li&gt;Some words about how the render arrays in Drupal 7 makes this possible.&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZnAsTLWSuqowRZ_XzFDEd-BOijbxOHmNL0uIpLKWtCM.jpg.jpg</video:thumbnail_loc><video:duration>303</video:duration><video:publication_date>2012-01-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/menu-items-and-access-control</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Menu Items and Access Control</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Creating custom paths with Page manager&lt;/li&gt;
  &lt;li&gt;Defining required and optional wildcards in a path&lt;/li&gt;
  &lt;li&gt;Loading contextual objects from path arguments&lt;/li&gt;
  &lt;li&gt;Creating access rules for custom pages&lt;/li&gt;
  &lt;li&gt;Creating menu tabs, local actions and other visible menu items&lt;/li&gt;
  &lt;li&gt;Making menu items only show in certain circumstances, such as only on selected node types&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4a-QoiG_hNedjr7QIl3rJ04xXEEd5TwVP_-68DJCd4A.jpg.jpg</video:thumbnail_loc><video:duration>682</video:duration><video:publication_date>2012-01-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/panel-pane-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Panel Pane Settings</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Using &lt;em&gt;visibility rules&lt;/em&gt; to determine when panes should show&lt;/li&gt;
  &lt;li&gt;Using per-pane or per-page caching&lt;/li&gt;
  &lt;li&gt;Setting caching granularity to &lt;em&gt;per context&lt;/em&gt; or &lt;em&gt;per argument&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Editing basic pane settings&lt;/li&gt;
  &lt;li&gt;Moving panes between different panel regions&lt;/li&gt;
  &lt;li&gt;Some layout settings for panes&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LGpqOrnBadopK8TyRqK7w_JIjmdsXubYANk9W4qpU-w.jpg.jpg</video:thumbnail_loc><video:duration>395</video:duration><video:publication_date>2012-01-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/more-view-panes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More View Panes</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Setting name, description and category for view panes&lt;/li&gt;
  &lt;li&gt;Overriding the title of the view&lt;/li&gt;
  &lt;li&gt;Overriding the number of items to display&lt;/li&gt;
  &lt;li&gt;Some other override options&lt;/li&gt;
  &lt;li&gt;The &quot;context is optional&quot; setting for argument input/contextual filter value input&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zh7oKpKdB6gJfmqc0MAEZ92V1pFd3yRNppFOn_BzaXM.jpg.jpg</video:thumbnail_loc><video:duration>875</video:duration><video:publication_date>2012-01-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Panels</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;What is Panels?&lt;/li&gt;
  &lt;li&gt;Selecting Panels layout&lt;/li&gt;
  &lt;li&gt;Disabling block regions on a panel page&lt;/li&gt;
  &lt;li&gt;Adding content to a panel&lt;/li&gt;
  &lt;li&gt;Outputting individual node fields in a panel page&lt;/li&gt;
  &lt;li&gt;Manually setting the title on a panel page&lt;/li&gt;
  &lt;li&gt;Inheriting page title from a panel pane&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Feh_249Ii1pwt6LO4iGo5t88UaaEjG-tnULLUCib6AQ.jpg.jpg</video:thumbnail_loc><video:duration>571</video:duration><video:publication_date>2012-01-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-series-building-websites-panels-module-and-more-coding-views</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/variants-and-selection-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Variants and Selection Rules</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;How to create additional variants to a custom page&lt;/li&gt;
  &lt;li&gt;How to set selection rules with more than one condition&lt;/li&gt;
  &lt;li&gt;Why the order of variants is important, and how to change their order&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kRYTIBicKdQpmFHWbRx9ptMJBx4jSJnjMrSpxYuuRE8.jpg.jpg</video:thumbnail_loc><video:duration>359</video:duration><video:publication_date>2012-01-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/node-page-overrides-contexts-page-redirects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Node Page Overrides, Contexts &amp; Page Redirects</video:title><video:description>This screencast covers the following topics about the Page Manager module, which is a module included within &lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools.&lt;/a&gt;
&lt;ul&gt;
  &lt;li&gt;The basic framework of Page manager – creating custom paths and assigning content/reactions to them&lt;/li&gt;
  &lt;li&gt;Mentioning some modules that can be used with Page manager, such as &lt;a href=&quot;http://drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt; and &lt;a href=&quot;http://drupal.org/project/context_admin&quot;&gt;Contextual administration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Overriding node templates to allow customized content/reaction&lt;/li&gt;
  &lt;li&gt;Introduction to variants&lt;/li&gt;
  &lt;li&gt;Introduction to selection rules&lt;/li&gt;
  &lt;li&gt;Using the HTTP response code variant type, and using it for redirections&lt;/li&gt;
  &lt;li&gt;Introduction to context or contextual objects&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WSPb8BnhAgsmzIEnikqi4NYBIwqUUCyQacbT1AEJ43I.jpg.jpg</video:thumbnail_loc><video:duration>718</video:duration><video:publication_date>2012-01-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/querying-database-dbselect</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Querying the Database with db_select()</video:title><video:description>&lt;p&gt;In this chapter we learn how to get data out of the database and display it. The example walks through writing a module that creates a page that displays how many nodes are published and unpublished for each content type in our site. We use the db_select() function to accomplish this.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wo34o077P55-6ljECPqgbKkohGhEiLdpHkKfj3GwaIg.jpg.jpg</video:thumbnail_loc><video:duration>970</video:duration><video:publication_date>2012-01-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-database</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering the Database</video:title><video:description>In this chapter we learn about changing the definition of a database table after it has already been installed.  This example expands on the previous chapters by adding a new field to the table to collect the date a user last visited a node.  We learn more about hook_update_N() as well as db_add_field().

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UvW8s9NGpip_35DCR81NMhIxbasmoSYtz5FyOD6u1TI.jpg.jpg</video:thumbnail_loc><video:duration>831</video:duration><video:publication_date>2012-01-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/querying-database-query-methods</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Querying the Database with Query Methods</video:title><video:description>In this chapter we learn other ways to interact with our database beyond the simple db_select() query from the earlier video.  This example walks through writing a module that that saves and displays data about how many times a user has visited a specific page.  We learn about db_select(), db_insert(), db_update(), db_merge(), db_delete() and introduce the concept of &quot;get and set&quot; helper functions.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OqxHdxgV23TFzrSJ7mHYWVRDsWpKN_fm9xy9AJKAlsY.jpg.jpg</video:thumbnail_loc><video:duration>1405</video:duration><video:publication_date>2012-01-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-2-jen-lampton</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-table-database</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding a Table to the Database</video:title><video:description>In this chapter we learn how to create a new database table.  This example walks through creating a module that defines the the properties of our new table and also programatically creating that table.  We learn about hook_schema() and hook_update_N() in our module&#039;s install file.

&lt;strong&gt;Trainers note:&lt;/strong&gt; This video starts out with a module that implements hook_node_view() and stores data about views in the $_SESSION variable. It also states that we built this earlier in the series. However, that&#039;s not true. We did talk about hook_node_view() in https://drupalize.me/videos/event-driven-hook-system, but we never actually wrote the $_SESSION handling part. So, if you&#039;re following along and want the same sample code we start with make sure you download the code attached to this node.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Xpg2tuUrB0IdRtBGoF0IssKppuAfe62Bntlz-ASD2Mk.jpg.jpg</video:thumbnail_loc><video:duration>682</video:duration><video:publication_date>2012-01-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-database-layer-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>An Overview of the Database Layer in Drupal 7</video:title><video:description>In this excerpt from the &lt;a href=&quot;videos/overview-drupal-7&quot;&gt;Overview of Drupal 7&lt;/a&gt;, Angie Byron, talks about the Database API in Drupal 7. This was a round table discussion with other Lullabots on the line who ask and answer questions, in addition to Angie&#039;s presentation. This lays a good foundation for how the database system works in Drupal and sets you up for the hands-on tutorials that follow.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/developing/api/database&quot;&gt;Database API documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RtlYYRjCRImGzRAvQAmxd7up4lNyqLVImN7CH1d5OwU.jpg.jpg</video:thumbnail_loc><video:duration>942</video:duration><video:publication_date>2012-01-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-forms-hookformalter</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering Forms with hook_form_alter()</video:title><video:description>&lt;p&gt;This video goes through the process of changing some of the properties of a form with the hook_form_alter() function. This hook is a very powerful tool to be able to modify existing Drupal forms, created by core or contributed modules, and tailor them to your needs.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LKXcq1R7M1ZjVKXHGKxCAd505oeuYgqOBFIoy_Yv79A.jpg.jpg</video:thumbnail_loc><video:duration>677</video:duration><video:publication_date>2011-12-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/learning-rules-framework</loc><lastmod>2024-07-19T23:24Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/using-fields-setting-evaluation-time</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Fields for Setting Evaluation Time</video:title><video:description>This screencast shows how to use fields when scheduling Rules components. In the example we are also using the Flag module, to allow people to sign up for reminder e-mails 24 hours before an event starts. The screencast covers:
&lt;ul&gt;
  &lt;li&gt;Using flags to load user lists in Rules&lt;/li&gt;
  &lt;li&gt;Scheduling a rules component from a triggered rule&lt;/li&gt;
  &lt;li&gt;Some words about rescheduling the evaluation if the event date should change&lt;/li&gt;
  &lt;li&gt;Using conditions to make fields available in Rules configuration&lt;/li&gt;
  &lt;li&gt;Using a date field to set evaluation time&lt;/li&gt;
  &lt;li&gt;Adding an offset to the evaluation (-1 day)&lt;/li&gt;
  &lt;li&gt;Verifying the configuration by executing the action set manually&lt;/li&gt;
&lt;/ul&gt;

&lt;em&gt;Note: It would have been smarter to use the “Before saving content” event for this rule – to make it act on both new nodes and updates of existing ones. If combined with a check to see that the event is in the future, you would actually have pretty good notification system!&lt;/em&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/18OHaWCVSV34AGdKuoT2ufUnw2Goc3STUgHQUHglbYo.jpg.jpg</video:thumbnail_loc><video:duration>573</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/enabling-themes-and-theme-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Enabling Themes and Theme Settings</video:title><video:description>This video walks through the new interface in Drupal 7 for enabling themes, setting them to be the default, and configuring the administration theme. It also walks through the process of downloading a contributed theme, and where to store it. Finally, it walks through the theme settings pages that provide a user interface for turning on and off specific options for a theme.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7m_93pqJnkJFFSkAwa8Om7sr4qnq_Qt8YRdpRtf5LR8.jpg.jpg</video:thumbnail_loc><video:duration>418</video:duration><video:publication_date>2011-09-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-views-integration-your-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/integrating-theme-system</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Integrating with the Theme System</video:title><video:description>This video shows how a module can integrate with Drupal&#039;s theme system by exposing a new themeable item to the theme registry with hook_theme(), and then creates a function in order the customize the output of that themeable item.  The then video demonstrates how the theme layer can override the markup defined with theme functions at the module layer.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/H4QsRYD-ZczuVvuJaQOuXsCI_awhjEHCg-EkGNR-gcw.jpg.jpg</video:thumbnail_loc><video:duration>1631</video:duration><video:publication_date>2011-12-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-form-api</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>An Overview of the Form API</video:title><video:description>&lt;p&gt;This presentation provides an overview of the different phases of the form submission and validation process that Drupal uses with the Forms API. This will give you a good foundation for implementing forms yourself in the following videos.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/o4EvrNUeRJSz9MbXBabeeU1FE5xg0bquGlTUcV2eXb8.jpg.jpg</video:thumbnail_loc><video:duration>590</video:duration><video:publication_date>2011-12-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/introduction-views-drupal</loc><lastmod>2024-07-19T23:24Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/create-view-users</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a View of Users</video:title><video:description>&lt;p&gt;Goes through the process of creating a view of something other than content. In this case it&#039;s a view of users, and this chapter talks about other types of views of entities that are possible from different base tables.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8WsuSdD6dxln9AeupGrsir0L5U3WkLYbUg4ZsIJV0PI.jpg.jpg</video:thumbnail_loc><video:duration>1038</video:duration><video:publication_date>2011-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-page-array</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering the Page Array</video:title><video:description>This video walks through how to use the new &lt;code&gt;hook_page_alter()&lt;/code&gt; in Drupal 7 by transforming an unordered list into an ordered list.  Because all of the content, region &amp; blocks are stored within a renderable array before being output to the page, then this new hook allows modules and themes to make changes to page before it is fully rendered.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yAuymFiByMPNEOBi4MgyAK5fv_kbjnihw5-aLLmT7qk.jpg.jpg</video:thumbnail_loc><video:duration>449</video:duration><video:publication_date>2011-12-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-series-coding-views</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/using-drupal-render-api</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using the Drupal Render API</video:title><video:description>&lt;p&gt;This video walks through the basic use of Drupal 7&amp;#39;s Render API for outputting content, and gives some hands-on experience in navigating and working with renderable arrays. We expand the Menu Magic module by creating several different kinds of page elements to show how renderable arrays work.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3S_3fG6HpFcKEGUicis-3-RAPi3IFHm70h9JW_Ldylc.jpg.jpg</video:thumbnail_loc><video:duration>840</video:duration><video:publication_date>2011-12-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/rules-bonus-pack-using-rules-presentation-altering</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Rules Bonus Pack: Using Rules for Presentation Altering</video:title><video:description>This screencast shows how you can use Rules to alter the presentation of your Drupal site, such as:
&lt;ul&gt;
  &lt;li&gt;Enabling, disabling and moving blocks around&lt;/li&gt;
  &lt;li&gt;Setting HTML title element and also on-page titles&lt;/li&gt;
  &lt;li&gt;Setting body classes&lt;/li&gt;
  &lt;li&gt;Setting the active menu item (using &lt;a href=&quot;http://drupal.org/project/menu_position&quot;&gt;Menu Position&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

Some bigger questions about using Rules for altering presentation is also discussed:
&lt;ul&gt;
  &lt;li&gt;Using Rules for presentation altering is relatively heavy. (It consumes about 2.5 MB more PHP memory than Context, and has about the same loading times – judging from a first, rough comparison.)&lt;/li&gt;
  &lt;li&gt;Using Rules for presentation altering gives a more complex UI than the interface use for modules made for more particular use cases.&lt;/li&gt;
  &lt;li&gt;It is possible for modules to provide alternative user interfaces to Rules.&lt;/li&gt;
  &lt;li&gt;Rules allows reusing actions in many different situations, between different modules.&lt;/li&gt;
  &lt;li&gt;Rules (and Entity API) provides generalized data handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8Yxv6YRB2ESKnZ67KLxDKniXe0VMpdv3B6sDIYE_PfQ.jpg.jpg</video:thumbnail_loc><video:duration>844</video:duration><video:publication_date>2011-12-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-url-arguments-page-callback-functions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using URL Arguments in Page Callback Functions</video:title><video:description>&lt;p&gt;This chapter goes through the process of passing a wildcard variable to a function via an argument from the URL. It creates a MENU_LOCAL_TASK tab on the node which inverts the text to display upside down. It uses a page callback function that is included within a separate file in order to save on how much memory is used.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ro68iNuF11Qaik0l0-c-_GF_SW0qxKSG3E_4TtStlyk.jpg.jpg</video:thumbnail_loc><video:duration>1179</video:duration><video:publication_date>2011-12-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/introducing-new-drupalizeme-podcast</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/more-rules-link</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More Rules Link</video:title><video:description>This screencast shows some more settings in the Rules Link module:
&lt;ul&gt;
  &lt;li&gt;How to use the &lt;em&gt;visibility conditions&lt;/em&gt; in Rules Link.&lt;/li&gt;
  &lt;li&gt;That the entity the link is attached to is always available as a parameter.&lt;/li&gt;
  &lt;li&gt;That you can add more variables to the Rules Link by passing them in the URL – and that you need to set up the &lt;em&gt;parameters&lt;/em&gt; settings to tell the link how to interpret the data.&lt;/li&gt;
  &lt;li&gt;That each link is available as a field in Views.&lt;/li&gt;
  &lt;li&gt;That you can add parameters to links displayed in Views.&lt;/li&gt;
  &lt;li&gt;That there is a bug preventing links for non-node entities to be displayed in Views.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/s3b_qmR9R2OxNbCWiPVmZqkNMAqZHrhS82wA-OlNDrY.jpg.jpg</video:thumbnail_loc><video:duration>549</video:duration><video:publication_date>2011-12-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/rules-bonus-pack-views-and-ctools-integration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Rules Bonus Pack: Views and Ctools Integration</video:title><video:description>This screencast shows some functionality included in &lt;a href=&quot;http://drupal.org/project/rb&quot;&gt;Rules Bonus Pack&lt;/a&gt;, as an example of how to make Rules integrate with other modules on your site. In particular it shows some Views and CTools/Page manager integration.
&lt;ul&gt;
  &lt;li&gt;Condition: Check the &lt;em&gt;number of results&lt;/em&gt; from a view.&lt;/li&gt;
  &lt;li&gt;Action: Load the sum of a Views column as a number. (Currently only D6!)&lt;/li&gt;
  &lt;li&gt;Action: Load the first result in a view into Rules.&lt;/li&gt;
  &lt;li&gt;Action: Clone a full node object.&lt;/li&gt;
  &lt;li&gt;Action: Convert a number into a date&lt;/li&gt;
  &lt;li&gt;Event: Trigger a rule when a custom page is rendered.&lt;/li&gt;
  &lt;li&gt;Special: Allow Rules condition components to be used as CTools access plugins.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7D51fENeFNLt96ghcmH2-v2qr_VJFxI0Wo2MXX-AzKs.jpg.jpg</video:thumbnail_loc><video:duration>835</video:duration><video:publication_date>2011-12-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-bulk-operations-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Bulk Operations Settings</video:title><video:description>This screencasts presents some of the settings available when configuring a bulk operations view. It covers:
&lt;ul&gt;
  &lt;li&gt;Controlling access to your VBO, and why that is important.&lt;/li&gt;
  &lt;li&gt;Showing actions as buttons rather than a select list.&lt;/li&gt;
  &lt;li&gt;The new cool option for selecting all items &lt;em&gt;on all view result pages&lt;/em&gt;.&lt;/li&gt;
  &lt;li&gt;Turning check boxes into radio buttons.&lt;/li&gt;
  &lt;li&gt;Showing or hiding the result of the bulk operations.&lt;/li&gt;
  &lt;li&gt;Showing action configuration on the view page.&lt;/li&gt;
  &lt;li&gt;How to skip the confirmation page.&lt;/li&gt;
  &lt;li&gt;How to give your actions customized labels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/contributed-modules/views-bulk-operations-vbo&quot;&gt;Views Bulk Operations (VBO) guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gq0yfFJxcRv7S9pqVTnyWUHvfaYdYhPuz9XQypao8lo.jpg.jpg</video:thumbnail_loc><video:duration>582</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introducing-views-bulk-operations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introducing Views Bulk Operations</video:title><video:description>This screencast introduces the awesome &lt;a href=&quot;http://drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations&lt;/a&gt; (VBO) module, that can be used to perform actions on objects listed with Views. The screencast covers:
&lt;ul&gt;
  &lt;li&gt;How to add VBO &lt;em&gt;fields&lt;/em&gt; to your views, to allow actions&lt;/li&gt;
  &lt;li&gt;That these fields are displayed as check boxes (or possibly radio buttons) in your view&lt;/li&gt;
  &lt;li&gt;That each VBO field is tied to one type of data in the view (such as nodes, node revisions or users)&lt;/li&gt;
  &lt;li&gt;That some VBO actions have configuration pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/contributed-modules/views-bulk-operations-vbo&quot;&gt;Views Bulk Operations (VBO) guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Qinkb1cxa187brSopKUk7Elz-UamR0LknxvMsOFPk7A.jpg.jpg</video:thumbnail_loc><video:duration>495</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-api-documentation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal API Documentation</video:title><video:description>&lt;p&gt;In this video you&amp;#39;ll learn how to use api.drupal.org the canonical source for information about Drupal&amp;#39;s hooks, APIs, and code documentation in order to find out information about implementing a particular hook, making use of a particular function or library of functions, and even gaining a better understanding of some of the big picture concepts behind Drupal&amp;#39;s code and APIs.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xW659b5rsHTqbtcPfpp7ote3yGHbDOo7TIgZO8iy-6o.jpg.jpg</video:thumbnail_loc><video:duration>592</video:duration><video:publication_date>2011-11-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/anatomy-drupal-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Anatomy of a Drupal Module</video:title><video:description>Walks through some of the basics elements that are required and common for all Drupal modules. Then we create a simple demo module to see how it works.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AOIZ1ks8PLsQ7WkYhj4k9RIKfkXrFiaaVLoPqF5I7YM.jpg.jpg</video:thumbnail_loc><video:duration>460</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/repeating-scheduled-events</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Repeating Scheduled Events</video:title><video:description>This screencast shows how to repeat scheduled events – in this case sending repeated reminders to users who have not logged in for a month. The screencast covers:
&lt;ul&gt;
  &lt;li&gt;How to set up a component for scheduling (as seen before)&lt;/li&gt;
  &lt;li&gt;The point of re-using an ID for scheduled tasks, to avoid duplicate reminders&lt;/li&gt;
  &lt;li&gt;The trick of finding a good triggering event for scheduling (which is not always easy)&lt;/li&gt;
  &lt;li&gt;The trick of having a component &lt;em&gt;schedule&lt;/em&gt; itself upon completion, thereby repeating the scheduling&lt;/li&gt;
  &lt;li&gt;How to delete scheduled tasks, and why that may be a good idea&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lq07naLd1l5iFslYuE6oEPRhJ8wfq5NJsZaYIFVZTMo.jpg.jpg</video:thumbnail_loc><video:duration>564</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/event-driven-hook-system</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>The Event-Driven Hook System</video:title><video:description>This chapter describes how Drupal modules are able respond to specific events through the hook system. A couple of example hooks are implemented in order to see how this process works. This video builds on the demo module we created in the previous chapter.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-G3oWiS-rjF2pE3e_eRgtAWmBMevZKYplxyXC6s-Tus.jpg.jpg</video:thumbnail_loc><video:duration>923</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-rules-components-more-one-parameter</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Rules Components with More Than One Parameter</video:title><video:description>This screencast shows “how you can use multiple-parameter Rules components in VBO and get the additional parameters as action configuration,” which translates to:
&lt;ul&gt;
  &lt;li&gt;If you have more than one parameter for a Rules component, you can still use it with VBO.&lt;/li&gt;
  &lt;li&gt;Any additional parameters &lt;em&gt;will be displayed as action configuration&lt;/em&gt;, meaning that the person executing the VBO gets to choose parameter value.&lt;/li&gt;
  &lt;li&gt;Sadly, you can’t access data from the view item being actioned – you’ll have to stick with fixed input values. (If you want to use data from the processed item, you could actually do this inside the Rules component!) This is an issue being worked on.&lt;/li&gt;
  &lt;li&gt;If you have complex parameters – such as taxonomy terms instead of just an integer – you can (mostly) use entity ID in the direct input mode.&lt;/li&gt;
  &lt;li&gt;You can, by coding, change the form elements used for input. It is probably better to target the Rules data widget than doing a standard form_alter, but both will work.&lt;/li&gt;
  &lt;li&gt;You could, for example, use this for changing comment settings on nodes, or adding selected tags to nodes. (Both examples shown in this screencast.) You could also use it for, say, sending customized messages or something. Or cloning existing nodes with changes specified in parameters.&lt;/li&gt;
  &lt;li&gt;Bonus: If you add an entry to a multiple-value field in an entity, Rules won’t pick up that the entity has changed – make sure to add a “save entity” action in the rule.&lt;/li&gt;
&lt;/ul&gt;

&lt;strong&gt;Not mentioned in this screencast but still good to know:&lt;/strong&gt;
&lt;ul&gt;
  &lt;li&gt;You can have Rules components without any parameters as well. No sweat.&lt;/li&gt;
  &lt;li&gt;You can use Rules components &lt;em&gt;without any parameters matching the View type&lt;/em&gt; too. In that case, you’ll have to specify all the parameters manually.&lt;/li&gt;
  &lt;li&gt;If you have a component with &lt;em&gt;several parameters matching the view type&lt;/em&gt;, the first one will be auto-populated by VBO – the rest you have to set manually.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/f-69PXmecoAn_r2GzBXyg35langCmosdt_I3l4360d8.jpg.jpg</video:thumbnail_loc><video:duration>730</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/upgrade-status-phases-1-and-2-complete</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/introducing-rules-scheduler</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introducing Rules Scheduler</video:title><video:description>This screencast shows how to start using Rules Scheduler. It does this by mimicking the &lt;a href=&quot;http://drupal.org/project/commentcloser&quot;&gt;Comment Closer module&lt;/a&gt; – closing the comments on articles two weeks after they are created. The screencast covers:
&lt;ul&gt;
  &lt;li&gt;Rules Scheduler needs &lt;em&gt;components&lt;/em&gt; – you can only schedule prepared components&lt;/li&gt;
  &lt;li&gt;Components can be scheduled as actions, for example from reaction rules&lt;/li&gt;
  &lt;li&gt;The evaluation time for scheduled tasks is set with strtotime(), which means that you can use highly flexible expressions&lt;/li&gt;
  &lt;li&gt;You can also use data selection, combined with offsets if you want to&lt;/li&gt;
  &lt;li&gt;Every scheduled task should have a unique task ID, or it will replace existing tasks&lt;/li&gt;
  &lt;li&gt;Scheduled tasks are displayed under the Schedule tab on the Rules admin pages&lt;/li&gt;
  &lt;li&gt;You can delete tasks manually if you want to&lt;/li&gt;
  &lt;li&gt;You can schedule tasks manually, without the need of reaction rules&lt;/li&gt;
  &lt;li&gt;It is sometimes useful to execute rule components manually, to see that the scheduled tasks will work as expected&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q3fhCo6YPnCHldFU0QdMt3l2M4Ii375VNzr6847lK7Q.jpg.jpg</video:thumbnail_loc><video:duration>692</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-image-styles-code-making-deployment-easier</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Image Styles to Code:  Making Deployment Easier</video:title><video:description>It is very time consuming and error prone to repeat &quot;click steps&quot; among multiple sandboxes, development and production in order to get your new image styles to appear.  In this video, I will show you how to write code that turns your &quot;custom&quot; image style into a &quot;default&quot; image style so that you can use source control to update all of your site environments.  

I am assuming you already know how to create image styles in the administrative interface.  Familiarity with basic module development is helpful, but if you follow the techniques and patterns I demonstrate, you will successfully export your image styles into a new custom module.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eu2PJQlHGse-EVQhlfiVIfMF3pDkP_-dNeUxBm8C3JY.jpg.jpg</video:thumbnail_loc><video:duration>1927</video:duration><video:publication_date>2011-11-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-page-theme-layer</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering the Page from the Theme Layer</video:title><video:description>This chapter explains &lt;a href=&quot;http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_page_alter/7&quot;&gt;hook_page_alter()&lt;/a&gt;, which is another alter hook new to Drupal 7 and to the theme layer. Each page rendered by Drupal is contained within an array where the theme is able to go in and rearrange, delete or duplicate specific page elements.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3N2D6EpLflcyHFPI4EKmnXaG2eUjMHJxrMRTxzQe-io.jpg.jpg</video:thumbnail_loc><video:duration>771</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/strategies-keeping-template-files-clean</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Strategies for Keeping Template Files Clean</video:title><video:description>This chapter shows some general best practices for keeping your template.php file clean as well as making it easier for designers to work primarily with the template files when possible to avoid them having to make too many changes to template.php. Specifically, some HTML classes are removed from the ninesixtyrobots_comment_form() function in template.php and moved to the comment-form.tpl.php template file, which is specified as an option in the ninesixtyrobots_theme() function. The rendering logic is also removed from the theme function and into  a preprocess function so that it can be passed in as a variable to the new template file.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vpxyksBaF8H8e6YbgO0OP3N0bO2keOqr-9grFXYWmuc.jpg.jpg</video:thumbnail_loc><video:duration>547</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/best-practices-hookformalter</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Best Practices for hook_form_alter()</video:title><video:description>The ability of having alter hooks within the theme layer starts to blur the line between the logic and presentation, and so there are a few things to be aware of when using hook_form_alter() from the theme layer. The biggest thing to know is that the form rendering process has already gone through the creation and validation preparation process at the module layer, and so you shouldn&#039;t be drastically changing the functionality of a form at the theme layer. This form alter hook at the theme layer is primarily for aesthetic clean-up, styling and additional design. This chapter gives some specific examples of things to watch out for.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/x3bDg_lvzS6V7H7qVMQJE2vjHDsiNLyW4LCov_YpmZM.jpg.jpg</video:thumbnail_loc><video:duration>606</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theme-alter-hooks-css-and-javascript</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theme Alter Hooks for CSS and JavaScript</video:title><video:description>There are four alter hooks that are now available to the theme layer in Drupal 7. This chapter walks through two of those hooks,  &lt;a href=&quot;http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_css_alter/7&quot;&gt;hook_css_alter()&lt;/a&gt; and &lt;a href=&quot;http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_js_alter/7&quot;&gt;hook_js_alter().&lt;/a&gt; These hooks allow the theme layer to reorder, delete or replace specific CSS or JavaScript files that are being loaded by Drupal core or other contributed modules.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KW4IpgLZKkQRDqJrUnJUJjbMNjAYZf6y58QLrf6AsIQ.jpg.jpg</video:thumbnail_loc><video:duration>414</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/helpful-tools-module-development</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Helpful Tools for Module Development</video:title><video:description>In this video Joe Shindelar provides a quick overview of the minimum set of tools you&#039;ll need in order to get started with module development. Some kind of web server to host your development site on, an editor that allows you to edit PHP files (preferably one with syntax highlighting), a MySQL client, and Drush. Learn about how these essential tools fit in the module developers tool belt and then download and install a bare bones copy of Drupal to start tinkering with.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/81dqQpiXwmvnKkOxbd0t0C1iXapjhCOfZDR141c_1zM.jpg.jpg</video:thumbnail_loc><video:duration>379</video:duration><video:publication_date>2011-11-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theme-settings-0</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theme Settings</video:title><video:description>This lesson goes through the process of creating Theme Settings so that administrators of a theme are able to turn on and off specific features within the the theme, as well as specify other relevant settings.

Note: Twitter has recently shut down their v1 REST API so this lesson&#039;s site_slogan adjustment no longer works (it will always return no values because there is no API data found). The core concepts of how to create theme settings are still correct, you just won&#039;t be able to see the output from Twitter.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7RuQSZvplZtnyzCnMUMXxd3SuEYNzfVifXN24L--Cuw.jpg.jpg</video:thumbnail_loc><video:duration>902</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theming-forms</loc><lastmod>2023-10-10T21:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theming Forms</video:title><video:description>This chapter goes through the process of adding a specific form id to the theme registry with the &lt;a href=&quot;http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_theme/7&quot;&gt;hook_theme()&lt;/a&gt; function, which allows the creation of a new function that targets a specific form. Specifically in this chapter, comment_form is added to the theme registry so that we can create a ninesixtyrobots_comment_form() function in order to add a column to the comment form so that the name and subject fields are displayed side-by-side.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xX6dPQAUuyO0uPOJIC8DAEXIcuPPfUKyS8QTnf73l5s.jpg.jpg</video:thumbnail_loc><video:duration>1706</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/conclusion-theming-basics</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Conclusion to Theming Basics</video:title><video:description>Provides an overview of what is covered in the Theming Basics series and gives a preview of what is yet to be covered within the Advanced Theming video.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/leDQQLY4kFbd0_YipO_YVU4FxIx2Ao8ZZmY5dL6x4oI.jpg.jpg</video:thumbnail_loc><video:duration>195</video:duration><video:publication_date>2011-10-05</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-screenshot-your-theme-1</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add a Screenshot to Your Theme</video:title><video:description>Walks through the process of adding a screenshot to you theme so that it&#039;ll show up properly within the theme administration page, following the &lt;a href=&quot;http://drupal.org/node/647754&quot;&gt;screenshot directions&lt;/a&gt; found on Drupal.org, and using the Skitch screenshot app (you can use whichever screenshot app you like).

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/647754&quot;&gt;Create a screenshot for Drupal 7 themes&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q4KnYs0h5JU5p_K6ZIN-iyJ7alko7lPygx7jiK-UhJU.jpg.jpg</video:thumbnail_loc><video:duration>246</video:duration><video:publication_date>2011-10-05</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/tour-popular-page-template-variables</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Tour of Popular Page Template Variables</video:title><video:description>Takes a tour through some of the more useful template variables, and more ways of determining the available variables by  adding the following code to a page template: &lt;code&gt;&lt;?php kpr(get_defined_vars()); ?&gt;&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3wwfxKlIptV2K-raJbpDY-Y_Nb0Dsk3NTl-j8WnZSzk.jpg.jpg</video:thumbnail_loc><video:duration>732</video:duration><video:publication_date>2011-10-05</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-node-template</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Node Template</video:title><video:description>Walks through the process of copying the default node.tpl.php file from the core node module into the theme, and then customizing the output specific to individual in order to match the design. See how to add specific variables, when to use conditional if statements and the best way to debug and iterate through this process.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AT3ajCzWNLtiVUUXWTdrn0toK8GYhVi9a9tPmRxdi0I.jpg.jpg</video:thumbnail_loc><video:duration>1423</video:duration><video:publication_date>2011-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-regions-page-template</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Regions to the Page Template</video:title><video:description>In this chapter, we add some sidebar and footer regions to the page via the .info files, and printing those new regions out in our page template file, adding some blocks to help with testing. We also talk about Devel and Krumo, and how we can use those to find out everything that is available in out page array, using the dsm() function. While inspecting out page array, we point out the differences between elements and properties within renderable arrays.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/V8WArvdAglTmReWr0mlQBpNNK0X8aJhfX85q9ZSNVxU.jpg.jpg</video:thumbnail_loc><video:duration>930</video:duration><video:publication_date>2011-09-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-new-variables-specific-node-type</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding New Variables to a Specific Node Type</video:title><video:description>We&#039;ll go a step further with our preprocess functions and look at working with node variables, and how to limit new variables to only specific content types.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/48673OvmAm5Q0fkon3XMD70J3oIoy74bf-hGWzq41z0.jpg.jpg</video:thumbnail_loc><video:duration>780</video:duration><video:publication_date>2011-11-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-page-template-file</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing the Page Template File</video:title><video:description>This video walks through the process of replacing static content in the page.tpl.php file with dynamic variables. Joe talks about the html.tpl.php file as well as pointing some of the important variables that should be included within the theme.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/k4kPYX15Pi4UhhglmM4MCmylxnhBZdIw2siCCYfPTP0.jpg.jpg</video:thumbnail_loc><video:duration>1309</video:duration><video:publication_date>2011-09-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/helpful-browser-extensions-drupal-theming</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Helpful Browser Extensions for Drupal Theming</video:title><video:description>This chapter covers some really handy browser extensions in the process of theming. For Firefox, there&#039;s the Web Developer Toolbar for turning off and on JavaScript, resizing the browser window to different sizes, and inspecting elements. It also has the capability to test changes to CSS files in a format that is easy to copy and paste into the source file. We also show off the basics of the popular Firebug extension, and the equivalent functionality that is now built in to webkit-based browsers such as Safari and Chrome.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GlnIbBLxpU6zpjqk7E6KTpsPf49aaNwVEW6Hx2BhXMA.jpg.jpg</video:thumbnail_loc><video:duration>274</video:duration><video:publication_date>2011-09-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-new-variables-preprocess-functions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding New Variables with Preprocess Functions</video:title><video:description>Continuing on our work with preprocess functions, we look at how to add a new variable for our template files to use. We also see how to change the output based on whether the user is logged in or not, and how to add a variable to the t() function.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Pv_juUblRpkQ4vIMy_H9Vy-mkjuCDxzRx70ebjnS_pw.jpg.jpg</video:thumbnail_loc><video:duration>613</video:duration><video:publication_date>2011-11-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/preparing-site-theming</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Preparing a Site for Theming</video:title><video:description>In this chapter, we&#039;ll walk through some of the best practices for filling out a stock Drupal site so that you  can start to have some dummy content generated by different users and tagged with different taxonomy tags. We&#039;ll step through creating content with the devel generate module, and then do some other site preparation tasks such as creating some menu items and adding a shortcut link to the performance page so that you can quickly access the clear cache button.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots theme&lt;/a&gt;
&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel module&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lOR4IFgo_nMJjOLMg7ixMvsnC3OWaTjNSxEIPPdiGes.jpg.jpg</video:thumbnail_loc><video:duration>521</video:duration><video:publication_date>2011-09-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-testing-and-writing-patches-drupal-ladder</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/sync-article-promotions-articles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Sync Article Promotions with Articles</video:title><video:description>This screencast presents a way to help manage &lt;em&gt;article promotions&lt;/em&gt;, separate content types used for promoting articles, providing more flexibility than standard teasers. The screencast shows how to have promotion nodes being published, unpublished and deleted in sync with the articles they belong to. Topics covered are:

&lt;ul&gt;
  &lt;li&gt;Reacting on the node deletion event.&lt;/li&gt;
  &lt;li&gt;Using &lt;em&gt;fetch entity by property&lt;/em&gt; to load a list of all relevant promotion nodes.&lt;/li&gt;
  &lt;li&gt;How to have the loaded list unlimited in length.&lt;/li&gt;
  &lt;li&gt;Using the delete entity action.&lt;/li&gt;
  &lt;li&gt;How to call rule components from a reaction rule.&lt;/li&gt;
  &lt;li&gt;Why it might be a good idea to have actions in separate components when acting on node updates.&lt;/li&gt;
  &lt;li&gt;Cloning rule components.&lt;/li&gt;
  &lt;li&gt;Publishing and unpublishing nodes.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rBlcJtLtFM-o3asCfkdDAkSOg_Tir4f4WAGvNGvj848.jpg.jpg</video:thumbnail_loc><video:duration>1012</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/notify-comment-reply</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Notify on Comment Reply</video:title><video:description>This screencast shows how to set up Rules to allow comment writers to be notified when replies are posted to their comments. It covers:
&lt;ul&gt;
  &lt;li&gt;Adding a checkbox to the comment form, turning on or off reply notifications&lt;/li&gt;
  &lt;li&gt;Sending e-mails to the comment author when new comments are posted&lt;/li&gt;
  &lt;li&gt;Not sending e-mails when replying to own comments&lt;/li&gt;
  &lt;li&gt;Some words about checking “entity has field” on the correct entity&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MpvoHOx9WP2qia2JF-ZrBZNfekOm2Mf_MVGTgUyUFA0.jpg.jpg</video:thumbnail_loc><video:duration>675</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/notify-author-comments</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Notify Author of Comments</video:title><video:description>This screencast shows how to set up Rules to allow node authors to – optionally – receive e-mail notifications when comments are posted to his or her content. It covers:
&lt;ul&gt;
  &lt;li&gt;Adding a checkbox to user accounts, turning on or off comment notification&lt;/li&gt;
  &lt;li&gt;Sending e-mails to a node author when new comments are posted&lt;/li&gt;
  &lt;li&gt;Not sending e-mails to the author if he/she was the one writing the comment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ybB-dLV_QNqlcQbPkG4aud9hNVSYSlV1rz4wgngMIOs.jpg.jpg</video:thumbnail_loc><video:duration>666</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/login-redirects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Login Redirects</video:title><video:description>This screencast shows how to set up Rules to mimick parts of the &lt;a href=&quot;http://drupal.org/project/login_destination&quot;&gt;Login Destination module&lt;/a&gt;. It covers:
&lt;ul&gt;
  &lt;li&gt;How to redirect administrators to the content admin page on login&lt;/li&gt;
  &lt;li&gt;How to redirect non-adminsitrators to the front page on login&lt;/li&gt;
  &lt;li&gt;That you need the “force redirect” option when redirecting on login (yes, really!)&lt;/li&gt;
  &lt;li&gt;Some words about utilizing user permissions instead of user roles for conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Z4s6nKurwi6VDRrMQWwVaXFBljZ5ufMaRPp7IfQs88I.jpg.jpg</video:thumbnail_loc><video:duration>533</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/components</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Components</video:title><video:description>Why creating Rules components? Here is why!
&lt;ul&gt;
  &lt;li&gt;You can reuse and simplify configuration&lt;/li&gt;
  &lt;li&gt;You can export each component individually&lt;/li&gt;
  &lt;li&gt;You can use rules components to perform conditions from within actions&lt;/li&gt;
  &lt;li&gt;You can execute components manually for easier debugging (or just for the sake of executing their actions)&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;An important aspect of components is that they have &lt;em&gt;variables&lt;/em&gt; – parameters that must be sent to the component when executing it.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/u-YmPvIGqsyCnygkzeqfN502LcI0C4p41_QQhNwxQik.jpg.jpg</video:thumbnail_loc><video:duration>520</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Rules</video:title><video:description>This series on Learning the Rules framework was produced by Johan Falk of nodeone.se, and it will present some basic and advanced usage of the Rules framework. 

The Rules module helps decrease the need for custom coding. Johan starts with an empty sandbox site. He enables the 3 related Rules modules, and the modules they depend on. Now, we see what it can do for our site by creating some reaction rules.  This isn’t just an introduction – you actually get into the mechanics of using Rules right away. 


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/rules&quot;&gt;Rules module — Drupal.org&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nQ3AyS5lcgT5PupPHDh_Dy_a_NuvWUKvc_PHPjIx6As.jpg.jpg</video:thumbnail_loc><video:duration>780</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-actions-conditions-and-events</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Actions, Conditions and Events</video:title><video:description>This tutorial guides you on a quick safari through the actions, conditions and events provided by Rules core. It covers:

&lt;ul&gt;
  &lt;li&gt;A quick look at some actions provided by Rules&lt;/li&gt;
  &lt;li&gt;A quick look at conditions provided by Rules&lt;/li&gt;
  &lt;li&gt;A quick look at events provided by Rules&lt;/li&gt;
  &lt;li&gt;Some words about data objects being provided to Rules by the triggering events&lt;/li&gt;
  &lt;li&gt;Some words about multiple events in one rule &lt;em&gt;limiting&lt;/em&gt; the available data (rather than expanding)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xYIJnsjo7Yvs-NQZHy1M06PwqFgfVDruI_MkN7r4VeA.jpg.jpg</video:thumbnail_loc><video:duration>525</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/automatically-create-promotions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Automatically Create Promotions</video:title><video:description>This screencast presents a way to automatically create the &lt;em&gt;article promotions&lt;/em&gt; used in the previous screencast. Topics covered are:
&lt;ul&gt;
  &lt;li&gt;Using the &lt;em&gt;after new content has been created&lt;/em&gt; event, which &lt;em&gt;does&lt;/em&gt; provide content NID&lt;/li&gt;
  &lt;li&gt;Working with rule set components.&lt;/li&gt;
  &lt;li&gt;Creating new entities with Rules.&lt;/li&gt;
  &lt;li&gt;Setting field values in new entities – even complex fields like images.&lt;/li&gt;
  &lt;li&gt;Force-saving entities, for example to get node IDs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_D8d9nFJ2JuwFUSCBIzUoL_QIiOkE25wE52rtbc8ZnM.jpg.jpg</video:thumbnail_loc><video:duration>893</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-drupal-features-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Drupal Features Module</video:title><video:description>James Sansbury defines Features (a module that helps organize site components and applications for specific use cases), as distinct from Nodes and other forms of site content. 

&lt;h3&gt;Prerequisites&lt;/h3&gt;

This series assumes that you can install Drupal 7, create a basic content type, create a basic view, and use Drush. See the following resources if you need a refresher:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/creating-new-content-type?p=1166&quot;&gt;Create a New Content Type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/creating-new-view?p=1144&quot;&gt;Creating a New View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/installing-drupal-drush?p=1526&quot;&gt;Installing Drupal with Drush&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rjVWMTu32bDDFShp_HFQLSgLLWHnqWXlsIpNPubkrfA.jpg.jpg</video:thumbnail_loc><video:duration>490</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-attachment-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating an Attachment Display</video:title><video:description>&lt;p&gt;Goes through the process of attaching a views display to an existing view. In most cases this is done when the two views are closely related, but are displaying or highlighting different information. In this case, we&amp;#39;ll set up a full teaser view of the latest job posting and display that at the top of the table, and we&amp;#39;ll also create an offset on the original view so as to not show duplicate content on the attached view.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RK78Bat5gTk40cGw52qOf3Pv8vQcwTSO_dnDWtxOkLM.jpg.jpg</video:thumbnail_loc><video:duration>871</video:duration><video:publication_date>2011-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-dynamic-views-contextual-filter</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Dynamic  Views with a Contextual Filter</video:title><video:description>&lt;p&gt;Goes through the process of creating dynamic views with contextual filters by taking the content ID (i.e. the node it) from the URL and inserting that value as an argument for the views query. In the end, we&amp;#39;re able to create a tab that shows all of the job applications for a particular job and have that view show up on the related job posting node.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6scLgo_L9mlCaEiYt9GCGmmCYgT3D9c4RZFZlOwHDdw.jpg.jpg</video:thumbnail_loc><video:duration>920</video:duration><video:publication_date>2011-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/controlling-html-markup-views-style-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Controlling HTML Markup with Views Style Settings</video:title><video:description>&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/H5uZoZRkGsGzKJEfwcXZ-jVzQlEn9BRzieDoTv1z0CQ.jpg.jpg</video:thumbnail_loc><video:duration>511</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-exposed-filters-filter-groups</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Exposed Filters &amp; Filter Groups</video:title><video:description>&lt;p&gt;We&#039;ve already used some filters in our views, but now we&#039;ll look at how to do a few fancy things with filters. We&#039;ll expose some filters to let our end users choose the filtering they would like to apply, and we&#039;ll see how you can decide whether all of the filters are required by using the AND and OR operators.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/H4irkFoNzL17jaZYlERiQd781I31rwMId5G2cSe2YB4.jpg.jpg</video:thumbnail_loc><video:duration>893</video:duration><video:publication_date>2011-08-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-private-views-access-control</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting up Private Views with Access Control</video:title><video:description>&lt;p&gt;Views is great for making listings of all kinds of content for many different tasks and users. You don&#039;t always want everyone on your site to see everything you put in a view though. In this video we&#039;ll learn how to limit access to a particular view, using the built-in menu and access restriction settings. We create a new view to list all of the applications that have been received on the site and make sure that only site staff can access it.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DFf0ZDp3iVTBNVkBS6MSSRcgEgTgjKgwLTcaweCXZbk.jpg.jpg</video:thumbnail_loc><video:duration>1064</video:duration><video:publication_date>2011-08-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-fields-views-table</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Fields to a Views Table</video:title><video:description>&lt;p&gt;We&#039;ll look at making a nice, sortable table by switching from grid to table style, and using individual fields instead of teasers in the Job openings view we set up in the last video.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lPxaJxBLumjk7Bse2_lMO4xhlWVcgzpFRgEl_lEn8Uw.jpg.jpg</video:thumbnail_loc><video:duration>872</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/introduction-fields-drupal-7</loc><lastmod>2024-07-19T23:23Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-fields-user-profile-and-other-entities</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Fields to a User Profile and Other Entities</video:title><video:description>Shows the interface for adding fields to other entities such as taxonomy terms, comments and users. Walks through the process of adding a user profile field that will show up on the user registration form and appear on the user&#039;s profile page.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WZ7zMUwPZug0t_QW4QT9mkzPjSru9TR3acA_sx-KNSw.jpg.jpg</video:thumbnail_loc><video:duration>374</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-new-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a New View</video:title><video:description>&lt;p&gt;In this video we&#039;ll create our fist view from scratch. We make a Job Openings page, along with an associated RSS feed, and a sidebar block.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HYlE80CcY-G0TDvg5XvI4WZbeGjHJEx9h0J0ueJqeKc.jpg.jpg</video:thumbnail_loc><video:duration>382</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-views-user-interface</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of the Views User Interface</video:title><video:description>&lt;p&gt;In this video we&amp;#39;ll take a tour of the Views user interface, starting with looking at existing views, editing one of them, seeing what we have to work with, and then making som edits. The Views interface has a lot of configuration options so it&amp;#39;s good to have a sense of what is available and where things are located. We&amp;#39;ll use many of the pieces throughout the series, but this video gets you started by making a few simple edits and then reviewing our changes.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nuJ_QSZ9DdsqHjtX0njZnNkOAOd_hNpshVt5KUK3Tbc.jpg.jpg</video:thumbnail_loc><video:duration>833</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-views-displays-create-variations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Views Displays to Create Variations</video:title><video:description>&lt;p&gt;In this video we look at what Views displays are, the different ones available out of the box, and how to add some block displays to our Job openings view.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OXcRoEfLv0f7nBIiLyNyBR1beVLMydxWrXJHw6XjqPg.jpg.jpg</video:thumbnail_loc><video:duration>1062</video:duration><video:publication_date>2011-08-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/displaying-content-fields-views-formats</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Displaying Content &amp; Fields with Views Formats</video:title><video:description>&lt;p&gt;Here we&#039;ll see how to customize what our View is showing by using the views formats. We look at a few different format styles and discuss the difference between using the fields or content settings for display.&lt;/p&gt;
&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4cZ6IUc9bOtnRAS1YZHF-e08fSep8sXFQPMACIH2IWE.jpg.jpg</video:thumbnail_loc><video:duration>927</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-file-fields-and-image-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding File Fields and Image Fields</video:title><video:description>Shows how to set up private files in Drupal 7 and custom upload path as well as how to set up an image field.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xN04S7qSG_qE89WjQ8CxtYn-s1_h9WgljsP161AfaU0.jpg.jpg</video:thumbnail_loc><video:duration>710</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-fields-site-builders</loc><lastmod>2024-07-19T23:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Fields for Site Builders</video:title><video:description>&lt;p&gt;In this video series, Joe Shindelar, Karen Stevenson and Michelle Lauer build out a job posting board using the built-in Fields in Drupal 7 along with some other contributed modules. They cover the basics that Site Builders need to know about how to add fields, configure how they&amp;#39;re displayed, and using all of the different types of fields including file files, image files, term references, node references, and user references. Each chapter of this video builds upon the last as the team builds and configures two content types for posting available jobs and job applications.  &lt;/p&gt;

In this video, Joe shows the finished project we&#039;re going to make together through this series. Later in the series we&#039;ll be going through the steps necessary in order to create the job posting and job application content types he demonstrates here.

&lt;p&gt;This video will pair well with &lt;a href=&quot;http://drupalize.me/series/intro-views-drupal-7-series&quot;&gt;Intro to Views in Drupal 7&lt;/a&gt;, which will continue this job board project through to completion.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dHSh-Otgn-HDhvM79tbH73r05TAIwKCicYWAGJn5MtM.jpg.jpg</video:thumbnail_loc><video:duration>245</video:duration><video:publication_date>2011-07-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/content-types-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Content Types in Drupal 7</video:title><video:description>Goes through the default content types of the Article and Page that are provided in Drupal 7, and shows the similarities and differences between the two. Also goes through some of the configuration options, which define the default settings whenever a new node is created.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AowDdcf-9BodrfXhYWESYijl7meKOxrXFkHVVTiGakU.jpg.jpg</video:thumbnail_loc><video:duration>1025</video:duration><video:publication_date>2011-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/resizing-default-image-sizes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Resizing Default Image Sizes</video:title><video:description>Shows how to configure image styles for the uploaded headshot in order to resize the image to a more reasonable and standardized size.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UPDj5KKuJ0TbL2VpYg_oYXuRK9MSGBXWQXarlld20bg.jpg.jpg</video:thumbnail_loc><video:duration>295</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/associating-content-node-reference-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Associating Content with the Node Reference Field</video:title><video:description>Shows how to associate and create a relationship between two nodes with the node reference field type, and how to set up the &lt;a href=&quot;http://drupal.org/project/nodereference_url&quot;&gt;node reference URL widget&lt;/a&gt; in order to auto-populate the node relationship via a link on the referring node.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Aq1cfXC7nFjCsa9QdQ36BF_IHiVtNxzOsVtq7VqBkVk.jpg.jpg</video:thumbnail_loc><video:duration>888</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-user-reference-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding a User Reference Field</video:title><video:description>Goes through the process of adding a role and then creating a user reference field, which autocompletes to users within that specified role.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sladiix8gnJSeV_HajHMxBRM8oAlofm9sfb--hzf7jQ.jpg.jpg</video:thumbnail_loc><video:duration>659</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/categorizing-content-term-reference-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Categorizing Content with a Term Reference Field</video:title><video:description>Goes through the process of creating a hierarchical set of taxonomy terms, and then adding an autocomplete taxonomy term reference field to a content type.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/SBt1rTH3iKWpFHSWw3yf5eRw0yRNNol3cFlhqcWoHXI.jpg.jpg</video:thumbnail_loc><video:duration>451</video:duration><video:publication_date>2011-07-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-text-fields-lists-and-checkboxes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Text Fields, Lists and Checkboxes</video:title><video:description>Goes through the process of adding three new fields to the job posting content type including an integer text field for the salary, a  select list of job type, and a checkbox as to whether or not telecommuting is allowed.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/y38UFahONfhWULP64Sp_zxCepP0HaKxQeJKFFYYoPYs.jpg.jpg</video:thumbnail_loc><video:duration>1328</video:duration><video:publication_date>2011-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalcon-munich-recap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-example-site-intro-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of the Example Site for Intro to Fields</video:title><video:description>Provides an overview of the example job posting site that will be built over the remaining chapters of this video series.  Joe gives a tour of the job posting content type as well as the job application content type.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DZ0cnMmgQANoW7_iWR_KuyUvWoSHVgkEizDVvP6EZCA.jpg.jpg</video:thumbnail_loc><video:duration>217</video:duration><video:publication_date>2011-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/managing-field-display-formatters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Managing Field Display with Formatters</video:title><video:description>Shows how to change the formatting and label display for fields, and how to control whether a field appears in the teaser, full mode, search results and other display mode contexts.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZEKFhgnZ7erOhyfDiLkohIMr9ky8Wq9ykMZBwzZHpko.jpg.jpg</video:thumbnail_loc><video:duration>706</video:duration><video:publication_date>2011-07-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-new-content-type</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a New Content Type</video:title><video:description>Goes through the process of creating a new content type of a job posting, and shows how to customize the Title and Body labels for this new content type.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WJeP3-6VkbUTDXP9b4jZY3tCWd1cW-J0e7x2AwCPeeU.jpg.jpg</video:thumbnail_loc><video:duration>385</video:duration><video:publication_date>2011-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-fields-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Fields in Drupal 7</video:title><video:description>Gives a high-level overview of the field configuration page and defines the field types, widget and display formatters. Also adds a simple text field as an example of extending an existing content type.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6_grM2UdpEJzwnGJfOjxeZj6jpVaD6e58f39ZMqhD0Y.jpg.jpg</video:thumbnail_loc><video:duration>340</video:duration><video:publication_date>2011-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-and-deploying-feature</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating and Deploying a Feature</video:title><video:description>We&#039;ll create our very first feature and then see how it works by putting on our production site and enabling it.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://drupalize.me/videos/hands-generating-sample-content?p=1637&quot;&gt;Hands-On: Generating Sample Content&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JqsUDU4kdrW8F9g5pig-tSR4GsjlZvR9nMFwywqcR4s.jpg.jpg</video:thumbnail_loc><video:duration>1464</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/imagecache-actions-how-make-circle-images</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Imagecache Actions - How to Make Circle Images</video:title><video:description>Let’s talk about taking your image uploads and turning them into unique shapes with fabulous effects using the ImageCache Actions module.

We already know that being able to set a standard for image display creates consistency and a better user experience.  Drupal comes with the ability to do basic image manipulation like resizing them.  By downloading and enabling another module, ImageCache Actions, we can do fancy things to those images, making your display truly customized.

I am assuming that you already know how to create Image Style presets.

For this tutorial, you need to make sure the Image module that comes with Drupal Core and you also need to download and enable the ImageCache Actions module.  This can be found at drupal.org/project/imagecache_actions.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7KUDx_MprqJoX-CpFRzyE-HcO8_jnZ59pxv75J-xe4Y.jpg.jpg</video:thumbnail_loc><video:duration>430</video:duration><video:publication_date>2011-07-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/community-tools-resources</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/using-jquery-plugins</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using jQuery Plugins</video:title><video:description>&lt;p&gt;Use the jQuery plugin system to extend the set of methods available in jQuery beyond those provided by the core jQuery library. See where to find jQuery plugins, and examine a number of the available plugins and when to use them and what to use them for. See how to make use of plugins in your custom jQuery code. Finally, learn how to write your own plugins to extend the basic jQuery functionality.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Mc-7U0PqnpS_-sy4aNZ8iXg3TdrgL18hH87IROLkDjU.jpg.jpg</video:thumbnail_loc><video:duration>1038</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-jquery-review</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to jQuery Review</video:title><video:description>&lt;p&gt;A brief summary of the material covered in the Introduction to jQuery video series&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ns8qoJZ_lvOBUCxbYwUmFxUwKAl9ny6DiZo6MsxSYPc.jpg.jpg</video:thumbnail_loc><video:duration>174</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalcon-munich-and-community-love</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/learn-flag-series-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Learn Flag Series Overview</video:title><video:description>&lt;p&gt;Flag is a module used for marking nodes, comments or users with an on/off marker, for example for flagging spam comments, selecting content to promote to a sidebar, or marking other users as friends. What makes Flag useful is primarily its integration with the Views and Rules modules, and this series will make sure to cover those important pieces, too.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kW5IVJWqRPwMgAZKqy4G4gpu3t2zODExsYEYLH8LPDg.jpg.jpg</video:thumbnail_loc><video:duration>218</video:duration><video:publication_date>2012-03-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/why-open-source-matters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Why Open Source Matters </video:title><video:description>If you&#039;re reading this message, &lt;em&gt;you use Open Source software.&lt;/em&gt; The last fifteen years has seen the meteoric rise of tools like Linux, Apache, Firefox, WordPress, Drupal and more; simplyusing Open Source is old hat. When it comes to building your company&#039;s web strategy around open source tools, though, the decisions can be fuzzier. The best-known arguments for Open Source are often ideological rather than pragmatic, and fail to account for the different needs of different projects and businesses.

In this Do it with Drupal session, Jeff Eaton will explain the no-nonsense pros and cons of Open Source, covering the big wins as well as the tradeoffs and common pain points. Whether your business is testing the Open Source water, betting the farm on community-maintained software, or open-sourcing its own creations, you&#039;ll learn how to avoid common pitfalls and set yourself up for success.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4hncjj3ep1G5mP-fttQXAHHbYmnfGIeobDgxIptC6Wk.jpg.jpg</video:thumbnail_loc><video:duration>4379</video:duration><video:publication_date>2011-12-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/field-templates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Field Templates</video:title><video:description>In this lesson we cover how you can do some powerful things with Display Suite in regards to field templates. Using the Display Suite GUI there are lots of configurations and offerings to get the markup just the way you want.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;
&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sadBams13-aQbz3_vLuPxHHviHQlqOtllffgMZ6AWrY.jpg.jpg</video:thumbnail_loc><video:duration>406</video:duration><video:publication_date>2012-08-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-bash-aliases</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting up Bash Aliases</video:title><video:description>&lt;p&gt;This video shows you how to create your own custom shortcuts for various commands. We&amp;#39;ll look at some common aliases and see how to add them to our command line environment. This is super handy for commands that you type in all the time and don&amp;#39;t want to go through the tedium of typing the whole thing out every time. For example, we show how to automatically go to a particular directory with just one word (e.g. type &amp;quot;clients&amp;quot; and go to the /Users/add1sun/lullabot/clients directory immediately).&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Y6uoABY_RDmNVtxKiJC7CbByZBFcppl6vqnWSsmsso0.jpg.jpg</video:thumbnail_loc><video:duration>374</video:duration><video:publication_date>2012-11-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lists-and-loops</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lists and Loops</video:title><video:description>This tutorial shows how to manage &lt;em&gt;lists&lt;/em&gt; in Rules – data types corresponding to arrays of other data types. It covers:

&lt;ul&gt;
  &lt;li&gt;How to loop through multiple-value data in Rules, to act on each individual data entry&lt;/li&gt;
  &lt;li&gt;That lists are their own data types in Rules&lt;/li&gt;
  &lt;li&gt;That each primary data type automatically gets a list type as well&lt;/li&gt;
  &lt;li&gt;How to add data to lists&lt;/li&gt;
  &lt;li&gt;How to only add data if it is not already present&lt;/li&gt;
  &lt;li&gt;How to select whether to add new data to the start or end of the list&lt;/li&gt;
  &lt;li&gt;How to load new entities into Rules (by id)&lt;/li&gt;
  &lt;li&gt;A few words about other ways of fetching entities, such as by property or with Views (through &lt;a href=&quot;http://drupal.org/project/views_bulk_operations&quot; title=&quot;Views Bulk Operations module&quot;&gt;VBO&lt;/a&gt; or &lt;a href=&quot;http://drupal.org/project/rb&quot;&gt;Rules Bonus Pack&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;That Rules configuration are actually entities&lt;/li&gt;
  &lt;li&gt;How to disable reaction rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fuyMyxpJ8L52hdgA0yQe00-SlMJnTEo6xBAJQtQ-muQ.jpg.jpg</video:thumbnail_loc><video:duration>819</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/flag-and-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Flag and Rules</video:title><video:description>This screencast covers the following topics:

&lt;ul&gt;
  &lt;li&gt;Where to find and how to apply the patch currently necessary to use Rules with Flag&lt;/li&gt;
  &lt;li&gt;How to have a rule react on flagging/unflagging a piece of content&lt;/li&gt;
  &lt;li&gt;As an example: How to change access to a node based on flagging status&lt;/li&gt;
&lt;/ul&gt;

If you need a refresher on Rules, check out the &lt;a href=&quot;videos/introduction-rules&quot;&gt;Learning the Rules framework&lt;/a&gt; series.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UdVaCq-4wspwK-15Pzt2BRv-s8x513RxELZL_msiSpI.jpg.jpg</video:thumbnail_loc><video:duration>694</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/wysiwyg-text-formats-and-getting-setup</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>WYSIWYG, Text Formats, and Getting Setup</video:title><video:description>&lt;p&gt;In this lesson we cover downloading and installing the WYSIWYG module. We show the relationship between the WYSIWYG editor and Drupal Text Formats. We go over the basic settings of the WYSIWYG module, how to download and install an editor, and configurations necessary in Text Formats to make things work properly.&lt;/p&gt;

&lt;p&gt;Use this handbook page on Drupal.org to determine which version of TinyMCE is supported with CKEditor: &lt;a href=&quot;https://www.drupal.org/node/596966&quot;&gt;Editors&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iQ5bE2FsrEV9HMiwBDgsLIOJNTgCXBpZayy7ZxQipbI.jpg.jpg</video:thumbnail_loc><video:duration>906</video:duration><video:publication_date>2012-08-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/basics-rules-link</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Basics of Rules Link</video:title><video:description>This screencast shows the &lt;a href=&quot;http://drupal.org/project/rules_link&quot;&gt;Rules Link module&lt;a&gt;, and some basics in how to use it. It covers:
&lt;ul&gt;
&lt;li&gt;That Rules Link adds links to entities (and that you set up each link separately).&lt;/li&gt;
&lt;li&gt;That these links triggers rule sets.&lt;/li&gt;
&lt;li&gt;That the links may be displayed as links on (for example) comments and nodes.&lt;/li&gt;
&lt;li&gt;That Rules Link is useful when you previously used Flag, but didn&#039;t really need the 1/0 data that Flag provides (but rather just the Rules trigger effect).&lt;/li&gt;
&lt;li&gt;That access to each configured link can be controlled using the standard permission system.&lt;/li&gt;
&lt;/ul&gt;

All of this is demonstrated by adding a &quot;block spammer&quot; link to comments, allowing administrators to block the comment author and delete all comments written by him/her.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TRE1CKFKvH8-55Uiz7KKdrZl8B2mQ4A8Cy4bl1_tBko.jpg.jpg</video:thumbnail_loc><video:duration>647</video:duration><video:publication_date>2011-12-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/debugging-rules-configuration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Debugging Rules Configuration</video:title><video:description>This screencast shows how to go about debugging Rules configuration. It covers:
&lt;ul&gt;
  &lt;li&gt;Enabling the debug information in Rules, showing rules evaluation.&lt;/li&gt;
  &lt;li&gt;How to drill down into Rules’ debug messages.&lt;/li&gt;
  &lt;li&gt;That most (or all) times, it is your configuration and not the Rules engine that has the bug.&lt;/li&gt;
  &lt;li&gt;That the most common bug is condition that evaluates in an unexpected way.&lt;/li&gt;
  &lt;li&gt;How to see how long time rules execution takes – and why/when this may be important.&lt;/li&gt;
  &lt;li&gt;How to use the debugging action in Rules, to inspect the data in Rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ODoaHD3d2VqF9RSPRBSdRX4UovK_GQY-7B3rgTT7GrQ.jpg.jpg</video:thumbnail_loc><video:duration>455</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-flag-and-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>An Overview of Flag and Rules</video:title><video:description>This screencast quickly shows the events, conditions and actions that Flag exposes to the Rules module. It covers:
&lt;ul&gt;
  &lt;li&gt;Event: Flagging and unflagging entities&lt;/li&gt;
  &lt;li&gt;Condition: Flag is set on an entity (by a particular user)&lt;/li&gt;
  &lt;li&gt;Condition: An entity has at least a number of flaggings&lt;/li&gt;
  &lt;li&gt;Action: Load the list of users flagging an entity&lt;/li&gt;
  &lt;li&gt;Action: Set or remove a flag (for a particular user)&lt;/li&gt;
  &lt;li&gt;Action: Remove all flaggings (for a particular user) – or save a particular number of flaggings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/flag&quot;&gt;Flag project&lt;/a&gt; (Drupal.org)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/rules&quot;&gt;Rules project&lt;/a&gt; (Drupal.org)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/documentation/modules/flag&quot;&gt;Flag module documentation&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yOAPk2r6lTGgIKV9GtWa0riW2axq1jq3QTXH8nF9Gpw.jpg.jpg</video:thumbnail_loc><video:duration>345</video:duration><video:publication_date>2011-12-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/importing-and-exporting-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Importing and Exporting Rules</video:title><video:description>This screencast shows how to work with export and import of Rules configuration, in particular using the Features module. It covers:
&lt;ul&gt;
  &lt;li&gt;Why you should use the Features and Strongarm modules.&lt;/li&gt;
  &lt;li&gt;How to export Rules configuration with Features.&lt;/li&gt;
  &lt;li&gt;How to import Feature-exported Rules configuration to a site.&lt;/li&gt;
  &lt;li&gt;What &lt;em&gt;reverting&lt;/em&gt; rules configuration means, and how to do it from Rules or Features.&lt;/li&gt;
  &lt;li&gt;How to (eventually) export Rules configuration manually, and some words about the high readability in the Rules export code.&lt;/li&gt;
  &lt;li&gt;How to import manually exported Rules configuration, including some available options/tweaks.&lt;/li&gt;
  &lt;li&gt;Why configuration management is an important issue for Drupal.&lt;/li&gt;
&lt;/ul&gt;

For more information and tutorials on the Features module, check out the &lt;a href=&quot;videos/introduction-drupal-features-module&quot;&gt;Drupal Deployment with Features &amp; Drush Series&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/P_QhrvmF-N-IHUth_Yw-7YMwvZXe_O9h7CfzK0_rQ-4.jpg.jpg</video:thumbnail_loc><video:duration>695</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-installation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite Installation</video:title><video:description>Display Suite is a module that controls the display of your notes, users, comments, and any entity that&#039;s available in your system.

In this video, I will cover the installation of the module and some quick overview of all the menu items that will be made available if you install Display Suite, through the three modules that are its components: Display Suite, Extras, and Search Display.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TQ-03jFe2q06U-pbn8zlBHvx01b-slom0zT_tdafn2E.jpg.jpg</video:thumbnail_loc><video:duration>289</video:duration><video:publication_date>2012-07-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-wysiwyg-and-media-management</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to WYSIWYG and Media Management</video:title><video:description>I&#039;m always asked about Drupal: &quot;Where is the editor?&quot; Well, this series is going to answer that and teach you everything you need to know about WYSIWYG.

I’ll cover the WYSIWYG module and other modules that allow us to bring media, especially images, into our content. I&#039;ll cover best practices for using a WYSIWYG module, how you can use other modules, and various methods of getting images into your text areas with WYSIWYG or with just an image field, and I&#039;ll explain the differences among various methods.
  




&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LG2Hi3a_OojxigfJ_r4v0aVw4tHnJ2MmFiHEyF2jFkE.jpg.jpg</video:thumbnail_loc><video:duration>113</video:duration><video:publication_date>2012-08-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-image-styles-node-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Image Styles in Node Display</video:title><video:description>I am going to show you how you can upload an image of any size and it will automatically display as the size/style that you designate by editing the display field settings for your content type. We are going to add an image field to the basic page content type and set the node display to use medium size of 220 wide by 220 tall. Being able to set a standard for image display creates consistency and a better user experience. Site builders and content administrators will also have less work because you don&amp;rsquo;t need to cut all of your images before you upload them. Drupal does all the work for you!


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vreX8zMNkkzYB7dHS2bw0-5hfrJRCK4GkuoTyMicxQs.jpg.jpg</video:thumbnail_loc><video:duration>348</video:duration><video:publication_date>2011-06-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupalorg-documentation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal.org Documentation</video:title><video:description>&lt;p&gt;In this lesson we show how everyone can help with the Drupal.org documentation. We take a quick look at some of the links and information that is available to everyone with a Drupal.org account, and then we dive in to make our first edit to an existing page. We run into Drupal.org&amp;#39;s spam protection, so we also walk through getting ourselves on the no spam list for the site. After we complete our edit, we then see how to add our own new handbook page, by creating documentation for a contributed module, which doesn&amp;#39;t have a page yet. We finish up by creating an issue in the module&amp;#39;s issue queue, to get a link to our new page added to the module&amp;#39;s project page. You&amp;#39;ll see us use the Drupal.org issue queue in this video. For more detailed information about that, see our &lt;a href=&quot;videos/getting-started-issue-queue&quot;&gt;Getting Started in the Issue Queue video&lt;/a&gt;.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/q1uWhRQ4TBw0Tx5kEDAofvif-0f8EJo50yDCZEsAIZM.jpg.jpg</video:thumbnail_loc><video:duration>608</video:duration><video:publication_date>2013-01-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/broken-feeds-and-spaces-your-code</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/get-drupalorg-account</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Get a Drupal.org Account</video:title><video:description>&lt;p&gt;In this lesson, we take a tour of the *.drupal.org websites, as there is a lot more than just the main Drupal.org site. After our tour, we&amp;#39;ll walk through getting an account, and see how that gives us access to all of the Drupal.org web properties. We&amp;#39;ll play with our Dashboard, and join a group on groups.drupal.org, to become more active in the community &amp;mdash; the best way to learn and get help. You&amp;#39;ll see us use the Drupal.org issue queue in this video. For more detailed information about that, see our &lt;a href=&quot;videos/getting-started-issue-queue&quot;&gt;Getting Started in the Issue Queue video&lt;/a&gt;.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/F-n6dobdJDyZ5Kzo2Q0fQatrhTY5BA7Aal_oCW9O1Qo.jpg.jpg</video:thumbnail_loc><video:duration>629</video:duration><video:publication_date>2013-01-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/advanced-relationships-flag</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Advanced Relationships with Flag</video:title><video:description>This screencast covers the following topics:

&lt;ul&gt;
  &lt;li&gt;Creating user flags&lt;/li&gt;
  &lt;li&gt;Using user flags in Views to limit the nodes displayed&lt;/li&gt;
  &lt;li&gt;Using a double Views relationship to access the flagging user&lt;/li&gt;
  &lt;li&gt;Using contextual filters on the flagging user&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/A3PZ1L-xrNjRxUPKFWIBXjQTD3VNDVzyIxjuRyMFLnM.jpg.jpg</video:thumbnail_loc><video:duration>637</video:duration><video:publication_date>2012-03-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Views</video:title><video:description>Back in the olden days of Drupal, we used to write raw SQL. Now, Views does all of this for us. Views allows you to create a list of only the content that you want, based on criteria that you define.

In this video we demonstrate the first things to do when creating a View: selecting our Base Table, specifying the Display, looking at Advanced Features to filter content, and specifying the HTML output.
 
Throughout the course of this series, we&#039;re going to start with the content types and fields that we created during the Intro to Fields for Site Builders video series. We&#039;ll continue the job board example, and create unique listings.

&lt;strong&gt;Our apologies! The audio on this video is really bad and hard to listen to because of some background hissing. On top of that, the transcript interface using the &quot;T&quot; icon is broken on this video. Double-boo! Here is the text of the audio. Note: You can also mute the audio and display the captions by clicking the &quot;cc&quot; icon on the lower right corner of the video player.&lt;/strong&gt;

&lt;p&gt;Views is the most popular contributed module. In the subsequent chapters, we&#039;ll show you step-by-step how to use Views.&lt;/p&gt;
&lt;p&gt;Views is a query builder that makes lists of your content. But what does that mean? Let&#039;s pretend we&#039;re looking for a new car. And we want our salesperson to only show us green cars. No, let&#039;s make that blue cars. Or maybe, we only want to see trucks.&lt;/p&gt;
&lt;p&gt;Think of all of your content as this giant parking lot. Views allows you to create a list of only the content that you want, based on the criteria that you define. And you can concatenate this criteria. You can say, show me all the content that is of the type, article and, authored by the admin user.&lt;/p&gt;
&lt;p&gt;Back in the olden days of Drupal, we used to write raw SQL. Now, Views does all of this for us. To create a list of content on our site, we don&#039;t need to know anything about the database at all. Views will give us an administrative interface where we can click around to configure our criteria, and also how we&#039;d like it to be output. The previous slide showed us that there are a lot of options to select from. But in basic terms-- Views sucks data in, fires off magic thingies, and then outputs hotness.&lt;/p&gt;
&lt;p&gt;When creating a View, the first thing that we select is our Base Table. This is the pool of data from where we want to start creating our lists. Do we want to show information about nodes, or users, or comments, even. And then we can select what we&#039;d like our first Display to be. Should our list to be a page, with a unique URL. Or a block, that we can place in any region in our site. For a Display, in addition to selecting the filter criteria, we can specify which fields we want to appear. And also, what order we&#039;d like our content listed. Advanced Features allows us to filter content based on a current condition-- like the URL, or the logged-in user.&lt;/p&gt;
&lt;p&gt;We also can gather information that is related to our current result. Views allows us to have multiple displays for each View. For each subsequent Display you create, it will inherit the configurations of your first Display. Although the new Display utilizes your previous settings, you can override that. Once we&#039;ve selected our Base Table, and configured our Display settings, Views will also allow us to specify the HTML output. We can choose from a simple div structure, and ordered lists, or even a table.&lt;/p&gt;
&lt;p&gt;Views is a powerful and highly-configurable list maker. Throughout the course of these videos, we&#039;re going to take the content types and fields that we created during the Intro to Fields for Site Builders video series. We&#039;ll continue the job board example, and create unique listings. The Views module contains so many configurations and settings. Through our practical examples, we aim to demystify it. So let&#039;s dive in.&lt;/p&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/views&quot; target=&quot;_new&quot;&gt;Views module at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WZuIn3jTNsHjna3wvvvqcCmOFfbGdcCWrs3ifDj_-s8.jpg.jpg</video:thumbnail_loc><video:duration>217</video:duration><video:publication_date>2011-08-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/brief-explanation-omega-video-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Brief Explanation of the Omega Video Series</video:title><video:description>Omega is a Drupal base theme that provides you with a really nice responsive framework. Omega also provides a lot of configuration options that are accessed through the UI rather than code. So, you can adjust the display settings and know that the underlying framework will be intact.
 
In this series, we&#039;re going to be demonstrating the Omega module by converting an existing Drupal theme into an Omega sub-theme. We&#039;ll talk about the HTML and CSS that&#039;s involved, and how they work together. We&#039;ll be working with theme functions and looking at the Omega best practices around how to break out your theme functions, where to put those, and how to use them.

   



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.alistapart.com/articles/responsive-web-design&quot;&gt;http://www.alistapart.com/articles/responsive-web-design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sRdkm0BtB6wsGgze0Tt4OfUVUnvV8ebIvdy2juHWw1E.jpg.jpg</video:thumbnail_loc><video:duration>248</video:duration><video:publication_date>2012-10-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adjusting-settings-each-panel-pane</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adjusting the Settings for Each Panel Pane</video:title><video:description>&lt;p&gt;Each piece of content placed into a panel has it&amp;rsquo;s own configuration settings, covering everything from display style to access control. In this lesson we will take a tour through the settings for each pane.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Xb6pcKiVYr-NQ5glOjeaIGpL9sVGNrIpZSppaHfbzAo.jpg.jpg</video:thumbnail_loc><video:duration>501</video:duration><video:publication_date>2012-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/php-themers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>PHP for Themers</video:title><video:description>&lt;p&gt;Before we dive into advanced theming we are going to review the basic PHP you will need to use. This is a short review of PHP, including topics like data structures (arrays and objects), conditionals and operators, loops, and functions.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5AnwnfYDO95CWHCTLH_5gTs-SMccoZjXQOaZjtuCBpI.jpg.jpg</video:thumbnail_loc><video:duration>790</video:duration><video:publication_date>2011-11-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-advanced-theming-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction Advanced Theming in Drupal 7</video:title><video:description>In this series, we talk about template.php, the file where all your functions live. We’ll also discuss preprocess functions and overriding theming functions. You’ll learn how to create new variables and override existing ones using template.php. With these tools you can allow your theme to have complete control of outputted HTML.

In this video you’ll learn when to use a tpl.php file or your template.php file, and we’ll look at differences between them. We’ll also review the three main steps of theming.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sqRyxEaEIHyeumKrhzY1ThV9BoFNfuJMAq4WYLPJkAo.jpg.jpg</video:thumbnail_loc><video:duration>716</video:duration><video:publication_date>2011-11-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/data-types-and-data-selection</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Data Types and Data Selection</video:title><video:description>This tutorial presents &lt;em&gt;data types&lt;/em&gt; and the &lt;em&gt;data selection&lt;/em&gt; method for input in Rules. This is the most important difference between Rules 1 (D6) and Rules 2 (D7).

&lt;ul&gt;
  &lt;li&gt;How to use data selection to explore available data and drill down to selected properties&lt;/li&gt;
  &lt;li&gt;Using the data comparison condition&lt;/li&gt;
  &lt;li&gt;Using the set a data value action&lt;/li&gt;
  &lt;li&gt;That Rules recognizes different types of data, and verifies when necessary&lt;/li&gt;
  &lt;li&gt;That Rules knows that not all data is writable, and verifies when necessary&lt;/li&gt;
  &lt;li&gt;How to create composite tokens, extending the tokens listed in the replacement patterns&lt;/li&gt;
  &lt;li&gt;Making field values accessible to Rules&lt;/li&gt;
  &lt;li&gt;Using reference fields to access new data, such as tags on an article or nodes in a node reference field&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/SO73A_tXl61gh1ghlq6vo0jhrlL5lmHLdInJwbxPRY4.jpg.jpg</video:thumbnail_loc><video:duration>925</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-ladder-teaches-git-and-issue-queue</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/using-vbo-load-list-objects-rules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using VBO to Load a List of Objects into Rules</video:title><video:description>&lt;p&gt;This screencast shows the awesome functionality of loading entity lists into Rules with help of VBO. As an example, a rule is set up that, once a day, removes any stick front page content that is older than one week. To do similar cools stuff yourself, the following steps may be useful:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You need a view that lists the entities you want to work on in Rules. Note that you &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; need a display of the view &amp;ndash; and it might even be better not to have one if you don&amp;rsquo;t want the view to be displayed somewhere.&lt;/li&gt;
	&lt;li&gt;However, you need one bulk operations field. The &lt;em&gt;type&lt;/em&gt; of bulk operations field determines what entity type will be sent to Rules. Note that you don&amp;rsquo;t need any actions enabled for the field &amp;ndash; it is enough that it is present.&lt;/li&gt;
	&lt;li&gt;You need a rule that, as an action, loads entities from a VBO. (This is available under the &amp;ldquo;Views bulk operations&amp;rdquo; group.) All view displayes with at least one VBO field will be selectable.&lt;/li&gt;
	&lt;li&gt;The action provides a list of entities, that can be used just like other lists in Rules. Combine with loops, actions and Rules Scheduler to make awesomeness happen.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sP2j5fYCn1aT0f5GFHW8dYQEqxQISWKuUQMF5xNgtIo.jpg.jpg</video:thumbnail_loc><video:duration>778</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-rules-components-vbo</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Rules Components with VBO</video:title><video:description>&lt;p&gt;This screencast shows how you can use Rules components in VBO, allowing &lt;em&gt;much&lt;/em&gt; more complex and flexible actions than comes out of the box with VBO. The episode covers:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;How to create a simple Rules component.&lt;/li&gt;
	&lt;li&gt;How component &lt;em&gt;parameters&lt;/em&gt; are used by VBO &amp;ndash; in particular that it is useful to have a single node as parameter if you want to use a component with a node view.&lt;/li&gt;
	&lt;li&gt;Some words about what the &lt;em&gt;provided&lt;/em&gt; variable option for Rules components means.&lt;/li&gt;
	&lt;li&gt;An example showing how to use VBO to close (and hide) comments using VBO + Rules in combination.&lt;/li&gt;
	&lt;li&gt;Some comments about creating more complex Rules components.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules/2-site-builder-documentation-0/list-operations-with-views&quot;&gt;List operations with Views&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AXAWxxSQ4QY8s4Cq6EyEIC_5asE1spcqU0rlU7J_imc.jpg.jpg</video:thumbnail_loc><video:duration>315</video:duration><video:publication_date>2011-11-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/understanding-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Understanding Drupal</video:title><video:description>Learn the essential terminology of Drupal in this overview of content nodes, blocks, theming, menu system and modules. In Understanding Drupal, the first in The Lullabot Learning Series, the Lullabot team provides an overview of Drupal as a content management system, as a PHP web application framework, and as a developer community. Its documentary-style exploration covers all the terminology and fundamental concepts for both site administrators and developers. If you&#039;ve ever been confused by Drupal or are still trying to wrap your head around the community and platform, then this video is a roadmap to accelerate your journey up the Drupal learning curve. Topics include:
&lt;ul&gt;
&lt;li&gt;How content is entered and managed&lt;/li&gt;
&lt;li&gt;How users and user permissions are handled&lt;/li&gt;
&lt;li&gt;What blocks are and what they can do&lt;/li&gt;
&lt;li&gt;The concepts and capabilities of Drupal&#039;s powerful module system&lt;/li&gt;
&lt;li&gt;How Drupal handles navigation and its menu system&lt;/li&gt;
&lt;li&gt;How themes alter the site layout, design, and presentation&lt;/li&gt;
&lt;li&gt;Site configuration and administrative messages and settings&lt;/li&gt;
&lt;/ul&gt;
This video uses Drupal 6 for examples, however it is more focused on general Drupal concepts rather than version-specific how-tos.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xSlS8iw9ee2hRliKzGZdnwnoEjRw7JhOnmQkNHkVTVA.jpg.jpg</video:thumbnail_loc><video:duration>3862</video:duration><video:publication_date>2008-06-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-page-manager-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of the Page Manager Series</video:title><video:description>In this introductory video we go over what you should already know to get the most out of this series.  We also describe topics covered in each of the 13 episodes – over 2 hours in total.

Each episode covers just one concept, when possible, so you can get the most out of them without getting overwhelmed.

&lt;p&gt;If you need to brush up on Views, you can watch our &lt;a href=&quot;http://drupalize.me/videos/overview-views&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt; series.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UQVEiYyvMvWRvW9X6cX4KMz_YXo1CdjVLsRCeU6vfJk.jpg.jpg</video:thumbnail_loc><video:duration>411</video:duration><video:publication_date>2012-01-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-give-hug</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How to Give a Hug</video:title><video:description>In this video Joe Shindelar goes over some important information about giving hugs. He walks through the various facets of hugs, giving some demonstrations throughout on:
&lt;ul&gt;
&lt;li&gt;Defining a hug&lt;/li&gt;
&lt;li&gt;Types of hugs&lt;/li&gt;
&lt;li&gt;Cautions&lt;/li&gt;
&lt;li&gt;Technique&lt;/li&gt;
&lt;/ul&gt;

As Joe admonishes in the video, don&#039;t forget to practice your hugging after watching the video. Practice makes perfect!

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/G49va1LmgJ0-1UFJ84oA9LRlq6CRupaFYJGoctR1o4Q.jpg.jpg</video:thumbnail_loc><video:duration>514</video:duration><video:publication_date>2012-04-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/basics-views-content-panes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Basics of Views Content Panes</video:title><video:description>This screencast covers the following topics:
&lt;ul&gt;
  &lt;li&gt;Setting up contextual filters with Views Content Panes&lt;/li&gt;
  &lt;li&gt;Getting argument input (contextual filter value) to a Views Content Pane&lt;/li&gt;
  &lt;li&gt;Embedding a Views content pane in a panel&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/T_16a_9stiQSbzse7TLaxd_Su4BEHuWlBJuWRqkfR18.jpg.jpg</video:thumbnail_loc><video:duration>556</video:duration><video:publication_date>2012-01-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-building-websites-using-panels-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Building Websites Using the Panels Module</video:title><video:description>&lt;p&gt;In this first series of Panels videos on Drupalize.me you will learn how to use the Panels module to take your Drupal website to the next level. &amp;nbsp;When you reach the limits of what Drupal alone allows you to do with its layouts, adding Panels to your site enables you to create more sophisticated displays of your content. &amp;nbsp; Here are just a few things the Panels module makes easy:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Divide the display of your content into multiple columns&lt;/li&gt;
	&lt;li&gt;Place blocks into the center of your pages&lt;/li&gt;
	&lt;li&gt;Use different layouts on the same page, under different circumstances&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Panels works with the Page Manager module in ctools, you get all the benefits of the page manager, as well as complex control of your layouts. Page manager allows you to take over many of the &amp;lsquo;default&amp;rsquo; displays in Drupal, including the display of content (nodes), profiles (users), category listings (taxonomy), and also the edit forms for each of these entities.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QNzzkSfOfv1aCdprxU8XZ6Wutnqkbai1FqXdyGmSles.jpg.jpg</video:thumbnail_loc><video:duration>72</video:duration><video:publication_date>2012-09-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/capitalcamp-workshop-community-tools</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/display-suite-view-modes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite View Modes</video:title><video:description>In this lesson we cover how one can use view modes and display suite to allow multiple options of layouts for content display. This allows a user to have a different layout of the same content for different scenarios of the site. Combining this with views and you can start to see the power of display suite in action.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;
&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cB_3-9XaLSn9z4b8wH0t4-0sKhsHy6HD0NhbS84yG1w.jpg.jpg</video:thumbnail_loc><video:duration>430</video:duration><video:publication_date>2012-08-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-layout-display-suite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring a Layout in Display Suite</video:title><video:description>In this lesson we cover the basics of using Display Suite to modify the layout of a particular content type.  We cover all the potential templates, adding classes to regions, and lots of configurations to set to taylor the layout to your needs. We also discuss how you can create your own template files and layouts for your own customizations.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/ds&quot;&gt;Display Suite project&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UO9z_ZiCVDoGPqdSAMYgj33DMP0AfrRaxbtM4E4Px5c.jpg.jpg</video:thumbnail_loc><video:duration>819</video:duration><video:publication_date>2012-07-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-jquery</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is jQuery?</video:title><video:description>&lt;p&gt;jQuery makes using Javascript easy. A description of the basic jQuery library, and a brief history of why jQuery exists and how it can be used to simplify development of Javascript for your site.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/G81MMXhQjx75YvLRB3uevvRtOkvvYWEK-FL0Z9AAQhs.jpg.jpg</video:thumbnail_loc><video:duration>337</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/custom-panels-layouts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Custom Panels Layouts</video:title><video:description>&lt;p&gt;Though Panels comes with several built-in layouts for you to choose from, you&amp;rsquo;ll find that these don&amp;rsquo;t always suit your needs. Fortunately, there&amp;rsquo;s also a layout designer that anyone can use to create a new layout with Panels. In this lesson you will learn how to use the Panels layout designer for rapid prototyping.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/panels&quot; target=&quot;_new&quot;&gt;Panels at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E-MfNE7hVRXezscyuNe_cH7ZSRwBeRav1RHdLUTAV3k.jpg.jpg</video:thumbnail_loc><video:duration>522</video:duration><video:publication_date>2012-10-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-area-handlers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing Custom Area Handlers</video:title><video:description>Area handlers are used in the header, footer and empty text areas when creating a View. In this lesson, we’ll walk through creating our own area handler that can be placed in the footer to provide a summary of all the rows in our View.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/X3IaRf-W452bC6hSO0yuNEEKlYUHwTtbghHLpYuJ-6A.jpg.jpg</video:thumbnail_loc><video:duration>812</video:duration><video:publication_date>2013-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theming-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theming Views</video:title><video:description>In this lesson, we’ll take a look at how to modify the HTML output from Views, explore some of the default templates that Views provides, and learn about the various permutations of names we can give our template files to override output for everything from a large set of Views to a single field on a single View. We’ll also discuss the difference between displays, styles, rows, and fields when it comes to theming a View.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gYYBNQTzkwHeWG0OuxTugj2HuuIKx5Gm_-2IHOKkL60.jpg.jpg</video:thumbnail_loc><video:duration>898</video:duration><video:publication_date>2013-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/your-site-administration-ui-should-be-loved-well</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/using-irc-internet-relay-chat</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using IRC (Internet Relay Chat)</video:title><video:description>In this lesson we take a look at an extremely useful tool for communicating with the Drupal community (and many other Open Source communities as well). We will find out what IRC is, why you would want to use it, how to get connected, and some basic guidelines and tips for talking with people on IRC. We&#039;ll also explain what the IRC bot, Druplicon, is and how you can use it.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/irc&quot;&gt;Drupal.org IRC documentation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://druplicon.info&quot;&gt;Druplicon.info&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://freenode.net&quot;&gt;Freenode.net information&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://webchat.freenode.net&quot;&gt;Freenode Webchat&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://pidgin.im&quot;&gt;Pidgin IM app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/joznn4tLgn3HweYo98cRdOMaEKS4XgXcodxWj4S4DlE.jpg.jpg</video:thumbnail_loc><video:duration>1039</video:duration><video:publication_date>2013-01-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/lightboxes-and-drupal-7</loc><lastmod>2020-03-03T18:08Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-lightboxes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Lightboxes</video:title><video:description>&lt;p&gt;A Lightbox brings content to the user&#039;s attention.&lt;/p&gt;
&lt;p&gt;To decide which Lightbox module you should use for your Drupal project, think about what you will use it for. Do you need to handle images and video? HTML? Integration with other modules? Various browsers?&lt;/p&gt; 
&lt;p&gt;Once you choose one to meet your needs, we’ll show you how to go about using it.
&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/266126&quot;&gt;Drupal Lightbox Comparison&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gUMmbYk0nd1IRmJKKGzZzjVqNSaMXZGZolsbt_g3rUI.jpg.jpg</video:thumbnail_loc><video:duration>261</video:duration><video:publication_date>2013-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-started-lightbox2</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Started with Lightbox2</video:title><video:description>In this lesson we will cover the configuration pages for the &lt;a href=&quot;http://drupal.org/project/lightbox2&quot; title=&quot;Lightbox2&quot;&gt;Lightbox2 module.&lt;/a&gt;  This module offers a ton of options and the configuration page can be daunting. Later in the series, as we get into using Lightbox2, we will demonstrate how to apply some of these configurations.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/266126&quot;&gt;Drupal Lightbox Comparison&lt;/a&gt;

&lt;h3&gt;Modules Needed&lt;/h3&gt;
&lt;a href=&quot;http://drupal.org/project/lightbox2&quot; title=&quot;Lightbox2&quot;&gt;Lightbox2&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-O3njQ2fOnJxPLM5PEifMUK_qCsWdBCz1-57TcuZICU.jpg.jpg</video:thumbnail_loc><video:duration>677</video:duration><video:publication_date>2013-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-started-colorbox</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Started with Colorbox</video:title><video:description>In this lesson, we will take a look at the &lt;a href=&quot;http://drupal.org/project/colorbox&quot; title=&quot;Colorbox&quot;&gt;Colorbox module&lt;/a&gt; and its configuration page. We also will discuss some other helper modules that work great with Colorbox. Later in the series, we will demonstrate some uses of Colorbox and techniques to make the most of it.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;h3&gt;Modules Needed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/colorbox&quot; title=&quot;Colorbox&quot;&gt;Colorbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/libraries&quot; title=&quot;Libraries&quot;&gt;Libraries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;External&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jacklmoore.com/colorbox&quot; title=&quot;Colorbox&quot;&gt;Colorbox jQuery plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ythoIN_bWoMB_0Kd-GJSWWm8cj5C_qa_n-vx6_GOXRM.jpg.jpg</video:thumbnail_loc><video:duration>247</video:duration><video:publication_date>2013-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lightboxes-and-images</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lightboxes and Images</video:title><video:description>In this lesson we will use both the Lightbox2 and Colorbox modules in actual real world uses.  We will demonstrate how to use each module or helper modules to use with images, create slideshows and galleries.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DKaf1hqvk7J-kZyrg_yJUPdlzM0X6xEnjnC9n07aQKA.jpg.jpg</video:thumbnail_loc><video:duration>654</video:duration><video:publication_date>2013-01-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lightboxes-content-and-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lightboxes, Content, and Views</video:title><video:description>In this lesson we will cover using Lightbox2 and Colorbox with content in your site. Taking a lightbox beyond just enlarging images, we will demonstrate displaying nodes and using Views with a lightbox.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5GoQgdD5AdW18CR3PMXvHZ9GAuLR5nVJwulymYSMbeY.jpg.jpg</video:thumbnail_loc><video:duration>700</video:duration><video:publication_date>2013-01-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/deploying-your-code-without-terminal</loc><lastmod>2020-03-03T18:13Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/git-deployment-and-beanstalk</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Git, Deployment and Beanstalk</video:title><video:description>We introduce code deployment without a terminal using beanstalkapp.com.

Deployment means moving your code from environments such as local to production – with version control, which allows for backups, fixing mistakes, and collaborative environments.

Git is the type of version control used in Drupal, and we&#039;ll discuss Git in this lesson.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://beanstalkapp.com&quot;&gt;Beanstalk&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dm0BSiuEO3fbuB75T-jVQIZ6shHN9IL2zcRYM2G4BjQ.jpg.jpg</video:thumbnail_loc><video:duration>226</video:duration><video:publication_date>2013-02-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-beanstalk-get-your-site-version-control</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Beanstalk to Get Your Site into Version Control</video:title><video:description>In this lesson, we will cover the basics of getting code into version control using the Mac app &quot;&lt;a href=&quot;http://www.git-tower.com/&quot; title=&quot;Tower&quot;&gt;Tower&lt;/a&gt;&quot; and then making the first commit and pushing it to the remote repository we will setup on &lt;a href=&quot;http://www.beanstalkapp.com.&quot; title=&quot;beanstalkapp.com&quot;&gt;beanstalkapp.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/v-LhPqZ2M3mLiwJVWHLUmO_gv8qmh5loWj7hcCw66TU.jpg.jpg</video:thumbnail_loc><video:duration>357</video:duration><video:publication_date>2013-02-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-jquery-and-javascript-drupal</loc><lastmod>2025-05-16T21:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Introduction to jQuery and JavaScript in Drupal</video:title><video:description>Learn how to integrate jQuery scripts into Drupal, and how to leverage the JavaScript capabilities of the Drupal API in both 6.x &amp; 7.x
&lt;!--break--&gt;

Jeff Robbins and Nate Haug introduce the jQuery and Drupal integrations that we&#039;ll be building in this series, based on the foundations of theming, module development, and jQuery.
&lt;ul&gt;
&lt;li&gt;How to add jQuery to a theme&lt;/li&gt;
&lt;li&gt;How to utilize Drupal&#039;s drag and drop behavior to reorder elements on a page within any form that has orderable items&lt;/li&gt;
&lt;li&gt;Drupal&#039;s direct integration with jQuery through the Forms API in Drupal 6 and Drupal 7&lt;/li&gt;
&lt;li&gt;Building a highly optimized AJAX request to Drupal that will return a JSON result&lt;/li&gt;
&lt;li&gt;The JavaScript state system in Drupal 7&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Note: The examples in the video span across Drupal 6 and Drupal 7, and jQuery code that will work either in jQuery version 1.2.6 or 1.4.&lt;/em&gt;&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/29nHCcfsbPQ3mkLe5KmiDNvVBqptDi_IqgHnZwKmLIc.jpg.jpg</video:thumbnail_loc><video:duration>227</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/giving-drupalizeme-new-coat-paint</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/views-bulk-operations-vbo-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Bulk Operations (VBO) Module</video:title><video:description>&lt;p&gt;The &lt;a href=&quot;http://drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations (VBO) module&lt;/a&gt; is a great extension for the Views module, which allows you to add bulk operation checkboxes and actions to any view. You often see bulk operations on various Drupal core administration pages, like the content administration screen, which lets you select multiple pieces of content, and then perform an action, like publishing or deleting, on all items at the same time. VBO lets you add this to your administrative screens, which allows you to create very customized reports that also have time-saving actions available to them as well.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations (VBO) module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/admin_views&quot;&gt;Administration Views module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3cBNgINK_y0TzESteVbC-CWl2-WvRttjY8g2YxRPb6I.jpg.jpg</video:thumbnail_loc><video:duration>645</video:duration><video:publication_date>2013-02-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/entity-views-attachment-eva-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Entity Views Attachment (EVA) Module</video:title><video:description>The &lt;a href=&quot;http://drupal.org/project/eva&quot;&gt;Entity Views Attachment (EVA) module&lt;/a&gt; extends the Views module to allow you to attach a view to any entities on your site. Views on its own will let you create a page for your view, with its own URL, and it also lets you attach multiple views to the same Views page, but it doesn&#039;t let you do something like attach a view to a node, or a user. This lesson walks through a simple example of creating a basic view listing published articles on a site, and then using EVA to attach that view to user profiles, and making sure that we only list the published articles for that user, using a contextual filter.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/eva&quot;&gt;Entity Views Attachment (EVA) module&lt;/a&gt; &lt;a href=&quot;http://drupal.org/project/entity&quot;&gt;Entity API module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rCubM_YmkXsmCZpFnNW1Ujs7YHkDRlYMb3smzCvr7Vw.jpg.jpg</video:thumbnail_loc><video:duration>588</video:duration><video:publication_date>2013-02-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-word-link</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Word Link</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-word-link&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt; we look at the &lt;a href=&quot;http://drupal.org/project/word_link&quot;&gt;Word Link module&lt;/a&gt;. It&#039;s a simple problem, but a tricky one: How can you ensure that special words and phrases, like your company&#039;s name or certain trademarks, are always linked to an appropriate web site when they&#039;re used in the text of an article? The easy answer is Word Link module: it lets you set up a custom glossary of terms that should be turned into links whenever the appear in text.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-word-link&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/word_link&quot;&gt;Word Link module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tu93ascQFBSL_DYOtS1xS0EB1LJdgRXFfZ5GzONxMgU.jpg.jpg</video:thumbnail_loc><video:duration>395</video:duration><video:publication_date>2013-02-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-backup-and-migrate</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Backup and Migrate</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-backup-and-migrate&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt; we take a look at the &lt;a href=&quot;http://drupal.org/project/backup_migrate&quot;&gt;Backup and Migrate module&lt;/a&gt;. Few things are more terrifying than the realization that a server hiccup has wiped out a web site, or a hasty change deployed to the live site has nuked important content. Fortunately, there&#039;s a module that can help. Backup and Migrate offers site builders a host of options for manually and automatically backing up their sites&#039; databases, and integrates with third-party backup services, to boot!

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-backup-and-migrate&quot;&gt;Lullabot Module Monday: Backup and Migrate article&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/backup_migrate&quot;&gt;Backup and Migrate module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/H7HSQU_QCo06uPK9PnGP5k3CFchw4QmgKr8xoOPEqks.jpg.jpg</video:thumbnail_loc><video:duration>447</video:duration><video:publication_date>2013-02-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-menu-position</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Menu Position</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-menu-position&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt; we walk through the useful &lt;a href=&quot;http://drupal.org/project/menu_position&quot;&gt;Menu Position module&lt;/a&gt;. It&#039;s a word that can strike fear into the heart of the bravest site builder: Breadcrumbs. Manage them well, and you&#039;ll give visitors a helpful visual indicator of where they&#039;re at in your site. Miss a detail, and the weird inconsistencies will be more confusing than no breadcrumbs at all. The challenges stem from Drupal&#039;s &quot;flat hierarchy&quot; -- by default, almost all pages (including every node you create) live just beneath the home page itself in an undifferentiated pool of content. All of the visual cues it sends to visitors (breadcrumb trails, highlighted parent items in the navigation menus, and so on) start with that assumption until you override them. That&#039;s where the Menu Position module helps out. It lets you set up simple rules that tell Drupal where each node type should go in the site&#039;s hierarchy, then handles all of the frustrating details automatically.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-menu-position&quot;&gt;Lullabot Module Monday: Menu Position article&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/menu_position&quot;&gt;Menu Position module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/h3qoEZtiFjTM21TD0IxhqnjEGlczsTymouua8CWFXZs.jpg.jpg</video:thumbnail_loc><video:duration>300</video:duration><video:publication_date>2013-02-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-mass-password-reset</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Mass Password Reset</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-mass-password-reset&quot;&gt;Lullabot Module Monday article&lt;/a&gt;, we learn about the &lt;a href=&quot;http://drupal.org/project/mass_pwreset&quot;&gt;Mass Password Reset module&lt;/a&gt;. It&#039;s a question we all ask ourselves: What would I do if my site or server was compromised? Security professionals have loads of checklists to follow, and experienced server administrators drill for those moments. As we saw when Twitter.com was compromised by hackers, &quot;Reset everyone&#039;s passwords, right away!&quot; is almost always one of the important steps. If you run a Drupal site, that particular step can be frustrating. Resetting user passwords one by one is incredibly time consuming, and there&#039;s no way to do it for everyone in one fell swoop. At least, there wasn&#039;t until the release of the &lt;a href=&quot;http://drupal.org/project/mass_pwreset&quot;&gt;Mass Password Reset module&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-mass-password-reset&quot;&gt;Lullabot Module Monday article: Mass Password Reset&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/mass_pwreset&quot;&gt;Mass Password Reset module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QuMgXSQLPMHvHpM7etmGeJiZgyPBa_i3WmiDa-Fywco.jpg.jpg</video:thumbnail_loc><video:duration>187</video:duration><video:publication_date>2013-03-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-style-guide</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Style Guide</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-style-guide&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt;, we take a look at the &lt;a href=&quot;http://drupal.org/project/styleguide&quot;&gt;Style Guide module&lt;/a&gt;. Comparing Drupal themes is tough: the screenshots they provide are often based on heavily tweaked sites with plenty of slider blocks, tweaked media attachments, and other just-so content. Figuring out the &quot;basics&quot; — how a given theme styles core HTML elements and recurring Drupal interface patterns — can be tough! Fortunately, the Style Guide module can help.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-style-guide&quot;&gt;Lullabot Module Monday article: Style GUide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/styleguide&quot;&gt;Style Guide module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cQmryaTMV-3FN9kIfAjQpl5pgisiV5mu9i4YPx6uufs.jpg.jpg</video:thumbnail_loc><video:duration>372</video:duration><video:publication_date>2013-03-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-publish-button</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Publish Button</video:title><video:description>In this &lt;a href=&quot;https://www.lullabot.com/articles/module-monday-publish-button&quot;&gt;Lullabot Module Monday lesson&lt;/a&gt; we are introduced to the &lt;a href=&quot;http://drupal.org/project/publish_button&quot;&gt;Publish Button module&lt;/a&gt;. It&#039;s a simple problem, but a serious one. You&#039;ve put your content editors in front of Drupal for the first time, and they can understand the node form without any problems. They understand taxonomy terms, grok menus and node references… but they get nervous when it&#039;s time to save their work. &quot;Will... will this be published as soon as I click &#039;save?&#039;&quot; Normally, there&#039;s no good way to make the distinction between saving and publishing a piece of content explicit. Site builders can set a content type to be unpublished by default, then give editors the broad &quot;administer nodes&quot; permission, but that&#039;s clumsy solution that forces editors to dig for what should be a simple action: publishing or unpublishing a post. That&#039;s where the Publish Button module comes in.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/articles/module-monday-publish-button&quot;&gt;Lullabot Module Monday article: Publish Button&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/publish_button&quot;&gt;Publish Button module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/CcQa5ZqiMbu6WxcQiAVlxETxPlNVcpt9mXBUpyb51OQ.jpg.jpg</video:thumbnail_loc><video:duration>204</video:duration><video:publication_date>2013-03-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/introduction-git</loc><lastmod>2024-07-19T23:21Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-git-series</loc><lastmod>2023-12-21T23:45Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to the Git Series</video:title><video:description>This is an in-depth course that starts with the basics of version control, establishes some terminology, and a base line workflow, then continues to build on that by going beyond the basics of the various Git commands to make the most out of your tools.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qnEdK2bjUzZ6N1Z3QGEL6ke7F87jLZCGoCCQ-o6Xz7w.jpg.jpg</video:thumbnail_loc><video:duration>158</video:duration><video:publication_date>2013-03-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-and-configuring-git</loc><lastmod>2023-12-21T23:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing and Configuring Git</video:title><video:description>&lt;p&gt;In this lesson we take a look at the methods available to install Git on different operating systems including Windows, Mac OS, and Linux and how to ensure that you&amp;#39;re environment is properly setup to start using Git. Then we walk through the installation on Mac OS and finally we&amp;#39;ll cover how to invoke Git from the command line and set some basic configuration options like telling Git who we are.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Know where to go to download the latest verion of Git&lt;/li&gt;
	&lt;li&gt;Be able to install Git on your operating system of choice.&lt;/li&gt;
	&lt;li&gt;Be able to verify that Git is indeed running in your environment.&lt;/li&gt;
	&lt;li&gt;Do some Git configuration with &lt;code&gt;`git config`, ~/.gitconfig&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://git-scm.com&quot;&gt;Download Git&lt;/a&gt; &lt;a href=&quot;videos/install-git&quot;&gt;Drupal Ladder: Install Git lesson&lt;/a&gt; (installs Git on Windows instead of Mac)&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2VpRYOyUjPyPE5uolkHjDigD8eZXWR3WxLIDMM4YIbs.jpg.jpg</video:thumbnail_loc><video:duration>648</video:duration><video:publication_date>2013-03-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-help-git</loc><lastmod>2023-12-21T22:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Help with Git</video:title><video:description>This tutorial takes a look at the various resources that are available for getting help with Git including the built-in manual/help pages and examples as well as other documentation that we&#039;ve found to be useful while learning how to use Git.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iDkQHY7tCtuInljXka-SnN2DscOa_fvUTGGPZYAVj04.jpg.jpg</video:thumbnail_loc><video:duration>527</video:duration><video:publication_date>2013-03-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/moving-through-git-history</loc><lastmod>2023-12-22T01:04Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Moving Through Git History</video:title><video:description>There are a lot of different ways to reference a specific commit in Git. This lesson takes a look at the various ways in which you can navigate through the history of a project by cloning the Drupal core repository from Drupal.org and looking at its contents. We&#039;ll learn about pointers to each commit, or what Git refers to as a Treeish, and how we can use those as parameters to different commands.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-i_1Bh-Vu_0pNSkegglDVM23FooNBBmU5JRtZrUb6rU.jpg.jpg</video:thumbnail_loc><video:duration>512</video:duration><video:publication_date>2013-03-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/reviewing-changes-and-using-git-diff</loc><lastmod>2023-12-21T23:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Reviewing Changes and Using Git Diff</video:title><video:description>This lesson covers the `git diff` command and how to use the command along with a Git Treeish reference to view the differences in a project or a single file between two commits. Or between the current HEAD and the working tree. We&#039;ll also take a look at integrating Git with some external diff tools that make reading the output from the `git diff` command a bit easier.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7JGEmA4tdkZRhgj-l4rIPlTKut9Qc3yAwpnUeRq-doE.jpg.jpg</video:thumbnail_loc><video:duration>372</video:duration><video:publication_date>2013-03-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/git-crash-course</loc><lastmod>2023-12-22T01:38Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Git Crash Course</video:title><video:description>In this lesson we&#039;re going to quickly jump into the basics of a whole bunch of different git commands and get our repository created, add a couple files, and then view our log.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/a7tZBDq4aSezN0AYUdYDxzRechotfpGCd9Cjo2bFu8U.jpg.jpg</video:thumbnail_loc><video:duration>716</video:duration><video:publication_date>2013-03-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-coding-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Coding for Views</video:title><video:description>&lt;p&gt;There&amp;#39;s a reason views is the most popular module on drupal.org and it&amp;#39;s pointy-clickly user interface is only a part of that. In this series we cover the ins and outs of writing modules that implement the &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt; API. Once you&amp;rsquo;ve realized the power of creating complex lists of nodes, users and other content via the views UI the next logical desire is to allow people to do that with the content provided by your custom module as well. This series will take an in-depth look at exposing your own database tables to the Views module so that users can use them as a place to pull content from including the fields themselves and meta-data about how they can be used to create relationships to other content on your site.&lt;/p&gt;
&lt;p&gt;After getting the basics out of the way we&amp;rsquo;ll also take a look at writing our own custom field handlers to expose our module&amp;rsquo;s data to views so that it can be sorted, filtered, and queried in new ways. We&amp;rsquo;ll also look at implementing views plugins to do things like add custom access control options to views and to add new output styles.&lt;/p&gt;
&lt;p&gt;Once you understand a bit more about how views works under the hood and how easy it is to tie in to that system you&amp;rsquo;ll be reimaging your solutions for all sorts of different problems.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/l7fXSs7ONsfsgeSCA5UFnwVim7xxH_PZWmOrlS-g5io.jpg.jpg</video:thumbnail_loc><video:duration>165</video:duration><video:publication_date>2012-09-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exposing-more-fields-and-adding-relationships</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exposing More Fields and Adding Relationships</video:title><video:description>In this video Joe describes the process of adding the rest of the fields from the databasics module to our implementation of hook_views_data() including how to differentiate between different data types like strings of text and numeric values and how this changes the views module&#039;s behavior. Then Joe talks about how to tell views about various tables that can be used in relationship to the databasics table via foreign keys like the node ID.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;h3&gt;Modules Needed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/lullabot/databasics&quot;&gt;Databasics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/O7valuKvFSEOJWJKD3-uqqjryZtmjnDSpdQ4p13_HB8.jpg.jpg</video:thumbnail_loc><video:duration>1473</video:duration><video:publication_date>2012-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/building-our-content-types</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Building our Content Types</video:title><video:description>In this chapter Karen Stevenson explains all the pieces that make up an Organic Group content type.  Show explains how organic groups adds the necessary fields to make this happen while demonstrating the necessary settings when building your content types. She also covers the content type used for group content as it is different than the group itself. To start the video off she goes over install the necessary modules for the first part of this series.

&lt;em&gt;Note: There have been significant changes to Organic Groups since this lesson was made. Though we would like to revisit this series to update it, we have no current schedule to complete that. The best place to figure out what has changed and why, would be the Organic Groups issue queue on Drupal.org (http://drupal.org/project/issues/search/og).&lt;/em&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vTGKSUR67e9LGEojWtzfHmWNHuQgWzc_iMMYZNHYzZg.jpg.jpg</video:thumbnail_loc><video:duration>559</video:duration><video:publication_date>2012-06-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-version-control</loc><lastmod>2023-12-21T23:01Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is Version Control?</video:title><video:description>In this tutorial we&#039;ll explain some of the basic tenets of version control systems. We&#039;ll define Git terminology like repositories, branches, checkouts, and commits, and provide you with a baseline set of concepts that we can build on throughout the course.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/P1xVXCzqZw3DW4_qIGpdC5ssDzXGhfm8HsFWZI25I4Q.jpg.jpg</video:thumbnail_loc><video:duration>277</video:duration><video:publication_date>2013-03-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/advanced-git-add-and-gitignore</loc><lastmod>2023-12-21T23:44Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Advanced Git Add and .gitignore</video:title><video:description>This tutorial dives deeper into the different things you can do with the `git add` command. Things like adding multiple files at a time using wildcards and staging and adding only some of the changes you&#039;ve made in a file and not all of them. We&#039;ll also take a look at using a _.gitignore_ file to exclude specific files or even patterns of files from the repository all together.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4kn3s561h0pH-8X2Q6I00iqPE8YKkZ_FqyXDJLpYW-Y.jpg.jpg</video:thumbnail_loc><video:duration>1278</video:duration><video:publication_date>2013-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/quicker-git-commits-and-modifying-previous-commits</loc><lastmod>2023-12-22T00:25Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Quicker Git Commits and Modifying Previous Commits</video:title><video:description>In this tutorial, we revisit the `git commit` command and take a look at some of the additional things you can do with it, like amending a previous commit, and creating commits using shorthand methods. Then we&#039;ll look at using the interactive rebase command which will allow us to reword commit message and do other things like squash two commits into a single commit when performing a rebase.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/l1uQqMd6vtN3kHzLBu60hiMR9B8Kh17Q3bwL2eESMuY.jpg.jpg</video:thumbnail_loc><video:duration>818</video:duration><video:publication_date>2013-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/removing-moving-and-renaming-files-git</loc><lastmod>2023-12-22T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Removing, Moving and Renaming Files with Git</video:title><video:description>This tutorial takes a look at removing files from your version control system. It&#039;s generally not enough to just delete the file in the file system you also need to tell Git that it&#039;s been removed and make a commit with that information.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/47fq5BGreKIRi7XFMyvI53rwpmWg5_5aIrBFQOao5SM.jpg.jpg</video:thumbnail_loc><video:duration>390</video:duration><video:publication_date>2013-03-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/resolving-conflicts-git</loc><lastmod>2023-12-22T00:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Resolving Conflicts in Git</video:title><video:description>In the real world when you&#039;re working on a project with a team of people your code never stands still. It&#039;s not at all uncommon to find yourself in a scenario where `git merge` or `git rebase` simply can&#039;t successfully meld two branches without human interaction. For example when both branches contain a commit that modifies the same line of code in a file in different ways. This lesson will take a look at how you can go about resolving these merge conflicts and some of the tools available to help make this process easier by first creating an intentional conflict between two branches and then showing how to resolve it.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4VugcLxIB6ZnfEFBWihpz0eby27hoFXonRCzXxxuE3A.jpg.jpg</video:thumbnail_loc><video:duration>812</video:duration><video:publication_date>2013-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/reset-and-clean-git-commands</loc><lastmod>2023-12-22T01:00Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Reset and Clean Git Commands</video:title><video:description>In this tutorial, we&#039;ll take a look at ways that you can remove changes that you&#039;ve made to the files in your working tree, how to remove something from the index that you&#039;ve added but later decided that you&#039;re not ready to commit, and some other basic working tree and index house cleaning commands.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wz0r5ZSUrOK6CxLNaA70OmRHaLCAU3ECkmJ1NRC4Mm8.jpg.jpg</video:thumbnail_loc><video:duration>687</video:duration><video:publication_date>2013-04-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/working-remote-git-repositories</loc><lastmod>2023-12-22T01:08Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with Remote Git Repositories</video:title><video:description>This lesson is all about making two git repositories talk to one another. So far everything we&#039;ve done has been on your desktop. But we&#039;re going to need a way to share changes with other people on our team, or deploy them to our production site. To do that we&#039;re going to learn about the git clone, push, pull and fetch commands.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-hoNVX-BWgnKlidQOfrD2uhp92MhvE8jc3jZ1f7cd5U.jpg.jpg</video:thumbnail_loc><video:duration>1157</video:duration><video:publication_date>2013-04-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/git-stash-command</loc><lastmod>2023-12-22T01:10Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Git Stash Command</video:title><video:description>This tutorial takes a look at using the `git stash` commands to temporarily preserve your work when you need to incorporate other changes but aren&#039;t quite ready to fully commit them.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/okBYPdf6Te1EAKi5mJ6LPXafpZ_fNy4Wza3ydh4koMA.jpg.jpg</video:thumbnail_loc><video:duration>225</video:duration><video:publication_date>2013-04-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/reverting-git-commits</loc><lastmod>2023-12-22T01:01Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Reverting Git Commits</video:title><video:description>It happens to the best of us, sometimes we commit something that just simply wasn&#039;t ready, or maybe we&#039;re having a bad day and introduced a bug to the code. I&#039;ve even seen scenarios where you&#039;ve created a temporary workaround in your codebase and now you&#039;re ready to remove that workaround and put in a real fix. This lesson looks at using the `git revert` command to deal with these scenarios by creating new commits that reverse the changes of a previous commit.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/irnSr9zKh_zXr4q76ZbpZOb2K_dJDhBs9tS79910gHY.jpg.jpg</video:thumbnail_loc><video:duration>413</video:duration><video:publication_date>2013-04-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-git-bisect</loc><lastmod>2023-12-22T01:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Git Bisect</video:title><video:description>In this tutorial we&#039;re going to use the `git bisect` command to do a little bit of debugging. We&#039;re all human, and sometimes bugs get introduced our software and we may not notice them for a while. Especially on fast moving projects. A good example of this would be a performance regression, and now you want to figure out what commit made everything run slower all of a sudden. Bisect allows us to do a binary search between a known good commit and a known bad commit and quickly narrow down which commit introduced the problem. From there it&#039;s much easier to figure out what exactly the problem is and fix it.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/c1F1nORUG54XO9IWdS0cWe83HaZsvxyMojWbRft67qU.jpg.jpg</video:thumbnail_loc><video:duration>523</video:duration><video:publication_date>2013-04-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/wowza-and-leap-second</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/working-git-githubcom</loc><lastmod>2023-12-22T01:21Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with Git on Github.com</video:title><video:description>GitHub is a great, free service that lets you share your Git repositories online with others. In this tutorial, Blake gives a quick tour of our &lt;a href=&quot;https://github.com/Lullabot/git-series-example&quot;&gt;Git Series Example GitHub project&lt;/a&gt;, and then explains how pull requests work, letting you merge changes into the repository through the UI. Feel free to try it out by adding jokes to our new jokes.txt file!
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cWIOcMotblzrclZciU3XI-nckUil_baTNTuB2FGyIUs.jpg.jpg</video:thumbnail_loc><video:duration>225</video:duration><video:publication_date>2013-04-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/applying-and-creating-patches-git</loc><lastmod>2023-12-22T01:16Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Applying and Creating Patches with Git</video:title><video:description>This tutorial takes a look at applying a patch from Drupal.org to your local copy of a module or Drupal core using Git. Afterwards we&#039;ll look at how you can create your own patches, using &lt;code&gt;git diff&lt;/code&gt; and &lt;code&gt;git format-patch&lt;/code&gt;, in order to contribute code back to Drupal or any of the module&#039;s on Drupal.org. You can see a full Git workflow using GitHub in the lesson &lt;a href=&quot;https://drupalize.me/tutorial/git-workflow-putting-it-all-together&quot;&gt;Git Workflow: Putting It All Together&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://www.lullabot.com/articles/git-best-practices-upgrading-patch-process&quot;&gt;Git Best Practices: Upgrading the Patch Process article&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/docs/develop/git/using-git-to-contribute-to-drupal/applying-a-patch-in-a-feature-branch&quot;&gt;Applying a patch in a feature branch&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_dSwsf6VlabFs9X_stgqzq5pAwah61MiTFC7TPbNztc.jpg.jpg</video:thumbnail_loc><video:duration>376</video:duration><video:publication_date>2013-04-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/git-workflow-putting-it-all-together</loc><lastmod>2023-12-22T01:25Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Git Workflow: Putting It All Together</video:title><video:description>In this tutorial, Joe walks you through a typical Git workflow. We start with cloning a repository, creating a branch, and getting some work done. Then we go ahead and commit our work, merge it into the master branch, and push our changes back up to the remote repository.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gEdeHiDQ9LJg4KC5POHbKAl3C6cPRc58T4QrjsVvCVw.jpg.jpg</video:thumbnail_loc><video:duration>476</video:duration><video:publication_date>2013-04-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/git-aliases-and-other-fun-configuration</loc><lastmod>2023-12-22T01:21Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Git Aliases and Other Fun Configuration</video:title><video:description>We&#039;ve now learned about all sorts of commands in git and the flags that accompany those commands. We&#039;ve also seen that some of those commands can get to be a bit long and are used quite often. In this lesson we&#039;re going to take a look at how to create command aliases in our _.gitconfig_ file so that we can have a shorthand for accessing some of these more esoteric commands. We&#039;ll also take a quick tour of Joe&#039;s personal _.gitconfig_ file that he uses in his day-to-day work.
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wKbcW2H3uwEA1ZdCXOdyapixWx-M8q8__2_mPlCGEYI.jpg.jpg</video:thumbnail_loc><video:duration>609</video:duration><video:publication_date>2013-04-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/working-entities-drupal-7</loc><lastmod>2024-07-19T23:26Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-drupal-entities</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Drupal Entities?</video:title><video:description>&lt;p&gt;In this lesson Joe will explain what an entity is and provide a little bit of history about how they came into being. We&amp;rsquo;ll also learn about some of the differences between custom entities and nodes (which happen to be a type of entity) and when, and why you might want to choose to write your own custom entities instead of using the node system or a more traditional datastore.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ShJ5aLxd2vhdMetDq7Xz7i3IUH0i7Ggn8C-DhXYExzQ.jpg.jpg</video:thumbnail_loc><video:duration>902</video:duration><video:publication_date>2013-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-working-entities-drupal-7-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Working with Entities in Drupal 7 Series</video:title><video:description>&lt;p&gt;Entities were introduced in Drupal 7 as a way of taking the things that people loved about nodes + CCK in Drupal 6 and applying them to other types of data like users, comments, and taxonomy terms. The Entity API in Drupal 7 provides a set of common functions and classes to make it easier for developers to create their own custom entity types or to work with existing ones in a generic way. The API in Drupal core however is still missing some really useful tools and is supplemented by the &lt;a href=&quot;http://drupal.org/project/entity&quot;&gt;Entity module&lt;/a&gt; in Drupal contributed which we&amp;#39;ll make heavy use of throughout the series.&lt;/p&gt;
&lt;p&gt;In this series we&amp;#39;ll learn about the interplay between Entities, Entity Types, Bundles, and Fields and how to write custom code to deal with each of these things. The Entity API demo site files that we use in this series are all located in the &lt;a href=&quot;https://github.com/Lullabot/entity-api-demos&quot;&gt;Lullabot GitHub&lt;/a&gt;, as well as in zip files attached to the respective video pages, under the Downloads tab.&lt;/p&gt;
&lt;p&gt;This series covers:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;What entities are and how they fit into the Drupal ecosphere&lt;/li&gt;
	&lt;li&gt;EntityFieldQuery&lt;/li&gt;
	&lt;li&gt;Entity classes, what they do and how to override them&lt;/li&gt;
	&lt;li&gt;Providing an admin UI for adding/editing and deleting entities from Drupal&lt;/li&gt;
	&lt;li&gt;Making entities fieldable&lt;/li&gt;
	&lt;li&gt;View modes&lt;/li&gt;
	&lt;li&gt;Creating custom UI&amp;#39;s for dealing with entities&lt;/li&gt;
	&lt;li&gt;Describing entity properties to Drupal&lt;/li&gt;
	&lt;li&gt;Views integration for entities&lt;/li&gt;
	&lt;li&gt;Entity Metadata wrappers&lt;/li&gt;
	&lt;li&gt;Making entities revisionable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And much much more. This series assumes that you&amp;#39;re already familiar with the basic tenets of writing modules for Drupal and makes use of things like hook_menu() without spending time explaining them. If you&amp;#39;re not familiar with Drupal module development, you might want to brush up by watching our &lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Module Development for Drupal 7&lt;/a&gt; first.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/Lullabot/entity-api-demos&quot;&gt;Entity API Demo site files on GitHub&lt;/a&gt;
&lt;a href=&quot;http://drupal.org/project/entity&quot;&gt;Entity module at Drupal.org&lt;/a&gt; </video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kmp-EjFllLYg3HKPBnR1NofCof3E1qelCkka05DVJAw.jpg.jpg</video:thumbnail_loc><video:duration>232</video:duration><video:publication_date>2013-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/make-lists-entities-entity-field-query</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Make Lists of Entities with Entity Field Query</video:title><video:description>This lesson will explore the use of EntityFieldQuery to retrieve lists of entities from Drupal without directly querying the database which can be problematic in a system where the underlying schema can change depending on configuration settings in the user interface. Again focusing on writing code that will work with any entity in Drupal and isn&#039;t hard coded to your particular setup.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/1343708&quot;&gt;EntityFieldQuery documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DPxfMuDpUNH7cYmWcZ4HwXInHDZ1Jqe9F7PJ0YIf5KY.jpg.jpg</video:thumbnail_loc><video:duration>1046</video:duration><video:publication_date>2013-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/our-custom-drupal-entity-use-case</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Our Custom Drupal Entity Use Case</video:title><video:description>In the next set of lessons we&#039;re going to be writing to the code to create our own custom entity type. The goal is to create a video entity that stores embed codes for YouTube videos and allows us to display the videos on our site. In this scenario we don&#039;t want all the overhead that comes with using the node system, like comments for example, so instead we&#039;re going to write our own custom entity for storing the data. We&#039;re going to take a look at the completed entity type that we&#039;re attempting to build and just walk through all the various components. We&#039;ll take a look at creating/updating, and deleting a video via the UI, and also the views integration and fieldability of our custom video entities.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LstpaB0PrB6BoS11-9oHrDvh35122JhyAtyIUJHuGag.jpg.jpg</video:thumbnail_loc><video:duration>336</video:duration><video:publication_date>2013-04-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-entity-classes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Entity Classes</video:title><video:description>This lesson introduces students to Entity classes and illustrates what each of the main Entity classes does, followed by a more in depth look at the CRUD operations provided by the base entity class, and finally demonstrates overriding the default Entity class with our own custom Entity object to define a defaultUrl() for our entities and a new implementation of hook_menu where we can view an entity.

&lt;strong&gt;Note:&lt;/strong&gt; At the end of the this video code is added to hook_entity_info() that references a &lt;code&gt;VideoEntityUIController&lt;/code&gt; class, however, the definition of that class is in our sample code, but was not shown being added here. And it is necessary to follow along with the videos. If you&#039;re following along you&#039;ll want to add the following code to the bottom of your videoasset.module file. If you&#039;re curious about what it does it&#039;s explained in the last part of this video.

&lt;pre&gt;&lt;code&gt;
/**
 * Our custom controller for the admin ui.
 */
class VideoEntityUIController extends EntityDefaultUIController {}
&lt;/pre&gt;&lt;/code&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/Lullabot/entity-api-demos&quot;&gt;Entity API demos on GitHub&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2SrfYKCCtfp8TVRAdRlcSzEWdcL-4_TEczsTXZrQWEs.jpg.jpg</video:thumbnail_loc><video:duration>558</video:duration><video:publication_date>2013-04-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/provide-admin-ui-your-entity</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Provide an Admin UI for Your Entity </video:title><video:description>Update your hook_entity_info implementation to take advantage of the Admin UI provided by the Entity API and quickly provide users of your site access to all the Entity CRUD operations via the UI. The API gives us a really good head start but we still need to write some code in order to provide a useable form for administrators. The API doesn’t make any assumptions about things like validating input so we also need to take care of that ourselves.

This video adds a new permission that allows privileged users administer our new videoasset entities. If you&#039;re following along as a user other than user 1 you&#039;ll need to make sure you give yourself the proper permissions. In the video, I&#039;m logged in as the user with the ID of 1 so I&#039;m just granted the permissions automatically.

&lt;strong&gt;Note:&lt;/strong&gt; If you&#039;re following along with the videos in sequence there&#039;s an error that needs correcting. At the end of the previous video code was added to &lt;code&gt;videoentity_entity_info()&lt;/code&gt; that references a &lt;code&gt;VideoEntityUIController&lt;/code&gt; class, however, the definition of that class was not added. Which, will cause a PHP error because the class is missing.

In order to correct this error, you&#039;ll want to add the following code to the bottom of your videoentity.module file. This just ensures that the class is defined so that there are no errors. If you&#039;re curious about what it does it&#039;s explained in the last part of the previous video.

&lt;pre&gt;&lt;code&gt;
/**
 * Our custom controller for the admin ui.
 */
class VideoEntityUIController extends EntityDefaultUIController {}
&lt;/pre&gt;&lt;/code&gt;

In &lt;a href=&quot;https://drupalize.me/videos/customize-entity-ui-overriding-ui-controller?p=1174&quot;&gt;a later tutorial in this series&lt;/a&gt;, we&#039;ll customize the form for our video entity by adding more code to this class.

&lt;strong&gt;Note:&lt;/strong&gt; At 14:10 on line 36 this line is added:

&lt;pre&gt;&lt;code&gt;&#039;#value&#039; =&gt; isset($VideoAsset-&gt;id) ? t(&#039;Update video asset&#039;) : t(&#039;Save video 
asset&#039;),&lt;/code&gt;&lt;/pre&gt;

It should be:

&lt;pre&gt;&lt;code&gt;&#039;#value&#039; =&gt; isset($video-&gt;id) ? t(&#039;Update video asset&#039;) : t(&#039;Save video 
asset&#039;),&lt;/code&gt;&lt;/pre&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8YRXslJdZ-v5pqwH0UclXj4gogBjtINtNhzusfqJtho.jpg.jpg</video:thumbnail_loc><video:duration>1243</video:duration><video:publication_date>2013-05-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/override-entity-controller-better-rendering-and-saving</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Override the Entity Controller for Better Rendering and Saving</video:title><video:description>So far we’ve seen that you can use entity_load and entity_view to display your entity. But what if you want more control over how your content gets rendered? In this lesson we’ll take a look at overriding the buildContent() method of our entity controller to spruce up the output a bit. We&#039;ll also overrid the save() method of the controller in order to populate the created_at and updated_at fields automatically when saving a video entity.

&lt;strong&gt;Note:&lt;/strong&gt; In order to improve upon the security of the code in this lesson you&#039;ll want to make sure you&#039;re escaping all user input properly. The following code:

&lt;pre&gt;&lt;code&gt;
$build[&amp;#x27;embedcode&amp;#x27;] = array(
      &amp;#x27;#type&amp;#x27; =&amp;#x3E; &amp;#x27;markup&amp;#x27;,
      &amp;#x27;#markup&amp;#x27; =&amp;#x3E; &amp;#x27;&amp;#x3C;iframe width=&amp;#x22;560&amp;#x22; height=&amp;#x22;315&amp;#x22; src=&amp;#x22;http://www.youtube.com/embed/&amp;#x27;. $entity-&amp;#x3E;embedcode . &amp;#x27;&amp;#x22; frameborder=&amp;#x22;0&amp;#x22; allowfullscreen&amp;#x3E;&amp;#x3C;/iframe&amp;#x3E;&amp;#x27;,
    );
&lt;/code&gt;&lt;/pre&gt;

Should be updated to use the &lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21common.inc/function/check_url/7&quot;&gt;check_url()&lt;/a&gt; function when outputting &lt;code&gt;$entity-&gt;embedcode&lt;/code&gt; to ensure that user entered content is safe for use in the context of a URL.

&lt;pre&gt;&lt;code&gt;
$build[&amp;#x27;embedcode&amp;#x27;] = array(
      &amp;#x27;#type&amp;#x27; =&amp;#x3E; &amp;#x27;markup&amp;#x27;,
      &amp;#x27;#markup&amp;#x27; =&amp;#x3E; &amp;#x27;&amp;#x3C;iframe width=&amp;#x22;560&amp;#x22; height=&amp;#x22;315&amp;#x22; src=&amp;#x22;http://www.youtube.com/embed/&amp;#x27;. check_url($entity-&amp;#x3E;embedcode) . &amp;#x27;&amp;#x22; frameborder=&amp;#x22;0&amp;#x22; allowfullscreen&amp;#x3E;&amp;#x3C;/iframe&amp;#x3E;&amp;#x27;,
    );
&lt;/code&gt;&lt;/pre&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZSr6z2mZVl2IQ66Jcgyul6ppW3HPSW01jmnyo9nde0Y.jpg.jpg</video:thumbnail_loc><video:duration>656</video:duration><video:publication_date>2013-05-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/make-your-entity-fieldable-bundles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Make Your Entity Fieldable with Bundles</video:title><video:description>Bundles are an implementation of an entity type to which fields can be attached. In this lesson we’ll take a look at configuring a single bundle type for our entities in order to allow us to make them fieldable by hardcoding the bundle information into hook_entity_info(). This is the most basic implementation of bundles. Then we’ll look at adding the ability to attach fields to our newly created bundle.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WtyrNBhthC9ow6cN8eT9xgWpQCrKu6mBGtqyk7_KIzU.jpg.jpg</video:thumbnail_loc><video:duration>279</video:duration><video:publication_date>2013-05-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-and-remove-regions-omega</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add and Remove Regions in Omega</video:title><video:description>Because Omega doesn&#039;t make assumptions about your layout, it comes with lots of options and plenty of regions to work with. This is great but also has some down falls espcially if you are converting an exisiting theme that just doesn&#039;t need as many regions and zones. Along with removing regions you may need to add some as well.  In this lesson we will demonstrate:
&lt;ul&gt;
  &lt;li&gt;Adding a region&lt;/li&gt;
  &lt;li&gt;Removing regions&lt;/li&gt;
  &lt;li&gt;Placing content into these regions&lt;/li&gt;
  &lt;li&gt;Cleaning up the .info file&lt;/li&gt;
&lt;/ul&gt;
Once this is complete, we now have our converted theme setup just as it was before when it comes to the grid system and some blocks in place to make sure the layout is looking good.

NOTE: Kyle initially sets a position, but not the weight, of the footer_bottom region in this video, and then you&#039;ll see that he catches the mistake, and fixes it to have a weight of 3.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0q538zDErObN0GFf8neoE5C__84VzyMORgjya9OPfNk.jpg.jpg</video:thumbnail_loc><video:duration>525</video:duration><video:publication_date>2012-11-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-contextual-menu-links-and-using-menu-autoloaders</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Contextual Menu Links and Using Menu Autoloaders</video:title><video:description>This chapter walks through the process of adding links to the contextual drop-down widgets new in Drupal 7. It also shows how using menu autoloaders can help simplify the code that you write in your page callback function since you won&#039;t have to do extra checking on the data.

As a note, if you are wondering why we started our function with an underscore (_), naming functions with an underscore in front of the name is a common convention in Drupal that sort of implies that &quot;this function is for internal use by this module only&quot; and shouldn&#039;t be called by itself. It&#039;s also a nice way to ensure that your internal functions are not colliding with the namespace of a hook or another module. Here&#039;s a good  &lt;a href=&quot;blog/201301/naming-things-hard&quot;&gt;blog post about naming things&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xzlAa3DZYjKpdeY9L__JtMZmP3wMS72GaauRfVa5_YA.jpg.jpg</video:thumbnail_loc><video:duration>870</video:duration><video:publication_date>2011-12-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-custom-code-feature</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Custom Code to a Feature</video:title><video:description>Features is a module which generates modules for us. You can then extend that module just as you would any other Drupal module. In this video we&#039;ll add some additional code to our feature to make it more complete for our needs, outside of the realm of what Features itself can provide.

The features module (and the drush command) are pretty smart about not overwriting custom changes, and your chances of overwriting your custom code are pretty slim. When features exports a module it creates a .module file with only one line of code in it. Which is an include for another file: mymodule.features.inc. Features then puts all of the automatically generated code into this included file. When you regenerate or update a feature it just uses the existing mymodule.module file which maintains any code that you wrote, and then regenerates the mymodule.features.inc and associated files.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UrcaaEgX-bKGoT8gjR7vl1YYkJVIiKXRRuA349bF2Ww.jpg.jpg</video:thumbnail_loc><video:duration>796</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-javascript-through-theme</loc><lastmod>2025-05-16T21:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Adding JavaScript Through a Theme</video:title><video:description>This lesson shows the steps and code to add on the Drupal side in order to load JavaScript scripts to you site. One thing to note is that the HTML5 placeholder attribute makes this plugin invalid markup.

NOTE:
There is a minor change between Drupal 6 and Drupal 7, where you should use &lt;code&gt;function($)&lt;/code&gt; to wrap your code. For Drupal 7 you can use:

&lt;code&gt;
(function($) {
$(document).ready(function() {
	$(&#039;#search input.form-text&#039;).autofill({
		value: Drupal.t(&#039;Search...&#039;),
	});
});
}(jQuery));
&lt;/code&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BFkg9_-KOrkCtefyr82q8eFoL5JBqQLQrTtxir0lvY0.jpg.jpg</video:thumbnail_loc><video:duration>916</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/entity-view-modes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Entity View Modes</video:title><video:description>Probably the most common use case for view modes is teaser nodes. Or, a node being rendered in the teaser view mode. View modes allow entities to be displayed different depending on context, and also allow other modules like Field API that participate in the entity rendering process to adjust their behavior depending on the requested view mode.

In this lesson we’re going to take a look at an ‘authenticated’ view mode that we can use to adjust the display for any authenticated users. Then we’ll update Entity Controller class and make use of this new view mode in our ::view() method.

NOTE: in the video Joe forgot to change the &#039;member&#039; label to &quot;Member&quot; and then later in the video when we view it in the UI it is corrected. The sample code included with this video has the correct label.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WyzrhI8Urq8nUB4miNPH3K6EEUOz9ICEmlZP1W8p8Zk.jpg.jpg</video:thumbnail_loc><video:duration>626</video:duration><video:publication_date>2013-05-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customize-entity-ui-overriding-ui-controller</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customize the Entity UI by Overriding the UI Controller</video:title><video:description>In this lesson we&#039;re going to take a more in-depth look at the UI controller we used earlier to create our administrative UI for the entity. We&#039;ll walk through how the controller adds menu paths and the like, without us needing to do any extra work, and then clean up our form-builder functions by overriding the UI controller&#039;s method, so that we can gain control of the name of the function that&#039;s called.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/W-tklGoKb8o3MrtUmHBA_WSOrfhaW9YFRaoZG1Rqneg.jpg.jpg</video:thumbnail_loc><video:duration>383</video:duration><video:publication_date>2013-05-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/junebug-brings-interactive-transcripts</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/expose-your-entity-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Expose Your Entity to Views</video:title><video:description>This lesson takes a look at exposing the data in our entities to views. Lucky for us the entity API handles a lot of this for us. We’ll take a look at what we get for free, using the EntityDefaultViewsController class provided by Entity API module. We&#039;ll also discuss ways that we can customize this controller, which we&#039;ll tackle in a later lesson.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YyXMXInGSJgNaRuHrDQymItfdGuhoZ6XMrfKFOD9Yso.jpg.jpg</video:thumbnail_loc><video:duration>232</video:duration><video:publication_date>2013-05-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-module-development-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Module Development for Drupal 7</video:title><video:description>&lt;p&gt;&amp;quot;There&amp;#39;s a module for that.&amp;quot;&lt;/p&gt;
&lt;p&gt;You&amp;#39;ve probably heard this before. Many times you can find a module that provides the functionality you need &amp;mdash; or at least pretty close to what you need. Drupal&amp;#39;s contributed module projects number in the thousands, but what if there isn&amp;#39;t a module for your use case? You just might need to &lt;em&gt;build&lt;/em&gt; a module for that.&lt;/p&gt;
&lt;p&gt;In this series, you will learn about the tools and resources available to Drupal developers, including where to find documentation and what APIs are available to you, both on &lt;a href=&quot;http://drupal.org&quot; target=&quot;_blank&quot;&gt;drupal.org&lt;/a&gt; and &lt;a href=&quot;http://api.drupal.org&quot; target=&quot;_blank&quot;&gt;api.drupal.org&lt;/a&gt;. We&amp;#39;ll take a look at the Devel module and learn how to use it to inspect the variables, objects, arrays and other things at work under the hood of Drupal 7.&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll build several different modules that explore and interact with Drupal&amp;#39;s various systems and API, including:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Form API&lt;/li&gt;
	&lt;li&gt;Menu system&lt;/li&gt;
	&lt;li&gt;Hooks&lt;/li&gt;
	&lt;li&gt;Render API&lt;/li&gt;
	&lt;li&gt;Theme system&lt;/li&gt;
	&lt;li&gt;Database API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Over the course of this series you&amp;#39;ll be able to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Describe the anatomy of a module&lt;/li&gt;
	&lt;li&gt;Implement common hooks&lt;/li&gt;
	&lt;li&gt;Write more secure code&lt;/li&gt;
	&lt;li&gt;Interact with Drupal&amp;#39;s menu system&lt;/li&gt;
	&lt;li&gt;Create and alter forms&lt;/li&gt;
	&lt;li&gt;Peform CRUD operations on a database&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This series starts with the basics and moves you step-by-step to more advanced concepts. Even if you are quite comfortable with PHP but are struggling to understand how to appropriately interact with Drupal 7&amp;#39;s API, the lessons in this series can help you develop &amp;quot;The Drupal Way.&amp;quot;&lt;/p&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/devel&quot;&gt;Devel module at Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ashC6Fncq20-3V-9GXYnSTS8oLoeipLtzAsDeSeYIg0.jpg.jpg</video:thumbnail_loc><video:duration>318</video:duration><video:publication_date>2011-11-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/better-entity-property-information</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Better Entity Property Information</video:title><video:description>In order to make the most of the entity APIs integration with other modules, such as Views, we need to describe the properties of our entity in more detail. The API can infer some information about a property based on our schema but we need to tell it that the integer stored in the updated_at column is actually a timestamp. We will do this by implementing &lt;code&gt;hook_entity_property_info()&lt;/code&gt; and describing each of our entities properties. With these definitions in place you will be able to use the formatters in Views much like you would for individual fields on content types provided by core.

Note: Before you implement &lt;code&gt;hook_entity_property_info()&lt;/code&gt; the API makes an educated guess about each property but once you&#039;ve defined a single property,  the API expects you to define all of the properties for your entity. Use the &lt;code&gt;.install&lt;/code&gt; file in your module to get a complete list of the properties you need to define with &lt;code&gt;hook_property_entity_info&lt;/code&gt;. You can also define additional properties that aren&#039;t mapped to fields in the database (these can be used for static properties).

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/1021466&quot;&gt;Entity Property Information&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4kckDWpqtPJBeQxJMrA-XuwTQKppMqpAZ6Dq1vYTnPU.jpg.jpg</video:thumbnail_loc><video:duration>833</video:duration><video:publication_date>2013-05-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-entity-metadata-wrappers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Entity Metadata Wrappers</video:title><video:description>If you&#039;ve done any module development, you&#039;re probably familiar with hook_node_view and Drupal&#039;s arrays of doom. In this lesson we&#039;ll show you how to get easier access to the same information using entity metadata wrappers. We will use the entity_metadata_wrapper function to retrieve a new &lt;code&gt;EntityMetaDataWrapper&lt;/code&gt; object that provides an interface for easily accessing an entities property and field values. We&#039;ll use the &lt;code&gt;getPropertyInfo&lt;/code&gt; method to expose information about individual properties, and the &lt;code&gt;getIterator&lt;/code&gt; method to access fields that contain multiple values, such as tags. You&#039;ll see that by using meta data wrappers you can also access properties on referenced entities, such as the email address of the author of a node, without having to load that information independently.

Metadata wrappers also provide a consistent way to access properties common to all entities. For example, every entity in Drupal has a unique ID property or a human readable label, but these properties often have different names. User name vs. node title. Metadata wrappers allow you to access this information in a consistent way.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/1021556&quot;&gt;Entity metadata wrappers&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ez_0WzdU0e3p-5LEE_dSRkNkdrgJCpcec8U3qecOjeU.jpg.jpg</video:thumbnail_loc><video:duration>983</video:duration><video:publication_date>2013-05-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/entity-revisions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Entity Revisions</video:title><video:description>Revisions are an important concept in a content management system. Keeping track of all the edits that have been made to a particular entity over the course of its lifetime. A paper trail or sorts. This lesson takes a look at what is required in order to make our Entities support revisions.

If you&#039;ve worked with Drupal&#039;s node system and enabled revisions then you&#039;ve seen Drupal&#039;s basic revision handling in action. Every time you save a node, it creates a new version of that node. You can roll back to previous versions and keep track of how a piece of content has changed over time. Entity API also supports the concept of revisions and in this lesson we&#039;re going to take a look at adding revision support for our video entities.

In order to take advantage of this feature, we&#039;ll need to modify our database schema to accommodate storing multiple versions of the same entity. We&#039;ll move all fields that we want to make &quot;revisionable&quot; into a separate table and set up a new unique version ID field so that we can keep track of revisions. 

Then we will update our &lt;code&gt;hook_entity_info&lt;/code&gt; implementation to tell the API that we want to use the revision system and make some changes to the code in our &lt;code&gt;VideoEntityController&lt;/code&gt; so that when an entity is updated we save a revision instead of overwriting the current data.

Finally we&#039;ll need to write a simple UI for viewing older versions of our video entity because the Entity API does not provide us with this code by default.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-LerepVTv6E4R5dIV2S9V2vWZmdY_Py7ATYOnjljhpY.jpg.jpg</video:thumbnail_loc><video:duration>986</video:duration><video:publication_date>2013-05-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-and-using-dreditor</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing and Using Dreditor </video:title><video:description>&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Support of Dreditor has been nominal for a while. It&#039;s still the preferred tool for enhancing Drupal&#039;s issue queue, but keeping track of what the &quot;official&quot; version is can be tricky. For now, we recommend https://dreditor.github.io/. There&#039;s also been work happening to incorporate many of Dreditor&#039;s features right into Drupal.org itself. See https://www.drupal.org/project/drupalorg/issues/1673278&lt;/p&gt;

&lt;p&gt;Dreditor is a great community tool that assists with things like patch reviews, and generally interacting with the Drupal.org issue queue. Dreditor is not a Drupal module, but is a plugin script you use in your browser. In this lesson, Joe walks through how to get Dreditor installed (on Chrome and Firefox), and then shows you how to use it to make your work in the issue queues more efficient.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/dreditor&quot;&gt;Dreditor project&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/blog/201505/installing-and-configuring-dreditor&quot;&gt;Written Dreditor tutorial for this video&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/h1TmHje-MtSLwKYHynGCZ2tD6ECtCL8-V4wcxsw8xw4.jpg.jpg</video:thumbnail_loc><video:duration>1003</video:duration><video:publication_date>2013-05-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/join-us-drupal-global-training-day-june-22</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/function-name-suggestions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Function Name Suggestions</video:title><video:description>In this video we cover a new Drupal 7 feature which lets us create suggestions for theme functions, in addition to suggestions for templates. We&#039;ll use this to modify the tags displaying on a node in our site.

Notes:
In the example: &lt;code&gt;$item[&#039;#options][&#039;attributes&#039;] += $variables[&#039;item_attributes_array&#039;][$delta];&lt;/code&gt; += is a shortcut for array_merge. So it is ensuring the contents of $variables[&#039;item_attributes_array&#039;][$delta] are included in $item[&#039;#options][&#039;attributes&#039;] so that any class, rdf info or other html attributes are appropriate applied to the tag links. It&#039;s possible for any number of modules to set HTML attributes on the tags field in the theme we need to make sure that they get printed out appropriately.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PGkDmfM0Lv7lB8Ah1J_udDz6WqqEEugJP52S5mFBE_I.jpg.jpg</video:thumbnail_loc><video:duration>1023</video:duration><video:publication_date>2011-11-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-forms-theme-layer</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering Forms from the Theme Layer</video:title><video:description>This chapter gives an introduction to how you work with Drupal&#039;s renderable, form arrays by adding an image button to the search form. It also walks through the process of adding the necessary classes to a form element so that the image button is properly aligned. The &lt;a href=&quot;http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7&quot;&gt;Forms API reference&lt;/a&gt; document is a pretty essential reference document for creating and editing forms in Drupal.

Although we use the function dsm() in this video, this should probably be dpm() as that&#039;s the preferred function name. The functions dsm() and dpm() are identical.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ninesixtyrobots&quot;&gt;960 Robots&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_nxwMGkihoWaDVYfInZ4q3TaEWCYng-Qcz6coJE3ruM.jpg.jpg</video:thumbnail_loc><video:duration>801</video:duration><video:publication_date>2011-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-image-styles-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Image Styles with Views</video:title><video:description>You can use custom image sizes for automatic display in your Views!  

We already know that being able to set a standard for image display creates consistency and a better user experience.  It also makes it for easier site administration because you don’t need to cut all of you images before you upload them.  Drupal does all the work for you!!  Not only can we specify what the image will look like at the node-level, we can also specify what the image will look like in Views.

I am assuming that you already know how to create custom image style presets, and are familiar with the Views module.

For this tutorial, you need to make sure the Image module that comes with Drupal Core is enabled and that you have already downloaded and enabled the Views module along with its prerequisites.

We will use the example of a blog, where we add our scaled images to display in the listing.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C7Fk0Lm158x2pPDcLpUK7qlI4wxaYnUIINYemxH0oTc.jpg.jpg</video:thumbnail_loc><video:duration>345</video:duration><video:publication_date>2011-06-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-theme-developer-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using the Theme Developer Module</video:title><video:description>Walks through the process of enabling the theme developer module and showing the themer info, which is like Firebug for Drupal theming.  You can choose specific elements on the page to see what Drupal template files or theme functions were involved with outputting it to the screen. You can easily look at the candidate template names that are available, as well as see all of the variables that are available from that template file. A list of documented variables can be found within the node module&#039;s &lt;em&gt;node.tpl.php&lt;/em&gt; file, but sometimes there are undocumented variables that are coming from contributed modules or elsewhere.  It&#039;s a super handy tool to have available, but only enable it when you really need it since it can adversely affect the mark-up on your page and cause some wonky behavior.

Additional notes:
The Theme Developer module is on Drupal.org at http://drupal.org/project/devel_themer. Once you find a module on Drupal.org, you can see the &quot;machine name&quot; for the module in the URL (it is the same name as is used to for the module&#039;s .info file as well). That is the name that Drush uses. So, in this instance, Drush is looking for &quot;devel_themer&quot;.
&lt;code&gt;drush dl devel_themer&lt;/code&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

https://www.drupal.org/project/devel_themer</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9hfy00FJ0h7a99MLsU1T6q3U_FDd8R4d8EraeleZg4w.jpg.jpg</video:thumbnail_loc><video:duration>374</video:duration><video:publication_date>2011-10-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-dynamic-templates-specific-node-types</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Dynamic Templates for Specific Node Types</video:title><video:description>Shows how to create a theme template suggestion for a specific node type. In this chapter, we create a dynamic template for the article node type by copying the node.tpl.php into a node--article.tpl.php where the &#039;article&#039; is the machine-readable name for the article content type. We add some specific styling to the node author submission information as well as the date.  We also discuss how Drupal looks for the most specific template suggestion (i.e. the node id), then moves to more and more generalized template files like the content type, and then the node.tpl.php as the most general. The Drupal.org documentation page that we look at can be found at http://drupal.org/node/1089656.

Additional notes:
The &lt;code&gt;field_tags&lt;/code&gt; variable relates to the corresponding tags field on the article content type. For every field you have on your node the &lt;code&gt;$content&lt;/code&gt; variable will contain the rendered content of that node in a key that is the name of the field. So in this case &lt;code&gt;$content[&#039;field_tags&#039;]&lt;/code&gt; contains all of the tags applied to the node.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/1089656&quot;&gt;Drupal 7 Template (Theme Hook) Suggestions&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7xMTvPTZCJ6SbT-qWIaSlLR1_I0nfeymhNAwqRBp0oo.jpg.jpg</video:thumbnail_loc><video:duration>493</video:duration><video:publication_date>2011-10-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/attachments-and-caching-render-api</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Attachments and Caching with the Render API</video:title><video:description>&lt;p&gt;This chapter walks through how you can conditionally add either JavaScript or CSS to a content element as well as how to cache the content with Drupal&amp;#39;s caching system. Additional notes: The cache will clear the first time cron.php is run AFTER whatever time you&amp;#39;ve specified as the cache expiration date in your code. Which you could easily calculate to be 30 seconds in the future and then store that timestamp in the database. However, you would also need to make sure that cron was running frequently enough to clear the cache every 30 seconds.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/api/render-arrays/render-arrays-overview&quot;&gt;Render Arrays overview&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/svIsfmsLOlwG4QkOVQPkjg3c5Q2yZLfZnJZgueRlVmA.jpg.jpg</video:thumbnail_loc><video:duration>596</video:duration><video:publication_date>2011-12-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/displaying-day-colorbox</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Displaying Day in Colorbox</video:title><video:description>&lt;p&gt;In this video Karen will show you how to create a date pop-up on your calendar, using the &lt;a href=&quot;http://www.jacklmoore.com/colorbox&quot;&gt;ColorBox jQuery plugin&lt;/a&gt;. She shows how to integrate the plugin with Drupal with the &lt;a href=&quot;http://drupal.org/project/colorbox&quot;&gt;Colorbox module&lt;/a&gt; and then how to configure this with the &lt;a href=&quot;http://drupal.org/project/calendar&quot;&gt;Calendar module&lt;/a&gt;. Additional notes: The default display is to show the entity label. You will need to change this to show the complete entity otherwise you&amp;#39;ll get a popup with no information in it.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/calendar&quot;&gt;Calendar module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/colorbox&quot;&gt;Colorbox module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.jacklmoore.com/colorbox&quot;&gt;ColorBox jQuery plugin&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-fields-site-builders-series&quot;&gt;Intro to Fields for Site Builders&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/intro-views-drupal-7-series&quot;&gt;Intro to Views for Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;series/dates-drupal-7&quot;&gt;Dates with Drupal 7&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yNbcFnXNGbxG0xGrta_mbrVqeDQlxaRLR6Xv1Nl7C0w.jpg.jpg</video:thumbnail_loc><video:duration>449</video:duration><video:publication_date>2012-06-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/time-upgrade</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-context</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Context</video:title><video:description>In this lesson we cover a module that comes with Organic Groups called &quot;Organic Groups Context&quot;.  We cover why this module exists, how it helps build out your groups page, and the way it lends  a helping hand building out views to make your Organic Groups that much more powerful.

Note: You must first be a member of the organic group referenced by the node for filtering to work. Under relationships, we&#039;ve selected &quot;OG membership: OG membership&quot; from Node. So if you&#039;re not a member of the group referenced by the node, you will get zero results.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/og_extras&quot;&gt;OG Extras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups Context (part of Organic Groups)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nOvvGvCvimxFabM_hTLHgDlu_0e9A7V2JJIHc8jrlYU.jpg.jpg</video:thumbnail_loc><video:duration>647</video:duration><video:publication_date>2012-07-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-views-relationships</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring Views Relationships</video:title><video:description>&lt;p&gt;Views relationships let you add related information to your view. Here is how you can take advantage of various references, like node and user references, or file information. We&#039;ll be using relationships to add some contact details to our Job openings view.&lt;/p&gt;

&lt;p&gt;Additional notes:
If you don&#039;t see the field &quot;fields&quot; under the dropdown menu when creating a Relationship for the contact person&#039;s phone number it&#039;s possible you don&#039;t have the Views module enabled. (Or perhaps you&#039;ve missed enabling the Views UI module...make sure you have both). Then complete the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create and SAVE your view-relationship.&lt;/li&gt;
&lt;li&gt;Create a user reference where you want to reference the user.&lt;/li&gt;
&lt;li&gt;Now when you create the user reference it will have an option to reference your view.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This video series will continue the Job Board example from the &lt;a href=&quot;videos/introduction-fields-site-builders&quot;&gt;Fields for Site Builders series&lt;/a&gt; where we will discover ways to display all of the job postings, allow people to find the one they are looking for and easily apply for it.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/N4BI7oaTKlaeJQJPxInmJhesKj07mqnJac3X755An2w.jpg.jpg</video:thumbnail_loc><video:duration>550</video:duration><video:publication_date>2011-08-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/handy-command-line-shortcuts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Handy Command Line Shortcuts</video:title><video:description>This video covers some handy tips for reusing previously run commands and moving around through a line of text in the command line interface. These shortcuts make working on the command line much faster and nicer. Trying to remember all of these is not easy to do until you&amp;#39;ve used them for a while, so we also have a handy-dandy cheat sheet which you can find in the Downloads tab and refer to whenever you are in command line ninja mode. There are always new shortcuts you can learn. Another great shortcut &lt;code&gt;!$.&lt;/code&gt;. It&#039;s similar to &lt;code&gt;!!&lt;/code&gt;, but instead of repeating the last command, it repeats the last argument given. This sequence of commands shows how the shortcut could be used: &lt;code&gt;mkdir sites/default/files&lt;/code&gt; followed by &lt;code&gt;chmod a+w !$&lt;/code&gt;. That would be the same as typing out &lt;code&gt;chmod a+w sites/default/files&lt;/code&gt; 

Note: this video was originally released July 9, 2010 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

&lt;strong&gt;Note:&lt;/strong&gt; In some places the command line prompt is cut-off. The YouTube version of this video doesn&#039;t have the cut-off problem. We are working on getting this fixed, but in the meantime, check out the YouTube version instead.

&lt;a href=&quot;https://www.youtube.com/watch?v=529xcJxH84E&amp;list=PLVqGqrTs4ZWOhcApSWYIX_rnPMZDAClJa&amp;index=12&quot;&gt;Command Line Basics 12: Handy Command Line Shortcuts&lt;/a&gt; (youtube.com)


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C0vJlthT-fAUVld_mvbFXRtogVDh9cqpE8yd08EZV6g.jpg.jpg</video:thumbnail_loc><video:duration>530</video:duration><video:publication_date>2011-06-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/work-existing-drupal-entities</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Work with Existing Drupal Entities</video:title><video:description>This lesson takes a look at working with the already existing entities in Drupal such as users and nodes and demonstrates some best practices for working with them in your own custom module. We&#039;ll focus on writing code that will work with any entity type and isn&#039;t hard coded to work with just nodes or just entities.

Additional notes:
There is a typo in the video. Joe created the variable $types = &#039;comment&#039;; in one spot and then used it as entity_load($type, ... which obviously wouldn&#039;t work because the later is missing an &#039;s&#039; on the end. The downloadable code for this video doesn&#039;t have the typo.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/Lullabot/entity-api-demos&quot;&gt;Entity API demos on GitHub&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JVBPTVsxrrseBlYhJQIEkaARclJnNs5MyM5ZybJheDM.jpg.jpg</video:thumbnail_loc><video:duration>529</video:duration><video:publication_date>2013-04-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/groups-manager-perspective</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Groups from a Manager Perspective</video:title><video:description>In this video Michelle will give us a tour of our example site from the manager perspective, so we can see how you manage a group. We&#039;ll look at the extra administrative rights they have for the group, including accepting new members. We also talk about roles and permissions within a group, and briefly discuss the difference between permissions and access control.

Although the video uses the &quot;dev&quot; version of Organic Groups, there has since been a stable release of the 2.x branch.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZSRPp4YrRRUtpjIaYfUTqnjJ9VO67FasLHK4JABObkM.jpg.jpg</video:thumbnail_loc><video:duration>415</video:duration><video:publication_date>2012-06-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/server-maintenance-time-june-5th6th</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/create-group-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create Group Content</video:title><video:description>In this chapter Karen Stevenson will cover getting some content and users into our site.  She will achieve this using the Devel module, with a few tips and tricks because of all the references Organic Groups uses to work its magic.  The reason we need this content is so we can understand how all the components of a group work.  From a manager to member, and individual content, each has a different role in an Organic Group.

Additional notes:
Around 3:22 a new Announcement was made with Cardinals as a selectable option in the Team field. That option only appears if, as admin, you explicitly join the Cardinals group.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/D_uDpFtzegSe96fHgeXBFX5owcopyBUNJjjQ_0Q39Ak.jpg.jpg</video:thumbnail_loc><video:duration>392</video:duration><video:publication_date>2012-06-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-zones-and-regions-omega</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Zones and Regions in Omega</video:title><video:description>Converting an exisiting theme to Omega takes time and some planning, but Omega gives us plenty of options of moving things around the page all without touching a piece of code. When working with a grid layout we use Omega to set all of our content to span the proper columns all while moving our content from zone to zone so it is placed properly on the page. We will cover:
&lt;ul&gt;
  &lt;li&gt;Moving content from zone to zone&lt;/li&gt;
  &lt;li&gt;Choosing proper zone column widths&lt;/li&gt;
  &lt;li&gt;Splitting column amounts to create right and left columns&lt;/li&gt;
&lt;/ul&gt;
Once all of this is complete we are just a few steps away from getting into some CSS and really making our theme come together as an Omega sub-theme.

Additional notes:
If you want to touch code, you can edit the .info file as such (for the first part, moving branding zone):

settings[alpha_region_branding_zone] = &#039;header&#039;
...
settings[alpha_region_branding_weight] = &#039;3&#039;
...
settings[alpha_region_header_first_weight] = &#039;1&#039;
...
settings[alpha_region_header_second_weight] = &#039;2&#039;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/V02GaRYtN7Ntflcchky45VXa-zFwdMKqffGvxoSnuNA.jpg.jpg</video:thumbnail_loc><video:duration>644</video:duration><video:publication_date>2012-11-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-jquery-selectors</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using jQuery Selectors</video:title><video:description>&lt;p&gt;Use jQuery selectors to locate and select elements on the page. jQuery selectors operate much like CSS3 seletors. Start out simple by selecting elements by tag, DOM id, or class name. Then get more advanced and select form elements based on their current state, and complex n-th child selectors. Additional notes: As a result of Drupal 7 using jQuery in no conflict mode, the jQuery object is not automatically assigned to the global $ symbol. The easiest way to get around this in Firebug or Webkit Inspector is to just use jQuery(&amp;#39;element&amp;#39;); or do $ = jQuery; and then use the $ as per usual. If you take a look at the JS files in Drupal 7 you&amp;#39;ll see that they almost all use an anonymous closure in order to assign the $ variable. Something like the following. &lt;code&gt;(function ($) { // Add your code here and use $ as per usual. })(jQuery);&lt;/code&gt;&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/S1oO-RhEB3MJU6wxIpzlpOjTABZaZ7XPoILoh8YWuts.jpg.jpg</video:thumbnail_loc><video:duration>963</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupalbehaviors-and-drupal-specific-javascript</loc><lastmod>2025-05-16T21:49Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Drupal.behaviors and Drupal-Specific JavaScript</video:title><video:description>Goes into depth about some of the JavaScript constructs and tools that Drupal provides when writing JavaScript for Drupal. Topics include using Drupal.behaviors and variable settings.

There where a couple of changes to the Drupal.behaviors system for D7. You can find out more information about the changes here: http://drupal.org/update/modules/6/7#drupal_behaviors

And more general information about using the new system here http://drupal.org/node/756722

Once you&#039;ve converted from the old &lt;code&gt;Drupal.behaviors.myModule = function(context)&lt;/code&gt; to the new syntax

&lt;code&gt;Drupal.behaviors.myModule = {
  attach: function(context, settings),
  detach: function(context, settings)
}&lt;/code&gt;

The rest is pretty much the same.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1fNSl6c7v0I9ybvrW7xB30k2NZ6yAOuTB53eTY_WGR0.jpg.jpg</video:thumbnail_loc><video:duration>905</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/omega-grid-and-responsive-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Omega Grid and Responsive Settings</video:title><video:description>Responsive design is more than a just a buzzword these days but a standard practice of good web shops when building out a site. Omega provides a responsive design out of the box and gives lots of options to layout your content in the proper places and the ability to work with the break-points all with a User Interface. In this lesson we will cover:
&lt;ul&gt;
  &lt;li&gt;Omega responsive options&lt;/li&gt;
  &lt;li&gt;Column settings for your grid layout&lt;/li&gt;
  &lt;li&gt;Omega responsive layout settings&lt;/li&gt;
  &lt;li&gt;Device viewports and media queries&lt;/li&gt;
&lt;/ul&gt;
We end the lesson getting our new sub-theme ready to handle our 960 robots theme and the 16 column setup we designed it with.

If you prefer working with code, instead of the web UI, you may configure your theme as follows to change your column settings from 12 grid columns to 16 in your theme&#039;s .info file:

Find and replace all the instances of:
_columns] = &#039;12&#039;
with:
_columns] = &#039;16&#039;

There may still be additional regions that also need to be set which weren&#039;t the full width. You can edit other regions as needed, such as:
_region_user_first_columns] = &#039;8&#039;
change to:
_region_user_first_columns] = &#039;12&#039;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1n6pyRbYrm3OB9URwjCyHbWkigCPSt6bYsqgssS2pa0.jpg.jpg</video:thumbnail_loc><video:duration>464</video:duration><video:publication_date>2012-10-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/organizing-collections-form-elements</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organizing Collections of Form Elements</video:title><video:description>&lt;p&gt;This chapter shows how to cluster different form elements into fieldsets as well as how to expand the Forms API renderable array a tree that preserves the structure and hierarchy of the form. We&amp;#39;ll expand the Form Fun example module and talk about the #tree property. This video uses krumo() and dsm() functions. You will need to download, install, and enable the devel module to use these functions. These functions allow you to see what variables are available to you. To accomplish the same task without using the devel module, you can add the following snippet to your module: &lt;code&gt;drupal_set_message(&amp;#39;&amp;#39; . print_r($vars, true) .&amp;#39;&amp;#39;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There is a typo in the code used in this video. The function &lt;code&gt;form_fun_tree()&lt;/code&gt; is missing a parameter, and should be as follows &lt;code&gt;function form_fun_tree($form, &amp;amp;$form_state)&lt;/code&gt;.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XURM5hh5yC8NuO-XXBFz-5NPN3orWZFWyC05dfqqAfA.jpg.jpg</video:thumbnail_loc><video:duration>459</video:duration><video:publication_date>2011-12-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-ical-feeds-and-custom-calendar-display</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/deploying-your-code</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Deploying Your Code</video:title><video:description>In this lesson we will take the code we have committed to our remote repository and manually push it to our production server.  We will cover how to setup deployments on &lt;a href=&quot;http://www.beanstalkapp.com&quot; title=&quot;beanstalkapp.com&quot;&gt;beanstalkapp.com&lt;/a&gt; and the some of the advantages of using a tool like this.

A question we are commonly asked is: how did your production environment recognize the new feature?

Answer: Reverting a feature reverts it back to what is in code. So by updating the code it always looks to the code so there is no need to revert it. You usually revert a feature if you have made changes that are stored in the database and you need it to look back to the code as your database changes are not what you wanted or are wrong. If the changes you made in the database are what you want, then you update/recreate the feature.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zwFBaSgm84edREmK-VMiCybWH6o0J-y9viAe0dKj9HU.jpg.jpg</video:thumbnail_loc><video:duration>610</video:duration><video:publication_date>2013-02-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/combining-conditions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Combining Conditions</video:title><video:description>This screencast explains how to use AND and OR groups in Rules to configure more complex conditions. This is demonstrated by creating a rule that notifies administrators when content is promoted to front page using an OR group. (The same procedure can be used to create an AND group.)

The screencast covers:
&lt;ul&gt;
  &lt;li&gt;How to combine conditions&lt;/li&gt;
  &lt;li&gt;How to create an OR group&lt;/li&gt;
  &lt;li&gt;Some advice about the order of conditions&lt;/li&gt;
  &lt;li&gt;How to delete reaction rules&lt;/li&gt;
  &lt;li&gt;Why you shouldn’t use the “send e-mail to all users in a role” action&lt;/li&gt;
  &lt;li&gt;Why it might be useful to have messages printed out when configuring complex rules&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/docs/7/modules/rules&quot;&gt;Rules guide&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lqK1O586OP7rBrHE4-tYyX3Wrg0pY9oyF9-bSWFXhVA.jpg.jpg</video:thumbnail_loc><video:duration>436</video:duration><video:publication_date>2011-11-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-simple-custom-entity</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Simple Custom Entity</video:title><video:description>This lesson demonstrates the bare minimum needed to create a custom entity type and to load an Entity from the database. We’ll look at implementing a minimum viable hook_entity_info, talk about the relationship between the Entity API and the Schema API and use entity_load to retrieve a single entity record from the database.

Note, although it would be considered best practices to name the entity with the name of the module, e.g. videoentity_video, we did not include the module name prefix here because it is tedious to type it all out and to say &quot;videoentity_video&quot; without confusing people.

In the next lesson we&#039;ll cover the various &lt;a href=&quot;videos/introduction-entity-classes&quot;&gt;entity classes&lt;/a&gt; and how they work. However, if you  just want to get straight to using your entity and doing things like &lt;code&gt;$entity = entity_load();&lt;/code&gt; you&#039;ll need to declare a controller for your new entity type. Simply add this &lt;code&gt;&#039;controller class&#039; =&gt; &#039;EntityAPIController&#039;&lt;/code&gt; in &lt;code&gt;hook_entity_info()&lt;/code&gt;. That will get you started, and well talk about what exactly that line does in the next lesson.

&lt;strong&gt;Note:&lt;/strong&gt; the video doesn&#039;t mention the &lt;code&gt;&#039;primary key&#039;&lt;/code&gt; element in the schema array (although it is in the code). This bit is necessary for the schema to install properly and work with the Entity API so if you&#039;re following a long make sure you add that part as well.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://github.com/Lullabot/entity-api-demos&quot;&gt;Entity API demos on GitHub&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/1026420&quot;&gt;Drupal.org: How to create a new entity type&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/878804&quot;&gt;Drupal.org: Providing a new entity type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LFDztjj7hORdax7BeVggZuxt5qKQdCptMtR6dOH6QMs.jpg.jpg</video:thumbnail_loc><video:duration>359</video:duration><video:publication_date>2013-04-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/images-and-insert-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Images and the Insert Module</video:title><video:description>In this lesson we cover the Insert Module along with FileField Sources Module. The Insert Module is a great module when combined with a few others and is setup right.  It takes a few configurations but gives you lots of flexibility with your images and placing them into the text area. We also demonstrate how you can use the FileField Sources module to make the insert module that much better when it comes to media management.

Note: not all Drupal modules provide access to images that are uploaded using a different toolkit. Before committing to a specific suite of media management modules, you should create a test site and practice uploading images. Based on your tests you will be able to better evaluate if you have chosen the right tools for your content managers.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/filefield_sources&quot;&gt;FileField Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/awWCM6lkLx8xrODV7p6LcQqXebixEU8a-jOF6rxCa-c.jpg.jpg</video:thumbnail_loc><video:duration>514</video:duration><video:publication_date>2012-08-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-configuration-settings-form-your-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a Configuration Settings Form for Your Module</video:title><video:description>This video goes through the process of creating a configuration form in order to save settings to the variables table in the database, and how to integrate those variables into your module.

&lt;h3&gt;Correction&lt;/h3&gt;

The &lt;code&gt;$item&lt;/code&gt; array in the &lt;code&gt;function demo_menu()&lt;/code&gt; should be named &lt;code&gt;$items&lt;/code&gt;, to match the &lt;code&gt;return $items;&lt;/code&gt; line. (Either that or &lt;code&gt;return $items;&lt;/code&gt; should be fixed to &lt;code&gt;return $item;&lt;/code&gt;.) Just make sure the array you are building matches the name of the variable you are returning.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupalize.me/videos/creating-submitting-and-validating-simple-form&quot;&gt;Form validation in Drupal&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GPag0o_QY65Ia7FTzMWBnZU2D_5GPXNhobYcaDXVpGc.jpg.jpg</video:thumbnail_loc><video:duration>1359</video:duration><video:publication_date>2011-12-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-devel-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>An Overview of the Devel Module</video:title><video:description>This video walks through the handy devel module from http://drupal.org/project/devel and demonstrates the tools it provides for debugging, inspecting and analyzing the code and SQL queries happening on your site. In this video you&#039;ll also learn about some of the helper functions built into the devel module that make it simpler to inspect the large nested arrays that you&#039;ll commonly come across when writing code for Drupal.

You may not have heard of the function dsm() before now. It is a legacy function and dpm() is the newer name. The two functions are identical since dsm() is just a wrapper for dpm().
The idea is that dsm() was a poor name for the function, it&#039;s short for drupal set message, but what was later decided that drupal print (as in print_r) message was better.

The difference between those two and kpr() is that dpm() does a permissions check to make sure the current user has permission to view devel&#039;s output, and then puts the krumo&#039;d variable dump into the message queue via drupal_set_message(). This means that dpm() will work and let you see the output even if you&#039;re redirected. Great for debugging forms. kpr() just krumo&#039;s and dumps the value right here, right now. No permission check, no regard for where the content is being spit out.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KkYCXS34fPh2zdcAu_5UaXpnuHiuGC9e0Zmmr8X5eg4.jpg.jpg</video:thumbnail_loc><video:duration>836</video:duration><video:publication_date>2011-11-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/wowza-thats-fast</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-jquery-concepts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of jQuery Concepts</video:title><video:description>&lt;p&gt;First look at basic fundamentals of jQuery&amp;#39;s syntax and usage. Learn about using the $ function, jQuery selectors for finding elements on the page, creating new DOM elements, and browser detection. In addition to selecting elements on the page we&amp;#39;ll introduce the basics of jQuery effects and events. Note: In D7 developers are encouraged to add a jQuery wrapper around JavaScript. &lt;code&gt;(function ($) { // Original JavaScript code. })(jQuery);&lt;/code&gt; When using Firebug console you need to use jQuery instead of $. &lt;code&gt;&amp;gt;&amp;gt;&amp;gt; jQuery(&amp;#39;.title&amp;#39;)&lt;/code&gt; Drupal 7 uses jQuery in no-conflict mode meaning you need to wrap your code in an anonymous function and pass the jQuery object into the function. This is a pretty common practice now days and is actually a better way to write jQuery in general rather than always assuming that jQuery is the $ symbol. But, it means in the console you need to use either jQuery(&amp;#39;selector) or $ = jQuery;&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lMXX4U74DXox4OjyoUQWdkc6zpiOjBalp1xppw7fyfU.jpg.jpg</video:thumbnail_loc><video:duration>267</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-roles-and-permissions-features</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Roles and Permissions in Features</video:title><video:description>One thing we haven&#039;t looked at in our feature yet is Drupal roles and permissions. Here we will create a role associated with out Blog feature and look at how we can roll that important bit in.

In this video we are using the &lt;a href=&quot;https://drupal.org/project/environment_indicator&quot;&gt;Environment Indicator&lt;/a&gt; module to visually distinguish between different environments.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iFJu2dugBqeb_VcobqLhg5RDs5QKmfbkYJccNOokrPk.jpg.jpg</video:thumbnail_loc><video:duration>1088</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/removing-auto-detected-components-features-plumber</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Removing Auto-Detected Components with Features Plumber</video:title><video:description>Features will auto-detect dependencies for you, which can be very handy, but at times it can also be very frustrating when you don&#039;t want them to. In this video we introduce the Features Plumber module and show you how to use it to finely control your dependencies.

We are sometimes asked how Features can be removed. Since a Feature is just a normal module, you can disable it on your module administration page, and even uninstall and completely remove it from your modules folder. That will completely remove the feature from your site.

&lt;strong&gt;Note:&lt;/strong&gt; The &lt;a href=&quot;https://www.drupal.org/project/features_plumber&quot;&gt;Features plumber&lt;/a&gt; module is no longer necessary if you&#039;re using Features with Drupal 7. The functionality provided by this module has been included into newer versions of the Features module. So as long as your Features module is up-to-date you should be good to go. The concepts from this video do still apply.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_OLfDPGw8_RHWiV98XuvYLT_qRqu5aBlexBHUDdFFhE.jpg.jpg</video:thumbnail_loc><video:duration>1049</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-javascript-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add JavaScript to a Theme</video:title><video:description>Walks through the process of first adding the search block to the node template file, and then explains some of the best practices for incorporating JavaScript scripts within your theme.  Walks through how to protect the dollar-sign variable, and how to use the Drupal behaviors instead of the document ready so that your JavaScript will fire not only on page loads, but also if there is any dynamic material being loaded on the page through asynchronous page loads. We&#039;ll show you how to select the jQuery selector to target the desired element, and how to conform to Drupal&#039;s best-practice coding standards when it comes to integrating JavaScript and jQuery into your theme. You can learn more about jQuery itself with the &lt;a href=&quot;videos/introduction-jquery-1&quot;&gt;Introduction to jQuery Series&lt;/a&gt;.

To use Query in no conflict mode, because was not defined.
Add this line on the top: jQuery.noConflict(); more info here: http://api.jquery.com/jQuery.noConflict/

To improve how the search box looks, you need to modify the following:
currently : search-theme-form
modify to: search-block-form
and then in the property in line 321 to look like this:

&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;
/* Header quick search */
#header form#search-block-form {
    top: -165px;
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;videos/introduction-jquery-1&quot;&gt;Introduction to jQuery Series&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cldm714-0Y1HXBb0SJqgUz467vvvczIy81W_IpjlKNU.jpg.jpg</video:thumbnail_loc><video:duration>970</video:duration><video:publication_date>2011-10-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/displaying-content-panels-and-panelizer</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Displaying Content with Panels and Panelizer</video:title><video:description>&lt;p&gt;In this lesson Karen will talk about how to use Panels and Panelizer to display group content in various ways. She will first demonstrate how to use the built-in features that come with Organic Groups to construct a basic group and group panel. She explains how this can be done using the features module. She then demonstrates using the new Panelizer module to create a system where every group can have its own layout and content. Note: Karen enabled the Features module then separately enabled the OG Example feature, which has a dependency on Panels and other modules so basically Features enabled them. If you actually enable that feature on the modules page it will tell you that panels is required and asks to install it. Karen however enabled the Panels modules via the Features admin page.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/Panelizer&quot;&gt;Panelizer&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations (VBO)&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mWRW6YP40iIpLK6w6DfWId080dGiXSX7yJc3ZtpxXho.jpg.jpg</video:thumbnail_loc><video:duration>1485</video:duration><video:publication_date>2012-07-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/working-git-branches-and-tags</loc><lastmod>2023-12-22T00:21Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with Git Branches and Tags</video:title><video:description>In this tutorial we&#039;ll take a  look at creating branches with the &lt;code&gt;git branch&lt;/code&gt; command, and tags with the &lt;code&gt;git tag&lt;/code&gt; command and explain the differences. Then we&#039;ll look at how and when they can be used and how to move changes from one branch to another using the &lt;code&gt;git merge&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt; commands and talk about the different ways in which those two commands effect the history of a project.
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NY2lDES3W9YVMQcDDex13uqgJqVCxThs1UokSIhppuo.jpg.jpg</video:thumbnail_loc><video:duration>779</video:duration><video:publication_date>2013-03-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-ajax-enabled-links-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Ajax-Enabled Links in Drupal 7</video:title><video:description>Shows how you can use the ajax framework in Drupal 7 to load additional content onto the page dynamically after clicking on a &#039;read more&#039;  link. 

The sample code for this series is in the Downloads tab for the first video in this series: http://drupalize.me/videos/introduction-jquery-and-javascript-drupal#downloads. If you&#039;re skipping around, and things aren&#039;t working, you may benefit from going back to the beginning and completing each of the videos in order.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BV84tBaa-GVvZdrbDtMDp1j9uB5XMDMmO9HIYYnCM1g.jpg.jpg</video:thumbnail_loc><video:duration>1927</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/latest-sprint-new-suggestion-box-and-guides-navigate</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/organic-groups-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Organic Groups Permissions</video:title><video:description>In this lesson, Joe Shindelar goes over all the possible permissions with Organic Groups. He explains the differences between the regular core permissions, and how Organic Groups can override these to give the proper user experience of grouped content. He will show how this affects each role in a group and  how to manage those roles.

Note: In Chapter 8 (&quot;Organic Groups Permissions&quot;) there are several blocks (Group details, Create content, etc.) and the &quot;groups&quot; tab in the main menu that were not introduced in Chapter 7. These blocks and the new tab are explained in Chapter 10. Sometimes we don&#039;t record tutorials in the same order they appear online, which creates discrepancies. This is what happened here—sorry!

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/og&quot;&gt;Organic Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/ctools&quot;&gt;CTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entityreference&quot;&gt;Entity Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.drupal.org/project/entity&quot;&gt;Entity API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XZzKF5mG0lzim0xxugP7Fb9gzvrgLq1YqtjqkZwVcNQ.jpg.jpg</video:thumbnail_loc><video:duration>942</video:duration><video:publication_date>2012-06-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-submitting-and-validating-simple-form</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating, Submitting and Validating a Simple Form</video:title><video:description>This videos goes through the process of creating a form with Drupal Forms API that is single select list that has a validation, submission and redirect functionality.

&lt;strong&gt;NOTE:&lt;/strong&gt;

Their is a typo in the code displayed in the video. The function &lt;pre&gt;function form_fun_cake(&amp;$form_state)&lt;/pre&gt; is missing the $form paramater and should instead be &lt;pre&gt;function form_fun_cake($form, &amp;$form_state)&lt;/pre&gt;

Curious about when you&#039;re supposed to translate &quot;title&quot; and when you should leave it alone?  Here&#039;s the answer: You don&#039;t need to translate the &#039;title&#039; attribute of an array that defines a menu item because Drupal will take care of that automatically. In fact, you shouldn&#039;t translate those as they&#039;ll end up getting double translated if you do. This is because Drupal end&#039;s up using this string of text in a number of different ways some of which don&#039;t actually need to be translated and others that do like for example when it&#039;s the title of a page or the text of a link in the menu system. The #title (and #description) property for elements in Form API array however are your responsibility to translate.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fAkUjmbYGTV4RsvGw4PFrGltyj50km2aF99H4RxlFxc.jpg.jpg</video:thumbnail_loc><video:duration>989</video:duration><video:publication_date>2011-12-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/about-using-drupal-series-preface</loc><lastmod>2024-07-03T00:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/using-drupal-book-and-video-series</loc><lastmod>2023-08-11T00:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>The Using Drupal Book and Video Series</video:title><video:description>In this lesson, we are going to see how the book relates to each of the series we have, and how each of the individual series are organized. We will end up with thirteen series to cover the entire book. Then we will take a look at how you should use the videos with the book. If you don&#039;t have the book, not to worry, as the book would only act as supplementary material to the video lessons. You don&#039;t need the book to successfully follow these series. If you do have the book however, we want to make sure you understand how the lessons and book relate to each other.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd Edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AhY7hW07GtxCeLa2jsHxB8AsRn1IYqa4Ightt7epbJ0.jpg.jpg</video:thumbnail_loc><video:duration>360</video:duration><video:publication_date>2013-07-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-using-drupal-source-code</loc><lastmod>2023-08-11T00:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing the Using Drupal Source Code</video:title><video:description>Using Drupal comes with source code intended to be used throughout the lessons to make following the lessons much easier. In this lesson we&#039;re going to take a look at what that source code provides for us, where we can get a copy of, and how to use it. We&#039;ll go through the installation process, as well as see how we can switch between chapters in the source code without destroying work you&#039;ve done on previous chapters. It is important to note that using the source code is very important if you want the lessons to match what is in the lessons. Drupal modules can change a lot over time, and the source code is designed to exactly match what is covered in the lessons. Once you&#039;ve learned the basics of a chapter by working through the source code, you can upgrade your modules and explore the differences in newer versions, with the base understanding you&#039;ve gained from the lesson.

&lt;strong&gt;Warning: Since this Drupal code is several years old, you must use PHP 5.3. PHP 5.4 or higher will not work. You will need to make sure your server is using PHP 5.3 in order to use this code properly. Many all-in-one servers, like WAMP, MAMP, and XAMPP provide older versions of PHP and a way to switch back and forth between versions.&lt;/strong&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-1-drupal-overview&quot;&gt;Using Drupal Chapter 1: Drupal Overview&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xuTrJQDGwYl2O31br2DgtvPLESfCQqQ2e8oTK88utm0.jpg.jpg</video:thumbnail_loc><video:duration>1266</video:duration><video:publication_date>2013-07-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/about-using-drupal-series</loc><lastmod>2023-08-11T00:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>About the Using Drupal Series</video:title><video:description>The Using Drupal series of lessons walks through the O&#039;Reilly book, &lt;em&gt;Using Drupal&lt;/em&gt;, written by Angie Byron, Addison Berry, and Bruno de Bondt. We use the second edition, which covers Drupal 7. The book starts off with taking a look at Drupal Core and then works through various case studies using a wide range of contributed modules from the Drupal project.

The video series follows along with what&#039;s in the book, so if you have the book, the videos are really great supplemental material. Even without the book, you’ll get the full lessons here in the videos.

This series is intended for people who have worked with the web and understand how a website gets delivered, and in particular, how to get a website onto a web server so that people can actually see it and use it. The rest of this introductory series we have here will look at how the book relates to the video series we&#039;re going to be creating, and how you can use those 2 together.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IGn1lG1qTEY-GaR7f4dGuALRARgAL9fQKD29P_UQUWc.jpg.jpg</video:thumbnail_loc><video:duration>231</video:duration><video:publication_date>2013-07-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-appendix-installing-and-upgrading-drupal</loc><lastmod>2020-03-05T23:43Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/install-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Drupal 7</video:title><video:description>&lt;p&gt;Once you have met all of the requirements and gathered the information you need, you can get down to the installation. This lesson assumes that you have already downloaded Drupal, placed the extracted files on your web server, and are able to create your database.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4BpvXFHfM7ke-VxGlgik1Xd-NHFQ7_K5xzJZxfrs5Y8.jpg.jpg</video:thumbnail_loc><video:duration>394</video:duration><video:publication_date>2013-07-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/keeping-drupal-date</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Keeping Drupal up to Date</video:title><video:description>&lt;p&gt;It&amp;rsquo;s not enough to just get Drupal installed; you also need to make sure to keep it up-to-date. New releases of modules and Drupal core come out periodically, most of which fix problems, some of which add new whiz-bang features, and some of which address critical security problems. In this lesson we will review Drupal version numbers and what they mean, review the core Update Status module, and then discuss using maintenance mode, and the update.php script.&lt;/p&gt;
&lt;em&gt;Note: Not mentioned in the video is the fact that in addition to the user 1 account, you can also log in with any account that has the &quot;administer software updates&quot; permission enabled to run the update.php script.&lt;/em&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/documentation/version-info&quot;&gt;Drupal Version Information&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gxd0bWCCnQoWBZLNdu0xOuJJlofQl3PR70xHtdl5mfw.jpg.jpg</video:thumbnail_loc><video:duration>819</video:duration><video:publication_date>2013-07-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/updating-drupal-core</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Updating Drupal Core</video:title><video:description>&lt;p&gt;Updating your site often sounds much scarier than the actual experience is. The most important step to remember is creating and testing backups of your site. In this lesson, we will create our backups, download a new version of Drupal core, and go through the process of updating our files and running the update.php script.&lt;/p&gt;

&lt;em&gt;Note: Not mentioned in the video is the fact that in addition to the user 1 account, you can also log in with any account that has the &quot;administer software updates&quot; permission enabled to run the update.php script.&lt;/em&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/upgrade&quot;&gt;Drupal.org Upgrade Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dFLtwBJOhGz-Itu3RhBTsIBfKMdGdHzXWsH4LSCv-bU.jpg.jpg</video:thumbnail_loc><video:duration>875</video:duration><video:publication_date>2013-07-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/updating-drupal-contributed-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Updating Drupal Contributed Modules</video:title><video:description>Drupal&#039;s contributed projects tend to move more quickly than Drupal core and there- fore require more updates within a Drupal version&#039;s life cycle. You can upgrade multiple modules at the same time, although it&#039;s best to do one at a time to reduce the chance of errors, and to allow you to isolate problems that might come up during an upgrade. In this lesson we will look at our Available Updates report, and use the Update Manager to upgrade a few of our contributed modules.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/upgrade&quot;&gt;Drupal.org Upgrade Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-appendix-b-choosing-right-modules&quot;&gt;Using Drupal Appendix B: Choosing the Right Modules&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_TlKTGb1DAONQ3cOsVK2GxPBy7eRqn3K-neG4rQPBpI.jpg.jpg</video:thumbnail_loc><video:duration>463</video:duration><video:publication_date>2013-07-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/you-begin-installing-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Before You Begin Installing Drupal</video:title><video:description>&lt;p&gt;Prior to installing Drupal, it&amp;rsquo;s important to make sure that you can actually do so, and understand a bit about how Drupal is structured. The first lesson provides a checklist of Drupal&amp;rsquo;s requirements, and also highlights important things in the Drupal file structure that are worth knowing before diving into the installation process. We also explain and take a quick look at how you can use Drupal to run multiple sites from the code base, known in Drupal as a multisite installation.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/requirements&quot;&gt;Drupal installation requirements&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.apachefriends.org/en/xampp.html&quot;&gt;XAMPP cross-platform web server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.wampserver.com/&quot;&gt;WampServer for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mamp.info/en/index.html&quot;&gt;MAMP for Mac&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NthO1A6-caDLWh8taZTsBFuMnd3No1ui12UBk-3K7eU.jpg.jpg</video:thumbnail_loc><video:duration>914</video:duration><video:publication_date>2013-07-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-1-drupal-overview</loc><lastmod>2024-07-03T00:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/what-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is Drupal?</video:title><video:description>&lt;strong&gt;To learn more about how to get started with Drupal, also see our &lt;a href=&quot;https://drupalize.me/guide/introduction-drupal&quot;&gt;Introduction to Drupal guide&lt;/a&gt;.&lt;/strong&gt;

In this lesson we take a look at Drupal, the open source Content Management System. We learn about the major components of a Drupal site and the library of constantly evolving tools available for working with Drupal. We find out how to see who uses it, by looking at DrupalShowcase.com and Drupal case studies on Drupal.org, among others. We look at Drupal&#039;s major features, such as Modules. 

With this overview we have some context as we move forward into the series.



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/case-studies&quot;&gt;Drupal Case Studies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qJStIJXGcDCmaqwQopsh3ZYX8jpgCKiha_Anh7aRK28.jpg.jpg</video:thumbnail_loc><video:duration>447</video:duration><video:publication_date>2013-07-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-closed-captioning-feature-enhances-learning-comprehension</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/brief-history-content-management</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>A Brief History of Content Management</video:title><video:description>Drupal is a great tool for working on the web, but to give it some context, in this lesson we&#039;re going to take a quick step back in time, and understand the history of working on the web and look at how the tools that Drupal provides match up with problems encountered over the years of web development.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/45lhkOvyhuTeOBMyH9PAB4cMKQoJh49MCH4q9ye15J4.jpg.jpg</video:thumbnail_loc><video:duration>473</video:duration><video:publication_date>2013-07-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-does-drupal-work</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How Does Drupal Work?</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;re going to break down the &amp;quot;Drupal stack&amp;quot; to understand what pieces are working here and how they relate to each other. We&amp;#39;ll take a tour of the major components of Drupal itself, like nodes and users, and then have a brief discussion about ways of organizing content.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UohaExzHAGlC_yF-xNdSW8JkDiVl-uNOKg0A_MON_BU.jpg.jpg</video:thumbnail_loc><video:duration>1165</video:duration><video:publication_date>2013-07-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-help-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Help with Drupal</video:title><video:description>Before we jump into building our first Drupal 7 site, we should also take a look at the great resources you have out there to help you on your journey. Being an open source project, Drupal has an amazing community of people who have paved this road before you. In this lesson we&#039;re going to look at the free community resources that you can use to not only find answers to your questions, but also connect with thousands of people around the world who are working in the same space you are. -- We are going to take a tour of the communtiy documentation, various Drupal forums, project issue queues, where you can glean a lot of useful information and help, Internet Relay Chat, or IRC, for real-time collaboration, and getting in touch with user groups of like-minded people around the world.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/documentation&quot;&gt;Drupal.org Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/troubleshooting&quot;&gt;Drupal.org Troubleshooting Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/forum&quot;&gt;Drupal.org Forums&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.stackexchange.com/&quot;&gt;Drupal Answers on Stack Exchange&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/irc&quot;&gt;Drupal.org IRC listing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org&quot;&gt;Drupal Groups Site (groups.drupal.org)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-2-drupal-jumpstart&quot;&gt;Using Drupal Chapter 2: Drupal Jumpstart&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TWqHBvUnprOEJdcZVS8azS2r_ejGJI-9F-EcAUPJ8Ms.jpg.jpg</video:thumbnail_loc><video:duration>856</video:duration><video:publication_date>2013-07-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-2-drupal-jumpstart</loc><lastmod>2024-07-03T00:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/hands-content-management</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Content Management</video:title><video:description>In this lesson we&#039;re going to start building our site for Mom and Pop, Inc. We&#039;re starting off by working on our content, to get things filled out a little. First, we&#039;ll create an About Us page with the basic info for the store, like address and opening hours. Then we&#039;ll create our first article, which welcomes people to the new site, and see how the two core content types, Basic page and Article, are different from each other. Then we&#039;ll tweak our main navigation so our tabs display correctly, and finish things off by looking at block management. We&#039;ll remove the &quot;Powered by Drupal&quot; block and add a new block to the site for our weekly specials.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1NrGUMFe8D7xnepUt5goVOAHt6iEXTzZIf4EVMLSk-o.jpg.jpg</video:thumbnail_loc><video:duration>777</video:duration><video:publication_date>2013-07-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-content-management</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Content Management</video:title><video:description>&lt;p&gt;This lesson offers a tour of some of the most basic tools for content management in Drupal. We&amp;#39;re going to walk through and explain the following pieces:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Content&lt;/li&gt;
	&lt;li&gt;Comments&lt;/li&gt;
	&lt;li&gt;Navigation&lt;/li&gt;
	&lt;li&gt;Blocks&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hUy6w5zv8vM4oWHJWuFWv6VhdMK2VWAHi3OyKqKrlm0.jpg.jpg</video:thumbnail_loc><video:duration>1021</video:duration><video:publication_date>2013-07-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-changing-drupal-administrative-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Changing Drupal Administrative Settings</video:title><video:description>For this lesson we&#039;re going to get hands-on and play around in our administration area a little. We&#039;re going to review the site information for our new site, and then change things by setting the site name to match our case study.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C8bqdwULv1oD5oStMdghsZYWhrjViBb9Sh0VBnFDNN4.jpg.jpg</video:thumbnail_loc><video:duration>185</video:duration><video:publication_date>2013-07-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-drupal-administration-interface</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Drupal Administration Interface</video:title><video:description>In this lesson we&#039;re going to start off with the Drupal administrative interface. We&#039;ll take a tour of the major elements and get you oriented to what is where.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WFG19_pl-PclYTo1EGJ-_h3iC17MVAJjEmpgIGUeWLY.jpg.jpg</video:thumbnail_loc><video:duration>777</video:duration><video:publication_date>2013-07-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/case-study-mom-and-pop-inc</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Mom and Pop, Inc.</video:title><video:description>&lt;p&gt;This series, from the O&amp;#39;Reilly Media book &lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, Second Edition&lt;/a&gt;, is intended for people who are new to Drupal, provides a tour of its capabilities, as well as definitions for its sometimes obscure terminology. We&amp;rsquo;ll demonstrate how Drupal can be used &amp;ldquo;out of the box&amp;rdquo; to build a simple website. Readers who are familiar with Drupal already may still want to skim through this, as later series in the &lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Using Drupal guide&lt;/a&gt; will assume knowledge of all content covered here. By the end, you&amp;rsquo;ll understand how to perform administrative tasks in Drupal, such as configuring modules, working with content types, and setting up site navigation. This series assumes that you already have Drupal up and running. For assistance with that, check out the &lt;a href=&quot;http://drupalize.me/series/using-drupal-appendix-installing-and-upgrading-drupal&quot;&gt;Appendix A series, on Installing and Updating Drupal&lt;/a&gt;, as well as the helpful &lt;a href=&quot;http:// drupal.org/getting-started&quot;&gt;Drupal.org Getting Started guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To get things started with Drupal, we&amp;#39;re going to build out a very basic website. The Mom &amp;amp; Pop, Inc. site project will cover many of the basic pieces you need to grasp the fundamentals of building with Drupal, and are a good foundation for the other series we&amp;#39;ll be doing from Using Drupal. We&amp;#39;ll take a tour through the administrative settings, create and manage content, work with modules and users, as well as changing the look of our new site. In this first lesson in the series we&amp;#39;re going to review the Mom &amp;amp; Pop case study and discuss our implementation plan.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot; style=&quot;line-height: 1.75;&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aWsS33HwOccAUTikm80CeZK8GnBki0iI44NJ7fLM2Js.jpg.jpg</video:thumbnail_loc><video:duration>571</video:duration><video:publication_date>2013-07-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-drupal-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Drupal Modules</video:title><video:description>Modules allow you to turn on and off functionality within your Drupal website. There are two types of modules: core modules, which come with Drupal itself, and contributed modules, which are provided for free by the Drupal community and available for download from Drupal.org.  In this lesson we&#039;re going to look at the module administration page, and walk through finding and installing modules. We&#039;ll wrap things up by discussing how you remove a module from your site, and the difference between disabling and uninstalling.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/Modules&quot;&gt;Drupal.org Contributed modules listing page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/V-L0ILOkE9k85_GqzpYjxm0BiJKDxBMUhkkIUsaeOw0.jpg.jpg</video:thumbnail_loc><video:duration>594</video:duration><video:publication_date>2013-07-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-series-calendars-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/hands-working-drupal-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Working with Drupal Modules</video:title><video:description>The easiest way to wrap your head around how modules work is to try installing and configuring a couple of them. This section will cover how to install, enable, and configure a contributed module called &lt;a href=&quot;http://drupal.org/project/module_filter&gt;Module Filter&lt;/a&gt;, which can be downloaded from Drupal.org.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/module_filter&quot;&gt;Module Filter module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;Drush project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.drush.org&quot;&gt;Drush website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4LvdEMFnIMSUp0ETG1x4vMzlomWG8UnZZHoFhJ0ruqQ.jpg.jpg</video:thumbnail_loc><video:duration>564</video:duration><video:publication_date>2013-07-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-drupal-access-control</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Drupal Access Control</video:title><video:description>One of the most powerful features of Drupal is its rich, fine-grained access control system, based around the concept of users, roles, and permissions. In this lesson we&#039;ll explain what these pieces are, and how they work together. We&#039;ll also discuss the user profile and various user account settings we can manipulate.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JxGmnCtItCbcJnqhRfLuv3bykGHbG5C1wvRA69Em7vQ.jpg.jpg</video:thumbnail_loc><video:duration>848</video:duration><video:publication_date>2013-07-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-creating-roles-and-users</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Creating Roles and Users</video:title><video:description>For our Mom and Pop site, we&#039;re going to need to sort out how to set up access control for our users. In this lesson we&#039;ll review our users and their access needs, check and create the roles we need, and then create users.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YXuyv9dE8j1qGIttuEi0RrS8UcvUalu_fbPparzZBY4.jpg.jpg</video:thumbnail_loc><video:duration>491</video:duration><video:publication_date>2013-07-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-configuring-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Configuring Permissions</video:title><video:description>With roles and users in place on the site, we have a good start, but we aren&#039;t actually controlling access very well until we set up the permissions to go with those. In this lesson we need to set permissions for our roles, and take a look at some important security concerns around permissions. Finally, we&#039;ll test our access control by logging in as our users to make sure everything is acting as it should.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KJaZcPhj8GPDuikoBBG-MBNqGLGNV-ZDWnxY1JawoOY.jpg.jpg</video:thumbnail_loc><video:duration>855</video:duration><video:publication_date>2013-07-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-content-moderation-tools-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Content Moderation Tools in Drupal</video:title><video:description>&lt;p&gt;When you open the floodgates for your users to become active participants in content creation, one of the inevitable things that comes up is the issue of content moderation&amp;mdash;that is, ensuring that abusive, vulgar content and unsolicited advertising or spam is kept off the site and stays off. In this lesson, we&amp;#39;ll look at using an automated spam detection, with &lt;a href=&quot;http://mollom.com&quot;&gt;Mollom&lt;/a&gt;, as well as manual spam prevention.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Mollom is EOL (End Of Life). See this &lt;a href=&quot;https://www.jeffgeerling.com/blog/2018/post-mollom-what-are-best-options-preventing-spam-drupal&quot;&gt;blog post&lt;/a&gt; by Drupal community member Jeff Geerling for alternative solutions.&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KVes2Zby6JPn6FGHOx7gTmTJf8F6T0Elf6gD0HqCxEY.jpg.jpg</video:thumbnail_loc><video:duration>540</video:duration><video:publication_date>2013-08-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-drupal-contact-form</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Drupal Contact Form</video:title><video:description>&lt;p&gt;Let&amp;rsquo;s tie together everything we&amp;rsquo;ve learned so far and get a contact form added to our site. This will involve enabling the core Contact module, configuring its settings, and adding permissions.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XDNxkak3wRk7_6UTTG_kSX3ErigrQYooud8CcRktCeM.jpg.jpg</video:thumbnail_loc><video:duration>505</video:duration><video:publication_date>2013-08-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-jumpstart-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal Jumpstart Summary</video:title><video:description>&lt;p&gt;In this series we&amp;#39;ve provided an overview of Drupal&amp;rsquo;s major functionality by walking you through building a small website, Mom and Pop, Inc. To wrap things up we&amp;#39;re going to take a tour of the new Mom &amp;amp; Pop, Inc, website, and discuss our implementation points as we walk through it. Then we&amp;#39;ll review the modules and resources we&amp;#39;ve discussed in this series.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-3-job-board&quot;&gt;Using Drupal Chapter 3: Job Board&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NIQI3iAH6-6ADTaBqaUEV03uIXunIQsgfXJU9EZuwSE.jpg.jpg</video:thumbnail_loc><video:duration>676</video:duration><video:publication_date>2013-08-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-drupal-themes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Drupal Themes</video:title><video:description>&lt;p&gt;Drupal gives you a lot of tools to move things around and arrange the functionality of your site, but often the main difference between most websites comes down to presentation. Themes are the Drupal method for controlling your site&amp;rsquo;s presentation. In this lesson we&amp;#39;ll discuss finding a theme, and installing and configuring themes. A big part of understanding how themes can change your layout lies in understanding blocks and regions, so we&amp;#39;ll cover what those are, and why they&amp;#39;re important. Then we&amp;#39;ll talk briefly about administration themes and how they are different from your main theme.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qVKnpGWYcPxSmoLxGXuDWGnud5XEewk-2-BFhOJ6rGk.jpg.jpg</video:thumbnail_loc><video:duration>635</video:duration><video:publication_date>2013-08-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-branding-drupal-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Branding a Drupal Site</video:title><video:description>&lt;p&gt;Now it&amp;rsquo;s time to make the site look less like Drupal and more like Mom and Pop, Inc. In this lesson we&amp;#39;ll modify the core Bartik theme by changing the site logo and the color scheme to match what we need for our project.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8kWO6Yv1de8ja-v2IF9htpCqMJQhyydwceK1Qto5OaA.jpg.jpg</video:thumbnail_loc><video:duration>243</video:duration><video:publication_date>2013-08-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-3-job-board</loc><lastmod>2024-07-03T00:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-epic-university</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Epic University</video:title><video:description>This series will introduce you to the two most powerful features in Drupal: Fields and Views, fundamental building blocks when it comes to building Drupal sites. The Field module allows you to customize entry forms for entities, nodes and users, and comments. The Views module is the perfect counterpart to Field in that instead of putting content into your site through an entry form, Views allows you to get that content back out again in the way that you want.

In this lesson, we&#039;re going to be looking at building a job posting board for a university. We&#039;ll examine our case study and what it is that we need to do for this job posting board. Drupal core provides this site with a lot of good starting pieces, but we&#039;re also going to need to use some additional modules. We&#039;re going to focus on the core Field and Field UI and File field in order to create the custom forms that we need for the input for jobs and applications.

If you&#039;d like to follow along with this series, you should install the Using Drupal Source Code and use the Chapter 3 Job Posting Board Installation Profile during the installation process,




&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_OgQrMlAhc2nknojHefJpWkz6lO2VoaHPSjmb90LtLI.jpg.jpg</video:thumbnail_loc><video:duration>444</video:duration><video:publication_date>2013-08-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-field-and-field-ui-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Field and Field UI Modules</video:title><video:description>The Field module provides an extremely flexible framework for creating forms to enter content. In past versions of Drupal, this was provided by a contributed module called the Content Construction Kit, or CCK, but this now a feature that comes with Drupal core itself. In this lesson we&#039;re going to get an overview of the Field module and the pieces it provides, including field types, input widgets, displays, view modes, and formatters. We&#039;ll also take a look at reusing existing fields and what that means.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6IQD6ikaaj_jQrl_hTuj7YOPPymlQqMpQtYkvD-gn6I.jpg.jpg</video:thumbnail_loc><video:duration>881</video:duration><video:publication_date>2013-08-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-job-content-type</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Job Content Type</video:title><video:description>To build this site, we’ll need to go beyond the default “Basic page” and “Article” content types offered by Drupal core. To get started with our job posting website, let’s think about the different content types needed to build all the functionality that we require. The site requires two different types: a Job Posting and a Job Application. In this lesson we&#039;ll map out our content type needs, and see what fields were going to use. Then we&#039;ll create the Job content type, making sure we add needed fields and set permissions so that it is working as expected.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DOxnaNI9nLCHloVhLdvfw2G6KccboL2Vg6FUqE1e_xY.jpg.jpg</video:thumbnail_loc><video:duration>841</video:duration><video:publication_date>2013-08-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-references-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: References Module</video:title><video:description>The References module is a contributed module that allows you to create relationships between nodes and/or users. In this lesson we will take a look at the References project, explaining how References work, and then discuss some similar modules out there you may want to investigate.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/references&quot;&gt;References module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/entityreference&quot;&gt;Entity Reference module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/relation&quot;&gt;Relation module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DNWiOmFue-eMmaLkPPHF603mU_2Q5_fZO8ldZCnWNCM.jpg.jpg</video:thumbnail_loc><video:duration>386</video:duration><video:publication_date>2013-08-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-adding-reference-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Adding a Reference Field</video:title><video:description>Now we need to add a primary contact for the job position we&#039;ve created. This will usually be the person creating the entry, but we’ll allow the user to enter any of the possible faculty members on the site. This will be done as a “User reference” field, provided by the contributed References module. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/references&quot;&gt;References module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mlVozVceaFA8Rtr-mX9cjvlh7NJWkT7DO0Dy4nYEIXU.jpg.jpg</video:thumbnail_loc><video:duration>271</video:duration><video:publication_date>2013-08-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-customizing-field-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Customizing Field Display</video:title><video:description>For usability, it’s often important to display forms and page contents in a specific order, and to add formatting so that it’s more clear what data is being presented. In this lesson we&#039;ll modify our Job content by reordering the fields, changing the field label display, and looking at how we can hide particular fields.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GP_BLv3eGaIaAb-CuEFclnvrmkjKo8v1NtggG5vNhsc.jpg.jpg</video:thumbnail_loc><video:duration>569</video:duration><video:publication_date>2013-08-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-job-application-content-type</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Job Application Content Type</video:title><video:description>Now that the university is able to create job postings, it would be helpful if prospective employees could submit resumés to the positions in which they’re interested. In this lesson we will build out the Job Application content type. We will need to add another reference field, this time a node reference, to tie the applications to the correct job. To make it possible for applicants to submit their resumé we&#039;ll also need to add an upload field so that applicants can upload a document of specified file types.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/references&quot;&gt;References module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/efv2gCO1VRIQYak5HDf78tiztF-MLd5hoCVlB7X53JI.jpg.jpg</video:thumbnail_loc><video:duration>775</video:duration><video:publication_date>2013-08-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-views-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Views Module</video:title><video:description>The Views module provides listings of data on your site: users, comments, nodes, and more. Any listing of data provided by the Views module is called a view, and most Drupal websites today use Views in many different ways. In this lesson we&#039;ll get an overview of the Views module, including some specific concepts and terminology like Data Types and Displays, along with a tour of the major view settings and what they do.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rME71nJj2F6OdqcB_t7MjRjN0LnGQLdS1_-NobweXcc.jpg.jpg</video:thumbnail_loc><video:duration>1543</video:duration><video:publication_date>2013-08-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-job-listing-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Job Listing View</video:title><video:description>The requirements of our site include two different main views. One view is a public-facing list, showing all the available jobs to users of the site. In this lesson we&#039;ll create our first view by enabling the modules we need, walking through the Views wizard to get our basic view in place, and then modifying various settings for our fields and working with contextual filters.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;Chaos Tools module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/advanced_help&quot;&gt;Advanced Help module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tB6g3VkzpcAdkj4vqgvl0B14LIy-HZdTUgOM6HL5N7o.jpg.jpg</video:thumbnail_loc><video:duration>1143</video:duration><video:publication_date>2013-08-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-applications-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Applications View</video:title><video:description>The Applications view will serve both as a tool for administrators and as a reference for users, with three different displays. In this lesson, we&#039;ll start to build the Applications view by creating the default display with our first listing, which is a master list of all the applications on the site. To pull in all of the information we&#039;re going to need, we&#039;ll begin working with Views relationships.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E0PJV6owfG1EQX2MFZJpIP9FDkCKe8cufNDxwrSED2A.jpg.jpg</video:thumbnail_loc><video:duration>867</video:duration><video:publication_date>2013-09-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-free-series-learn-drupal-ladder</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/applications-view-tab-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Applications View: Tab Display</video:title><video:description>With our basic Applications view built, we have our default display. We also need another faculty display on the site. This second list will be largely the same as the default list, but it needs to show up as a tab on a job posting node, and only list the applications which relate to that particular job. We&#039;re going to need to create a new display, and override certain settings, plus add in a contextual filter, in order to get this view completed.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tUtx2MSmR5HWSs9Im3UO9tjneRBLSXoVUVera3gyGfI.jpg.jpg</video:thumbnail_loc><video:duration>828</video:duration><video:publication_date>2013-09-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/applications-view-block-display</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Applications View: Block Display</video:title><video:description>In this lesson we tackle the last display we need for our Applications view, by building a block for our applicants. This has us creating a new type of display, a block, as well as continuing  to work with overrides. We also have to change the permissions on this particular display so regular users can see it, but at the same time we only want the view to show a user their own applications. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2EsWo_Lc4bpLKTe1GADOEQ96lRT4ktbvZNNsiy5dxkk.jpg.jpg</video:thumbnail_loc><video:duration>663</video:duration><video:publication_date>2013-09-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-job-posting-board-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking the Job Posting Board Further</video:title><video:description>The basic job website that we’ve built only touches on the surface of the capability of Field and Views. There are a lot of possibilities for extending the functionality of this job site by adding more fields to both the Job and Job Application content types. In this lesson we&#039;ll review some other modules to explore:

&lt;ul&gt;
  &lt;li&gt;Automatic Node Titles&lt;/li&gt;
  &lt;li&gt;Node Reference URL Widget&lt;/li&gt;
  &lt;li&gt;Content Access&lt;/li&gt;
  &lt;li&gt;Field Permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/auto_nodetitle&quot;&gt;Automatic Nodetitles module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/nodereference_url&quot;&gt;Node Reference URL Widget module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/content_access&quot;&gt;Content Access module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/field_permissions&quot;&gt;Field Permissions module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OgPn-JYUI0U7gOZGEHyGT9jYCi7YNknCYKFrmwr6jg8.jpg.jpg</video:thumbnail_loc><video:duration>418</video:duration><video:publication_date>2013-09-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/job-posting-board-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Job Posting Board Summary</video:title><video:description>This series taught you how to use two of Drupal’s fundamental “building block” modules: Field and Views. These modules constitute the cornerstone of Drupal’s power and are used extensively throughout the rest of the Using Drupal series. In this summary we&#039;ll take a tour the Epic University site we&#039;ve built to discuss how we built it. We&#039;ll wrap things up with a review of the modules and resources we&#039;ve covered in this series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-4-media-management&quot;&gt;Using Drupal Chapter 4: Media Management&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/N7yZEJM1HRycYcVavw5O_yuazd6jxXM2Sq1GfGp3L6Q.jpg.jpg</video:thumbnail_loc><video:duration>1218</video:duration><video:publication_date>2013-09-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/importing-data-migrate-and-drupal-7</loc><lastmod>2024-07-24T20:54Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/review-migrate-example-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Review the Migrate Example Modules</video:title><video:description>The Migrate module itself contains some excellent examples of data migrations implementing the various APIs provided by the module and serves as the canonical documentation for how to write a migration. In this lesson we&#039;ll take a look at the beer and wine import examples provided with the migrate module as a way to familiarize ourselves with the concepts discussed earlier and to be able to see the code that makes up a basic migration before attempting to write our own. In practice these examples serve as a great starting point and can often times be copy/pasted and adjusted for your own needs.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/migrate&quot;&gt;Migrate module&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dVgujvJKlhOXbl3BsCD1H1q2lUjvak6xGvc1Z4C36VE.jpg.jpg</video:thumbnail_loc><video:duration>904</video:duration><video:publication_date>2013-09-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/set-migrate-demo-site-and-source-data-1</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Set up Migrate Demo Site and Source Data</video:title><video:description>&lt;p&gt;Before we can write our own custom migration we need to construct the site that we&amp;#39;re going to import data into and of course we need some source data to import. In this lesson we&amp;#39;ll obtain some source data to work with and configure our Drupal site by installing a couple contributed modules, and creating the content types and fields necessary for our information architecture. During this process we&amp;#39;ll also be taking a look at the baseball player and team data that we&amp;#39;ll be importing and familiarizing ourselves a bit more with the tables and columns in our source database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The Lahman database structure has changed since this video was recorded, and the latest files provided by Lahman don&#039;t match what is used in the video. When following along with these examples you&#039;ll either need to use the &lt;a href=&quot;https://drupalize.me/system/files/video/companion_files/lahman2012-sql.zip&quot;&gt;2012 source data&lt;/a&gt;, or make a few adjustments to field/table names throughout the source code as you follow along so that they match the current structure of the Lahman data.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.seanlahman.com/baseball-archive/statistics/&quot;&gt;Baseball statistics for our source data&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/date&quot;&gt;Date module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/entityreference&quot;&gt;Entity Reference module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;Chaos Tools module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/entity&quot;&gt;Entity API module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MPaSalgQdB_tO0YBRR4syQlr74spRjM_ETEhFdGpdn8.jpg.jpg</video:thumbnail_loc><video:duration>1011</video:duration><video:publication_date>2013-10-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/preparing-your-environment-run-migrations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Preparing Your Environment to Run Migrations</video:title><video:description>Running your own migration requires a bit of setup and boilerplate code, Drupal needs to know where to find the source data, and the Migrate module needs to be provided with some basic information about our custom code. In this lesson we&#039;ll look at setting up Drupal to be able to connect to multiple databases, and then create the skeleton of a simple module which will house our custom migration code and an implementation of hook_migrate_api(). Finally we&#039;ll create a base class from which we can begin writing our own custom migrations, and talk about why this is a good way to start organizing our migration.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JMChg03E7eaVdjF_qCqoO91O5Em7SpJigv9cQa6bLC4.jpg.jpg</video:thumbnail_loc><video:duration>738</video:duration><video:publication_date>2013-10-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/write-simple-migration-class</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Write a Simple Migration Class</video:title><video:description>In this lesson we&#039;re going to write our first custom data migration and start importing some of the player data in to Drupal. The primary concepts covered in this lesson are the creation of a migration class following the pattern necessary for Migrate module to be able to discover our code and then dealing with defining source and destination objects so that the Migrate module will know where to read data from and where to write data to. Finally we&#039;ll add a simple single field mapping where we map the player&#039;s name to the node.title field allowing us to run the migration for the first time and import some real data. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupal.org/node/1006984&quot;&gt;Migration class documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/developing/api/schema&quot;&gt;Schema API documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/node/159605&quot;&gt;Schema API data types&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JjglP7beizfOqcq1fclwnMzE2Vt4gM4P1TuWhh-6NJE.jpg.jpg</video:thumbnail_loc><video:duration>1227</video:duration><video:publication_date>2013-10-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/migrate-field-mappings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Migrate Field Mappings</video:title><video:description>In this lesson we&#039;ll continue to add field mappings to the basic migration class created in the previous lesson. We&#039;ll see how to add more information about the available source fields. We&#039;ll map more of the player source data fields to their equivalent destination fields and learn about some of the many ways that fields can be mapped. Finally we&#039;ll also cover mapping sub-fields which allows us to import data for things like the text format of a node&#039;s body field or the alt column in an image field. Information that&#039;s contained within a meta field. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/node/1006984&quot;&gt;Migration class documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4X5G5pW1r0VZ-cn4VqMpUOjRwl0AFn4kAt0bQFvNPz0.jpg.jpg</video:thumbnail_loc><video:duration>905</video:duration><video:publication_date>2013-10-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-preparerow-perform-extra-operations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Preparerow to Perform Extra Operations</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;re going to finish mapping the fields for the player migration and learn about how to deal with source data that requires some additional massaging before being saved to the destination. We&amp;#39;ll learn about the use of field mapping callback functions and the migration&amp;#39;s prepareRow method as possible spots to perform additional logic during a migration. Then we&amp;#39;ll use these techniques to combine our player first and last name fields together for the node title field, deal with our birth and death date fields by concatenating the three source columns together into a single date string, and finally add some additional information to the notes field during import that will allow us to track imported records in the future.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&amp;nbsp;&lt;/strong&gt;This lesson was recorded using the 7.x-2.6 version of the date module, however the 7.x-2.7 version is now out which contains some changes to the module&amp;#39;s integration with the migrate module. The biggest change being that the date_migrate module is no longer required and has been deprecated. You can read more about the changes here:&amp;nbsp;https://drupal.org/node/2034231&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/node/1006984&quot;&gt;Migration class documentation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/migrate_extras&quot;&gt;Migrate Extras project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mYt5r7egEeb67CQfHT5wcUYxHH7j_qFrRmyKBAAwpZ0.jpg.jpg</video:thumbnail_loc><video:duration>1092</video:duration><video:publication_date>2013-10-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-additional-metadata-migration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Additional Metadata to a Migration</video:title><video:description>Although not required when writing your own migration, the Migrate module provides ways for us to decorate our migrations with additional information making it easier to keep track of who is working on what, what needs to get done, and related issues. We&#039;ve already seen some of this in previous lessons with with the Do Not Migrate option for fields and ability to provide field mapping descriptions. In this lesson we&#039;ll take a look at how we can make use of the additional tools to do things like; Show the name, contact info, and roles of individuals working on the migration, pose questions to other team members via the migration UI, and link individual field mappings to related tickets in our bug tracking software. Making it easier for team members who don&#039;t want to be involved with the code to help move our migration along.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/node/1133448&quot;&gt;Field Mappings documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/H4np7JXDFFQwcCpb5Td6pZkEtedUEp3fOB1OB12a6d0.jpg.jpg</video:thumbnail_loc><video:duration>711</video:duration><video:publication_date>2013-10-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-sourcemigrations-add-related-data</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Sourcemigrations to Add Related Data</video:title><video:description>In this lesson we&#039;re going to take a look at creating relationships between two Drupal nodes during a migration. In our case we&#039;ve got player and team nodes, and each player node has an entity reference to a team node which we need to populate during our migration. In order for this to work we need to ensure that the team node has already been created so that we know the unique node.nid to use in the entity reference field for the player.

To accomplish this we&#039;re going to write a migration for team data and ensure that it is run prior to our player migration being run. Then we&#039;re going to make use of the mapping between source and destination rows that the Migrate module is tracking for teams so that during a player migration we can lookup the corresponding team node&#039;s nid and make use of it.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sE2WsCby4rnV89orZ5Hs3j_5LQv2nhrrH_i9lQt7twE.jpg.jpg</video:thumbnail_loc><video:duration>1172</video:duration><video:publication_date>2013-10-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/map-multi-value-fields-separator-method</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Map Multi-Value Fields with the Separator Method</video:title><video:description>This lesson is a short one but it covers an important topic, multi-value fields. Almost any field in Drupal can be configured to support more than one value being entered for a single field. Our teams entityreference field is a good example of this, a player could have played for one or more team over the course of their career. This lesson will look at two different ways to map multiple values for a single field.

First we&#039;ll look at doing it in a callback method where we perform an additional query and then use the values returned by that query. And second we&#039;ll look at using the field mapping&#039;s separator method to take a column in a source row that has multiple values separated by a comma and import them as individual field values.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/R7tm5XhaMf1VkK0TMrSDnAfKyGro8-HgTbjsphJ9QV8.jpg.jpg</video:thumbnail_loc><video:duration>665</video:duration><video:publication_date>2013-10-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-migrate-stubs</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create Migrate Stubs</video:title><video:description>The infamous causality dilemma of the chicken and the egg examines which of the two came first constantly battling with the fact that you need one to produce the other. It&#039;s a vicious circle. In this lesson we&#039;re going to explore this dilemma in the context of data migrations. Imagine a scenario where you&#039;ve got an article node type that has a reference field for similar articles which you need to populate with the node ID of the similar articles. During a migration when the article is being imported the article that is being referenced may or may not exist already. If it doesn&#039;t exist already how do we know what ID we need to put into the reference field?

One option would be to solve this problem using multiple passes. A first pass that goes through and creates all the articles, and a second that comes back through and updates the similar articles field. Though what happens if the similar articles field is required? You wouldn&#039;t be able to save the article without a value in that field the first time around? So you see how this quickly becomes another example of the chicken or the egg problem?

Lucky for us the migrate module has a solution to this called stub migrations. A process that allows creating a stub or a shell for the referenced but not yet created article so that we can use it&#039;s unique ID, then when that article is encountered in the migration it will update the stub rather than create a new article.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/node/1013506&quot;&gt;Migrate stub documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-eDyNZxHvivpJFgXw03Dl-uK2KQmvef2M3lZDPS8EAk.jpg.jpg</video:thumbnail_loc><video:duration>631</video:duration><video:publication_date>2013-10-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/migrate-source-classes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Migrate Source Classes</video:title><video:description>&lt;p&gt;So far all the data we&amp;#39;ve been migrating has come from a MySQL database but Migrate supports a number of other data sources which we can access by using a different source migration class. In this lesson we&amp;#39;ll look at the source migration classes that are available with the migrate module and talk about what each one could be used for. Then we&amp;#39;ll implement a migration that imports data from a CSV file since that&amp;#39;s another common way of receiving source data.&lt;/p&gt;
&lt;p&gt;For your convenience, we&amp;#39;ve included a copy of the sample data in the companion files. This is a duplicate of the data from lesson &lt;a href=&quot;http://drupalize.me/videos/set-migrate-demo-site-and-source-data&quot;&gt;Set Up Migrate Demo Site and Source Data&lt;/a&gt;. If you&amp;#39;ve been following the lessons in order, you should not need to download the sample data set again.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/1006986&quot;&gt;Migrate Source Class documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/1152158&quot;&gt;MigrateSourceCSV Class documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/migrate_extras&quot;&gt;Migrate Extras module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/oTYA7vJwrHhSp166iElNjKgxn2nC0lG2n1ujVgNEqec.jpg.jpg</video:thumbnail_loc><video:duration>1117</video:duration><video:publication_date>2013-10-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/migrate-destination-classes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Migrate Destination Classes</video:title><video:description>Up to this point we&#039;ve focused focused on creating nodes as the result of our migrations. The Migrate module however supports a number of different destinations that we can use when importing data. In this lesson we&#039;ll take a look at the destination classes that the Migrate module provides for us and talk about what each one is used for and where to find more information and examples of using them. Then we&#039;ll implement a migration that imports data as vocabulary terms using the MigrateDestinationTerm class.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/node/1006988&quot;&gt;Migrate Destination Classes documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4NlqQNHLfVuvPOr3s-yivOo_8XN5-UdPn7xQm0nHhJs.jpg.jpg</video:thumbnail_loc><video:duration>790</video:duration><video:publication_date>2013-10-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/strategies-resolving-migrate-failures</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Strategies for Resolving Migrate Failures</video:title><video:description>It&#039;s almost unheard of to write a data import that just works on the first try. Our examples have all been written using data that is known to be in good shape, and to be honest we&#039;ve avoided even trying to import some of the data because it ended up being problematic and we wanted to focus on working with the Migrate module and not debugging the problems in your source data. In the real world though, you&#039;re going to end up with problematic rows in your source data and you&#039;ll need to get them resolved.

In this lesson we&#039;ll run the complete player migration and end up with a couple of rows that fail to import because of an oversight in our code. We can use the migrate UI to get a sense of what is failing and why. Then we&#039;ll use a combination of options available to the drush migrate command and some strategically placed print_r&#039;s to debug and resolve the problem rows. Finally, we&#039;ll use a trick to get the Migrate module to re-import all the problem rows but not the already imported rows.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jpe6sOc3ut14Pd8Cqym4QT9ADOGr_cZUUgC70WHqtv8.jpg.jpg</video:thumbnail_loc><video:duration>741</video:duration><video:publication_date>2013-10-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/migrate-module-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Migrate Module Overview</video:title><video:description>&lt;p&gt;This lesson includes a short presentation that explains the basics terminology and architecture of the migrate module and the components that make up a custom data migration. We&amp;#39;ll talk about the Extract / Transform / Load process and how it relates to data migrations, the types of data sources that the migration module can read from, and a little bit about how the code in both the migrate module and our own custom migrations will be organized.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/node/1528934&quot;&gt;Migrate module architecture documentation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MANOBqv7bqL6AxGBy_Tu1zKGF0RH7Q2ht3Zld00Nz5A.jpg.jpg</video:thumbnail_loc><video:duration>664</video:duration><video:publication_date>2013-09-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-and-tour-migrate-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install and Tour Migrate Module</video:title><video:description>In this lesson we&#039;ll cover downloading and installing the Migrate module (version 7.x-2.6) and ensuring that our local environment is ready to be able to run migrations via both the UI and drush. Once that&#039;s setup we&#039;ll take a high level look at the migrate module&#039;s UI and drush commands to familiarize ourselves with the tools that we&#039;ll be using throughout the rest of the series. This will also help formalize some of concepts introduced in the previous lesson.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/migrate&quot;&gt;Migrate module project page&lt;/a&gt;
&lt;a href=&quot;https://drupal.org/node/2029049&quot;&gt;migrate-7.x-2.6-rc1 download&lt;/a&gt;
&lt;a href=&quot;https://drupal.org/node/415260&quot;&gt;Migrate module documentation&lt;/a&gt;
&lt;a href=&quot;http://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush series&lt;/a&gt;
&lt;a href=&quot;https://github.com/DrupalizeMe/drupal7-migrate-series-base&quot;&gt;Drupalize.Me Migrate module series code on GitHub&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/pV-ya9WMXcstJOzoAL6-EWx9vzWQ0gjMx5kXDTP99vA.jpg.jpg</video:thumbnail_loc><video:duration>746</video:duration><video:publication_date>2013-09-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-dates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-migrate-module-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title> Introduction to the Migrate Module Series</video:title><video:description>&lt;p&gt;This series is focused on using the &lt;a href=&quot;http://drupal.org/project/migrate&quot;&gt;Migrate module&lt;/a&gt; to import data that exists in various different sources into a Drupal 7 website. The Migrate module provides an extremely flexible and robust framework for accessing data from various sources and importing or migrating that data to Drupal. With built in support for creating core Drupal data types likes nodes, users, and taxonomy terms, the Migrate module is one of the best solutions available for importing content into Drupal.&lt;/p&gt;
&lt;p&gt;This series kicks off with Joe Shindelar explaining the basic components that make up a data migration, and the terminology and code that is specific to the Migrate module. Then continues with a series of lessons that take you from installing the Migrate module to writing and running your own custom data migration.&lt;/p&gt;
&lt;p&gt;Throughout the series Joe teaches us how to run a data migration using both the Migrate module&amp;#39;s UI and drush, and some of the plusses and minuses of both methods. Joe also talks about the various different sources, or types of data, from which the Migrate module can read data and how to map the unique fields in a row of source data to their corresponding Drupal content types and fields.&lt;/p&gt;
&lt;p&gt;By migrating from a single source into two different Drupal content types we&amp;#39;ll also have the opportunity to learn about creating relationships during a migration and mapping the resulting information to an entity reference field. During the course of writing a custom migration Joe will show us how and where we can add code to perform additional runtime data munging during our import process. We&amp;#39;ll learn about importing data into multi-value fields, and even providing defaults for fields that don&amp;#39;t have information. Then we&#039;ll look at some of the tools the migrate module provides for collaborating with team members in order to create a successful migration path.&lt;/p&gt;
&lt;p&gt;Finally we&amp;#39;ll wrap up the series by looking at a couple of different techniques for debugging our migrations and dealing with pesky source material that just doesn&amp;#39;t want to be imported.&lt;/p&gt;
&lt;p&gt;Because this series is focused primarily on writing custom data migrations, and since the Migrate module itself requires at least some amount of code to be written to perform a migration, it is suggested that students be familiar with PHP and basic Object Oriented Programming techniques. Although not required to run a migration, Joe uses the &lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;drush&lt;/a&gt; command line tool extensively in this series. If you need a refresher on using drush take a moment to watch our &lt;a href=&quot;http://drupalize.me/series/coding-drush-series&quot;&gt;drush series&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/migrate&quot;&gt;Migrate module — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ic0da3CyG0rjfW3cgZmQKqx0Qgn8IhRgDlrx_OjbIpU.jpg.jpg</video:thumbnail_loc><video:duration>370</video:duration><video:publication_date>2013-09-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/run-migrations-drush</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Run Migrations with Drush</video:title><video:description>In this lesson we&#039;ll take a look at running migrations via &lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;drush&lt;/a&gt; rather than via the Migrate module&#039;s UI. We&#039;ll take a look at the commands provided by the Migrate module and talk about what they do. Then we&#039;ll practice running, rolling back, and otherwise interacting with migrations via drush commands. Throughout the lesson we&#039;ll learn about some of the functionality you get from running migrations via drush that are not provided by the UI, like the ability to specify a single record to migrate with the &lt;code&gt;--idlist&lt;/code&gt; flag. Finally we&#039;ll learn about why in most cases drush is a better tool for running large data migrations because of the limitations imposed on the UI. Pay close attention to this lesson since throughout the remainder of this series we&#039;ll be running all of our migrations via drush.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;Drush project&lt;/a&gt;
&lt;a href=&quot;http://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush series&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UkjrH3DiSbWhrtFIjWk0wkvFsXCxQGOGTT39tUq6QGI.jpg.jpg</video:thumbnail_loc><video:duration>751</video:duration><video:publication_date>2013-09-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/run-migrations-migrate-ui</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Run Migrations with the Migrate UI</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;ll take a more in-depth look at the migrate module&amp;#39;s UI with a focus on being able to identify and execute custom migrations. For now we&amp;#39;ll work with the provided example migrations just so that we have something to work with. Throughout the lesson we&amp;#39;ll learn how to run a migration to import it&amp;#39;s data into Drupal, rollback a migration that was previously run in order to set a clean slate, and other ways we can interact with a migration via the UI. Then we&amp;#39;ll discuss some of the challenges inherit in running migrations via the UI and Drupal&amp;#39;s Batch API and how to identify them.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/node/1806824&quot;&gt;Why you should run migrations in Drush rather than the UI&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/node/1958170&quot;&gt;Running imports and rollbacks from the UI via drush&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/pAlx7mTvkYbuDiMIZRfS9exlo-W4Mb8l3onUsF2Fqbc.jpg.jpg</video:thumbnail_loc><video:duration>568</video:duration><video:publication_date>2013-09-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-more-dates-views-and-repeating-events</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/everything-you-wanted-know-about-dates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-4-media-management</loc><lastmod>2024-07-20T00:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/spotlight-image-styles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Image Styles</video:title><video:description>When you’re uploading photos to a website, it’s important to ensure that they are displayed at the right size. Otherwise, when you upload an exceptionally large image, chances are good that it will break your site’s layout. To prevent this, you’ll want to scale these images so that they’re a consistent size, and create thumbnails for use in listing pages. Image styles are a feature that’s part of Drupal core’s Image module, and it provides these options and many more for displaying images. In this lesson we&#039;ll get an overview of the core image styles feature so that we understand how it works, which styles and effects we have to work with, and some tips for troubleshooting when your images don&#039;t display properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/717772&quot;&gt;Clean URL documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MoZYUE_ps2y2Zzl70Qm19LyKLgpIoKvcpZ-nq2eoikQ.jpg.jpg</video:thumbnail_loc><video:duration>1096</video:duration><video:publication_date>2013-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/case-study-band-wagon</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Band Wagon</video:title><video:description>&lt;p&gt;In this lesson, we take a look at our Band Wagon case study, and then we&#039;ll go through our implementation plan and see how we&#039;re going to tackle this one. In our case study, John and Lisa decide to make a website to share information about all the music they love, including videos, photos and reviews, and they want their friends have a voice on the site as well.&lt;/p&gt;

&lt;p&gt;First of all, they need to be able to upload images to the site, and have an image that&#039;s small in one location but full-sized in other locations. We&#039;ll want to embed some videos, as well.&lt;/p&gt;

&lt;p&gt;Their friends don&#039;t know how to write HTML, so we let them use a simple form to select media, and maybe reuse other people&#039;s images. We want to provide them with a WYSIWYG tool bar, an editor that helps them write HTML without coding.&lt;/p&gt;

&lt;p&gt;How will this work? We&#039;ll use Drupal Core&#039;s Image Module and image styles, and expand the Media Module. For our WYSIWYG editor we&#039;re going to use the WYSIWYG Module, and then we&#039;re going to need to get an editor that we can plug into it.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tqtgav_8i2qXsri14gG0sw-CQtGgMI2s6tU2vq3NeAI.jpg.jpg</video:thumbnail_loc><video:duration>387</video:duration><video:publication_date>2013-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-image-styles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Image Styles</video:title><video:description>Before we can nicely publish our favorite bands’ photos on our website, we need to make sure to set up image styles, in order to create scaled-down versions of the images while leaving the original images intact. In this lesson we&#039;ll modify an existing image style to customize it, and also see how we can improve our image quality.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eBhDKpZ_dRyos0FBx8kxQ0KDHvft7OrUb1D8zNmoLU8.jpg.jpg</video:thumbnail_loc><video:duration>382</video:duration><video:publication_date>2013-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/cool-new-features-series</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/spotlight-media-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Media Module</video:title><video:description>The Media module for Drupal 7 solves a number of long-standing media-related problems in Drupal. At its core, Media provides a framework to manage media assets on a Drupal site, regardless of whether those assets exist on the site’s server or somewhere else on the Internet. Media has had much active development over time, and was a moving target when Using Drupal was written, so the latest version of Media is a fair bit different from the version we cover in this lesson, &quot;2.0-unstable3.&quot; Version 2 of Media is very, very different from version 1, which is a much older version. We highly recommend that you learn the fundamental pieces of Media 2.0 using the source code that comes with the book and is covered in the About the Using Drupal series. That will allow you to follow the lesson without getting lost in the changes. Then, when you upgrade to the latest version down the road, you will have a solid foundation to explore the newer versions.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/media&quot;&gt;Media Module project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FYoa7enJDtA6gVx-GLHHbAp2pV1OT-tqMpK31Ra1Aho.jpg.jpg</video:thumbnail_loc><video:duration>1085</video:duration><video:publication_date>2013-11-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-music-review-content-type</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Music Review Content Type</video:title><video:description>To get our music reviews built, we need to get started with a new content type. In this lesson we will get the basics in place by creating the new content type, with our main fields, and the ability to upload an image.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-9eIl1OijL7iSPdJgBpYY4oS98lP6752cH1O65Ij6vE.jpg.jpg</video:thumbnail_loc><video:duration>555</video:duration><video:publication_date>2013-11-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-displaying-media-files</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Displaying Media Files</video:title><video:description>&lt;p&gt;Now that users can post reviews on the Band Wagon site, we need to make sure that the content they publish, including their intro photos, is actually displayed correctly. To accomplish that, in this lesson, we&amp;#39;re going to configure the field display settings and apply image styles.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-zlydDeVVNSGgVAfQ6Xrw3FfBMAfixuE1knzbz8clPo.jpg.jpg</video:thumbnail_loc><video:duration>413</video:duration><video:publication_date>2013-11-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-content-editing-and-image-handling</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Content Editing and Image Handling</video:title><video:description>We now have a site with most of the basic functionality the Band Wagon project needs to start. However, one important piece remains: streamlining the content editing process, and allowing easy image and video integration in posts. In this lesson we will compare content editing tools and discuss how to integrate our media directly into the body of our content.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/bueditor&quot;&gt;BUEditor module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/markdown&quot;&gt;Markdown Filter module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5BVzEZeDhPzIOn_gh8a4m9fJ85r0hizWvP8Ay9lOog0.jpg.jpg</video:thumbnail_loc><video:duration>613</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-text-formats-and-filters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Text Formats and Filters</video:title><video:description>Text formats are an important security feature of Drupal, so it pays to understand them. A text format will &amp;ldquo;scan&amp;rdquo; your content and make HTML formatting changes to it before sending it to the browser for display. &amp;nbsp;In this lesson we&amp;#39;ll see what formats and filters are, and how they relate to each other, walk through the filter workflow, as well as reviewing the default formats that come with Drupal core.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fiHGbm09b9lrlAazZ7Cqzv3GNhILMKX2MldwWvWDJts.jpg.jpg</video:thumbnail_loc><video:duration>777</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-setting-wysiwyg</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Setting up WYSIWYG</video:title><video:description>Let&amp;rsquo;s set up the WYSYWIG editor for the Band Wagon website, using the WYSIWYG module and CKEditor. Note that if you prefer a different WYSIWYG editor, such as TinyMCE or Aloha, the installation instructions are very similar. In this lesson we&amp;#39;ll we&amp;#39;ll not only get WYSIWYG set up, but we&amp;#39;ll also enable the Media filter and integrate that with our WYSIWYG editor.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ldOD7Se4kjgVvRS83eahiS2WEs2jv7PBwMQDIJ1UT-s.jpg.jpg</video:thumbnail_loc><video:duration>492</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-media-internet-sources</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Media Internet Sources</video:title><video:description>The Media module for Drupal 7 not only supports adding and managing media that is uploaded from a user&amp;rsquo;s computer into Drupal, but it also comes with a submodule, called Media Internet Sources, that allows using media assets from various Internet locations. In this lesson we&amp;#39;ll look at what media internet sources can do for us and quickly explain what stream wrappers are and how they relate to what we want to do on the site.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org/node/168009&quot;&gt;Modules that extend Media&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YZQDu0zQiEjbWCMPAvyUXwAO21Nxtcf50GXuXa6oqX8.jpg.jpg</video:thumbnail_loc><video:duration>347</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-posting-videos</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Posting Videos</video:title><video:description>Because we already the Media module installed, it&amp;rsquo;s really easy to enable support to post videos from YouTube on the Band Wagon site. In this lesson we&amp;#39;ll enable Media Internet Services and Media: YouTube modules, and make sure everything is working properly to embed a YouTube video into our content.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/media&quot;&gt;Media module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/media_youtube&quot;&gt;Media: YouTube module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/puGV2Eq-1fOGvNXhgBSuWPzizR8RlehFgJOtVL-ScGw.jpg.jpg</video:thumbnail_loc><video:duration>201</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-media-management-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Media Management Further</video:title><video:description>&lt;p&gt;If you&amp;rsquo;ve completed the Band Wagon site to this point, you&amp;rsquo;ve built a solid foundation for a Drupal-based music fan site that provides the main features we wanted. In this lesson we&amp;#39;ll look at some more modules to explore, and how they could enhance the site we&amp;#39;ve created:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/project/views_slideshow&quot;&gt;Views Slideshow&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/project/fivestar&quot;&gt;Fivestar&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/project/service_links&quot;&gt;Service Links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/views_slideshow&quot;&gt;Views Slideshow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/fivestar&quot;&gt;Fivestar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/service_links&quot;&gt;Service Links&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.drupal.org/node/168009&quot;&gt;Modules that extend Media&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ibkv_EW_5bMWSTmNkQrtbP6oMvTZjhJ4cTKrFPIZ9gQ.jpg.jpg</video:thumbnail_loc><video:duration>212</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/media-management-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Media Management Summary</video:title><video:description>We&amp;#39;ve built a nice site for John and Lisa that meets their needs, and has them happily uploading photos and videos to their site. In this lesson we&amp;#39;ll tour the Band Wagon site, walking through how we addressed our implementation points, and then wrap up with a review of the modules we used and referenced during the series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-5&quot;&gt;Using Drupal Chapter 5: Product Reviews&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/y0lly0lpMIZRVsD1oTBMQ0TzZuqAYTa6iKnEocleoS0.jpg.jpg</video:thumbnail_loc><video:duration>834</video:duration><video:publication_date>2013-11-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-release-wednesday-final-site-building-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/psd-drupal-theme</loc><lastmod>2024-07-19T23:09Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/psd-theme-introduction</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>PSD to Theme Introduction</video:title><video:description>&lt;p&gt;Emma Jane Westby introduces the series. In this series, you&#039;ll learn how to transform a static design file into a whole Drupal theme. We&#039;ll work through three major steps.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; Develop a style guide based on the design patterns we see in our design files.&lt;/li&gt;
&lt;li&gt; Build out Drupal so that it has all of the elements we need in place.&lt;/li&gt;
&lt;li&gt; Work with theming files to decorate Drupal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Additional Resources&lt;/h3&gt;
&lt;p&gt;In addition to the lessons in this series, Emma has assembled an &lt;a href=&quot;/psd-theme-faq&quot;&gt;extensive FAQ on Drupal theming&lt;/a&gt;.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/g8jQpsL3m7GmLs6Vtqe68-3QCeZ5UkDKA6PiiRGD52I.jpg.jpg</video:thumbnail_loc><video:duration>133</video:duration><video:publication_date>2013-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-domicile-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to the Domicile Theme</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;ll take a tour of the theme you&amp;#39;ll be building. The design we&amp;#39;ll be working with was created by Betty Bisenthal. It&amp;#39;s a fairly simple design with three columns and a banner image. It has been used as a starting point for several years by many people who are learning to theme. In this lesson we&amp;#39;ll take a look at:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the design we&amp;#39;ll be working with&lt;/li&gt;
	&lt;li&gt;variations of this design created by other students&lt;/li&gt;
	&lt;li&gt;how Drupal was customized to accommodate our design&lt;/li&gt;
	&lt;li&gt;the Sass used to create the layout for the site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you&amp;#39;ll be able to describe the shape of the design used throughout this series, and identify variants of the design.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/domicile&quot;&gt;Domicile theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/ninesixty&quot;&gt;Nine Sixty base theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kidactive.ca&quot;&gt;KidActive site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://digitisethedawn.org/&quot;&gt;Digitise the Dawn&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4cZimDSLbJ7R_9PN_XWc_Qyu3mL5dGEKEmDLLGXfznE.jpg.jpg</video:thumbnail_loc><video:duration>277</video:duration><video:publication_date>2013-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theming-component</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theming by Component</video:title><video:description>&lt;p&gt;In this lesson we&amp;#39;re going to learn about the front end development strategy of theming by components. This strategy relies on being able to break a design into individual components. Elsewhere on the Web this technique has been described as &amp;ldquo;atomic design&amp;rdquo; or &amp;ldquo;interface pattern pairing&amp;rdquo;. No matter what you call it, developing a pattern library of components is going to make it a lot easier to convert your design to a theme. This is an overview lesson that explains the strategy we&amp;#39;ll be using in future lessons. More specifically, we&amp;#39;ll look at:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;two popular pattern libraries&lt;/li&gt;
	&lt;li&gt;an overview of how pages are built by Drupal so they can be rendered in a browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you&amp;#39;ll be able to identify components from a static design file by referencing a pattern library.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://bradfrostweb.com/blog/post/atomic-web-design/&quot;&gt;Atomic Design&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://smacss.com/&quot;&gt;SMACSS&lt;/a&gt; (Scalable and Modular Architecture for CSS)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://balsamiq.com/&quot;&gt;Balsamiq Mockups&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IMvSuqrIJw5FwOOZ0q0DhQXqDxX-4ifo8yDdcdx3Wd0.jpg.jpg</video:thumbnail_loc><video:duration>481</video:duration><video:publication_date>2013-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-theme-style-guide</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Theme Style Guide</video:title><video:description>&lt;p&gt;Over the last couple of years we&amp;#39;ve seen the rise of object oriented CSS. There&amp;#39;s been a lot of work done by smart folks to categorize different types of rules that we use to style our sites. We&amp;#39;re going to take advantage of this work and use it to create a style guide. This foundation piece will help us to map the elements in our static design to the elements that we will build, and theme, in Drupal.In this lesson we&amp;#39;ll create a style guide from our design with:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Base rules&lt;/li&gt;
	&lt;li&gt;Layout rules&lt;/li&gt;
	&lt;li&gt;Component rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you will be able to create a text-based style guide of your design which accurately describes your site according to base rules, layout rules, and component rules. You will be able to further supplement this style guide by adding relevant images which reference the exact component the style guide is describing.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Fk1lhXx2jg_VqZaP2FNmKdzDhY6ulniUgHyCjjKYCPE.jpg.jpg</video:thumbnail_loc><video:duration>764</video:duration><video:publication_date>2013-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/extract-design-assets</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Extract Design Assets</video:title><video:description>&lt;p&gt;In the previous lesson you created a text-based style guide. It&amp;#39;s now time to extract the necessary assets from our static design for use in our theme. To complete this lesson you will need a design application capable of opening a .psd file. The video demonstrates Photoshop, but I typically use Gimp. Either is fine. And if you don&amp;#39;t have a graphics program, you can watch the video, but simply download the assets which were extracted during the lesson. By the end of this lesson you will be able to identify page-level design assets which need to be extracted from a design file for your Drupal theme.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gimp.org/&quot;&gt;Gimp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.photoshop.com/&quot;&gt;Photoshop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.pixelmator.com/&quot;&gt;Pixelmator&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/j8DJd7ZZxGEAaTdy--VaMYe0cTQ2Da5h5BuF_vVuyDg.jpg.jpg</video:thumbnail_loc><video:duration>488</video:duration><video:publication_date>2013-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-css-stub-files</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create CSS Stub Files</video:title><video:description>&lt;p&gt;In this lesson we will convert the style guide into a series of stubs which we can view in a Web browser. The design was originally created using the templates from the &lt;a href=&quot;http://960.gs/&quot;&gt;960gs&lt;/a&gt;. We&amp;#39;ll use this same grid framework to ensure all of our margins are automatically adopted. Grid frameworks are excellent for rapid prototyping of designs. Ultimately many front end developers choose choose to write their own for the final theme; however, if you&amp;#39;re just getting started try to stick with a grid framework to reduce the number of things that you need to fight with.&lt;/p&gt;
&lt;p&gt;The original theme that was created for this design used the &lt;a href=&quot;https://drupal.org/project/ninesixty&quot;&gt;NineSixty base theme&lt;/a&gt;. There are some nifty features in this theme which are great for more complex designs; however, it is not responsive, and does not use Sass. To bring the lessons up-to-date we&amp;#39;ll be using the 960-Compass Plugin to generate our stub files and give us some sample Sass output to work with.&lt;/p&gt;
&lt;p&gt;By the end of this lesson you will be able to convert a style guide to a series of stub files in Sass (or CSS) using SMACSS conventions and a grid framework.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://smacss.com&quot;&gt;SMACSS&lt;/a&gt; (Scalable and Modular Architecture for CSS)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://960.gs&quot;&gt;960gs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/nextmat/compass-960-plugin&quot;&gt;960-Compass-Plugin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/series/learning-sass-and-compass&quot;&gt;Intro to Sass and Compass&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yPby9krXWqopCKshh94bhDXfeX6rc7PrI8EmyIcqw1I.jpg.jpg</video:thumbnail_loc><video:duration>1500</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/layout-rules-css-stubs</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Layout Rules for CSS Stubs</video:title><video:description>&lt;p&gt;In SMACSS there are both major and minor layout rules that need to be created. The major layout rules are often handled by a grid framework and are used to describe big areas on your site, such as your Drupal regions. The minor rules are used for the components (for example how a picture aligns next to a paragraph of text). In this lesson we&amp;#39;ll start by review how Sass allows us to use semantic naming for our CSS layout classes. Then we&amp;#39;ll adapt the sample Sass provided by the &lt;a href=&quot;https://github.com/nextmat/compass-960-plugin&quot;&gt;960 Compass Plugin&lt;/a&gt; so that it uses the necessary structure for our design.&lt;/p&gt;
&lt;p&gt;By the end of this lesson, you will be able to implement the layout rules from your style guide as a Sass file using the 960 Compass Plugin as a reference.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://960.gs&quot;&gt;960gs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/drupal&quot;&gt;Domicile Theme&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ghwUkA4i3pNw5RCOheoSkK9nBBSdD714Rr4JWpGVpGc.jpg.jpg</video:thumbnail_loc><video:duration>503</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-checklist-drupal-elements</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Checklist of Drupal Elements</video:title><video:description>&lt;p&gt;The final step before we step back into Drupal is to create a checklist for all the things we need to implement in Drupal. Using our style guide as a starting point, we&amp;#39;ll ensure that every design decision which has been made can be implemented in Drupal. Your checklist might also include notes about which modules should be used to build each of the components from within Drupal. Creating a checklist might seem like a trivial task, but it&amp;#39;s really important that you know exactly what you&amp;#39;re about to build so that you don&amp;#39;t get overwhelmed once you step into Drupal. By the end of this lesson you should be able to create a document with all the instructions, and notes you will need to apply your style guide to a Drupal site.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Cc_td5IkeWz7OBYWvV6F8D0OUwMcDUdmla1x_s_LweU.jpg.jpg</video:thumbnail_loc><video:duration>386</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/prepare-drupal-theming</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Prepare Drupal for Theming</video:title><video:description>&lt;p&gt;Technically a theme can be installed onto any Drupal site, but it never quite works this way in real life. In this lesson we&amp;#39;ll create a playground so that we can try out our theme before deploying it to a live server. We&amp;#39;ll start by installing Drupal and adding some &amp;ldquo;fake&amp;rdquo; content and menus with the devel generate module. For these tasks we&amp;#39;ll use Drupal&amp;#39;s default theme, Bartik. By the end of this lesson you will be able to install Drupal in an environment where a development version of the theme can be safely tested.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/devel&quot;&gt;Devel module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YhWOSXORsSllI373ipFbCD-8LV4Pyt_KkafX680goEQ.jpg.jpg</video:thumbnail_loc><video:duration>376</video:duration><video:publication_date>2014-01-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-site-building-blocks-and-themes</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/customize-image-styles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customize Image Styles</video:title><video:description>&lt;p&gt;One of the most time consuming things a content editor can be forced to do is resize images before creating their content. Fortunately we can get Drupal to do the resizing for us. It&amp;#39;s not perfect&amp;mdash;it&amp;#39;s just a plain resize, but it&amp;#39;s enough for most basic sites. By the end of this lesson, you will be able to configure Drupal to resize images to your specification when they are uploaded using the image field type.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7aoQE0roFBsyszh4GhNALdrdKdGZh1KD1QStqWfdDsc.jpg.jpg</video:thumbnail_loc><video:duration>535</video:duration><video:publication_date>2014-01-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-and-place-custom-blocks</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create and Place Custom Blocks</video:title><video:description>&lt;p&gt;It&amp;#39;s pretty typical for a site to have one or two pieces of content that need to be easily edited, but also aren&amp;#39;t nodes. For example: text in the footer. There are a number of ways to create this content. We&amp;#39;ll use blocks to create this content as this is the easiest way to place content into a specific region without additional helper module. By the end of this lesson you will be able to create custom blocks, and place them into specific regions within your Drupal theme.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xr1RTohu_rHom1EDaBnjPZFEbKSB78lmrfIo9vtegPU.jpg.jpg</video:thumbnail_loc><video:duration>259</video:duration><video:publication_date>2014-01-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-theme-infrastructure</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create the Theme Infrastructure</video:title><video:description>&lt;p&gt;A base theme is someone&amp;#39;s idea of a really great starting point. It might include the stub files for CSS overrides, template files which bring Drupal core&amp;#39;s markup up-to-date with HTML5, useful theme overrides which create new template variables. In other words: a base theme can provide you with a lot of really great stuff! The first version of the Domicile Theme used the NineSixty base theme&amp;mdash;just enough for a simple site, but not so much overhead that it was complicated to learn. This version of the theme doesn&amp;#39;t use a base theme. That&amp;#39;s because, thanks to Sass, we&amp;#39;ll be able to get almost all of the power of the NineSixty base theme through a gem plug-in. In this lesson you will learn which folders are typically used to keep Drupal themes neat and tidy.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_XIW4ud_itcIHMI5__0jGLoLcvJlvyiYlAJvbUxqokE.jpg.jpg</video:thumbnail_loc><video:duration>155</video:duration><video:publication_date>2014-01-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/prepare-theme-info-file</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Prepare the Theme Info File</video:title><video:description>&lt;p&gt;A theme is comprised of a collection of related files. Our completed theme will have CSS and PHP (with HTML fragments). To ensure all of these files are loaded, we need to tell Drupal where to find them, by listing the files in the theme&amp;#39;s .info file. To begin working with our theme&amp;#39;s info file we&amp;#39;ll start with the only values which are required: name, version of Drupal core this theme can be applied to. We&amp;#39;ll also add a few recommended pieces of information: description of the theme, the template engine, and a screen shot for easier selection of the theme from the administrative area. By the end of this lesson, you will be able to create an info file for a theme, and explore the relevant drupal.org handbook pages for more information on refining your theme&amp;#39;s info file.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FY9m1dNs3z1WxMZ4LqjApKI3Wc8uURpNdY9G4dtgCMA.jpg.jpg</video:thumbnail_loc><video:duration>260</video:duration><video:publication_date>2014-01-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/incorporate-style-guide-stubs-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Incorporate Style Guide Stubs into the Theme</video:title><video:description>&lt;p&gt;Our main focus for the Domicile theme is restyling Drupal&amp;#39;s markup with CSS. Although it is tempting to put all of your CSS into a single file, things can quickly grow out of control. In our theme we&amp;#39;ll break our CSS into smaller stub files to make the theme easier to maintain using the file naming conventions for Drupal 8.By the end of this lesson you will be able to incorporate CSS files into your theme via the theme&amp;#39;s .info file.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/node/1887922&quot;&gt;CSS file organization&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lNXwUqKRG9R5VHQSblzzYt-JlFJO0E7XvwWkS16L6FE.jpg.jpg</video:thumbnail_loc><video:duration>329</video:duration><video:publication_date>2014-01-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/establish-page-layout-structure-pagetplphp</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Establish Page Layout Structure with page.tpl.php</video:title><video:description>&lt;p&gt;Drupal uses a series of nested template files to build out the rendered HTML pages we see in our browser. The template file page.tpl.php holds markup between &amp;lt;body&amp;gt; and &amp;lt;/body&amp;gt; tags. We talked about the nested nature of template files in Lesson 3: &lt;a href=&quot;https://drupalize.me/videos/theming-component&quot;&gt;Theming by Component&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this lesson we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;create the file page.tpl.php&lt;/li&gt;
	&lt;li&gt;add the relevant markup, and CSS classes for our grid framework&lt;/li&gt;
	&lt;li&gt;insert relevant PHP variables so that Drupal can render each of its page components.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you will be able to create, or adapt, a page.tpl.php file to suit the conventions you identified in your style guide.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KPNAFnfktaupI-IWPQBfUBY1dKTaqG-71TJrFgvto0w.jpg.jpg</video:thumbnail_loc><video:duration>1148</video:duration><video:publication_date>2014-01-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/insert-site-wide-components-pagetplphp</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Insert Site-Wide Components into page.tpl.php</video:title><video:description>&lt;p&gt;Designs often have a few elements which don&amp;#39;t need to be easily edited and can essentially be &amp;quot;hard wired&amp;quot; into the template files. In our design there are three or four images which fall into this category. In this lesson we&amp;#39;ll edit the page.tpl.php file to insert our design assets from Lesson 5: &lt;a href=&quot;https://drupalize.me/videos/extract-design-assets&quot;&gt;Extract Design Assets&lt;/a&gt;. By the end of this lesson you will know which variables can be used in a template file to ensure the correct directory is always used for hard-coded image files.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/L5anqEdVuXrCjjefqrnPv4PJvnd1KPiW43qXkiZJmdI.jpg.jpg</video:thumbnail_loc><video:duration>396</video:duration><video:publication_date>2014-01-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-your-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Your Theme</video:title><video:description>&lt;p&gt;It&amp;#39;s always smart to do your development work in a local environment, but eventually you will need to upload your theme your server. In this lesson we&amp;#39;ll upload our theme to our web server using &lt;a href=&quot;https://filezilla-project.org/&quot;&gt;Filezilla&lt;/a&gt;. By the end of this lesson you will know which folder your theme needs to be uploaded to, and at least one application suitable for uploading files.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://filezilla-project.org/&quot;&gt;Filezilla&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9ZA0Xv_qgTKUOTuQr6mzdXOuzoknQ485umVwJjOsX58.jpg.jpg</video:thumbnail_loc><video:duration>202</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/enable-your-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Enable Your Theme</video:title><video:description>&lt;p&gt;Once your theme is uploaded you still need to enable it before it will be applied to your site. By the end of this lesson you will be able to enable new themes for your Drupal site.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yErOP60TbU1kIahLcuccq4v0toON19K6NCl3yHF3a_A.jpg.jpg</video:thumbnail_loc><video:duration>95</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/identify-and-theme-components</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Identify and Theme Components</video:title><video:description>&lt;p&gt;Once all of the elements are in place, it&amp;#39;s time to get down to the real work of theming the components. In this lesson we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;use our style guide and checklist to find each component&lt;/li&gt;
	&lt;li&gt;check to see if the style looks &amp;quot;right&amp;quot;&lt;/li&gt;
	&lt;li&gt;troubleshoot broken styles so that each component looks as good as the designer&amp;#39;s original, static files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you will be able to identify elements on a rendered Drupal page which do not have the correct styles applied, determine the source of the problem, and alter the markup or styles to correct the output displayed in a browser.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Y9LLV2gIj1UGUZkwMG1A-YofFF9pCiM4mzYwJgHa8HU.jpg.jpg</video:thumbnail_loc><video:duration>600</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalizeme-video-could-change-your-life</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/review-completed-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Review the Completed Theme</video:title><video:description>&lt;p&gt;To go from design to theme we worked through three major steps: building a style guide; building out Drupal; and finally applying the style guide to Drupal. In this lesson we&amp;#39;ll review each of the steps outlined in this learning series:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;creating a style guide with base rules, layout rules, and component rules&lt;/li&gt;
	&lt;li&gt;extracting design assets&lt;/li&gt;
	&lt;li&gt;configuring Drupal&lt;/li&gt;
	&lt;li&gt;creating theme files&lt;/li&gt;
	&lt;li&gt;debugging components from within Drupal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you will be able to outline the process needed to transform a static design file into a functional Drupal theme.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/m7HRwxEoQyDuhWuLq5Bg7vhO440BrGmanBOLHF_CXL0.jpg.jpg</video:thumbnail_loc><video:duration>813</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/next-steps-your-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Next Steps for Your Theme</video:title><video:description>&lt;p&gt;This learning series covered just the tip of the theming iceberg. Hopefully you&amp;#39;re now feeling motivated to learn even more about theming. In this lesson we will review some of the other topics you will want to explore next including: advanced theming techniques, using a base theme, such as Omega, layout modules. By the end of this lesson you will by able to identify which videos you should (or could) watch next to learn more about theming Drupal.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C8TNXhJ-erdiljTd9WYEqETRDQhkFfkdoe2NeFCHqxA.jpg.jpg</video:thumbnail_loc><video:duration>298</video:duration><video:publication_date>2013-12-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/webform-basics</loc><lastmod>2024-07-23T19:17Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/more-site-building-content-taxonomy-views-and-menus</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-why-use-webform</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction: Why Use Webform?</video:title><video:description>In this series, Amber will show you how she gathered her wedding invitation responses on a Drupal site using Webform module. You&amp;#39;ll learn how to:
&lt;ul&gt;
&lt;li&gt;Collect data from users&lt;/li&gt;
&lt;li&gt;Build common types of form fields (including text fields, numeric inputs, and radio button option lists)&lt;/li&gt;
&lt;li&gt;View, export, and analyze those responses&lt;/li&gt;
&lt;li&gt;Automatically email responses as they&amp;#39;re submitted&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Understanding the basics of Webform empowers you to create your own custom forms such as surveys, feedback forms or your very own RSVP form. Dive in and learn the basics of Webform.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/t4cFVgHuNRll3PfHL5SzBjX77xwz5Ff9Yay6FqN3gFQ.jpg.jpg</video:thumbnail_loc><video:duration>55</video:duration><video:publication_date>2014-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-and-creating-webform-nodes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring and Creating Webform Nodes</video:title><video:description> this lesson, we&amp;#39;ll configure Webform content type defaults and add our first Webform node.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/webform&quot;&gt;Webform module on drupal.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/videos/installing-and-enabling-modules-drupal-7&quot;&gt;Installing and enabling modules in Drupal 7&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/bx4zFUS635DvWTQXCmvxBjkxmGqKsEznNuxECaGHscc.jpg.jpg</video:thumbnail_loc><video:duration>222</video:duration><video:publication_date>2014-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-components-form</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Components to the Form</video:title><video:description>Now that we&amp;#39;ve created a webform node for our form to live, it&amp;#39;s time to build the form itself and add the form fields that we&amp;#39;ll use to collect responses. In this lesson, we&amp;#39;ll add a textfield, select options and number inputs. We&amp;#39;ll begin by taking a closer look at the webform in its final state to better understand where we&amp;#39;re going, then we&amp;#39;ll return to the webform node we created in lesson 2 and we&amp;#39;ll add each form component, step-by-step.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kZHPKhNCVM-XrvJbyEe2l3t50ixjqokmxrJPjvj9IrI.jpg.jpg</video:thumbnail_loc><video:duration>909</video:duration><video:publication_date>2014-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-email-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring Email Settings</video:title><video:description>&lt;p&gt;In this lesson, we&amp;#39;ll configure email settings for the RSVP form. We&amp;#39;ll go over the different email header options and customize the default message template, using special tokens that Webform module provides.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yXNmmHiWXGHEHAQ5Vf1RFfua2Ny4vxAjZxJGnx2RoVU.jpg.jpg</video:thumbnail_loc><video:duration>409</video:duration><video:publication_date>2014-02-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/understanding-webform-form-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Understanding Webform Form Settings</video:title><video:description>&lt;p&gt;In this lesson, we&amp;#39;ll get a grasp on the form settings of our webform node. We&amp;#39;ll explore submission settings, form access by role, and advanced settings and we&amp;#39;ll take a quick look at some of the contexts in which these advanced settings apply, for example multipage forms.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iWNFgk79SLZDa_oWF7sNKlDPWFOCOSFgFqR6QQHLIwY.jpg.jpg</video:thumbnail_loc><video:duration>820</video:duration><video:publication_date>2014-02-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-webform-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring Webform Permissions</video:title><video:description>&lt;p&gt;So far we&amp;#39;ve been looking at Webform from an administrator&amp;#39;s point of view. Now it&amp;#39;s time to take a step back and look at Webform from the perspective of anonymous users. We want to make sure that our users can do what we&amp;#39;re asking and we&amp;#39;re not creating security vulnerabilities. In this lesson, we&amp;#39;ll configure permissions for our Webform case study.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tDW8ylGmLxGVphQIL8k-UVHC-ylk_I8dbhjtk5tn6Ow.jpg.jpg</video:thumbnail_loc><video:duration>656</video:duration><video:publication_date>2014-02-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-spam-protection-using-honeypot</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Spam Protection Using Honeypot</video:title><video:description>In this lesson we&#039;ll add spam protection to our webforms using Honeypot module. We&#039;ll also take a second look at setting submission limits as a strategy for thwarting form submission abuse.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.jeffgeerling.com/blogs/jeff-geerling/introducing-honeypot-form-spam&quot;&gt;Introducing the Honeypot form spam protection module for Drupal&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HOzTSvFSS26JYb6yBgO9QrveTNWhvRz31a4yaZiUQS0.jpg.jpg</video:thumbnail_loc><video:duration>477</video:duration><video:publication_date>2014-02-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/managing-results-webform</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Managing Results with Webform</video:title><video:description>&lt;p&gt;In this lesson, we&amp;#39;ll explore the Results tab of our webform where we can view user submissions, get a basic analysis of our data, view the results as a table, download the results as a delimited text or Excel file, and clear all results.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yNxWqvhS3_q1qdQRVZpzYq9ggu-WTTUdUlvriLm8tUM.jpg.jpg</video:thumbnail_loc><video:duration>498</video:duration><video:publication_date>2014-02-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/conclusion-webform-basics</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Conclusion: Webform Basics</video:title><video:description>&lt;p&gt;Amber wraps up the series and takes a look back at what we covered in Webform Basics &amp;mdash; from downloading and installing Webform module to building our form to analyzing the results.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/K8VFoDFm1t930c2leNUMLL95KXHCGaIjm2-Bq60xrkA.jpg.jpg</video:thumbnail_loc><video:duration>169</video:duration><video:publication_date>2014-02-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/global-webform-settings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Global Webform Settings</video:title><video:description>&lt;p&gt;In this lesson, we&#039;ll go over Webform&#039;s Global Settings. We&#039;ll learn how to attach forms and questionnaires to other content types besides the Webform content type. We&#039;ll discover how we can limit the list of available form components, set email header defaults, and take a look at the advanced options in Webform&#039;s global configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt; Webform settings are no longer set globally as described in this video. Instead you configure settings per content type. Go to Structure &amp;gt; Content Types and select the content type to edit. You can enable Webform for a content type in its edit form.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/h4uCUf6hQ87cEcryotCUUgz2LRtmN9lIPlMiRmjB_xY.jpg.jpg</video:thumbnail_loc><video:duration>416</video:duration><video:publication_date>2014-02-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/plan-helping-new-drupal-contributors</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/building-web-services-drupal-7</loc><lastmod>2024-07-23T19:19Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-building-services-drupal-7-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Building Services with Drupal 7 Series</video:title><video:description>&lt;p&gt;Web services, APIs, and structured data are all the rage right now, and with good reason. As more and more internet enabled devices start wanting to make use of the data in our websites, we need to give them some way to interact with that data that isn&amp;#39;t point and click in a browser. Enter the &lt;a href=&quot;https://drupal.org/project/services&quot;&gt;Drupal 7 services module&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this series Joe Shindelar will walk through  the services module and teach you how to create a RESTful web services API that exposes Drupal&amp;#39;s internal data like nodes and users as JSON or XML. This paves the way for a huge variety of clients using a number of programming languages to  access the data contained within your Drupal site, from native mobile applications and partner websites to internet enabled refrigerators. &lt;/p&gt;
&lt;p&gt;The first few lessons in the series are focused more on theory. They explain the various terms that are used both in Drupal and the wider web development sphere to describe web services and all their components. Joe  describes  REST itself and  explains  why it&amp;#39;s a good fit, and discusses  Drupal 7&amp;#39;s content model and the ways that it lends itself nicely to serializing data into various formats via the services module in order to be consumed in structured and meaningful ways.&lt;/p&gt;
&lt;p&gt;Throughout the series we&amp;#39;ll see a couple of examples of how to first enable Drupal to return requested data elements as JSON and then subsequently how to properly format an HTTP request to retrieve those elements. Joe will demonstrate making requests to the API via both cURL and the Chrome REST Console. This demonstration will help students to learn about both the Drupal configuration that is required and the way in which any third party applications can request data from Drupal via concrete examples.&lt;/p&gt;
&lt;p&gt;With the basics of creating an endpoint and making simple requests out of the way, Joe will demonstrate how to enable authentication via the services module and then use both cURL and the REST Console to explain the authentication handshake: a somewhat complex exchange of a username and password for a session authentication token that takes place in HTTP requests and headers whenever you want to perform an action via the API that requires an authenticated user. This will enable to you create third party applications that can access Drupal as a specific user, allowing for greater personalization.&lt;/p&gt;
&lt;p&gt;After that, Joe looks at ways to integrate the lists that site administrators create using the &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;views module&lt;/a&gt; with services in order to output their contents as structured data, as well as ways to use views to create entirely new custom services resources, followed by an example of leveraging the power of views exposed filters via services.&lt;/p&gt;
&lt;p&gt;Finally, for those scenarios where you simply can&amp;#39;t point and click your way to an answer, Joe will teach you how to implement your own custom services resources for both saving and retrieving data from within Drupal, demonstrating the basic knowledge required to allow you to use services to solve all of your own custom API needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Things you&amp;#39;ll be able to do after completion of this series:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Understand the basic principles of both web services and RESTful APIs.&lt;/li&gt;
	&lt;li&gt;Explain why Drupal is a good fit for web applications that want to allow third party clients to access their data.&lt;/li&gt;
	&lt;li&gt;Create a RESTful web services API using the services module for Drupal 7.&lt;/li&gt;
	&lt;li&gt;Retrieve data from your Drupal site in both JSON and XML format.&lt;/li&gt;
	&lt;li&gt;Create new nodes in Drupal via web services.&lt;/li&gt;
	&lt;li&gt;Make authenticated requests to Drupal via web serivces.&lt;/li&gt;
	&lt;li&gt;Integrate the views module with services to retrieve views data in various formats.&lt;/li&gt;
	&lt;li&gt;Write your own module providing custom services data and actions.&lt;/li&gt;
	&lt;li&gt;Create meaningful documentation that will enable others to take advantage of your newly created service.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This series provides information about the services module for both intermediate and advanced Drupal users. Since this module makes use of &lt;a href=&quot;series/site-building-drupal-7-series&quot;&gt;basic Drupal site building&lt;/a&gt; skills and &lt;a href=&quot;series/module-development-drupal-7&quot;&gt;custom views&lt;/a&gt;, users should be familiar with those topics. Also, while not required, knowledge of running commands via the &lt;a href=&quot;series/command-line-basics-series&quot;&gt;command line&lt;/a&gt; will be helpful. Finally, if you want to write your own custom services resources you&amp;#39;ll need to understand &lt;a href=&quot;series/module-development-drupal-7&quot;&gt;basic module development&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/services&quot;&gt;Drupal 7 services module&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IpcFmKn7BLeYxy2-4Bygq_-2kj78exKQ9gqllUtPg0g.jpg.jpg</video:thumbnail_loc><video:duration>375</video:duration><video:publication_date>2014-03-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-are-web-services-1</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What are Web Services?</video:title><video:description>&lt;p&gt;This lesson covers what an API is and why you might want to build one. Joe also explains the basic concepts behind any API and provides real world examples of existing APIs that you&amp;#39;re probably familiar with as well as use cases for when and why you might want to build your own.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HCHKEYMafOvSeZmGvIWAGBSOfuLXefp1s3qD8xkIito.jpg.jpg</video:thumbnail_loc><video:duration>841</video:duration><video:publication_date>2014-03-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-services-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing the Services Module</video:title><video:description>&lt;p&gt;In this lesson Joe shows you where to locate the services module and it&amp;#39;s documentation. Then walks through installing the services module and confirming that it&amp;#39;s working. Followed by a quick overview of the module&amp;#39;s codebase and a general overview of what the services module provides.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/services&quot;&gt;Services Module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1ipg7TUgID1IRPWNnKjty9f6x02H-NYSfAnWyshZH1I.jpg.jpg</video:thumbnail_loc><video:duration>585</video:duration><video:publication_date>2014-03-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-rest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is REST?</video:title><video:description>&lt;p&gt;The API that we&amp;#39;re going to be building through this series is a REST based API so we need to understand the basic tenants of RESTful web services. In this lesson Joe gives a short presentation explaining the basic terminology, workflow, and tennants of REST based web services.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://restcookbook.com/&quot;&gt;The RESTful Cookbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm&quot;&gt;Roy Fielding&amp;#39;s REST dissertation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lRPNvBh10ekORVjz_-LgG511C-GrznVEeTnYZ7NOE3o.jpg.jpg</video:thumbnail_loc><video:duration>873</video:duration><video:publication_date>2014-03-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-endpoint</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding an Endpoint</video:title><video:description>&lt;p&gt;This lesson walks through defining the URL that will serve as the endpoint for your API as well as all the basic configuration for your new services endpoint with the exception of resource configuration which is covered in the following lesson.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/node/783236&quot;&gt;Setting up a basic endpoint&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yCwA6FKgPD6VOgWIA50phwihRa-kIFoWWOcbVFVUaIA.jpg.jpg</video:thumbnail_loc><video:duration>469</video:duration><video:publication_date>2014-03-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/enabling-resources</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Enabling Resources</video:title><video:description>&lt;p&gt;The services module exposes most of Drupal core&amp;#39;s data as resources and provides CRUD operations and additional actions for each. In this lesson Joe will look at the available resources, talk about the various CRUD operations and actions and then enable the node resource and demonstrate retrieving node data as JSON from the services endpoint.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/callumlocke/json-formatter&quot;&gt;JSON Formatter&lt;/a&gt; - Chrome plugin to display results of a JSON request in a nicer way.&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PQfH6MKCyu0XTahVDyjTNl_4DMb8DMizyU5FDOlD9G4.jpg.jpg</video:thumbnail_loc><video:duration>675</video:duration><video:publication_date>2014-03-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/testing-resources-curl</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Testing Resources with cURL</video:title><video:description>&lt;p&gt;While cURL may not be the simplest way to interact with a REST API it is the most ubiquitous and the one that is most often referenced in documentation through the web. So to ensure that students have at least a baseline of understanding, and will know how to read the documentation in the future, in this lesson Joe takes a quick look at how to test our API with cURL by retrieving, and creating data.&lt;/p&gt;
&lt;h3&gt;Example Commands:&lt;/h3&gt;
&lt;p&gt;`curl http://localhost/demos/services-7x/docroot/api/v1/node/1`&lt;/p&gt;
&lt;p&gt;`curl --data &amp;#39;{&amp;quot;title&amp;quot;:&amp;quot;hello world!&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;page&amp;quot;}&amp;#39; --header &amp;quot;Content-Type:application/json&amp;quot; http://localhost/demos/services-7x/docroot/api/v1/node`&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://curl.haxx.se/&quot;&gt;cURL Website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://curl.haxx.se/docs/httpscripting.html&quot;&gt;cURL Scripting Documentation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dUuUL3uIP5LzVdY2mKJMMFu7XULCIe1QiJj_seBW14E.jpg.jpg</video:thumbnail_loc><video:duration>771</video:duration><video:publication_date>2014-03-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/testing-resources-chrome-rest-console-plugin</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Testing Resources with the Chrome REST Console Plugin</video:title><video:description>&lt;p&gt;Instead of using the CLI to test our API we can use the powerful Chrome REST Console plugin instead. This provides a nice GUI and makes it a little easier to both test and understand what is going on. In this lesson Joe looks at installing the plugin and making basic requests to our API using the REST Console interface.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

The Chrome plugin demonstrated in this video is no longer available but there are many alternatives available. Use &lt;a href=&quot;https://www.getpostman.com/downloads/&quot;&gt;Postman&lt;/a&gt; or search for &quot;REST client&quot; to find tooling options.
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/drKX4Mg2DxiuhVCzpNv1f_laL4x_wHqdpCjkH7UIl9k.jpg.jpg</video:thumbnail_loc><video:duration>709</video:duration><video:publication_date>2014-03-26</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-parameters-and-arguments-resources</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Parameters and Arguments with Resources</video:title><video:description>&lt;p&gt;In this lesson Joe will demontrate using additional parameters and arguments to refine the returned data when making requests from our API. As well as walking through the code that shows where the various parameters are defined and how you can find what options are available. Finally, we install the services tools module which provides some additional documentation.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/services_tools&quot;&gt;Services Tools&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I23EJPNbZdbqaMKPr_9UOrSvKzoZxmM0fR5N6lKTq6g.jpg.jpg</video:thumbnail_loc><video:duration>748</video:duration><video:publication_date>2014-04-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/altering-response-object</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Altering the Response Object</video:title><video:description>&lt;p&gt;Services implements resources for all of core&amp;#39;s basic data types but sometimes the information returned in the response is either to much or to little and we want to make changes to the response data. In this lesson Joe will look at how we can write a simple custom module that implments basic hooks provided by the services module to allow us to alter the response returned by a request to the node resource.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QGmcDOKEXs7NrXeIWfGPb0-igV7iQ57lhYvsClrJOJE.jpg.jpg</video:thumbnail_loc><video:duration>879</video:duration><video:publication_date>2014-04-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-services-authenticated-requests</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring Services for Authenticated Requests</video:title><video:description>&lt;p&gt;Most of the actions we want to perform and data we want to retrieve from an API is likely restricted to authenticated users. This lesson will outline the process of making an authenticated request and walk the user through the configuration that is required for our services endpoint in order to start allowing session based authentication.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9Uia0Gs5G4uyp9gg62bLkqHwNCzPKYEA7jyMLQSJPhQ.jpg.jpg</video:thumbnail_loc><video:duration>558</video:duration><video:publication_date>2014-04-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/making-authenticated-requests-curl</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Making Authenticated Requests with cURL</video:title><video:description>&lt;p&gt;In this lesson Joe walks through making authenticated requests to our API with cURL. Although cURL can be a bit verbose when making authenticated requests it serves as a good way to talk about all the headers that are a required and a lowest common denominator for how you could accomplish authentication in just about any language or application.&lt;/p&gt;

&lt;h3&gt;Example commands&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;curl http://services-demo.lan/api/v1/user/login -d &#039;{&quot;name&quot;:&quot;admin&quot;,&quot;pass&quot;:&quot;admin&quot;}&#039; -H &quot;Content-type: application/json&quot; -H &quot;Accept: application/json&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl http://services-demo.lan/api/v1/system/connect -X POST&lt;/code&gt;
&lt;p&gt;&lt;code&gt;curl http://services-demo.lan/api/v1/system/connect -H &quot;Cookie: SESS60f8c5b86739b7e326223b4ef35867b2=A86XHGJWlnDcMOGcArbOT-qHrsIi5P2NrcoNTXwWluw&quot;  -H &quot;X-CSRF-Token: T77haXwD7JKOJsBlKP3p3kLbjQO96bQWvGJAE1_PUZM&quot; -X POST&lt;/code&gt;
&lt;p&gt;&lt;code&gt;curl http://services-demo.lan/api/v1/user/login -X POST -H &quot;Content-type: application/json&quot; -H &quot;Accept: application/json&quot;&lt;/code&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4LBPZq66Q-t1qoKqc6Csdc4-XZrc6A6HA16eXDeXWTA.jpg.jpg</video:thumbnail_loc><video:duration>480</video:duration><video:publication_date>2014-04-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/making-authenticated-requests-rest-console</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Making Authenticated Requests with the REST Console</video:title><video:description>&lt;p&gt;In this lesson Joe walks through making authenticated requests using the Chrome REST Console Plugin&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

The Chrome plugin demonstrated in this video is no longer available but there are many alternatives available. Use &lt;a href=&quot;https://www.getpostman.com/downloads/&quot;&gt;Postman&lt;/a&gt; or search for &quot;REST client&quot; to find tooling options.
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6d-0Er1FtsO-S7ZkcyzREpTxvon0zK81MSITJia3JLk.jpg.jpg</video:thumbnail_loc><video:duration>366</video:duration><video:publication_date>2014-04-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-views-services</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Views with Services</video:title><video:description>&lt;p class=&quot;message warning&quot;&gt;&lt;strong&gt;Security note:&lt;/strong&gt; As of Services Views 7.x-1.3 it is recommend that you only use the module to create services using the &quot;Services&quot; display method described in the 2nd 1/2 of this video. &lt;a href=&quot;https://www.drupal.org/project/services_views/issues/2900460&quot;&gt;You can read more about this change here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All the power of views made available to your API. Really, what else is there to say? In this lesson Joe walks through installation and basic configuration of the services views module which provides the ability to expose views as resources via the services module.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/services_views&quot;&gt;Services Views Module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UowozIFHDXe3mQyPi5AuC8cOT52OF2soyNUHXgxstBo.jpg.jpg</video:thumbnail_loc><video:duration>722</video:duration><video:publication_date>2014-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/our-local-web-server-videos-are-now-free</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/services-and-views-filters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Services and Views Filters</video:title><video:description>&lt;p&gt;In addition to using views to expose lists of things via our API we can also take advantage of views exposed filters to allow API consumers more control over the data they are receiving in a request. In this lesson Joe looks at accessing views exposed filters via REST requests by adding an exposed filter to both of the perviously created views and then walking through how the configuration of the view changes the behavior of the filter when used via the services API.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aVvahXGf8tKfFd107iakC6kC-O6JqJpyQFdB1yO3MPA.jpg.jpg</video:thumbnail_loc><video:duration>479</video:duration><video:publication_date>2014-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-custom-services-resource</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing a Custom Services Resource</video:title><video:description>&lt;p&gt;In addition to the built in support for core&amp;#39;s data and actions the services module also provides a robust framework for exposing the data and actions of our custom modules as an API. In this lesson Joe writes a basic module which creates a custom resource for saving and retrieving a &amp;quot;checked in&amp;quot; status for an authenticated user.&lt;/p&gt;
&lt;h3&gt;Example commands:&lt;/h3&gt;
&lt;h4&gt;Check a user&amp;#39;s status&lt;/h4&gt;
&lt;code&gt;curl http://localhost/demos/services-7x-test/docroot/api/v1/drupalsquare/1 -H &quot;Accept: application/json&quot;&lt;/code&gt;

&lt;h4&gt;Check-in a user&lt;/h4&gt;
&lt;code&gt;curl http://localhost/demos/services-7x-test/docroot/api/v1/drupalsquare/checkin -X POST -H &quot;Content-type: application/json&quot; -H &quot;Accept: application/json&quot; -d &#039;{&quot;uid&quot;:1}&#039;&lt;/code&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/node/783460&quot;&gt;Creating a resoruce for Services 3.x&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6VZTS8r8ni9Th1dakWU-WXGZbvzDQlICiazcFnNNIHc.jpg.jpg</video:thumbnail_loc><video:duration>1454</video:duration><video:publication_date>2014-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/documenting-your-api</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Documenting Your API</video:title><video:description>&lt;p&gt;An API that exposes data and actions to a 3rd party is only as good as the documentation for that API. Without good documentation no one will be able to make use of the API you just spent so much energy creating. In this lesson Joe shows some of his favorite API documentation examples and then walks through creating some basic documentation for the resource we created in the previous lesson.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;Example - &lt;a href=&quot;http://developer.github.com/v3/&quot;&gt;GitHub API Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Example - &lt;a href=&quot;https://docs.recurly.com/api/basics&quot;&gt;Recurly Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://apiary.io/&quot;&gt;http://apiary.io&lt;/a&gt; - tool to assit in writing good documentation&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OQHbYFUBFwYA6UJeSncaDFkOb0PHFcEDls2g14YNSSc.jpg.jpg</video:thumbnail_loc><video:duration>789</video:duration><video:publication_date>2014-04-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalizeme-live-denver-colorado</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-5-product-reviews</loc><lastmod>2024-07-03T00:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-super-duper-chefs</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Super Duper Chefs</video:title><video:description>&lt;p&gt;With so much information, and so many products, on the web today, people often want to get an opinion to help rank and rate things. Should I buy this widget? Should I watch this movie? In this series, we&amp;rsquo;re going to use a handful of Drupal modules to build a product review website that lets community members give their opinions, along with a way to rate their review as well. To kick things off, in this lesson we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Review the Super Duper Chefs case study&lt;/li&gt;
	&lt;li&gt;Discuss our implementation&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DbZR7-0g6-p_HmY6MbZ5VrL3Kg0pcfO4B5d_f4dR7Cc.jpg.jpg</video:thumbnail_loc><video:duration>569</video:duration><video:publication_date>2014-05-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-basic-product-reviews</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Basic Product Reviews</video:title><video:description>&lt;p&gt;To get started, we&amp;#39;ll need to create a content type to use for our product reviews. Based on the Super Duper Chefs requirements, in this lesson we&amp;#39;ll:&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create the Product Review Content Type&lt;/li&gt;
	&lt;li&gt;Add a Field group&lt;/li&gt;
	&lt;li&gt;Set permissions&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/frXPb8LAIkA6TNuk-HzTlMh4xG9GlFaaGYqiLr8-5n8.jpg.jpg</video:thumbnail_loc><video:duration>396</video:duration><video:publication_date>2014-05-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-amazon-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Amazon Module</video:title><video:description>&lt;p&gt;Amazon.com is one of a large number of web-based businesses that have opened up their product information databases for other sites to access. In the case of Super Duper Chefs, we want to retrieve useful data like product photos, pricing, and manufacturer information for display on our own website. The Amazon module for Drupal allows us to do just that. In this lesson we&amp;#39;ll take a look at the Amazon module, by starting with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What&amp;rsquo;s Included?&lt;/li&gt;
&lt;li&gt;Locale&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Referral settings&lt;/li&gt;
&lt;li&gt;Amazon keys&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/QhXYbuTEiAaaGwVfnB7hVjYQW7wefstQzer0HfvbH9A.jpg.jpg</video:thumbnail_loc><video:duration>478</video:duration><video:publication_date>2014-05-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-adding-amazon-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Adding an Amazon Field</video:title><video:description>&lt;p&gt;In a previous lesson in this series, we set up a content type for our product reviews. Now, we&amp;rsquo;re ready to add a field to store a link to the product on Amazon.com. In this lesson we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Enable and configure the Amazon module&lt;/li&gt;
	&lt;li&gt;Get our Amazon key&lt;/li&gt;
	&lt;li&gt;Add the Product Field&lt;/li&gt;
&lt;/ul&gt;

&lt;strong&gt;Note that Amazon changes the way they manage keys over time, so the way they are generated in the lesson may have changed. Please review the official &lt;a href=&quot;http://docs.aws.amazon.com/AWSECommerceService/latest/DG/becomingDev.html&quot;&gt;AWS Product Advertising API documentation&lt;/a&gt; for current key generation instructions.&lt;/strong&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zROvYN9UCGqwe8h4mbXySyztIPf-lV70dgH6pudKM44.jpg.jpg</video:thumbnail_loc><video:duration>529</video:duration><video:publication_date>2014-05-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-voting-api-and-fivestar</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Voting API and Fivestar</video:title><video:description>&lt;p&gt;Giving visitors a chance to evaluate and rate content is an extremely common pattern on content-rich websites. In addition to giving visitors a way to jump to the best content, it can give you a way to determine what content on your site is most effective. In this lesson we&amp;#39;ll discuss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voting API module&lt;/li&gt;
&lt;li&gt;Fivestar module&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/votingapi&quot;&gt;Voting API module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/fivestar&quot;&gt;Fivestar module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XCrdEaLRyMCmIVJKZAZBCB6NA4_ShAQVaPbVO0ptWgQ.jpg.jpg</video:thumbnail_loc><video:duration>243</video:duration><video:publication_date>2014-05-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-adding-fivestar-ratings</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Adding Fivestar Ratings</video:title><video:description>&lt;p&gt;For the Super Duper Chefs site, we&amp;rsquo;ll be using both of the Fivestar module&amp;rsquo;s unique features: adding a static Rating field to the &amp;ldquo;Product review&amp;rdquo; content type for the editors to use, and attaching a voting widget to the comment form on each review for the site readers to use. That approach will keep the official rating on each review separate from the reader ratings. In this lesson we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Add the Product Rating Field&lt;/li&gt;
	&lt;li&gt;Add the Reader Rating Field&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-EupxFTX2QgHIzETNhCer9qgOyyjYmZAjmonA_S6pHI.jpg.jpg</video:thumbnail_loc><video:duration>390</video:duration><video:publication_date>2014-05-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-css-injector-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: CSS Injector Module</video:title><video:description>&lt;p&gt;Drupal&amp;rsquo;s theming system gives designers complete control over how a site&amp;rsquo;s content is rendered for a web browser, and custom themes can give any site a distinctive look. But sometimes it&amp;rsquo;s useful to make minor tweaks to a site&amp;rsquo;s appearance using nothing but CSS rules. They allow designers to tweak font sizes, colors, and so on without altering the underlying HTML that defines the site&amp;rsquo;s structure. In this lesson we&amp;#39;ll look at:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;CSS Injector module&lt;/li&gt;
	&lt;li&gt;Explain how this works&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/css_injector&quot;&gt;CSS Injector module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0FDMsItgMukMm2KDNQ-_YFZ0AIcUfqsmRhUj8cWycc4.jpg.jpg</video:thumbnail_loc><video:duration>285</video:duration><video:publication_date>2014-05-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-polishing-product-review</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Polishing the Product Review</video:title><video:description>&lt;p&gt;Although our &amp;ldquo;Product review&amp;rdquo; content type has all of the data we need, the individual reviews still look a bit untidy. In this lesson, we&amp;rsquo;ll do some final tweaking to make the review display look nice and tidy.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting Field Display Options&lt;/li&gt;
&lt;li&gt;Configuring CSS Injector&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I8DpK2MHvw5xKhXJyeyxwIPsGtArYcVzr28iMsL7qfM.jpg.jpg</video:thumbnail_loc><video:duration>518</video:duration><video:publication_date>2014-05-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-building-product-list</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Building a Product List</video:title><video:description>&lt;p&gt;Now that we have a few products, we really ought to add a listing page that lets visitors look over all of the products that have been reviewed, comparing official ratings with visitor ratings and sorting by various criteria. This is a perfect job for Views. In this lesson:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create a Product Finder view&lt;/li&gt;
	&lt;li&gt;Display Amazon information&lt;/li&gt;
	&lt;li&gt;Display voting results&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/q-uajmWnxRuIBTwbIaPKfaL7E8rTWMiczZCNFWZwReI.jpg.jpg</video:thumbnail_loc><video:duration>668</video:duration><video:publication_date>2014-05-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-search-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Search Module</video:title><video:description>&lt;p&gt;Drupal&amp;rsquo;s built-in Search module offers powerful, flexible searching features and intelligent ranking of results. Behind the scenes, it&amp;rsquo;s silently building an index of all the words used in the site&amp;rsquo;s content. In this lesson we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the Search module settings&lt;/li&gt;
&lt;li&gt;Explain the importance of cron&lt;/li&gt;
&lt;li&gt;Discuss searching with Views&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/elnd_TLwp0QeJh6DRV4H73rGgkiSawcbbWbk8kSBIZI.jpg.jpg</video:thumbnail_loc><video:duration>573</video:duration><video:publication_date>2014-06-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-make-product-list-view-searchable</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Make the Product List View Searchable</video:title><video:description>&lt;p&gt;To transform the Product Finder page into a searchable index, we&amp;rsquo;ll be adding two new filters to the view: one that restricts the results by manufacturer, and another that restricts results to reviews that mention specific words. In this lesson, we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Add a filter&lt;/li&gt;
	&lt;li&gt;Expose a filter&lt;/li&gt;
	&lt;li&gt;Set permissions&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jLfFmGhqSRvFrjwINJGBGyKKWXcIM9MVoRP0CX02DeE.jpg.jpg</video:thumbnail_loc><video:duration>296</video:duration><video:publication_date>2014-05-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/rewriting-views-field-output</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Rewriting Views Field Output</video:title><video:description>&lt;p&gt;We&amp;rsquo;re almost done! The only problem with our view now is that clicking the titles in the view links to Amazon.com instead of to our own website. Fortunately, Views provides a handy trick for just this sort of situation; we can &amp;ldquo;rewrite&amp;rdquo; the output of the Title field to create a link back to its referring node instead. In this lesson, we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Exclude a field from display&lt;/li&gt;
	&lt;li&gt;Rewrite the output of a field&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1UcS6a5bKQ1fPinNNYNMoO5QoMQks16qSOIBw1fK74k.jpg.jpg</video:thumbnail_loc><video:duration>382</video:duration><video:publication_date>2014-06-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-product-reviews-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Product Reviews Further</video:title><video:description>&lt;p&gt;You&amp;#39;ve built the site that Bob and Sarah need to get their reviews going, but as always, there are ways to add more neat features. In this lesson, we&amp;#39;ll look at a few modules you can look at adding down the road&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;AdSense&lt;/li&gt;
	&lt;li&gt;Display Suite&lt;/li&gt;
	&lt;li&gt;Blog (core)&lt;/li&gt;
	&lt;li&gt;Recipe&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/c23p0nXoofXxJ1vBfoinOLmpggItz4-OHljbzIOV36E.jpg.jpg</video:thumbnail_loc><video:duration>324</video:duration><video:publication_date>2014-06-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/product-review-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Product Review Summary</video:title><video:description>&lt;p&gt;We&amp;rsquo;ve hit all of the major pieces of functionality that Bob and Sarah wanted. In this summary, we&amp;#39;ll:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Tour the Super Duper Chefs site&lt;/li&gt;
	&lt;li&gt;Discuss our implementation points&lt;/li&gt;
	&lt;li&gt;Review modules and resources&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-6-event-management&quot;&gt;Using Drupal Chapter 6: Event Management&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/enzTq3Xk8HYD_-btjuD9iRn--mICkmljoKF-yW1uIX0.jpg.jpg</video:thumbnail_loc><video:duration>653</video:duration><video:publication_date>2014-06-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-6-event-management</loc><lastmod>2024-07-03T00:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-aurora-book-club</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Aurora Book Club</video:title><video:description>&lt;p&gt;To kick off this series, we&amp;#39;re going to take a look at the needs for our project. Our client is the Aurora Book Club, and they need a way to track events along with who is attending the events. In this lesson, we&amp;#39;ll discuss the requirements, and how we&amp;#39;ll implement them. We&amp;#39;ll also be taking a tour of the finished site so we can see where we&amp;#39;re headed. At the end of this lesson you should understand what the target site is that we will be building.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KM2BlKFoU1xQVBmc7t8GoHgJ7ZnumEfqEXCUh0_653I.jpg.jpg</video:thumbnail_loc><video:duration>397</video:duration><video:publication_date>2014-06-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-first-steps</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: First Steps</video:title><video:description>&lt;p&gt;To get things started we need to create a new, basic content type just for events. We just need the event name and description along with an easy way to add the event location. In this lesson, we&amp;#39;ll create the content type and set up our permissions.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/p8QWDSYti7No2D-subwgdaJopiPKUAcQ0C2P3tZ410A.jpg.jpg</video:thumbnail_loc><video:duration>162</video:duration><video:publication_date>2014-06-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-date-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Date Module</video:title><video:description>&lt;p&gt;The main building block for the site is our new Event content type. The information that we need it to provide us with is &amp;ldquo;where&amp;rdquo; and &amp;ldquo;when.&amp;rdquo; We have taken care of the &amp;ldquo;where&amp;rdquo; part in our initial setup, and the Date module helps us answer the &amp;ldquo;when&amp;rdquo; question, in an incredibly flexible manner. Our main interest in the Date module is the ability to add a field to our Event content type to indicate date and time. However, looking at the Date module more closely, there are a few extra pieces worth noting. In this lesson we&amp;#39;ll get a good overview of what the Date module provides by looking at Submodules, Field Types, Form Elements, and Field Settings.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/pO82xfYv6dQMpVwSXugEWSy5Ku1a-7VZwoFrvDZk4dY.jpg.jpg</video:thumbnail_loc><video:duration>1386</video:duration><video:publication_date>2014-06-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-adding-dates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Adding Dates</video:title><video:description>&lt;p&gt;Now that we have our basic Event content type set up, we&amp;#39;ll enhance it by adding a date field, so that members may schedule meetings. In this lesson, we&amp;#39;ll add and configure our new date field, and then create a new event to test it all out.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4-fGXgHaEOFbjRYc7OESLT7zirWRiCmpyZIkEykzZsA.jpg.jpg</video:thumbnail_loc><video:duration>378</video:duration><video:publication_date>2014-06-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-upcoming-events-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Upcoming Events View</video:title><video:description>&lt;p&gt;Now that we&amp;rsquo;ve created our Event content type and started adding content to the site, we need to tackle the Upcoming Events list requirement. This will allow members to quickly see the meetings happening in the coming days or weeks. To achieve this, we will use the Views module to create a block for the sidebar. Our view will show published events where the event&amp;rsquo;s time field is in the future, and we&amp;#39;ll sort it chronologically so the next event is at the top of the list. &amp;nbsp;We&amp;#39;ll get to learn more about the Date Views filter to accomplish our task.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/z0zvcKhOV0s8piMAJs9_M7A-0wt4093vAsfAIFHwKwM.jpg.jpg</video:thumbnail_loc><video:duration>395</video:duration><video:publication_date>2014-06-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-calendar-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Calendar Module</video:title><video:description>&lt;p&gt;Although a simple list of upcoming events is very useful, our site has additional requirements for the display of the event data. As is extremely common for event management websites, this site needs an interactive calendar for browsing through past and future events. We need a classic monthly calendar view, along with a day and week views so people can see the calendar in the format they are used to seeing. We also want people to be able to download the calendar and use it in other calendar applications if they&amp;#39;d like. We&amp;#39;re going to implement this feature using the Calendar module in conjunction with Views. In this lesson we&amp;#39;ll get an overview of how the Calendar module can help us by taking a look at the Calendar View Type, along with the handy built-in iCal Integration.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9SYw9Sj8lGrBgzLSbbUKNyqdJLvrBQcaxyTaSe7QT_k.jpg.jpg</video:thumbnail_loc><video:duration>237</video:duration><video:publication_date>2014-06-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-calendar-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Calendar View</video:title><video:description>&lt;p&gt;We have our Upcoming Events block, but now we need to build out our full calendar. Although this is potentially a daunting task, involving many tables and many variations for the display (week, month, etc.), the Calendar module conveniently comes with a default view that handles most of the difficult bits for us. In this lesson we&amp;#39;ll clone the Calendar default view to give us a good starting place, and alter the view to suit our needs.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6NiAkw_IVPHdKJi3tPEzFEc03hTkLuM2SFooSBhDBMk.jpg.jpg</video:thumbnail_loc><video:duration>330</video:duration><video:publication_date>2014-06-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-flag-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Flag Module</video:title><video:description>&lt;p&gt;The Flag module is an incredibly flexible module that allows you to create relationships between users and/or content on your site. After you create a flag, an item can be marked a few different ways, and we can use that information in our views. In this lesson we&amp;#39;ll get an overview of Flag by looking at the various flag settings and seeing how flag works in action.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gSDW500uu13UOr4GanjxWqW2PzT5htWU2qA3Wa__6yU.jpg.jpg</video:thumbnail_loc><video:duration>565</video:duration><video:publication_date>2014-06-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-flag-configuration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Flag Configuration</video:title><video:description>&lt;p&gt;We&amp;#39;re almost done with our site, but we still need to have some way for people to indicate if they are coming to an event. In this lesson we&amp;#39;ll enable and configure an Attendance flag, adding it to our Event content type. Once we have it all set up we will flag an event to see how it works in action.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0kJk5k-XAorBfb1HULEgwQM5FHcFGfxK4NjmRmZgnCY.jpg.jpg</video:thumbnail_loc><video:duration>350</video:duration><video:publication_date>2014-06-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-attendee-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Attendee View</video:title><video:description>&lt;p&gt;We now have events and people can mark if they are going or not, and the final piece to wrap this project up is to get a list of those attendees for an event. We&amp;#39;re going to use Views again to handle this for us. In this lesson we&amp;#39;re going to create a new View for attendees, and using relationships and contextual filters, we&amp;#39;ll make sure it only lists the attendees for a specific event. With that in place, we&amp;#39;ll add the view as a tab to the Event nodes so you can quickly and easily see who is attending that event as you navigate through the content.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-GAbMArpeOIi89CTRoxGs19iLOjBU-EJ7IkpYK4AtjY.jpg.jpg</video:thumbnail_loc><video:duration>471</video:duration><video:publication_date>2014-06-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-event-management-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Event Management Further</video:title><video:description>&lt;p&gt;The site we have built covers all of the needs for the club. Down the road, the members may want to spruce things up a bit. In this lesson we&amp;#39;ll look at a few modules that could round out the site even more:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/fullcalendar&quot;&gt;Full Calendar&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/countdown&quot;&gt;Countdown&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Flag Actions (part of &lt;a href=&quot;https://www.drupal.org/project/flag&quot;&gt;Flag&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/openlayers&quot;&gt;OpenLayers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/a54Zkv8JU3a7Zl3JcK2exlmXym_ZDVwH7uyAM07saT0.jpg.jpg</video:thumbnail_loc><video:duration>232</video:duration><video:publication_date>2014-06-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/event-management-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Event Management Summary</video:title><video:description>&lt;p&gt;In this chapter, we have looked at building an event management site for the Aurora Book Club, making use of the Date field, the Calendar plug-in for Views, and the Flag module for handling attendance. The book club now has a handy calendar that is displayed on the site and available in iCal format. They also have an easy-to-find list of all the attendees for each event. The site is simple and easy to use, yet fits all of the club&amp;rsquo;s needs quite nicely. In this summary we&amp;#39;ll take a t&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;our of the Aurora Book Club site to see what we&amp;#39;ve built, and discuss our implementation points. Then we&amp;#39;ll wrap up with a quick review of of modules we talked about in this series.&lt;/span&gt;&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-7-managing-publishing-workflows&quot;&gt;Using Drupal Chapter 7: Managing Publishing Workflows&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YpbnaFgQw8AyBA5_95hlrTMLEd7-eakOu-y-qAwOU-I.jpg.jpg</video:thumbnail_loc><video:duration>873</video:duration><video:publication_date>2014-06-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-7-managing-publishing-workflows</loc><lastmod>2024-07-03T00:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-our-media</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Our Media</video:title><video:description>When many people are involved in your site publication workflow, things can get complicated quickly. In this series, we’ll build out a full editorial workflow process for a new site.

In this lesson, we&#039;re going to look at the use case -- what is the project that we&#039;re building, and what are the requirements that we need to meet? Then we’ll discuss which contributed modules and aspects of the core we’ll use to meet the needs of our client in this use case. We’ll set up editorial teams so each team can work on its own section, and allow administrators to change the default publishing settings for each content type. We’ll use different parts of the Workbench module to help us ease this entire workflow that we need, and create roles and users who only have access to specific topics.




&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VjQOYQuclhux1dRENHMv3b3mn8CPfUqmWFP2RpXVEhY.jpg.jpg</video:thumbnail_loc><video:duration>455</video:duration><video:publication_date>2014-07-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-taxonomy</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Taxonomy</video:title><video:description>&lt;p&gt;One of the basic tools for any news site, and most sites with a lot of content generally, is taxonomy. Taxonomy may sound like a big, fancy word, but it&amp;rsquo;s just a technical term for a way of organizing and classifying things, like content on a website. If you&amp;rsquo;ve sorted your family photo album, filed your email in folders, or argued with a friend about whether a band is punk or ska, you&amp;rsquo;ve already worked with taxonomies! If a site has a lot of content, editors need a way to group it into categories. By doing so, they make it possible for users to easily navigate the website and find the content they&amp;rsquo;re looking for. Additionally, assigning content to categories, whether by using a predefined set of sections or a free-for-all tagging system, opens up all sorts of interesting possibilities. For instance, site builders can expose content with similar tags on article pages. Or they can turn the category pages into rich landing pages, pulling in all kinds of different content that has the same categories assigned to it. In this lesson we will cover the basic things you need to understand about Drupal taxonomies: vocabularies, terms, and how to use them with content types.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9-wGBEYhiCds6VkmkknGMwS_25fQBGT7W-bsaPZ0REw.jpg.jpg</video:thumbnail_loc><video:duration>485</video:duration><video:publication_date>2014-07-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-categorizing-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Categorizing Content</video:title><video:description>&lt;p&gt;The Taxonomy module is included in core and is enabled by default when you install Drupal, along with a Tags vocabulary, which you can use to allow users to freely tag their content. In this lesson, we&amp;#39;ll create a new vocabulary, populate it with the terms we need, and then add the vocabulary to our article content type.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OalE_q43a1w6c0_vEkwR9eYpzoX6sV591OkFxAM0n3s.jpg.jpg</video:thumbnail_loc><video:duration>486</video:duration><video:publication_date>2014-07-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-pathauto</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Pathauto</video:title><video:description>&lt;p&gt;In the Drupal Jumpstart series, you learned about Drupal paths and how to use clean URLs. One reason to use clean URLs is so that they don&amp;rsquo;t look so ugly. That helps, but still leaves the URLs lacking a bit. Having a URL with node/123 in it doesn&amp;rsquo;t really tell either humans or search engines much about the page itself. Isn&amp;rsquo;t it much better to have a URL with something like &amp;quot;article/new-moon-discovered&amp;quot; in it? That will be much more memorable, and the addition of pertinent keywords in the URL makes for better search engine optimization. In this lesson we&amp;#39;ll look at a module that helps us automate this process, Pathauto. We&amp;#39;ll get an overview of core path aliases, and how pathauto patterns and replacement tokens work.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HPrIE_WWzLiVW3Qx7aIzN78dQE76iAZvd_TDwf5iNUI.jpg.jpg</video:thumbnail_loc><video:duration>579</video:duration><video:publication_date>2014-07-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-automating-url-aliases</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Automating URL Aliases</video:title><video:description>&lt;p&gt;To get those handy human-readable URLs on our site, we are going to use the Pathauto module. As we discussed earlier, this relies on the Token module as well as the core Path module. The Pathauto settings are divided over two pages: one page to set up the actual replacement patterns, and another one to configure Pathauto&amp;rsquo;s general settings. These configuration pages can seem a bit intimidating at first. Luckily, most of the defaults are what most sites will want to use anyway, so that makes our job with configuration a lot simpler than it may first appear. In this lesson we&amp;#39;ll configure some path patterns using tokens, and then get all of our existing content using the new patterns by using the bulk update feature of Pathauto.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zT2yCE5MHlTb1A_udDRgs8saFK_6J6rvRdx3QQdtTrA.jpg.jpg</video:thumbnail_loc><video:duration>412</video:duration><video:publication_date>2014-07-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-workbench</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Workbench</video:title><video:description>&lt;p&gt;We need to create an editorial process for our site, which can seem complex at first. We need to provide some form of access control, so that editors who are responsible for the &amp;ldquo;culture&amp;rdquo; section on the site can only see draft articles in that particular section. On top of that, we need an editorial workflow that integrates with that access control feature so the editors can control which content is in which state at any given time. Lucky for us, Workbench provides exactly what we need. In this lesson we&amp;#39;ll get an overview of what comes in the Workbench project and get a look at the main My Workbench page.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dZUQsNF3FTQaBC1pioaP7XgD3RQU8hCoY-7pm_w3tIE.jpg.jpg</video:thumbnail_loc><video:duration>383</video:duration><video:publication_date>2014-07-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-creating-editorial-work-spaces</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Creating Editorial Work Spaces</video:title><video:description>&lt;p&gt;We have a lot of work to do to set up our editorial workflow. In this lesson, we&amp;rsquo;ll focus on getting the basics started, and continue with the more advanced work in future lessons. In this lesson we&amp;#39;ll enable the main Workbench module, and configure the permissions. Then we&amp;#39;ll take a quick look at the My Workbench area to make sure we have it set up correctly.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UKcNKS0gHiT0LHuFRlqDE5aWj_mvSljqb1vwifWwe2k.jpg.jpg</video:thumbnail_loc><video:duration>177</video:duration><video:publication_date>2014-07-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-generating-sample-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Generating Sample Content</video:title><video:description>&lt;p&gt;Since we haven&amp;rsquo;t been creating much content on our site, the My Workbench page is rather empty. This can make it hard to understand what&amp;rsquo;s going on and to grasp the module&amp;rsquo;s possibilities. This is a situation that you&amp;rsquo;ll encounter often when developing a site: at a certain point, you need content to test a certain feature, or to verify what a certain section on your site will look like. The Devel Generate module, which comes with the Devel module allows us to quickly generate sample content, users, taxonomy, and menu items, so testing functionality on our new site becomes a lot easier, since it will more closely resemble an actual site. In this lesson we&amp;#39;ll enable and configure Devel Generate, and then run it to get a bunch of filler content set up on our site.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/o7-bnwsODWAnw8D6l8yhuk8S7WQo2f_k0_Z_edIHOCI.jpg.jpg</video:thumbnail_loc><video:duration>223</video:duration><video:publication_date>2014-07-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-workbench-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Workbench Access</video:title><video:description>&lt;p&gt;The next step in our editorial workflow is to combine Workbench with our News Section vocabulary to allow content management to be delegated according to existing editorial groups. To do this we&amp;#39;ll use the Workbench Access module, which is included in the Workbench package. In this lesson we&amp;#39;ll review how Workbench Access integrates with various hierarchies, and understand what Sections are, and the setting we have available to us.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AQCLUeZia-OObQVAsHBx6iE4gSuDerzZs3VgmNSW2e0.jpg.jpg</video:thumbnail_loc><video:duration>618</video:duration><video:publication_date>2014-07-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-workbench-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Workbench Access</video:title><video:description>&lt;p&gt;Let&amp;rsquo;s extend our Workbench implementation with one of the more advanced features our client has asked for. We&amp;rsquo;ll build upon the structure we&amp;rsquo;ve created with the Taxonomy module (the &amp;ldquo;News sections&amp;rdquo; vocabulary), and use that to grant users with specific roles access to content tagged with one of the &amp;ldquo;News sections&amp;rdquo; terms. In this lesson we&amp;rsquo;ll start with a little preparation work by creating new roles and users so we can test our access control to make sure it is working as expected.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5gTewa11QD6nK8YJ0FilyamDvRoq0c7mbROKYO9HyEs.jpg.jpg</video:thumbnail_loc><video:duration>408</video:duration><video:publication_date>2014-07-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-access-control-workbench-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting Up Access Control with Workbench Access</video:title><video:description>&lt;p&gt;As you&amp;rsquo;ve probably guessed by now, we&amp;rsquo;ll create an access control mechanism that grants users with the &amp;ldquo;national editor&amp;rdquo; role editorial access to content tagged with the term &amp;ldquo;national news.&amp;rdquo; Users that have the role &amp;ldquo;cultural editor&amp;rdquo; will eventually get editorial access to content that has the term &amp;ldquo;culture&amp;rdquo; attached. In this lesson we&amp;#39;ll limit our users to the correct section by configuring Workbench Access, setting the correct permissions, and then assigning our content to sections. This will get everything in place to finish up our access control.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TgQCOTfd-wBbQe5skyNigc8cfbUJLmsYhuj3sz3sKf0.jpg.jpg</video:thumbnail_loc><video:duration>699</video:duration><video:publication_date>2014-07-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-workbench-moderation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Workbench Moderation</video:title><video:description>&lt;p&gt;We have half of our editorial process in place. Existing editorial groups can now edit content they are responsible for, and only that content. However, to enable editors to effectively manage the flow of articles coming in, we need something else: an editorial workflow system that allows them to easily determine when an article is ready for review, and to either send it back to the reporter when it needs more work, or to publish it on the site when it&amp;rsquo;s good to go.&lt;/p&gt;
&lt;p&gt;Out of the box, Drupal allows a piece of content to be either published or unpublished. When the &amp;ldquo;published&amp;rdquo; checkbox is unchecked on the node editing form, only users with the &amp;ldquo;administer nodes&amp;rdquo; permission are allowed to view the content. That&amp;rsquo;s enough for some sites, but it doesn&amp;rsquo;t give our reporters and editors as much control as they need. For example, there&amp;rsquo;s no way for a reporter to mark an article as an in-progress draft and come back to it later. In addition, there&amp;rsquo;s no easy way for an editor to tell a reporter that an article needs more work&amp;mdash;the editor must contact the author manually.&lt;/p&gt;
&lt;p&gt;In this lesson, we&amp;#39;ll get an overview of how the Workbench Moderation module can do this for us. We&amp;#39;ll look at Workbench states and transitions, and how we use these to moderate our content.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0AmEgvk6N6_6iDfICL6H1L6-NopVHcgO-lgl-hcTQkE.jpg.jpg</video:thumbnail_loc><video:duration>285</video:duration><video:publication_date>2014-07-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-workbench-moderation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Workbench Moderation</video:title><video:description>&lt;p&gt;The final step to complete our site for Our Media is to get the editorial workflow in place. In this lesson, we&amp;#39;ll add moderation to the Article content type, create the correct States and Transitions we need, and then finish up by setting permissions so it all works the way we expect.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&amp;#39;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eJJl8WRyepRtL85aJXKg4XF7s61bgjTP7PTOWh9jsp4.jpg.jpg</video:thumbnail_loc><video:duration>621</video:duration><video:publication_date>2014-07-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-publishing-workflow-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Publishing Workflow Further</video:title><video:description>&lt;p&gt;We now have our new editorial system in place and the Our Media site is ready to go. We’ve met the needs of our client, but there are some other modules that are also worth checking out:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/workbench_media&quot;&gt;Workbench Media&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/views_bulk_operations&quot;&gt;Views Bulk Operations&lt;/a&gt; (VBO)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/nodequeue&quot;&gt;Nodequeue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have more detailed instruction in another video on using the &lt;a href=&quot;http://drupalize.me/videos/views-bulk-operations-vbo-module&quot;&gt;Views Bulk Operations (VBO) module&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2U43peM5n3TFUQYGvlbp0mjmA1KKPNdtWXGooHE4vOI.jpg.jpg</video:thumbnail_loc><video:duration>297</video:duration><video:publication_date>2014-07-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/publishing-workflow-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Publishing Workflow Summary</video:title><video:description>&lt;p&gt;Congratulations! The Our Media website now includes all the major features that the staff wanted. We’ve used the Workflow Access module to create a distributed system for content management, preventing collisions when editors review content they are responsible for. We’ve also provided the team with an editorial workflow, which makes it easy for them to track changes to content as it moves through the editorial process. On top of that, all of this is done in a consistent, easy-to-use interface, so editors quickly find the content they need. In this summary, we&#039;ll take a tour of the completed Our Media site, discuss our implementation points, and review the modules we used and discussed throughout the series.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupalize.me/guides/using-drupal-book-oreilly-media&quot;&gt;Drupalize.Me Guide: Using Drupal Book by O&#039;Reilly Media&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-8-multilingual&quot;&gt;Using Drupal Chapter 8: Multilingual Sites&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Zil-tGiVTLXz3foDQ2NjRfYIiUG_h3ZcfXj8hHHYpYU.jpg.jpg</video:thumbnail_loc><video:duration>664</video:duration><video:publication_date>2014-07-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/drupal-7-field-api-creating-custom-field-types-widgets-and-formatters</loc><lastmod>2024-07-19T23:26Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/site-improvements-our-latest-sprint-sparkleworks</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-drupal-7-field-api-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to the Drupal 7 Field API Series</video:title><video:description>Fields are the building blocks of Drupal&#039;s powerful content modeling system. The field API allows for the development of custom field types to suit almost any data display and collection needs. Developers can create custom field types that can be bundled together and attached to various pieces of content. Fields allow a Drupal Site Administrator to create an information architecture that matches the needs of each individual site.

This series will provide you with all the information you need to be able to define a custom field in your own module. After completing all the lessons in this series, you should have a firm grasp of the Drupal 7 field API and the tools and knowledge you need in order to define your own custom field types.

&lt;h3&gt;Prerequisites&lt;/h3&gt;
This series requires an understanding of PHP and basic Drupal 7 module development. For a refresher, or if you get stuck, check out our &lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Drupal 7 Module Development series&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Drupal 7 Module Development series&lt;/a&gt; (Drupalize.Me).</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/U4hg3UWC-JrJLrx_BmshVZcdQR2VWBhWw2h5H3aT7LA.jpg.jpg</video:thumbnail_loc><video:duration>185</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-7-field-api-fundamentals</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal 7 Field API Fundamentals</video:title><video:description>&lt;p&gt;Before diving into the code it&amp;#39;s important to understand some of the building blocks that make up the Field API. There&amp;#39;s a lot of different terminology in the Field API and it helps to understand what each of the terms mean. As well as understanding the relationship between the Fields and Entities in Drupal 7. Knowing these things will give you a strong foundation on which to start exploring the Drupal 7 Field API.&lt;/p&gt;
&lt;p&gt;Terms &amp;amp; concepts covered in this video:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;What is a field? what is an instance?&lt;/li&gt;
	&lt;li&gt;How do fields relate to entities?&lt;/li&gt;
	&lt;li&gt;Field types&lt;/li&gt;
	&lt;li&gt;Field storage&lt;/li&gt;
	&lt;li&gt;Field widgets&lt;/li&gt;
	&lt;li&gt;Field formatters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;For more information about these terms see the Drupal.org handbook page:&amp;nbsp;https://drupal.org/node/443540&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;The Field API in Drupal 7 is actually made up of a bunch of different APIs. In this series we&amp;#39;ll be focusing on the &lt;/span&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/group/field_types/7&quot; style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;Field types API&lt;/a&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt; which is used to allow modules to define new field types, widgets, and display formatters. The Field types API is the most commonly used by custom modules.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;The Field API consists of a set of hooks that you can implement to define your own custom field types with their own unique data collection widgets, storage schema, and behaviors. And sets of functions that can be called to do things like retrieve information about defined fields, pragmatically attach fields to an entity type, and interact in other ways with fields defined by core or other modules.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;In addition to the Field types API there is also:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;Field CRUD API - creates field instances and bundles, e.g.) what you see on the manage fields page.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;Field attach API - connects entities and fields, uses info from Field Info API to retrieve defined fields and do things like display their widget on the appropriate entity form when someone tries to edit an entity.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;Field info API - retrieve information about defined fields and instances.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;Field storage API - pluggable back-end storage for fields. Defaults to SQL backend provided by core.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size: 0.923em; line-height: 1.5em;&quot;&gt;Field language API - provides native multilingual support for fields.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Yi0w6MyBYmvkBUvUXpFx3q55i1WAJ2DadhAyAS5kTFw.jpg.jpg</video:thumbnail_loc><video:duration>540</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/field-api-documentation-and-resources</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Field API Documentation and Resources</video:title><video:description>&lt;p&gt;There&amp;#39;s quite a bit of documentation and other resources already available to help you better understand the Drupal 7 Field API. Lets take a look at what&amp;#39;s already available on Drupal.org, in the Examples project, and in the Drupal 7 core code that will serve as good reference material. We&amp;#39;ll be referring back to these resources in later lessons, and they&amp;#39;ll serve as a great place to look up additional information or to continue your learning via other examples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resources covered in this video:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The Drupal.org &lt;a href=&quot;https://drupal.org/node/443536&quot;&gt;Handbook for Field API&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;API documentation in &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/7&quot;&gt;field.api.php&lt;/a&gt;, which gives an overview of all the Field API hooks.&lt;/li&gt;
	&lt;li&gt;Field API documentation available on api.drupal.org - https://api.drupal.org/api/drupal/modules%21field%21field.module/group/field/7&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/examples&quot;&gt;Examples for Developers project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;#39;ve also got some additional resources here on Drupalize.Me that will serve as a good refresher for how/where fields are used in Drupal:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;For learning more about how to use fields in the UI and how the UI works - http://drupalize.me/series/intro-fields-site-builders-series&lt;/li&gt;
	&lt;li&gt;Attaching fields to custom entities - http://drupalize.me/videos/make-your-entity-fieldable-bundles&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/node/443536&quot;&gt;Handbook for Field API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/7&quot;&gt;field.api.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.module/group/field/7&quot;&gt;Field API documentation available on api.drupal.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/examples&quot;&gt;Examples for Developers project&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/j6zrPDU9Nx_68-UCsnXa3sqHvNl7oyjK2D3i3ZwEB7g.jpg.jpg</video:thumbnail_loc><video:duration>454</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/define-what-were-building-start-new-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Define What We&#039;re Building &amp; Start a New Module</video:title><video:description>&lt;p&gt;Before we can start building our custom field we need a vanilla Drupal site to work with and a skeleton module. This lesson will ensure you&amp;#39;ve got Drupal 7 up and running and walk through creation of a basic .info file and .module file for the module we&amp;#39;ll be building. If you&amp;#39;re already familiar with Drupal module development this lesson can likely be skipped and you can simply download the attached starter files, add them to an existing Drupal site, and continue on with the next lesson.&lt;/p&gt;
&lt;p&gt;Grab a fresh copy of &lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;Drupal 7&lt;/a&gt;, and install it. If you need a refresher on installing Drupal checkout &lt;a href=&quot;http://drupalize.me/series/using-drupal-appendix-installing-and-upgrading-drupal&quot;&gt;this series&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll also want to download and install the &lt;a href=&quot;https://www.drupal.org/project/devel&quot;&gt;devel module&lt;/a&gt; as we&amp;#39;ll make use of some of the debugging functions in provides (namely &lt;code&gt;dsm()&lt;/code&gt;) in later lessons in this series.&lt;/p&gt;
&lt;p&gt;Alternatly, you can grab the .zip file under the companion files listed on this page which contains Drupal 7, and a database dump you can import to get started.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wP4L-5jg24erwU01ngaOMEW3NiyKfmqaAQB5ko0CrbY.jpg.jpg</video:thumbnail_loc><video:duration>486</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/providing-drupal-meta-data-about-custom-field</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Providing Drupal with Meta-Data About a Custom Field</video:title><video:description>&lt;p&gt;The first step to defining a custom field is telling Drupal that our module provides a field. This is done by implementing hook_field_info(), hook_field_formatter_info(), and hook_field_widget_info(). The combination of which provides some basic information about our field including a label, description, default settings, and basic information about how the field will be formatted and what widgets can be used for data collection.&lt;/p&gt;
&lt;p&gt;In this lesson we&amp;#39;ll implement the basics for the following hooks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_info/7&quot;&gt;hook_field_info()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_info/7&quot;&gt;hook_field_formatter_info()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_widget_info/7&quot;&gt;hook_field_widget_info()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Doing so will allow us to enable our module and see our new field type appear in the list of available fields to add to a content type. The field won&amp;#39;t do much beyond that yet, but it&amp;#39;s a good start towards telling Drupal about our custom RGB field type.&lt;/p&gt;
&lt;p&gt;If you want to just follow along and look at the already written code you can grab a copy in the companion files section of this page and use that to follow along.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/89qI3Yiq35dZ1hkhKTV3tXYZPMgrc7BsZpmxKIBhowY.jpg.jpg</video:thumbnail_loc><video:duration>742</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/defining-fields-schema-database-storage</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Defining a Field&#039;s Schema for Database Storage</video:title><video:description>&lt;p&gt;Before we can actually get our field to store data for us we need to define what the data that we&amp;#39;re going to store looks like. The Field API does this with hook_field_schema(), which uses a very similar syntax to what is used by the hook_schema() that modules can use to define database tables. In this particular case though we&amp;#39;re only defining what the column, or columns, that store our specific data will be and allowing the Field Storage API to decide what the structure of the created table, or tables, should be. This allows our field to remain mostly storage system agnostic and frees us from having to worry about things like how the stored field data is connected back to the entity that it belongs to, or how to format our table for proper handling of revision data or translations.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Documentation for hook_field_schema - https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_schema/7&lt;/li&gt;
	&lt;li&gt;Schema API docs - https://drupal.org/developing/api/schema&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example &lt;code&gt;hook_field_schema()&lt;/code&gt; implemenatation.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_schema().
 */
function rgb_field_schema($field) {
  $columns = array(
    &amp;#39;rgb&amp;#39; =&amp;gt; array(
      &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;varchar&amp;#39;,
      &amp;#39;length&amp;#39; =&amp;gt; 6,
      &amp;#39;not null&amp;#39; =&amp;gt; FALSE,
    ),
    &amp;#39;label&amp;#39; =&amp;gt; array(
      &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;varchar&amp;#39;,
      &amp;#39;length&amp;#39; =&amp;gt; 128,
      &amp;#39;not null&amp;#39; =&amp;gt; FALSE,
    ),
  );

  $indexes = array(
    &amp;#39;rgb&amp;#39; =&amp;gt; array(&amp;#39;rgb&amp;#39;),
  );

  return array(
    &amp;#39;columns&amp;#39; =&amp;gt; $columns,
    &amp;#39;indexes&amp;#39; =&amp;gt; $indexes,
  );
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_schema/7&quot;&gt;hook_field_schema()&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://drupal.org/developing/api/schema&quot;&gt;Schema API documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_9Q9WXV0w3EQ81XbS3wkUB9OnQ62Noa-xkd5d-C2Z88.jpg.jpg</video:thumbnail_loc><video:duration>629</video:duration><video:publication_date>2014-07-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-field-widgets-collecting-user-input</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Field Widgets For Collecting User Input</video:title><video:description>&lt;p&gt;The term widget refers to the form element, or elements, that are presented to the user when they are entering data for a field. For example, the file upload field on the Article content type is the widget for the image field attached to that content type. When a field instance is attached to a bundle and an admin is creating or editing an entity of that bundle type the Field Attach API calls out to each individual field and asks it for the widget it would like to use to collect data. Adding a widget for a custom field type is a combination of implementing &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_widget_info/7&quot;&gt;hook_field_widget_info()&lt;/a&gt; and &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_widget_form/7&quot;&gt;hook_field_widget_form()&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_widget_info().
 */
function rgb_field_widget_info() {
  return array(
    &#039;rgb_textfield&#039; =&gt; array(
      &#039;label&#039; =&gt; t(&#039;RGB Textfields&#039;),
      &#039;field types&#039; =&gt; array(&#039;rgb_color&#039;),
    ),
  );
}

/**
 * Implements hook_field_widget_form().
 */
function rgb_field_widget_form(&amp;$form, &amp;$form_state, $field, $instance, $langcode, $items, $delta, $element) {

  if ($field[&#039;cardinality&#039;] == 1) {
    $element[&#039;#type&#039;] = &#039;fieldset&#039;;
  }

  $element[&#039;rgb&#039;] = array(
    &#039;#type&#039; =&gt; &#039;textfield&#039;,
    &#039;#field_prefix&#039; =&gt; t(&#039;RGB: #&#039;),
    &#039;#size&#039; =&gt; 6,
    &#039;#default_value&#039; =&gt; isset($items[$delta][&#039;rgb&#039;]) ? $items[$delta][&#039;rgb&#039;] : &#039;&#039;,
  );

  $element[&#039;label&#039;] = array(
    &#039;#type&#039; =&gt; &#039;textfield&#039;,
    &#039;#field_prefix&#039; =&gt; t(&#039;Color name: &#039;),
    &#039;#default_value&#039; =&gt; isset($items[$delta][&#039;label&#039;]) ? $items[$delta][&#039;label&#039;] : &#039;&#039;,
  );

  return $element;
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_widget_info/7&quot;&gt;hook_field_widget_info()&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_widget_form/7&quot;&gt;hook_field_widget_form()&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/D2CKhz1mRfB8k7clYsVR1f-CxdQ4q9-l9EyWakkpOwc.jpg.jpg</video:thumbnail_loc><video:duration>824</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/validating-and-saving-field-data</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Validating and Saving Field Data</video:title><video:description>&lt;p&gt;Before our field can save user provided data we need to use &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_validate/7&quot;&gt;hook_field_validate()&lt;/a&gt; and &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_is_empty/7&quot;&gt;hook_field_is_empty()&lt;/a&gt; to perform validation on field data. In certain context values like 0, FALSE, and NULL can all be a valid value. In fact, even a blank space could be valid input for a field. As such, it&amp;#39;s not possible for Drupal to know what constitutes an empty state for a field without a little extra help. The same is true for checking if the value of a field is valid.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implementation of hook_field_is_empty().
 */
function rgb_field_is_empty($item, $field) {
  if (empty($item[&amp;#39;rgb&amp;#39;]) || empty($item[&amp;#39;label&amp;#39;])) {
    return TRUE;
  }
  return FALSE;
}

/**
 * Implements hook_field_validate().
 */
function rgb_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &amp;amp;$errors) {
  foreach($items as $delta =&amp;gt; $item) {
    if (!empty($item[&amp;#39;rgb&amp;#39;])) {
      // Make sure it&amp;#39;s 6 characters.
      if (drupal_strlen($item[&amp;#39;rgb&amp;#39;]) !== 6) {
        $errors[$field[&amp;#39;field_name&amp;#39;]][$langcode][$delta][] = array(
          &amp;#39;error&amp;#39; =&amp;gt; &amp;#39;rgb_length&amp;#39;,
          &amp;#39;message&amp;#39; =&amp;gt; t(&amp;#39;%name: the hex color must be 6 characters.&amp;#39;, array(&amp;#39;%name&amp;#39; =&amp;gt; $instance[&amp;#39;label&amp;#39;])),
        );
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_validate/7&quot;&gt;hook_field_validate()&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_is_empty/7&quot;&gt;hook_field_is_empty()&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kL-xbqixZdelTIPkVJGAV63538vh8GiobE6tMMGlCRo.jpg.jpg</video:thumbnail_loc><video:duration>791</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-settings-field-widgets</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Settings for Field Widgets</video:title><video:description>&lt;p&gt;In order to allow for maximum flexibility in our widget we can add widget settings that apply to each individual instance of our field. By implementing &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_widget_settings_form/7&quot;&gt;hook_field_widget_settings_form() &lt;/a&gt;and then refactoring some of our existing code we can make it possible for a site administrator to set a custom prefix value for the label field, which the Field API will store for as part of the field instance&amp;#39;s settings and we can use it when creating our widget.&lt;/p&gt;
&lt;p&gt;Implementations of &lt;code&gt;hook_field_widget_settings_form()&lt;/code&gt; return a Form API array that represents the element or elements that you would like to add to the widget settings form. Values are automatically serialized and saved as part of the field&amp;#39;s instance configuration and can be accessed by the passed in &lt;code&gt;$instance&lt;/code&gt; array&amp;#39;s &lt;code&gt;$instance[&amp;#39;widget&amp;#39;][&amp;#39;settings&amp;#39;]&lt;/code&gt; key.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_widget_settings_form().
 */
function rgb_field_widget_settings_form($field, $instance) {
  $element = array(
    &amp;#39;rgb_label_text&amp;#39; =&amp;gt; array(
      &amp;#39;#type&amp;#39; =&amp;gt; &amp;#39;textfield&amp;#39;,
      &amp;#39;#title&amp;#39; =&amp;gt; t(&amp;#39;Alternate label text&amp;#39;),
      &amp;#39;#description&amp;#39; =&amp;gt; t(&amp;#39;If an alternate label text is provided it will be used in place of the default &amp;quot;Color&amp;quot; title for the label field.&amp;#39;),
      &amp;#39;#default_value&amp;#39; =&amp;gt; isset($instance[&amp;#39;widget&amp;#39;][&amp;#39;settings&amp;#39;][&amp;#39;rgb_label_text&amp;#39;]) ? $instance[&amp;#39;widget&amp;#39;][&amp;#39;settings&amp;#39;][&amp;#39;rgb_label_text&amp;#39;] : &amp;#39;&amp;#39;,
    ),
  );

  return $element;
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_widget_settings_form/7&quot;&gt;hook_field_widget_settings_form()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kKGbp80u7m1EKahUrwkcKfU3fSlPK218uAmgNchu7Lo.jpg.jpg</video:thumbnail_loc><video:duration>602</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-field-formatter-and-displaying-field-data</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a Field Formatter and Displaying Field Data</video:title><video:description>&lt;p&gt;Displaying that data that was collected and saved for our a field requires creating a field formatter. Formatters consist of an implementation of &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_info/7&quot;&gt;hook_field_formatter_info()&lt;/a&gt; and &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_view/7&quot;&gt;hook_field_formatter_view()&lt;/a&gt;. The former provides meta-data about the formatter for the Field API and the latter does the heavy lifting of determining what the output is actually going to look like.&lt;/p&gt;
&lt;p&gt;A module can define more than one field formatter.&lt;/p&gt;
&lt;p&gt;Implementations of &lt;code&gt;hook_field_formatter_view()&lt;/code&gt; return a renderable array representing the content you would like to display to the end user. Generally this is an escaped version of content provided by a site administrator with some additional HTML formatting applied.&lt;/p&gt;
&lt;p&gt;Depending on the values being output you would likely want to also use a theme function for your field formatter by implementing hook_theme() and providing either a theme() function that can be overriden or a template file. We&#039;re not going to cover that in this lesson since the focus here is on the technical requirements for impelementing a field formatter. Howerver, I would say that it&#039;s best practcie to always output any HTML with a theme function. You can find out more about creating themeable output by watching these videos from our library: http://drupalize.me/videos/integrating-theme-system and http://drupalize.me/videos/using-drupal-render-api&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_formatter_info().
 */
function rgb_field_formatter_info() {
  return array(
    &#039;rgb_raw&#039; =&gt; array(
      &#039;label&#039; =&gt; t(&#039;Raw color value&#039;),
      &#039;field types&#039; =&gt; array(&#039;rgb_color&#039;),
    ),
    &#039;rgb_box&#039; =&gt; array(
      &#039;label&#039; =&gt; t(&#039;Color block with label&#039;),
      &#039;field types&#039; =&gt; array(&#039;rgb_color&#039;),
    ),
  );
}

/**
 * Implements hook_field_formatter_view().
 */
function rgb_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, &amp;$items, $display) {
  $element = array();

  switch ($display[&#039;type&#039;]) {
    case &#039;rgb_raw&#039;:
      foreach ($items as $key =&gt; $value) {
        $element[$key] = array(
          &#039;#type&#039; =&gt; &#039;markup&#039;,
          &#039;#markup&#039; =&gt; t(&#039;#@hex&#039;, array(&#039;@hex&#039; =&gt; $value[&#039;rgb&#039;])),
        );
      }
      break;

    case &#039;rgb_box&#039;:
      foreach ($items as $key =&gt; $value) {
        $element[$key] = array(
          &#039;#type&#039; =&gt; &#039;markup&#039;,
          &#039;#markup&#039; =&gt; &#039;&lt;div style=&quot;background-color: #&#039; . check_plain($value[&#039;rgb&#039;]) . &#039;&quot;&gt;&#039; . check_plain($value[&#039;label&#039;]) . &#039;&lt;/div&gt;&#039;,
        );
      }
      break;
  }

 return $element;
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_info/7&quot;&gt;hook_field_formatter_info()&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_view/7&quot;&gt;hook_field_formatter_view()&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/integrating-theme-system&quot;&gt;Integrating with the Drupal 7 theme system&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/videos/using-drupal-render-api&quot;&gt;Using the Drupal 7 Render API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WNlpBy_97uMBc0FFS3Msys-xc2lFicyerujBuPoH24k.jpg.jpg</video:thumbnail_loc><video:duration>620</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-configuring-your-ubuntu-web-server</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-additional-settings-field-formatters</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Additional Settings for Field Formatters</video:title><video:description>&lt;p&gt;Sometimes display formatters need to allow for administrators to configure additional settings. For example choosing which image style to use when displaying an image field. The Field API allows for formatter settings and we can add them by implementing &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_formatter_settings_summary/7&quot;&gt;hook_field_formatter_settings_summary()&lt;/a&gt; and &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_formatter_settings_form/7&quot;&gt;hook_field_formatter_settings_form()&lt;/a&gt;. This lesson shows how to add simple width and height settings for the rgb_box display formatter that will allow an admin to modify the dimensions of the block that is displayed. Then uses those entered values in the implementation of &lt;code&gt;hook_field_formatter_view()&lt;/code&gt; added in the previous lesson to set the CSS width and height of the HTML element being displayed. Allowing site administrators a greater amount of control over what the content looks like without having to write any code. Which, also makes are module more flexible, and more useful in a larger variety of scenarios.&lt;/p&gt;
&lt;p&gt;Field formatter settings are access via the Manage Display tab for our Article content type. Any field which provides additional settings will display a gear icon along on the far right that once clicked will reveal the settings form. Field formatter settings are per instance settings.&lt;/p&gt;
&lt;p&gt;In addition to providing a settings form we also need to provide a simple text sumary of the settings that can be displayed on the Manage Display tab. This summary is displayed next to our field prior to someone clicking the gear icon that reveals the settings form. This gives the administrator a quick overview of the current configuration for all fields formatters. This is done with &lt;code&gt;hook_field_formatter_settings_summary()&lt;/code&gt;, which despite not being documented as such is &lt;strong&gt;required&lt;/strong&gt; in order to provide field display formatter settings in Drupal 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_formatter_settings_summary().
 */
function rgb_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance[&amp;#39;display&amp;#39;][$view_mode];
  $settings = $instance[&amp;#39;display&amp;#39;][$view_mode][&amp;#39;settings&amp;#39;];

  if ($display[&amp;#39;type&amp;#39;] == &amp;#39;rgb_box&amp;#39;) {
    $output = t(&amp;#39;Box size: @widthx@height&amp;#39;, array(&amp;#39;@width&amp;#39; =&amp;gt; $settings[&amp;#39;width&amp;#39;], &amp;#39;@height&amp;#39; =&amp;gt; $settings[&amp;#39;height&amp;#39;]));
    return $output;
  }
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function rgb_field_formatter_settings_form($field, $instance, $view_mode, $form, &amp;amp;$form_state) {
  $display = $instance[&amp;#39;display&amp;#39;][$view_mode];
  $settings = $display[&amp;#39;settings&amp;#39;];

  $element = array();
  if ($display[&amp;#39;type&amp;#39;] == &amp;#39;rgb_box&amp;#39;) {
      $element[&amp;#39;width&amp;#39;] = array(
        &amp;#39;#type&amp;#39; =&amp;gt; &amp;#39;textfield&amp;#39;,
        &amp;#39;#title&amp;#39; =&amp;gt; t(&amp;#39;Box width&amp;#39;),
        &amp;#39;#default_value&amp;#39; =&amp;gt; $settings[&amp;#39;width&amp;#39;],
      );
      $element[&amp;#39;height&amp;#39;] = array(
        &amp;#39;#type&amp;#39; =&amp;gt; &amp;#39;textfield&amp;#39;,
        &amp;#39;#title&amp;#39; =&amp;gt; t(&amp;#39;Box height&amp;#39;),
        &amp;#39;#default_value&amp;#39; =&amp;gt; $settings[&amp;#39;height&amp;#39;],
      );
  }
  
  return $element;
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_formatter_settings_summary/7&quot;&gt;hook_field_formatter_settings_summary()&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api.php/function/hook_field_formatter_settings_form/7&quot;&gt;hook_field_formatter_settings_form()&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FtcCMwj69uGAvYCOTrBr4f9gOMFnhoNliEAXRns0Njg.jpg.jpg</video:thumbnail_loc><video:duration>827</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/performing-additional-operations-when-loading-field-data</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Performing Additional Operations When Loading Field Data</video:title><video:description>&lt;p&gt;Sometimes we need to make use of the collected and stored field data in order to calculate additional values that can be used when displaying a field. The Amazon ASIN field for example can query the Amazon API and get additional information about a product like a thumbnail to display alongside the ASIN value. Using &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_load/7&quot;&gt;hook_field_load()&lt;/a&gt; we can perform additional operations on the stored field values at the time the Field API loads, or requests, the value of our field and present that calculated data long with the stored data.&lt;/p&gt;
&lt;p&gt;Should the data be loaded during &amp;quot;view&amp;quot; or &amp;quot;load&amp;quot; operations? In my mind that depends on what it&amp;#39;s needed for. A good question to ask might be, &amp;quot;if someone was accessing the content of this field as JSON would they want this data included?&amp;quot;. If the answer is yes, you probably want to use &lt;code&gt;hook_field_load()&lt;/code&gt; to perform addition load operations.&lt;/p&gt;
&lt;p&gt;When dealing with implementations of &lt;code&gt;hook_field_load()&lt;/code&gt; the most interesting paramater is probably the &lt;code&gt;$items&lt;/code&gt; array. An multi-dimentional array that contains a record for each value value for this particular field for the entity being viewed. Because $items can contain one or more values you&amp;#39;ll need to loop over the values within &lt;code&gt;$items&lt;/code&gt; and update them accordingly.&lt;/p&gt;
&lt;p&gt;Implementations of &lt;code&gt;hook_field_load()&lt;/code&gt; don&amp;#39;t need to return any value. Instead they should update the &lt;code&gt;$items&lt;/code&gt; array which is passed in by reference.&lt;/p&gt;
&lt;p&gt;In this example we&amp;#39;ll be querying the Google Search API, which returns JSON data. The search API is accessible at URLs like the following:&amp;nbsp;https://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;amp;q=663399. The most important part being the &lt;code&gt;&amp;amp;q=663399&lt;/code&gt;, which we&amp;#39;ll replace with our specific search term.&lt;/p&gt;
&lt;p&gt;Values that are added to the &lt;code&gt;$items&lt;/code&gt; array will be available to implementations of &lt;code&gt;hook_field_formatter_view()&lt;/code&gt; in the &lt;code&gt;$items&lt;/code&gt; parameter passed to those functions. From there, you can make use of any added data when displaying the field for end users. Because the data is added during the &lt;em&gt;load&lt;/em&gt; operation for the entity that the field is attached to it&amp;#39;s also available anytime you&amp;#39;re making use of the &lt;code&gt;$entity&lt;/code&gt; object.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_field_load().
 */
function rgb_field_load($entity_type, $entities, $field, $instances, $langcode, &amp;amp;$items, $age) {
  dsm(&amp;#39;rgb_field_load&amp;#39;);
  foreach ($items as $entity_id =&amp;gt; $field_values) {
    foreach ($field_values as $delta =&amp;gt; $value) {
      $url = &amp;#39;https://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;amp;q=&amp;#39; . $value[&amp;#39;rgb&amp;#39;];
      $response = drupal_http_request($url);
      if ($response-&amp;gt;code == 200) {
        $data = drupal_json_decode($response-&amp;gt;data);
        $links = array();
        foreach ($data[&amp;#39;responseData&amp;#39;][&amp;#39;results&amp;#39;] as $result) {
          $links[] = l($result[&amp;#39;titleNoFormatting&amp;#39;], $result[&amp;#39;url&amp;#39;]);
        }

        $items[$entity_id][$delta][&amp;#39;google_links&amp;#39;] = $links;
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_load/7&quot;&gt;hook_field_load()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q3QYfesmpw3pkuNPT6Qz8KITbDpY6_paZ2C8AGMZW0k.jpg.jpg</video:thumbnail_loc><video:duration>1038</video:duration><video:publication_date>2014-07-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/styling-panel-panes-stylizer</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Styling Panel Panes with Stylizer</video:title><video:description>&lt;p&gt;Stylizer enables site editors to change the styles of panel pane backgrounds, content, text styles, borders, and heading styles. It provides an extensive settings form, including a live preview and integration with the Color module, for point-and-click color picking.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Identify style options provided by Panels&lt;/li&gt;
	&lt;li&gt;Enable Stylizer module&lt;/li&gt;
	&lt;li&gt;Change Styles of a Panel Pane and Heading using Stylizer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson you should have a good idea of whether or not you want to enable Stylizer on your Panels-based site and if you do, how to access and use it.&lt;/p&gt;
&lt;p&gt;Stylizer module comes packaged with &lt;a href=&quot;https://www.drupal.org/project/ctools/&quot;&gt;CTools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/ctools/&quot;&gt;CTools&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kHWLujZJW76NLCzQFr-bF-g_u5kzqzt9-5LcZvWpIFo.jpg.jpg</video:thumbnail_loc><video:duration>899</video:duration><video:publication_date>2014-08-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-views-content-panes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Views Content Panes</video:title><video:description>&lt;p&gt;Views Content Panes is a module that comes packaged with Panels. It provides a new type of Views display called a Content Pane that enables you to pass off Views configuration to the Panel Pane.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Enable Views Content Panes module&lt;/li&gt;
	&lt;li&gt;Build a View using Content Pane display&lt;/li&gt;
	&lt;li&gt;Explore Pane Configuration in Views&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will have a better idea of why you will want to use content panes in Views whenever you are placing Views in Panels.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels/&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aKHzfbv9oKF7F4wgIZxUrPpbVBA1NfEKCQMMS8h-jTM.jpg.jpg</video:thumbnail_loc><video:duration>423</video:duration><video:publication_date>2014-08-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-views-filters-panel-pane-configuration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Views Filters as Panel Pane Configuration</video:title><video:description>&lt;p&gt;In a Views Content Pane display, it&amp;#39;s possible to use exposed or contextual filters as panel pane configuration. We&amp;#39;ll walk through this process and why you might want to utilize this feature of content panes.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Add an exposed filter to a view&lt;/li&gt;
	&lt;li&gt;Use the exposed filter as panel pane configuration&lt;/li&gt;
	&lt;li&gt;Place the same view twice with different configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iTpiUsvDlu7k9j6iB9aCJk16qrDmUl7g1-CjLkzIOrE.jpg.jpg</video:thumbnail_loc><video:duration>672</video:duration><video:publication_date>2014-08-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customizing-user-account-page-panels-and-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customizing a User Account Page with Panels and Views</video:title><video:description>&lt;p&gt;We&amp;#39;ll use Page Manager, Panels, and Views to create a customized user account page that features articles authored by the user whose account is being viewed.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Build a view of articles with a contextual filter&lt;/li&gt;
	&lt;li&gt;Create a customized user account page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you&amp;#39;ll walk away with ideas for how to create your own customized user account page.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/ctools/&quot;&gt;CTools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels/&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/views/&quot;&gt;Views&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NiJ6EDWMmNm95-pv7picWkAqQ0s0amTLJ3jqeNaudB4.jpg.jpg</video:thumbnail_loc><video:duration>745</video:duration><video:publication_date>2014-08-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/building-category-pages-panels-and-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Building Category Pages with Panels and Views</video:title><video:description>&lt;p&gt;The default taxonomy term page provided by Drupal leaves much to be desired. If a taxonomy vocabulary has multiple levels, but content is only tagged with only the child term and not the parent, parent term pages are left with no content listed on them, despite the fact that there is content tagged with terms below it.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;br /&gt;
	- Create a taxonomy vocabulary with two levels of hierarchy&lt;br /&gt;
	- Enable the Taxonomy Term Template&lt;br /&gt;
	- Build a custom term page for each level of hierarchy&lt;/p&gt;
&lt;p&gt;By the end of this lesson, you&amp;#39;ll know how to create better taxonomy term pages using Views, contextual filters, and Panels.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ao8XyLPIFJxhls_mRynV4kBrrnYVy1as9zv0T8J05uM.jpg.jpg</video:thumbnail_loc><video:duration>1274</video:duration><video:publication_date>2014-08-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/placing-panels-blocks-mini-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Placing Panels in Blocks with Mini Panels</video:title><video:description>&lt;p&gt;With mini-panels, you can build portable panels components and place them as blocks in regions of your theme.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Build a 3-column mini-panel&lt;/li&gt;
	&lt;li&gt;Place a menu in each column&lt;/li&gt;
	&lt;li&gt;Place the mini-panel in the footer region as a block&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will be able to build a mini-panel and understand how to place it in a region using the block administration page.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kZiGAhjdkt4ueuqLq5bajUIPvVWvz1MGe06WuW5gEsA.jpg.jpg</video:thumbnail_loc><video:duration>433</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/attaching-panels-node-using-panel-nodes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Attaching Panels to a Node using Panel Nodes</video:title><video:description>&lt;p&gt;Panel Nodes module comes packaged with Panels and provides a new content type called Panel.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Enable Panel Nodes module&lt;/li&gt;
	&lt;li&gt;Create a new node using Panel content type&lt;/li&gt;
	&lt;li&gt;Build a simple multi-column page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will understand the basic functionality of Panel Nodes and why you may or may not want to use it to build one-off pages on your site.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fOm9_Tv4Ox-e4JXacVZQ98ylADTaEXHRwJBy-2qpDW4.jpg.jpg</video:thumbnail_loc><video:duration>192</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/attaching-panels-any-content-or-entity-using-panelizer</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Attaching Panels to Any Content or Entity using Panelizer</video:title><video:description>&lt;p&gt;Panelizer is a powerful module that allows you to attach panels to any entity and view mode in Drupal. You can create default templates for all content in a content type, for example, or you can create one-off pages with unique layouts and content panes.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Walk through Panelizer admin UI&lt;/li&gt;
	&lt;li&gt;Panelize Article content&lt;/li&gt;
	&lt;li&gt;Set up default Panelizer template&lt;/li&gt;
	&lt;li&gt;Override versus Update Default Template&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you should be able to configure Panelizer settings, enable Panelizer for a content type, and understand the benefits and limitations of creating one-off pages that override the default template versus updating the default template.&lt;/p&gt;
&lt;p&gt;Enabling the Panels In-Place Editor is recommended for this lesson.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panelizer/&quot;&gt;Panelizer&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FWhEYn-uBReUb_50hbsO_Hz7EFru_06fOJ6by5nXxK8.jpg.jpg</video:thumbnail_loc><video:duration>1731</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-series-theming-basics-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-custom-panels-layouts-your-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Custom Panels Layouts in Your Theme</video:title><video:description>&lt;p&gt;You can create your Panels layouts with HTML and CSS that can then be selected in the Panels UI.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create a two-column, 60/40 layout&lt;/li&gt;
	&lt;li&gt;Use existing layout to quickly get started&lt;/li&gt;
	&lt;li&gt;Apply new layout to custom home page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FBdh0DP4lP3cjH0JhfYrsVJRd6U_WZ8dOdQq-km0CpM.jpg.jpg</video:thumbnail_loc><video:duration>1032</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-panels-configuration-using-features</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Panels Configuration using Features</video:title><video:description>&lt;p&gt;Creating pages with Panels involves a lot of configuration which can take a lot of time and effort. In order to avoid re-doing all that work on another instance of the site, we can export this configuration into code using Features and deploy it in the usual way (using git or FTP).&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Export a custom panels page&lt;/li&gt;
	&lt;li&gt;Take inventory of all panes&lt;/li&gt;
	&lt;li&gt;Create a new Feature to export configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will be able to export a basic panel page configuration that contains a View using Features.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/features&quot;&gt;Features&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8GycarljzbZGXgYROQr5jVRQEH-UW7lrNz1x5DjHM5c.jpg.jpg</video:thumbnail_loc><video:duration>682</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-panelizer-configuration-using-features-and-strongarm</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Panelizer Configuration using Features and Strongarm</video:title><video:description>&lt;p&gt;Panelizer configuration involves several layers of configuration. It can be challenging to find all the corners of configuration to export, without needing to still perform some extra manual steps after deployment. With Strongarm module, we can export the related settings that make Panelizer work, avoiding the need for extra manual steps.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Enable Strongarm module&lt;/li&gt;
	&lt;li&gt;Create new feature&lt;/li&gt;
	&lt;li&gt;Export and Deploy Panelizer settings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you should understand how to export all of Panelizer&amp;#39;s settings plus the related settings that support its functionality.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/strongarm/&quot;&gt;Strongarm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/panelizer/&quot;&gt;Panelizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/features&quot;&gt;Features&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qLmrhZGoFiKryJKZQdj6262F9PWchL8OCFVWXLXFrD0.jpg.jpg</video:thumbnail_loc><video:duration>1439</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-and-importing-panels-using-admin-ui</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting and Importing Panels using the Admin UI</video:title><video:description>&lt;p&gt;Panels provides export code that you can copy and paste into a module or directly import into another instance of the site.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Export a panels page using Panels UI&lt;/li&gt;
	&lt;li&gt;Import a panels page into another instance of site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will understand where to find the export code for a panel and be able to simply and quickly import it into another copy of your site.&lt;/p&gt;

&lt;p&gt;Demo site log in:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Navigate to &lt;em&gt;/user&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Login with admin/admin&lt;/li&gt;
&lt;/ul&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XFXYPM23137UjAZ6_Y_eEE-OS_6mrEoEJTpjvad01ts.jpg.jpg</video:thumbnail_loc><video:duration>528</video:duration><video:publication_date>2014-08-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/customize-panels-styles-ctools-style-plugins</loc><lastmod>2020-03-06T01:40Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-ctools-style-plugins</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to CTools Style Plugins</video:title><video:description>&lt;p&gt;A CTools Style Plugin allows a developer to provide a settings form and a template file that can be chosen and configured by a site administrator using the Panels &amp;quot;Style&amp;quot; interface.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Explore Panels&amp;#39; Style Interface&lt;/li&gt;
	&lt;li&gt;Identify Default Panels Styles&lt;/li&gt;
	&lt;li&gt;Introduce Demo Style Plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will understand how to access Styles in Panels and why you might want to create your own custom Styles interface for your site&amp;#39;s editors to use.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/j88B5BMLWM-0sxpQ5Y1ZMFYlwz99M854RuLMnGBJb70.jpg.jpg</video:thumbnail_loc><video:duration>472</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-module-and-plugin-files</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting up the Module and Plugin Files</video:title><video:description>&lt;p&gt;Before we dive into the code of the module and plugins, let&amp;#39;s set up the files and directories in a meaningful structure that&amp;#39;s both scalable and one that will ensure that our plugin is disoverable by the CTools API.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create module files and directories&lt;/li&gt;
	&lt;li&gt;Create plugin files and directories&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you will have all of the files created with a proper structure, ready for editing.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/T4fdHI0QxXD0xY8VTPDCMoxUbX213DA1DO1-dK6eXgU.jpg.jpg</video:thumbnail_loc><video:duration>251</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/understanding-plugin-array</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Understanding the $plugin Array</video:title><video:description>&lt;p&gt;The sole purpose of our custom module is to implement a hook that will tell the CTools API that we have a plugin. Next, in our plugin&amp;#39;s &amp;quot;.inc&amp;quot; file, we&amp;#39;ll walk through the extensive &lt;code&gt;$plugin&lt;/code&gt; array, understanding how the keys and values of this array correspond to functions and parameters inside the plugin.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Hook into CTools inside custom module&lt;/li&gt;
	&lt;li&gt;Explore &lt;code&gt;$plugin&lt;/code&gt; array&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you should be able to implement the correct hook for CTools and understand how to customize your own &lt;code&gt;$plugin&lt;/code&gt; array.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/B0KIuSetV82QWTRzxtpM7uiNwdxS0VmQBjefgEDZBwM.jpg.jpg</video:thumbnail_loc><video:duration>606</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-theme-function-panel-panes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating a theme() Function for Panel Panes</video:title><video:description>&lt;p&gt;In order to print out the pane title and settings form values as class names in our pane template file, we need to thread the pane object and settings array through a theme function so that they will be available to print out in our pane&amp;#39;s template file.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Walk through the pane theme function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you should be able to implement a theme function for a panel pane.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; </video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UgNKMJ8mvjHxUFrY4OwjDr5MTFyq6MuK_u0Hyl9xvlE.jpg.jpg</video:thumbnail_loc><video:duration>304</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/building-styles-settings-form</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Building the Styles Settings Form</video:title><video:description>&lt;p&gt;The selling point of a CTools Style Plugin is the settings form. By providing a settings form to the site editor who can then change the style of the page using a pre-approved set of styles, you can both empower and provide appropriate constraints.&lt;/p&gt;
&lt;p&gt;In this lesson, we will:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Use the Form API&lt;/li&gt;
	&lt;li&gt;Build a Styles Settings Form&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this lesson, you should be able to build a settings form for your CTools Style Plugin.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ABRqirh66ZS1xgM0-aaE-wTelyUs22ck9zlj9SeyGJM.jpg.jpg</video:thumbnail_loc><video:duration>563</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-video-series-intro-fields-site-builders</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/ctools-style-plugin-putting-it-all-together</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>CTools Style Plugin: Putting It All Together</video:title><video:description>&lt;p&gt;Now we have all the code in place for both our custom module and our style plugin. It&amp;#39;s time to put it all together into our pane template file.&lt;/p&gt;
&lt;p&gt;In this lesson...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Connect values from settings form to template file&lt;/li&gt;
	&lt;li&gt;Utilize values from pane object&lt;/li&gt;
	&lt;li&gt;Utilize values from submitted settings form&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the code for the module and plugin is contained in the Resources section of this lesson. It&amp;#39;s now your turn to create your own CTools Style Plugin!&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;The code for this plugin and module is located in &lt;em&gt;sites/all/modules/demo_panestyles&lt;/em&gt;. See Companion Files to download the Files export, which also contains a demo site for &lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Lessons 8-19 of Building Websites in Drupal 7 with Panels&lt;/a&gt;. Log in at /user with username &quot;admin&quot; and password &quot;admin.&quot;&lt;/p&gt; 
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/u_JEQ2b2JTAjw8Cg3v2vNum-fZjVAS_x8Ox_6nbObEs.jpg.jpg</video:thumbnail_loc><video:duration>329</video:duration><video:publication_date>2014-08-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/drupal-7-token-api</loc><lastmod>2024-07-23T19:32Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-drupal-7-token-api-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Drupal 7 Token API Series</video:title><video:description>Tokens are simple strings of text that serve as placeholders for a dynamic value. This is such a common task for modules that, rather than have every module developer reinvent the wheel, Drupal&#039;s token API allows for this kind of placeholder replacement using a unified syntax and a set of hooks and functions, which we&#039;ll cover throughout the series.

This video gives an overview of the six lessons in this series, from background to a sample installation of modules we’ll need, implementing tokens using hooks, and looking at the relationships between core and token modules.
 
After watching this series, you should have a firm grasp on the Drupal token API and be able to use it in your own custom modules in order to provide your users with static placeholder tokens that can be replaced with a dynamically calculated value.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Drupal 7 Module Development Series&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/token&quot;&gt;Contrib Token Module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-KWXOaOwJfZY6hWqU449-6l1yX5sa7peCu4eqDseYkY.jpg.jpg</video:thumbnail_loc><video:duration>209</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-are-tokens</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Tokens?</video:title><video:description>&lt;p&gt;There just a couple of components that make up the token system in Drupal 7, which is nice because it means fewer new things we have to learn. But, it&amp;#39;s important to understand what those components are and some of the fundamentals of how tokens work in order to make the most of Drupal&amp;#39;s Token API. In this lesson we&amp;#39;ll take a look the use case for tokens, talk about token types, and the concept of global tokens vs. those that require some additional context in order to have their dynamic values calculated.&lt;/p&gt;

&lt;h3&gt;What are tokens?&lt;/h3&gt; 
&lt;p&gt;Tokens are specially formatted chunks of text that serve as placeholders for a dynamically generated value. Here&amp;#39;s a really simple example: You want to display a welcome message to user&amp;#39;s of your site, and you want it to be personalized so how about you add their name and instead of just saying &amp;quot;Welcome&amp;quot;, you can say &amp;quot;Welcome, Joe&amp;quot;. In order to avoid having to hard-code a welcome string for every single user of the site it would be nice to dynamically generate the string. So you use a one like the following, &amp;quot;Welcome, &lt;code&gt;[current-user:name]&lt;/code&gt;&amp;quot;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;[current-user:name]&lt;/code&gt; here is what Drupal refers to as a token. A string of static text that will be located and replaced with a dynamic value. This token is made up of a few parts, inside of the mandatory square brackets that signify that this is a token. The first part &lt;code&gt;current-user:&lt;/code&gt; in this case is the &lt;strong&gt;token type&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Token types are used to group like things together into a namespace. User&amp;#39;s for example have name, mail, and last-login properties. Nodes have title, nid, and author properties. Token type also plays an important role in determining what tokens are available in what context. User tokens for example might be available when sending an email to a specific user but node type tokens might be irrelevant in this use case. We need to be able to tell end user&amp;#39;s what types of tokens can be used in what context so that they don&amp;#39;t use a node token (which has no value) in a user context.&lt;/p&gt;

&lt;p&gt;The second part, after the colon (&lt;code&gt;:&lt;/code&gt;) is the token itself. This signifies what value will be substituted into the string containing the token. &lt;code&gt;:name&lt;/code&gt; in this case indicates we want the current user&amp;#39;s username. This also brings up another important point. Global vs. contextual tokens. Some tokens like this one &lt;code&gt;[system:date]&lt;/code&gt; can be calculated without any additional information. Simply call the PHP date function and you&amp;#39;ve got a value. This token &lt;code&gt;[current-user:name]&lt;/code&gt;, on the other hand, requires knowledge about the currently logged-in user in order to be able to determine that user&amp;#39;s name. This token requires additional context in order to be useful.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/documentation/modules/token&quot;&gt;Handbook documentation for tokens (drupal.org)&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_YEDgEpMwwIqLEyL2qpxDO0h4u_Lq_agrBYy9R4pMSY.jpg.jpg</video:thumbnail_loc><video:duration>823</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-7-tokens-site-setup</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal 7 Tokens Site Setup</video:title><video:description>&lt;p&gt;Before we can get started creating our own tokens we&amp;#39;ll need a basic Drupal site setup and module to start from. This lesson will walk through the prerequisites for the rest of the series including having Drupal installed, downloading and installing the databasics module, creation of some dummy content, and a quick tour of what the module does.&lt;/p&gt;
&lt;p&gt;In order to follow along in this series you&amp;#39;ll want to have a copy of &lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;Drupal 7&lt;/a&gt; installed. If you need a refresher on installing Drupal check out &lt;a href=&quot;http://drupalize.me/series/using-drupal-appendix-installing-and-upgrading-drupal&quot;&gt;this series&lt;/a&gt; on getting up and running with Drupal 7.&lt;/p&gt;
&lt;p&gt;Once you&amp;#39;ve got Drupal 7 installed you&amp;#39;ll want to download and install a copy of the databasics module that was created as part of the &lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Drupal 7 module development series&lt;/a&gt;. We&amp;#39;ll use this as a starting point for adding custom tokens so that we have some new data to play with. You can grab a copy of the files attached to this page.&lt;/p&gt;
&lt;p&gt;Finally, we&amp;#39;ll create some dummy content on our site and walk through what the databasics module does and talk about the problem we&amp;#39;re trying to solve.&lt;/p&gt;
&lt;p&gt;The databasics module has a string of text that&amp;#39;s displayed at the bottom of each node that displays some dynamic information. We would like this text to be configurable by an administrator, so we&amp;#39;ll add some new tokens and then update both the form where text is entered and the code that displays the text to allow for use of the newly created tokens.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://drupalize.me/series/module-development-drupal-7&quot;&gt;Drupal 7 module development series&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;Drupal 7&lt;/a&gt;&amp;nbsp;download&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PFRUpUXEKXEMRc9tu_pl2I2Fun1W38gL6kj2CCAGJQU.jpg.jpg</video:thumbnail_loc><video:duration>517</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/providing-placeholder-tokens</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Providing Placeholder Tokens</video:title><video:description>&lt;p&gt;The first of two steps required to add new tokens to Drupal 7 is implementing &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_token_info/7&quot;&gt;hook_token_info()&lt;/a&gt; in order to give Drupal a list of the placeholders your module provides. Placeholders can be grouped together by creating a new token type and placing new tokens under that grouping or by adding new tokens to an existing token type provided by another module like the node module. Token types can be defined as global meaning their value can be calculated without any additional context, or as &amp;#39;needs-data&amp;#39; tokens that require additional information about the context in which they are being used in order to calculate their value. For example, a &lt;code&gt;[node:title]&lt;/code&gt; token needs to know which node is being referenced, whereas a &lt;code&gt;[system:date]&lt;/code&gt; token doesn&amp;#39;t need any additional reference to calculate the current date. In this lesson we will be adding the following token types:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;[databasics-totals]&lt;/code&gt; - For tokens that can be calculated without any additional context.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;[databasics-page]&lt;/code&gt; - For tokens that require additional context in order to be rendered. In this case, they need to know which page is currently being viewed and are thus only useful in the context of viewing a page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And these tokens:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;[databasics-totals:count]&lt;/code&gt; - Total page views for the entire site.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;[databasics-page:view-count]&lt;/code&gt; - Number of times the current page has been viewed by the current user..&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;[databasics-page:last-viewed]&lt;/code&gt; - Date the current page was last viewed..&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We use &lt;code&gt;hook_token_info()&lt;/code&gt; to provide Drupal with information about available placeholder tokens and their types. Here&amp;#39;s an example &lt;code&gt;hook_token_info()&lt;/code&gt; implementation:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
/**
 * Implements hook_token_info().
 */
function databasics_token_info() {
  $info = array();

  $info[&amp;#39;types&amp;#39;] = array(
    &amp;#39;databasics-totals&amp;#39; =&amp;gt; array(
      &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;Databasics totals&amp;#39;),
      &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Global databasics tokens.&amp;#39;),
    ),
    // [databasics-page:]
    &amp;#39;databasics-page&amp;#39; =&amp;gt; array(
      &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;Databasics&amp;#39;),
      &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Tokens for databasics page counts.&amp;#39;),
      &amp;#39;needs-data&amp;#39; =&amp;gt; array(&amp;#39;databasics_record&amp;#39;),
    ),
  );

  $info[&amp;#39;tokens&amp;#39;] = array(
    &amp;#39;databasics-totals&amp;#39; =&amp;gt; array(
      // [databasics-totals:count]
      &amp;#39;count&amp;#39; =&amp;gt; array(
        &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;Total page views&amp;#39;),
        &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Total page views for entire site.&amp;#39;),
      ),
    ),
    // Page specific tokens.
    &amp;#39;databasics-page&amp;#39; =&amp;gt; array(
      // Add a token for the view count.
      // [databasics-page:view-count]
      &amp;#39;view-count&amp;#39; =&amp;gt; array(
        &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;View count&amp;#39;),
        &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Number of times the page has been viewed by the current user.&amp;#39;),
      ),
      // [databasics-page:last-viewed]
      &amp;#39;last-viewed&amp;#39; =&amp;gt; array(
        &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;Last viewed&amp;#39;),
        &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Date the page was last viewed.&amp;#39;),
      ),
    ),
  );

  // [node:view-count], [node:view-count:last-viewed]
  $info[&amp;#39;tokens&amp;#39;][&amp;#39;node&amp;#39;] = array(
    &amp;#39;view-count&amp;#39; =&amp;gt; array(
      &amp;#39;name&amp;#39; =&amp;gt; t(&amp;#39;View count&amp;#39;),
      &amp;#39;description&amp;#39; =&amp;gt; t(&amp;#39;Number of times the current node has been viewed by the current user.&amp;#39;),
      &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;databasics-page&amp;#39;, 
    ),
  );

  return $info;
}
&lt;/code&gt;&lt;/pre&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_token_info/7&quot;&gt;hook_token_info()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MUHAvRbcu1mZjjQtf3Kjh_A6vZDVHd_9Wk6dwM9Cvro.jpg.jpg</video:thumbnail_loc><video:duration>643</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/providing-values-placeholder-tokens</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Providing Values For Placeholder Tokens</video:title><video:description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In the video, around 9:30, we added at the &lt;code&gt;:uid&lt;/code&gt; argument to the query, but did not add the corresponding portion to the WHERE clause of the query. The final query should look like the one in the code sample below.&lt;/p&gt;

&lt;p&gt;Now that we&#039;ve got placeholder tokens that we can enter into a string of text we need to provide the actual values that should be used to replace those placeholders. In this lesson we&#039;ll implement &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_tokens/7&quot;&gt;hook_tokens()&lt;/a&gt; in order to provide the Drupal Token API with the values that correspond to the placeholders our module provides.&lt;/p&gt;
&lt;p&gt;Implementations of &lt;code&gt;hook_tokens()&lt;/code&gt; are called once for every token type that&#039;s in scope for the current string that&#039;s being processed. So, one for all user tokens, once for all node tokens, and once for all global tokens. Each time the hook is passed an array which contains all the tokens of that specific type that where found in the string being processed as well as any additional contextual information such as the current &lt;code&gt;$user&lt;/code&gt; or &lt;code&gt;$node&lt;/code&gt; object.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hook_tokens()&lt;/code&gt; is expected to return an array of values for each of the tokens in question that your module is responsible for. In our case, since we added the &lt;code&gt;[databasics-page:*]&lt;/code&gt; and &lt;code&gt;[databasics-totals:*]&lt;/code&gt; tokens we&#039;re responsible for calculating and returning their value whenever they are requested.&lt;/p&gt;
&lt;p&gt;We&#039;ll also look at using the &lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21token.inc/function/token_find_with_prefix/7&quot;&gt;token_find_with_prefix()&lt;/a&gt; function which will allow us to detect and provide values for any chained tokens. Like for example &lt;code&gt;[node:view-count:last-viewed]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
/**
 * Implements hook_tokens().
 */
function databasics_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
 
  if ($type == &#039;databasics-totals&#039;) {
    foreach($tokens as $name =&gt; $original) {
      switch($name) {
        case &#039;count&#039;:
          $count = db_query(&#039;SELECT SUM(view_count) FROM {databasics}&#039;)-&gt;fetchField();
          $replacements[$original] = $count;
          break;
      }
    }
  }
 
  if ($type == &#039;databasics-page&#039; &amp;&amp; !empty($data[&#039;databasics_record&#039;])) {
    $record = $data[&#039;databasics_record&#039;];
 
    foreach ($tokens as $name =&gt; $original) {
      switch ($name) {
        case &#039;view-count&#039;:
          $replacements[$original] = $record-&gt;view_count;
          break;
 
        case &#039;last-viewed&#039;:
          $replacements[$original] = $record-&gt;last_viewed;
          break;
      }
    }
  }
 
  if ($type == &#039;node&#039; &amp;&amp; isset($tokens[&#039;view-count&#039;]) &amp;&amp; !empty($data[&#039;node&#039;])) {
    $node = $data[&#039;node&#039;];
    global $user;
    $count = db_query(&#039;SELECT SUM(view_count) FROM {databasics} WHERE nid = :nid AND uid = :uid&#039;, array(&#039;:nid&#039; =&gt; $node-&gt;nid, &#039;:uid&#039; =&gt; $user-&gt;uid))-&gt;fetchField();
    $replacements[$tokens[&#039;view-count&#039;]] = $count;
 
    // [node:view-count:last-viewed]
    if ($count_tokens = token_find_with_prefix($tokens, &#039;view-count&#039;)) {
      $record = databasics_get_record($node-&gt;nid, $user-&gt;uid);
      $replacements += token_generate(&#039;databasics-page&#039;, $count_tokens, array(&#039;databasics_record&#039; =&gt; $record), $options);
    }
  }
 
  return $replacements;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_tokens/7&quot;&gt;hook_tokens()&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21token.inc/function/token_find_with_prefix/7&quot;&gt;token_find_with_prefix()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VuWDxSFBbm-R6dtBfFUJDlHsJEYC0LBcjykPvmXuNWY.jpg.jpg</video:thumbnail_loc><video:duration>768</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/replacing-placeholder-tokens-used-text-their-values</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Replacing Placeholder Tokens Used In Text With Their Values</video:title><video:description>&lt;p&gt;With a list of placeholders and a way to retrieve the values for those placeholders we can now bring it all together and use the &lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21token.inc/function/token_replace/7&quot;&gt;token_replace()&lt;/a&gt; function to locate placeholders in a string of text and replace them with their dynamically generated counterparts. We&amp;#39;ll use &lt;code&gt;token_replace()&lt;/code&gt; to process the &lt;code&gt;$message&lt;/code&gt; variable displayed on nodes by the databasics module so that we can use our new tokens. Then we&amp;#39;ll look at passing contextual data like the current &lt;code&gt;$node&lt;/code&gt; to the &lt;code&gt;token_replace()&lt;/code&gt; function so the code that does the actual value calculation can have all the information it needs to do so.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;The token_replace()&lt;/code&gt; function will take a string of text like the following: &amp;quot;Welcome, [current-user:name]&amp;quot;, and perform the replacement of the token with it&amp;#39;s value resulting in something like &amp;quot;Welcome, Joe&amp;quot;.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/includes%21token.inc/function/token_replace/7&quot;&gt;token_replace()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GGfxf4DJ__jCffvh4aWhwh83giwU9gwqlg-_rkFwxp4.jpg.jpg</video:thumbnail_loc><video:duration>638</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/integrating-token-module-contrib</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Integrating with the Token Module From Contrib</video:title><video:description>&lt;p&gt;The Token API built into Drupal 7 core provides the ability to add placeholder tokens and replace them with dynamic values. But it&amp;#39;s missing some critical features. A UI for allowing end users to browse the list of available tokens for example. And core only provides some very basic tokens, missing support for things like field values. In this lesson we&amp;#39;ll look at additional functionality provided by the &lt;a href=&quot;https://www.drupal.org/project/token&quot;&gt;token module&lt;/a&gt; from contrib and how we can make use if it to provide both a UI for browsing available tokens as well as better validation of form elements with tokens in them.&lt;/p&gt;
&lt;p&gt;First we&amp;#39;ll download and install the &lt;a href=&quot;https://www.drupal.org/project/token&quot;&gt;token module&lt;/a&gt; from contrib and look at some of the features it provides us with without having to write any code.&lt;/p&gt;
&lt;p&gt;Then, we&amp;#39;ll look at using &lt;code&gt;theme_token_tree_link()&lt;/code&gt; to provide our end users with a user interface for browsing the tokens available in a given context. &lt;code&gt;theme_token_tree_link()&lt;/code&gt; also allows us to specify the token types that should be displayed so we can limit the list to just those that are relevant.&lt;/p&gt;
&lt;p&gt;Finally, we&amp;#39;ll look at using the &lt;code&gt;token_element_validate()&lt;/code&gt; function as an extra element validator on our Form API element where we allow users to enter strings of text that contain tokens. This validator will provide valuation of the tokens entered into the form element, for example: if the valid token types are &amp;#39;node&amp;#39; which means they can only use &amp;#39;node&amp;#39; tokens in that field. This makes sure that the tokens you enter into a field will work in that context.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/token&quot;&gt;Token module&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/documentation/modules/token&quot;&gt;Token module documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rALtqZwhUXHrOgtFI2Zto4YTF5pxqy0iM9JVbAE4n1g.jpg.jpg</video:thumbnail_loc><video:duration>735</video:duration><video:publication_date>2014-09-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/installing-and-configuring-web-servers-your-mac-or-windows-machine</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-set-local-web-server-ubuntu</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/context-and-bean-layout-tools-your-drupal-toolbox</loc><lastmod>2024-07-23T19:36Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-context-and-bean</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Context and Bean</video:title><video:description>&lt;p&gt;As Drupal site-builders and developers we are all very aware that Drupal 7 is not the most useful product out of the box. We constantly add modules and custom code to make Drupal do what we need. There is nothing wrong with this, in fact it is what attracts people to using Drupal in the first place.  The block system that comes with core is what we get after installation as our real only means to laying &quot;stuff&quot; out for our website. People have done things like turning nodes into blocks, or making every block on our a site a view. These concepts work, but have a lot of draw backs for usability and performance.  There are lots of layout tools to use, but this series is going to take a look at the Context and Bean modules.  These two modules are really two completely different modules but when used together give us some pretty powerful options in place of Drupal&#039;s core block system.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/context&quot;&gt;Context module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/bean&quot;&gt;Bean module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7A9q9zwfwjScEz98tCRER3heJpXQq7jUGKwvTBZ4uRI.jpg.jpg</video:thumbnail_loc><video:duration>437</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/why-use-context-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Why Use the Context Module?</video:title><video:description>&lt;p&gt;One of the key problems with the block system in core is it&#039;s very limiting. You are limited to a small set of tools for when and how to show a block. Once you lay out your blocks you are basically done—blocks can&#039;t be placed in multiple regions. Most importantly, block configurations are not exportable. With the Context module, you lay things out based on the context of your site.  A block can exist in one region for one context and a different region for another. Essentially Context is a more advanced block placement form.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fjmKtxpZDWmlWSXvi8yjhmhjy--ddF-hBrJK4fYU8wM.jpg.jpg</video:thumbnail_loc><video:duration>521</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-context-module-and-tour-ui</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Context Module and Tour the UI</video:title><video:description>&lt;p&gt;In this lesson we&#039;ll get started with Context by installing the module on our site, and then walking through the user interface we have to work with. We&#039;ll discuss things like conditions and reactions, and see how things are set up.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2M_N4BNpYYi1pbf1W5Vu5Zvwzp8RRnAymDe-mBxL_XM.jpg.jpg</video:thumbnail_loc><video:duration>488</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-your-first-context</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Your First Context</video:title><video:description>&lt;p&gt;In this lesson we will build our first simple context. We will create a custom block that contains copyright information.  We will use Context and the &quot;site-wide&quot; condition to place this custom block in the footer region of our site.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/bHzw6nDVokgOdy2MKHzR-sw6gN0amaXlNMJRPBtHpQo.jpg.jpg</video:thumbnail_loc><video:duration>359</video:duration><video:publication_date>2014-09-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/prepare-your-site-cleaning-blocks-interface</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Prepare Your Site by Cleaning up the Blocks Interface</video:title><video:description>&lt;p&gt;In this lesson we will perform a simple operation that site builders do when using the Context module. This is not necessary, but a good idea if there are multiple people managing your site. We will disable all blocks in the block UI since we will be using the Context module to manage this part of our website. The core block UI will then only be used to manage block titles as Context does not allow for this (a disadvantage we learned about previously).&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0-5QBq6nuve174COVmcnEc8F5RnBsux5yDzjFSGCEUo.jpg.jpg</video:thumbnail_loc><video:duration>167</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-user-role-dashboards-contexts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating User Role Dashboards with Contexts</video:title><video:description>&lt;p&gt;In this lesson we will discuss different use cases for when one would use Context module. We will demo a site that has a home page and a user dashboard that acts as an authenticated users home page. We will demonstrate one of the advantages of Context by placing blocks in different locations depending on which page we&#039;re looking at.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Vn-ZZoHE2MocAaHjtp482goVvGL-cSQpidgkvp4fRiE.jpg.jpg</video:thumbnail_loc><video:duration>755</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-context-configurations-features-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Context Configurations with the Features Module</video:title><video:description>&lt;p&gt;In this lesson we will go over one of the main reason for using Context over core blocks; exportability. Using the Features module we are able to take all of the work we do in the Context UI and export it as standalone or with other features.  The advantage of this is now all of our settings are stored in code and are deployable.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hXBViSMwhAmW34shRTmlk3-jjgEj5CO2qrz3fykIGaM.jpg.jpg</video:thumbnail_loc><video:duration>423</video:duration><video:publication_date>2014-10-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-bean-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of the Bean Module</video:title><video:description>&lt;p&gt;Much like using Context to enhance the core block system, the Bean module takes blocks to a whole new level. The Bean module makes blocks act more like content types.  It allows for different block types and for adding fields to blocks. We are also able to manage the display of a block, which comes in handy with Context. We can have a block look different based on the Context of the block.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/blog/201503/creating-block-types-bean&quot;&gt;Written tutorial based on this video&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fIZnEUUxq1ptqabOJAK_2oTvfn-g_VyKgMY6sfKd3ZM.jpg.jpg</video:thumbnail_loc><video:duration>192</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/bean-ui-bean-types-and-working-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Bean UI, Bean Types,  and Working with Fields</video:title><video:description>&lt;p&gt;In this lesson we will install the Bean module and tour the changes it adds to the core block system. We will also look at and learn about block types, and how we can add fields to these types.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/brDV2cNgeU8lvkSGsIG7i-yq336yM9UqZHMFihiOq7g.jpg.jpg</video:thumbnail_loc><video:duration>339</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/blocks-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Blocks as Content</video:title><video:description>&lt;p&gt;Now that Blocks are fieldable and we can have different types, lets demo how this works.  In this lesson we will create different block types and show how they can be used just like content.  We will also show how we can edit a block that was created with Bean.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ywMQK4ZZzSkBhZg1deAw2Uw4bqOw1x9Tbj3Z2nhT9-k.jpg.jpg</video:thumbnail_loc><video:duration>309</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/bean-and-context</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Bean and Context</video:title><video:description>&lt;p&gt;In this lesson we will demonstrate how Beans are available in the Context UI.  We will place some of the these blocks in different locations and also demonstrate how using different block displays with different context allows us to have a block appear differently based on context.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cmb2ETInc1JUId3DJH78Fm4bJML5ERMXR-V7DqDdCW8.jpg.jpg</video:thumbnail_loc><video:duration>551</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/bean-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Bean Permissions</video:title><video:description>&lt;p&gt;One of the biggest downsides of the core block system are its permissions.  To allow different roles to do different things with blocks is basically an all or none permission. The Bean module provides more granularity for block permissions. We can now add the ability to have site content creators create blocks but not give them permissions to all the other block admin pages.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kyVN9ScBHYqKkH-QQokIBlMYUBbo1bwldrFA4R6_Ch8.jpg.jpg</video:thumbnail_loc><video:duration>163</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-8-multilingual-sites</loc><lastmod>2024-07-03T00:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-blue-peak-fanatics</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Blue Peak Fanatics</video:title><video:description>&lt;div&gt;Creating a website with community content is great, but what if some or all of your community doesn’t read or write English? It’s a big world, and only about 6% of it speaks English as a native language. Having multiple languages is not as simple as having users post content in whichever language they like. There are other things to consider, like navigation, date formatting, and help text. And what about having the same post available in multiple languages, and easily navigating between them? Once you start thinking about it in detail, there is a lot of ground to cover. Luckily, Drupal core and a few contributed modules have done a lot of that hard work for us so we can concentrate on building our community and content. In this series, we&#039;ll cover t&lt;span style=&quot;line-height: 1.75;&quot;&gt;he two main concepts for multilingual sites: internationalization, often abbreviated i18n, and localization, often abbreviated l10n. Internationalization is the underlying structure that allows software to be adapted to different languages, and localization is the process of actually translating the software for use by a specific locale.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In this first lesson we&#039;ll kick things off with an o&lt;span style=&quot;line-height: 1.75;&quot;&gt;verview of our case study with Blue Peak Fanatics, take a look at the site we&#039;re going to build, and discuss how we&#039;ll go about implementing the features we need.&lt;/span&gt;&lt;/div&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt; &lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sAIJNf4rfNdAaNKoa3K-QVo-m5-5DwYZc7oQieuslw4.jpg.jpg</video:thumbnail_loc><video:duration>448</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-interface-translation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Interface Translation</video:title><video:description>There are two main areas of translation for your Drupal site: the user interface and the content. The user interface text is mostly provided by the software, stored in the code itself. This is sometimes referred to as &quot;hard-coded.&quot; While content is generated by users of the site, and stored in the database. Drupal core comes with the Locale module, which works with the user interface text and gives you a nice set of tools that lets you import existing translations, create or edit your own, or export your site’s translations for use on other sites. In this lesson we&#039;ll take a tour of the Locale module and discuss translation files, translating strings, language switching, and how to get a localized installation.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt; &lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Hs2McJa97BuaAAy5QiSEIrjYvsfcjFFgRmpSYkXmnpM.jpg.jpg</video:thumbnail_loc><video:duration>996</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-installing-translation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Installing a Translation</video:title><video:description>&lt;p&gt;The first step to using any of Drupal’s multilingual features is installing a translation, so that Drupal has more than one language to choose from. As mentioned previously, you can use a localized distribution so that you install your language during the site installation process. Alternatively, you can easily add a language after you have installed the site by using the “Localization update” module. In this lesson we&#039;ll get the right pieces in place and get two different languages installed on the site.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://localize.drupal.org/translate&quot;&gt;Drupal Translations on localize.drupal.org&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9loF51H3365aRZX2Fb6zdfP4CqCx1Bj64b0vZBuuTN4.jpg.jpg</video:thumbnail_loc><video:duration>301</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-configuring-locale-features</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Configuring Locale Features</video:title><video:description>&lt;p&gt;With several language translations installed on our site, we need to make a choice about how and when Drupal will use our new languages. In this lesson, we&#039;ll review the Locale module configuration to make sure it is performing the way we want it to, by setting language detection and selection, and then enabling our language switcher.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt; &lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/21jmqT2Ut3KSqcKn4i_Jrrl_7nmWWCeOElyZ4l8hMYI.jpg.jpg</video:thumbnail_loc><video:duration>225</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-localization-client</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Localization Client</video:title><video:description>You may notice that even though you are using a translation that you have installed, there might still be some untranslated text peeking out here and there. This will become more likely as you add contributed modules. Almost no site will have absolutely 100% language coverage out of the box, so you will probably need to translate a few items yourself. Drupal has a built-in system to do this with the Locale module, but there is also a contributed “Localization client” module which extends this core feature. In this lesson we&#039;ll take a look at Localization Client, see why want to use it, and how it works.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/l10n_client&quot;&gt;Localization Client project&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nVZxcdlCX7mfyCDJX1ZtStOyjyPrJHNXUuFkLzAM4V0.jpg.jpg</video:thumbnail_loc><video:duration>209</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-content-translation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Content Translation</video:title><video:description>When it comes to translating your site’s content in Drupal 7, we have two possibilities. There is the core “Content translation” module and the contributed “Entity translation” module. They have quite different approaches to translation. So, in this lesson we&#039;ll compare the Content and Entity Translation modules, and take a look at how node translations work.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://vimeo.com/27068202&quot;&gt;Video about the difference between Content and Entity&lt;/a&gt; 
&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt; 
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/t9v9tHksQlPhhWrz3RjhLRH1eea6EsXQc7en9UWO1dE.jpg.jpg</video:thumbnail_loc><video:duration>465</video:duration><video:publication_date>2014-10-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-translating-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Translating Content</video:title><video:description>With our interface taken care of, now we can configure multilingual support for our content. That is, we need to be able to identify which language a given piece of content is written in and then create translations. So, we already have articles, and we need to add a knowledge base to the site as well. For both of these types of content, we’ll need to identify the language they are written in, as well as provide related, linked translated versions. In this lesson we&#039;ll enable the core Book module for our knowledge base, enable multilingual content, and start translating our knowledge base.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yBSWpQTdUfhjx8UdEyS4gBX4uM3_BpRrVANcv4ok-XU.jpg.jpg</video:thumbnail_loc><video:duration>535</video:duration><video:publication_date>2014-10-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-translating-interface</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Translating the Interface</video:title><video:description>Not everyone wants or needs to install yet another module, and due to the caveats we mentioned about Localization client, it is still a good idea to be familiar with all of your options. In this lesson, we&#039;ll review the Locale module translation process, then enable Localization Client and start translating some text!

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/l10n_client&quot;&gt;Localization Client project&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Vkvj7NI6j45dfdnrwBV8mH7E_FyplEmHvAeWGM26DIc.jpg.jpg</video:thumbnail_loc><video:duration>477</video:duration><video:publication_date>2014-10-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-internationalization</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Internationalization</video:title><video:description>So far we’ve got a nice start with getting our site translated, but everything is not quite smooth yet. We have translations for some of our content and menu items, but we&#039;re seeing all the content at the same time. You will also see some stray interface text still in English. To take our multilingual site further and really make it shine, in this lesson we&#039;re going to turn to a package of modules called Internationalization (i18n). There is a central Internationalization module, which comes packaged with a handful of other modules designed to work together to extend core’s multilingual features.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/i18n&quot;&gt;Internationalization (i18n) project&lt;/a&gt;
&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nBFxAe9QEmvAYYA5iY4__Kwi1TBQWFz0AcZ1PRYZ-TQ.jpg.jpg</video:thumbnail_loc><video:duration>652</video:duration><video:publication_date>2014-10-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-content-selection</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Content Selection</video:title><video:description>Translated content on a Drupal is all shown at the same time by default. The Internationalization module will let you display only content that is relevant to the language currently in use, which is referred to as &quot;content selection.&quot; In this lesson we&#039;re going to configure our site&#039;s content selection and the test it out to make sure it working as expected.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aItsYdCiqUUWDX7-0UO7KExNEgsFUCVYPms5Rl8IXC4.jpg.jpg</video:thumbnail_loc><video:duration>259</video:duration><video:publication_date>2014-10-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-site-wide-variables</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Site-Wide Variables</video:title><video:description>Before we can translate the various site-wide variables, like the site name or slogan, we need to let Drupal know which ones we want to make translatable. To do this, we’ll need to use the Variable translation module from the Internationalization package. In this lesson we&#039;ll enable a multilingual variable so that we can see how to translate the site name.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jlfFPudrexta5h3ohT4MlZYY1VjVtyTljYgq4GrxEpE.jpg.jpg</video:thumbnail_loc><video:duration>271</video:duration><video:publication_date>2014-10-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-content-types</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Content Types</video:title><video:description>We’ve translated the site name, but we still have other stubborn text on the site that we couldn&#039;t select on the Variable translation page. Our content types for the site are still using English for the content type name on the “Create content” page, and for field names when making new content. In this lesson, to fix this up, we&#039;ll walk through translating content type names, the Title label on the content type, and also see how to tackle the field labels as well.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cElJ8gHEcMxGu4RvZcSixrexF-6suAqMFmiIEB2J74M.jpg.jpg</video:thumbnail_loc><video:duration>386</video:duration><video:publication_date>2014-10-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-taxonomy</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Taxonomy</video:title><video:description>When using Drupal’s taxonomy system, we need to find a way to sync the terms that we create to keep the taxonomy selection limited to just the terms for a given language. We don’t want all of the different languages showing up at the same time when someone is looking at a vocabulary or individual terms on the site. We&#039;re going to work with taxonomy to create our site&#039;s forum. The Forum module’s containers and forums structure is built on Drupal’s core taxonomy, so it is also creating a new vocabulary on our site. The forums on our client’s site need to display the threads that follow the same content selection rule as the rest of the content on the site. That is, we’ll only show the forum posts for the selected language. The site will have preset containers and forums, and then users may post to them using whichever language they choose.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xYYVVHc9NZ2ICIVihlBNebNlvWvfT4VfBy9BafLy92Y.jpg.jpg</video:thumbnail_loc><video:duration>498</video:duration><video:publication_date>2014-10-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-multilingual-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Multilingual Further</video:title><video:description>&lt;p&gt;There are a lot of tools available for working with multilingual sites, and we&#039;ve implemented the main pieces we needed to build the site that Blue Peak Fanatics needs. In this lesson we&#039;ll take a look at some more modules we might consider down the road.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Language icons&lt;/li&gt;
	&lt;li&gt;Language switcher dropdown&lt;/li&gt;
	&lt;li&gt;Transliteration&lt;/li&gt;
	&lt;li&gt;Translation overview&lt;/li&gt;
	&lt;li&gt;Translation table&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GoA8uyBqTcxl0Z7RWKg6vMTHPhZxFMv4TNmVj1hQV34.jpg.jpg</video:thumbnail_loc><video:duration>381</video:duration><video:publication_date>2014-10-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/summary-our-multilingual-site</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Summary of our Multilingual Site</video:title><video:description>We built a nice, simple, easy-to-use site for our clients that gave them the tools they needed for discussions and a knowledge base. We set up a forum that displays only posts that are in the user’s language and a knowledge base book where all of the site members can create translations for the pages. The major need for this community was being able to use multiple languages and easily extend those languages in the future. Using Drupal’s core internationalization features with a handful of contributed modules, we have given them a very flexible multilingual solution. In this final lesson we&#039;ll tour the Blue Peak Fanatics site, discuss our implementation points, and review the modules and resources we used to build this site.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-chapter-9-online-store&quot;&gt;Using Drupal Chapter 9: Online Store&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AOCZRO9xpkqd8tGMRPeSx_c7rc6McYde-2bAQquI774.jpg.jpg</video:thumbnail_loc><video:duration>1152</video:duration><video:publication_date>2014-10-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-menu-translation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Menu Translation</video:title><video:description>The last little thing we need to do to clean up our site is to get our Home tab in the Main menu translated as well. Everything else in the menu is now translated, but the Home menu item isn&#039;t from one of the other features we&#039;ve created. It&#039;s just a regular menu item. In this lesson we&#039;ll enable multilingual menus and get that home page tab translated.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/oxab5zeAb5vMxlYrtO1Nxm5rlyF2rWL8Sp36Kr4ea0s.jpg.jpg</video:thumbnail_loc><video:duration>235</video:duration><video:publication_date>2014-10-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-bean-configurations-features-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Bean Configurations with the Features Module</video:title><video:description>&lt;p&gt;In this lesson we will cover all the settings that are new available in the Features module from the Bean module.  We will update our current feature with all of the settings we have configured from creating different Bean types. We will discuss what has been added and be reminded that content is not stored in the feature.  It is good practice to setup all of your configurations and get those configurations into code, then move those settings to your final environment before you start creating content.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZLFKhULbN15lshD1UuBVsP4RhSmv_6v4qCcZBuF1wgw.jpg.jpg</video:thumbnail_loc><video:duration>398</video:duration><video:publication_date>2014-10-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-module-development-looks-databases</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/automated-testing-drupal-7-simpletest</loc><lastmod>2025-09-04T19:15Z</lastmod><changefreq>yearly</changefreq><priority>0.3</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-automated-testing-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Automated Testing with SimpleTest</video:title><video:description>Testing, and quality assurance, are an important part of maintaining high-quality software. Together they ensure that the code we write functions as it is intended to, and that changes made later on do not introduce any regressions into our application. Its tedious work and generally involves coming up with a list of tasks that prove a specific feature is working, and then repeating the list of tasks every time a change is made.

Automated testing is the process of writing code to reduce the number of things we need to do manually when testing our software. That list you created to ensure your software is working correctly is likely something that can be easily automated with a testing framework like SimpleTest. Doing so can dramatically reduce the amount of time it takes to perform QA, and improve the overall stability of our applications.

The SimpleTest testing framework was introduced into Drupal core early on in the Drupal 7 development cycle. Since then it has had a profound impact on the way our community develops Drupal. Core now contains a whole suite of tests that cover somewhere in the neighborhood of 75% of the softwares functionality. Every time a new features is introduced, or a bug is fixed, this battery of tests confirms that the fix to the date formatting function didn&#039;t inadvertently break something else.

In this series we&#039;ll learn to write our own automated tests for Drupal 7 using SimpleTests. We&#039;ll walk through enabling SimpleTest, and running one or more test cases with both the SimpleTest UI, and with drush. Then we&#039;ll cover some of the related terminology like the difference between functional tests and unit tests. As well as discuss why testing is an important part of development and worth the investment.

Then we&#039;ll walk through writing a test case and a set of assertions in orders to verify that various features of our site are working. We&#039;ll use functional tests based on the &lt;code&gt;DrupalWebTestCase&lt;/code&gt; class, which simulates a browser navigating our site and clicking on links, and filling out forms. And the &lt;code&gt;DrupalUnitTestCase&lt;/code&gt; class, which allows us to write super fast unit tests for the business logic contained within our code.

After watching this series you should be able to:

&lt;ul&gt;
&lt;li&gt;Install the SimpleTest module and run the tests included with core.&lt;/li&gt;
&lt;li&gt;Define and know the difference between functional tests, unit tests, test cases, and assertions.&lt;/li&gt;
&lt;li&gt;Create a new test case so that SimpleTest can discover and run your tests.&lt;/li&gt;
&lt;li&gt;Write assertions that test the validity of your application in a given state.&lt;/li&gt;
&lt;li&gt;Use the test browser to click on links and navigate to pages on a site.&lt;/li&gt;
&lt;li&gt;Fill out and submit forms and AJAX form elements using the test case browser.&lt;/li&gt;
&lt;li&gt;Handle file and image uploads in test cases.&lt;/li&gt;
&lt;li&gt;Write unit tests, and understand how the workflow for running unit tests differs from that of functional tests.&lt;/li&gt;
&lt;li&gt;Use the SimpleTest 7.x-2.x module from contrib to test existing websites.&lt;/li&gt;
&lt;/ul&gt;

This series assumes that you have basic understanding of Object Oriented PHP, and are familiar with Drupal module development. If you need to brush up on your module development watch our series on &lt;a href=&quot;https://drupalize.me/videos/introduction-module-development-drupal-7&quot;&quot;&gt;Drupal 7 Module Development&lt;/a&gt;. And, while not required to run tests, we do make use of drush in this series so knowing &lt;a href=&quot;https://drupalize.me/videos/what-drush?p=1156&quot;&gt;how to run drush commands&lt;/a&gt; is helpful.

Writing tests can be a challenging. But it doesn&#039;t have to be. And the benefits of doing so are huge. Especially as our web applications become more complex, as our teams grow, and as the multitude of ways in which people interact with our web applications changes constantly. Spending some time learning how to write tests will not only make your applications more reliable, it&#039;ll also make you a better developer.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/introduction-module-development-drupal-7&quot;&quot;&gt;Drupal 7 Module Development series&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/what-drush?p=1156&quot;&gt;Introduction to Drush&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Eu8vWcyb-UZqWC3cJoj21Xw82R-ITh35e2QLs2P4XXw.jpg.jpg</video:thumbnail_loc><video:duration>319</video:duration><video:publication_date>2015-01-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-automated-testing</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is Automated Testing?</video:title><video:description>&lt;p&gt;Developers write tests for a variety of different reasons and understanding why, and how, writing tests can improve the quality of our code and our sanity helps motivate ourselves to write tests. The tests we write usually take one of two forms. Functional tests are used to test an applications behavior. When I click this link does it take me to the about page? Unit tests are used to verify the logic within a small segment, or unit, of code. When I call this function that is supposed to return a link with these specific parameters does it return the correct data? There are a ton of reasons that investing time and resources into writing automated tests is a big win in the long run and in this lesson we&#039;ll cover a bunch of them, including:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Eliminate repetitive tasks.&lt;/li&gt;
	&lt;li&gt;Improve overall stability of an application.&lt;/li&gt;
	&lt;li&gt;Ensure critical paths &amp; edge cases function.&lt;/li&gt;
	&lt;li&gt;Reduce (not eliminate) the number of tests that need to be performed manually.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Types of Tests&lt;/h3&gt;
&lt;p&gt;There are are two main types of tests and we&#039;re going to be writing. &lt;span style=&quot;line-height: 1.75;&quot;&gt;Functional tests, and Unit tests.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Functional tests&lt;/strong&gt;, also known as integration tests, test the functionality of a particular aspect of an application by simulating normal interaction with that system. In the case of web software this usually refers to simulating a user navigating and interacting with the website as if they where using their browser, keyboard, and mouse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unit testing&lt;/strong&gt; is the art and practice of taking a small portion of code, a unit, and subjecting it to programmatic tests to prove its correctness. For example, testing a function that performs unit conversion by comparing a known input with an anticipated result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; This video references qa.drupal.org which is no longer in use. On &lt;a href=&quot;https://qa.drupal.org/node/233.html&quot;&gt;Friday, October 23rd 2015&lt;/a&gt; - qa.drupal.org received and processed it&#039;s last 
test. The qa.drupal.org testbots have now been superseded by &lt;a href=&quot;https://www.drupal.org/node/2538838&quot;&gt;DrupalCI&lt;/a&gt; - and  test results are now displayed directly on Drupal.org. While the mechanics are different now, the end result is still all patches to Drupal core are automatically tested.&lt;/p&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cClE2GT4TzwyPs51dBQYclcw7rGUv6IrZdqloj8Ed44.jpg.jpg</video:thumbnail_loc><video:duration>990</video:duration><video:publication_date>2015-01-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-more-module-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/understanding-simpletests-terminology-and-methodology</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Understanding SimpleTest&#039;s Terminology and Methodology</video:title><video:description>SimpleTest is the tool that Drupal 7 core uses for discovering, and running all of it&#039;s tests. SimpleTest is also the name of the system that is used to write tests that can be run by the SimpleTest module. Understanding how SimpleTest locates the code that makes up our tests, and then executes that code, is an important part of understanding how to write tests. In this lesson we&#039;ll be discussing the pieces that make up the SimpleTest toolkit, some related terminology, and some best practices for dealing with SimpleTests in Drupal.

&lt;strong&gt;Methodology&lt;/strong&gt;

Some best practices to keep in mind when working with SimpleTest and writing tests.

&lt;ul&gt;
&lt;li&gt;Tests should always be run in a separate environment from your production site.&lt;/li&gt;
&lt;li&gt;Each test case sets up a completely new Drupal env, as such your test case needs to prepare the new environment as appropriate for your tests. Things like enabling any necessary modules, creating dummy content, and users etc. For this reason, it&#039;s best to have tests that require a similar setup be part of the same test case for better performance.&lt;/li&gt;
&lt;li&gt;After a test case is run the environment is torn down and started fresh for the next test case. This ensures there is no contamination between test cases and that each test can count on knowing exactly what to expect from the environment it&#039;s running in.&lt;/li&gt;
&lt;li&gt;SimpleTest is not always ideal for doing functional testing of your existing site. Drupalize.Me for example, we want to test that our About page is visible. But that&#039;s content, and doesn&#039;t live in code anywhere so creating it at install time can be tricky: We&#039;ll cover this scenario in more depth later.&lt;/li&gt;
&lt;li&gt;Always test both sides of the problem. If your site only allows authenticated users to make comments, and you write a test to make sure authenticated users can comment you&#039;ll also want to make sure you write a test that verifies that anon. users can not comment. If you&#039;re checking that a value exists under specific conditions, also verify that it doesn&#039;t exist when those conditions are not met&lt;/li&gt;
&lt;/ul&gt;

&lt;strong&gt;Terminology&lt;/strong&gt;

SimpleTest: The original name of the module used for testing in Drupal. Though it&#039;s now called just &quot;Testing&quot;, the terms are used interchangeably. Based on the PHP SimpleTest library.

Test Case: A set of conditions under which the tester will determine whether the system being tested satisfies requirements and works correctly. A Test case defines the environment in which a test or set of tests will run. Including preconditions such as what modules are enabled, what content exists, etc. It is assumed that these same preconditions are true for all individual tests within a test case.

In Drupal, all test cases are classes that extend the &lt;code&gt;DrupalWebTestCase&lt;/code&gt;, or the &lt;code&gt;DrupalUnitTestCase&lt;/code&gt; class.

Test (Test method): Each individual test checks the functionality of one discreet thing. Example, if our test case is &quot;User cancellation&quot; there are many variations of cancellation that we need to test. Cancel the account and keep their content, cancel the account and delete their content, don&#039;t allow cancellation of the account with UID 1, etc. Each of these individual tests is checking one piece of functionality with the test case.

Assertion: The smallest unit of a test. An assertion is used to check wether or not a given condition is true in the current context.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;div&gt;&lt;a href=&quot;https://www.drupal.org/simpletest&quot;&gt;SimpleTest Main Documentation&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.drupal.org/node/394888&quot;&gt;SimpleTest Overview&lt;/a&gt;&lt;/div&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2tBk3VzJvWkzLLQ7ygPV0B_JXKHvBiDSex_tOf-BKto.jpg.jpg</video:thumbnail_loc><video:duration>795</video:duration><video:publication_date>2015-01-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/installing-simpletest-and-running-tests</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Installing SimpleTest and Running Tests</video:title><video:description>Before we get into writing our own tests we need to enable the SimpleTest module, and while we&#039;re at it we may as well talk about the various configuration options it has. And then why not run a few of the tests that come with Drupal core as a way to learn how to discover and run all the tests, a group of tests, or even an individual test case.

The SimpleTest module comes with Drupal 7 core, but is not enabled by default. So we can start by enabling the module. On the administration page for enabling modules the module is listed as &quot;Testing&quot; instead of SimpleTest which can be a bit confusing. The the UI you&#039;ll almost always see the name &quot;Testing&quot;, but in the code, documentation, and at the command line it&#039;s generally referred to as SimpleTest.

Once the module is enabled there are just a few new permissions and configuration options to cover. The new &#039;run tests&#039; permission, and a couple of settings related to enabling verbose output for debugging of tests. Make sure you check them all out.

Tests can be run in a variety of different ways, either from your browser using the Testing module&#039;s UI, or at the command line with drush. We&#039;ll cover both of them in this lesson. And in doing so we&#039;ll look at how to run a group of tests, or an individual test case, and the output that&#039;s generated by running tests.

I&#039;ve also got a module (which you can download from this page) that contains a couple of failing tests. This way we can run a test case that fails, and see what the output looks like from a failure. SimpleTest outputs some helpful debugging information, and with the verbose option enabled will even save the generated HTML of each page the SimpleTest browser saw so that we can review it after the test run is complete.

If you&#039;re not familiar with drush checkout our &lt;a href=&quot;https://drupalize.me/videos/what-drush?p=1156&quot;&gt;series on using drush&lt;/a&gt;.

By the end of this lesson you should be able to enable and configure the simple test module and run some tests.

&lt;strong&gt;Example drush commands&lt;/strong&gt;

Run all tests in the &quot;Block&quot; group:
&lt;pre&gt;&lt;code&gt;drush -l http://localhost/demos/simpletest-7x/docroot test-run Block&lt;/code&gt;&lt;/pre&gt;

Run just the &quot;BlockHashTestCase&quot; test case:
&lt;pre&gt;&lt;code&gt;drush -l http://localhost/demos/simpletest-7x/docroot test-run BlockHashTestCase&lt;/code&gt;&lt;/pre&gt;

&lt;strong&gt;Note:&lt;/strong&gt; as of Drush 7 the &lt;code&gt;drush test-run&lt;/code&gt; command is no longer part available. See https://github.com/drush-ops/drush/issues/599.

You can either, use Drush 6, or use the &lt;code&gt;scripts/run-tests.sh&lt;/code&gt; scrip that comes with Drupal core. See the &lt;a href=&quot;https://www.drupal.org/node/645286&quot;&gt;documentation for the run-tests.sh script&lt;/a&gt; for more information.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WCAVilBZf2EBUpKRhdTWg1zUk3EPTjKJOLRTrF1kiv8.jpg.jpg</video:thumbnail_loc><video:duration>1182</video:duration><video:publication_date>2015-01-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/learning-test-case-basics-writing-hello-world-test</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Learning Test Case Basics by Writing a Hello World Test</video:title><video:description>In this lesson we&#039;ll write a hello world test that navigates to the front page of a standard Drupal installation and verifies the existence of the text, &quot;No front page content has been created yet.&quot;. This will allow us to walk through creating a .test file, adding it to our modules .info file, as well as cover the basics of extending &lt;code&gt;DrupalWebTestCase&lt;/code&gt; to write our own test case. For this lesson we&#039;ll use the helloworld sample module as a starting point and expand it to add a very basic test. The goal being to gain a better understanding of how the SimpleTest module discovers, and runs our tests. Then in future lessons we can expand on our test case to add more robust features.

All SimpleTest tests are an extension of either the &lt;code&gt;DrupalWebTestCase&lt;/code&gt; (we&#039;ll focus on this one), or the &lt;code&gt;DrupalUnitTestCase&lt;/code&gt; base classes. There are two pieces to the discover process. Writing a new class that extends one of the base classes, and then declaring the file that contains this new class in your module&#039;s .info file so that the file and it&#039;s code are indexed and inserted into the registry.

Create a new file inside the helloworld module&#039;s directory: &lt;em&gt;tests/helloworld.test&lt;/em&gt;. The convention is to name files that contain test classes with a .test extension. Similar to how module file, despite being purely PHP, are named with a .module extension.

Then we&#039;ll add a basic skeleton test class like so:

&lt;pre&gt;&lt;code&gt;
class HelloworldTests extends DrupalWebTestCase {
  /**
   * Metadata about our test case.
   */
  public static function getInfo() {
    return array(
      &#039;name&#039; =&gt; &#039;Hello World&#039;,
      &#039;description&#039; =&gt; &#039;Tests for the Hello World module.&#039;,
      &#039;group&#039; =&gt; &#039;Hello World Group&#039;,
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

Our class includes a &lt;code&gt;getInfo()&lt;/code&gt; method, it&#039;s required, and it returns a simple associative array with meta-data about our test. This information is used by the SimpleTest UI and other test runners to provide human readable information about our tests and to do things like group like tests together. When you view the lists of tests in the SimpleTest UI, you&#039;re seeing the &#039;name&#039;, and &#039;description&#039; provided by your test classes&#039; getInfo() method.

All tests should have a setUp() method as well. This method is called by the test runner after Drupal has been installed, but before our tests are run. It gives us the chance to perform any additional configuration on the environment within which the tests are running. In our case, we need to enable the helloworld module since it&#039;s not part of the default install profile. We can do that by delegating to the parent classes&#039; setUp() method and passing an array of modules we want enabled. That might look something like this:

&lt;pre&gt;&lt;code&gt;
/**
 * Perform any setup tasks for our test case.
 */
public function setUp() {
  parent::setUp(array(&#039;helloworld&#039;));
}
&lt;/code&gt;&lt;/pre&gt;

Finally, we need to provide at least one method whose name starts with &quot;test&quot;. This method, and all others whose name starts with test will be called in succession by the test runner and are expected to contain the assertions that make up our individual test.

&lt;pre&gt;&lt;code&gt;
public function testHelloWorld() {
  $this-&gt;drupalGet(&#039;helloworld&#039;);
  $this-&gt;assertText(&#039;Hello World. Welcome to Drupal.&#039;, &#039;The page content is present.&#039;);
}
&lt;/code&gt;&lt;/pre&gt;

This test will navigate to the url /helloworld, and then verify that the text &quot;Hello World. Welcome to Drupal.&quot;, is displayed on the page.

In order for our test to show up in the SimpleTest UI we need to add it to the registry. We can do so by modifying the &lt;em&gt;helloworld.info&lt;/em&gt; file and adding the line &lt;code&gt;files[] = tests/helloworld.test&lt;/code&gt; to the file. Then clear the cache and Drupal should discover your new test case and allow you to run the tests either through the SimpleTest UI or with drush.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/class/DrupalWebTestCase/7&quot;&gt;DrupalWebTestCase documentation&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/blog/201502/write-hello-world-test-drupal-7-simpletest&quot;&gt;Written tutorial based on this video&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rofadbbcQJLLX4inuX_fLnjZkaUjLw8nmWyAgVYw0xo.jpg.jpg</video:thumbnail_loc><video:duration>852</video:duration><video:publication_date>2015-01-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/different-types-assertions-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Different Types Of Assertions in SimpleTest</video:title><video:description>Assertions are like the answer sheet a teacher uses when grading a multiple choice test. When we write tests our primary objective is to check, or assert, that the state of some system, or the value of some variable, in the specified context matches our expectations. Like saying, &quot;I expect that when I break this cookie in half I&#039;ll see chocolate pieces.&quot;. If you break the cookie and they are not there you might then decide that this particular cookie does not pass the chocolate chip cookie test. And flag it for review.

There are a lot of different types of assertions that we can make when using SimpleTest and this lesson attempts to demystify what each of the different types of assertions does. There is some really good documentation about the various types of assertions and some examples of using them in the &lt;a href=&quot;https://www.drupal.org/node/265828&quot;&gt;Assertions documentation page&lt;/a&gt; on Drupal.org.

Not all of the assertions in SimpleTest are listed there though. For that, your best bet is to look at the &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/class/DrupalWebTestCase/7&quot;&gt;API documentation for DrupalWebTestCase&lt;/a&gt;, and use the filter field at the top of the table to limit the list to only methods that start with the keyword &quot;assert&quot;. This will give you a complete, and up-to-date list of all the assertions.

&lt;strong&gt;Basic assertion types reference:&lt;/strong&gt;

&lt;p&gt;Checking the value of something&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assertTrue&lt;/li&gt;
&lt;li&gt;assertFalse&lt;/li&gt;
&lt;li&gt;assertNull&lt;/li&gt;
&lt;li&gt;assertNotNull&lt;/li&gt;
&lt;li&gt;assertEqual&lt;/li&gt;
&lt;li&gt;assertNotEqual&lt;/li&gt;
&lt;li&gt;assertIdentical&lt;/li&gt;
&lt;li&gt;assertNotIdentical&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking for the presence of something&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assertPattern&lt;/li&gt;
&lt;li&gt;assertNoPattern&lt;/li&gt;
&lt;li&gt;assertRaw&lt;/li&gt;
&lt;li&gt;assertNoRaw&lt;/li&gt;
&lt;li&gt;assertText&lt;/li&gt;
&lt;li&gt;assertNoText&lt;/li&gt;
&lt;li&gt;assertTitle&lt;/li&gt;
&lt;li&gt;assertNoTitle&lt;/li&gt;
&lt;li&gt;assertUniqueText&lt;/li&gt;
&lt;li&gt;assertNoUniqueText&lt;/li&gt;
&lt;li&gt;assertLink&lt;/li&gt;
&lt;li&gt;assertNoLink&lt;/li&gt;
&lt;li&gt;assertResponse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking form elements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assertFieldById&lt;/li&gt;
&lt;li&gt;assertNoFieldById&lt;/li&gt;
&lt;li&gt;assertFieldByName&lt;/li&gt;
&lt;li&gt;assertNoFieldByName&lt;/li&gt;
&lt;li&gt;assertFieldChecked&lt;/li&gt;
&lt;li&gt;assertNoFieldChecked&lt;/li&gt;
&lt;li&gt;assertOptionSelected&lt;/li&gt;
&lt;li&gt;assertNoOptionSelected&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/node/265828&quot;&gt;Drupal.org Assertion Examples / Documentation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kYvdSV7DqZwIahh5hFPNqtbveMtXB8Bo8cg4Geq8PSU.jpg.jpg</video:thumbnail_loc><video:duration>1113</video:duration><video:publication_date>2015-01-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/navigating-site-simpletests-browser</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Navigating a Site with SimpleTest&#039;s Browser</video:title><video:description>If we&#039;re going to do functional testing of the various pages in our application we&#039;ll need to be able to navigate to the pages in question. The DrupalWebTestCase&#039;s built in browser provides us with two different ways to navigate our site. In this lesson we&#039;ll explore using the &lt;code&gt;DrupalWebTestCase&#039;::drupalGet()&lt;/code&gt;, and &lt;code&gt;DrupalWebTestCase::clickLink()&lt;/code&gt; functions in order to navigate throughout our application. The former is useful when we know the exact URL of the page we want to navigate to and the latter is useful when we don&#039;t necessarily know the URL but we know which link to follow to get there.

I like to think of &lt;code&gt;DrupalWebTestCase::drupalGet()&lt;/code&gt; as typing an address into the URL bar in my browser. I know the page I want to navigate to so take me right to it. &lt;code&gt;DrupalWebTestCase::drupalGet()&lt;/code&gt; can be used inside a test case like so:

&lt;pre&gt;&lt;code&gt;
public function testHelloWorld() {
  $this-&gt;drupalGet(&#039;helloworld&#039;);
}
&lt;/code&gt;&lt;/pre&gt;

This points the SimpleTest internal browser to the &lt;code&gt;helloworld&lt;/code&gt; page on our site, and loads the HTML content of that page into the buffer so we can perform assertions on its content.

&lt;code&gt;DrupalWebTestCase::clickLink()&lt;/code&gt; on the other hand is more like looking at the content of the page, reading through the links in the navigation menu and then deciding that you would like to click on the one labeled &quot;Hello World&quot;. You don&#039;t know what address it&#039;s going to take you to, but that&#039;s okay because what matters is that you end up on the page. &lt;code&gt;DrupalWebTestCase::clickLink()&lt;/code&gt; operates by scanning the SimpleTest browsers buffer of the current page&#039;s HTML content for any link whose label matches the value provided.

&lt;pre&gt;&lt;code&gt;
public function testHelloWorld() {
  $this-&gt;clickLink(&#039;Hello World&#039;);
}
&lt;/code&gt;&lt;/pre&gt;

This would have the effect of clicking on the following link:

&lt;pre&gt;&lt;code&gt;
&amp;lt;a href=&quot;helloworld&quot;&amp;gt;Hello World&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

Or really, just extracting the value of the href attribute from that a tag and feeding it to &lt;code&gt;DrupalWebTestCase::drupalGet()&lt;/code&gt;.

I find the best reference for these helper methods is located in the Drupal.org handbook. https://www.drupal.org/node/265762

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/node/265762&quot;&gt;SimpleTest helper method reference&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/class/DrupalWebTestCase/7&quot;&gt;DrupalWebTestCase API documenation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/sSdrnNRfjGqb25DTKSt3egsjxBa4NpyHKyZ15JfokvA.jpg.jpg</video:thumbnail_loc><video:duration>737</video:duration><video:publication_date>2015-01-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/testing-and-submitting-forms-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Testing and Submitting Forms with SimpleTest</video:title><video:description>Much of the functionality that web based applications provide is in the form of an HTML form. Enter some data into the various fields, press the submit button, and see what happens. The DrupalWebTestCase provides a handful of methods to aid in interacting with forms. In this lesson we&#039;ll take a look at filling out various types of form fields, submitting forms, and validating the result.

We&#039;ll start by navigating to a page that contains a form and simply verifying that the appropriate fields are found on the page.

&lt;pre&gt;&lt;code&gt;
$this-&gt;drupalGet(&#039;helloworld/form&#039;);
$this-&gt;assertFieldByXpath(&quot;//form[@id=&#039;helloworld-cake-form&#039;]//input[@name=&#039;name&#039;]&quot;, &#039;&#039;, &#039;The name field is present.&#039;);
$this-&gt;assertFieldByName(&#039;choice&#039;, &#039;cake&#039;, &#039;The choice field is present.&#039;);
&lt;/code&gt;&lt;/pre&gt;

This code checks for the &lt;code&gt;input name=&quot;name&quot;&lt;/code&gt; field, and the &lt;code&gt;select name=&quot;choice&quot;&lt;/code&gt; field, and ensures they are present on the page at hellworld/form.

Then we&#039;ll use the &lt;code&gt;DrupalWebTestCase::drupalPost()&lt;/code&gt; method to fill in, and submit, a form. Here&#039;s an example:

&lt;pre&gt;&lt;code&gt;
$data = array(
  &#039;name&#039; =&gt; &#039;&#039;,
  &#039;choice&#039; =&gt; &#039;chicken&#039;,
);
$this-&gt;drupalPost(&#039;helloworld/form&#039;, $data, &#039;Submit&#039;);
$this-&gt;assertText(&#039;Your name field is required.&#039;, &#039;Name field is required.&#039;);
&lt;/code&gt;&lt;/pre&gt;

This code fills in the form on the hellworld/form page, and then clicks the submit button using the &lt;code&gt;DrupalWebTestCase::drupalPost()&lt;/code&gt; method. The first argument is the URL at which the form lives, the location to which the HTTP POST request will be sent. The second argument is an associative array of values for the form fields. The keys are the names of the input elements, and the values are the information we would like to enter into those fields.

In this lesson we also make use of the &lt;code&gt;$this-&gt;assertFieldByXPath()&lt;/code&gt; method, which allows us to select a form element on the page using an &lt;a href=&quot;http://www.w3schools.com/xpath/xpath_syntax.asp&quot;&gt;XPath&lt;/a&gt; selector. In our case, we need to do this because there are actually two input element on the page with their name attribute set to &quot;name&quot;, and we need to make sure we&#039;re testing the correct one. If you&#039;re not familiar with XPath it&#039;s worth taking some time to review the syntax since chances are you&#039;re going to end up using it at some point when working with SimpleTest.

For more information about these helper methods checkout the &lt;a href=&quot;https://www.drupal.org/node/265762&quot;&gt;API Functions handbook page&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/node/265762&quot;&gt;SimpleTest helper methods&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.w3schools.com/xml/xpath_syntax.asp&quot;&gt;XPath documentation&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zUO7jifigHm_wGRquFtO6XzawdUxdT_TnTs3Nal8hK4.jpg.jpg</video:thumbnail_loc><video:duration>1295</video:duration><video:publication_date>2015-01-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/handling-users-and-permissions-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Handling Users and Permissions in SimpleTest</video:title><video:description>Typically our application is going to require testing of functionality that is restricted to only users with a certain set of permissions. Like creating a new node for example. In order for the DrupalWebTestCase browser to test these pages we need to first log in to our site. In order to log in we need to have a username and password that we can use to login. In this lesson we&#039;ll look at using &lt;code&gt;DrupalWebTestCase::drupalCreateUser()&lt;/code&gt; and &lt;code&gt;DrupalWebTestCase::drupalLogin()&lt;/code&gt; in order to gain authenticated access to our application and then access and submit a restricted form.

Here&#039;s an example of creating a user with the &#039;administer site configuration` permissions:

&lt;pre&gt;&lt;code&gt;
$new_user = $this-&gt;drupalCreateUser(array(&#039;administer site configuration&#039;));
&lt;/code&gt;&lt;/pre&gt;

And then logging in as that user:

&lt;pre&gt;&lt;code&gt;
$new_user = $this-&gt;drupalLogin($new_user);
&lt;/code&gt;&lt;/pre&gt;

After that the SimpleTest browser will be logged in as that user and all requests that it makes will be authenticated. If you want to return to an anonymous user session you can use the &lt;code&gt;DrupalWebTestCase::drupalLogout()&lt;/code&gt; method.

For more information about these helper methods check out the &lt;a href=&quot;https://www.drupal.org/node/265762&quot;&gt;API Functions documentation&lt;/a&gt; in the Drupal.org handbook.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/node/265762&quot;&gt;SimpleTest helper method documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalWebTestCase%3A%3AdrupalLogin/7&quot;&gt;DrupalWebTestCase::drupalLogin()&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalWebTestCase%3A%3AdrupalCreateUser/7&quot;&gt;DrupalWebTestCase::drupalCreateUser()&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/B9Zihv7IaEWQ8YI3D7-N_aRwd8W2lXk6sHdltL8r2cs.jpg.jpg</video:thumbnail_loc><video:duration>833</video:duration><video:publication_date>2015-01-21</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-dummy-content-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Dummy Content with SimpleTest</video:title><video:description>There&#039;s another set of really useful helper methods that we haven&#039;t looked at yet which are geared towards creating dummy content for testing. Including simple tasks like generating random strings, or random names of a specified length, and more complex things like creating nodes, or even new content types. In this lesson we&#039;ll take a lot at the various helper methods in DrupalWebTestCase that assist in the creation of dummy content by creating various pieces of random content and then testing functionality based on that content.

In order to demonstrate these tools lets look at writing some tests for the core statistics module which amongst other things tracks page views for content. In order to perform these tests we&#039;re going to need a piece of content that we can view, and then view again to ensure that the statistics are properly updating.

Creating random strings can be done with &lt;code&gt;DrupalWebTestCase::randomName()&lt;/code&gt; and &lt;code&gt;DrupalWebTestCase::randomString()&lt;/code&gt;. Both  methods take an argument that allows you to set the number of characters that should be returned, or you can just leave out to get the default. The difference between the two is that &lt;code&gt;DrupalWebTestCase::randomName()&lt;/code&gt; will only use alphanumeric characters and the returned string will always start with a letter. This is useful for things like generating random usernames or email addresses, or other things that don&#039;t allow for special characters.

The &lt;code&gt;DrupalWebTestCase::drupalCreateNode()&lt;/code&gt; helper can be used to create nodes. While you could navigate to and fill out the form using SimpleTest this is much quicker and requires far less code. Here&#039;s an example of creating a node:

&lt;pre&gt;&lt;code&gt;
$title = $this-&gt;randomName();
$settings = array(
 &#039;type&#039; =&gt; &#039;page&#039;,
 &#039;promote&#039; =&gt; 1,
 &#039;title&#039; =&gt; $title,
 &#039;body&#039; =&gt; array(LANGUAGE_NONE =&gt; array(
   array(
     &#039;value&#039; =&gt; &#039;Copy goes here&#039;,
     &#039;format&#039; =&gt; filter_default_format(),
   ),
 )),
);
$node = $this-&gt;drupalCreateNode($settings);
&lt;/code&gt;&lt;/pre&gt;

This will create a new page node with a random title and the string &quot;Copy goes here&quot; in the body field. The array of values passed to &lt;code&gt;DrupalWebTestCase::drupalCreateNode()&lt;/code&gt; should mirror the structure of a node object. If you&#039;re unsure what that structure is one easy way to figure it out is to use node_load() to retrieve an existing node and inspect the returned object.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;div&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalTestCase%3A%3ArandomName/7&quot;&gt;DrupalWebTestCase::randomName()&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalTestCase%3A%3ArandomString/7&quot;&gt;DrupalWebTestCase::randomString()&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalWebTestCase%3A%3AdrupalCreateNode/7&quot;&gt;DrupalWebTestCase::drupalCreateNode()&lt;/a&gt;&lt;/div&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2EJZu9z8xdIoN6X9Mw9zRv40_4I9N0ksok0-WExIAyk.jpg.jpg</video:thumbnail_loc><video:duration>1204</video:duration><video:publication_date>2015-01-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/uploading-files-and-submitting-ajax-forms-simpletest</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Uploading Files and Submitting AJAX Forms with SimpleTest</video:title><video:description>One element of interacting with a web application that we haven&#039;t looked at yet is uploading files. How does the DrupalWebTestCase browser attach a file to the the image field when filling out an article form? In this lesson we&#039;ll look at the helpers that DrupalWebTestCase has for handling file interactions including how to use the sample files provided in core, attaching files to a file upload input element, and submitting a form with files attached. In order to demonstrate this we&#039;ll be writing a test that creates a new article node with an image attached by filling out the article node creation form and submitting it.

You can get a list of the dummy/test files that come with SimpleTest using the &lt;code&gt;DrupalWebTestCase::drupalGetTestFiles()&lt;/code&gt; method. Whenever possible I recommend making use of the provided files.

&lt;pre&gt;&lt;code&gt;
$files = $this-&gt;drupalGetTestFiles(&#039;image&#039;);
$this-&gt;verbose(print_r($files, TRUE));
&lt;/pre&gt;&lt;/code&gt;

You&#039;ll need to tell SimpleTest what type of files you&#039;re interested in, and it&#039;ll then return an array of the available files of that type. Valid types are: &#039;binary&#039;, &#039;html&#039;, &#039;image&#039;, &#039;javascript&#039;, &#039;php&#039;, &#039;sql&#039;, &#039;text&#039;. Check out &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalWebTestCase%3A%3AdrupalGetTestFiles/7&quot;&gt;the DrupalWebTestCase::drupalGetTestFiles documentation&lt;/a&gt; for more information.

Once you&#039;ve got the list of files you can attach files to a form element using &lt;code&gt;DrupalWebTestCase::drupalPost()&lt;/code&gt; by specifying the full path to the file as the value for the file or image field in the $data array.

&lt;pre&gt;&lt;code&gt;
$images = $this-&gt;drupalGetTestFiles(&#039;image&#039;);
$image_realpath = drupal_realpath($images[0]-&gt;uri);

$edit = array(
  &#039;title&#039; =&gt; &#039;Test Article With Image&#039;,
  &#039;files[field_image_und_0]&#039; =&gt; $image_realpath,
);
&lt;/code&gt;&lt;/pre&gt;

If SimpleTest doesn&#039;t contain a suitable file you can use your own by including the file with your module, and then using the full path to that file in your tests.

&lt;pre&gt;&lt;code&gt;
$custom_file = drupal_get_path(&#039;module&#039;, &#039;helloworld&#039;) . &#039;/tests/test.csv&#039;;
$realpath = drupal_realpath($custom_file);
&lt;/code&gt;&lt;/pre&gt;

This lesson also covers the use of &lt;code&gt;DrupalWebTestCase::drupalPostAJAX()&lt;/code&gt;, which allows for the simulation of an AJAX request using the SimpleTest browser. The primary difference between it and the drupalPost method is you need to specify the name of the element that triggers the AJAX request.

&lt;pre&gt;&lt;code&gt;
$this-&gt;drupalPostAJAX(&#039;node/add/article&#039;, $edit, &#039;field_image_und_0_upload_button&#039;);
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/node/30011&quot;&gt;Documentation about SimpleTest file uploads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/function/DrupalWebTestCase%3A%3AdrupalGetTestFiles/7&quot;&gt;DrupalWebTestCase::drupalGetTestFiles()&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VmjknfMfqdmn3Ao820_-AQIEwU1yNJALfbMrhbNvQcY.jpg.jpg</video:thumbnail_loc><video:duration>1102</video:duration><video:publication_date>2015-01-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/writing-unit-tests-using-drupalunittestcase</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Writing Unit Tests Using DrupalUnitTestCase</video:title><video:description>Due to the tightly coupled nature of much of Drupal 7&#039;s code most of the test suite is based around functional tests and not unit tests. However, there are a handful of unit tests in core as well as the &lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/class/DrupalUnitTestCase/7&quot;&gt;&lt;code&gt;DrupalUnitTestCase&lt;/code&gt;&lt;/a&gt; class that we can extend to write our own unit tests. Since unit tests are an important part of a complete test suite lets take a look at how we can extend the &lt;code&gt;DrupalUnitTestCase&lt;/code&gt; class and add some unit tests to our module. While functional tests do a good job of telling us that something is broken and we should fix it they often are not very helpful for locating the exact problem. Unit tests on the other hand are much more specific and can generally tell us both that something is wrong, and what is wrong.

Unit tests don&#039;t have access to the database or the file system since they are not run in the context of a fully bootstrapped Drupal environment. Note that calling any Drupal functions which attempt to access the database will result in an exception being thrown and cause your tests to fail. This includes functions like &lt;code&gt;watchdog()&lt;/code&gt;, and &lt;code&gt;module_implements()&lt;/code&gt;. However, because Drupal doesn&#039;t have to be bootstrapped, and we don&#039;t have to create an entirely new environment, unit tests are a whole lot faster to execute than functional tests.

In this lesson we&#039;re going to take a look at writing a unit test for a function in our module that is used to convert a length of time in seconds to a string like 1 hour 6 minutes. We&#039;ll start by looking at the code that does the conversion, and then come up with a list of known inputs and their expected outputs. Finally, we&#039;ll write a unit test by adding a new .test file that contains our unit tests and bombarding our conversion function to make sure it&#039;s working properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21simpletest%21drupal_web_test_case.php/class/DrupalUnitTestCase/7&quot;&gt;DrupalUnitTestCase()&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KzbEsZ7eTHIfnd_9SnhI1H6cKO2Rut_1PkBrcUu_ghA.jpg.jpg</video:thumbnail_loc><video:duration>846</video:duration><video:publication_date>2015-01-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/testing-existing-site-simpletest-2x</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Testing an Existing Site with SimpleTest 2.x</video:title><video:description>So far all the tests that we&#039;ve written are testing the functionality of our module in the context of a fresh Drupal install. However, in the real world we&#039;re also going to want to have tests that test the content of our application. As well as other things that it&#039;s unrealistic to assume we&#039;ll also have the time and resources to write a complete installation routine to replicate. Instead, it would be nice if we could test against a clone of our site rather than a from scratch installation of Drupal.

The SimpleTest module included with Drupal 7 core doesn&#039;t support this feature. However, the &lt;a href=&quot;https://www.drupal.org/project/simpletest&quot;&gt;7.x-2.x version of the module in contrib&lt;/a&gt; has a &lt;code&gt;DrupalCloneTestCase&lt;/code&gt; class that we can extend instead of the usual DrupalWebTestCase that operates on a clone of the database from our existing site. Allowing us to test things like, &quot;Does the about page exist.&quot;, and other mission critical features of our site. In this lesson we&#039;ll take a look at installing the SimpleTest module from contrib, and writing some new tests using the 2.x version of the API in order to test an existing website.

Note that after you install the 2.x version of the SimpleTest module none of the tests we&#039;ve written so far, or any of the tests from core will be in the list of available tests to run. This is because each tests needs to explicitly declare that it is compatible with the 2.x version of the test suite. This is done in the .info file of the module that provides the tests.

Add this to your .info file:

&lt;pre&gt;&lt;code&gt;
testing_api = 2.x
&lt;/code&gt;&lt;/pre&gt;

As of the time that this video was recorded you also need to apply the patch in &lt;a href=&quot;https://www.drupal.org/node/983266&quot;&gt;this SimpleTest issue&lt;/a&gt;. The current version of the patch to use is  https://www.drupal.org/files/issues/983266-10-simletest-clone.patch. Without it the DrupalCloneTestCase setup method won&#039;t properly clone the tables from your existing site. You should always use whatever the latest working patch is from that issue.

Here&#039;s how I patched it:

&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;
curl -O https://www.drupal.org/files/issues/983266-10-simletest-clone.patch
patch -p1 &amp;#x3C; 983266-10-simletest-clone.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://drupal.org/project/simpletest&quot;&gt;SimpleTest 2.x module&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patched with patch from &lt;a href=&quot;https://www.drupal.org/node/983266&quot;&gt;issue #983266&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/huwXKGL8XPvRXZF30IlPjm2a4KGEUuXmge75I9O31Bg.jpg.jpg</video:thumbnail_loc><video:duration>797</video:duration><video:publication_date>2015-01-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-appendix-b-choosing-right-modules</loc><lastmod>2023-08-11T00:49Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/finding-drupal-modules</loc><lastmod>2023-08-11T00:49Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Finding Drupal Modules</video:title><video:description>&lt;p&gt;In this short series you will learn how to find and evaluate Drupal modules for your project. This first tutorial will show you where to find modules on Drupal.org, and various ways you can use Drupal.org&#039;s search tools.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/project/project_module&quot;&gt;Drupal.org Modules page&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://www.drupal.org/project/project_module/categories&quot;&gt;Drupal module categories&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://groups.drupal.org/similar-module-review&quot;&gt;Similar modules group&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://www.drupal.org/case-studies&quot;&gt;Drupal case studies&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://www.drupal.org/planet&quot;&gt;Planet Drupal&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2-ohe_KW_tbnI3714DWluJPJRae8h6uLe2R35K_mBhQ.jpg.jpg</video:thumbnail_loc><video:duration>631</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/assessing-module-health</loc><lastmod>2023-08-11T00:50Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Assessing Module Health</video:title><video:description>An open source project’s strength comes from the power of its base of contributors, and a Drupal project is no different. Although every line of code added or changed in Drupal core goes through rigorous peer review, contributed modules are more of a Wild West where anyone who jumps through a few basic hoops can add modules for everyone to download. Whether or not a module is well maintained, its overall code quality, and how well used it is in the overall community are all important factors for you to consider when selecting modules. This tutorial will talk about determining these factors by closely inspecting the tools Drupal.org provides, starting with the central feature of all Drupal modules: the project page.


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tFeu3JAQjxxzuJ03NcD4FALQUTVb1mYR9xzZlLTtv94.jpg.jpg</video:thumbnail_loc><video:duration>1001</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/getting-involved-drupal</loc><lastmod>2023-08-11T00:50Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Getting Involved with Drupal</video:title><video:description>&lt;p&gt;By far, the best way to keep up-to-date on which modules are the most useful, and to ensure that those modules do what you need, is to actually get directly involved and help. The Drupal community offers a myriad of ways for everyone, from the person who just installed Drupal for the first time yesterday to the person who has been coding since she was in diapers, to give something back. In this tutorial we&#039;ll look at all of these options and explain how you can dive in.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.drupal.org/getting-involved-guide&quot;&gt;Drupal Getting Involved guide&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2caSuaqB0s_ZYOM0tHzo-HufuLH_omJSBWaxgpnEfx8.jpg.jpg</video:thumbnail_loc><video:duration>511</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-honeypot</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Honeypot</video:title><video:description>&lt;p&gt;Honeypot module helps you stop spammers in a different way than the typical spam modules that put up barriers, like captchas. Spambots will typically hit a form like the user registration page, fill in all the fields, and submit the form. Honeypot adds a hidden field to the form that users won&#039;t see, but spambots will. If that form is filled in, you know you&#039;ve found a bot and the submission is discarded. This tutorial will give you an overview of the Honeypot module, including the configuration and seeing how it works. This tutorial is based on a Lullabot.com Module Monday post.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/module-monday-honeypot&quot;&gt;Lullabot.com Honeypot article&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://drupal.org/project/honeypot&quot;&gt;Hopeypot module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cyGLH5Smk9yL0LnEFoNLxtfT_T1J8_t9f5M--GKTS5Y.jpg.jpg</video:thumbnail_loc><video:duration>432</video:duration><video:publication_date>2015-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-node-revision-delete</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: Node Revision Delete</video:title><video:description>&lt;p&gt;Drupal&#039;s revisioning system is really powerful. Out of the box we can keep track of changes in our content and restore to a previous version with just a couple clicks. However, on large sites with a lot of activity in their content, revisions can grow exponentially up to a size that it can compromise performance and disk storage. The Node Revision Delete module can help us to keep this under control. In this tutorial we&#039;ll walk through an overview of this helpful module. This tutorial is based on a Lullabot Module Monday article.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/module-monday-node-revision-delete&quot;&gt;Lullabot.com Node Revision Delete article&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://drupal.org/project/node_revision_delete&quot;&gt;Node Revision Delete module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/P-_y5zKqXtarwlKDHsulj-y7GRpT3pycdGh1jLQ6kAM.jpg.jpg</video:thumbnail_loc><video:duration>265</video:duration><video:publication_date>2015-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/lullabot-module-monday-tablefield</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Lullabot Module Monday: TableField</video:title><video:description>&lt;p&gt;Drupal&#039;s custom fields allow site builders to tweak out their content types with all kinds of data: phone numbers, file uploads, maps, and more. When it comes to tabular information, though, most of us fall back on simple HTML tables in the body field. The TableField module aims to fix that by storing and editing data tables with a single consolidated Drupal field type. In this tutorial we&#039;ll give you an overview of how to use the TableField module. This tutorial is based on a Lullabot Module Monday article.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/module-monday-tablefield&quot;&gt;Lullabot.com TableField article&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;https://drupal.org/project/tablefield&quot;&gt;TableField module&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NMo0YKRObZ_eU4Jetz4McUwTreDVI5n-yslvzOGK30o.jpg.jpg</video:thumbnail_loc><video:duration>274</video:duration><video:publication_date>2015-02-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/using-drupal-chapter-9-online-store</loc><lastmod>2024-07-03T00:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/case-study-sweet-tees</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Case Study: Sweet Tees</video:title><video:description>Many businesses, both large and small, would like to take better advantage of their web presence by selling their products or services directly online. Setting up ecommerce, however, can be a very daunting task. In this series you will create an online t-shirt shop, and in the process you will learn how to use the basic pieces of Drupal Commerce, including setting up a Paypal payment system, along with an introduction to the Feeds module, for importing our catalog, and the Rules module, to set up taxes. In this lesson we&#039;ll kick things off by reviewing the requirements for the Sweet Tees store, and discuss how we&#039;ll be going about implementing them.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EB_V0O2Ajvdg56MITNJFr_wcdX0ot_L2dWwHsuDOTrk.jpg.jpg</video:thumbnail_loc><video:duration>325</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-form-api-theme-functions-and-more-drush</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/spotlight-drupal-commerce</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Drupal Commerce</video:title><video:description>&lt;p&gt;Drupal Commerce is a complete package for running an online store. As such, it actually contains numerous submodules that each implement features of an online store, and can be turned on or off depending on the precise functionality required. In this section, we’ll look at each module in turn, and outline its purpose and where it fits. In this lesson we&#039;ll get an overview of the major components of Drupal Commerce, including:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Carts, checkout, taxes, and payment&lt;/li&gt;
	&lt;li&gt;Customers and orders&lt;/li&gt;
	&lt;li&gt;Products and pricing&lt;/li&gt;
	&lt;li&gt;Additional Drupal Commerce add-ons&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/commerce&quot;&gt;Drupal Commerce project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/O0qXtkY5dTjNcqCBXIiBsExtFohEu9Ag3P2hT7j11mY.jpg.jpg</video:thumbnail_loc><video:duration>902</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-managing-products-drupal-commerce</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Managing Products with Drupal Commerce</video:title><video:description>Before we get to the first step in creating our store—adding products—it’s worth taking some time to discuss and understand how Drupal Commerce treats products within the system. While product management may appear unintuitive at first, the product management features in Drupal Commerce are designed to allow for maximum flexibility. In this lesson we&#039;ll explain what product types are, and take a look at both the required fields that come with them, and the custom fields you can add.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EWfiRs9hIWPgFmbigMbrWe9xQC14bQH_N9GI5FCK-Ew.jpg.jpg</video:thumbnail_loc><video:duration>314</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-products-and-product-types</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Products and Product Types</video:title><video:description>The first step in setting up our online t-shirt store is to turn on a formidable array of modules to enable the Drupal Commerce module, and then set up product types for the merchandise that Sweet Tees sells: T-shirts and stickers. In this lesson we&#039;ll get the right modules enabled, configure our two product types, and then create some sample products to make sure it&#039;s all working the way we expect.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/88OgL-vckQN_YoWMfYqWD1_G84scAQdI5my6WFGRxe0.jpg.jpg</video:thumbnail_loc><video:duration>541</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-feeds-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Feeds Module</video:title><video:description>The Feeds module provides the capability to ingest data from any number of different sources and transform it into native Drupal constructs. It’s a versatile tool that can be used for things such as large-scale data migration, automatically populating a block of recent content from external sites, or synchronizing content posted among multiple sites. In this lesson we&#039;ll learn how Feed importers are created with the three main pieces of Fetchers, Parsers, and Processors.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://drupal.org/project/feeds&quot; style=&quot;line-height: 1.75;&quot;&gt;Feeds project&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lo-Fy75oLEMVochZsqHTE4Cu6bAwTdidl1xR9UoqAIA.jpg.jpg</video:thumbnail_loc><video:duration>371</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-bulk-importing-product-data</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Bulk-Importing Product Data</video:title><video:description>Now that we’re familiar with the Feeds module’s data import tools, let’s turn our attention to importing t-shirt products for Sweet Tees. Sweet Tees has kindly furnished us with a comma-separated values (CSV) file containing all of their t-shirt product data for this purpose. CSV is a common data export format from databases and spreadsheet programs. A CSV file is a simple text file that encodes a data set with each record on its own line, and a separator (such as a comma or tab) between the data values. In this lesson we&#039;ll create a feed importer for CSV files, map the CSV data to our Drupal Commerce products, and then actually import the CSV product data into our store.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aG82x4eU5x33I14uBwo7AMngNFOxd1bmywrCa0jrqsU.jpg.jpg</video:thumbnail_loc><video:duration>465</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-building-storefront-and-shopping-cart</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Building the Storefront and Shopping Cart</video:title><video:description>Now that all of this groovy product data is showing up fine in the administrative interface, there’s just one problem: how do we expose these products on our public website to our customers? And further, how do we avoid displaying a product catalog with 25 entries in it, when from a customer’s point of view we only sell four products (three t-shirts and a sticker)? In this lesson we&#039;ll get an overview of how Drupal Commerce handles this with the concept of product displays and product attributes.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/r8MqIodd9HEFZSGj-w1p-WVr-qHHgwPbzEuu9k9B-Ls.jpg.jpg</video:thumbnail_loc><video:duration>295</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-product-displays</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Product Displays</video:title><video:description>In this lesson we&#039;ll put what we just learned into action by creating a content type for product displays, and a few sample products to get the hang of how things work.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/M59RQBFZm-4ktFAr1RUsJ1rfs1q30qE5RXf_2hA7P80.jpg.jpg</video:thumbnail_loc><video:duration>257</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-creating-product-catalog</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Creating a Product Catalog</video:title><video:description>In this lesson we&#039;ll create a nice interface for browsing our products. We will categorize our product displays using the taxonomy system to get our like items grouped together. We&#039;ll walk through the process for creating a catalog vocabulary and terms, and then configure the content type and product type to bring it all together.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1xZ5UWfKWqXJrZRF9UOorPnmJJy72tgdvnN821R7jYA.jpg.jpg</video:thumbnail_loc><video:duration>392</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-product-catalog-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: The Product Catalog View</video:title><video:description>With our products nicely categorized, and the individual items looking good, the last step is to design a top-level catalog overview page using the Views module. In this lesson we&#039;ll create a catalog view and use relationships to pull in our product data. We&#039;ll also need to aggregate multiple products into one item so we don&#039;t have a crazy list of every possibility as individual items, and we&#039;ll wrap it all up nice and tidy by grouping the products based on taxonomy.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
	&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rYq0EpaOhKIxSczNyX2J3nLaxw7-erzkrA3SZh3y7TE.jpg.jpg</video:thumbnail_loc><video:duration>652</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-rules-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Rules Module</video:title><video:description>It’s easy to imagine that different kinds of stores might have certain things they want to have happen when various events take place throughout the purchasing process. For example, if someone adds more than 10 of an item to his cart, a store might want to provide a 10% discount. Or if someone was anonymous and then registers or logs in, a store might want to assign his old shopping cart to his newly found account. Traditionally, this kind of custom logic would have to be done in code by a programmer. However, the Rules module exposes a user interface for clicking together custom logic in a web-based interface. This increases accessibility to non-programmers, and also allows for bits of business logic to be shared among multiple sites with the Rules module’s import and export capabilities. In this lesson we&#039;ll review the main architectural blocks of the Rules module, covering events, conditions, actions, variables, and data selectors.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0yAiHERyGhTsRayyOjrrT1sJcBQOIpkvUcu6ItcFznY.jpg.jpg</video:thumbnail_loc><video:duration>574</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-taxes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Taxes</video:title><video:description>&lt;p&gt;In this lesson we&#039;ll try a practical example of some Rules module concepts for the Sweet Tees store. Drupal Commerce’s Tax module stores its tax charging in Rules. Before we can open up our store to the public, we need to ensure that all applicable sales taxes are being applied to our items. Because Sweet Tees is based in California, we will need to charge 7.25% sales tax on all products sold if the customer lives in the state of California. This means we need to set up a conditional tax rate to only apply to California.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/j62MDUub0zNCCHJTnIQup8YgtBwRYQ6QKRuHDUOx65g.jpg.jpg</video:thumbnail_loc><video:duration>351</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/getting-started-responsive-web-design-drupal-7</loc><lastmod>2024-06-27T23:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-responsive-web-design-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Responsive Web Design in Drupal</video:title><video:description>&lt;p&gt;In this series, Getting Started with Responsive Web Design in Drupal, we&#039;ll take an old Drupal theme based on a 960 pixel grid, and convert it, step by step, using just good ole CSS and HTML, to be more fluid, more flexible, more responsive than ever.&lt;/p&gt;

&lt;p&gt;Our case study is the Anytown Farmers Markets. Anytown Farmers Markets has an existing web site that uses a theme based on a 960 pixel grid. It works great on larger  screens, pretty well on iPads, but on an iPhone, the text is really  small and you have to pinch and zoom and horizontally scroll to get around the screen.&lt;/p&gt;

&lt;p&gt;Our goal will be to transition the site from a fixed width two column desktop site to a fluid and flexible site whose layout, images, and type gracefully transform at practically any size screen to provide a user-friendly experience where our site&#039;s content can be enjoyed by users browsing with a more diverse set of devices.&lt;/p&gt;

&lt;p&gt;Throughout this series, you&#039;ll learn how to use, configure, and customize the style of a Drupal contributed module that provides a responsive, mobile-friendly main menu. We&#039;ll tackle images, tables, and slideshows and explore some select solutions for making these traditionally rigid elements flex with a fluid container. In the process of converting this theme to be responsive, you&#039;ll learn to tackle some real-world, sometimes messy and often times not-so-clear-cut problems and potential solutions.&lt;/p&gt;

&lt;p&gt;To take advantage of this series, you&#039;ll want to be comfortable with HTML and CSS and the basics of setting up a theme in Drupal 7. You don&#039;t need to know Sass or any advanced theming. This series will help you understand common problems encountered in responsive web design and how to solve them in the context of a Drupal 7 theme.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

Code: &lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GvBckTzL9qwdYHh9Gk2g-M9MWQpm4Tor4SgYa0Yv32c.jpg.jpg</video:thumbnail_loc><video:duration>347</video:duration><video:publication_date>2014-12-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/setting-content-priorities-stack</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Setting Content Priorities that Stack up</video:title><video:description>&lt;p&gt;In the process of transitioning their site to be more mobile friendly, The Anytown Farmers Market web team needs to take a closer look at what content they currently have on their site and how they may want to prioritize and deliver that content differently, given the broader audience base they are now targeting.&lt;/p&gt;

&lt;p&gt;As we adapt content and navigation regions to stack, we need to decide on a priority system for each page template. We&#039;ll take the home page as an example and discuss how each component and region should be prioritized when the content is stacked into one column.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.draw.io/&quot;&gt;draw.io&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/102ANbziK8iZaRvWvG6QBUb3fAZuz-nboDvW89wqiK4.jpg.jpg</video:thumbnail_loc><video:duration>894</video:duration><video:publication_date>2014-12-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/spotlight-accepting-credit-card-payments-online</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Spotlight: Accepting Credit Card Payments Online</video:title><video:description>Of course, it’s one thing to have a bunch of products ready for purchase, but what Sweet Tees really cares about is accepting money for those products. They want to be able to accept credit card transactions on their online store. There&#039;s more than what&#039;s on your Drupal site involved in this though. In this lesson, we&#039;ll discuss merchant accounts and payment gateways—what they are and why you need them, along with providing payment security.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JxfK-aa65lv-T4YX3eUxd6jIyeln0Otvn2j1fb_amY8.jpg.jpg</video:thumbnail_loc><video:duration>372</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-paypal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: PayPal</video:title><video:description>PayPal is a popular payment processor, especially for new site owners. It allows credit card transactions as well as payments from within PayPal itself. There are predominantly two “flavors” of PayPal’s payment processing tools: Website Payments Standard (WPS) and Website Payments Pro (WPP). For our purposes, we’ll be using Website Payments Standard, since there are no setup fees, no extra security setup required, and we can get started right away. In this lesson we&#039;ll create test PayPal buyer and seller accounts, set up access to the test sandbox, and make sure it is working properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.paypal.com&quot; style=&quot;line-height: 1.75;&quot;&gt;PayPal&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MY-TxtJyZaAj3SESfiudIKvvvRYl_ReFYtRoBlTN6RY.jpg.jpg</video:thumbnail_loc><video:duration>330</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-configuring-payment-method</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Configuring a Payment Method</video:title><video:description>Now that we have the PayPal side of payments set up, it’s time to set up the Drupal side of things. We’ll do this with the Commerce PayPal module, which is an extension of the main Drupal Commerce package. Just as we saw with Taxes, Commerce payment methods are Rules-enabled for maximum flexibility. In this lesson we&#039;ll walk through enabling the PayPal WPS payment method and configuring our PayPal sandbox access so that we can start taking test transactions on our store.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.drupal.org/project/commerce_paypal&quot;&gt;Commerce PayPal project&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jUxusl3Uh_Zp40J6t-AEzrfrxSSeaiudaH_m2oOeThA.jpg.jpg</video:thumbnail_loc><video:duration>252</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/hands-processing-orders</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Hands-On: Processing Orders</video:title><video:description>The remaining element of our site is actually implementing the e-commerce portions: an online shopping cart and the ability to process orders, as well as reporting tools to tell us how our store is doing. We will now complete our store configuration by adding a shopping cart, configuring the checkout process, and placing a test order to make sure the whole store is actually working.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ynwTpr3oDm5CttPoeU84I-s8GuI6UIZJZEogZAaGqZY.jpg.jpg</video:thumbnail_loc><video:duration>986</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/taking-drupal-commerce-further</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Taking Drupal Commerce Further</video:title><video:description>&lt;p&gt;In this series, we have covered the basics of setting up an online storefront and shopping cart using the Drupal Commerce package for Drupal. However, there are several additional modules that you will likely want to consider before taking your online store live. We&#039;ll take a brief tour of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/securepagesSecure Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/commerce_shipping&quot;&gt;Commerce Shipping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/commerce_stock&quot;&gt;Commerce Stock&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LEEowjLcBesmhHEr3cnAWEZg2xoTAQbQeXWquYpoTt0.jpg.jpg</video:thumbnail_loc><video:duration>219</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/online-store-summary</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Online Store Summary</video:title><video:description>In this series, we were able to set up a complete online store for our customer, Sweet Tees, using Drupal Commerce, a powerful, flexible e-commerce framework built on Drupal. We set up a payment system through PayPal’s Website Payments Standard. We also delved into the topic of data imports with the Feeds module, and covered tweaking Drupal’s functionality at various system points with the Rules module. In this lesson we&#039;ll tour the Sweet Tees site, discussing our implementation points, and reviewing the modules and resources we used.


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://shop.oreilly.com/product/0636920010890.do&quot;&gt;Using Drupal, 2nd edition&lt;/a&gt;
&lt;a href=&quot;http://usingdrupal.com/source_code&quot;&gt;Using Drupal source code&lt;/a&gt;
&lt;strong&gt;Up next: &lt;/strong&gt;&lt;a href=&quot;https://drupalize.me/series/using-drupal-appendix-installing-and-upgrading-drupal&quot;&gt;Using Drupal Appendix A: Installing and Upgrading Drupal&lt;/a&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/m65BkZBo-autTYMmkLwlHAyzOWg2d4vio9zuAB5TlKU.jpg.jpg</video:thumbnail_loc><video:duration>1050</video:duration><video:publication_date>2014-11-19</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/free-roku-player-your-annual-drupalizeme-subscription</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/percentages-not-pixels-adapting-960px-grid</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Percentages Not Pixels: Adapting the 960px Grid</video:title><video:description>&lt;p&gt;The original 960 Robots theme is based on a 960 pixel grid. It has container and grid classes with widths declared in pixels—an absolute metric. In this lesson, we will take a first step in implementing a responsive design: converting absolute units to relative ones. We&#039;ll begin this process by editing the 960.css file, which contains the width declarations for our container and grid classes that make up our site&#039;s layout. Using the &lt;strong&gt;target ÷ context = result&lt;/strong&gt; formula, we&#039;ll convert widths declared in pixels first to ems, then to percentages, with a little nudge of the decimal point over two places.&lt;/p&gt;
&lt;p&gt;With our layout&#039;s container and grid classes using relative widths declared in percentages, we&#039;ll be on well on our way to making our site more fluid and flexible.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (Checkout branch &lt;strong&gt;03-fluid-layout&lt;/strong&gt;)&lt;/p&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VBLWc-TltFqA3TrdFOthr-75fZr3VK5iwlV2ZU8Ypj8.jpg.jpg</video:thumbnail_loc><video:duration>1013</video:duration><video:publication_date>2014-12-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/responsive-typography</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Responsive Typography</video:title><video:description>&lt;p&gt;We&#039;re making progress in making our theme more flexible and fluid. Next, we’ll address our site&#039;s typography and implement relative font-sizing. This will help ensure that our text is more legible without the need to pinch and zoom. To do this, we’ll convert our font-sizes declared in pixels to ems, using the &lt;strong&gt;target ÷ context = result&lt;/strong&gt; formula. Break out those calculators!&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (Checkout branch &lt;strong&gt;04-responsive-typography&lt;/strong&gt;)&lt;/p&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mfrulOPQFp-HPVy5OEWhZYY2DVVq64Vlu8G0EV6k1Jw.jpg.jpg</video:thumbnail_loc><video:duration>995</video:duration><video:publication_date>2014-12-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/calculating-responsive-margins-and-padding</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Calculating Responsive Margins and Padding</video:title><video:description>&lt;p&gt;As we&#039;ve been converting our font-sizes to ems, we&#039;ve noticed other properties that need updating, including margin and padding. In order to correctly apply our &lt;strong&gt;target ÷ context = result&lt;/strong&gt; formula, we need to know the appropriate value for &quot;context.&quot; Converting padding presents us with a new context, different than that of a margin. In this lesson, we&#039;ll learn how to determine the appropriate context and convert padding and margin pixels to relative units.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (Checkout branch &lt;strong&gt;05-responsive-padding-margins&lt;/strong&gt;)&lt;/p&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3pBcR880jSNxitEM-EEpl6c1PoK-hAutg1EWZsKY8Rc.jpg.jpg</video:thumbnail_loc><video:duration>451</video:duration><video:publication_date>2014-12-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-viewport-meta-tag-htmltplphp</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding the Viewport Meta Tag to html.tpl.php</video:title><video:description>&lt;p&gt;So far, we&#039;ve adapted our layout to be flexible and fluid using relative units like percentages and ems, instead of absolute ones, like pixels. The problem is that smaller devices will often use resolutions much greater than the actual size of the screen size or viewport. So while our relative sizing is technically working, it&#039;s not going to be terribly useful or make our content more readable and accessible until we add an important tag to the head of our html template file: the viewport meta tag.&lt;/p&gt;

&lt;p&gt;By adding the viewport meta tag to the head of our html template file, we&#039;re letting the browser know that we want the viewport size to be the size of the device, not some huge resolution more suitable for a 17&quot; monitor, for example. This is a small but critical step in implementing a responsive design. Without it, our hard work of converting to relative units just isn&#039;t going to pay off.&lt;/p&gt;

&lt;p&gt;In this lesson, you&#039;ll learn how to add a viewport meta tag to the head of all html pages using a special Drupal template file that we&#039;ll create. Then we&#039;ll step back and admire the results using our mobile emulation tools.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (Checkout branch &lt;strong&gt;06-viewport-meta&lt;/strong&gt;)
&lt;a href=&quot;https://drupalize.me/blog/201501/enable-responsive-layouts-viewport-meta-tag&quot;&gt;Written tutorial based on this video&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/c7hzvkODlBgJFORtK5o8IO_Ltp5O2jKz2A1qQm4Jrds.jpg.jpg</video:thumbnail_loc><video:duration></video:duration><video:publication_date>2014-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/restoring-natural-flow-elements</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Restoring the Natural Flow of Elements</video:title><video:description>&lt;p&gt;While it&#039;s not forbidden to use absolute positioning in responsive designs, the way that absolute positioning was utilized in the original theme is less than ideal as we work on moving theme toward flexibility, fluidity, and responsiveness. &lt;/p&gt;

&lt;p&gt;In this lesson, we&#039;ll focus on putting elements in the header back into the natural flow of the document. We&#039;ll refactor some HTML and CSS, removing absolute positioning declarations and change the source order of some elements in our page template file.&lt;/p&gt;

&lt;p&gt;Restoring the natural order and flow of the document will make things easier for us down the road as we adapt our components to stack into one-column in small screens.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;07-08-flow-media-queries&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nDAvogCp9NCItgvNqnSjjRAF-zzsv04qtfhgIUizSEA.jpg.jpg</video:thumbnail_loc><video:duration>683</video:duration><video:publication_date>2014-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adding-media-queries-and-breakpoints-960css</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adding Media Queries and Breakpoints to 960.css</video:title><video:description>&lt;p&gt;In this series, we’ll start out by adapting the Anytown Farmers Market website layout for display on a small mobile  screen. The current layout is a stacked 2-column layout  with a full-width header, primary content column, and two sidebars. We&#039;ll simplify and update the wide layout to use just one main content column plus a right sidebar that will stack under the content region on  smaller viewports. We&#039;ll use the breakpoints that we identified in the  previous lesson to implement width-based media queries and trigger the appropriate layout — stacked for narrow screens and 2-column for wider viewports.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;07-08-flow-media-queries&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E0YEMpo3VYPaLPTrtmDWPLHctLHF7WK25JtAaOfT3FM.jpg.jpg</video:thumbnail_loc><video:duration>718</video:duration><video:publication_date>2014-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuring-responsive-menus-module</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configuring the Responsive Menus Module</video:title><video:description>&lt;p&gt;Responsive Menus module enables a site builder to install and configure a responsive menu with very little CSS required. We&#039;ll walk through the configuration of the module using the media query we built in the previous lesson. We&#039;ll also add some CSS to hide our desktop navigation when the mobile menu is shown.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/responsive_menus&quot;&gt;Responsive Menus module&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;09-responsive-menu-contrib-module&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Sa9RhIcfqNmuI1cR81Dk5apWcijtmhr03pUcJL1jrOc.jpg.jpg</video:thumbnail_loc><video:duration>511</video:duration><video:publication_date>2014-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/flexible-images-and-media-csss-max-width</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Flexible Images and Media with CSS&#039;s max-width</video:title><video:description>&lt;p&gt;There are quite a few images on the site that aren’t scaling very well. They’re either way too small or way too big and break the layout. For now, we just want ensure that our images don’t overflow beyond the layout container and that they are viewable at a comfortable size across all viewport sizes. While we&#039;re at it, we can make sure all HTML media objects stay safely contained in a flexible container, especially when sizing down.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;10-max-width&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0oiO7v8HGiYz-aK3MNKu-P7MyjeWtyfXIUez-o_TQjI.jpg.jpg</video:thumbnail_loc><video:duration>256</video:duration><video:publication_date>2014-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-responsive-slideshows-drupal-flexslider</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create Responsive Slideshows in Drupal: FlexSlider</video:title><video:description>&lt;p&gt;Our image gallery plugin has long been known to be barely navigable on a small screen. Let’s fix our images and replace our photo gallery plugin with a responsive image slider that will work on small to large screens. We&#039;ll swap out Views Slideshow in favor of FlexSlider in this lesson.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;11-flexslider&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vxSW6F9MStkudmc3jUiUqKlZiDRUSNFzg8JVM-7u-Rs.jpg.jpg</video:thumbnail_loc><video:duration>970</video:duration><video:publication_date>2014-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/adapting-fixed-width-search-form-flex-its-container</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Adapting a Fixed-Width Search Form to Flex with Its Container</video:title><video:description>&lt;p&gt;In the original theme, the width, margin, and padding of the elements that make up the search component are set using pixels. Since the width is static, it&#039;s breaking out of the sidebar region when the screen size is small enough. &lt;/p&gt;

&lt;p&gt;In this lesson, we&#039;ll refactor the styles in the search form so that it flexes with its parent container, instead of breaking it. In working through this example, you&#039;ll learn the merits of keeping components flexible and respectful of their parent containers.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;12-search-form&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/pknuPutu1MPDxvmKRZ55Bq0h2alZrvNnTPfS0l2ioho.jpg.jpg</video:thumbnail_loc><video:duration>450</video:duration><video:publication_date>2014-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/styling-mobile-friendly-header-and-navigation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Styling a Mobile-Friendly Header and Navigation</video:title><video:description>&lt;p&gt;As we design for mobile, we want to look critically at each component and what it&#039;s communicating or how it&#039;s adding value. Now that we&#039;ve refactored our theme to be more mobile-friendly, some elements in our header appear redundant when viewed in a narrow, stacked content column. This is causing our header elements to fill up that important initial screen on mobile. We want to ensure that our valued mobile users get more content and fewer redundant header elements when the page first loads.&lt;/p&gt;
&lt;p&gt;In this lesson, we&#039;ll identify a breakpoint where the header gets too cluttered with elements essentially communicating the same thing. Then we&#039;ll add a new set of media queries, creating styles that will present a more mobile-friendly first impression of our site.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;13-mobile-friendly-header&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/J-dyPlaseaTmSTI5opatQAsId0zapV7igeH-mdXl1h0.jpg.jpg</video:thumbnail_loc><video:duration>1073</video:duration><video:publication_date>2014-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/cleaning-tables-scaled-images-and-more-fun-media-queries</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Cleaning up Tables, Up-Scaled Images, and More Fun with Media Queries</video:title><video:description>&lt;p&gt;Some of the content that&#039;s been added to our case study site isn&#039;t responding ideally as the viewport size increases and decreases. We have an HTML table that is a bit too flexible, making the columns too narrow for the text inside them to be very readable. The images in our slideshow are presenting us with a problem when the screen size gets too big: the images are scaling up and losing their quality in the process. To address these miscellaneous problems, we&#039;ll change how our content is placed, find some new breakpoints, and add new media queries for our grid_6 regions. We&#039;ll also learn some CSS tricks that will transform our table data into lists, making it more legible and sensibly presented on smaller screens.&lt;/p&gt;


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://github.com/DrupalizeMe/demo-rwd-7x&quot;&gt;https://github.com/DrupalizeMe/demo-rwd-7x&lt;/a&gt; (checkout branch &lt;strong&gt;14-cleaning-up&lt;/strong&gt;)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LLiP_SmwRx_j4W9N0Xc_WHt7KUVlIQpjKyx3UfLXH68.jpg.jpg</video:thumbnail_loc><video:duration>842</video:duration><video:publication_date>2014-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/translation-contribution-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Translation Contribution for Drupal</video:title><video:description>Do you want to know how to contribute translations to Drupal core or other contributed modules and themes? Have you ever wondered how translations are managed in Drupal? It all happens in the community at &lt;a href=&quot;https://localize.drupal.org/&quot;&gt;localize.drupal.org&lt;/a&gt;. This tutorial gives a tour of &lt;a href=&quot;https://localize.drupal.org/&quot;&gt;localize.drupal.org&lt;/a&gt; and then teaches you how to join translation groups and contribute translated strings back to the Drupal community.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://localize.drupal.org/&quot;&gt;Drupal Translations&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-dFCzjeBso34GcQmjNq9bNJxxy5Wkv7Pjiy4i1HbdCI.jpg.jpg</video:thumbnail_loc><video:duration>525</video:duration><video:publication_date>2015-04-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-yaml</loc><lastmod>2024-10-01T21:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>An Introduction to YAML</video:title><video:description>YAML, which stands for YAML Ain&#039;t Markup Language, is a human-readable data serialization format that&#039;s been widely adopted in a variety of use cases in Drupal. Anyone wanting to write modules, or themes, for Drupal will need to understand YAML syntax. Even site builders are likely to encounter YAML at least in passing as YAML is the data-serialization format of choice for Drupal&#039;s configuration management system. Good thing it&#039;s pretty easy to learn even with the most basic of programming backgrounds.

This tutorial will look at the YAML data format and provide examples of how to write and read YAML. Starting with an introduction to the language&#039;s syntax and some of the strengths of YAML. Then looking at the difference between scalar data types like strings and integers, and collection data types like lists and associative arrays.

Since YAML in the Drupal world is read into PHP and ultimately becomes a PHP data structure that we can use in our own code we&#039;ll also look at how the YAML we write in a &lt;em&gt;.yml&lt;/em&gt; file is represented in PHP data types. To do this we&#039;ll use the YAML Sandbox module that provides a handy textarea into which we can type YAML and have it parsed into PHP data structures.

&lt;h4&gt;Learning objectives&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Explain what YAML is and its strengths as a data serialization format&lt;/li&gt;
  &lt;li&gt;Create scalar key/value pairs in YAML&lt;/li&gt;
  &lt;li&gt;Create lists, and associative arrays using YAML collections&lt;/li&gt;
  &lt;li&gt;Understand how the YAML you write is represented in PHP&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Tips&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;In Drupal, use the &lt;em&gt;.yml&lt;/em&gt; extension and &lt;strong&gt;not&lt;/strong&gt; &lt;em&gt;.yaml&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Ensure your code editing application is configured to use spaces (preferably 2 spaces, as per Drupal coding standards), &lt;strong&gt;not the tab character&lt;/strong&gt; when the TAB key is pressed. If you have tab characters in a YAML file within a Drupal environment, a fatal PHP error will be thrown and you&#039;ll see a White Screen of Death (WSOD).&lt;/li&gt;
  &lt;li&gt;Copy and paste from an existing YAML file to ensure the formatting is correct, and edit from there.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;http://www.yaml.org&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/yaml_sandbox&quot;&gt;YAML Sandbox module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Find other tutorials and external resources related to YAML on our &lt;a href=&quot;https://drupalize.me/topic/yaml&quot;&gt;YAML topic page&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gRbpacIhr5hUiyVlwfPr6hm3MIH0yrzUnk43UBXcuKw.jpg.jpg</video:thumbnail_loc><video:duration>756</video:duration><video:publication_date>2014-12-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/working-drupal-multisite</loc><lastmod>2024-07-23T19:58Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-working-multiple-drupal-sites</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Working with Multiple Drupal Sites</video:title><video:description>Building one Drupal site is a fair amount of work in and of itself. But what about working with multiple Drupal sites? Sometimes you have a few sites that make sense together, either from a maintenance perspective, or due to an overlap in content or users. There are a number of different ways to approach this in Drupal, and which path you follow varies considerably depending on the exact use case you need to fulfill. In this lesson we&#039;ll get a good look at the problem multiple sites can pose, and list out some common use cases. Then we&#039;ll take a look at three different broad categories of solutions, with some specific architectural approaches. The rest of this series will walk through managing multiple sites using Drupal core&#039;s built-in multisite system.

If you are interested in working with the Domain Access project instead of core multisite, you should look at the &lt;a href=&quot;https://drupalize.me/series/introduction-domain-access-drupal-7&quot;&gt;Introduction to Domain Access series&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VeC1bEqMbOA60A01Spsb4XXrpKduyWeEKQDbvb3GwOI.jpg.jpg</video:thumbnail_loc><video:duration>727</video:duration><video:publication_date>2015-03-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/introduction-domain-access-drupal-7</loc><lastmod>2024-07-23T19:59Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/dns-domain-names-and-apache-vhosts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>DNS, Domain Names, and Apache vhosts</video:title><video:description>When working with domain names and getting a website to show up in your browser, it can be a little confusing to sort out which bits of the puzzle are where. You need to be able to properly configure the domain name server (DNS) so your browser can match up a domain name with a web server, and then make sure the Apache web server knows which files to direct that incoming domain name to. In this lesson we&#039;re going to walk through the process from the browser request to the website files. We&#039;ll take a look at the Apache documentation on virtual hosts (or vhosts) and discuss where to find this configuration. Then we&#039;ll take a look at some example vhost files to see what&#039;s going on in there.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://httpd.apache.org/docs/2.4/vhosts/&quot;&gt;Apache Virtual Host documentation&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UJEBHdFruJfYkqZWUmWWlzsDjtf9o3q3I0Ahp-wUEcE.jpg.jpg</video:thumbnail_loc><video:duration>836</video:duration><video:publication_date>2015-03-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-drupal-multisite-works</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How Drupal Multisite Works</video:title><video:description>Before we set up a multisite we need to understand how Apache and Drupal work together to deliver the site we intend. In this lesson we&#039;ll look at the documentation for Drupal multisites, and then discuss the way you need to set up your Drupal directories. We&#039;ll also review the workflow that Apache and Drupal go through to get the correct site displaying in the browser.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/documentation/install/multi-site&quot;&gt;Multi-site - Sharing the same code base&lt;/a&gt; (drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4AzMYBqwfZdd7o2Fli431R8F9datCtldtzD237kW2wE.jpg.jpg</video:thumbnail_loc><video:duration>379</video:duration><video:publication_date>2015-03-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-apache-multiple-domains</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Apache for Multiple Domains</video:title><video:description>In this lesson we&#039;ll be building a simple university site, udrupal.com, with different areas, each with their own website: the main site, a news site, and an alumni site. The news site is simply a subdomain of the main domain name, news.udrupal.com, and the alumni site actually has its own separate domain name, udrupalalumni.com. To get this done, you&#039;re going to learn how to confirm the DNS is working for the domain names. That is, that they are currently pointing to the right server.  Then we&#039;re going to configure an Apache vhost on our server so that Apache knows where to find our Drupal code base. We&#039;ll finish things up by installing our main Drupal site, udrupal.com.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/blog/201504/configure-apache-multiple-domains&quot;&gt;Written tutorial based on this video&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IvTgDLdew7aU36kIyX5Q-WockzwJZlBl-NU35xphvvg.jpg.jpg</video:thumbnail_loc><video:duration>457</video:duration><video:publication_date>2015-03-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-drupal-multisite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Drupal for Multisite</video:title><video:description>With our domains and Apache configuration in place, we need to make sure all three sites can be installed at the different domains by creating our multisite directories in the sites folder. In this tutorial, we&#039;ll create the necessary Drupal site directories and settings files for the three sites so they are all running smoothly, check the domains and install the other two sites, and wrap up by changing the theme on the alumni site.

Before we get started, you should make sure you have two empty databases created for the two new sites we&#039;ll be installing.

In this tutorial we&#039;re going to be working directly on a server using the command line. You can feel free to use a GUI interface for your site, like an SFTP app or just your local machine file browser and editor apps. If you want to brush up on using the command line, you can check out our free &lt;a href=&quot;https://drupalize.me/series/command-line-basics-series&quot;&gt;Command Line Basics series&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HF4olAFKb5swFmgDreQ2Bc9wJbyG_dXGy573p6R8BDo.jpg.jpg</video:thumbnail_loc><video:duration>533</video:duration><video:publication_date>2015-03-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-local-development-environment-multisite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use a Local Development Environment with Multisite</video:title><video:description>If we want to do development work on the university multisite, we need to do a few things to have this run smoothly in a local development environment with all of those URLs. The sites.php file is going to let us define aliases for the site configuration folders in &lt;code&gt;/sites&lt;/code&gt;. In this tutorial we&#039;ll explain why local development with multisite is tricky, and how to get it set up properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://api.drupal.org/api/drupal/sites%21example.sites.php/7&quot;&gt;example.sites.php&lt;/a&gt; (api.drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/loOsZktr0WqcJxCDUZhyI6Fd3VDIERYyFuMD9zY71qk.jpg.jpg</video:thumbnail_loc><video:duration>728</video:duration><video:publication_date>2015-03-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-drush-multisite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Drush with Multisite</video:title><video:description>Drush is a really great tool for managing your Drupal site quickly and easily. If you don&#039;t already know about &lt;a href=&quot;http://drush.org&quot;&gt;Drush&lt;/a&gt;, you should definitely check it out. When working with a multisite installation though, Drush can get confused if you don&#039;t give it all the information it needs. In this lesson we&#039;ll walk through how to use Drush properly with a multisite installation, covering both how to manage just an individual site and how to work with all of your sites at the same time.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/736Xpv_976pvTiZ5aHADrI6Q6OXFT_SfjwupwZOgBVc.jpg.jpg</video:thumbnail_loc><video:duration>515</video:duration><video:publication_date>2015-03-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/improve-drupals-search-apache-solr-and-search-api</loc><lastmod>2024-04-18T23:51Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/better-search-results-solr-and-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Better Search Results with Solr and Drupal 7</video:title><video:description>One of the best ways to improve both the speed, and relevancy, of search results for a Drupal site is to stop using the Drupal core search module and start using &lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Apache Solr&lt;/a&gt;. Solr is a Java-based application that provides an API for interacting with Apache Lucene via HTTP to facilitate the creation of excellent applications for performing full-text content searches, with a special focus on internet-based search applications. The quick pitch for why you should use Solr is it&#039;s insanely fast, especially when compared with Drupal&#039;s default Search module, and it can be scaled to handle millions of search queries per second and huge piles of data.

Since Solr is a third party application we need a way to bridge the gap between Solr and Drupal. Really, there are two parts to this puzzle: getting the data out of Drupal and into Solr so it can be processed and indexed, and passing a search query from Drupal to Solr in order to retrieve, and display, search results. For that, we&#039;ll use the &lt;a href=&quot;https://www.drupal.org/project/search_api&quot;&gt;Search API module&lt;/a&gt;, and the &lt;a href=&quot;https://www.drupal.org/project/search_api_solr&quot;&gt;Search API Solr module&lt;/a&gt;.

In order to demonstrate a real-world use case we&#039;ll pretend that we&#039;re the owner of a website that contains a database of fish species. As the database has grown over time we&#039;ve begun to feel the limits of Drupal&#039;s MySQL full-text search and want to improve our search tools. Using Solr will allow for better matches in full-text search, faster searches, and a lot of additional functionality like partial word matches, spell checking, facets, and more.

In this series we&#039;ll cover:

&lt;ul&gt;
  &lt;li&gt;What Apache Solr is and why you should consider using it&lt;/li&gt;
  &lt;li&gt;Installing Solr and configuring it to work well with Drupal content&lt;/li&gt;
  &lt;li&gt;The contributed Search API module&lt;/li&gt;
  &lt;li&gt;The contributed Search API Solr module&lt;/li&gt;
  &lt;li&gt;Configuring Drupal to send content to Solr for indexing&lt;/li&gt;
  &lt;li&gt;Retrieving search results from Solr and displaying them in Drupal on both a stand-alone page and with the &lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Using Solr field boosting to influence result relevancy&lt;/li&gt;
  &lt;li&gt;Using the contributed &lt;a href=&quot;https://www.drupal.org/project/facetapi&quot;&gt;Facet API&lt;/a&gt; module with Solr to allow for faceted search results&lt;/li&gt;
  &lt;li&gt;Configuring stop words, synonyms, and promoted search results in Solr&lt;/li&gt;
&lt;/ul&gt;

This series is for anyone that wants to improve the quality of the search functionality of their Drupal-powered site. There is some system administration required to install Solr, but it&#039;s pretty straightforward. Almost everything else is done via configuration in Drupal&#039;s, or Solr&#039;s, user interface and by editing simple XML configuration files. So, no PHP, or module development experience required. We do however assume that you&#039;re already familiar with basic Drupal administration.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;http://lucene.apache.org/solr/&lt;/li&gt;
  &lt;li&gt;https://www.drupal.org/project/search_api&lt;/li&gt;
  &lt;li&gt;https://www.drupal.org/project/search_api_solr&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3T0PG5JdbfCldcX0hZatZpTA6RPmKkEUZeSBtSfmR9s.jpg.jpg</video:thumbnail_loc><video:duration>313</video:duration><video:publication_date>2015-05-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/why-use-apache-solr-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Why Use Apache Solr with Drupal?</video:title><video:description>Apache Solr is a world class search application built on top of the Lucene indexer. Before we start trying to integrate Solr with Drupal lets talk about what Solr is, and what makes it so good, as well as how Solr differs from the Drupal core database-backed Search module. This tutorial is a short presentation explaining Solr, Lucene, and things to consider when choosing Solr as a search technology.

&lt;a href=&quot;http://lucene.apache.org/&quot;&gt;Lucene&lt;/a&gt; is an open-source search indexer written in Java and governed by the Apache foundation. It is the underlying library that handles storing indexed content, and does so in a way that makes it extremely flexible. By treating each record as a document made up of any number of different fields Lucene is capable of storing just about anything you throw at it, as long as the resource can be broken up into fields and the textual data can be extracted from those fields. This makes it a good choice for indexing web based content where you might be dealing with HTML, PDF, XML, Microsoft Word, and all kinds of other document formats.

&lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Solr&lt;/a&gt;, is an HTTP API for interacting with the Lucene application that makes it easier to create custom search applications. Like Lucene it is also open source, written in Java, and governed by the Apache foundation. Solr&#039;s extensive use of XML configuration files allows you to modify almost everything about how Solr works without having to write any Java. This makes it a great choice for anyone that&#039;s familiar with PHP but doesn&#039;t have Java experience.

When compared with Drupal core&#039;s Search module, or any MySQL full-text search tool, Solr has some distinct advantages. Including:

&lt;ul&gt;
  &lt;li&gt;Best-in-class stemming and tokenization&lt;/li&gt;
  &lt;li&gt;Scalability; it&#039;s designed to scale both vertically and horizontally as needed&lt;/li&gt;
  &lt;li&gt;Built-in support for facets, geospatial searches, and other advanced query options&lt;/li&gt;
&lt;/ul&gt;

In addition to these advantages, using Solr for your search can dramatically improve your Drupal site&#039;s performance by eliminating costly full-text queries, which can quickly turn MySQL into a bottleneck for sites with even a modest amount of content.

By the end of this tutorial you should be able to explain the advantages that Solr provides over Drupal core&#039;s search module and why it&#039;s a good choice for building ultra-fast, and accurate, search applications.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Apache Solr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://lucene.apache.org/&quot;&gt;Apache Lucene&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6DBMOLlJtQdDcy3LjPcsxOw8LowPYVCtn-iC11lKP5Y.jpg.jpg</video:thumbnail_loc><video:duration>736</video:duration><video:publication_date>2015-05-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/search-api-module-drupal-7</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Search API Module for Drupal 7</video:title><video:description>When it comes to integrating Apache Solr with Drupal there are currently two different modules that can be used, &lt;a href=&quot;https://www.drupal.org/project/search_api&quot;&gt;Search API&lt;/a&gt;, and the &lt;a href=&quot;https://www.drupal.org/project/apachesolr&quot;&gt;Apache Solr module&lt;/a&gt;. While both are valid options, for this series we&#039;ve chosen to focus on the Search API module because amongst other things it&#039;s generally more flexible, and based on conversations with people in the community who are working on Solr integration it is currently seeing more focused development efforts and will likely superseded the Apache Solr module sometime in the future.

This tutorial provides some background information on the Search API module and why we&#039;ve chosen to use it. We&#039;ll look at how the Search API module bridges the gap between Solr and Drupal, and explain some of the commonly used terms we&#039;ll encounter in the module&#039;s UI and codebase.

By the end of this lesson you should be able to explain the Search API module&#039;s terminology, requirements, and position in the Drupal ecosphere, as well as be able to make a good case for why someone should choose the Search API module as a starting point for creating better search tools in Drupal.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/search_api&quot;&gt;Search API module&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lfTn3BjbwFWXVku4KBwNH0E3BCLSSK6fH4YrEYY9B2k.jpg.jpg</video:thumbnail_loc><video:duration>944</video:duration><video:publication_date>2015-05-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/sample-content-indexing</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Sample Content for Indexing</video:title><video:description>Before we can start building a search application we need some sample data that we can index and use for testing, not to mention a site we can use to test this all out on. In this tutorial we&#039;ll walk through installing Drupal 7 and importing some sample data.

In order for this to work I built a Drupal 7 site with a content type named Fish, and then imported a whole bunch of descriptions of various fish from Wikipedia. You should be able to use the provided database dump in order to get up and running with a sample Drupal site pre-populated with some sample data.

If you&#039;re not planning on following along and building the fish finder application in the Search API and Solr series, or are planning on implementing Solr search on your own site instead you can probably skip this tutorial. Just note that the rest of the tutorials in the series assume you&#039;ve got a working Drupal 7 site with some content.

By the end of this tutorial you should have a working Drupal 7 site with sample content running on your localhost for playing with while watching the rest of the series.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/evJDf3Z6Aj0mLup4ldeRJ_54Nq6q451jJn6dLvaT18k.jpg.jpg</video:thumbnail_loc><video:duration>472</video:duration><video:publication_date>2015-05-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-apache-solr-localhost</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Apache Solr on Localhost</video:title><video:description>Solr is an application that runs on it&#039;s own, independent of Drupal. So before we can integrate our Drupal site with the Solr server we first need to install Solr and get it running. In this tutorial we&#039;ll walk through the requirements for installing Solr and then look at a quick and easy way to get it running on our localhost for development purposes. This setup is best for when you&#039;re working on a site locally, but have it hosted elsewhere and someone else is managing your Solr install for you.

The basic process is to download the Solr application, unpack it somewhere on your localhost, and then run the start.jar file that comes with the example application: &lt;code&gt;java -jar start.jar&lt;/code&gt;. To ensure it&#039;s working you can connect to the Solr web UI on your localhost at http://localhost:8983/solr/.

Note: When using Solr with Drupal and the Search API module we currently need to use the most recent 4.x version of Solr, despite the fact that there is a 5.x version that just came out. At the time these tutorials where recorded the Search API module had not yet been updated to work with Solr &gt;= 5.x. The general installation instructions for localhost development however are not likely to change much at all between Solr 4 and 5 so even if you&#039;re using Solr 5 this should still be relevant information.

By the end of this tutorial you should be able to run Solr on your localhost and verify that it is working.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.apache.org/dyn/closer.cgi/lucene/solr/&quot;&gt;Download Solr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/node/1999310&quot;&gt;Search API Solr solr installation documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Y3oj_ahzsb-6LLt7Ij3P0yon9oUt58IhxgannDtCD24.jpg.jpg</video:thumbnail_loc><video:duration>503</video:duration><video:publication_date>2015-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-apache-solr-server</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Apache Solr on Server</video:title><video:description>If you&#039;re installing Solr on a production server there are some additional considerations you&#039;ll want to be aware of. The most important thing is that instead of just running the Solr application directly you&#039;ll likely want to run it inside of a J2EE server container like Tomcat or Jetty. In this tutorial we&#039;ll look a installing Solr on Ubuntu using the same process that we would recommend for a production installation. We&#039;ll do this by starting with a Vagrant VM with nothing but Ubuntu installed and walk through the steps required to get Solr up and running.

The steps are going to be similar, but different depending on your OS of choice, and it would be impossible for us to cover them all. So here&#039;s a general outline of what you&#039;ll want to do:

&lt;ol&gt;
  &lt;li&gt;Install Java. Note, you need the full JDK for Solr not just the JRE.&lt;/li&gt;
  &lt;li&gt;Install a J2EE application server like &lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;Tomcat&lt;/a&gt; or &lt;a href=&quot;http://eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Download the version of Apache Solr you want to use.&lt;/li&gt;
  &lt;li&gt;Configure your J2EE application server to run Apache Solr.&lt;/li&gt;
  &lt;li&gt;Configure your system to automatically start/stop your application server.&lt;/li&gt;
&lt;/ol&gt;

We&#039;ll be following along with the instructions provided in &lt;a href=&quot;https://www.lullabot.com/blog/article/installing-solr-use-drupal&quot;&gt;this excellent blog post&lt;/a&gt; by Ben Chavet over on Lullabot.com, though some of the commands will be a little different since software versions have changed, etc. If you prefer to follow along with written instructions, or want to have the list of commands next to you when it comes time to set things up for real, give that post a read.

A note about security. We will NOT be going over how to restrict access to the Solr instance on the Ubuntu server as that&#039;s outside the scope of this tutorial. However, it&#039;s important that you do so. At a minimum you&#039;ll want to configure your firewall to prevent access to the Solr host from anything other then the web server where you Drupal site lives.

By the end of this tutorial you should be able to list the requirements and considerations that need to be evaluated when installing Solr on a production server.

Things you might want to copy/paste if you&#039;re following along:

Content of Tomcat context file - &lt;code&gt;/usr/local/tomcat/conf/Catalina/localhost/solr.xml&lt;/code&gt; :
&lt;pre&gt;&lt;code&gt;
&amp;#x3C;Context docBase=&amp;#x22;/usr/local/tomcat/webapps/solr.war&amp;#x22; debug=&amp;#x22;0&amp;#x22; crossContext=&amp;#x22;true&amp;#x22;&amp;#x3E;
  &amp;#x3C;Environment name=&amp;#x22;solr/home&amp;#x22; type=&amp;#x22;java.lang.String&amp;#x22; value=&amp;#x22;/usr/local/tomcat/solr&amp;#x22; override=&amp;#x22;true&amp;#x22; /&amp;#x3E;
&amp;#x3C;/Context&amp;#x3E;
&lt;/code&gt;&lt;/pre&gt;

Content of the Solr definition file - &lt;code&gt;/usr/local/tomcat/solr/solr.xml&lt;/code&gt; :
&lt;pre&gt;&lt;code&gt;
&amp;#x3C;?xml version=&amp;#x22;1.0&amp;#x22; encoding=&amp;#x22;UTF-8&amp;#x22; ?&amp;#x3E;
&amp;#x3C;solr persistent=&amp;#x22;false&amp;#x22;&amp;#x3E;
  &amp;#x3C;cores adminPath=&amp;#x22;/admin/cores&amp;#x22;&amp;#x3E;
    &amp;#x3C;core name=&amp;#x22;drupal&amp;#x22; instanceDir=&amp;#x22;drupal&amp;#x22; /&amp;#x3E;
  &amp;#x3C;/cores&amp;#x3E;
&amp;#x3C;/solr&amp;#x3E;
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/why-vagrant&quot;&gt;Introduction to Vagrant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/installing-solr-use-drupal&quot;&gt;Installing Solr for use with Drupal article&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;Apache Tomcat&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://eclipse.org/jetty/&quot;&gt;Jetty&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2Ec7G6XGJpZ7A4QewiRAejpBFDOosM-3DoM_T-Dt8OA.jpg.jpg</video:thumbnail_loc><video:duration>1557</video:duration><video:publication_date>2015-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-search-api-solr</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Search API Solr</video:title><video:description>In this tutorial we&#039;ll walk through downloading and installing the &lt;a href=&quot;https://www.drupal.org/project/search_api&quot;&gt;Search API module&lt;/a&gt;, the &lt;a href=&quot;https://www.drupal.org/project/search_api_solr&quot;&gt;Search API Solr module&lt;/a&gt;, and their dependencies. Then we&#039;ll look at using the Search API Solr configuration files  with our Solr server. These configuration files are specially crafted to help with indexing data contained in a Drupal site and allow Solr to have a better understanding of Drupal&#039;s entities, fields, and the data that they contain. For example, mapping a Drupal Field API body field on a page node type to the appropriate field type in Solr.

The gist of this tutorial is, locating the Solr configuration files in the &lt;code&gt;search_api_solr/solr-conf/&lt;/code&gt; directory, talking a little bit about what each one does, and then demonstrating how to copy those files into the configuration for your Solr server so that Solr will start using them.

After looking at the various configuration files, and then placing them into our Solr instance, we&#039;ll connect Drupal to our Solr server by creating a new Search API server configuration within Drupal&#039;s UI. This will allow us to confirm that our Apache Solr server, and Drupal, will be able to talk to one another.

By the end of this tutorial you should be able to configure Solr to work with Drupal, connect the two, and verify that the connection is working.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;https://www.drupal.org/project/search_api&lt;/li&gt;
  &lt;li&gt;https://www.drupal.org/project/search_api_solr&lt;/li&gt;
  &lt;li&gt;https://www.drupal.org/project/entity&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/node/2009760&quot;&gt;Solr config file documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mVkNqTkqHtabtnbT5GDlpLsUhOCU12iUjHXh2uwUQMk.jpg.jpg</video:thumbnail_loc><video:duration>903</video:duration><video:publication_date>2015-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-search-api-index</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Search API Index</video:title><video:description>In order for Solr to provide search results we need to first send our Drupal content to the Solr server so that it can be indexed. In this tutorial we&#039;ll look at connecting the Search API module with the Solr server and creating an index that maps content in Drupal to data types in Solr. We&#039;ll also look at how the various configuration options effect the Solr index.

After creating a Search API index configuration we&#039;ll look at running the indexer, essentially queuing all the content on our site for indexing, and then telling Drupal to send the documents on our site to the Solr server for indexing. This can be done either via the UI or with Drush. You can choose to index content as it&#039;s created, or for sites with higher rates of new content you can send it to the indexer in periodic batches. Whichever you choose, making sure that you&#039;ve got a system in place for periodically sending items queued for indexing to Solr is a critical step.

By the end of this tutorial you should be able to send content from Drupal to Solr for indexing, and verify that the content is showing up in the Solr server&#039;s index.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/d2qHkvyfnRT-g41Gctm1GIF8Wt8RG8rjFyODPDzbFMA.jpg.jpg</video:thumbnail_loc><video:duration>934</video:duration><video:publication_date>2015-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-results-search-api-pages</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Results With Search API Pages</video:title><video:description>The Search API module by itself doesn&#039;t provide a UI for submitting a search query, or a page for displaying results. Instead, it exposes an API that other modules can use to provide those features. This makes it super flexible, but it also means we&#039;ve got some extra work to do in order to allow someone to actually perform a search and see the results.

In this tutorial we&#039;ll look at using the &lt;a href=&quot;https://www.drupal.org/project/search_api_page&quot;&gt;Search API Pages module&lt;/a&gt; to create a simple search page with a form at the top and a list of results ordered by relevancy. Search API Pages is the quickest and easiest way to replace the Drupal core search module&#039;s functionality with a form that uses Solr for a search backend instead of MySQL.

When creating a new page with the Search API Pages module we can choose the view mode that we would like to use for displaying results. It works very nicely with Drupal&#039;s built-in view modes, as well as contributed modules like &lt;a href=&quot;series/display-suite-drupal-7&quot;&gt;Display Suite&lt;/a&gt;, in order to allow for a high level of customization of &lt;a href=&quot;videos/display-suite-view-modes&quot;&gt;view modes&lt;/a&gt;, and thus of the displayed results.

You can also configure the query type to use, choosing from one of: multiple terms, single term, or direct query. For integration with Solr you&#039;ll likely want to choose direct query, and allow Solr to handle the query parsing since it has a lot of advanced options that go far beyond what Search API handles on its own. However, we&#039;ll look at the different query type configurations, and demonstrate things we can do with direct query searches and the powerful Solr query syntax that we can&#039;t do with the other modes.

Finally, we&#039;ll look at the block that Search API Pages provides, and use it to replace the search form on the home page of our site with a form that points to our new Search API Pages search results page.

By the end of this tutorial you should be able to expose a page on your site that will allow your visitors to perform a search using the Solr index and have the results displayed in Drupal.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/search_api_page&quot;&gt;Search API Pages module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;series/display-suite-drupal-7&quot;&gt;Display Suite series&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;videos/display-suite-view-modes&quot;&gt;Tutorial on view modes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UIFiMuhndA3Xcap4oF6VWm7pP3BXVsm6r9hVR-0ZKFg.jpg.jpg</video:thumbnail_loc><video:duration>777</video:duration><video:publication_date>2015-06-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-fields-and-assign-boost-values</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add Fields and Assign Boost Values</video:title><video:description>There are a couple of configuration options available when configuring a Search API index that we haven&#039;t looked at yet: adding additional fields, and using boost values to increase the relevance of a keyword when found in a specific field.

Solr allows you to index any number of additional fields, so we&#039;ll add a species and genus field to our index. This is one of the reasons using Search API to interface with Solr is so great. Through it&#039;s use of the Entity API, the Search API module has a deep understanding of all the content types on your site and the fields that are attached to them, without you having to write any code, or do anything other than configure things in the UI.

One of the benefits of creating your own search index is that you know your data better than anyone, and you know what people are hoping to find in your content.  Solr allows you to configure a boosting value that can be used to increase the relevancy of keywords found depending on where in the data it&#039;s located. For example, when someone searches for a keyword we can probably assume that if the keyword is in the page title that the keyword is worth more relevancy points than if the keyword is found in the page body. With boosting we can affect the relevancy ranking of results and help our users more quickly find what they are looking for.

By the end of this tutorial you should be able to add additional fields to your Solr index so their content is available for searching, as well as assign a relevancy boosting value when keywords are found in specific fields.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wjC0S0JX1gmoIm2qvBL-VfEXyu7LvApC_AJ-DhJl4-E.jpg.jpg</video:thumbnail_loc><video:duration>609</video:duration><video:publication_date>2015-06-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/data-alterations-and-processors</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Data Alterations and Processors</video:title><video:description>The Search API module supports a handful of data alterations and processors; additional operations that can be performed on a document before it&#039;s indexed or during the display of search results. While Solr actually handles the majority of these for us already, this tutorial will look at the available options, talk about what each one does, and explain which ones are still relevant when using Solr as a backend.

Looking at data alterations in the Search API module also raises an important point about security. By default, Search API doesn&#039;t care about your content&#039;s access control settings. In order to prevent people from seeing results for their searches that contain data they shouldn&#039;t have access to we need to make sure we account for that in our configuration.

Here&#039;s a good list of the currently available &lt;a href=&quot;https://www.drupal.org/node/1254452&quot;&gt;data alterations and processors&lt;/a&gt;, though it&#039;s worth noting that not all of them are available for all search backends. Also, as we&#039;ll see, not all of them are recommended when using Solr even if they are available. Solr&#039;s tokenizer for example is much more full featured than the Search API tokenizer, so when using Solr as a backend it&#039;s best to keep the Search API tokenizer turned off and let Solr do its thing.

By the end of this lesson you should be able to use data alterations and processors to filter out specific content types from your Solr index and to highlight keywords found when displaying search results. You&#039;ll also be able to explain why some alterations and processors are better left off so that Solr can handle those tasks directly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;https://www.drupal.org/node/1254452&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZM6-911ZHaYW6vjEe_n7nRPUwAUvv1x5vW1PweulKhM.jpg.jpg</video:thumbnail_loc><video:duration>677</video:duration><video:publication_date>2015-06-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-search-results-search-api-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Search Results With Search API Views</video:title><video:description>Being able to display search results using the Views module provides a huge amount of flexibility with respect to what is listed, what it looks like, and more. In this tutorial we&#039;ll look at using the Search API Views module, included in the Search API project, to create a view that allows users to search our Solr index and display the results as a table, or really, in any other way that Views can display content. We&#039;ll also cover some special considerations regarding access control and entity relationships that we need to keep in mind when using Views to display search results.

The biggest difference between creating a view that lists a bunch of nodes, and one that displays search results is that you need to use your Search API index as the base table from which you&#039;re building your view. Then, by default, the view only has access to the fields that are in the Solr index. This allows you to build the entire view without having to query the database. Or you can use the Views module&#039;s ability to define relationships to other buckets of content to query the database and pull in additional information. There&#039;s a huge amount of flexibility.

When building views from the Solr index you can optionally expose one or more filters. Essentially creating a form that allows someone to construct a search query. This can be as simple as exposing a keyword text field, or as complex as you would like to get. We&#039;ll look at using exposed filters to create a form that users can perform a search with and create a more complete search experience. We&#039;ll also look at how you can move those exposed filters into a block that can be displayed on the home page of our site, allowing us to replace the functionality provided to the Drupal core Search module with Views and Solr.

By the end of this tutorial you should be able to create a view that displays search results using the Search API Views module.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/overview-views&quot;&gt;Introduction to Views series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NeJNA2IvmfYzdZHN7qf1Y4jBKmftnkcjVvpYav0xtqk.jpg.jpg</video:thumbnail_loc><video:duration>1032</video:duration><video:publication_date>2015-06-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/narrow-search-results-facets</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Narrow Search Results with Facets</video:title><video:description>Using facets allows users of your search application to further narrow the results returned from a keyword search by selecting one or more attributes of the returned content and saying either show me only these, or show me everything but these. In this tutorial we&#039;ll take a look at some examples of faceted searching in practice, and then we&#039;ll use the Facet API module to expose facets for our genus and species fields.

One of the most common uses of facets is on e-commerce sites like &lt;a href=&quot;http://zappos.com&quot;&gt;Zappos.com&lt;/a&gt; that have huge collections of products that users can browse through, and narrow down, to focus in on exactly the pair of shoes they are after. In this example facets allow you do to things like narrow the results returned from your initial keyword search to just shoes for men, which are brown, size 10.5, and on sale. You can can also see faceting in action any time you perform a search on our site.

We&#039;ll use facets to allow users of the fish finder application to limit the results returned to just those of a specific species or genus. In doing so we&#039;ll also look at the options available for determining how facets should be displayed, whether or not we should show a facet that has zero documents in our result set, and how to combine multiple facets together into a single query using either AND or OR logic.

By the end of this tutorial you should be able to use the Facet API module in conjunction with Search API in order to provide facets that your users can use to further narrow and refine their search results.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://drupal.org/project/facetapi&quot;&gt;FacetAPI module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/v5CVCDkJmLNRZ0FEDRb8aPsS1Dko9bGIiDTMdrJjy6g.jpg.jpg</video:thumbnail_loc><video:duration>853</video:duration><video:publication_date>2015-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-stop-words-solr</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Stop Words in Solr</video:title><video:description>Depending on the data that is being searched, some shorter general words, like &quot;a&quot;, &quot;the&quot;, or &quot;is&quot; can adversely effect search result relevancy. Consider the word &quot;the&quot;, which in a standard description of a fish in our database could easily appear hundreds of times or more. When a search is performed, part of the algorithm that calculates the relevancy of any document in the index is to count the number of times a word appears in the text being searched. The more often it appears, the more relevant the document. Words like &quot;the&quot; however often have little to no real bearing on a document&#039;s actual relevancy. These words should instead be excluded from the ranking algorithm.

Stop words can also serve another purpose. You can filter out words that are so common in a particular set of data that the system can&#039;t handle them in a useful way. For example, consider the word &quot;fish&quot; in our dataset. It&#039;s probably very common. With only 500 fish being indexed it&#039;s not really going to make much difference, but what if we were indexing five million fish, and each one had the word &quot;fish&quot; in the description even just five times? That&#039;s 25 million occurrences of the word &quot;fish&quot;. Eventually we might start to hit the upper limit of what Solr can handle. The word &quot;fish&quot; in this case is probably also not very useful in a search query. You&#039;re browsing a fish database. Are you really likely to search for the query fish and expect any meaningful results? Likely it would instead return every result. It would be like going to Drupal.org and searching for the word &quot;drupal&quot; and expecting to get something useful. Not going to happen.

Solr has the ability to read in a list of stop words, or words that should be ignored during indexing, so that those words do not clutter your index and are removed from influencing result relevancy. In this tutorial we&#039;ll take a look at configuring stop words for Solr.

First, we&#039;ll use the Solr web UI to see the most common terms in our index for the body field. Then, based on that list, and the list of common stop words provided by the Solr team, we&#039;ll configure our stopwords.txt file. Finally, we&#039;ll re-index all the content of our site so that it makes use of the new stop words configuration and re-examine the most common terms noting that our stop words no longer appear in the list.

By the end of this tutorial you should be able to use the Solr web UI to get a list of the most common terms in your index, and know how to add terms to Solr&#039;s stopwords.txt file to prevent them from showing up in your index.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://xpo6.com/list-of-english-stop-words/&quot;&gt;List of common stop words&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.lucidworks.com/display/lweug/Synonyms+and+Stop+Words&quot;&gt;Synonyms and Stopwords by Lucidworks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.StopFilterFactory&quot;&gt;Solr Stop Filter Factory documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;blog/201508/configure-search-api-solr-use-stopwords-when-indexing-content&quot;&gt;Written tutorial based on this video&lt;/a&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gkKdOBSDyHtZk0qO20iSyhth_yqt12p4Pskvyo8onOM.jpg.jpg</video:thumbnail_loc><video:duration>712</video:duration><video:publication_date>2015-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-synonyms-solr</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Synonyms in Solr</video:title><video:description>Solr provides the option to configure synonyms for use during both indexing and querying of textual data. A synonym is a word or phrase that means exactly or nearly the same thing as another word or phrase in the same language. For example, shut is a synonym of close. Synonyms, if not accounted for, can cause a dilution of search result relevancy when searching for a keywords that have lots of variations in your index.

Consider for example the words, &quot;ipod&quot;, &quot;i-pod&quot;, and &quot;i pod&quot;. It&#039;s pretty easy to imagine a scenario in which the content of our site could contain all three variations of the word. When someone searches though they are likely just going to search for one, but expect results for all three. In order to not break those expectations we need to make sure we account for this scenario. Another example from the the Drupal world would be the terms &quot;CMI&quot; and &quot;configuration management&quot;. Chances are if you search for one you would be happy to see results for the other.

In this tutorial we&#039;ll look at using the synonyms.txt file that is part of our Solr configuration in order to account for synonyms in our data. Of course the exact words you use will depend on the content of your site, but we can at least cover how they work and how to configure them.

By the end of this tutorial you should be able to configure Solr to be aware of synonyms in your data in order to improve the quality of your search results.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory&quot;&gt;Solr Synonym Filter Factory documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GetuJjLSub7b151ATPwwS1OfNDXTSRFzivHb36iXaPg.jpg.jpg</video:thumbnail_loc><video:duration>579</video:duration><video:publication_date>2015-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/promote-results-keyword</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Promote Results by Keyword</video:title><video:description>One of the benefits of building our own search application is that we have ultimate control over the ranking of items. Combined with our superior knowledge of our own content we can use this to ensure that when someone searches for a specific keyword we bubble our best content for that term to the top of the list, regardless of whatever Solr might rank it based on its internal algorithms. This is commonly referred to as promoted, or sponsored, results; the artificial boosting of a particular document to the top of the result list for a specific query.

A similar, but not exactly the same, example would be sponsored results on Google searches, where you can pay to have your page listed at the top of the results for a specific keyword or set of keywords. We are going to be doing all of this except for the part where we let people pay to promote results, though you could certainly build that part on your own if you need that.

Solr uses a configuration file named elevate.xml, in conjunction with a processor, to elevate results at the time a query is performed. We can promote specific documents in our Solr index by figuring out the unique Solr ID for a document and then adding it to the elevate.xml file along with some information about a query, or queries, this document should be promoted for.

In this tutorial we&#039;ll learn how to find a Solr document&#039;s unique ID, and then configure Solr to use an elevate.xml file that will promote the &quot;How to Use the Fish Finder&quot; page to the top of the results when someone searches for the term &quot;fish&quot;. This configuration is all within the Solr application itself and doesn&#039;t really rely on Drupal in anyway. As such, the material in this tutorial should be applicable to your Solr search applications even if you&#039;re not building them with Drupal.

By the end of this lesson you should be able to configure promoted documents in your own Solr-based search application.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/node/1105528#comment-5232078&quot;&gt;Sample Solr Request Handler with Elevation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Scg_an4AUcLhlMrwB-iyxapVIX6j6VLTlIrwdbD6zd0.jpg.jpg</video:thumbnail_loc><video:duration>856</video:duration><video:publication_date>2015-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-domain-access-drupal-7-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Domain Access for Drupal 7 Series</video:title><video:description>In this introductory series you will learn how use the Domain Access project to let you manage multiple &quot;sites&quot; with different domain names from just one Drupal installation. Domain Access &quot;multisite&quot; works differently from the core multisite feature in that you truly only have one site to manage. There is just one code base and one database. Domain Access takes advantage of Drupal&#039;s node access system to give the illusion of multiple sites. In this series we start off by getting some context through several presentations that explain what Domain Access offers, and why you might use it, how DNS and Apache web servers work, and what you need to understand about the node access system. Once we dive into the hands-on work, you will configure Apache to work with multiple domain names, and get Domain Access installed on your site. Then you will configure a very basic Domain Access site, learning how to share and restrict content, change themes, and set up permissions for fine-grained access control.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/domain&quot;&gt;Domain Access project&lt;/a&gt; (drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4YCamND02-3nr4SUHAUen_fXj-rKF6B1yOad_2Lv1jc.jpg.jpg</video:thumbnail_loc><video:duration>293</video:duration><video:publication_date>2015-04-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/domain-access-overview</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Domain Access Overview</video:title><video:description>This series will implement the same example as the Multisite series did, but with Domain Access instead. You can see and compare the two methods. First, let&#039;s look at some other examples using Domain Access and see what we get when we download the package from Drupal.org. We&#039;ll also talk about the features provided, along with some things to be aware of and consider when choosing Domain Access.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/domain&quot;&gt;Domain Access project&lt;/a&gt; (drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mKKr8-sWZyxDdLLEjxncnAhDHiLd7uMR2LWpczB7yP8.jpg.jpg</video:thumbnail_loc><video:duration>590</video:duration><video:publication_date>2015-04-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-node-access-system</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal Node Access System</video:title><video:description>Domain Access can do its magic because of the Drupal node access system. In this tutorial we&#039;ll walk through the basics of how this system works, highlighting the two main methods, and then explain why this may be important information for you. We won&#039;t be diving into the code side of things, but instead outline the basic concepts for anyone who needs to interact with this system. When using a module like Domain Access, you should be aware of the Drupal context in which you are working, even if you hopefully never have to dive into the details.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/node/270000&quot;&gt;Controlling Access to Content Overview&lt;/a&gt; (drupal.org handbook)
&lt;a href=&quot;https://api.drupal.org/api/drupal/modules%21node%21node.module/group/node_access/7&quot;&gt;Node access developer documentation&lt;/a&gt; (api.drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/919b05Xz_G-qQ4dYnZSnOZSP9JbZ-NEmnAW7Ffi1HO4.jpg.jpg</video:thumbnail_loc><video:duration>656</video:duration><video:publication_date>2015-04-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-domain-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install Domain Access</video:title><video:description>In this tutorial we will get hands-on with Domain Access by getting the module installed. This is a more involved process than a regular module installation, but we just need to make sure we have a few things in place first. We&#039;re going to need to make sure we have our domains functioning correctly through Apache, and then add the Domain Access include file to our settings.php. With the configuration and module in place, we&#039;ll also verify that it is working properly and take a look at our domain list.

After watching this tutorial you will be able to properly install the Domain Access module, with its additional steps, and then verify that the installation was correct.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/domain&quot;&gt;Domain Access project&lt;/a&gt; (drupal.org)
&lt;a href=&quot;https://www.drupal.org/node/1096962&quot;&gt;Domain Access Configuring settings.php&lt;/a&gt; (drupal.org handbook)
&lt;a href=&quot;https://www.drupal.org/node/1096956&quot;&gt;Installing the Domain Access module (Drush instructions)&lt;/a&gt; (drupal.org handbook)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5U0FGhSeoO1qGO4PVEbHckl_pK2fn1Fau8o0uGhB5-s.jpg.jpg</video:thumbnail_loc><video:duration>659</video:duration><video:publication_date>2015-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configure-domain-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Domain Access</video:title><video:description>With the main Domain Access site installed, we now need to get our other domain names added to the site and working. In this tutorial we&#039;ll review the settings for domains, add the Alumni and News domain names, and then test that all three domains are working properly.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/node/1096974&quot;&gt;Basic Domain Access module configuration&lt;/a&gt; (drupal.org handbook)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/u4JwsVm4kIc-UAxjbx98D6zcZI1pslR_eojEuQd_1KM.jpg.jpg</video:thumbnail_loc><video:duration>531</video:duration><video:publication_date>2015-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/domain-access-content</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Domain Access Content</video:title><video:description>One of the biggest reasons to use Domain Access is to control the content for multiple domain names. In this tutorial we&#039;ll dive into content on our three sites. We&#039;ll start by sharing content across all the domains, and then create domain-specific content. To make managing the content across our domains easier, we&#039;ll then enable the included Domain Content module. This will provide us with some nice administrative tools to keep track of things.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6LsPXGDCA6DQD1myKrM1B-y06-I5XkPSVEnecbcAFak.jpg.jpg</video:thumbnail_loc><video:duration>648</video:duration><video:publication_date>2015-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/domain-settings-and-themes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Domain Settings and Themes</video:title><video:description>In addition to different content, you may also want to differentiate your domains in how they look and change some of the basic site settings to make them appear more as separate sites. In this tutorial we&#039;ll use the Domain Config and Domain Theme modules (included in the Domain Access package) to let us do just this. We&#039;ll change our settings on one of the sites to set the homepage node to the About page we created earlier. Then we&#039;ll make the Alumni site look quite different by giving it a new theme. Through this process you will understand things you need to watch out for when configuring Domain Access sites, and how to be appropriately cautious with your settings.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/X_5cNhMuI8TVRYJqcSBSskpSPE_yk6D25eb-i1c7pM0.jpg.jpg</video:thumbnail_loc><video:duration>706</video:duration><video:publication_date>2015-05-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/domain-access-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Domain Access Permissions</video:title><video:description>To really make Domain Access work the way you need it, you need to make sure you set up your roles, users, and permissions correctly. We&#039;ve been setting things up on our site as the administrator, but so far our site is not configured for other people to be involved. In this tutorial we&#039;re going to configure the permissions so that we have authenticated users who can create and edit content on particular domains. We&#039;ll also have several editors. Two of the editors can only manage content on their particular domains, while one editor will have access to all content across all three domains. 

In the process of setting this up we&#039;ll review the Domain Access permissions documentation, then dive into configuring them. We will also look at how we can set a default domain for a role, even though we won&#039;t need that for this use case. To test things out, we&#039;ll create some content as different users and see how the editors can or can not interact with that content.

To get things moving in this lesson, we are starting off having already created a number of users, and adding an editor role to the site. We don&#039;t walk through this process in the lesson, so if you need a refresher for creating roles and users, you can watch &lt;a href=&quot;https://drupalize.me/videos/hands-creating-roles-and-users&quot;&gt;Hands-On: Creating Roles and Users&lt;/a&gt; from the Using Drupal series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/node/1096972&quot;&gt;Domain Access Permissions&lt;/a&gt; (drupal.org handbook)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nD2KoogVVOUvGCUhIni1gYX-TosLeEqb-je9lapTU1Y.jpg.jpg</video:thumbnail_loc><video:duration>1213</video:duration><video:publication_date>2015-05-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/extending-domain-access</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Extending Domain Access</video:title><video:description>With the basics of our three domains set up, you&#039;re ready to build out your sites. We&#039;ve covered the main steps to get you started, but you&#039;ll find that there are a lot more options available to you as you build. Which additional modules you use will depend heavily on your particular needs. In this tutorial we&#039;ll talk about the other modules that are included in the Domain Access package, which we haven&#039;t used in this series. We&#039;ll also look at a list of other contributed modules that work with Domain Access to extend its feature set even further.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/node/1096964&quot;&gt;Domain Access modules&lt;/a&gt; (drupal.org handbook)
&lt;a href=&quot;https://www.drupal.org/node/1068570&quot;&gt;Domain Access related contributed modules&lt;/a&gt; (drupal.org handbook)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/S_iT4Cug0hxpOUmYYxJgPP_Fs6rYt6VzFxTzEPIB1AQ.jpg.jpg</video:thumbnail_loc><video:duration>472</video:duration><video:publication_date>2015-05-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/tail-command-line-debug</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Tail: Command Line Debug</video:title><video:description>This is an introduction to the Tail command, available on Unix/Linux systems. Tail has many applications, but this video concentrates on its basic usage and useful options, as they pertain to Drupal developers.

You&#039;ll learn how to take a quick peek at recent log messages from a single log file, how to do the same thing with multiple logs, as well as watching log files in real time! We&#039;ll finish up with a practical application, to see why this is useful.

Commands used in this video:

To view the documentation (or manual) for the tail command:
&lt;code&gt;man tail&lt;/code&gt;

To show the last 20 lines of the webserver&#039;s access log file:
&lt;code&gt;tail /var/log/apache2/access.log&lt;/code&gt;

To show the last 20 lines of the webserver&#039;s error log file:
&lt;code&gt;tail /var/log/apache2/error.log&lt;/code&gt;

To show the last 20 lines of the webserver&#039;s error log file and continue to print new lines added to the file:
&lt;code&gt;tail -f /var/log/apache2/access.log&lt;/code&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aD6R2XWgqbyrp73R-XrUTeyhttnRbROLUbIGlj9PQJU.jpg.jpg</video:thumbnail_loc><video:duration>259</video:duration><video:publication_date>2015-05-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/introduction-project-management</loc><lastmod>2024-10-02T00:48Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-project-management-series</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Project Management Series</video:title><video:description>Welcome to a special series on Project Management from Drupalize.Me. This series differs from our usual format of screencasts and presentations. We interviewed Lullabot&#039;s technical project managers, the Chief Operating Officer, and the Account Director, and organized the footage into a series of lessons on topics that project managers (PMs) deal with on a regular basis, including contracts, communication, estimation, tools and methodologies.

Here&#039;s what we&#039;ll be covering in this Introduction to Project Management series:

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Project Management Methodologies&lt;/strong&gt;: Learn about terminology and methodologies used in the world of software project management and how combining methodologies from different traditions can work effectively on service projects.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tools for Managing Projects&lt;/strong&gt;: Learn about the kinds of tools that are used in software project management for tracking progress, reporting, and team and client communication.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Traits of a Project Manager&lt;/strong&gt;: What makes a great project manager? What characteristics, skills, and approaches are great to have in someone in the role technical project manager?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Types of Services Contracts&lt;/strong&gt;: Learn about the different types of services contracts; in particular, the three that Lullabot uses in their client engagements. As you will see, the type of contract can have different implications in a project manager&#039;s needed skills and approach.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Estimation on Drupal Projects&lt;/strong&gt;: Learn about the challenges of estimation, and insights into the what estimates should communicate and how they should illuminate the various degrees of risk and uncertainty in a project.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Resourcing and Scheduling&lt;/strong&gt;: Learn about the challenge of determining how many people are needed for a project, and what questions to ask when determining capacity.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Putting Together Teams&lt;/strong&gt;: Learn strategies for how to put together teams, especially for large projects.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Being Human on Projects&lt;/strong&gt;: Learn about the people skills that are important to have, ways to detect burnout, and how to help team members get back on track.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Client Communication&lt;/strong&gt;: Learn about the many facets of client communication.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Managing Expectations&lt;/strong&gt;: Learn strategies for aligning and managing client expectations from the perspective of sales and account management.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Project Kick-Off Essentials&lt;/strong&gt;: Learn about the essential elements of a successful project kick-off meeting.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Problems, Risks, and Red Flags&lt;/strong&gt;: Learn strategies for identifying and dealing with problems, risks, and red flags on a project.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quality Assurance (QA)&lt;/strong&gt;: Learn about the various kinds of QA that you can implement in your project.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Demos and Retrospectives&lt;/strong&gt;: Learn about demos and retrospectives, some things to consider in a prototyping process, and what you can learn from these activities.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Launch and Celebration&lt;/strong&gt;: Learn some tips for ensuring a successful launch and the importance of celebrating the accomplishments of the team.&lt;/li&gt;
&lt;/ul&gt;

Whether you are a developer-turned-project-manager or a seasoned veteran, we think you will find insight into the art and science of project management in this series. 








</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2r-L7DE1fsI0MJgw1BCGi7BgA28k47fs8RjZrkXk9_o.jpg.jpg</video:thumbnail_loc><video:duration>172</video:duration><video:publication_date>2015-06-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/project-management-methodologies</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Project Management Methodologies</video:title><video:description>In this lesson, you’ll learn about methodologies and techniques that are often used in project management. These methodologies provide a set of processes for a development team to utilize, and a framework that a project manager can use to structure a project’s tasks and progress. You’ll hear from project managers at Lullabot who explain terms such as Waterfall, Agile, Wagile or Consultancy Scrum, Kanban, Scrum, and Sprints and how a tailored combination of these techniques often leads to the best results.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/agile/kanban&quot;&gt;An Introduction to Kanban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1rFggaYngYkH1ecVjOtZhf1H1hFM8LCnPIqmPh2ZBRNI/edit?usp=sharing&quot;&gt;Project Management Methodologies: Scrum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TCjbZu9bZYEcbCPziicAbCpdgJsGyUDGXY_E8Y6yRjI.jpg.jpg</video:thumbnail_loc><video:duration>1112</video:duration><video:publication_date>2015-06-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/tools-managing-projects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Tools for Managing Projects</video:title><video:description>In this lesson, we’ll hear from Lullabot project managers about what they think makes a good ticket tracking system, some helpful ways to organize tickets, and other features including tracking conversations, email notifications, and reporting features that many ticket software platforms can provide. We’ll also hear about a tool called a Gantt chart which can help a project manager answer questions such as “when the project will be finished”, “what the critical path is”, and “what are the dependencies in this project?”

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://smartsheet.com&quot;&gt;Gantt Charts (SmartSheet)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Burn_down_chart&quot;&gt;Burn down chart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zenhub.io&quot;&gt;zenhub.io&lt;/a&gt; for GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/software/jira/agile&quot;&gt;Agile for JIRA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trello.com&quot;&gt;Trello.com&lt;/a&gt; (standalone w/some integrations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/software/jira/agile&quot;&gt;JIRA: Agile plugin has a nice tool for planning sprints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com&quot;&gt;GitHub&lt;/a&gt;: use Milestones&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_Zdmtj-5BsEccTzyeejlG0I3fyGMoU4iqDMobaWeKos.jpg.jpg</video:thumbnail_loc><video:duration>923</video:duration><video:publication_date>2015-06-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/traits-project-manager</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Traits of a Project Manager</video:title><video:description>In this lesson, you’ll hear from Lullabot’s Chief of Operations, Account Director, and several technical project managers about what they think makes a good project manager. These traits of a good PM include: being a great communicator, having the ability to distill a project into tasks, taking initiative to clear blockers for developers, probing stakeholders for requirements, assumptions, and other vital information, demonstrating leadership, and finally being able to have difficult conversations with clients—discussing uncomfortable truths with tact and diplomacy. Are you on the path to becoming a project manager? Or maybe you’re looking to improve your skills? With these insights, learn about the variety of technical and people skills that make for a great project manager. 

&lt;h3&gt;Additional resources&lt;/h3&gt;

Want to dive deeper? Here are some books recommended by project managers at Lullabot:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Peopleware: Productive Projects and Teams&lt;/strong&gt; by Tom DeMarco &amp;amp; Timothy Lister&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Making Things Happen: Mastering Project Management&lt;/strong&gt; by Scott Berkun&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tribal Leadership: Leveraging Natural Groups to Build a Thriving Organization&lt;/strong&gt; by Dave Logan, John King &amp;amp; Halee Fischer-Wright&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Stories Applied: for Agile Software Development&lt;/strong&gt; by Mike Cohn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analysis without Paralysis: 12 Tools to Make Better Strategic Decisions&lt;/strong&gt; by Babette E Bensoussan &amp;amp; Craig S Fleisher&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Software Estimation&lt;/strong&gt; by Steve McConnell&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Mythical Man-Month: Essays on Software Engineering&lt;/strong&gt; by Frederick P. Brooks, Jr.&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/bqQ_Z916XUxO8R6B_pWTqfUCOFtLDWZfOFX50R7s0MU.jpg.jpg</video:thumbnail_loc><video:duration>720</video:duration><video:publication_date>2015-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/types-services-contracts</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Types of Services Contracts</video:title><video:description>In this lesson, you’ll learn about three types of services contracts: the fixed bid or fixed scope, time and materials, and a retainer-based contract. You’ll also hear about the Iron Triangle: budget, scope, and timeline, and how these elements are controlled or can flex in these different types of agreements. Finally, you’ll learn about how a contract can imply a certain level of trust and how building successful relationships with clients can lead to future, more mutually favorable agreements.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.lullabot.com/blog/article/lullabots-hierarchy-qualification&quot;&gt;Lullabot&#039;s Hierarchy of Qualification by Brian Skowron&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/t-EOWwrkNtVlgt3sI7bceHVlv_YYHQ6-srrUPwb5T2I.jpg.jpg</video:thumbnail_loc><video:duration>857</video:duration><video:publication_date>2015-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/estimation-drupal-projects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Estimation in Drupal Projects</video:title><video:description>In this lesson, you’ll learn what makes a good estimate and what some good questions are to ask in the estimation process. You’ll also hear about how an estimation process can detect unclear requirements and what kind of communication needs to happen as a result of that discovery. Finally you’ll learn some helpful techniques for estimation that provide just the right amount of detail.

&lt;h3&gt;Additional resources&lt;/h3&gt;

Want to dive deeper? Here are some books recommended by project managers at Lullabot:
&lt;h4&gt;Books&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Peopleware: Productive Projects and Teams&lt;/strong&gt; by Tom DeMarco &amp;amp; Timothy Lister&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Making Things Happen: Mastering Project Management&lt;/strong&gt; by Scott Berkun&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tribal Leadership: Leveraging Natural Groups to Build a Thriving Organization&lt;/strong&gt; by Dave Logan, John King &amp;amp; Halee Fischer-Wright&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Stories Applied: for Agile Software Development&lt;/strong&gt; by Mike Cohn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analysis without Paralysis: 12 Tools to Make Better Strategic Decisions&lt;/strong&gt; by Babette E Bensoussan &amp;amp; Craig S Fleisher&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Software Estimation&lt;/strong&gt; by Steve McConnell&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Mythical Man-Month: Essays on Software Engineering&lt;/strong&gt; by Frederick P. Brooks, Jr.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Online Resources&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Systems_development_life_cycle&quot;&gt;Systems development life cycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scrum-breakfast.com/&quot;&gt;Scrum Breakfast (blog)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://agilesoftwaredevelopment.com/&quot;&gt;Agile Software Development .com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.scrumalliance.org/certifications&quot;&gt;Certifications in Scrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mattrogish.com/blog/2012/08/16/software-effort-estimation-considered-harmful/&quot;&gt;Software Effort Estimation Considered Harmful&lt;/a&gt;&lt;/li&gt; and on the opposite spectrum: &lt;a href=&quot;http://maxim.fridental.de/2013/02/12/how-to-estimate/&quot;&gt;How to Estimate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Templates&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://drive.google.com/open?id=1x0njXaQcypwVDs-ennsbbAPlG1Wa2TOaFNbi3_p8O64&amp;authuser=1&quot;&gt;Development Matrix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/a/lullabot.com/spreadsheet/ccc?key=0Agwk38VO6VWOdDB4NWJyYVJxSS01LXBKRnlEY1Y5WFE&amp;usp=sharing#gid=16&quot;&gt;Estimation Spreadsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Articles by Lullabots&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/building-development-matrix&quot;&gt;Building a Development Matrix by Jerad Bitner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/art-estimation&quot;&gt;The Art of Estimation by Seth Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lullabot.com/blog/article/update-art-estimation&quot;&gt;An Update on the Art of Estimation by Jerad Bitner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Methods&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Wideband_delphi&quot;&gt;Wideband delphi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eik6_V2ZWMarZBvdVVUmmCJjGBPQhpZ6juT2JcShJn0.jpg.jpg</video:thumbnail_loc><video:duration>641</video:duration><video:publication_date>2015-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/resourcing-and-scheduling</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Resourcing and Scheduling</video:title><video:description>In this lesson, you’ll learn about the challenge of determining how many people are needed for a project, what questions to ask when determining capacity, and finally signals that may indicate that it’s time to bring others in or remove team members from a project.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;strong&gt;The Mythical Man-Month: Essays on Software Engineering&lt;/strong&gt; by Frederick P. Brooks, Jr.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aoz2x-RV7Q4Tk9C4X7DJ4niMyIGTCIUyxeO2SDjoe2Y.jpg.jpg</video:thumbnail_loc><video:duration>697</video:duration><video:publication_date>2015-07-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/working-large-project-teams</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Working with Large Project Teams</video:title><video:description>In this lesson, you’ll learn some strategies for how to put together teams, especially for large projects. You’ll hear about the advantages of organizing a project into work streams, what that means, and how it can be advantageous to break up a large project team into smaller, more efficient groups.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/G4vqIBCo8V0CdrITXwcadB7HNcOlsGPJr4g8mGgNpsU.jpg.jpg</video:thumbnail_loc><video:duration>516</video:duration><video:publication_date>2015-07-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/being-human-projects</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Being Human on Projects</video:title><video:description>In this lesson, you’ll learn about the human side of project managing; what people skills are important to have, and ways to detect burnout and help team members get back on track.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DFvcm7fGYj9EXnK4EzXg26aZaXmBJVkm8S2JSMc725E.jpg.jpg</video:thumbnail_loc><video:duration>509</video:duration><video:publication_date>2015-07-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-free-community-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/client-communication</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Client Communication</video:title><video:description>In this lesson, you will hear a variety of perspectives on the many facets of client communication. As trust directly impacts communication, you will hear about how trust varies depending on the type of project. In difficult conversations, learn about the importance of listening. To build trust and manage tricky situations, learn about transparent, proactive communication of risk factors. On a practical level, you’ll learn about the importance of translating client discussions into action items for the development team, and how the ticket queue can be a great place to capture important discussions and facilitate client communication with the project team.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/97CcJId0TRCQRKZziFk4AUOeTZWzvviwartFAt-89Bg.jpg.jpg</video:thumbnail_loc><video:duration>429</video:duration><video:publication_date>2015-07-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/managing-expectations</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Managing Expectations</video:title><video:description>In this lesson, you will learn some strategies for aligning and managing client expectations from the perspective of sales and account management. Learn how you, as a project manager, can work with an account manager to effectively communicate with a client to find out whether or not expectations are being met.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VmLhtyvHzknwPRBvWt7EXHwLmhzj8PaEMNCZaeJ89fc.jpg.jpg</video:thumbnail_loc><video:duration>552</video:duration><video:publication_date>2015-07-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/project-kick-essentials</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Project Kick-Off Essentials</video:title><video:description>In this lesson, you’ll learn about the essential elements of a successful project kick-off meeting or on-site, including who should be there and what should be done during this time.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BPpRo1njO_M7Y_rtdNjV_DwhayXeRNRa55FbvITw244.jpg.jpg</video:thumbnail_loc><video:duration>517</video:duration><video:publication_date>2015-07-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/problems-risks-and-red-flags</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Problems, Risks, and Red Flags</video:title><video:description>In this lesson, you’ll learn strategies for identifying and dealing with problems, risks, and red flags on a project. You’ll also learn tips for being a proactive and diplomatic communicator, ensuring that progress and velocity is up to speed, and the importance of minding the boundaries of your relationship with the client and how to effectively advocate for the project, without forgetting the people who can ultimately make the project successful.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.lullabot.com/blog/article/mistakes-agencies-make-story-three-acts&quot;&gt;Mistakes Agencies Make: A Story in Three Acts by Seth Brown&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/k78KRCsK99izwJ5lfZaEczLUDxTI_HOqhdENUdDLo6Y.jpg.jpg</video:thumbnail_loc><video:duration>856</video:duration><video:publication_date>2015-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/quality-assurance</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Quality Assurance</video:title><video:description>In this lesson you will learn about different approaches to Quality Assurance (QA), the importance of doing QA throughout the project, and how QA can be used as a basis for documentation and help for the client.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.lullabot.com/blog/article/testing-front-end-casperjs&quot;&gt;Testing the front end with CasperJS&lt;/a&gt; 
&lt;a href=&quot;https://www.lullabot.com/blog/article/automate-your-life-phing&quot;&gt;Automate Your Life with Phing&lt;/a&gt; 
&lt;a href=&quot;https://www.lullabot.com/blog/article/css-regression-testing-resemblejs&quot;&gt;CSS Regression Testing with Resemble.js&lt;/a&gt; 
&lt;a href=&quot;https://drupalize.me/blog/201502/write-hello-world-test-drupal-7-simpletest&quot;&gt;Write A Hello World Test for Drupal 7 with SimpleTest&lt;/a&gt; 
&lt;a href=&quot;https://drupalize.me/videos/introduction-automated-testing-simpletest&quot;&gt;Automated Testing in Drupal 7 with SimpleTest&lt;/a&gt; 
&lt;a href=&quot;https://drupalize.me/videos/quality-assurance-selenium&quot;&gt;Quality Assurance with Selenium&lt;/a&gt; 
&lt;a href=&quot;https://drupalize.me/blog/201312/careful-debug-syntax&quot;&gt;Careful with that Debug Syntax&lt;/a&gt; </video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TH6Mesco44tEaMVu-nCJc2WBhbaSVk46BM1kXa1O3so.jpg.jpg</video:thumbnail_loc><video:duration>573</video:duration><video:publication_date>2015-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/demos-and-retrospectives</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Demos and Retrospectives</video:title><video:description>In this lesson, you’ll learn about demoing your progress to the client and the team, along with some things to consider in a prototyping process. We&#039;ll also talk about retrospectives, when the team takes time to review not just the work produced but the process behind it as well.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/urUj6_XYunv9ekgB_Pi_7PNUleo75xTIRvZw6W8u_nU.jpg.jpg</video:thumbnail_loc><video:duration>399</video:duration><video:publication_date>2015-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/launch-and-celebration</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Launch and Celebration</video:title><video:description>In this lesson, you’ll learn some tips for ensuring a successful launch and the importance of celebrating the accomplishments of the team.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RGx2whgz26xe78SVndIudZq1cKuQ-60sI5rIQYj2Xs0.jpg.jpg</video:thumbnail_loc><video:duration>656</video:duration><video:publication_date>2015-07-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/site-improvements-daisyjo</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/were-sponsoring-events-countrywide-camp-or-conference-near-you</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/double-pony-what-does-it-mean</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/drupalizeme-demo-sites-pantheon</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupalize.Me Demo Sites with Pantheon</video:title><video:description>In this tutorial, you will learn how to get a Drupalize.Me tutorial demo site up and running using Pantheon. You&#039;ll learn about the various components that make up the Drupalize.Me demo site downloads and how each part should be imported. By the end of this lesson, you&#039;ll know how to create a Drupalize.Me demo site on a free Pantheon Dev instance so that you can follow along with the trainer in the Drupalize.Me video tutorial.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://pantheon.io/&quot;&gt;Pantheon&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JaaRsXNblSq1YZiZNd8peMgq9l-AAwZwEemzc9uQRAQ.jpg.jpg</video:thumbnail_loc><video:duration>241</video:duration><video:publication_date>2015-08-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupalizeme-demo-sites-acquia-dev-desktop-2</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupalize.Me Demo Sites with Acquia Dev Desktop 2</video:title><video:description>In this tutorial, you will learn how to use Acquia Dev Desktop 2 to get a Drupalize.Me tutorial demo site up and running. You will learn how to import a Drupal codebase and database containing a finished site for an individual tutorial on Drupalize.Me. This will enable you to walk through the lesson and see what was accomplished on the site during the lesson.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://docs.acquia.com/dev-desktop2&quot;&gt;Acquia Dev Desktop 2&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EhKTwXkvcKKNFqd7xGdyGvrpDEWl-CD3RdDKx1Ld9kY.jpg.jpg</video:thumbnail_loc><video:duration>390</video:duration><video:publication_date>2015-08-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exposing-api-drupal</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exposing an API with Drupal</video:title><video:description>In this tutorial, I&#039;ll show you a few ways we can create a basic API by exposing data from our Drupal site.

The methods I&#039;ll use include:

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/views_datasource&quot;&gt;Views Datasource&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Custom code&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.drupal.org/project/services&quot;&gt;Services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;strong&gt;Self-check question&lt;/strong&gt;: In what situations would you consider using each of these approaches?


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views_datasource&quot;&gt;Views Datasource&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/services&quot;&gt;Services&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TkxzciUYMeWv0Yag4uock2frtWx7mKGJJXEOSDewODY.jpg.jpg</video:thumbnail_loc><video:duration>692</video:duration><video:publication_date>2015-11-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/views-demystified</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/api-documentation-and-testing</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>API Documentation and Testing</video:title><video:description>In this tutorial, I&#039;ll introduce the API Blueprint specification and take a look at a few tools we can use to provide documentation and testing for our API.

The tools we&#039;ll look at include:

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://apiary.io/&quot;&gt;Apiary&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://apiblueprint.org/&quot;&gt;API Blueprint&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/dredd&quot;&gt;Dredd&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/aglio&quot;&gt;Aglio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

By the end of the tutorial you&#039;ll have a better understanding of the API Blueprint specification and be able to use Dredd and Aglio to ensure your API documentation and testing stay up-to-date.

&lt;strong&gt;Self-check question&lt;/strong&gt;: Could you write a script that could be run after every commit that would keep your documentation up-to-date, and provide API test results?


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://apiary.io/&quot;&gt;Apiary&lt;/a&gt;
&lt;a href=&quot;https://apiblueprint.org/&quot;&gt;API Blueprint&lt;/a&gt;
&lt;a href=&quot;https://www.npmjs.com/package/dredd&quot;&gt;Dredd&lt;/a&gt;
&lt;a href=&quot;https://www.npmjs.com/package/aglio&quot;&gt;Aglio&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/q_5C7CEG0rglxspY9VJ1CCdBPIX9Cz9YoA1hM4CkwwQ.jpg.jpg</video:thumbnail_loc><video:duration>638</video:duration><video:publication_date>2015-11-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/tasty-treats-more-series-and-more-free-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/markup-drupal</loc><lastmod>2024-07-19T23:09Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/why-use-base-theme</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Why Use a Base Theme?</video:title><video:description>In this tutorial, I will explain what a base, or parent, theme is in Drupal and why it can be advantageous to use it in theming. We&#039;ll take a look at what is commonly provided by a base theme, including discussing what a &quot;starter kit&quot; is and how it is intended to be used.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/node/980434&quot;&gt;Using Base Themes — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KDIbCT5YLbjt_WmCVa5qg54M5PKMMMv9REbRiyWnqvk.jpg.jpg</video:thumbnail_loc><video:duration>189</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/zen-introduction-and-installation</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Zen: Introduction and Installation</video:title><video:description>Zen is a base, or parent, theme for Drupal that features lean, semantic HTML5 markup and a starter kit for custom theme development. In this tutorial, we will install Zen and create a subtheme for custom theme development using Drush. I use the Drush command provided by Zen because of all of the tedious renaming required when cloning the &quot;STARTERKIT&quot; into a subtheme. The Drush command provided by Zen automates this and makes it a relatively painless process. If you need to install Drush, see our related video tutorial, &lt;a href=&quot;https://drupalize.me/videos/installing-drush-composer?p=1156&quot;&gt;Installing Drush with Composer&lt;/a&gt;, or read the instructions for installation on the &lt;a href=&quot;https://github.com/drush-ops/drush&quot;&gt;Drush web site&lt;/a&gt;.

In the next tutorial, I&#039;ll briefly explain why you might want to use a base theme and when it makes the most sense to do so. After that, I will walk through and highlight some of the HTML5 semantic markup in Zen&#039;s template files, contrasting the markup with the corresponding template files in the core Drupal 7 theme, Bartik.

Other tutorials in the Markup in Drupal series also use a subtheme of Zen, called zendemo, as a theme for the demo site. This was done to demonstrate how markup is first and foremost affected by the theme. It was also done to show how using a base theme that uses semantic HTML5 markup can be advantageous if you want to use HTML5 elements in the built-out components and pages of your Drupal site.

To follow along, &lt;a href=&quot;https://www.drupal.org/project/drupal&quot;&gt;download the latest version of Drupal 7&lt;/a&gt;, and follow the instructions in the video for installing Zen and a creating a subtheme.

In the downloads section below you&#039;ll find a database and files downloads, which is the state of the site after this tutorial, with Zen and the subtheme &quot;zendemo&quot; installed.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/zen&quot;&gt;Zen theme — Drupal.org&lt;/a&gt;
&lt;a href=&quot;http://drupal.org/documentation/theme/zen&quot;&gt;Zen documentation — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_gqR3I3mvHBBF1e2_9DBBizyvli1yBKIr0EnePB2R_U.jpg.jpg</video:thumbnail_loc><video:duration>409</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/zen-identify-html5-markup-templates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Zen: Identify HTML5 Markup in Templates</video:title><video:description>In this tutorial, I will take you on a tour of some of the template files included with Zen and highlight how HTML5 semantic markup was incorporated into the markup of several different template files.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/zen&quot;&gt;Zen — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/documentation/theme/zen&quot;&gt;Zen documentation — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5&quot;&gt;HTML5 Developer Guide — MDN&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4MDUPzjpnJZ29NprtaKV3WjFPbOFWZMIh6CnjJ5zN9g.jpg.jpg</video:thumbnail_loc><video:duration>259</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/recap-markup-zen</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Recap: Markup in Zen</video:title><video:description>This is a review what I covered in the previous tutorials in this series about Zen, including how to use Zen as a base or parent theme, why you might use a base theme in theme development, how HTML5 markup is included in Zen&#039;s template files, and how to install Zen and create a subtheme for your own custom development.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/documentation/theme/zen&quot;&gt;Zen documentation — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hgzCRLcT83xXlG1HqkUntV1vGvSPpQkhdJp9MHJHLzc.jpg.jpg</video:thumbnail_loc><video:duration>36</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/fences-semantic-markup-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Fences: Semantic Markup for Fields</video:title><video:description>Now let’s take a look at how we can configure fields to use semantic markup using the Fences module. In this tutorial, we’ll install and enable Fences module using Drush. Then we’ll take a look at the configuration settings for the module. Next we’ll hop into the field settings form for the body field and select an HTML5 tag as a new markup wrapper. Finally, we’ll take a look at how Fences field settings configuration carries over to Views and how we can override Fences markup in Views&#039; field settings.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/fences&quot;&gt;Fences — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jMkF3HeFDFOgkqHGVN694cy0-eQfj0H6TjPlcuLePbk.jpg.jpg</video:thumbnail_loc><video:duration>455</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-markup-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Markup in Views</video:title><video:description>This next set of tutorials relates to controlling markup in Drupal when using the Views module. We’ll cover:
&lt;ul&gt;
  &lt;li&gt;What affects markup in Views&lt;/li&gt;
  &lt;li&gt;Selecting an appropriate Views display format as a starting point for markup output&lt;/li&gt;
  &lt;li&gt;Customizing field markup&lt;/li&gt;
  &lt;li&gt;Customizing wrapper selectors and CSS classes&lt;/li&gt;
  &lt;li&gt;Accessing theming information in Views&lt;/li&gt;
  &lt;li&gt;Overriding Views template files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/re0vB6QZo3vsOwLurtSVops2N8q3vz4ZAQfcygcDeaA.jpg.jpg</video:thumbnail_loc><video:duration>129</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-unformatted-list-format</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Unformatted List Format</video:title><video:description>One thing that affects markup in Views is the format that is using for the display. In this tutorial we&#039;ll take a look, step-by-step, at the Unformatted list format in Views. We&#039;ll examine its default markup, how to add custom CSS classes—and to which elements—and what it looks like to remove all of Views&#039; default markup.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ktucQcjGLJ5mD46z6BLRRoii0VFDfxVE-2lcYznyBH4.jpg.jpg</video:thumbnail_loc><video:duration>334</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-html-list-format</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views HTML List Format</video:title><video:description>Continuing our look at how Views&#039; formats affect your markup, in this tutorial we&#039;ll take a look, step-by-step, at the HTML list format in Views. We&#039;ll examine its default markup and how to add custom CSS classes to various elements.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qiayFJ51qlPxIlR6UkczX0zw65xc8Caghh8fZjFrNwc.jpg.jpg</video:thumbnail_loc><video:duration>266</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-table-format</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Table Format</video:title><video:description>As we continue to look at how Views formats affect markup, we&#039;ll now examine the Table format in Views. We&#039;ll take a look at its default markup, how to add custom CSS classes to various elements and explore other settings unique to this format.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dHt8KKcTtSdSkNLI0ySg2TATUfWjeqfRw_gknXVKhqk.jpg.jpg</video:thumbnail_loc><video:duration>375</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-default-field-wrapper-markup</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Default Field Wrapper Markup</video:title><video:description>We&#039;ve examined the Views formats and row style formatting. Now I&#039;ll walk you through the default field wrapper markup in Views. We&#039;ll inspect the default markup for fields, remove the default field wrapper markup and I&#039;ll point out some of the implications of this action, and then I&#039;ll apply a different Views format, so that you can see how the field wrapper markup is impacted by that configuration change. This will give you a better understanding of how markup is affected at the field-level in the context of a view.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/14EMvcYZQOupj5jrTDjHPlELAM0MKxcN6BoneeTVDWI.jpg.jpg</video:thumbnail_loc><video:duration>442</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-advanced-field-wrapper-markup</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Advanced Field Wrapper Markup</video:title><video:description>Now that we’re familiar with the default field wrapper markup in Views, let’s explore how to customize this markup. In this tutorial, I will introduce to you a prototype of recent posts that was built using Pattern Lab. We’ll inspect the wrapper markup of two template files that compose this media list. After getting familiar with the prototype markup, we’ll apply that markup, step-by-step, to the fields in our view of recent posts. In doing so, we will use the custom field markup settings for each field and utilize rewrite results and replacement tokens to customize our markup output even further.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;http://patternlab.io/&quot;&gt;Pattern Lab&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-ghJ2WQJ7P7WT9FAMQbs70Ske7_ZEVYK1m-lvPgHLpw.jpg.jpg</video:thumbnail_loc><video:duration>695</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/views-theme-information</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Theme Information</video:title><video:description>In the next few tutorials, we&#039;ll pull back the veil of Views theming a bit and introduce some tools to help you wrangle Views&#039; template files. In this tutorial, I&#039;ll introduce you to Views Theme Information and how to use this interface to find out which template files are being used to mark up your view.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vhGqaTg_Zy3N_tRSntz1hUWObQsZNg0rbUjpXpQ8m3U.jpg.jpg</video:thumbnail_loc><video:duration>257</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theme-developer-module-and-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theme Developer Module and Views</video:title><video:description>In this tutorial, we&#039;ll download the Theme Developer module and use it to inspect our view when it is using view modes for display instead of fields. We&#039;ll also look at how Theme Developer interacts with Views and some of the &quot;gotchas&quot; that can occur when using these modules together.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/devel_themer&quot;&gt;Theme Developer — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/devel&quot;&gt;Devel — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/simplehtmldom&quot;&gt;simplehtmldom API — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vNBhlnO4unDUu6AtO0j9FSCtsBHQqGJNvUjJ5C-xOLQ.jpg.jpg</video:thumbnail_loc><video:duration>503</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-free-videos-command-line-and-ooyala</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/views-template-files</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Views Template Files</video:title><video:description>In this tutorial, I&#039;ll walk you through how to identify a template file to override, locate the template file in your site&#039;s code base, and copy it into your active theme.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2umaVV05tDAQFWwRA9_CLKB0hfczCWteIHK511-fdCI.jpg.jpg</video:thumbnail_loc><video:duration>388</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-add-class-view</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How to Add a Class to a View</video:title><video:description>In this tutorial, I will show you how to apply a class to the wrapper markup of the view using the Views UI.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/views&quot;&gt;Views — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/b5j7qIU-VlqltO9b1tJ5GJRh_H7p_SDRIWaxn94KLr8.jpg.jpg</video:thumbnail_loc><video:duration>57</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/recap-and-challenge-markup-views</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Recap and Challenge: Markup in Views</video:title><video:description>In these tutorials on markup in Views, we learned :
&lt;ul&gt;
  &lt;li&gt;What affects markup in Views&lt;/li&gt;
  &lt;li&gt;How to use the Views UI to change markup&lt;/li&gt;
  &lt;li&gt;How formats affect markup output&lt;/li&gt;
  &lt;li&gt;How to customize row and field wrapper markup&lt;/li&gt;
  &lt;li&gt;How to rewrite output with replacement tokens&lt;/li&gt;
  &lt;li&gt;How to override Views template files&lt;/li&gt;
  &lt;li&gt;How to add a CSS class to your View&lt;/li&gt;
&lt;/ul&gt;

As you learned, there are a number of ways to affect markup in Views ranging from utilizing the UI to editing a template file in code.

&lt;h3&gt;Ready for a challenge?&lt;/h3&gt; 

Now that you’ve learned all about markup in Views, can you apply what you’ve learned? Use your knowledge of customizing markup using the Views UI and your knowledge of overriding Views template files to apply the HTML markup in the pattern lab prototype to a view of recent posts. Download the demo files and database containing the view of recent posts in the additional resources section below. Contained in the top-level of the files download is a directory called &quot;misc.&quot; Inside &quot;misc&quot; you&#039;ll find the demo-pattern-lab files:
&lt;ul&gt;
  &lt;li&gt;The latest posts file is located in &lt;code&gt;misc/demo-pattern-lab/source/_patterns/02-organisms/03-sections/00-latest-posts.mustache&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;The media block file is located in &lt;code&gt;misc/demo-prototype/source/_patterns/01-molecules/02-blocks/00-media-block.mustache&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

Use your knowledge of inspecting views template files to locate the read more link markup in order to customize the markup and placement of the read more link, to match the prototype markup. You can find the setting to turn on the more link in the Views UI under the pager section in the middle column.

Here’s another hint: you’ll want to update the field settings for the body field to display a trimmed or summary display instead of the full body value.

Finally, For a bonus challenge, create an image style that matches the prototype image dimensions, and apply it to the image field in your view. To learn more about image styles in views, check out the video &lt;a href=&quot;https://drupalize.me/videos/using-image-styles-views?p=1150&quot;&gt;Using Image Styles with Views&lt;/a&gt; in the Drupalize.Me library.

Good luck with this challenge!


&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/videos/using-image-styles-views?p=1150&quot;&gt;Using Image Styles with Views&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q7KTPs77X27og1GjczbNCf9tUDXS9YsH4JTh-tLaxKY.jpg.jpg</video:thumbnail_loc><video:duration>155</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-markup-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Markup in Panels</video:title><video:description>Now let&#039;s shift gears and take a look at how using Panels affects markup in Drupal. I will show you some unique-to-Panels concepts as well as how to apply Drupal theming principles to customize markup on a Drupal site that uses Panels. 

In the tutorials that follow, you will learn: 
&lt;ul&gt;
  &lt;li&gt;About Panels layouts&lt;/li&gt;
  &lt;li&gt;How to add CSS classes using Panels&lt;/li&gt;
  &lt;li&gt;How to override the panel pane template file&lt;/li&gt;
  &lt;li&gt;What Panels means by “Style”—with a broad overview of Style Plugins and where to go for a deeper dive&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/series/theming-basics-drupal-7-series&quot;&gt;Theming Basics for Drupal 7 — Drupalize.Me&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZaK8lxb_HY0X34ViZNsHK6DVd0PeEwtHKRL3z-1L4S0.jpg.jpg</video:thumbnail_loc><video:duration>242</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-layouts-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Layouts in Panels</video:title><video:description>As discussed in the previous tutorial, one thing that affects markup in Drupal when using the Panels module is the Panels layout. In this tutorial, I will provide an overview of how layouts work in Panels. To learn more about how to create your own Panels layout in code, see the related tutorial: &lt;a href=&quot;https://drupalize.me/videos/adding-custom-panels-layouts-your-theme?p=1137&quot;&gt;Adding Custom Panels Layouts in Your Theme&lt;/a&gt;. To learn how to use the Flexible Layout Builder in Panels, see this tutorial: &lt;a href=&quot;https://drupalize.me/videos/custom-panels-layouts?p=1137&quot;&gt;Custom Panels Layouts&lt;/a&gt;.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/videos/adding-custom-panels-layouts-your-theme?p=1137&quot;&gt;Adding Custom Panels Layouts in Your Theme — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/videos/custom-panels-layouts?p=1137&quot;&gt;Custom Panels Layouts — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DzC_Pnd71pG6k3zafZxQ2rcg5hyKT6KEcOF4bRCDDF8.jpg.jpg</video:thumbnail_loc><video:duration>115</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/set-demo-panel-page</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Set up Demo Panel Page</video:title><video:description>In this tutorial, we&#039;ll finish setting up the Test page using Page Manager. We&#039;ll enable Views Content Panes, create a new content pane display in our view of recent articles, and place that content pane in the panel page.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/videos/overview-views-content-panes?p=1137&quot;&gt;Overview of Views Content Panes — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8AAGsA5p34tZcwqbOTqPfhOHDGyJ3PPHIN20MO0gRds.jpg.jpg</video:thumbnail_loc><video:duration>188</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/panels-add-or-remove-css-body-classes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Panels: Add or Remove CSS Body Classes</video:title><video:description>In this tutorial, I will show you how to add and remove CSS classes from the body tag using Panels. I will also point out the other CSS-related settings and the pros and cons of each one.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/building-websites-drupal-7-using-panels&quot;&gt;Building Websites in Drupal 7 using Panels — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rxU-eWIL8vw-j_n87MMxQbgbnXK9HobWJiLI7toOmxw.jpg.jpg</video:thumbnail_loc><video:duration>186</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/panels-add-css-classes-main-region</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Panels: Add CSS Classes to the &quot;Main&quot; Region</video:title><video:description>In this tutorial, I will demonstrate how to add a wrapper div and a class around, and just outside, the Panels layout markup, using the Panels administrative console.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/building-websites-drupal-7-using-panels&quot;&gt;Building Websites in Drupal 7 using Panels — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/jOyYU68JkPbv9yCSWPfG0B0EOWAhGnApgqrRWDU-uM0.jpg.jpg</video:thumbnail_loc><video:duration>119</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/panels-add-css-classes-or-ids-panel-panes</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Panels: Add CSS Classes or IDs to Panel Panes</video:title><video:description>In this tutorial, I&#039;ll walk you through how to add a CSS class or ID to a panel pane using the Panels administrative console.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/building-websites-drupal-7-using-panels&quot;&gt;Building Websites in Drupal 7 using Panels — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/t_29BL6PLJFglukSg3rzhhjHQK66uCToeoRiQTHBASY.jpg.jpg</video:thumbnail_loc><video:duration>165</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/override-panel-pane-template-file</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Override Panel Pane Template File</video:title><video:description>The panel pane template file controls the markup for the panel pane container. When you place content into a panel region, it is wrapped by a container called the panel pane. To change this wrapper markup, you will need to copy the panels pane template file into your theme’s templates directory. Let’s walk through this process in this tutorial.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/building-websites-drupal-7-using-panels&quot;&gt;Building Websites in Drupal 7 using Panels — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yvTBvVhab4tMUcdvhCJ0p408Ml2QzLGrltTFacMXM7M.jpg.jpg</video:thumbnail_loc><video:duration>186</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/help-us-plan-2013</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/what-style-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is Style in Panels?</video:title><video:description>In this tutorial, we&#039;ll take a brief look at what Panels means by &quot;Style&quot; as applied to a region or panel, and I&#039;ll walk you through the settings form and how to change a style for a panel pane using the Panels administrative console.

For a more in-depth look at Panels Style Plugins, including how to create your own, check out these related tutorials:

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/series/customize-panels-styles-ctools-style-plugins&quot;&gt;Customize Panels Styles with CTools Style Plugins&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Styling Panel Panes with Stylizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/customize-panels-styles-ctools-style-plugins&quot;&gt;Customize Panels Styles with CTools Style Plugins&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/videos/styling-panel-panes-stylizer?p=1137&quot;&gt;Styling Panel Panes with Stylizer&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/ctools&quot;&gt;Chaos Tools Suite (CTools) — Drupal.org&lt;/a&gt;
&lt;a href=&quot;https://www.drupal.org/project/panels&quot;&gt;Panels — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/d06bWIcZVv4wDK6a4qDG_sptC1vkw4pONanw6i5ZJc0.jpg.jpg</video:thumbnail_loc><video:duration>189</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/recap-markup-panels</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Recap: Markup in Panels</video:title><video:description>In this lesson, I provide a recap of the Panels-related tutorials in this series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/series/building-websites-drupal-7-using-panels&quot;&gt;Building Websites in Drupal 7 using Panels — Drupalize.Me&lt;/a&gt;
&lt;a href=&quot;https://drupalize.me/series/customize-panels-styles-ctools-style-plugins&quot;&gt;Customize Panels Styles with CTools Style Plugins — Drupalize.Me&lt;/a&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/pNIJ_1LczOQJxZ4lQacMywfTJFC6IveBiQUC6mK9uQs.jpg.jpg</video:thumbnail_loc><video:duration>56</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-markup-display-suite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Markup in Display Suite</video:title><video:description>Display Suite is another popular module for handling the layout and display of content on a Drupal site. In this next set of tutorials, we&#039;ll take a look at how markup is affected in Drupal when using Display Suite.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KRosI7783b8-1_7UDGLoNytLrvpeSuPOCOI_76drKV0.jpg.jpg</video:thumbnail_loc><video:duration>52</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-provide-custom-layout</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Provide a Custom Layout</video:title><video:description>In this tutorial, I’ll show you how to create a custom layout to use in Display Suite. We’ll take a look at the instructions in Display Suite’s ds.api.php file to find out how to provide our own custom layout. In this process, we’ll take a shortcut and copy a layout from Display Suite into my custom theme and modify it. In the next tutorial, we’ll look at the drush command &lt;code&gt;ds-build&lt;/code&gt; which allows you to quickly scaffold a display suite custom layout in your module or theme.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/bfR4_AlrJUaahaAWF1ulHsrFqCSY4fPTfSwuvF72GVo.jpg.jpg</video:thumbnail_loc><video:duration>617</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-create-custom-layout-drush</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Create a Custom Layout with Drush</video:title><video:description>Now that we have gained an understanding of how to create a custom layout manually (in the previous tutorial), we’ll look at the drush command &lt;code&gt;ds-build&lt;/code&gt; which allows you to quickly scaffold a Display Suite custom layout in your module or theme.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Z2fVrf00wgBct-wTkzSMKIOHGPtl5bh49m1jfxHnthg.jpg.jpg</video:thumbnail_loc><video:duration>276</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-add-css-classes-regions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Add CSS Classes to Regions</video:title><video:description>In this tutorial, I will show you how to add a CSS class to apply to a region using Display Suite.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7Ux1x1wLrUEHCuqHKEKe2KvvmtABeXEqWFZ8VRDfYC8.jpg.jpg</video:thumbnail_loc><video:duration>151</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-add-css-classes-fields</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Add CSS Classes to Fields</video:title><video:description>In this tutorial, I will show you how you can add a class to the wrapper markup for a field using Display Suite, Display Suite Extras, and Display Suite&#039;s field templates.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gtFT6bjOfjUvM5Pkke1uHqvGQf8kDQNhmD5gA1ObByE.jpg.jpg</video:thumbnail_loc><video:duration>180</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-add-custom-html-wrappers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Add Custom HTML Wrappers</video:title><video:description>In this tutorial, I will demonstrate how you can change the HTML selectors of the regions and layout wrapper markup using Display Suite.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LGWqG21UZzx54vCChCNkMvYucM6PywkdJRc0QM_UuyY.jpg.jpg</video:thumbnail_loc><video:duration>130</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/recap-markup-display-suite</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Recap: Markup in Display Suite</video:title><video:description>In this series of tutorials on how markup is affected in Drupal when using Display Suite, I showed you:

&lt;ul&gt;
  &lt;li&gt;How to affect markup using Display Suite (DS)&lt;/li&gt;
  &lt;li&gt;How to create a custom layout to use in DS&lt;/li&gt;
  &lt;li&gt;How to add and utilize custom CSS classes in DS&lt;/li&gt;
  &lt;li&gt;How to configure custom markup wrappers&lt;/li&gt;
  &lt;li&gt;How to utilize Display Suite’s field templates UI to customize markup output on fields&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nUR-LqWcvpAZz4Z27bM-zY3ZiuE4TBG7ed11w08DEkU.jpg.jpg</video:thumbnail_loc><video:duration>38</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/display-suite-utilize-field-templates</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Display Suite: Utilize Field Templates</video:title><video:description>In this tutorial, I&#039;ll give you a tour of the field templates interface in Display Suite. I&#039;ll show you how to enable Display Suite field templates and walk you through how to customize the markup for each type of field template. I’ll also demonstrate how CSS classes can be applied to various components of field output using the Display Suite&#039;s &quot;Expert&quot; field template.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://www.drupal.org/project/ds&quot;&gt;Display Suite — Drupal.org&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2w6c6m2k8CawE8q-VOyd0kdj98QSWwPx7BMRKKG6cd8.jpg.jpg</video:thumbnail_loc><video:duration>433</video:duration><video:publication_date>2015-11-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-advanced-drush-hook-wrangling</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/watch-embedded-video</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Watch an Embedded Video</video:title><video:description>This brief video demonstrates how to use the embedded video feature within a tutorial on our site.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupalize.me/tutorial/use-drupalizeme-tutorial?p=2351&quot;&gt;Use a Drupalize.Me Tutorial&lt;/a&gt;</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/s84SdIc8lNQnbLLikBxsr9ILKwuGWC5xLz9TElp6abY.jpg.jpg</video:thumbnail_loc><video:duration>95</video:duration><video:publication_date>2015-11-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-drush-make-and-policy-files</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-free-community-videos-kickstart-your-year</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-coding-views-and-free-menu-lesson</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/naming-things-hard</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/were-hiring-sales-rep-drupalizeme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/attend-our-introduction-drupal-training-drupalcamp-london</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/user-guide/appendix</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/attributions</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/blocks-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/block-concept</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/block-create-custom</loc><lastmod>2024-01-11T15:58Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>8.2. Creating A Custom Block</video:title><video:description>How to create a custom block.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4HyF1l2RkuU_SkXsjt7riLE8-cNPuLNttRuFOSH_aco.jpg.jpg</video:thumbnail_loc><video:duration>95</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/block-place</loc><lastmod>2026-01-05T17:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>8.3. Placing a Block in a Region</video:title><video:description>How to place a block in a region.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TbTtf61BLnTZGFFuAXAYYwYujwDBINCF59ZTdI9rnRQ.jpg.jpg</video:thumbnail_loc><video:duration>144</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/user-guide/planning-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/block-regions</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/config-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-basic</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>4.2. Editing Basic Site Information</video:title><video:description>How to edit basic site information (site name, slogan, and default time zone).</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aLjCkl0qj8cK1gdWyVSug13DVqmb4oqt3wePBrf2YcE.jpg.jpg</video:thumbnail_loc><video:duration>140</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-install</loc><lastmod>2025-04-16T15:37Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>4.3. Installing a Module</video:title><video:description>How to install a core or contributed module, using the administrative interface or Drush.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/CRAkulk8zAEVyy6bnMcDW4SFqoz-qgVfWSj2AMo8zps.jpg.jpg</video:thumbnail_loc><video:duration>154</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-overview</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-theme</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>4.6. Configuring the Theme</video:title><video:description>How to edit a theme’s settings to update the color scheme and add a logo.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/E4GT_WknfZMEUdhN5PZdvvwKhRAhL3YJgOk0G3gXvcE.jpg.jpg</video:thumbnail_loc><video:duration>143</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-uninstall</loc><lastmod>2024-10-21T19:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>4.4. Uninstalling Unused Modules</video:title><video:description>How to uninstall modules to reduce overhead.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gWpv2ODKFyVc3Yvm9osBU5N5JwAw7u6aUOuizecNWy8.jpg.jpg</video:thumbnail_loc><video:duration>155</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/config-user</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>4.5. Configuring User Account Settings</video:title><video:description>How to change user account registration settings.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IT_WizlbUPa_70rkvE4xIiI99qdHtLxBcfSJaJ32UYU.jpg.jpg</video:thumbnail_loc><video:duration>134</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/new-series-deploying-your-code-beanstalk</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/user-guide/content-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/content-create</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>5.2. Creating a Content Item</video:title><video:description>How to create a content item for use as the home page.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/c-JbCxj7wEuMKFOWeGJY347MHCG7JGJ0HGiMDbIaya4.jpg.jpg</video:thumbnail_loc><video:duration>228</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/content-edit</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>5.3. Editing a Content Item</video:title><video:description>How to edit a content item.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xSDUAQ_1w6yzpafnve7fIOosM4KrjzbwtWwSC2Xq_4w.jpg.jpg</video:thumbnail_loc><video:duration>126</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/content-paths</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/preface</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/copyright</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/extend-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-config-versions</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>11.10. Synchronizing Configuration Versions</video:title><video:description>How to synchronize the configuration between a development and live site using the core Configuration Manager module.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DKaYaF3he4gbGVxzgt2lZFHUdU2YLzYTiptYU-68jW0.jpg.jpg</video:thumbnail_loc><video:duration>178</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-deploy</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>11.9. Deploying New Site Features</video:title><video:description>How to copy a view created in a local development site to a production site.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7xmkLNgZR3cg9dZssCUln9GfdXQaRV1QEoCIsIr01Rk.jpg.jpg</video:thumbnail_loc><video:duration>144</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-threesome-very-handy-modules</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-git</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-maintenance</loc><lastmod>2022-05-02T11:54Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>11.2. Enabling and Disabling Maintenance Mode</video:title><video:description>How to enable maintenance mode to set up a &quot;Site under maintenance&quot; message, and how to disable it.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4G1_B9-aFq3q7JAYegXgRdbkNAQpnXSuhC6eAb_f1eQ.jpg.jpg</video:thumbnail_loc><video:duration>181</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-manual-install</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>11.6. Manually Installing Module or Theme Files</video:title><video:description>How to manually install a module or theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PNMd-LaHHX3I8U_xKXaqKTijh-GsZI-PQjqAthsGkh0.jpg.jpg</video:thumbnail_loc><video:duration>198</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-module-find</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>11.1. Finding Modules</video:title><video:description>How to search and evaluate modules on Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/T-oirAn0-r8fJJTQqezWdqKR0DsmYKjlk02eUHaD-l4.jpg.jpg</video:thumbnail_loc><video:duration>259</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-module-install</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>11.3. Downloading and Installing a Module from Drupal.org</video:title><video:description>How to download and install a module from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kdkFlIG3heRIpvE-Hn9Q9-PRGM4-soC7ihRrXTUUyVc.jpg.jpg</video:thumbnail_loc><video:duration>228</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-theme-find</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>11.4. Finding Themes</video:title><video:description>How to use filters to search themes and evaluate them.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/WtowolrSG_CnXeTiJ3e9DxMAjamaU3AMfjWc71Y-I8Q.jpg.jpg</video:thumbnail_loc><video:duration>222</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/extend-theme-install</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>11.5. Downloading and Installing a Theme from Drupal.org</video:title><video:description>How to download and install a theme from Drupal.org.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BF9VYpB2xtj6eelf17RO1RQCn6CpXwXdcZYZkF3jyqQ.jpg.jpg</video:thumbnail_loc><video:duration>251</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/glossary</loc><lastmod>2024-07-16T20:35Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/installation-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-composer</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>3.6. Using Composer to Download and Update Files</video:title><video:description>How to use the Composer tool to manage the files in the core software and add-on modules and themes.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mMWM3EPJzge4JKWdMhXYHcZSXINtwTTosk0j3Bdmres.jpg.jpg</video:thumbnail_loc><video:duration>361</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-extend-views-bulk-operations-and-entity-attachments</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-decide</loc><lastmod>2025-10-14T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-dev-making</loc><lastmod>2026-04-06T12:31Z</lastmod><changefreq>weekly</changefreq><priority>0.9</priority><video:video><video:title>11.8. Making a Development Site</video:title><video:description>How to make a copy of a live site for development purposes.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/X31zO32VcYjthvgi2t56BYfrUI73WaFwgwbNv5zPDo4.jpg.jpg</video:thumbnail_loc><video:duration>242</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-dev-sites</loc><lastmod>2025-04-10T15:33Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-prepare</loc><lastmod>2025-04-10T20:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>3.1. Preparing to Install</video:title><video:description>How to download the core software and satisfy prerequisites for installation.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Lh0OYNFmYwz_YHsllgEQB7VnrS2N53J3qXiE2YAF7xw.jpg.jpg</video:thumbnail_loc><video:duration>299</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-requirements</loc><lastmod>2024-08-15T15:12Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-run</loc><lastmod>2025-04-10T15:33Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>3.7. Running the Interactive Installer</video:title><video:description>How to use the interactive installer to install the core software.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EFAJlN0r_vdy9wLVLgXMmNlJomiLCBLDbw_DesK_PCw.jpg.jpg</video:thumbnail_loc><video:duration>208</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-tools</loc><lastmod>2024-08-15T20:55Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/multilingual-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/language-add</loc><lastmod>2024-01-11T15:58Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>10.1. Adding a Language</video:title><video:description>How to add a language, install the necessary modules, and turn on the Language switcher block.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4U-8v-QLqAml20d83_1T58vhOThLhP-RoyOx1-56_cQ.jpg.jpg</video:thumbnail_loc><video:duration>150</video:duration><video:publication_date>2018-02-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/git-it-introduction-version-control-git-workshop</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/language-concept</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/language-config-translate</loc><lastmod>2024-11-07T20:35Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>10.4. Translating Configuration</video:title><video:description>How to translate field labels in a view, and other configuration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C3falh3s3ST8y3Aw-jfmPjKTkMzUIe6Yz1omNblGKA8.jpg.jpg</video:thumbnail_loc><video:duration>310</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/language-content-config</loc><lastmod>2024-01-11T15:58Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>10.2. Configuring Content Translation</video:title><video:description>How to configure content items to make them translatable.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KJxIXjzDKFQhxZnKju6VDODS6n70XuuIaLaRZ-D5Tgk.jpg.jpg</video:thumbnail_loc><video:duration>188</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/language-content-translate</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>10.3. Translating Content</video:title><video:description>How to translate a page into another language.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1Z0JN9uZBrd_RXdirgdIEInfjY49RaJdjIcR2mCY6M0.jpg.jpg</video:thumbnail_loc><video:duration>120</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/menu-concept</loc><lastmod>2022-12-02T19:09Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/menu-home</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>5.4. Designating a Front Page for your Site</video:title><video:description>How to configure a content item so that it gets displayed as the home page.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KJrZpfvYfjs8uqUmGh6hEzigKcqeEdg1vkEJkOqMuJc.jpg.jpg</video:thumbnail_loc><video:duration>90</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/menu-link-from-content</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>5.6. Adding a Page to the Navigation</video:title><video:description>How to add a page to the navigation.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NzkEipbe5oEF0yMzwXwxj1u-B_rLGuPWH1cnlAhDdY8.jpg.jpg</video:thumbnail_loc><video:duration>123</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/menu-reorder</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>5.7. Changing the Order of Navigation</video:title><video:description>How to reorder links in a menu.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NqQw-YUFeTv4iezylrea6NZRAW1nno5fNNA6H-Td5wg.jpg.jpg</video:thumbnail_loc><video:duration>89</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/planning-data-types</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/planning-layout</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>2.2. Planning Your Site Layout</video:title><video:description>How to plan the navigation and layout of a website (mobile and desktop browsers).</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AsjvcsbMVoZzpaTDKJAw5KA-GyA2a1UNCqSeFOo39Jo.jpg.jpg</video:thumbnail_loc><video:duration>243</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/lullabot-module-monday-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/planning-modular</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/planning-structure</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>2.5. Planning your Content Structure</video:title><video:description>How to plan a content structure that assigns content entity types to specific content on the website.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/FqWaiRy3L7EFL7B3uRnn3LKMNmKSyCDM5jSK91BFR2M.jpg.jpg</video:thumbnail_loc><video:duration>302</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/planning-workflow</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/preface-audience</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/preface-conventions</loc><lastmod>2024-07-16T20:35Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/preface-organization</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/preface-reporting</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/preface-scenario</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/prevent-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/prevent-backups</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/american-drupaler-london</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/prevent-cache-clear</loc><lastmod>2022-10-18T11:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>12.2. Clearing the Cache</video:title><video:description>How to clear the cache using Drush or the user interface.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8S1nUOyIKe0oXh5ISpuByTpEoh8x93XqKt2ftnsvuZg.jpg.jpg</video:thumbnail_loc><video:duration>115</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/prevent-cache</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/prevent-log</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/prevent-status</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/security-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-announce</loc><lastmod>2024-11-13T13:55Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>13.4. Keeping Track of Updates</video:title><video:description>How to secure a site by staying informed about the latest security updates.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KmkAmufPdUBOxr24cE9DCggHXi7nzRWepsBI-WJV2vE.jpg.jpg</video:thumbnail_loc><video:duration>158</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-concept</loc><lastmod>2022-03-17T12:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-cron-concept</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-cron</loc><lastmod>2024-04-22T20:02Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>13.2. Configuring Cron Maintenance Tasks</video:title><video:description>How to run cron maintenance tasks using the core Automated Cron module, or by running them from outside the site.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/lsdb5ogULf5SBiyKJgUtLdTkSvLCOINCWZ5LpvBnhWY.jpg.jpg</video:thumbnail_loc><video:duration>240</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-update-core</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>13.5. Updating the Core Software</video:title><video:description>How to update the core software using the administrative interface or Drush.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RO0OJbuE_zTy9JxoFn6SzxFRWYLX50HJ276NeglQLco.jpg.jpg</video:thumbnail_loc><video:duration>358</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-more-module-monday-lessons</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-update-module</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>13.6. Updating a Module</video:title><video:description>How to update a contributed module using Composer and the administrative interface for running the Database Updates script.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Qy7FM2yLGkcQMRK-5sVwcLcYRAEL7s8Fgxf17SPdnYY.jpg.jpg</video:thumbnail_loc><video:duration>236</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/security-update-theme</loc><lastmod>2024-08-20T20:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>13.7. Updating a Theme</video:title><video:description>How to update a contributed theme using Composer and the administrative interface for running the Database Updates script.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BkeQn2oajdspxLKv5VAYDGAljYRn-le9b4wXhYF-jII.jpg.jpg</video:thumbnail_loc><video:duration>176</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/user-guide/content-structure-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-adding-reference</loc><lastmod>2024-07-15T16:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>6.7. Adding a Reference Field</video:title><video:description>How to add a reference field that connects two content types.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2Ifa_CTAD7ywjwveAPnie33w70K_7lMuUbzUzx2FBZY.jpg.jpg</video:thumbnail_loc><video:duration>174</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-content-display</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.11. Changing Content Display</video:title><video:description>How to make content items more presentable.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Mem04ed3s_SCNjgDwn9Z1bX_BYuLOTHRDAo1HKs0cM0.jpg.jpg</video:thumbnail_loc><video:duration>221</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-content-type-delete</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.2. Deleting a Content Type</video:title><video:description>How to delete a content type that is not required for the site.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/anYXiPPC43F8tprv5j-5VD8lxI8b24cjQGjSM0Xffzk.jpg.jpg</video:thumbnail_loc><video:duration>85</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-content-type</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.1. Adding a Content Type</video:title><video:description>How to add and configure a new content type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/aCQtldJzXmJof-FEFEac84otP9OfE_k_sbMP6pZCnLs.jpg.jpg</video:thumbnail_loc><video:duration>347</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-fields</loc><lastmod>2024-08-15T20:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>6.3. Adding Basic Fields to a Content Type</video:title><video:description>How to add fields to a content type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/YA86qkJM4dR_k6k6FNyIYdarKsXfUiEul2n4ahAD_dM.jpg.jpg</video:thumbnail_loc><video:duration>353</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-form-editing</loc><lastmod>2022-04-29T18:23Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.9. Changing Content Entry Forms</video:title><video:description>How to edit a content entry form.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zecED2431Zy30PxKq1LsQk_Jq199_D-hMPaavERMV7c.jpg.jpg</video:thumbnail_loc><video:duration>144</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-image-responsive</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-image-style-create</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.13. Setting Up an Image Style</video:title><video:description>How to add an image style to reformat an image.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kp_kUeRQy-YTZs_ZgWG4a-3VM3upYI2iHpIOO33iwkE.jpg.jpg</video:thumbnail_loc><video:duration>205</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-image-styles</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-reference-fields</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-taxonomy-setup</loc><lastmod>2024-07-15T16:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>6.6. Setting Up a Taxonomy</video:title><video:description>How to create a taxonomy vocabulary and add it as a field to a content type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Xc5noN0m-9fkdfa9zMjp3r9Gub1R3f64hC_x52qrL-0.jpg.jpg</video:thumbnail_loc><video:duration>256</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-taxonomy</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-text-format-config</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>6.16. Configuring Text Formats and Editors</video:title><video:description>How to make a change to a text format and its editor configuration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/CtGXf6lCC9Gppzz4sibIS1uszAsOU9_M4_aMQKY5X4Y.jpg.jpg</video:thumbnail_loc><video:duration>169</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-text-formats</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-view-modes</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/structure-widgets</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/thoughts-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/new-series-introduction-git</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/thoughts-connecting</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/thoughts-learn-more</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/thoughts-support</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/understanding-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-data</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-distributions</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-drupal</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-gpl</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-modules</loc><lastmod>2025-12-02T17:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-project</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/two-essential-workshops-drupalcon-portland</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/understanding-themes</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/user-guide/user-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-admin-account</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-concept</loc><lastmod>2026-01-05T17:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-content</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>7.7. Assigning Authors to Content</video:title><video:description>How to assign authorship of content items to a user account.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/affIdN9m2aFaxOpI0mGk-iduoAxeOo10ct3e9GLTnRY.jpg.jpg</video:thumbnail_loc><video:duration>135</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-new-role</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>7.3. Creating a Role</video:title><video:description>How to create a new role.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3UL-iT4vKQ1_yCcsZSRHBMDF25F3crB8koCsAXoufN0.jpg.jpg</video:thumbnail_loc><video:duration>76</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-new-user</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>7.4. Creating a User Account</video:title><video:description>How to create a user account.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/cxQdiwu39QHLACd2ZllBvgR4j8CemWMsbZxn_LaCUqU.jpg.jpg</video:thumbnail_loc><video:duration>224</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-permissions</loc><lastmod>2023-02-01T22:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>7.5. Assigning Permissions to a Role</video:title><video:description>How to assign a permission to a role.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mzXEPkWLyF8n3IQtMZPI5bNP9pNWe9PJbu2Q7k0uuFw.jpg.jpg</video:thumbnail_loc><video:duration>258</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/user-roles</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>7.6. Changing a User’s Roles</video:title><video:description>How to change or add roles for a user.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yjxhpr_Lb8uPl-26WPGj_hiu-_GlB9yzUifb6rXJg7g.jpg.jpg</video:thumbnail_loc><video:duration>136</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/user-guide/views-chapter</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>hourly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/release-day-git-crash-course</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/views-block</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>9.5. Adding a Block Display to a View</video:title><video:description>How to add a block display to a view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/n_fGQ0PxizMj0GHixQ17hreMF-djwAPlHqWnuKTUVAI.jpg.jpg</video:thumbnail_loc><video:duration>261</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/views-concept</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/views-create</loc><lastmod>2026-01-05T17:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>9.3. Creating a Content List View</video:title><video:description>How to create a content list view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DpQr9WmvJPhZVlOAagoTh0ZTMwSEKRYz9lPRp-veXcI.jpg.jpg</video:thumbnail_loc><video:duration>249</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/views-duplicate</loc><lastmod>2024-11-13T13:49Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>9.4. Duplicating a View</video:title><video:description>How to create a new page by duplicating a view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/dBM6uFnlabXnb3XuyeAErKt1oNKqSkub1iEhFGMjiqk.jpg.jpg</video:thumbnail_loc><video:duration>253</video:duration><video:publication_date>2018-02-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/user-guide/views-parts</loc><lastmod>2022-01-07T16:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/_index</loc><lastmod>2026-04-06T12:39Z</lastmod><changefreq>weekly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/coding-standards-drupal</loc><lastmod>2024-11-08T19:53Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-code-standards-documentation</loc><lastmod>2024-05-09T18:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-code-standards-formatting</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-code-standards-t-function</loc><lastmod>2024-07-19T19:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/how-implement-drupal-code-standards</loc><lastmod>2024-07-17T12:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-code-standards-object-oriented-programming</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/using-twig-drupal-templates</loc><lastmod>2024-11-08T18:55Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-code-standards-twig</loc><lastmod>2023-01-12T21:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-drupal-code-standards</loc><lastmod>2023-08-11T00:53Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Drupal Code Standards?</video:title><video:description>Before you dive into using coding standards it makes sense to understand exactly what they are and why they’re important, generally and specifically in the Drupal community. In this tutorial we will look at:

- What coding standards are
- Why following coding standards is a good idea
- Where coding standards come from

By the end of this tutorial you&#039;ll have a better understanding of what coding standards are, and why you should be adhering to them when you write code.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8JHSHjq0_bi2yAyBfvxnk65CuoArEgYpDGZtMN87W1k.jpg.jpg</video:thumbnail_loc><video:duration>1140</video:duration><video:publication_date>2017-08-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/composer-drupal-users</loc><lastmod>2024-11-08T19:38Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/anatomy-composer-project</loc><lastmod>2025-12-03T23:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-composer-and-try-it-out</loc><lastmod>2024-06-18T18:30Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/deploy-hosting-environment</loc><lastmod>2021-09-22T19:35Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/composer-configuration-drupal</loc><lastmod>2025-12-04T00:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/troubleshoot-common-composer-issues</loc><lastmod>2023-07-27T21:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-composer-your-drupal-project</loc><lastmod>2023-08-03T19:32Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/specify-version-composer-package</loc><lastmod>2023-11-09T13:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Specify the Version of a Composer Package</video:title><video:description>Composer packages use semantic versioning to allow you to differentiate among different releases of a project. Knowing how this works, and how to specify a version constraint when requiring a Composer package are an important part of using Composer.

In this tutorial we&#039;ll:

- Get an overview of semantic versioning
- Look at how Composer version constraints work and related best practices
- Learn how to define Composer package requirements such that you can quickly update all of your application&#039;s dependencies without breaking existing functionality

By the end of this tutorial, you should understand how semantic versioning relates to Composer, and how to specify version constraints for packages in your Composer project.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/V5Vt0yr2qvVNSlROadadjoqex_rLAXRkiiWA3st422g.jpg.jpg</video:thumbnail_loc><video:duration>627</video:duration><video:publication_date>2018-02-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-composer</loc><lastmod>2021-06-03T02:10Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/configuration-api-drupal</loc><lastmod>2025-12-03T18:59Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/add-properties-configuration-entity-type</loc><lastmod>2025-11-20T00:38Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/configuration-management-drupal</loc><lastmod>2025-11-21T00:27Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/automate-deployment-configuration</loc><lastmod>2023-07-27T21:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-more-git-and-700-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/clone-your-drupal-site-drush-and-git</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Clone of Your Drupal Site with Drush and Git</video:title><video:description>Before you can get started synchronizing configuration between instances of your site, you&#039;ll need to create a new instance or &quot;clone&quot; of your Drupal site.

By the end of this tutorial, you should know:

- Why it&#039;s necessary to clone your site if you want to manage configuration between environments
- How to find your site&#039;s universally unique identifier (UUID)
- What to consider when setting up a directory structure for your project
- How to clone a Drupal site</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IO4lWjsB-I-pLF0lvvSQ6yVIcioNLp2B9rEho3aqUZg.jpg.jpg</video:thumbnail_loc><video:duration>288</video:duration><video:publication_date>2016-11-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/configuration-interdependencies</loc><lastmod>2023-07-27T21:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-and-use-configuration-split-module</loc><lastmod>2023-07-27T21:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/configuration-data-types</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Configuration Data Types</video:title><video:description>In this tutorial, you&#039;ll learn about the two types of configuration data: simple configuration and configuration entities. By the end of this tutorial, you should have a better understanding of which type of configuration to use in your module.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qJ60KaHuFH3VodFpcj4XIkE6i2iC9Wj_rMnsqhy2QqM.jpg.jpg</video:thumbnail_loc><video:duration>207</video:duration><video:publication_date>2017-01-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-configuration-entity-type</loc><lastmod>2025-11-14T02:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-settings-form-module</loc><lastmod>2025-11-05T21:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/provide-initial-settings-simple-configuration</loc><lastmod>2025-11-05T03:12Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/configuration-sync-directory-setup</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/clone-drupal-site-using-web-based-tools</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Clone a Drupal Site using Web-Based Tools</video:title><video:description>The configuration system in Drupal was designed to manage and sync configuration between instances of a Drupal site. So before configuration management can be useful, we must have another instance—or clone—of our Drupal site. In this lesson, you will learn:

- Why cloning a Drupal site is necessary in order to manage configuration
- How to clone a Drupal site using web-based tools

If you prefer using web-based or GUI tools [rather than command line tools such as Drush and Git](/tutorial/clone-your-drupal-site-drush-and-git), then this lesson is for you.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gHvrKHm9vRXkZOLP78YT_ASsXfpk0yNZedMThIRRDIs.jpg.jpg</video:thumbnail_loc><video:duration>193</video:duration><video:publication_date>2015-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-override-configuration</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>How to Override Configuration</video:title><video:description>Not every environment or copy of a site you may be working on will be created equally. You may want to enable logging on a development site or need to use different API keys depending on the environment. But you also need to make sure that your instance-specific configuration overrides don&#039;t make it into the database, mistakenly get exported, or compromise security.

In this tutorial, you will learn how to:

- Override the global `$config` array in _settings.php_ (or _settings.local.php_)
- Retrieve overridden (immutable) configuration (read-only mode)
- Retrieve original (mutable) configuration for updating (read/write mode)
- Set dynamic values for configuration instead of overriding values</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/oN8hDmPHmlsNFSMeOeYwF0AlGfIjel14PwsGr6xiqRQ.jpg.jpg</video:thumbnail_loc><video:duration>513</video:duration><video:publication_date>2015-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-keeping-git-clean-and-working-remote-repos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/default-configuration-module</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Default Configuration in a Module</video:title><video:description>When you create a module for Drupal, it can be useful to provide default configuration. This can be settings for a form, the placement of a block, or something more complex like the default image styles provided by the Image module in core. A module can provide default configuration for simple configuration or configuration entities.

In this tutorial, we will cover:

- Possible locations for default configuration
- What happens with configuration when a module is installed or uninstalled
- Managing dependencies in configuration
- Where to find examples of default configuration</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5bZVNoqb_KuA6KVj470GQDLwwhEmXB6MSLVOKismP-k.jpg.jpg</video:thumbnail_loc><video:duration>358</video:duration><video:publication_date>2015-12-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-configuration-management-drupal</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/live-vs-local-configuration-management</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/inspect-configuration-drush</loc><lastmod>2023-07-27T21:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/reimport-default-configuration-during-development</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-simple-configuration-form</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Use Simple Configuration in a Form</video:title><video:description>Now that we have some default simple configuration stored in a settings YAML file, let&#039;s utilize it in a form that our site administrators can use to update those values. We&#039;ll make use of some services and methods in Drupal&#039;s Configuration API in order to retrieve, update, and save simple configuration values with a form.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xStoarsk5CuFVmIFZ7-CFECKYBWRC1uazO2OxWKXquw.jpg.jpg</video:thumbnail_loc><video:duration>313</video:duration><video:publication_date>2016-11-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/synchronize-configuration-ui</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Synchronize Configuration with the UI</video:title><video:description>The Configuration Manager module gives you as an administrator the ability to import and export configuration items on different instances of a Drupal site using a graphical user interface.  In this tutorial, we&#039;ll take a tour of the Configuration Manager and the administrative interface it provides.

By the end of this lesson you will be able to:

- Access administrative pages for Import, Export, and Synchronize
- Find and configure permissions for Configuration Manager
- Identify the 3 primary actions of configuration management and how to perform them using the UI</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BU9kRgIFpd8LCAAgQHjoTTUG-CKqtaIQijA9PM6Bqqo.jpg.jpg</video:thumbnail_loc><video:duration>235</video:duration><video:publication_date>2016-11-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/synchronize-configuration-drush</loc><lastmod>2025-11-22T01:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-configuration-entities-modules-settings-form</loc><lastmod>2025-12-11T17:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/content-moderation-and-workflows-drupal</loc><lastmod>2024-11-08T19:36Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/create-custom-workflow</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Custom Workflow</video:title><video:description>The real power of the Workflows module is the fact that you can define your own custom workflows. Creating a new custom workflow requires adding a new workflow, and configuring the states and transitions that workflow will use.

In this tutorial we&#039;ll:

- Create and configure a new workflow
- Define and configure a set of states and transitions for the workflow
- Understand some best practices to keep in mind when defining workflows

By the end of this tutorial you&#039;ll be able to define your own custom workflows for any use-case.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/O9FHsqLzDZFK64hwcHrfDlUgzmlfa-Lv3HSTl8kIsV0.jpg.jpg</video:thumbnail_loc><video:duration>390</video:duration><video:publication_date>2019-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-view-moderated-content</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a View of Moderated Content</video:title><video:description>The Content Moderation module exposes data about a content item&#039;s moderation state to Views. That allows us to use that information when building custom views. The data includes a moderation state field, filter, and a relationship to the moderation state entity.

In this tutorial we&#039;ll:

- Build a new view that uses the moderation state field and lists all revisions for a content item
- Display that view as a block which can be shown on any content page

By the end of this tutorial you&#039;ll know how to use the moderation state field in a view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Ckb-V5XYu1P9JINPnEXRc9Cyx7OIqTbQzoSDzduTO_I.jpg.jpg</video:thumbnail_loc><video:duration>464</video:duration><video:publication_date>2019-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/manage-moderated-content</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Manage Moderated Content</video:title><video:description>The Content Moderation module allows you to apply an editorial workflow to your content. Doing so changes some of the ways that content managers will mark an item as published, archive an item, or create new revisions.

In this tutorial we&#039;ll:

- Look at the changes to the content editing form that happen when you apply an editorial workflow
- Learn how to edit a piece of content to change its state, and transition it through the editorial workflow

By the end of this tutorial you&#039;ll know how to create, and manage, content in an editorial workflow.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/qvejycYhaBt8TKXFfJ_gn5fc87uSjQsI2v5QSTkfzFU.jpg.jpg</video:thumbnail_loc><video:duration>398</video:duration><video:publication_date>2019-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/plan-editorial-workflow</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/apply-editorial-workflow-content-type</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Apply an Editorial Workflow to a Content Type</video:title><video:description>In order to enforce that an editorial workflow is applied to a specific content type you need to update the workflow&#039;s configuration. Then, depending on your needs, you may also need to configure new user roles, giving them permission to transition a content item from one state to another.

This process works for any Content Moderation type workflow -- including the _Editorial_ workflow that Drupal provides and any [custom workflows](/tutorial/create-custom-workflow) you&#039;ve created.

In this tutorial we&#039;ll:

- Update a workflow so that its rules are applied to a content type
- Review the list of permissions provided by a workflow and see how we can set things up to restrict certain users to only perform specific transitions

By the end of this tutorial you will be able to configure a workflow so that it applies to one or more content types, and configure permissions so only users in a specific role can transition content items from one state to another.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/p_9DWf_GPhdWCIBZI1XsDBKjcW_hKBFvjiuMS6eHITQ.jpg.jpg</video:thumbnail_loc><video:duration>227</video:duration><video:publication_date>2019-11-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/moderated-content-and-views</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-revisions</loc><lastmod>2023-07-28T19:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/take-your-design-theme-drupalcon-portland</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-workflows-and-content-moderation</loc><lastmod>2024-10-18T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/building-solid-api</loc><lastmod>2023-07-28T19:30Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/decoupling-explained</loc><lastmod>2024-03-27T20:03Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/decoupling-right-choice</loc><lastmod>2023-08-03T19:32Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/hosting-implications-and-considerations</loc><lastmod>2025-11-11T16:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/best-practice-drupal-development</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/run-container-interactively</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/new-series-working-entities-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/what-container</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-image</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-detached-container</loc><lastmod>2024-12-27T20:29Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/run-sets-containers</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-compose-file</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/start-stop-and-list-container-sets</loc><lastmod>2024-12-27T20:29Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/get-data-containers</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-bind-volumes</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-environment-variables</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/expose-ports</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-creating-custom-entity</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/import-and-export-databases-container</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/docker-hub</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/list-delete-and-update-images</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-tags-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/run-drupal-docker</loc><lastmod>2025-11-08T01:30Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/custom-docker-images</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-files-image</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-applications-container</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/application-configuration</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-team-has-grown</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/default-applications-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/custom-entrypoints</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/customize-existing-image</loc><lastmod>2025-12-03T19:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/container-security</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/dockerize-existing-project</loc><lastmod>2024-05-30T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-docker-specific-settings-file</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/centralize-docker-configuration-environment-file</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/multi-client-workflow-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/dockerize-multisite-drupal-install</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-entity-admin-ui-and-fields</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-external-services-docker</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/share-containers-your-team</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-automatic-build-hub</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/configure-and-use-hub-tags</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/run-self-hosted-container-registry</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/docker-production</loc><lastmod>2023-07-28T23:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/hands-exercises-movie-project</loc><lastmod>2020-03-06T21:28Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-install-drupal-and-modules</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-design-content-type</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-content-type</loc><lastmod>2023-08-03T19:32Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-17-funding-drupal-core-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-build-view-and-use-image-styles</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-use-views-relationships</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-custom-layout-panels</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-use-quicktabs-panel-pages</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-projects-create-static-pages-menus-and-webforms</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-build-homepage</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-configure-url-aliases-and-user-permissions</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-configure-search</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-custom-theme</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-css-default-markup</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-entities-views-and-better-ui</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-override-template-files</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-use-jquery-extend-functionality</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-use-responsive-css</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-alter-node-custom-module</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-change-page-programmatically</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-form</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-validate-form</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-node-custom-form</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-fetch-and-attach-image-file</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-taxonomy-terms-programmatically</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/phptek-conference-next-week</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-import-data-site-update</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-drush-command</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-administration-form</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-add-user-permissions</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-manage-configuration-changes</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-install-wysiwyg-editor</loc><lastmod>2023-05-24T00:36Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-analyze-site-performance</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-database-tables-and-alter-forms</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-autocomplete-fields</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-add-form-data-custom-database-tables</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-portland-coming-big-sale</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-render-array-and-theme-functions</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-integrate-ajax-functionality</loc><lastmod>2023-05-24T00:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/movie-project-create-custom-blocks</loc><lastmod>2023-10-11T17:50Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/learn-drush-drupal-shell</loc><lastmod>2024-11-08T19:38Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-existing-drush-command</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drush-speed-common-drupal-development-tasks</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/enable-update-and-manage-modules-and-themes-drush</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drush-common-site-and-environment-management-tasks</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-drush-0</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-command-line-arguments-custom-drush-command</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-entity-series</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/add-options-custom-drush-command</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drush-site-aliases</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drush-configuration</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-custom-drush-command</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-creating-your-own-custom-drush-commands</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-custom-drush-code-generator</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drush-deploy-drupal-updates</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/entity-api-drupal</loc><lastmod>2025-12-08T18:05Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/scaffold-custom-content-entity-type-drush-generators</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drushs-output-formatting-system</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-18-mysterious-drupal-entity</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/develop-drupal-modules-faster-drush-code-generators</loc><lastmod>2025-12-03T19:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drush-hooks</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/logging-and-error-handling-drush-commands</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-interactive-prompt-drush-command</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/automating-drupal-tasks-drush-and-bash-scripts</loc><lastmod>2023-08-02T21:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-site-wide-custom-drush-commands</loc><lastmod>2024-10-24T22:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-custom-content-entity</loc><lastmod>2025-11-12T02:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/entity-access-control</loc><lastmod>2025-11-12T01:51Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/entity-api-implementation-basics</loc><lastmod>2025-12-08T18:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/find-data-entityquery</loc><lastmod>2024-09-04T22:42Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/community-tools-curriculum-and-dreditor-video</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/entity-api-overview</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/entity-validation-api</loc><lastmod>2024-10-18T20:56Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/entity-api-hooks</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/modify-existing-entities-alter-hooks</loc><lastmod>2025-11-12T02:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/typed-data-api</loc><lastmod>2025-11-12T02:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/working-entity-crud</loc><lastmod>2024-10-25T01:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-field-formatter-plugin</loc><lastmod>2024-10-18T21:17Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/field-api-drupal</loc><lastmod>2024-11-08T20:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/field-api-overview</loc><lastmod>2024-10-18T21:20Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/field-api-hooks</loc><lastmod>2024-10-18T21:17Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/field-formatters</loc><lastmod>2024-10-18T21:17Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/field-types</loc><lastmod>2025-12-03T19:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/field-widgets</loc><lastmod>2025-12-02T23:12Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-demo-site-theming-practice</loc><lastmod>2024-07-18T17:23Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/exercise-create-new-theme</loc><lastmod>2025-08-14T20:25Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/exercise-add-asset-library</loc><lastmod>2024-07-18T17:23Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Add an Asset Library</video:title><video:description>To add CSS or JavaScript files or libraries to your site, you can attach them as asset libraries in your theme. In this exercise, you&#039;ll create 2 asset libraries and attach them globally via your theme&#039;s info file. In this tutorial, we&#039;ll pull in the CSS and JavaScript from the popular Bootstrap framework so that we can make use of its layout utility classes later on. We&#039;ll also add a custom CSS file that contains global styles for our site, like setting the page background color.

If you want to try and complete this on your own first you&#039;ll need to:

- Add the [Bootstrap](https://getbootstrap.com) CSS and JavaScript files to your theme.
- Define an asset library using a _THEMENAME.libraries.yml_ file in your theme.
- Tell Drupal to attach your asset library so that the CSS and JavaScript files it represents are included in the page.

Once that&#039;s done your site won&#039;t look all that different. But if you view the page source, or look closely, you should see that the Bootstrap files are included along with any CSS rules you placed into your custom style sheet.

**Note:** Since this course is focused on teaching the Drupal aspects of theme development, and not on writing CSS, we&#039;re using the Bootstrap CSS. Feel free to use the framework or library of your choice if you don&#039;t want to use Bootstrap.

You should try to complete the exercise steps on your own and use the video to help guide you if you get stuck. 

At the end of this exercise, you&#039;ll find a video walk-through of the solution.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TEcX-dQZQbU1-7bfKMaZutL_Z9wz0RkttyEyeaxJXHs.jpg.jpg</video:thumbnail_loc><video:duration>390</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-configure-your-environment-theme-development</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Configure Your Environment for Theme Development</video:title><video:description>Drupal has a few handy settings you can tweak to make developing themes a little more intuitive and a lot more awesome. In this tutorial, we&#039;ll practice manually setting up our environment for theme development by:

- Disabling some caches
- Turning off CSS and JS aggregation
- Turning on the Twig debug service

By the end of this tutorial, you&#039;ll have practiced setting up your environment for theme development.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Gtmz8p7_wKApPzwajpFFHHTFvhvJcoSJX8AEggEoAvE.jpg.jpg</video:thumbnail_loc><video:duration>544</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-override-main-page-template</loc><lastmod>2024-07-18T17:23Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Override the Main Page Template</video:title><video:description>In order to change Drupal&#039;s default markup you need to override template files. The _page template_ controls the overall layout of your theme, including the placement of regions. You should practice the exercise following the written instructions below. Use the video walk-through to help if you get stuck.

In this exercise, we&#039;ll:

- Override the currently used _page.html.twig_ template file.
- Modify the content of the file to include the regions defined in the theme&#039;s _.info.yml_ file.
- Wrap the regions in the page template file with HTML markup using CSS classes from Bootstrap to achieve the example layout.

By the end of this tutorial, you&#039;ll gain practice creating a custom layout in a page template file.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zoIxQWIE0L7JCg2mWsVy8cuGMHtAJEh02ANo0Q4Qnhw.jpg.jpg</video:thumbnail_loc><video:duration>578</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-override-node-template</loc><lastmod>2024-07-18T17:23Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Override the Node Template</video:title><video:description>The available dynamic tokens or _variables_ vary from template to template. Each page is built from a set of templates. 

In this exercise, we&#039;ll:

- Override and name the _node template_ file so that it will only affect _Article_ nodes on our Drupal site.
- Inspect the available variables.
- Customize the markup.
- Use the Twig filter `without`.

We recommend that you try to work through the exercise yourself, and refer to the video if you need help.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/VpG6oyCeXiKeXaD5AJ3wjZTrjglmqjqIKyBp-YPdg3M.jpg.jpg</video:thumbnail_loc><video:duration>327</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-override-main-menu-template</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Override the Main Menu Template</video:title><video:description>In this exercise, we&#039;ll practice theming by overriding the _main menu template_. We&#039;ll:

- Override and rename the main menu template so that it will only affect the main menu component of our Drupal site.
- Add Bootstrap classes from the _base nav_ component into our overridden main menu template file.
- Add CSS classes to HTML selectors using `attributes.addClass()` and `set` methods.

We recommend that you work on the exercise steps below first. You can refer to the video if you need some help.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-tJB-hNyq1477WCt1dG3k3XNkIfaE3Uyipt7UDmPVt0.jpg.jpg</video:thumbnail_loc><video:duration>364</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-override-image-field-template</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Override the Image Field Template</video:title><video:description>In this exercise, we&#039;ll continue our template overriding practice by overriding the _image field template_. We&#039;ll consult the Bootstrap documentation and add a responsive image class that will apply to any images uploaded by a user to the `field_image` field. Once again, we&#039;ll add this class to the `classes` array in the `set` Twig tag. You should work on the exercise steps below first, and you can refer to the video if you need some help.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/GV-p82x4_SRXWUqTqOiNRQrjwiF8G29Lf-YBO-hN6rc.jpg.jpg</video:thumbnail_loc><video:duration>218</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/podcast-episode-19-building-lullabotcom</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/exercise-use-t-filter-template</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Use the t Filter in a Template</video:title><video:description>In this exercise, we&#039;ll practice using the `t` filter in a Twig template. As a best practice, all hard-coded text in a template should be translatable. Simple text (containing no dynamic tokens) can be passed through the `t` filter to achieve this objective. Along the way, we&#039;ll also use a basic conditional `if` statement with Twig. We recommend that you try following the exercise&#039;s steps first, and refer to the video if you need help.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/LrWhlnhzt0c-4OqQvgS49xk4uJ2UG4DWIO33PO4-77Q.jpg.jpg</video:thumbnail_loc><video:duration>143</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exercise-preprocess-functions</loc><lastmod>2024-07-18T17:23Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Exercise: Preprocess Functions</video:title><video:description>Preprocess functions allow you to change existing variables, or add new variables, for a template file using PHP code. In this exercise, you&#039;ll:

- Define a PHP function that implements a preprocess hook
- Create a new variable named `{{ today }}` that contains the current date and gets passed to the _page.html.twig_ template file.

We recommend that you try the exercise&#039;s steps first, and refer to the video if you need help.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gXhsuYWpKNcI0rV6Ycla1F_eyZOhJ19j8OVdnm-kJuY.jpg.jpg</video:thumbnail_loc><video:duration>423</video:duration><video:publication_date>2019-03-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/layout-builder-drupal</loc><lastmod>2024-11-08T19:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/comparison-layout-building-approaches-drupal</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/dynamic-layout-plugins-drupals-layout-builder</loc><lastmod>2024-10-18T21:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-flexible-layout-content-type</loc><lastmod>2024-11-23T01:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Create a Flexible Layout for a Content Type</video:title><video:description>A new favorite page-building and design module in Drupal&#039;s core software, Layout Builder makes it possible to create content-type-specific layouts. All nodes of the associated content type will display their content using the defined layout. This allows site builders to display a page&#039;s content in two columns, or three, or two columns with a full-width banner image, etc. Then you can place the content type&#039;s fields and Drupal blocks into the sections of the defined layout, all via the Drupal UI.

In this tutorial we&#039;ll:

- Enable the Drupal _Layout Builder_ and _Layout Discover_ modules
- Create a new two-column _flexible_ layout via the user interface
- Update the Basic page content type so that all nodes use the new two-column layout

By the end of this tutorial you should know how to create a new _flexible_ layout, and apply it to one or more content types.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XEbPNKIw0N1cEcriY6PrMXGt8tJUTVMkgbsWoh2pUKs.jpg.jpg</video:thumbnail_loc><video:duration>361</video:duration><video:publication_date>2020-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/limit-blocks-available-layout-builder-block-list-override</loc><lastmod>2022-03-16T16:41Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Limit Blocks Available in Layout Builder with Block List Override</video:title><video:description>When building with Layout Builder, the list of blocks available for a site administrator to place in a layout can grow and become overwhelming to navigate. This is especially true when you&#039;ve got a lot of different modules enabled, as each can add new blocks. As well, complex configurations may require site admins to create more and more custom blocks. Some blocks, like certain Views, or default core blocks like &quot;Who&#039;s online&quot;, are not meant to be used within the Layout Builder. These blocks can clutter the UI and also impact the performance of Layout Builder UI. The contributed module [Block List Override](https://www.drupal.org/project/block_list_override) is designed to help solve this problem.

In this tutorial we&#039;ll:

- Learn what the Block List Override module does
- Install and configure the module to improve the user experience when creating layouts

By the end of this tutorial you should know how to use the Block List Override module to improve the UX of the Layout Builder interface.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/hwzrVhd13tCKASmc1rWfScNlDK1eA9XHhxhN6Z08pwI.jpg.jpg</video:thumbnail_loc><video:duration>238</video:duration><video:publication_date>2020-07-07</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/define-custom-layouts-module-or-theme</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/build-dynamic-custom-layouts-derivatives</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/adding-asset-libraries-custom-layouts</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-layout-builder-modal-when-creating-custom-blocks</loc><lastmod>2021-02-17T20:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Layout Builder Modal When Creating Custom Blocks</video:title><video:description>One of the biggest UX problems with the current Layout Builder UI in core is that the control panel is often too narrow. This is especially noticeable when creating inline blocks, and working with WYSIWYG fields. The contributed [Layout Builder Modal module](https://www.drupal.org/project/layout_builder_modal) is one solution to address this problem. It moves the UI for creating, and editing, custom blocks in a Layout into a wider modal window.

In this tutorial we&#039;ll:

- Install the Layout Builder Modal module
- Demonstrate how it can be used to improve the UX of managing custom blocks in Layout Builder

By the end of this tutorial you should know what the Layout Builder Modal module does, and determine if it&#039;s useful for your project.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-C2gEvBbzq6-1tVgRj1dCeBh3YKCPcOgFLJk-mUTniA.jpg.jpg</video:thumbnail_loc><video:duration>195</video:duration><video:publication_date>2020-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-layout-builder</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-layout-builder-restrictions-configure-available-layouts-and-blocks</loc><lastmod>2021-02-17T20:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Layout Builder Restrictions to Configure Available Layouts and Blocks</video:title><video:description>The [Layout Builder Restrictions](https://www.drupal.org/project/layout_builder_restrictions) module allows you to configure which layouts, and which blocks, should be available in the Layout Builder UI. This helps improve the user experience by removing blocks that you don&#039;t want someone to place into a layout. It also restricts which layouts are available for a content type. For example, you may allow an editor to change the layout for a blog page but restrict them to choosing between 1- or 2-column layouts. Yet, you can still provide a 3-column layout option for use in other scenarios.

In this tutorial we&#039;ll:

- Install the Layout Builder Restrictions module
- Learn how to curate the list of layouts for use on a per-content type basis
- Restrict the list of blocks available for placement via Layout Builder&#039;s UI

By the end of this tutorial you&#039;ll know how to use the Layout Builder Restrictions module to curate the list of layout and block options available to editors in the Layout Builder UI.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Yca5u6DN43HXy5nquKGqU2QNZYj6j-vng40-7DefaZY.jpg.jpg</video:thumbnail_loc><video:duration>316</video:duration><video:publication_date>2020-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-create-layout-configurable-settings-drupals-layout-builder</loc><lastmod>2024-10-18T21:48Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/change-layout-page-basis</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Change the Layout on a Per-Page Basis</video:title><video:description>The Layout Builder module allows editors to create flexible layouts per content type, and per node. When configured to allow per-node layout customization, each node inherits the base layout for the content type. But editors can choose to further customize the layout on a node by node basis. This allows them to tailor the layout to better suit the specific node, and to have presentation flexibility that can be managed through Drupal&#039;s UI instead of in code. This also makes it harder to enforce design consistency, and future updates to the content type specific layout won&#039;t be applied to pages using a node specific layout.

In this tutorial we&#039;ll:

- Learn how to enable node-specific layouts
- Create a custom layout that is used on only one page

By the end of this tutorial you&#039;ll understand how to configure per-node-specific layouts.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tbx9lGpn8KkWbvDApZ7XOVw4blc_-aYo3rDsjgYk8ns.jpg.jpg</video:thumbnail_loc><video:duration>255</video:duration><video:publication_date>2020-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-add-custom-styles-drupals-layout-builder</loc><lastmod>2024-08-13T17:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/layout-builder-design-patterns</loc><lastmod>2022-07-11T16:14Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/tips-theming-layout-builder</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-layout-builder-view-modes-pattern</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Implement the Layout Builder View Modes Pattern</video:title><video:description>We recommend planning ahead when using Layout Builder, documenting how you intend to use Layout Builder for your specific use-case, and then doing your best to stick to it. One approach that we&#039;ve found works well for sites that need a maximum amount of flexibility (and have the resources to do the upfront planning and theming required) is using entity view modes.

This approach is similar in concept to component based design systems, where you do the initial work of creating a set of components that all work well together up-front, and then allow them to be mixed and matched in whatever way is necessary.

In this tutorial we&#039;ll:

- Create new view modes for the _Basic Page_ content type representing the different components.
- Use the _ctools blocks_ module to allow displaying an entity as a block and choosing which view mode to use when rendering the entity.
- Provide custom HTML and CSS styling for the new components.

By the end of this tutorial you&#039;ll know how to use Layout Builder in combination with entity view modes.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/6Rab26GIZGGVXROyycWUd5aqjiKDDeP2D0nVwXWXVnE.jpg.jpg</video:thumbnail_loc><video:duration>565</video:duration><video:publication_date>2020-06-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/wed-sponsor-your-user-group</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/views-create-lists-drupal</loc><lastmod>2024-10-04T18:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/add-views-layout</loc><lastmod>2024-08-13T17:56Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/managing-media-drupal</loc><lastmod>2024-11-08T19:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-access-control-media-entities-drupal</loc><lastmod>2025-12-11T16:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/how-add-fields-media-type-drupal</loc><lastmod>2021-05-05T21:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How to Add Fields to a Media Type in Drupal</video:title><video:description>Drupal media entities are fieldable entities, which means that you can add any custom fields you want to your Media types. These fields can be used for collecting additional metadata about a resource, categorizing and organizing resources so they&#039;re easier to find in a large media library, or for displaying information like a photo credit or transcript for a video. The possibilities are endless once you know how to add, and optionally display, fields in Drupal.

Some example use cases for adding fields to Media types:

- Collect, and display, a credit to go along with a photo. This could also be a date, a location, or any other metadata.
- Store resource width and height dimensions as custom fields so they can be referenced by display logic in the theme layer.
- Use Taxonomy reference fields to add tags or categories to help keep a large library organized.

In this tutorial we&#039;ll:

- Learn how to add fields to a Media type
- Verify our new custom field is working

By the end of this tutorial you&#039;ll know how to add custom fields to any Media type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3jZr0K1HSQkxTqtrqbCghV7wUyHcgL62SoH_A5cmfRA.jpg.jpg</video:thumbnail_loc><video:duration>278</video:duration><video:publication_date>2020-09-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-media-field-content-type-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add a Media Field to a Content Type in Drupal</video:title><video:description>The most common way to use Drupal&#039;s Media items is to add fields to content types, allowing the Media entities to be associated with one or more pieces of content. For example, adding a cover image to an article, or embedding a set of YouTube videos into a tutorial. This is accomplished by adding a Media field to the content type in question.

In this tutorial we&#039;ll:

- Explain what the different Media field-specific configuration options do
- Add a Media field to the existing _Article_ content type
- Explain what the different field-specific configuration options do
- Confirm that it worked by verifying that the form for adding an article has the new field

By the end of this tutorial you&#039;ll know how to add a Media field to any content type, or any other fieldable entity, in order to allow Media items to be associated with the content.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/bT5q7TFbsEwff2ArFp80Gs3z5UAjyLLH6TC0OhYtTkk.jpg.jpg</video:thumbnail_loc><video:duration>333</video:duration><video:publication_date>2020-09-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/find-add-edit-and-delete-media-entities-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Find, Add, Edit, and Delete Media Entities in Drupal</video:title><video:description>Media entities in Drupal are content entities, and can be administered like most other Drupal content entities. In most cases you&#039;ll likely add new Media entities via the Media Library widget when creating a new content entity like an Article. However, it&#039;s possible to add them to the library without having to attach them to a piece of content. You may also want to update an existing Media entity, or just search the library to see whether something already exists.

In this tutorial we&#039;ll:

- Learn what a Media entity is in Drupal 
- Get an overview of the main Media management page
- Learn how to add, edit, and delete, Media entities
- Learn how to bulk edit Media entities in Drupal 

By the end of this tutorial you&#039;ll know how to perform basic find, add, edit, and delete operations to manage the Media entities in your library.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5fg0be5u02e6mWYTNs8467kMIad05XHkt8oNE5py6CY.jpg.jpg</video:thumbnail_loc><video:duration>335</video:duration><video:publication_date>2020-09-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-new-media-type-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a New Media Type in Drupal</video:title><video:description>Drupal site administrators can create new _media entity types_, with their own unique configurations and sets of associated fields. Different media types can be configured with different field names, permissions, moderation workflows, and display settings, making it possible to create truly custom content administration experiences. The process is similar to creating a node content type like _articles_ or _events_ with one major distinction: every media type inherits from a **specific media source plugin**. The source plugin provides domain-specific knowledge about the kind of resource being represented. For example, the _Remote video_ source plugin used with the default _Remote video_ media type knows how to consume and display videos from YouTube and Vimeo given only their URL.

Drupal core comes with a couple of common media source plugins, and contributed modules and custom code can add to this list, increasing the different media providers with which Drupal can integrate.

In this tutorial we&#039;ll learn how to:

- Install a contributed module that provides a new media source plugin.
- Create a new media type.

By the end of this tutorial you should be able to explain how source plugins relate to media types, and create a new media type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fdhwDIBOtevALPxVNK9lmW9KbTpoZ4YdnfmMoekKU28.jpg.jpg</video:thumbnail_loc><video:duration>475</video:duration><video:publication_date>2021-07-13</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-custom-media-source-plugin</loc><lastmod>2024-10-18T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-any-oembed-provider-media-source</loc><lastmod>2024-10-25T16:55Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/see-you-drupalcamp-austin</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/customize-drupal-media-library-browser-widget</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Customize the Drupal Media Library Browser Widget</video:title><video:description>When using the Drupal Media Library to browse for available Media entities to attach to your content, the interface that you see inside the modal window is created using Views. This means you can change it for your specific use-case. This is most useful when you want to expose filters for custom fields to allow users to more easily locate content in your library. As your library of media grows, you can create powerful application-specific ways for content authors to segment the list and find their assets.

In this tutorial we&#039;ll:

- Learn how to edit the Views used by the Drupal Media Library browser
- Add a new exposed filter for the custom tags field on some media entities
- Demonstrate how this change affects the user interface for locating and selecting media

By the end of this tutorial you should be able to customize the View used by the Media Library to add new filters and make other use-case specific changes.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JPyrNaKiipsk-cTdJUMzmS-5SSm5GyngM-6E6fWzlEY.jpg.jpg</video:thumbnail_loc><video:duration>289</video:duration><video:publication_date>2020-10-20</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/map-media-source-data-custom-fields</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Map Media Source Data to Custom Fields</video:title><video:description>Media Source plugins in Drupal have a powerful feature, called _field mapping_, that allows an administrator to configure a Media entity type to automatically populate the value of custom fields based on metadata retrieved from the source content. For example, you can add a creator field to the Remote Video Media type, which can use YouTube as a source. When a content author adds a new Remote Video entity they can provide a URL for the YouTube video. Then the source plugin can extract the creator&#039;s name from the YouTube API and use that data to populate a custom field. This saves the content author from having to do that work themselves.

In this tutorial we&#039;ll learn:

- How to discover what source metadata is available
- How to configure a Drupal Media type to automatically populate custom fields

By the end of this tutorial you should be able to add a custom field to a Media type on your Drupal site and automatically populate it with data retrieved from the source content.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nrk1ruv1tFwZrK__sUg5E5jHqnhAPATAqDXDXEcGQBU.jpg.jpg</video:thumbnail_loc><video:duration>308</video:duration><video:publication_date>2021-02-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/track-media-entity-usage-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Track Media Entity Usage in Drupal</video:title><video:description>One of the most powerful features of Drupal&#039;s Media Library is that it enables content authors to re-use media entities. Have a favorite image that you like to use with all blog posts about a specific topic? Or a default icon you want to use for a tutorial unless an alternative is provided? The Media Library can accommodate this without requiring you to keep a copy of the image locally and then attach it to every node where it&#039;s needed.

This can lead to a potential issue when an editor deletes an image, thinking they&#039;ve also deleted all the content that used it. If they missed a post referencing the now deleted image, what happens when there is no image to show?

The contributed [Entity Usage module](https://www.drupal.org/project/entity_usage) provides a mechanism for tracking relationships between entities. This is essential functionality when working with a library of reusable media entities because it helps ensure that media entities attached to content are not deleted.

In this tutorial we&#039;ll:

- Discuss the use case for the Entity Usage module
- Learn how to configure Entity Usage to keep track of relationships between media entities and nodes that reference them
- Prevent media items from being deleted if they are in use somewhere on the site

By the end of this tutorial you should be able to explain what the Entity Usage module does, and how to use it to solve common problems related to deleting items from a large Media library.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/JX99-7DqQoM7chEQfoy1uVBuYuvOLhVy-9h6ZF2TwmE.jpg.jpg</video:thumbnail_loc><video:duration>542</video:duration><video:publication_date>2020-10-28</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-add-media-button-wysiwyg-editor-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>How to Add a Media Button to a WYSIWYG Editor in Drupal</video:title><video:description>A commonly asked question is, &quot;How do you add images to the body of a content item in Drupal?&quot; You can allow users to embed images, videos, or any other media into a field configured with a WYSIWYG editor, such as CKEditor. In this tutorial, we’ll show you how to enable Drupal’s  _Insert Media_ button for CKEditor, and configure the corresponding text format so that it can render embedded Media entities.

Content authors can then use the Media Library to select images (or other media) to embed into the page.

In this tutorial we&#039;ll:

- Learn how to enable the _Insert Media_ button for CKEditor
- Demonstrate how to insert media into the body of a content item (or any other field configured to use CKEditor)

By the end of this tutorial you should know how to configure Drupal to allow content authors to embed images in content items.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/n-3WsqroTAGa8hM33lkzDo0XSmruCr7W1ghsNWGHdxE.jpg.jpg</video:thumbnail_loc><video:duration>331</video:duration><video:publication_date>2020-09-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-media-management-drupal</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-media-types-media-entities-and-media-fields-drupal</loc><lastmod>2025-05-14T23:28Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-media-sources-drupal</loc><lastmod>2024-10-18T22:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drupal-media-library-browse-media-entities</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Drupal Media Library to Browse Media Entities</video:title><video:description>The Drupal core Media Library module provides an enhanced user interface for locating Media entities and attaching them to an article. It&#039;s a drop-in replacement for the default entity reference widget which uses a not very intuitive autocomplete field. Using the Drupal core Media Library module requires minimal configuration.

If you want to provide content creators with a gallery-like library of Media entities that they can browse through in order to find the ones they want to add to their content, the Media Library is the easiest way to do it. It can be configured to work with both Media fields and the CKEditor powered WYSIWYG editor commonly used for editing the body field of Drupal nodes. There&#039;s really no reason not to use it.

In addition to providing a better UI for locating existing Media entities, the Media Library provides a way to create new Media entities right from the content creation form. This prevents an otherwise confusing requirement where Media entities need to be created, via a different set of forms, before they can be used.

In this tutorial we&#039;ll:

- Install and configure the Media Library module to work with Media fields
- Use the user interface provided by the Media Library to improve the experience of finding and selecting Media entities to associate with a piece of content

By the end of this tutorial you&#039;ll know how to replace the default entity reference widget used for selecting Media entities with the much improved Media Library UI.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/htV-bim10-sLG4S9_Fdh8PfxTTXXyaXntVvS6eWSqRk.jpg.jpg</video:thumbnail_loc><video:duration>363</video:duration><video:publication_date>2020-09-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-view-modes-media-entities-drupal</loc><lastmod>2022-03-31T16:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use View Modes with Media Entities in Drupal</video:title><video:description>Media entities, like any content entity, work great with all the different features Drupal provides for changing the way things are displayed: view modes, Layout Builder, theme templates, and more. We&#039;re big fans of using view modes to create a component-like design system where entity types have view modes representing the different context in which they&#039;re displayed. Then we theme the view modes. This works great for displaying Media entities associated with a page and for changing the way that Media assets are displayed within the Media Library browser.

In this tutorial we&#039;ll:

- Create Hero and Sidebar view modes for Media entities
- Configure the Image Media type to use the new view modes and style each one differently
- Use the new view modes to render Image Media assets within a Layout
- Update the _Media library_ view mode that&#039;s used by the Media Library browser to display additional information alongside the thumbnails used when selecting Media to attach to a page

By the end of this tutorial you should be able to change the way that Media assets are displayed by using view modes and display formatters in a Drupal site.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tZu9PivFuTn-JsuQjDGzHfMKdkbIMRPTuEk1ixE2phY.jpg.jpg</video:thumbnail_loc><video:duration>541</video:duration><video:publication_date>2021-03-18</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/check-alterations-hacked</loc><lastmod>2023-08-03T19:32Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Check for Alterations with Hacked</video:title><video:description>It&#039;s not uncommon to patch, or customize, contributed modules during the lifetime of a site. It&#039;s important to know if you&#039;ve done so when planning for a migration since you&#039;ll want to be sure that you don&#039;t lose any customizations when you start using an updated version of a module.

In this tutorial we will walk through using the [Hacked! module](https://www.drupal.org/project/hacked) to check for any alterations to your Drupal code base.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AuqqVmcGWFgDMUXFxYrpxRyFhe7RcAHVQJzxXEJxSn8.jpg.jpg</video:thumbnail_loc><video:duration>396</video:duration><video:publication_date>2016-05-02</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/common-issues-migrations</loc><lastmod>2022-02-28T21:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/core-migration-modules</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/custom-drupal-drupal-migrations</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-migrations-core-templates</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Create Migrations from Core Templates</video:title><video:description>One method of [creating a custom Drupal-to-Drupal migration](/tutorial/custom-drupal-drupal-migrations) involves using the Migrate Upgrade module to generate a set of migration configuration entities that you can use as a starting point. Even if you&#039;re not going to use the generated output in the end, this is still an informative exercise as it allows you to see examples of various migration paths.

In this tutorial we&#039;ll:

- Use the Migrate Upgrade module&#039;s Drush commands to import Drupal core&#039;s migration templates
- Examine the generated configuration entities
- Use the Migrate Tools module&#039;s Drush commands to view a list of the individual migrations that make up our Drupal-to-Drupal migration

By the end of this tutorial, you should be able to use the Migrate Upgrade module to generate the migrations that Drupal core would use to migrate content, list those migrations, and inspect them individually.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DBmAxf8L6FOFw0H7hKYh1GNL_LA5tHx8nhIB-UPmcVU.jpg.jpg</video:thumbnail_loc><video:duration>606</video:duration><video:publication_date>2016-09-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/export-migration-configuration-entities-module</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Export Migration Configuration Entities into a Module</video:title><video:description>If you want to modify the Drupal-to-Drupal migrations created by Migrate Upgrade you&#039;ll need to export the Migrate Plus configuration entities, convert the ones you want to customize to standard migration _.yml_ files, and put them into a custom module. Then, you can make edits the YAML definition of the migration, and keep your customizations in Git.

We recommend creating a new module to house the code that makes up your custom Drupal-to-Drupal migration.

In this tutorial we&#039;ll:

- Create a new module
- Export the migration configuration entities generated by `drush migrate-upgrade` as YAML files
- Copy the files that represent the migrations we&#039;re interested in into our new module
- Customize the copied files

By the end of this tutorial you should have a new module that contains the starting migration YAML files for your custom migration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fJJnIMWXkSvjtlKTGaKti2dY_xGRD-IkDbyL5wX0QvY.jpg.jpg</video:thumbnail_loc><video:duration>833</video:duration><video:publication_date>2016-09-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/set-migrate-demo-site-and-source-data</loc><lastmod>2023-05-06T01:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Set up Migrate Demo Site and Source Data</video:title><video:description>Before we can learn to write a custom migration, we need some sample data and a destination site for that data.

In this tutorial we&#039;ll obtain some source data to work with and configure our Drupal destination site by creating the necessary content types and fields to accommodate the source data. Then we&#039;ll look at the data that we&#039;ll be importing and start to formulate a migration plan.

By the end of this tutorial you&#039;ll have some source data and an empty but configured destination Drupal site ready for data import.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iD6FK6IhLHelCIWi4VphnmvttolrZZHM-EaDZG5rrgg.jpg.jpg</video:thumbnail_loc><video:duration>332</video:duration><video:publication_date>2016-07-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/customize-existing-source-plugin</loc><lastmod>2022-02-24T00:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/migrate-drupal-documentation-and-examples</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-drupal-migration-drush</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal-to-Drupal Migration with Drush</video:title><video:description>In this tutorial we will run a site migration using Drush, and understand how to deal with any failures that occur.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1Ufm3OLYETOtBSCLu4HwbYiFW3mIhCLrAE38RpJ5h2o.jpg.jpg</video:thumbnail_loc><video:duration>180</video:duration><video:publication_date>2016-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-drupal-migration-ui</loc><lastmod>2025-12-11T17:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Drupal-to-Drupal Migration with the UI</video:title><video:description>The Migrate Drupal UI module allows you to execute a migration from older versions of Drupal to the latest version of Drupal. In this tutorial we&#039;ll:

- Run a full Drupal 6 to latest-Drupal (Drupal 8 or 9) Migration from the UI
- Explore the user interface as it exists
- Understand how we can deal with the output from our migration</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/XAdvngO4cm6Ldm7L_OkXJB78CaY0Tx6ZnimsIZjUwSU.jpg.jpg</video:thumbnail_loc><video:duration>191</video:duration><video:publication_date>2016-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupal-dev-days-and-race-code-freeze</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-hookmigratepreparerow</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-migrations-drupal</loc><lastmod>2023-08-03T18:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/migrate-system-terms-and-concepts</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Migrate System: Terms and Concepts</video:title><video:description>To follow along with the rest of the migration tutorials you&#039;ll want to make sure you understand the following concepts and terms as they relate to Drupal migrations.

In this tutorial, we&#039;ll take look at the basic components of a migration and familiarize ourselves with some of the concepts and terminology needed to understand how the system works. We&#039;ll cover:

- What is a migration?
- Migration templates
- The extract, transform, load process
- Destinations and sources
- Additional Drupalisms

By the end of this tutorial you should be able to identify the various components that a migration is composed of, and explain at a basic level what each is responsible for.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/SEPfru6gapG2WznJKs8JpfS6vtOyBhP1a4EghI2JfU8.jpg.jpg</video:thumbnail_loc><video:duration>96</video:duration><video:publication_date>2016-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/run-custom-migrations</loc><lastmod>2022-05-31T19:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Run Custom Migrations</video:title><video:description>As of right now, the most reliable way to run custom migrations is using Drush. Depending on the version of Drush you&#039;re using you may also need the [Migrate Tools module](https://www.drupal.org/project/migrate_tools). In this tutorial we&#039;ll walk through using Drush to run a custom migration, as well as the other commands that can be used to manage the execution of migrations.

By the end of this tutorial you should know how to run your custom migrations.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/AiPhFZiCfaW463XaV4smbcvqLX74W5TmrjmThIZUhoM.jpg.jpg</video:thumbnail_loc><video:duration>723</video:duration><video:publication_date>2016-08-11</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/migration-related-contributed-modules</loc><lastmod>2023-06-02T21:35Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/prepare-drupal-drupal-migration</loc><lastmod>2023-08-03T18:23Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/preparing-migration-drupal</loc><lastmod>2023-04-27T15:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/destination-plugins</loc><lastmod>2024-10-18T22:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Destination Plugins</video:title><video:description>Destination plugins handle the _load_ phase of the [ETL (Extract, Transform, Load) process](/tutorial/migrate-system-terms-and-concepts) and are responsible for saving new data as Drupal content or configuration.

In this tutorial, we&#039;ll:

- Examine the role that destination plugins fulfill
- Learn about existing destination plugins
- Better understand when you might need to write your own destination plugin

By the end of this tutorial, you should be able to explain what destination plugins does and understand how you&#039;ll make use of them in your own migration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9iq0e5tcwXWCQdwOu8WuNhLOnVD1rQmjKcdPzgEN-3g.jpg.jpg</video:thumbnail_loc><video:duration>486</video:duration><video:publication_date>2016-07-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/process-plugins</loc><lastmod>2024-10-18T22:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Process Plugins</video:title><video:description>Process plugins manipulate data during the transform phase of the ETL process while the data is being moved from the source to the destination. Drupal core provides a handful of common process plugins that can be used to perform the majority of data transformation tasks. If you need some functionality beyond what is already provided you can [write your own custom process plugins](/tutorial/write-custom-process-plugin).

In this tutorial we&#039;ll:

- Examine the role that process plugins fulfill
- Understand the processing pipeline
- List the existing process plugins in Drupal core and what each one does
- Better understand when you might need to write your own process plugin

By the end of this tutorial you should be able to explain what process plugins do, and understand how you&#039;ll make use of them in your own migration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DfWG80OGtqHakxngFz7KuBntdb01ML4cF_lWlWFbbGQ.jpg.jpg</video:thumbnail_loc><video:duration>451</video:duration><video:publication_date>2016-07-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/source-plugins</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Source Plugins</video:title><video:description>Source plugins extract data from a source and return it as a set of rows representing an individual item to import and some additional information about the properties that make up that row.

Anyone writing a custom migration, or module developers who want to provide a migration path from their Drupal 6 or 7 module, will need to work with source plugins.

In this tutorial we&#039;ll talk about the role that source plugins fulfill and how they work. By the end of this tutorial you should be able to determine whether or not you need to write a source plugin for your migration.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NZmOLF6Iwmbbjh8in3l4CdnuP9Mgyeuqmf4c0_-4_n0.jpg.jpg</video:thumbnail_loc><video:duration>471</video:duration><video:publication_date>2016-07-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-upgrade-status-and-contrib-tracker</loc><lastmod>2023-05-08T20:09Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use Upgrade Status and Contrib Tracker</video:title><video:description>When preparing to migrate from an older version of Drupal (Drupal 7 or previous) to the latest version of Drupal (Drupal 8 or later) you&#039;ll need to determine if the contributed modules you use are ready to go. The [Upgrade Status module](https://www.drupal.org/project/upgrade_status) can give you a list of all the modules installed on your site, and information about the availability of a latest Drupal version. It&#039;s not perfect, and will still require some manual research for some modules, but it is a great start towards helping you plan for your migration.

In this tutorial we&#039;ll:

- Install the Upgrade Status module and use it to generate a status report
- Review the generated report
- Talk about using the Contrib Tracker project, and other methods for getting more details about the status of upgrades for any module

By the end of this tutorial you should be able to evaluate all the installed modules on your existing Drupal site and determine the status of a module release that is compatible with the latest version of Drupal.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/acHOMyY9MwQMdRyl760DFqxE0Td6wKlb2f0aoPEv3oo.jpg.jpg</video:thumbnail_loc><video:duration>495</video:duration><video:publication_date>2016-05-06</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/why-use-migrate-upgrade-and-migrate-plus</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/write-custom-migration</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/write-custom-process-plugin</loc><lastmod>2024-10-18T22:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/write-custom-source-plugin</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-contributed-module-no-drupal-9-release</loc><lastmod>2023-02-22T18:31Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/update-drupal-versions-prior-88x-using-composer</loc><lastmod>2022-03-30T21:40Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/update-drupals-minor-version</loc><lastmod>2024-11-14T23:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/upgrade-drupal-10</loc><lastmod>2025-04-04T15:24Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/upgrade-drupal-9</loc><lastmod>2025-04-04T15:26Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/learning-trial-and-error-installing-and-touring-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drupalizeme-tutorial</loc><lastmod>2023-01-19T02:54Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Use a Drupalize.Me Tutorial</video:title><video:description>This tutorial teaches you everything you need to know about using the tutorials on Drupalize.Me.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/s84SdIc8lNQnbLLikBxsr9ILKwuGWC5xLz9TElp6abY.jpg.jpg</video:thumbnail_loc><video:duration>95</video:duration><video:publication_date>2015-11-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-deprecated-code</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/annotations</loc><lastmod>2024-10-17T20:48Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/cache-api-drupal</loc><lastmod>2024-11-08T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/cache-api-overview</loc><lastmod>2024-03-26T17:18Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/events-api-drupal</loc><lastmod>2024-11-08T19:56Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/discover-existing-events</loc><lastmod>2024-07-24T23:55Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/dispatch-event</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Dispatch an Event</video:title><video:description>Modules or subsystems can dispatch events in order to allow another developer to subscribe to those events and react to what&#039;s happening within the application. As a module developer you&#039;ll learn how to:

- Define and document new events
- Define new event objects
- Use the event dispatcher service to alert event subscribers when specific conditions are met in your own code.

By the end of this tutorial, you should be able to explain the use case for dispatching events, and be able to trigger one more events from within your own code.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4oOpBWNSNXRNb914cY4KRYvu8BMhiq_Vp1umkqCpkQg.jpg.jpg</video:thumbnail_loc><video:duration>758</video:duration><video:publication_date>2016-12-01</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/subscribe-event</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-events</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-20-getting-sassy-chris-eppstein</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/ajax-drupal-forms</loc><lastmod>2024-11-08T19:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/use-ajax-forms</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-dependent-dropdown-ajax</loc><lastmod>2024-07-08T15:48Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-ajax-submit-form</loc><lastmod>2021-02-19T20:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/creating-forms-drupal</loc><lastmod>2024-11-08T19:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-existing-form-hookformalter</loc><lastmod>2023-08-25T00:16Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-input-elements-form</loc><lastmod>2025-12-10T16:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/provide-default-values-form-elements</loc><lastmod>2024-05-21T19:25Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-new-form-controller-and-route</loc><lastmod>2023-08-23T18:21Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/retrieve-and-display-forms</loc><lastmod>2024-10-18T22:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/setting-your-developer-environment</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/form-element-reference</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/form-api-life-cycle</loc><lastmod>2024-04-20T00:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/form-api-overview</loc><lastmod>2021-03-02T23:06Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/inject-services-form-controller</loc><lastmod>2025-12-09T20:33Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Inject Services into a Form Controller</video:title><video:description>Eventually you&#039;ll want to do something with the information your form collects beyond just printing it to the screen. It&#039;s generally considered a best practice to keep business logic out of your form controller so that it can be reused. In order to accomplish that you&#039;ll generally define your business logic in a service, and then call out to that service from your form controller. Or, you can make use of one of the existing services provided by Drupal core to save data.

In this tutorial we&#039;ll:

- Use dependency injection to inject a service into a form controller
- Make use of a service injected into a form controller from within the `buildForm()` and `submitForm()` methods

By the end of this tutorial you&#039;ll understand how to inject one or more services into your form controller and then make use of them.

**Note:** As of Drupal 10.2, regular controllers can use `AutowireTrait` for automatic dependency injection. However, form controllers do not yet support autowiring and still require the manual `create()` method approach demonstrated in this tutorial. Learn more about autowiring in [Create a Route and Controller](/tutorial/create-route-and-controller).</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I6OpDkCsoEpAM1WcyulfB9PaiWNKG3l_axoYAmc7eUE.jpg.jpg</video:thumbnail_loc><video:duration>477</video:duration><video:publication_date>2018-02-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/handle-submitted-form-data</loc><lastmod>2021-02-19T20:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/process-submitted-form-data-callback</loc><lastmod>2021-05-25T16:50Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/process-submitted-form-data-form-controller</loc><lastmod>2023-08-11T22:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/validate-form-input</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-validation-callback-existing-form</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/validate-form-form-controller</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/validate-single-form-element</loc><lastmod>2021-02-19T20:11Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/hooks-drupal</loc><lastmod>2024-11-08T19:55Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/discover-existing-hooks</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Discover Existing Hooks</video:title><video:description>How do you figure out what hooks are available to implement? How do you know which hook to implement to accomplish a task?

The list of hooks that are available to implement in your custom Drupal module varies depending on the modules enabled for a site. Each module can optionally invoke new hooks. There are also some hooks invoked by Drupal core subsystems like Form API that are always present. This can make it a little bit tricky sometimes to figure out what hooks are available, and which one to implement.

In this tutorial we&#039;ll look at:

- Different ways to get a list of available hooks
- Where to find the documentation for a hook so you can know if it&#039;s the one you want to implement

By the end of this tutorial you should be able to browse a list of hooks and their related documentation.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ggvDYuivOATBz0b9hQ_2n1HGydXg2RsGTF5VlcePuFA.jpg.jpg</video:thumbnail_loc><video:duration>734</video:duration><video:publication_date>2017-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/implement-any-hook</loc><lastmod>2025-01-29T02:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Implement Any Hook</video:title><video:description>Hooks allow module developers to execute custom code at key moments during Drupal&#039;s request processing life cycle. They can be used to react to actions or conditions, alter forms and existing configuration, and extend Drupal in various ways. Knowing how to implement a hook is an essential skill for any Drupal developer. All hooks are implemented in the same way, so once you know how to implement one, you&#039;ll be able to implement any.

In this tutorial we&#039;ll:

- Define a recipe for implementing hooks
- Locate a hook&#039;s documentation
- Provide examples of both function-based and class-based hook implementations

By the end of this tutorial, you should be able to start implementing any hook in your custom code.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/0jcxPaHQzc-gC5Ie9lvRohvHzmAWrDFa4yMrNNSeRXU.jpg.jpg</video:thumbnail_loc><video:duration>650</video:duration><video:publication_date>2017-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/define-and-invoke-new-hook</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Define and Invoke a New Hook</video:title><video:description>As a module developer you should define and invoke new hooks in your module in order to allow other developers -- or even future you -- to extend your module&#039;s functionality without hacking your module&#039;s code. This requires:

- Creating a new, unique, name for your hook
- Providing documentation for your hook
- Invoking the hook at critical points in your code

By the end of this tutorial you should have a better idea of when to define a new hook and know how to invoke a hook from your code.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/UMPC2kPtzSU7rYPSDEIIsOeZ-QzPcNrlMCr5g7qqxvo.jpg.jpg</video:thumbnail_loc><video:duration>712</video:duration><video:publication_date>2017-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-are-hooks</loc><lastmod>2025-01-29T02:36Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>What Are Hooks?</video:title><video:description>Hooks allow modules to alter and extend the behavior of Drupal core, or another module. They are one of the various ways that code components in Drupal can communicate with one another. Using hooks a module developer can change how core or another module works -- without changing the existing code. As a Drupal developer, understanding how to implement and invoke hooks is essential.

In this tutorial we&#039;ll:

- Define what hooks are and the types of hooks that exist
- Understand the use case for hooks

By the end of this tutorial you should be familiar with the concept of hooks and understand when you might want to implement a hook.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Pw_PuLZJvWuS4eDoPy8Fc-voodItwePnK0n9XMjUDR8.jpg.jpg</video:thumbnail_loc><video:duration>485</video:duration><video:publication_date>2017-01-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-info-files-drupal-modules</loc><lastmod>2025-11-05T21:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/coding-menu-links-module</loc><lastmod>2025-11-11T17:40Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/add-action-link-module</loc><lastmod>2024-07-12T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-contextual-link-module</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-local-task-link-module</loc><lastmod>2024-07-12T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-menu-link-module</loc><lastmod>2025-11-11T17:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-menu-links-module</loc><lastmod>2024-07-12T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-permissions-module</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/plugin-api-drupal</loc><lastmod>2024-11-08T19:55Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/define-new-plugin-type</loc><lastmod>2025-11-05T03:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Define a New Plugin Type</video:title><video:description>Knowing how to define a new plugin type will allow you to write modules that are more extensible, and more configurable. In doing so you&#039;ll learn more about best practices in decoupling code within your module, and get an in-depth look at how the plugin system works. Even if you&#039;re not defining a new plugin type in your own module, understanding how the system works will give you more insight into how many parts of Drupal work. This is essential knowledge for anyone developing modules for Drupal.

By the end of this tutorial you should be able to determine if defining a new plugin type is the right solution to your problem, and then understand the steps involved in doing so.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/7lqfOyiplKzbys83m6Z_kAKLd5PIw3JlXdq6oUR7LkE.jpg.jpg</video:thumbnail_loc><video:duration>1034</video:duration><video:publication_date>2016-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/discover-existing-plugin-types</loc><lastmod>2024-10-17T22:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-plugin-any-type</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/plugin-derivatives</loc><lastmod>2024-10-18T19:28Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Plugin Derivatives</video:title><video:description>Plugin derivatives allow a single plugin to dynamically generate multiple plugin instances based on configuration or other data. This is useful for situations where user-entered data, or other dynamic configuration, might have an impact on available plugins. Or, put another way, any time you need to be able to dynamically generate plugin definitions.

In this tutorial we&#039;ll:

- Define what plugin derivatives are
- Understand the use case for derivatives
- Examine how core uses derivatives in order to demonstrate how you could write your own plugin deriver class</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KvQedjf3MSZ9Ya0YAp22S-eNM6bo2PQtpjFSiP0TlZ4.jpg.jpg</video:thumbnail_loc><video:duration>850</video:duration><video:publication_date>2016-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/plugin-discovery</loc><lastmod>2024-10-18T19:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Plugin Discovery</video:title><video:description>In order for a plugin manager to locate instances of individual plugins within the Drupal code base it needs to know where to look, and how to interpret the data that it finds. This process is called plugin discovery and can be accomplished in several ways.

In this tutorial, we&#039;ll look at what plugin discovery is doing at a high level, and then talk about the plugin discovery methods you can choose from when defining a new plugin type.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rRqA6tsAnJPYgZ7HR126X3a0OEu8e07CHu1_UaZBLoE.jpg.jpg</video:thumbnail_loc><video:duration>495</video:duration><video:publication_date>2016-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/plugin-factories-and-mappers</loc><lastmod>2024-10-18T20:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Plugin Factories and Mappers</video:title><video:description>Learn how the Plugin API takes a given plugin ID and uses it to instantiate and return a fully configured plugin object. In this tutorial we&#039;ll look at:

- What factories are, and the role they serve in the Plugin API
- The factories available in core
- Using mappers to dynamically load a plugin when you don&#039;t know the ID of the specific plugin you need.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rd0_DBbZs03dLinUEh08ylK-18i6VzM-APH048JSr7A.jpg.jpg</video:thumbnail_loc><video:duration>486</video:duration><video:publication_date>2016-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/plugin-managers</loc><lastmod>2024-10-18T20:04Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-plugin-types</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-plugins</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Plugins?</video:title><video:description>The Drupal plugin system allows a particular module or subsystem to provide functionality in an extensible, object-oriented way. The controlling module defines the basic framework (interface) for the functionality, and other modules can create plugins (implementing the interface) with particular behaviors. Plugins are grouped into plugin types. Each plugin type is managed by a plugin manager service, which uses a plugin discovery method to discover provided plugins of that type and instantiate them using a plugin factory.

The system aims to make it easy for developers to allow for management of these components via the user interface, giving more flexibility and control to site administrators.

In this tutorial we&#039;ll take a high-level look at the problem the Plugin API is solving and provide a starting point for diving deeper into the various components that make up the Plugin API.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zbyQjUSIBhc7ok4lpY6KujSmrZIH03sOMm70awTnEPY.jpg.jpg</video:thumbnail_loc><video:duration>632</video:duration><video:publication_date>2016-11-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/render-api-concepts-drupal</loc><lastmod>2024-11-08T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/use-access-showhide-elements-render-array</loc><lastmod>2021-03-05T01:44Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-classes-and-html-attributes-render-arrays</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/render-api-callback-properties</loc><lastmod>2024-10-07T16:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-list-items</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/oscon-can-be-worth-investment</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-lazy-builders-and-placeholders</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/generate-urls-and-output-links</loc><lastmod>2024-03-26T21:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-new-render-element-type</loc><lastmod>2024-10-18T20:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-plain-text-and-simple-html-markup</loc><lastmod>2025-12-10T16:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-prefix-and-suffix-properties-wrap-element</loc><lastmod>2021-03-05T01:44Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/render-api-renderers</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/render-api-overview</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Render API Overview</video:title><video:description>The Render API consists of two parts: structured arrays that provide data and hints about how that data should be rendered, and a rendering pipeline that can be used to render these arrays into various output formats. Understanding at least the basics of how the Render API works, the difference between elements and properties, and the concept of callback functions is an integral part of learning Drupal. 

In this tutorial we&#039;ll:

- Look at the fundamentals of the Drupal Render API
- Point to additional material to provide more detail about the inner workings of the Render API and how content is output in Drupal</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q_8uQWxQw9ulwi3sabGGe3yLOjiXRK5OM5wPbW7PyQE.jpg.jpg</video:thumbnail_loc><video:duration>407</video:duration><video:publication_date>2017-04-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-are-render-arrays</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>What Are Render Arrays?</video:title><video:description>The core structure of Drupal&#039;s Render API is the render array, which is a hierarchical associative array containing data to be rendered and properties describing how the data should be rendered. As a module developer you&#039;ll use render arrays to describe the content your module controls in order to output it on a page as HTML, or as part of a response in another format like JSON. As a theme developer, you&#039;ll manipulate render arrays in order to affect the way content is output on the page.

In this tutorial we&#039;ll learn:

- What render arrays are and why they exist
- The basic format of a render array
- What &quot;properties&quot; and &quot;elements&quot; signify in the context of a render array
- Where to find more information about how to create a render array to describe your own content

By the end of this tutorial you should be able to understand when you need to use a render array, recognize one when you see it, and know where to get more detailed information about render array formatting specifics.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/4B25P_S8CvITcFWhnfWau3fTrsUBiGKskil6iDjwJww.jpg.jpg</video:thumbnail_loc><video:duration>712</video:duration><video:publication_date>2017-04-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-20-bdd-behat-and-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/add-cache-metadata-render-arrays</loc><lastmod>2023-05-25T21:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-render-elements</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>What Are Render Elements?</video:title><video:description>One of the central components of Drupal&#039;s Render API is render elements. You can think of them as prepackaged [render arrays](/tutorial/what-are-render-arrays) or shortcuts you can use to describe common things, like tables, links, and form elements, in a consistent way. In this tutorial we&#039;ll take a more in-depth look at the use of the `#type` property in render arrays in order to answer questions like:

- What are render elements, and what is their use case?
- Where can I find more information about available element types?

By the end of this tutorial you should be able to identify individual render element types within a larger render array, find the relevant documentation for specific types of render elements, and explain the use case for render elements.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wC48laFcQlBv9BZ7AWfV9V8Ks8aLZBEy14Ygad3eDdk.jpg.jpg</video:thumbnail_loc><video:duration>482</video:duration><video:publication_date>2017-04-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/render-pipeline</loc><lastmod>2023-06-06T21:17Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-table</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-content-template-file</loc><lastmod>2025-12-10T13:57Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Output Content with a Template File</video:title><video:description>In this tutorial we&#039;ll look at how you can use the `#theme` property of a [render array](/tutorial/what-are-render-arrays) to define custom HTML. With this information, module developers can use render arrays to define content, and theme developers can understand how elements in a render array are converted to HTML and which templates they can override to change the output for a specific element.

Learn how to:

- Use `hook_theme()` to define a new theme hook and define default values for variables
- Create a corresponding Twig template file that outputs the variables and any custom HTML markup
- Use a preprocess function to add additional variables for the Twig template file you created
- Use the new theme hook in conjunction with a `#theme` property in a render array to link your Twig template file to actual content

By the end of this tutorial you should know how to define new templates to output content as HTML. You should also have a better understanding of how Twig template files are linked to elements in a render array.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_ZAPL1YzzpuWQL9BVlXYtbeHeuANcXGLbvxZHrgxpus.jpg.jpg</video:thumbnail_loc><video:duration>609</video:duration><video:publication_date>2017-04-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-render-element-types-render-array</loc><lastmod>2025-12-09T21:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Use Render Element Types in a Render Array</video:title><video:description>There are a bunch of [existing render elements](https://api.drupal.org/api/drupal/elements), most commonly Form API elements. You need to know how to discover and make use of existing elements. In this tutorial, we&#039;ll learn how to:

- Locate a list of elements provided by Drupal core
- Figure out what properties apply to each element
- Use any render element type when defining content or forms in our code

 By the end of this tutorial you should know what render element types are available for you to use, and how to find the details you&#039;ll need in order to implement them in your own render arrays.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Iz_BxaUpCwHhJTLeoQtfRIroshhcOrvwidt6tmIqrtE.jpg.jpg</video:thumbnail_loc><video:duration>473</video:duration><video:publication_date>2017-04-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/discover-and-use-existing-services</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Discover and Use Existing Services</video:title><video:description>It&#039;s best practice to access any of the services provided by Drupal via the service container to ensure the decoupled nature of these systems is respected. In order to do so, you need to know what services exists, and then, where possible, use dependency injection to use them in your code.

This tutorial walks through the process of:

- Discovering existing services and learn their machine name
- Using the machine name of service to request a copy from the service container</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/I6OpDkCsoEpAM1WcyulfB9PaiWNKG3l_axoYAmc7eUE.jpg.jpg</video:thumbnail_loc><video:duration>477</video:duration><video:publication_date>2016-10-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/get-information-about-current-user</loc><lastmod>2025-11-07T00:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/get-started-using-react-and-drupal-together</loc><lastmod>2025-09-12T01:06Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/introduction-react-and-drupal</loc><lastmod>2025-09-11T16:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/react-basics</loc><lastmod>2022-03-30T03:39Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/decoupled-vs-progressively-decoupled</loc><lastmod>2020-03-24T17:01Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/connect-react-drupal-theme-or-module</loc><lastmod>2024-10-18T22:48Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-react-component</loc><lastmod>2024-02-07T23:28Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/retrieve-data-api-react</loc><lastmod>2022-03-30T03:23Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-react-list-content-drupal</loc><lastmod>2025-12-04T00:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-update-and-delete-drupal-content-javascript</loc><lastmod>2025-03-17T14:34Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/build-interface-edit-nodes-react</loc><lastmod>2024-02-07T16:51Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-fully-decoupled-react-application</loc><lastmod>2025-09-12T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/using-drupal-book-video-lessons</loc><lastmod>2023-08-11T00:48Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-create-react-app-start-decoupled-react-application</loc><lastmod>2025-12-03T19:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/make-api-requests-oauth</loc><lastmod>2025-11-14T00:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-fetch-and-oauth-make-authenticated-requests</loc><lastmod>2025-09-12T00:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-webpack-and-react-fast-refresh-drupal-theme</loc><lastmod>2025-03-17T14:34Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/search-api-and-solr-drupal</loc><lastmod>2024-11-08T19:36Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/why-solr</loc><lastmod>2023-01-20T22:41Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/plan-solr-installation</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-solr-locally</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/solr-cores</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-new-multilingual-features</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/install-search-api</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/solr-and-multiple-environments</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-search-api-indexes</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/populate-search-api-indexes</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/index-reference-fields</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-search-pages-and-blocks-views</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/multiple-search-api-indexes</loc><lastmod>2023-01-25T01:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/processors-search</loc><lastmod>2023-07-14T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-excerpts-search-results</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-autocomplete-search</loc><lastmod>2024-12-27T21:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupalcamp-twin-cities</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/filter-search-results</loc><lastmod>2024-12-27T21:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/facets-search</loc><lastmod>2024-04-18T23:05Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-facet</loc><lastmod>2024-12-27T21:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-facet-using-taxonomy</loc><lastmod>2024-12-27T21:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-drupal-development-requirements-composer</loc><lastmod>2024-11-08T00:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/convert-tests-simpletest-phpunit</loc><lastmod>2025-11-14T00:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/frameworks-testing-drupal</loc><lastmod>2024-11-07T00:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-drupal-functional-test-dependencies</loc><lastmod>2024-04-20T01:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-functional-test</loc><lastmod>2024-04-20T01:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-unit-test-drupal</loc><lastmod>2024-11-08T18:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Implement a Unit Test in Drupal</video:title><video:description>Let&#039;s write somewhat strict unit tests in a Drupal module. By the end of this tutorial, you will be able to:

- Understand what makes a unit test different from other types of tests.
- Determine the specifications of a unit test.
- Use mocking to isolate units under test, and to force code flow to achieve high coverage.

We&#039;ll start out with a brief introduction to unit tests. Then we&#039;ll look at a contrived example of a Drupal controller class for illustration purposes. Next, we&#039;ll test two units of this controller class, each requiring different mock styles.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mlBgOUbGz1-er_6F_fyEBYkyNADGzmhkskx4A2ewzi8.jpg.jpg</video:thumbnail_loc><video:duration>523</video:duration><video:publication_date>2018-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/introduction-testing-drupal</loc><lastmod>2024-11-08T18:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/functional-javascript-testing-nightwatchjs</loc><lastmod>2024-11-08T18:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/organize-test-files</loc><lastmod>2024-11-08T18:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-phpunit-config-file-your-project</loc><lastmod>2024-11-08T00:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/run-drupal-tests-phpunit</loc><lastmod>2025-11-14T00:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Run Drupal Tests with PHPUnit</video:title><video:description>In this tutorial, we&#039;ll run tests in several different ways using the PHPUnit tools available in Drupal. We&#039;ll learn about various environment variables you&#039;ll need to supply to the test runner depending on which type of test you&#039;re running. And we&#039;ll learn various ways to get reports on the test results. By the end of this tutorial, you should understand how to run Drupal tests using PHPUnit.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/NKJH8o34JnQq_mk1tx8216xQXXqR8LJdrSxYdVOf0Nw.jpg.jpg</video:thumbnail_loc><video:duration>358</video:duration><video:publication_date>2018-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/run-drupal-tests-run-testssh-script</loc><lastmod>2025-11-14T00:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-functional-test</loc><lastmod>2024-11-08T18:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Set Up a Functional Test</video:title><video:description>In this tutorial, we&#039;ll walk through the process of setting up a functional test. Then, we&#039;ll learn how to run it using two different test runners. This setup process allows us to be sure we&#039;re not getting false positives from the test runners. We&#039;ll be working on a functional test, but these techniques apply with minimum modification to all the Drupal PHPUnit-based tests.

By the end of this tutorial, you should be able to set up and run functional tests in Drupal using two different test runners.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/gYsayoihIfIBHD7wXgJ_yzRJc5arUDIPh3o1MpQzFho.jpg.jpg</video:thumbnail_loc><video:duration>360</video:duration><video:publication_date>2018-01-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/software-testing-overview</loc><lastmod>2024-11-08T00:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-22-decoupling-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/run-functional-javascript-tests</loc><lastmod>2024-11-08T00:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/preprocess-functions-drupal-themes</loc><lastmod>2024-11-08T18:57Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/add-logic-themenametheme</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-new-theme-hook-suggestions</loc><lastmod>2022-02-24T20:05Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-regions-theme</loc><lastmod>2022-04-26T21:36Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add Regions to a Theme</video:title><video:description>Customizing the available regions in your theme is one of the first things you&#039;ll do when creating your own themes. Doing so gives you complete control over where content is displayed on the page, and the markup involved. Adding regions to a theme is a two-step process that involves editing your theme&#039;s _THEMENAME.info.yml_ file and updating your _page.html.twig_ file.

In this tutorial we&#039;ll:

- Declare one or more new regions in our themes _THEMENAME.info.yml_ file.
- Output the content of those regions in our theme via the _page.html.twig_ file.

By the end of this tutorial you should be able to add or edit the regions a theme provides. Also, you&#039;ll ensure that blocks placed into regions are displayed by outputting the regions in the page template.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_VhG4-3vwFt78vkwhJnuTLA9spkPs_9Lza8rjRCCSzM.jpg.jpg</video:thumbnail_loc><video:duration>551</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-screenshot-your-theme</loc><lastmod>2023-01-03T21:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-variables-template-file</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Add Variables to a Template File</video:title><video:description>Preprocess functions are specially-named functions that can be used to add new variables to a Twig template file. They are commonly used by themes to add new variables based on custom PHP logic and simplify accessing the data contained in complex entity structures. For example: adding a variable to all _node.html.twig_ template files that contains the combined content a couple of specific fields under a meaningful name like `{{ call_to_action }}`. Modules use preprocess functions to expose the dynamic data they manage to Twig template files, or to alter data provided by another module based on custom logic.

In this tutorial we&#039;ll learn how to:

- Use PHP to perform some complex logic in our theme.
- Store the resulting calculation in a variable.
- Make that variable available to a Twig template file.

Example use cases for adding variables with preprocess functions include:

- Anytime calculating the value to output in a template requires logic more complex than an if/else statement.
- Anytime the desired value requires additional string manipulation beyond what can be easily accomplished using an existing Twig filter or function.

By the end of this tutorial you should be able to expose new variables to a Twig template file by defining a preprocess function in either a module or a theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/SyHW_buoQdPbaX4jTHMAjrrKUuBAOunXYfj7uarNHdY.jpg.jpg</video:thumbnail_loc><video:duration>365</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/arrays-and-objects-twig</loc><lastmod>2023-01-12T21:54Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Arrays and Objects in Twig</video:title><video:description>Twig has a special syntax for accessing array keys and objects, also known in Twig as _variable attributes_. In this tutorial, we&#039;ll cover the period or dot (`.`) operator to access a variable attribute, as well as subscript or square-bracket syntax, useful for when the key of the array contains special characters, like a dash (`-`) or pound sign (`#`). We&#039;ll also look at the logic Twig uses to find the matching attribute in an array or object.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/d61qx4APRUwYq2QHdEM0fNgiHjwOmGlOYl9yjPpckBc.jpg.jpg</video:thumbnail_loc><video:duration>292</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/asset-libraries-drupal</loc><lastmod>2024-11-08T18:57Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/attach-asset-library</loc><lastmod>2023-06-01T22:46Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Attach an Asset Library</video:title><video:description>Once you&#039;ve defined an asset library you&#039;ll need to tell Drupal when you want to add the CSS and JavaScript that it includes to the page. Ideally you&#039;ll do so in a way that allows Drupal to only add the corresponding assets on pages where they are needed.

You can attach a library to all pages, a subset of pages, or to elements in a render array. This allows you to have some assets that are global, and others that get loaded on an as-needed basis. To attach a library you&#039;ll need to know both its name and prefix, and then use one of the techniques outlined below to let Drupal know when to include it.

In this tutorial, we&#039;ll look at attaching asset libraries:

- Globally, via your _THEMENAME.info.yml_ file
- Conditionally, via a preprocess function using the `#attached` render array property
- Inside of a Twig template file

By the end of this tutorial you should be able to attach asset libraries in various different ways depending on your use case.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OXoV8gNcPKr7Qkn77hL3pfN7GAIQf00MCPECayjTyaA.jpg.jpg</video:thumbnail_loc><video:duration>281</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/backbonejs-theme-or-module</loc><lastmod>2023-06-28T20:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/responsive-image-styles-drupal</loc><lastmod>2024-11-08T19:05Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/what-breakpoint-yaml-file</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/breakpoints-and-media-queries</loc><lastmod>2017-03-30T00:08Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/change-theme-settings</loc><lastmod>2022-02-24T00:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Change Theme Settings</video:title><video:description>Some, but not all, themes come with administrator-configurable settings that you can change through the UI. These might allow you to upload your own logo, choose between a couple of different pre-defined layouts, or turn features of a theme on or off. In this tutorial we’ll look at where you can find these theme settings if they exist, and how to go about changing them.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xAEMKfWzQC8F_FIWyobTF5RjQsS6s4eV9OwH7jDrJHw.jpg.jpg</video:thumbnail_loc><video:duration>427</video:duration><video:publication_date>2016-04-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/change-variables-preprocess-functions</loc><lastmod>2025-11-07T23:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Change Variables with Preprocess Functions</video:title><video:description>Preprocess functions are specially-named PHP functions that allow themes and modules to modify the variables passed to a Twig template file. They are commonly used by themes to alter existing variables before they are passed to the relevant template files. For example; Changing the makeup of render array so that it renders an `&lt;ol&gt;` list instead of a `&lt;ul&gt;` list. Or appending data to the label of a node depending on custom logic.

In this tutorial we&#039;ll:

- Define a new preprocess function in our theme&#039;s _.theme_ file
- Use the preprocess functions to modify the content of an existing variable before it&#039;s used in Twig

By the end of this tutorial you should be able to define new preprocess functions in a theme (or module) that manipulate the variables for a specific Twig template file.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/kc5HvBs_xsPtp8VPmyi_pe-NY_Iv2HuHsexpOWDw7sM.jpg.jpg</video:thumbnail_loc><video:duration>320</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/classes-and-attributes-twig-templates</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-installing-and-updating-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/clear-drupals-cache</loc><lastmod>2025-04-10T20:26Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/configure-your-environment-theme-development</loc><lastmod>2024-02-16T23:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Configure Your Environment for Theme Development</video:title><video:description>Making Drupal [fast by default](/tutorial/fast-default) implies having caching layers and CSS and JavaScript aggregation utilities enabled out-of-the-box. As a theme developer this can be annoying, because you must clear these various caches in order to preview any changes. In addition, inspecting variables with debugging tools often produces PHP errors. We&#039;ll make some recommendations for PHP settings on your local environment that can prevent these errors from happening so often.

By the end of this tutorial, you should be able to:

- Set up your local Drupal site for theme development
- Prepare your local development environment for working on and debugging themes</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Wh0V-bW7TgygY4_flCTRNdkMHQ0ZliQSiFHPxhNC50k.jpg.jpg</video:thumbnail_loc><video:duration>702</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/core-themes-bartik</loc><lastmod>2021-02-11T23:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Core Themes: Bartik</video:title><video:description>Bartik is a core theme in Drupal. As a default theme for Drupal, it serves as an instructive example of a well-developed responsive theme. In this tutorial, we&#039;ll tour and explore Bartik, identify its primary features, and explain the use case for the Bartik theme and what you can learn from it.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EjNAKuoJ_HCB8xK6CDORV5PpHIQbRItHoDdDWsk7WcE.jpg.jpg</video:thumbnail_loc><video:duration>325</video:duration><video:publication_date>2017-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/core-themes-stark</loc><lastmod>2021-02-11T23:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Core Themes: Stark</video:title><video:description>Stark is one of the themes bundled with Drupal. It is intentionally bare bones and its purpose is to help Drupal theme and module developers get to the heart of Drupal&#039;s system templates. In this tutorial, we&#039;ll explore Stark and its primary features and discuss the various reasons for utilizing the Stark theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/KiAdrSt6AXNGpL7D0kWs0eieSSSJh5I_iMF3-2Tfstk.jpg.jpg</video:thumbnail_loc><video:duration>203</video:duration><video:publication_date>2017-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-breakpoint-yaml-file</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/customize-theme-settings</loc><lastmod>2023-02-15T20:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-asset-library</loc><lastmod>2023-05-03T23:23Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Define an Asset Library</video:title><video:description>New asset libraries can be defined by either modules or themes. In order to define a new asset library you need to create the requisite CSS and JavaScript files, and a new _THEMENAME.libraries.yml_, or _MODULENAME.libraries.yml_ file that aggregates them together and provides metadata about the library itself and any dependencies.

In this tutorial we’ll:

- Look at the structure of a _\*.libraries.yml_ file and demonstrate how to combine a couple of CSS and JS files together into an asset library that can be used in a theme or a module
- Look at how one asset library can declare that it is dependent on another in order to ensure the assets from the dependency are loaded as well

By the end of this tutorial you should know how to define a new asset library in either a module or a theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_Oi7fRMDZyyp1Ojppz_K_QAjsQF5KtPkAZCJHGet3mU.jpg.jpg</video:thumbnail_loc><video:duration>149</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/describe-your-theme-info-file</loc><lastmod>2024-07-12T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Describe Your Theme with an Info File</video:title><video:description>Info files, aka _THEMENAME.info.yml_ files, provide Drupal with metadata about your theme, the features it supports, and the regions that it defines. All themes are required to have a _THEMENAME.info.yml_ file, and creating one is generally the first step you&#039;ll take when creating a new theme.

In this tutorial we&#039;ll:

- Create a new _.info.yml_ file and define a new theme
- Review the required key/value pairs of an _.info.yml_ file
- Enable our new theme in the Drupal UI

By the end of this tutorial you&#039;ll be able start a new theme by creating the required _\*.info.yml_ file and better understand its contents.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/yyAlRhaXgZYC8t_uJoNn-BuxYVkS6z5TH5GPpIJMCBQ.jpg.jpg</video:thumbnail_loc><video:duration>553</video:duration><video:publication_date>2016-06-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/template-files-drupal-themes</loc><lastmod>2024-11-08T18:54Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/were-hiring-designer</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/determine-base-name-template</loc><lastmod>2023-12-04T20:13Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/discover-existing-theme-hook-suggestions</loc><lastmod>2025-01-09T20:30Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-base-themes-stable-and-classy</loc><lastmod>2022-02-24T00:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/using-javascript-drupal</loc><lastmod>2024-11-08T19:50Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/load-javascript-drupal-drupalbehaviors</loc><lastmod>2021-02-11T23:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/fast-default</loc><lastmod>2023-01-12T21:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/inspect-variables-available-template</loc><lastmod>2025-08-14T20:42Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Inspect Variables Available in a Template</video:title><video:description>Knowing how to inspect the variables available within a template file enables you to discover all of the dynamic content in a Twig file, not just that which is already being used.

In this tutorial, we&#039;ll learn how to use `{{ dump() }}`, `kint()`, `vardumper()`, and Xdebug to inspect variables in a template file.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-Oi3t855ViJExh7jxI0qIQxPH3eiOdaWL3xsOVE9ugM.jpg.jpg</video:thumbnail_loc><video:duration>616</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/download-install-and-uninstall-themes</loc><lastmod>2023-02-16T00:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Download, Install, and Uninstall Themes</video:title><video:description>Before visitors to your site will see the pages displayed using a theme the theme needs to be installed and set as the default. This is true whether it&#039;s a custom theme you wrote yourself, or a contributed theme you downloaded from Drupal.org. Installing themes can be done either via the user interface, or using Drush. Once a theme is installed, users of your site will see all public facing page rendered using that theme. Themes that are no longer being used can safely be uninstalled.

In this tutorial we&#039;ll:

- Demonstrate how to install a theme and make it the default using both the UI and Drush.
- Learn to differentiate between installed themes, default themes, and uninstalled themes.
- Configure our site to use an administration theme for the administrative pages.

By the end of this tutorial you should be able to install a theme and make it the one visitors to your site see by default.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BF9VYpB2xtj6eelf17RO1RQCn6CpXwXdcZYZkF3jyqQ.jpg.jpg</video:thumbnail_loc><video:duration>251</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-javascript-drupal</loc><lastmod>2024-07-17T22:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/loops-and-iterators-twig</loc><lastmod>2024-10-10T18:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-basics-jumpstart-series</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/make-strings-translatable</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/make-your-theme-translatable</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/modernizrjs-theme-or-module</loc><lastmod>2023-06-01T22:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/override-template-file</loc><lastmod>2024-01-31T19:54Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Override a Template File</video:title><video:description>This tutorial demonstrates how to locate the template file that is currently being used to render an element and override it in your own theme. This is an important skill for anyone who wants to make changes to Drupal&#039;s default HTML markup.

In this tutorial we&#039;ll:

- Override the _node.html.twig_ template in our theme
- Make changes to the markup
- Create a content-type-specific template override like _node--CONTENT_TYPE.html.twig_

By the end of this tutorial you should be able to modify the HTML markup used to display a node, or any other element of the page generated using a template file.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2CzL7ey-1PR-BUvWfCTNm4TBYbAT5t54oGEcZGi-kjo.jpg.jpg</video:thumbnail_loc><video:duration>474</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/print-values-field-loop</loc><lastmod>2023-02-17T00:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Print Values from a Field with a For Loop</video:title><video:description>The ability to loop over an array of values in a Twig template and print out each value individually is an important skill for anyone developing themes for Drupal. Common scenarios include: loop over the values of a multiple value field; iterate through a list of links; and display error messages at the top of forms. This tutorial will provide an example of using the Twig `for` function to iterate over a list, or a subset of a list.

In this tutorial we&#039;ll cover how to:

- Output values from a multi-value field in an unordered list.
- Add first and last classes to the first and last items in a list by using the Twig `loop` variable.

By the end of this tutorial you should be able to print out the values of an array as individual list items using a loop in Twig.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/MbL5U32QO3fJg1L7mU7AsZAQhRAweaUSDVAAiExmXBk.jpg.jpg</video:thumbnail_loc><video:duration>260</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/regions</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Regions</video:title><video:description>Themes define the regions that are available for site administrators to place blocks in, creating a layout framework within which the components that compose a page can be placed. As a theme developer you&#039;ll need to determine what regions are necessary to accommodate your design&#039;s layout, while also ensuring it&#039;ll work with the way Drupal uses blocks to place content onto the page. Deciding what regions to create requires knowledge of how Drupal works and a clear vision of the design you&#039;re trying to achieve.

In this tutorial we&#039;ll:

- Explain what regions are and how they relate to themes
- Describe how regions are handled internally within Drupal
- Demonstrate things to keep in mind when planning the regions for your custom theme

By the end of this tutorial you should be able to describe what a region is, explain how Drupal themes use regions to place content, and get started dissecting your own designs into regions.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EL8jiq952xquEi7YntS0n1gr4E7KLlcaoxfT2R5PG9M.jpg.jpg</video:thumbnail_loc><video:duration>657</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/responsive-image-module-overview</loc><lastmod>2023-03-22T01:10Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Responsive Image Module Overview</video:title><video:description>The Responsive Image module provides a process for transforming images uploaded through image fields into responsive images. This is accomplished through the configuration of responsive image styles. The configuration form for adding and editing responsive image styles is quite extensive. In this tutorial, we&#039;ll go through this form and learn what each option entails. By the end of this lesson, you should have a good understanding of the various options in the responsive image style configuration form.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/C2mM0hVSSHTKDE1wNU4sta1fEU58_V6QOhcoZF9V2D4.jpg.jpg</video:thumbnail_loc><video:duration>635</video:duration><video:publication_date>2017-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/responsive-image-style-use-cases</loc><lastmod>2021-02-11T23:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-responsive-image-style-viewport-sizing</loc><lastmod>2021-01-09T02:21Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Responsive Image Style for Viewport-Sizing</video:title><video:description>In this tutorial, we&#039;re going to add a responsive image style to an image field on the Article content type. This will add the `srcset` and `sizes` attributes to the output `&lt;img&gt;` element, providing media conditions, width descriptors, and a set of image sources for the browser to choose from, depending on the user device&#039;s viewport size.

This solution, especially when used in conjunction with CSS, will provide flexible, fluid, and faster-loading images for your site, and will work for probably 80% of use cases. It does not provide &quot;art direction&quot;, that is, making cropping, aspect ratio, or orientation changes to an image. This solution also provides for different display-densities, like 1.5x and 2x image sources without the need for display-density descriptors.

Another benefit of this solution is that it uses the Responsive Image module&#039;s breakpoint configuration file, so there is no need for you to [create a breakpoint file](/tutorial/what-breakpoint-yaml-file) in your theme to implement this flavor of responsive image style.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/TH3axqbkGF_1WVP5qyU0mV1chRXbMHShjMUE0TbeD6U.jpg.jpg</video:thumbnail_loc><video:duration>1058</video:duration><video:publication_date>2017-03-30</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/how-find-route-drupal</loc><lastmod>2025-11-05T02:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-server-side-settings-drupalsettings</loc><lastmod>2025-12-02T23:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/string-manipulation-javascript</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/structure-theme</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Structure of a Theme</video:title><video:description>Each theme is a collection of files that define a presentation layer for Drupal. While only a _THEMENAME.info.yml_ file is required, most themes will contain other files as well. Some are Drupal-specific, and need to follow a strict naming convention and be placed in the appropriate place for Drupal to find them. Others are standard front-end web assets like CSS, JavaScript, and image files that can be placed anywhere within the theme&#039;s code.

In this tutorial we&#039;ll learn about:

- The various types of files you can expect to find in a theme directory
- Where in the Drupal code base your theme directory should live
- Keeping the directory and all the files within organized

By the end of this tutorial you should be able to explain where a Drupal theme should be placed in a project&#039;s code base, and the types of files one can expect to find in a theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/fnaL1jcbqeRYpFaurYReWXYH7zDShjtcUDspyyYWzWU.jpg.jpg</video:thumbnail_loc><video:duration>462</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theme-inheritance-base-themes</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Theme Inheritance with Base Themes</video:title><video:description>Custom themes in Drupal must be configured to inherit settings, templates, and other assets from a parent theme. Which base theme you use is configurable. This allows theme developers to use a different set of markup as the starting point for their theme, organize various theme assets into a more maintainable structure, and more. All of this is made possible because of how Drupal&#039;s theme layer uses a chain of inheritance when assembling all the parts of a theme.

Base themes are also a powerful way to encapsulate standards and best practices into a reusable code base. You&#039;ll find dozens of contributed base themes on Drupal.org that can serve as a great starting point, especially if you&#039;re planning to work with an existing design framework like Bootstrap or Susy Grids. Or if you want to leverage modern JavaScript bundling without setting up Webpack on your own.

In this tutorial we&#039;ll:

- Learn what base themes and subthemes are
- Look at a few examples of template inheritance and how that works
- Discuss some use cases for theme inheritance

By the end of this tutorial you&#039;ll know how to declare the base theme that your theme builds upon.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/rluS2N04X5YE3fw77fMRnl-wFL6bkwkwmvN0w2pnK1c.jpg.jpg</video:thumbnail_loc><video:duration>523</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/theme-settings-overview</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-drupalt-translatable-strings-javascript</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-links-twig-template-file</loc><lastmod>2025-11-04T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/twig-drupal</loc><lastmod>2025-11-04T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Twig in Drupal</video:title><video:description>Twig is the default template engine for Drupal. If you want to make changes to the markup that Drupal outputs you&#039;re going to need to know at least some Twig. In this tutorial, we will outline the role that Twig now plays in Drupal, how Twig impacts the theming experience, and where to find additional resources for learning Twig.

At the end of this lesson, you&#039;ll be able to:

- Describe the role that Twig plays in creating Drupal themes
- Explain how Twig impacts the theming experience in Drupal
- Locate additional resources for learning Twig</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/m16zGjnnFwC54BqD2XROi-1pcAdVMtHRFvt0ZV0EUD8.jpg.jpg</video:thumbnail_loc><video:duration>652</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/twig-filters-and-functions</loc><lastmod>2025-12-03T23:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-writing-hello-world-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/twig-syntax-delimiters</loc><lastmod>2025-11-04T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Twig Syntax Delimiters</video:title><video:description>To read a Twig template file, you&#039;ll need to recognize Twig&#039;s syntax delimiters. Twig has three syntax delimiters: one for printing out variables, another for performing actions or logic, and lastly, one for comments, also used for _docblocks_.

In this tutorial we&#039;ll:

- Explore each of Twig&#039;s 3 syntax delimiters.
- Show examples of each from Drupal&#039;s core template files.

By the end of this tutorial you should be able to recognize each of Twig&#039;s syntax delimiters and understand what the engine will do when it encounters them.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3J1xuadFWOkyKHRHF5kQ6IHR0uBIPH16ja9nfRlJWQw.jpg.jpg</video:thumbnail_loc><video:duration>247</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/twig-template-inheritance</loc><lastmod>2025-11-04T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Twig Template Inheritance</video:title><video:description>More often than not, templates in a theme share common elements: the header, footer, sidebar, or more. In Drupal, themes created with a Twig template can be decorated by another one. This template inheritance allows you to build a base &quot;layout&quot; template that contains all the common elements of your layout defined as blocks. A child template can extend the base layout and override any of its defined blocks. This helps prevent code duplication, and keeps your theme more organized.

This tutorial is for theme developers who want to reduce code duplication in their themes, or anyone seeking to better understand how Twig template inheritance works. We&#039;ll cover:

- What the Twig `block` and `extends` tags do
- An example use-case for template inheritance
- How to extend a Twig template from another theme or module
- How to include other Twig templates</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/vso3lylGQbh9f2JcTq8S1Wrk1hSD4-Dl9UnpqJ-h-MA.jpg.jpg</video:thumbnail_loc><video:duration>378</video:duration><video:publication_date>2016-06-22</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/whitespace-control-twig</loc><lastmod>2025-11-04T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/underscorejs-theme-or-module</loc><lastmod>2023-01-27T01:12Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-base-theme</loc><lastmod>2024-08-13T18:04Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>Use a Base Theme</video:title><video:description>Make your theme a subtheme of a _base_ theme, allowing it to inherit all the base theme&#039;s templates and other properties. When creating Drupal themes it is common to use the Classy theme provided with Drupal core as a base theme to jumpstart your development.

In this tutorial we&#039;ll learn how to:

- Use the `base theme` key in our theme&#039;s _THEMENAME.info.yml_ file
- Make our Ice Cream theme inherit from the Classy theme, or any other theme

By the end of this tutorial you should be able to tell Drupal that your theme is a child of another theme and should inherit all of the parent theme&#039;s features.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/zD8Ru_sVTuMe5nC3DexqV1NWK1mzWJYSqe2H-0WTn7k.jpg.jpg</video:thumbnail_loc><video:duration>366</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/use-drupaltheme-html-markup-javascript</loc><lastmod>2025-12-02T23:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/standardize-your-javascript-eslint</loc><lastmod>2024-08-05T13:02Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-asset-libraries</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-preprocess-functions</loc><lastmod>2023-01-26T00:12Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Preprocess Functions?</video:title><video:description>Preprocess functions allow Drupal themes to manipulate the variables that are used in Twig template files by using PHP functions to _preprocess_ data before it is exposed to each template. All of the dynamic content available to theme developers within a Twig template file is exposed through a preprocess function. Understanding how preprocess functions work, and the role they play, is important for both module developers and theme developers.

In this tutorial we&#039;ll learn:

- What preprocess functions are and how they work
- The use case for preprocess functions
- The order of execution for preprocess functions

By the end of this tutorial you should be able to explain what preprocess functions are and the role they play in a Drupal theme.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/84HZg2wr2rJLrxrmoIqU3mEPV1HRRG8fkiVIaggAvig.jpg.jpg</video:thumbnail_loc><video:duration>376</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/what-are-template-files</loc><lastmod>2023-06-28T21:49Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Template Files?</video:title><video:description>Template files are responsible for the HTML markup of every page generated by Drupal. Any file ending with the _.html.twig_ extension is a template file. These files are composed of standard HTML markup as well as tokens used by the Twig template engine to represent dynamic content that will be substituted into the HTML markup when the template is used. As a theme developer, you&#039;ll work with this a lot.

In this tutorial we’re going to learn about:

- What template files are, and how they fit into the big picture of creating a theme
- How template files are used in order to allow theme developers to modify the HTML markup output by Drupal
- Naming conventions for, and specificity of, template files</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Q6X0uCCmuq5hwEEnUYWR14-gNEHztD6_UuZPRBlwQyQ.jpg.jpg</video:thumbnail_loc><video:duration>700</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-jumpstart-project</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/what-theme</loc><lastmod>2021-02-11T23:52Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Is a Theme?</video:title><video:description>Themes are the part of Drupal that you, and anyone else visiting your Drupal powered application, see when they view any page in their browser. You can think of a theme as a layer, kind of like a screen, that exists between your Drupal content and the users of your site. Whenever a page is requested Drupal does the work of assembling the content to display into structured data which is then handed off to the presentation layer to determine how to visually represent the data provided.

Drupal themes are created by front-end developer. Frequently referred to as _themers_, or _theme developers_. Themes consist of standard web assets like CSS, JavaScript, and images, combined with Drupal-specific templates for generating HTML markup, and YAML files for telling Drupal about the file and features that make up each individual theme.

In this tutorial we&#039;ll:

- Explain what a Drupal theme is.
- Explain the role of a Drupal themer in the process of building a Drupal site.
- Get a high level overview of the types of files/code that themes are made of.

By the end of this tutorial you should be able to explain what a Drupal theme is, and the kind of work a Drupal theme developer will be expected to do.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/85N9qD2xS-egRlp1R0Ejde5O-kzC3MjJHmT0CynQnrQ.jpg.jpg</video:thumbnail_loc><video:duration>236</video:duration><video:publication_date>2016-02-24</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/wrap-your-custom-javascript-closure</loc><lastmod>2021-01-20T20:18Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-console</loc><lastmod>2024-07-12T21:59Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-drush-using-composer</loc><lastmod>2025-10-21T16:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-filter-criteria-view</loc><lastmod>2020-12-09T02:02Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add Filter Criteria to a View</video:title><video:description>In this tutorial, we&#039;ll walk through the process of adding and configuring filters and adding a filter group.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2rXQO2E9sz2UDc5aYluQdbPNk1QL3xfnZYTK7RWtlBE.jpg.jpg</video:thumbnail_loc><video:duration>380</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-sort-criteria-view</loc><lastmod>2022-01-26T01:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add Sort Criteria to a View</video:title><video:description>In this tutorial, we&#039;ll walk through the process of adding and configuring sort criteria to a view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/1sogA0PpjDcRYelEDggYdCp1YGpfHyjGc883UXvX8nA.jpg.jpg</video:thumbnail_loc><video:duration>118</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/create-page-contextual-filter</loc><lastmod>2021-07-14T20:00Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Create a Page with a Contextual Filter</video:title><video:description>In this tutorial, we&#039;ll add and configure a contextual filter for a view. Our _Baseball Awards_ **content type** has a field _Year_. We&#039;ll make it possible for a page to be dynamically created on our site that contains the year and lists the awards for that specific year. To do this, we&#039;ll add a contextual filter to the _Baseball Awards_ **view** that will allow visitors to filter the list of awards by the award year. We&#039;ll also add a block using the summary view contextual filter configuration, which visitors can use to view results for specific years.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/-UYZEyu45Xf2oqZGjchLdLtPKGbAn6I5Hzn4Ee3avB4.jpg.jpg</video:thumbnail_loc><video:duration>629</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/add-rest-endpoint-views</loc><lastmod>2020-12-09T01:54Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add a REST Endpoint with Views</video:title><video:description>One of the ways you can create a REST endpoint in Drupal is by using Views. In this tutorial, we&#039;ll add a REST endpoint display to a view of baseball players. We&#039;ll examine and configure settings that are unique to the REST endpoint display.

By the end of this tutorial you should be able to:

- Add a REST endpoint display to a view
- Understand how to configure settings for an endpoint</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mYkXWIV_m6e_ItRBVxzld3SZ-2fbuhDKgZcbW5uRpUg.jpg.jpg</video:thumbnail_loc><video:duration>273</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/expose-filter-criteria-users-views</loc><lastmod>2020-12-09T02:04Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Expose Filter Criteria to Users in Views</video:title><video:description>Instead of providing multiple views with different filter criteria, consider empowering your users by exposing filter criteria as an interactive form. You can even configure the forms to use AJAX to refresh results. In this tutorial, we&#039;ll walk through the process of adding and configuring exposed filter or sort criteria in a view.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Z8KAVaaXzfIXHvsmM8B58nm39zSn46DzYZZ4eHqCRNE.jpg.jpg</video:thumbnail_loc><video:duration>207</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/blog/now-hiring-drupal-trainers</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/expose-sort-criteria-users-views</loc><lastmod>2021-10-28T11:36Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Expose Sort Criteria to Users in Views</video:title><video:description>Like exposed filters, we can expose sort criteria to the site visitor. Exposing sort criteria gives the visitor more control over the list of content they are viewing. In this tutorial, we&#039;ll configure our view of baseball players to allow visitors to sort the list in different ways by adding several exposed sort criteria.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/OQeaGvMj445O0yEaiXxHNcHQp5LSb1NVQ2XrY7B5qfE.jpg.jpg</video:thumbnail_loc><video:duration>388</video:duration><video:publication_date>2019-12-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-contextual-filters-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-exposed-filter-criteria-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-exposed-sort-criteria-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-filter-criteria-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-relationships-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-sort-criteria-views</loc><lastmod>2020-09-30T23:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/views-api-drupal</loc><lastmod>2024-11-08T19:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-23-alex-pott-and-working-drupal-core</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-theming-views</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-relationship-view</loc><lastmod>2020-12-09T02:10Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Add a Relationship to a View</video:title><video:description>Now that you [understand the purpose of relationships in Views](/tutorial/overview-relationships-views), let&#039;s add a relationship to a view so that we can access and display a field value from a related entity. 

In this tutorial, we&#039;ll modify the _Player Awards_ view to add a relationship to the player that received the award. Then we will add a field that belongs to the player content that would normally not be available to the view without our new relationship.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BYixmO8Yrsf_IffZxgnLLfBei43Soja8_diewQDAeug.jpg.jpg</video:thumbnail_loc><video:duration>347</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/override-views-wrapper-template</loc><lastmod>2023-03-14T22:59Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Override a View&#039;s Wrapper Template</video:title><video:description>Now that we understand what templates are and how we can use them, let&#039;s override some templates! In this tutorial we&#039;ll copy the views wrapper template to our theme and override it so that we can customize the markup for the Baseball Players view. Then we&#039;ll modify the template so that our view&#039;s pager appears both above and below our table of players.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wSkz5IMplHvk9FX_Apt032FP5vfcWhsHlCaZ9OK9asI.jpg.jpg</video:thumbnail_loc><video:duration>221</video:duration><video:publication_date>2019-12-16</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/set-demo-site-views-and-content</loc><lastmod>2025-02-08T00:35Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-access-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-area-handler-plugin</loc><lastmod>2024-10-07T16:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-relationships-between-2-tables-views</loc><lastmod>2024-09-13T22:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/expose-custom-database-table-views</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-view-after-render-process</loc><lastmod>2024-09-13T22:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-view-its-rendered</loc><lastmod>2024-09-18T20:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-building-fields-and-views</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-query-used-view</loc><lastmod>2024-09-13T22:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-views-api-drupal</loc><lastmod>2024-09-13T22:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-build-and-render-cycles-views</loc><lastmod>2024-09-18T20:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/expose-custom-entities-views</loc><lastmod>2023-08-11T21:39Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-filter-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-sort-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-views-field-handler-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-views-plugins</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-pseudo-field-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-custom-views-style-plugin</loc><lastmod>2024-10-18T23:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/web-services-drupal</loc><lastmod>2025-09-12T00:37Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/detect-presentation-your-data-model</loc><lastmod>2022-03-16T00:26Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/api-authentication-and-authorization</loc><lastmod>2025-09-12T20:14Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/automatic-documentation-schemata</loc><lastmod>2024-08-28T15:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/separation-concerns-content-vs-presentation</loc><lastmod>2019-07-12T22:04Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Separation of Concerns: Content vs. Presentation</video:title><video:description>Traditional Drupal development using the [render pipeline](/tutorial/render-pipeline) allows you to ignore the pitfalls of mixing content and presentation logic in your data model. In a scenario with multiple distribution channels, this separation becomes of critical importance.

In this tutorial we will learn how to:

- Understand the importance of presentation and content separation (delivering clean content, not caring about how to show that content)
- Develop strategies to avoid these presentational problems with minimal damage to the content API

By the end of this tutorial you&#039;ll have a better understanding of why keeping presentation data out of your content model is important, and some tips for doing so.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tnHs1sWsQEpE5c6f15VDgfAbzk_PivDzNVpAdORdL8I.jpg.jpg</video:thumbnail_loc><video:duration>347</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/access-api-browser-cross-origin-resource-sharing</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/web-service-documentation</loc><lastmod>2019-10-15T02:02Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Web Service Documentation</video:title><video:description>When you are implementing an HTTP API for a decoupled project, one of the critical, but often overlooked, aspects is the API documentation. Documenting your API will allow front-end developers (and you six months from now) to learn how to use that particular API.

In Drupal, there are several modules that can read your site configuration and generate documentation for you automatically.

In this tutorial we&#039;re going to:

- Learn about the importance of good documentation.
- Decide whether or not to use an existing specification for our API such as JSON:API or GraphQL.
- Review options for automatically generating documentation.

By the end of this tutorial you&#039;ll be able to decide whether or not using an existing documentation specification is a good fit for your project, and choose an option based on those available for use with Drupal.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/wjNN8h5nAgRshDQqDYqoSYbwrVf9EESY85n2tRv7FZU.jpg.jpg</video:thumbnail_loc><video:duration>261</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-collections</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Collections</video:title><video:description>JSON:API includes a way to request a list of entities of a given resource from the server. Collections are the best way to find content based on filters, and to build listings into the consumers. Moreover, collections can be combined with all the options you can apply to a single resource, like [sparse fieldsets](/tutorial/jsonapi-sparse-fieldsets) and [includes](/tutorial/jsonapi-includes).

In this tutorial we&#039;ll:

- Learn about what collections are in JSON:API
- Learn how to request, sort, and paginate lists of content

By the end of this tutorial you should know how to retrieve a list of resources from the JSON:API server, and how to optionally sort and paginate the items in the list.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Y99aBEgz9Z9sc_4PJ2aBvX281pNYPPqTjcNwMZYc0sI.jpg.jpg</video:thumbnail_loc><video:duration>959</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-post-requests-create-entity</loc><lastmod>2023-01-25T23:51Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-error-handling</loc><lastmod>2024-06-18T21:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-24-coderdojo-and-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-filtering-collections</loc><lastmod>2022-03-11T00:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Filtering Collections</video:title><video:description>[Collections](/tutorial/jsonapi-collections) are a very powerful feature because they allow us to access multiple items at the same time. However, in many situations we do not want to access all the entities of a given type, but only the ones that meet some specific criteria. In order to reduce the set of entities in the collection to the ones we care about, we use filters.

In this tutorial we will:

- Look at the `filter` query string parameter and how it can be used with JSON:API collections
- Learn how to use filters in combination with the JSON:API module for Drupal to reduce the list of entities in a collection 

By the end of this tutorial you should be able to request a list of entities in the form of a JSON:API collection and filter that list to include only the entities that match a specific set of requirements.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/8jEPK2wDtl_Q5nvdH_e_dTqYLDCPOgJzPelrgFpEm0s.jpg.jpg</video:thumbnail_loc><video:duration>224</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-includes</loc><lastmod>2019-07-12T22:04Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Includes</video:title><video:description>Embedding resources at the consumer&#039;s demand is one of the crucial features of a modern API. We mentioned in [Modern Web Services with JSON:API and GraphQL](/tutorial/modern-web-services-jsonapi-and-graphql) that multiple round trips to the server is harmful for performance. This issue can be overcome by making a request that embeds any required related resources into the response for the resource we&#039;re retrieving.

In this tutorial, we&#039;ll learn how to use JSON:API&#039;s `include` parameter to embed resources in a response.

By the end of this tutorial, you should be able to make a single request that retrieves multiple embeded resources in order to improve the performance of your application when interacting with a JSON:API server.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/x99XvvZR6bLTiXrXG5d2wYyZ-yV_sC9oAsu-pFq7kOg.jpg.jpg</video:thumbnail_loc><video:duration>356</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/install-jsonapi-module</loc><lastmod>2022-03-29T01:00Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Install JSON:API Module</video:title><video:description>The JSON:API module is our recommended starting point for creating REST APIs with Drupal. JSON:API module is now part of Drupal core as of 8.7, so installing the module no longer requires a separate download step.

In this tutorial we&#039;ll:

- Walk through installing the JSON:API module for Drupal
- Look at what you get out of the box with the JSON:API module

By the end of this tutorial you should be able to install the JSON:API module, and know what tools it provides you with.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xx-bvOoe9BXqdPioQFWpR-X4Df3u-gtw5XpETCmhydQ.jpg.jpg</video:thumbnail_loc><video:duration>77</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-filters-nested-relationships</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Filters on Nested Relationships</video:title><video:description>Includes and filters are really powerful features. When combined together you can achieve almost any query your consumer application needs. _Fancy filters_ we mentioned [in a previous tutorial](/tutorial/jsonapi-filtering-collections) allow us to filter a collection based on fields of related entities, in addition to the fields directly under that entity.

In this tutorial we will:

- Learn about filtering based on data in related resources
- Filter based on multiple conditions and multi-value fields
- Demonstrate how to filter a collection of articles based on author or tags

By the end of this tutorial you should be able to use nested filters in conjunction with relationships to further refine the list of content returned in a JSON:API collection.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/RbiZRRUAAFJCgLTVS_queQQ3xzyzUKRUWIC1CgMiaqU.jpg.jpg</video:thumbnail_loc><video:duration>356</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-relationships</loc><lastmod>2020-06-09T17:20Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Relationships</video:title><video:description>Drupal allows for a rich data model where entity reference fields can be used to relate any number of different items together in different ways. The data models that you can build with Drupal are often prolific in relationships, which means we need a way to handle these in our API. While Drupal treats a field with a string, and a field with an entity reference the same, JSON:API distinguishes between attributes and relationships.

In this tutorial we&#039;ll:

- Look at how JSON:API represents relationships between two or more resources
- How to distinguish between an attribute and a relationship in a response object
- Learn about what information is available for each relationship and how we can use it

By the end of this tutorial, you should have a better understanding of how the JSON:API specification represents relationships modeled using Drupal entity reference fields.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/2m8A5qzjnGcvagCiRe14sZt7djImrAw5CvF1Grq96XU.jpg.jpg</video:thumbnail_loc><video:duration>244</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-delete-requests-delete-entity</loc><lastmod>2019-07-12T22:56Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-resource-requests</loc><lastmod>2019-07-12T22:04Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Resource Requests</video:title><video:description>Being able to retrieve resources from an API is a fundamental first step.

In this tutorial we will learn how to:

- Issue an HTTP request to extract information about a node from the JSON:API server
- Examine the response from the server

By the end of this tutorial you should know how to use an HTTP Get request to return a resource from the JSON:API server, and know what the default response for the resource will contain.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/DzfI2422XjDWKf-IREIbiITsydURECO8yXClVl-NQnw.jpg.jpg</video:thumbnail_loc><video:duration>117</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-security-considerations</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-sparse-fieldsets</loc><lastmod>2020-02-03T20:29Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>JSON:API Sparse Fieldsets</video:title><video:description>By default, the JSON:API returns all the available data for an object in its response. Using JSON:API _sparse fieldsets_ you can increase the performance of your consumer application by reducing the fields in the returned response object to just those that you need.

In this tutorial, we will learn how to reduce the output to get *exactly* the information that we need from the API.

This is one of the most important features of modern APIs like JSON:API.

By the end of this tutorial, you&#039;ll know what sparse fieldsets are, the role they fulfill, and how to use them when requesting data from a JSON:API server.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/c64CFRIpxkKSY33qga-vTql0vjU5T-0PSGB6YWj3gtk.jpg.jpg</video:thumbnail_loc><video:duration>144</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/jsonapi-patch-requests-update-entity</loc><lastmod>2022-03-17T17:43Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-reviewing-our-job-board-project</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/modern-web-services-jsonapi-and-graphql</loc><lastmod>2022-03-18T03:08Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Modern Web Services with JSON:API and GraphQL</video:title><video:description>In the last several years REST has been the de facto standard for web services. However, there are several common problems when developing websites and digital experiences with the traditional REST implementations. Luckily, those issues have solutions, either complete or partial.

Modern web service specifications like [JSON:API](http://jsonapi.org) and [GraphQL](http://graphql.org) implement those solutions, although they differ slightly in their implementation.

In this tutorial we will learn about:

- The problems of traditional REST implementations
- Common solutions to those problems, and how JSON:API and GraphQL deal with them

By the end of this tutorial you&#039;ll be able to explain some of the common pitfalls of REST-based APIs, and how JSON:API and GraphQL address those issues.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/mnTH6d3o2dLOMPj_Ad14COlkElB7kVv87Lv_Dg9IIdQ.jpg.jpg</video:thumbnail_loc><video:duration>308</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/make-authenticated-request-using-oauth-2</loc><lastmod>2025-10-21T12:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/get-token-oauth-2-requests</loc><lastmod>2025-10-21T12:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-and-configure-simple-oauth</loc><lastmod>2025-12-04T00:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-web-services</loc><lastmod>2019-07-12T21:59Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>What Are Web Services?</video:title><video:description>The term _web services_ has been around for quite a while. Given that web services is such a broad topic, let&#039;s define what web services are and how we are going to refer to them throughout this series so we are all on the same page.

This tutorial is an introduction to web services that will help you:

- Learn what a web service is.
- Understand that this series focuses on HTTP web services, and mostly on REST principles.
- Get some examples of APIs in the wild and what type of consumers they have.

By the end of this tutorial, you&#039;ll be able to define what web services are, and how we&#039;ll use the term in the context of these tutorials.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/HCHKEYMafOvSeZmGvIWAGBSOfuLXefp1s3qD8xkIito.jpg.jpg</video:thumbnail_loc><video:duration>841</video:duration><video:publication_date>2017-10-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/topic/composer</loc><lastmod>2024-11-08T19:38Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/development-environments</loc><lastmod>2024-11-08T19:37Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/layouts</loc><lastmod>2025-08-26T22:43Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-using-views-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/back-your-drupal-site</loc><lastmod>2025-04-03T15:32Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/drupal-coding-standards</loc><lastmod>2024-12-04T00:06Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/comments</loc><lastmod>2025-10-06T17:41Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/configuration-api-developers</loc><lastmod>2025-05-23T21:42Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/content-modeling</loc><lastmod>2025-10-06T18:02Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/content-types</loc><lastmod>2025-08-28T18:57Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/content-moderation-and-workflow</loc><lastmod>2023-05-17T01:33Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/controllers</loc><lastmod>2024-11-08T19:57Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/css-drupal</loc><lastmod>2025-08-26T22:48Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/dependency-injection</loc><lastmod>2025-02-08T01:47Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/supporting-open-source-gittip-way</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/drupal-console</loc><lastmod>2024-07-18T22:27Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/drupal-documentation-and-learning-resources</loc><lastmod>2023-05-17T01:18Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/drush</loc><lastmod>2024-11-08T19:00Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/entities</loc><lastmod>2025-11-21T00:31Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/extend-drupal-modules</loc><lastmod>2024-12-03T23:59Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/fields-and-field-api</loc><lastmod>2023-05-17T01:33Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/git</loc><lastmod>2023-12-21T21:54Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/javascript-drupal</loc><lastmod>2025-08-26T22:40Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/phpstorm</loc><lastmod>2025-01-09T20:35Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/manage-files-images-and-other-media</loc><lastmod>2023-05-17T22:14Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/dont-just-learn-git-make-it-work-you</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/menus</loc><lastmod>2025-11-11T17:38Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/multilingual-sites</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/object-oriented-php</loc><lastmod>2025-11-12T21:04Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/routing</loc><lastmod>2025-02-08T01:31Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/search-engine-optimization-seo</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/security</loc><lastmod>2023-05-17T22:26Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/services</loc><lastmod>2025-02-08T01:43Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/views-module-drupal</loc><lastmod>2025-11-11T23:06Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/manage-and-synchronize-configuration</loc><lastmod>2024-12-04T00:08Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/blocks</loc><lastmod>2025-02-08T01:13Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-views-overrides-and-relationships</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/template-design-twig</loc><lastmod>2025-11-04T19:10Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/testing-drupal</loc><lastmod>2024-12-04T00:01Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/deployment-workflows</loc><lastmod>2024-12-04T00:06Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/debug-drupal-code</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/html-and-css</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/php</loc><lastmod>2024-12-04T00:09Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/javascript</loc><lastmod>2024-07-10T18:41Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/symfony</loc><lastmod>2024-10-04T18:02Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/users-roles-and-permissions</loc><lastmod>2025-11-08T01:24Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/episode-25-workflow-uh-what-it-good</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/web-services-and-decoupled-drupal</loc><lastmod>2024-12-03T23:58Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/yaml</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/drupal-community</loc><lastmod>2024-11-08T19:54Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/performance-and-scalability</loc><lastmod>2024-12-03T23:57Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/apply-create-and-manage-patches</loc><lastmod>2024-12-03T23:59Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/devel</loc><lastmod>2025-11-04T18:39Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/events</loc><lastmod>2024-11-08T19:56Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/contributing-drupal</loc><lastmod>2024-11-08T19:54Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/forms-form-api</loc><lastmod>2024-11-08T19:02Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/xdebug</loc><lastmod>2025-08-14T20:40Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/new-series-importing-data-migrate-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/caching-drupal</loc><lastmod>2024-12-10T21:36Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/update-custom-code-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/utility-functions-and-classes</loc><lastmod>2024-11-08T20:21Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/minor-version-and-security-updates</loc><lastmod>2024-12-04T00:07Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/hooks</loc><lastmod>2025-02-01T00:49Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/plugins-plugin-api</loc><lastmod>2025-02-08T01:45Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/upgrade-drupals-major-version</loc><lastmod>2024-11-05T23:58Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/import-data-migrate-api</loc><lastmod>2024-12-04T00:04Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/responsive-web-design</loc><lastmod>2024-12-03T23:58Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/change-drupals-appearance-themes</loc><lastmod>2025-08-26T19:40Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-migrate-module-orientation</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/drupal-system-requirements</loc><lastmod>2024-12-04T00:02Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/render-api-how-output-content</loc><lastmod>2025-08-26T22:49Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/search</loc><lastmod>2025-11-08T00:57Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/database-abstraction-layer</loc><lastmod>2024-12-04T00:05Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/taxonomy</loc><lastmod>2023-05-17T01:32Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/topic/docker</loc><lastmod>2024-11-08T19:45Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/topic/drupal-core-modules</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/guide/acquia-certified-drupal-site-builder-exam</loc><lastmod>2025-10-06T17:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/drupal-user-guide</loc><lastmod>2025-09-11T19:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-writing-custom-migration</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/guide/build-drupal-sites</loc><lastmod>2026-01-20T21:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/frontend-theming</loc><lastmod>2025-08-23T01:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/theming-cheat-sheet</loc><lastmod>2024-06-28T00:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/acquia-certification-exam-preparation</loc><lastmod>2025-10-06T19:25Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/acquia-certified-drupal-developer-exam</loc><lastmod>2025-10-06T18:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/acquia-certified-backend-specialist-exam</loc><lastmod>2025-10-06T19:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/develop-drupal-sites</loc><lastmod>2024-11-08T19:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/learn-drupal</loc><lastmod>2024-07-19T23:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/introduction-drupal</loc><lastmod>2024-03-05T23:37Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/getting-speed-drupal-8-webinar</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/guide/acquia-certified-drupal-front-end-specialist-exam</loc><lastmod>2025-10-06T19:05Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/develop-forms-drupal</loc><lastmod>2024-11-08T19:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/extend-or-alter-existing-css-and-javascript-asset-libraries</loc><lastmod>2023-05-03T23:23Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-27-drupalcon-prague-recap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-highwater-marks-limit-what-gets-imported</loc><lastmod>2023-05-06T01:13Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/track-changes-source-data-during-migration</loc><lastmod>2023-05-06T01:13Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-drupal-migration-planning-code-inventory</loc><lastmod>2023-08-03T18:27Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Drupal-to-Drupal Migration Planning: Code Inventory</video:title><video:description>Before you can migrate your Drupal 7 site to the latest version of Drupal you&#039;ll need to be able to build the features that make up the current site. Part of this is evaluating all the modules you&#039;ve got installed, figuring out what you&#039;re using them for, and if there&#039;s a version that&#039;s compatible with the latest version of Drupal along with a migration path.

I usually make a spreadsheet for this. But any list of the modules you’re currently using that allows you to keep track of how you plan to update them will work. You also want to keep track of where you are in the process of figuring that all out. Because it’s likely you’ll have some modules for which the path is clear, and others where it’s pretty murky and requires more in-depth research to find a path forward. Having a list means you can break that up into tasks, and ensure you’re not missing something. It&#039;ll also help you define when your migration is done as well as any final quality assurance (QA) tasks.

In this tutorial we&#039;ll:

- Start a list of the modules that make up our current site.
- Point to some tools that can help speed up the process of evaluating a module&#039;s readiness.
- Provide a set of questions that you can ask about each module you&#039;re using as part of your planning process.

By the end of this tutorial you should have a list of all the modules you&#039;re currently using, and some tools you can use to help you figure out how to move forward with each one.</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PqenKEc9QPYMj0NECPVaoRsNwDufgA-7ykf4KuDUBvE.jpg.jpg</video:thumbnail_loc><video:duration>355</video:duration><video:publication_date>2023-06-08</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/drupal-drupal-migration-planning-content-inventory</loc><lastmod>2023-08-10T21:10Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/upgrade-new-version-drupal-drupal-drupal-migration</loc><lastmod>2023-06-02T21:31Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-migration-lookup-plugin-reference-fields</loc><lastmod>2023-06-30T22:31Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/migration-map-tables</loc><lastmod>2023-06-30T21:47Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-migration-field-mapping</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drupals-caching-system</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-advanced-caching-acquia-cloud-hosting</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/analyze-drupal-site-performance-webpagetest</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/analyze-drupal-site-performance-lighthouse</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-content-delivery-networks-cdns-and-drupal</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/boost-drupal-performance-contributed-modules</loc><lastmod>2024-02-07T22:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/profile-drupal-site-apache-bench</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-benchmarking-and-performance-budgets</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/welcome-justin-our-team</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/set-advanced-caching-pantheon-hosting</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-core-web-vitals</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drupals-cache-modules-and-performance-settings</loc><lastmod>2024-02-07T22:57Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/extend-drupal-site-monitoring-contributed-modules</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-new-relic-drupal-performance-monitor</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/drupal-performance-profiling-tools-and-methodologies</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/profile-drupal-site-new-relic</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/debug-drupal-cache-misses-and-low-hit-rates</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-server-scaling</loc><lastmod>2023-07-13T23:24Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drupal-performance-and-scalability</loc><lastmod>2023-07-13T23:45Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-migrating-references-and-multi-value-fields</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/start-new-theme-starterkit</loc><lastmod>2024-11-12T22:16Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-routes-controllers-and-responses</loc><lastmod>2023-10-17T22:31Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-wysiwyg-and-line-editing</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/create-route-and-controller</loc><lastmod>2025-12-09T21:19Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-parameters-and-value-upcasting-routes</loc><lastmod>2023-12-05T02:53Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-access-checking-route</loc><lastmod>2024-02-21T19:22Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-dynamic-title-route</loc><lastmod>2023-10-10T00:34Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-parameters-route</loc><lastmod>2023-12-06T02:55Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/how-drupal-turns-request-response</loc><lastmod>2023-10-10T22:07Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/return-json-plain-text-and-other-non-html-responses</loc><lastmod>2023-10-10T02:28Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/theming-drupal-forms-twig</loc><lastmod>2023-10-10T21:03Z</lastmod><changefreq>never</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/sometimes-technology-isnt-always-our-friend</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/install-drupal-locally-ddev</loc><lastmod>2025-06-03T16:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-migrate-module-series</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/lint-your-code-phpcodesniffer</loc><lastmod>2025-04-10T20:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-coding-standards</loc><lastmod>2025-04-10T20:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-hookhelp</loc><lastmod>2025-03-13T21:35Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-update-hooks</loc><lastmod>2025-04-03T15:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-translatable-strings</loc><lastmod>2025-03-13T20:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-entity-api-and-data-storage</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-custom-validation-user-entities</loc><lastmod>2025-12-15T15:37Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/validate-user-input-settings-form</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-writing-secure-code</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-caching</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/episode-28-why-drupal-8-donkey-human-ant-and-chameleon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/define-weather-forecast-service</loc><lastmod>2025-02-05T16:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/cache-data-retrieved-weather-api</loc><lastmod>2025-02-21T22:34Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-render-api</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-custom-hello-world-block</loc><lastmod>2025-01-25T02:05Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-cache-context-and-tags-renderable-arrays</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-service-plugin</loc><lastmod>2025-02-10T17:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-settings-form-anytown-module</loc><lastmod>2025-11-13T22:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-using-and-improving-contributed-modules</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-contributing-your-custom-modules</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-configuration-api</loc><lastmod>2025-11-22T02:52Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/retrieve-and-update-weather-forecast-settings</loc><lastmod>2025-02-20T22:37Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-configuration-schema-and-default-values</loc><lastmod>2025-02-21T01:42Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-dependency-injection</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-entity-queries</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/update-entity-when-form-submitted</loc><lastmod>2025-02-27T01:10Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/reset-vendor-status-cron</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-info-file-module-mdg</loc><lastmod>2025-01-28T15:51Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-route-weather-page</loc><lastmod>2025-01-30T02:57Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-parameter-route</loc><lastmod>2025-01-31T01:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-form-controllers-and-form-life-cycle</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-two-new-series-media-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-service-controller</loc><lastmod>2025-12-09T20:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-parameter-upcasting-entities-routes</loc><lastmod>2025-02-28T18:49Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-form-editing-entity</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-controller-weather-page</loc><lastmod>2025-11-13T22:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/display-list-vendors</loc><lastmod>2025-03-01T01:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-field-api-and-fieldable-entities</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/read-entitys-field-values</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-block-plugin</loc><lastmod>2025-09-18T20:30Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/alter-user-registration-form</loc><lastmod>2025-12-15T15:32Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-data-types-drupal</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-29-translation-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-what-are-plugins</loc><lastmod>2024-10-18T22:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-custom-entity-types</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-fields-vendor-content-type</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/learning-more-and-getting-support</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-drupals-form-api</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-altering-existing-forms</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-menu-item</loc><lastmod>2025-01-31T01:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/save-form-data-submitted-user</loc><lastmod>2025-02-13T23:58Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-what-are-hooks</loc><lastmod>2025-06-10T19:47Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-controllers</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-getting-started-media-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-routes</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-services-and-container</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/set-your-development-environment</loc><lastmod>2025-10-21T14:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-php-namespaces-and-psr-4</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-anatomy-module</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/discover-hooks-and-their-documentation</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-template-file</loc><lastmod>2025-02-13T19:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-what-are-events</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-what-are-modules</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-drupal-development-environment</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/welcome-our-new-site</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-finding-drupal-documentation</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/install-drush</loc><lastmod>2025-10-21T14:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-how-drupal-builds-page</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/guiding-scenario</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-tools-module-developers</loc><lastmod>2025-01-09T20:36Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-template-files</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/output-content-using-render-api</loc><lastmod>2025-02-05T16:39Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-asset-libraries</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-css-and-javascript-modules-output</loc><lastmod>2025-02-05T23:54Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-themeable-output</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-30</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-internationalization-i18n</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/audience-and-approach</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-menu-items-and-links</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-permissions</loc><lastmod>2024-05-31T01:22Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-new-permission</loc><lastmod>2025-01-31T01:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-creating-custom-services</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/locate-and-identify-existing-services</loc><lastmod>2025-02-04T22:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/concept-testing</loc><lastmod>2024-05-02T20:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/configure-your-environment-run-tests</loc><lastmod>2025-03-05T22:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/learning-through-celebration</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/write-functional-test</loc><lastmod>2025-04-09T22:48Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/write-kernel-test</loc><lastmod>2025-04-08T23:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/write-unit-test</loc><lastmod>2025-03-13T20:45Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/short-intermission</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/fixing-things</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-text-formats-wysiwyg-and-media</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/things-i-learned-managing-my-first-project</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-wrapping-media-2x</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/goodbye-membership-holds</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-plugin-using-php-attributes</loc><lastmod>2024-11-06T21:21Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/php-attributes</loc><lastmod>2025-09-16T18:18Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-plugin-using-annotations</loc><lastmod>2024-11-06T21:30Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/implement-yaml-plugin</loc><lastmod>2024-10-18T00:02Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/upgrade-drupal-11</loc><lastmod>2025-04-04T15:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-going-design-finished-theme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/user-guide/install-ddev</loc><lastmod>2025-04-10T20:13Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/free-psd-theme-webinar</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/create-your-first-drupal-single-directory-component-sdc</loc><lastmod>2025-08-26T19:27Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-component-yaml-file-drupal-sdc</loc><lastmod>2025-09-16T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-component-twig-template</loc><lastmod>2025-09-16T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-component-module-render-arrays</loc><lastmod>2025-08-26T19:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-css-and-javascript-drupal-sdc</loc><lastmod>2025-08-26T19:20Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/add-twig-template-your-single-directory-component</loc><lastmod>2025-09-16T20:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/anatomy-drupal-single-directory-component-sdc</loc><lastmod>2025-09-16T20:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/few-bug-fixes</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/use-vite-start-decoupled-react-application</loc><lastmod>2025-09-11T23:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/understanding-props-and-slots-drupal-single-directory-components</loc><lastmod>2025-09-16T20:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/override-existing-single-directory-component</loc><lastmod>2025-09-16T20:08Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-dynamic-menu-links</loc><lastmod>2025-11-11T17:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/contententitytype-attribute-properties-reference</loc><lastmod>2025-11-12T02:09Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/overview-configuration-api-drupal</loc><lastmod>2025-12-03T19:17Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/using-entity-bundle-classes-site-specific-features</loc><lastmod>2025-12-08T18:01Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-drupal-recipes</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/careful-debug-syntax</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/tutorial/apply-recipe</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/define-new-config-action</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/use-config-actions-recipe</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/what-are-config-actions</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/tutorial/create-recipe</loc><lastmod>2026-01-20T16:41Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/contributing-time-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-css-prep-and-drupal-elements</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/dive-drupal-8-help-core-contribution-mentors</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-prepping-drupal-your-theme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-year</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/youre-back</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/introduction-restful-web-services-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-create-new-theme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/my-queue-and-billing-updates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/everyone-can-try-drupal-8-today</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-our-theme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/welcome-amber-and-joe</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/managing-your-membership</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-33</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/risk-and-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/getting-started-forms-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/configuration-management-developers</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-managing-media-assets-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-34</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/recent-site-updates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/media-explained-free-acquia-webinar</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/catching-community-train</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-navigate-many-settings-webform</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/our-new-project-management-process</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/your-first-restful-view-drupal-8</loc><lastmod>2025-08-04T08:04Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-35</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-webform-basics-wrap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-creating-image-galleries</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-36</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/exploring-new-drupal-8-display-modes</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-tame-images-and-audio-media-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-wrapping-media-youtube-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-37</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/webinar-building-apis-services-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-theming-code-documentation</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-building-web-services-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/block-system-finally-useful-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-getting-resourceful-web-services</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-38</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-take-your-web-services-next-level</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/questionnaire-confirms-designers-arent-clear-how-help-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/early-bat-gets-twice-training</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-wrapping-web-services</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/heartbleed-ssl-bug</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/hiding-form-fields-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-39</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/what-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/dupalizeme-podcast-episode-40</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/webinar-easily-create-maps-leaflet</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/look-inside-drupal-8s-block-plugin-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-41</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/lets-debug-twig-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-geocoding-addresses-and-mapping-multiple-locations</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/we-want-know-got-plans-learning-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-responsive-what-does-mean</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-42</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-build-product-review-website</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/guide-drupal-8-drupalcon-austin</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-add-ratings-and-style-product-reviews</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-43</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-i-illustrated-magic-drupal-eight-ball-video-tutorial</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-completing-product-reviews-website</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-using-drupal-event-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-external-libraries-galore</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-survey-insights</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/web-profiler-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-building-calendar-and-event-displays</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-managing-event-signups-and-concluding-case-study</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/wai-aria-requiring-alt-text-other-accessibility-features-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-using-drupal-manage-publishing-workflows</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-resources</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-editorial-workspaces-workbench</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-creating-publication-workflows</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-plugins-explained</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-has-all-hotness-so-can-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-get-started-field-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/guided-help-tours-drupal-8-sort</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-field-widgets-and-formatters</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/weve-launched-new-video-player</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/preparing-drupal-8-psr-4-autoloading</loc><lastmod>2025-09-16T19:12Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-free-icon-package</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/fresh-new-video-tutorials-building-sites-drupal-7-panels-views</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/privacy</loc><changefreq>yearly</changefreq><priority>0.1</priority></url>
<url><loc>https://drupalize.me/blog/welcome-betty-tran</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-45-keeping-drupal-news</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-extend-and-export-modules-level-your-panels-site-building</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/upgrading-drush-work-drupal-8-dev</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-ctools-style-plugins-create-your-own-panels-style-settings-ui</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-episode-46</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/awesome-support-now-more-awesome</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-php-tutorials-symfony-experts-knp-labs</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/head-back-school-our-new-student-discount</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-php-video-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-47-drupal-services-platform</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/unraveling-drupal-8-plugin-system</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-video-tutorials-drupal-7s-token-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/even-more-php-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-beta-so-close</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-hiring-0</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-48-demystifying-sprint</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/our-favorite-html-and-css-resources</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-add-responsive-tables-content-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-dependency-injection-namespaces-and-composer</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/professional-development-your-drupal-team</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-introduction-context-and-bean</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-brings-new-things-leaves-few-things-behind</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-49-drupalcon-amsterdam</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-using-drupal-build-multilingual-websites</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-configuring-content-translation-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-symfony-video-tutorials-plus-more-multilingual-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/tips-applying-todays-drupal-core-security-update-sa-core-2014-005</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/including-image-styles-your-drupal-8-theme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/using-remote-debugger-casperjs-and-phantomjs</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-50-drupalorg-initiatives</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-halloween-icon-set</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/controlling-css-classes-classy-theme-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-51-front-end-rapport</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-kicking-twig-and-wrapping-using-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/store-closed</loc><lastmod>2015-04-08T21:20Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/twig-filters-modifying-variables-drupal-8-template-files</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-more-twig-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-getting-started-responsive-web-design-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-core-now-more-fields</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-52-drupal-community-leadership</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/being-prepared-when-everything-goes-wrong</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-diving-responsive-web-design</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-continuing-php-beginners-now-databases</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-another-batch-responsive-web-design-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-53-coding-schools</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/embed-youtube-videos-media-and-media-internet-sources</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/adventures-porting-d7-form-module-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/changes-form-api-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-getting-started-testing-drupal-7-simpletest</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-forms-permissions-and-more-testing-drupal-7-simpletest</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-7-testing-wrap-ajax-simpletest-unit-tests</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-mysql-php-and-some-bonus-yaml</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-wrapping-php-part-3</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/node/489</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/terms-conditions</loc><changefreq>yearly</changefreq><priority>0.1</priority></url>
<url><loc>https://drupalize.me/blog/creative-process-scary-and-thats-ok</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-upgrade-path</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-54-d8-accelerate</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/enable-responsive-layouts-viewport-meta-tag</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/january-content-update</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-coding-standards-and-module-monday-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-55-restful-module</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/not-just-drupal-training-almost-video-production-company</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-survey</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/january-tech-update</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/error/404</loc><lastmod>2012-12-07T16:22Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/podcast-episode-56-drush-and-composer</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/responding-events-drupal</loc><lastmod>2024-01-25T00:29Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/write-hello-world-test-drupal-7-simpletest</loc><lastmod>2025-08-14T09:30Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/guide-drupal-8-drupalcon-bogota</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-multisite-series-plus-installing-drush-composer</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/panels-blocks-layouts-and-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/demo-docs</loc><lastmod>2016-12-07T13:50Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/podcast-episode-57-front-end-fundamentals-book-written-bots</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/february-tech-update</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-hands-drupal-multisite</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-looking-back-looking-forward</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/more-drupal-8-insights</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-no-58-drupal-console</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/welcome-blake-and-will</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-blocks-entities-and-more</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/recording-podcasts-creating-skype-o-saurus</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-extending-building-and-translating-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/creating-block-types-bean</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/peek-traits-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-59-drupalcon-bogota-recap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-your-tv</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/tutorial-vagrant-drupal-8-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-introduction-object-oriented-php</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-working-php-objects</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-access-control-type-hinting-and-constructors-php</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-update-march-2015</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-no-60</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/funding-core-development-d8-accelerate</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/backbonejs-and-underscorejs-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-improving-drupals-search-apache-solr</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-installing-apache-solr-and-search-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-displaying-search-results-apache-solr</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-further-refining-search-results</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-configure-apache-multiple-domains</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learning-debug-stop-making-assumptions</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/design-to-theme</loc><lastmod>2013-04-01T07:58Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-61-mental-health-and-open-source</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-introduction-domain-access</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-hands-domain-access</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-finishing-domain-access-and-bonus-tail-command</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/self-serve-group-memberships</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/get-notified-about-drupal-8-topic-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-drupalcon-los-angeles</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-contribute-translations-drupal-projects</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-62-distributed-design</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/mentored-sprints</loc><lastmod>2013-05-04T11:34Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/learning-debug-stop-thinking-and-look</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/help-drupal-8-and-win</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/trello-publication-workflow</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/installing-and-configuring-dreditor</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/monthly-update</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-63-syfy-project</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-podcast-64-drupalcon-los-angeles-redux</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/rich-snippets-google-search-part-1</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/create-offsite-backups-nodesquirrel</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/monthly-update-may-2015</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-65-web-accessibility</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/illustration-made-simple-shapes</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-introduction-project-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/estimation-contracts-and-traits-project-manager</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-working-people-large-projects</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-client-communications-project-kickoff</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-dealing-problems-qa-and-finally-launching-your-project</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/using-tail-debug-drupal-sites</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-66-project-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-update-june-2015</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/community-tools</loc><lastmod>2020-02-25T02:55Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/learning-drupal-8-boilerplate-code</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-using-mailchimp-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-send-email-using-mailchimp-drupal-7</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/php-classes-and-objects</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/load-testing-your-site-siege</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-no-67-seo-and-customer-data</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-object-oriented-php-part-2</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/tutorial-panels-blocks</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/podcast-episode-no-68-new-lullabotcom</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/speed-casperjs-tests-skipping-unnecessary-http-resources</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/configure-search-api-solr-use-stopwords-when-indexing-content</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-update-july-2015</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/pausing-our-podcast</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/video-manage-customers-redhen-crm</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/dynamically-access-php-object-properties</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-drupal-site-builder-danita-bowman</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-update-august-2015</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-integrate-nodejs-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-project-manager-alice-jensen</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/whats-new-drupalizeme-september</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-drupal-site-builder-scott-wilkinson</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-release-candidate-1</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-log-messages-drupal-8</loc><lastmod>2023-05-17T01:41Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-front-end-developer-tiffany-tse</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-project-manager-jeanne-cost</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-going-zendcon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-drupal-developer-kate-marshalkina</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-front-end-developer-helena-zubkow</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/home</loc><lastmod>2014-02-21T15:46Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/launchcode-education-partnership</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-prep-inheritance-abstraction-and-interfaces-php</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/role-based-learning-pathways</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-drupal-developer-mike-bell</loc><lastmod>2023-05-17T01:49Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/simple-drupal-7-drupal-8-migration</loc><lastmod>2025-08-05T07:33Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-project-manager-sean-lange</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/improved-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-800-released</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/join-hour-code-december-7-13</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/thanks</loc><lastmod>2020-05-06T13:21Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-decoupled-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-drupal-developers-four-kitchens</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/open-source-provides-new-opportunities</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/five-years-and-counting</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/whats-new-drupalizeme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/speak-http-drupalhttpclient</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-configuration-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-drupal-8-module-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/looking-back-looking-forward</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-our-drupal-8-theming-guide</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-6-end-life-and-migration-planning</loc><lastmod>2025-08-04T08:04Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-theme-hook-suggestions</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorial-format-feedback</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-explore-javascript-libraries-drupal-core</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/community-migrate-documentation-and-events</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/dig-drupal-8-drupalcon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/site-update-navigation-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/custom-drupal-drupal-migrations-migrate-tools</loc><lastmod>2025-08-06T07:28Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-theme-settings-and-clear-drupals-cache</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-migration-guide-part-1</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/whats-new-drupal-810</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/google-summer-code-2016</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-views-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-javascript-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-hands-drupal-8-lessons</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-7-critical-security-update-today</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/keeping-our-drupal-8-tutorials-date</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/why-learning-drupal-hard</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-migration-guide-additions</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/were-moving-pantheon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-mentoring-drupalcon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-custom-drupal-drupal-migrations</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-now-powered-pantheon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/psd-theme-faq</loc><lastmod>2023-08-11T00:38Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/weve-lowered-our-annual-price</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/our-2016-drupal-8-tutorial-roadmap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/another-version-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-object-oriented-php-part-4</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/catching-spirit-open-hardware</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/load-testing-our-site-pantheon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-drupal-8-initiatives</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/our-development-workflow-and-pantheon-multidev</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-1-year-old</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-exercise-series-building-drupal-sites</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/organization-inquiry/done</loc><lastmod>2016-02-22T18:45Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-extend-drupal-8-plugins</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updated-tutorials-configuration-management</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-extending-drupal-8-events</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-and-updated-acquia-exam-guides</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-entity-api-tutorials-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-extending-drupal-8-hooks</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/experimental-module-changes-coming-drupal-83</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/insiders-look-proposing-session-drupalcon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/were-going-midcamp-join-us-and-learn-about-drupal-theming</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalday-roma-hackathon-and-free-memberships</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/were-teaching-drupalcon-baltimore</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-hands-exercises-module-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-more-module-development-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-and-updated-tutorials-january-february-2017</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-dev-days-spain</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-breakpoints-responsive-images-and-core-themes</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/march-2017-tutorial-updates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/midcamp-2017-we-attended-we-sprinted-we-ate-donuts</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-render-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-baltimore-tuesday-april-25th</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-baltimore-wednesday-april-26th</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-baltimore-thursday-april-27th</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-events-may</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-memberships-drupal-8-project-maintainers</loc><lastmod>2024-02-07T11:05Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/frontend-united-2017-and-giveaway</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updates-drupal-83</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/field-api-tutorials-added</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/google-summer-code-2017-begins</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/hands-movie-project-exercises-are-complete</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-8-theming-workshop-twin-cities-drupalcamp</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-events-june</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/insiders-look-drupalcon-session-selection</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-and-tutorial-updates</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-events-july</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-events-august</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorial-date-indicators</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-free-series-coding-standards</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/variety-learning-choices-drupaleasy</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-july-and-august</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-guides-and-topic-pages</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-84-coming-soon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/2-new-guides-intro-drupal-and-learn-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/its-time-again-drupal-84-now-available</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-drupal-8-web-services</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-events-and-membership-giveaways</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/full-set-acquia-certification-exam-guides</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/now-hiring-part-time-tutorial-writers</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/help-us-choose-2018-workshop-topic</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/making-our-employee-handbook-public</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-web-services-post-patch-and-delete</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-development-docker</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-testing-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/videos-added-web-services-drupal-8-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-more-docker-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-8-form-api</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/adding-free-videos-drupal-8-user-guide</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-all-about-using-react-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/symfony-4-and-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/applying-lessons-user-guide-drupal-documentation</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/just-released-docker-symfony-4-composer-and-form-api-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-theme-drupal-8-drupalcon-nashville</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/training-workshops-twin-cities-drupal-camp</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/recent-updates-drupal-85-automated-testing-videos-and-more</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/weve-redesigned-our-guides</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-getting-started-react-and-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-and-updated-tutorials-deploying-configuration</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/tutorials-updated-drupal-86-and-drush-9</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/endeavors-old-and-new-year-end-reflection-sharing</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/hello-osio-labs</loc><lastmod>2025-08-06T07:29Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-search-api-and-solr-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/blazing-new-trails-gatsby</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-theme-hands-exercises</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/dive-drupalcon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-goes-washington</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/time-celebrate-hey-node</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/countdown-drupaleasy</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/consuming-rest-apis-drupal-8</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/my-drupaleasy-journey-minor-bumps-road</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/wish-we-were-there-our-drupalcon-amsterdam-picks</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/automated-enforcement-our-style-guide</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/api-site</loc><lastmod>2022-10-03T19:19Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/release-day-content-moderation-and-workflows</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-views-create-lists-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/our-evolving-infrastructure</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-we-archived-outdated-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/sandboxes-now-available-drupal-views-tutorials</loc><lastmod>2023-06-07T17:55Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/q1-tutorial-updates-drupal-88x</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updated-react-and-drupal-tutorials-now-online</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/lesson-3-drupaleasy-know-where-you-are</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/entities-bundles-and-fields-oh-my-lesson-4-drupaleasy</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/jump-start-your-drupal-9-code-updates-drupal-check-and-drupal-rector</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/student-discount</loc><lastmod>2018-11-27T19:43Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/start-drupal-9-readiness-do-list-using-upgrade-status</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/videos-added-step-step-content-moderation-tutorials</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-hands-theming-course-may-18-22</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-9-launches</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-learn-drupals-layout-builder</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalizeme-trainers-speaking-drupalcon-global-2020</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-global-day-1</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-global-day-2</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-global-day-3</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-global-wrap</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/fall-2020-remote-drupal-workshops-drupalizeme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-managing-media-drupal-and-new-layout-builder-videos</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-layout-builder-tutorials-frontend-and-backend-developers</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/experimenting-purchasing-power-parity</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/cleaning-database-tables-speed-development-cycles</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/run-integration-tests-tugboat-and-github-actions</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/takeaways-ux-writer-conference</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-your-feedback-helped-us-design-our-live-theming-workshop</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/issue-forks-and-merge-requests-demo-portland-drupal-user-group</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/promo</loc><lastmod>2014-09-29T12:43Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/about-drupal-decoupled-menus-initiative</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/no-time-learn-workshops-can-help-you-set-aside-time</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupalcon-north-america-2021-coming-soon</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-views-developers</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/views-plugins-tutorials-added-views-developers-course</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/supporting-diversity-through-discover-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/best-workshops-provide-disproportionate-value-people-who-show</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/debug-any-drupals-phpunit-tests-phpstorm-ddev-environment</loc><lastmod>2025-10-29T12:32Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-voices-important-topics-2021-drupal-diversity-inclusion-camp</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/webinar-accessing-layers-help-drupal</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/exploring-drupal-while-learning-web-development</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/how-become-drupal-developer</loc><lastmod>2024-10-10T00:44Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/setting-drupal-learn-and-practice</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/release-day-time-learn-drush</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/speed-your-drupal-migrations-high-water-marks</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/so-many-updates-whats-new-2022-drupalizeme</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/rediscovering-balance-drupal-core-contribution-bugsmash</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/debugging-inconsistent-return-values-drupal-migrationlookup-plugin</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updating-drupal-user-guide-drupal-10</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/survey-confirmation</loc><lastmod>2015-01-21T22:34Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/welcome-group-owner</loc><lastmod>2015-08-23T17:22Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/pathways</loc><lastmod>2017-07-04T07:48Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/course/image-styles</loc><lastmod>2024-07-23T20:25Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/creating-custom-image-styles</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Custom Image Styles</video:title><video:description>This video is about making custom image sizes for automatic display on your site!  I am going to show you how you can create custom thumbnail sizes that can be used in your content types.

We already know that being able to set a standard for image display creates consistency and a better user experience.  It also makes it for easier site administration because you don’t need to cut all of you images before you upload them.  Drupal does all the work for you!!  And we can specify the exact site we want to use.

I am assuming that you already know how to update the field display settings in your content type to select an image style preset.

For this tutorial, you need to make sure the Image module that comes with Drupal Core is enabled.

We are going to create an image display that has an aspect ratio of 4”x6”, but much smaller.  Then we are going to add a couple other treatments to it so that it fits the theme of Photo Journal.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/3VCB2abAl7Wtkn9-8udNrZfoerBwCAA_vLEiBFp0wYo.jpg.jpg</video:thumbnail_loc><video:duration>401</video:duration><video:publication_date>2011-06-15</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/jquery-and-javascript-drupal-series</loc><lastmod>2025-05-16T21:41Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/what-is-drupal</loc><lastmod>2023-05-17T01:14Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/course/command-line-basics</loc><lastmod>2024-07-19T23:20Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/moving-around-command-line</loc><lastmod>2023-12-21T22:14Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Moving Around the Command Line</video:title><video:description>&lt;p&gt;The command line can be a scary place for someone not familiar with interacting with a computer through text-only. We are so used to using GUIs to point and click our way through tasks. In this series we&amp;#39;ll walk through some of the most common command line tasks to help you understand what is going on and be able to do some cool tricks yourself.&lt;/p&gt;
&lt;p&gt;This is the first video in a series that shows basic command line usage for *nix systems, such as Linux, Mac OS X, and on Windows, using applications like &lt;a href=&quot;http://www.cygwin.com/&quot;&gt;Cygwin&lt;/a&gt;. This video shows the following commands and spends the most time explaining how to move around your file structure from the command line:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;pwd&lt;/li&gt;
	&lt;li&gt;ls (and ls -al)&lt;/li&gt;
	&lt;li&gt;less&lt;/li&gt;
	&lt;li&gt;cd&lt;/li&gt;
	&lt;li&gt;man&lt;/li&gt;
	&lt;li&gt;clear&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: this video was originally released August 31, 2009 on &lt;a href=&quot;https://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.&lt;/p&gt;
</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/CCoWTGLVobXGT8YxgSNI88qvRgNMEk3RwXs-0NhVebE.jpg.jpg</video:thumbnail_loc><video:duration>809</video:duration><video:publication_date>2011-04-29</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/copy-move-delete-command-line</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Copy, Move, Delete on Command Line</video:title><video:description>The second video in the command line basics series, this one covers common commands for dealing with files; copying, moving and deleting them. We walk through examples for the following commands: cp, mv, and rm.

Just a a fair warning that I say the word &quot;stuff&quot; way too many times in this video. Please just bear with it.

﻿Note: this video was originally released September 8, 2009 on &lt;a href=&quot;http://www.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BKFjWlJoB3AR0A6h43yDFiK-ubMGfyJyBxY0Z4yIwNk.jpg.jpg</video:thumbnail_loc><video:duration>652</video:duration><video:publication_date>2011-05-04</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/dealing-command-line-permissions</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Dealing with Command Line Permissions</video:title><video:description>In this next video of our command line series, we will look at permissions and ownership of files and folders - how to understand the information you see and change it. It covers the following commands:
&lt;!--break--&gt;
&lt;ul&gt;
  &lt;li&gt;chmod&lt;/li&gt;
  &lt;li&gt;chown&lt;/li&gt;
  &lt;li&gt;chgrp&lt;/li&gt;
  &lt;li&gt;sudo&lt;/li&gt;
&lt;/ul&gt; 
    
Note: this video was originally released September 16, 2009 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/IijlOnTLeZiqy6XrI8qlflpSqT3c26yO8CAeqOlg7l8.jpg.jpg</video:thumbnail_loc><video:duration>958</video:duration><video:publication_date>2011-05-09</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-zip-and-tar-command-line</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using Zip and Tar on Command Line</video:title><video:description>This command line video covers the three most common commands for compressing and archiving files, including how to get them back out again. Most commonly you first hit the need for these when you download a file and need to get it uncompressed. We&#039;ll cover the following commands:
&lt;ul&gt;
 &lt;li&gt;zip&lt;/li&gt;
 &lt;li&gt;unzip&lt;/li&gt;
 &lt;li&gt;gzip&lt;/li&gt;
 &lt;li&gt;gunzip&lt;/li&gt;
 &lt;li&gt;tar&lt;/li&gt;
&lt;/ul&gt;

Note: this video was originally released October 28, 2009 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/SjzlgeRFgwFrCXL6IoCLcukMmCagpdxJWGaKIfXObHs.jpg.jpg</video:thumbnail_loc><video:duration>631</video:duration><video:publication_date>2011-05-12</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-symbolic-links-command-line</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Symbolic Links on Command Line</video:title><video:description>This video shows how to use the magical symbolic link, or symlink. These are basically a handy *nix way to create shortcuts. They come in particularly handy if you want to organize code for your websites outside of the web server&#039;s document root and that is the example we use here.

Note: this video was originally released November 23, 2009 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ogmLeg48UAHxs-V5lkNVZGnt2z4WqyT2oV-7ncEPWqw.jpg.jpg</video:thumbnail_loc><video:duration>411</video:duration><video:publication_date>2011-05-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-ssh-and-scp</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using SSH and SCP</video:title><video:description>&lt;p&gt;In this video you&amp;#39;ll see how simple it is to connect to a remote server using SSH (secure shell). We&amp;#39;ll also look at how you can quickly and securely copy files from a remote server using the SCP command (secure copy). These are both invaluable tools when working with servers that you don&amp;#39;t have physical access to. Note: this video was originally released April 8, 2010 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.&lt;/p&gt;


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/BpO73dGjjrNrkoM5CRtpdLeCuBAoI4Isa7yxEjYm4-4.jpg.jpg</video:thumbnail_loc><video:duration>410</video:duration><video:publication_date>2011-05-23</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/finding-files-command-line</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Finding Files on Command Line</video:title><video:description>In this video we&#039;ll look at two ways of finding files from the command line. We&#039;ll use both locate (and its friend updatedb) and find, and talk about the differences between them.

Note: this video was originally released June 8, 2010 on &lt;a href=&quot;http://www.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/nUNUA0Sfga4Gz--dj41I7rT-YUisPpq3VYfPYqcTzUA.jpg.jpg</video:thumbnail_loc><video:duration>491</video:duration><video:publication_date>2011-05-25</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/using-grep-command</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Using the Grep Command</video:title><video:description>This video in the command line series will get you started using the very powerful grep command. This is one of the most used commands, especially if you are working with a lot of text (like code, for instance). Grep will let you search through files to find strings and it&#039;s great for tracking down where something is coming from. Grep is a very powerful tool with lots of options, but you&#039;ll see you can do a lot even with just the basics. We cover the basic command with a file, how to use it through directories, and then we use a few of the most popular options:
&lt;code&gt;
-r Recurse
-n Line Number
-l List
-v Reverse
-i Ignore Case
&lt;/code&gt;

Note: this video was originally released June 22, 2010 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ouxRVC8TqvNxmya-HgaH88NsWUxQenADiaTbwef1JFQ.jpg.jpg</video:thumbnail_loc><video:duration>866</video:duration><video:publication_date>2011-05-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/2018_11_campcoupon</loc><lastmod>2019-01-17T14:42Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/tutorial/introduction-vivim-editor</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to Vi/vim Editor</video:title><video:description>This video introduces you to the Vi (and Vim) editor. Vi is the most common text editor that you will have available to you on *nix systems so it pays to at least learn the basics in case you end up somewhere where that is all you have to use. Vim is also actually a very serviceable editor which many people (mostly hardcore geeks) use as their day to day editor. We&#039;ll talk briefly about Vi versus Vim, then open a file, move around, and close the the file. Our next video will dive more into editing files with Vi.

Note: There are a lot of editors out there on various systems, notably emacs, nano, and pico. Vi is considered the lowest common denominator (i.e. it is the most commonly available one), which is why it is the one being covered in the command line basics series. It is also the editor that I use personally, so is the one I am most familiar with. Please limit editor war discussions to other threads on the internet that are meant for them. 

Note: this video was originally released July 27, 2010 on &lt;a href=&quot;https://www.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.

&lt;strong&gt;Note:&lt;/strong&gt; In some places the command line prompt is cut-off. The YouTube version of this video doesn&#039;t have the cut-off problem. We are working on getting this fixed, but in the meantime, check out the YouTube version instead.

&lt;a href=&quot;https://www.youtube.com/watch?v=dyXK3d9Nxsw&amp;list=PLVqGqrTs4ZWOhcApSWYIX_rnPMZDAClJa&amp;index=9&quot;&gt;Command Line Basics 9: Introduction to Vi/Vim editor&lt;/a&gt; (youtube.com)

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/eOme7qIMnyAx92Te0OJi2mbKYyrgcjU_ZkcI32dav80.jpg.jpg</video:thumbnail_loc><video:duration>630</video:duration><video:publication_date>2011-06-03</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/editing-vivim-editor</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Editing with Vi/vim Editor</video:title><video:description>&lt;p&gt;In this second Vi/Vim video we move on to doing some basic editing (see the &lt;a href=&quot;videos/introduction-vivim-editor&quot;&gt;Intro to Vi/Vim video&lt;/a&gt; for an overview). We cover inserting text in a few different ways, how to delete text, and then how to revert or save your changes. Note: this video was originally released August 9, 2010 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.&lt;/p&gt;

&lt;strong&gt;Note:&lt;/strong&gt; In some places the command line prompt is cut-off. The YouTube version of this video doesn&#039;t have the cut-off problem. We are working on getting this fixed, but in the meantime, check out the YouTube version instead.

&lt;a href=&quot;https://www.youtube.com/watch?v=KFxnHL5Th7c&amp;list=PLVqGqrTs4ZWOhcApSWYIX_rnPMZDAClJa&amp;index=10&quot;&gt;Command Line Basics 10: Editing with Vi/Vim editor&lt;/a&gt; (youtube.com)

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/tKwuwXEbt4CibwxvV-52agWYSCrfu82BZWpEa1KS9wk.jpg.jpg</video:thumbnail_loc><video:duration>356</video:duration><video:publication_date>2011-06-14</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/more-editing-vivim-editor</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>More Editing with Vi/vim Editor</video:title><video:description>&lt;p&gt;This video picks up where we left off in the &lt;a href=&quot;https://drupalize.me/videos/editing-vivim-editor?p=1149&quot;&gt;Editing with Vi/Vim video&lt;/a&gt;. This time we take a look at some shortcuts for replacing text, how to copy/paste, and the cool visual mode feature you get with Vim Note: this video was originally released August 31, 2010 on &lt;a href=&quot;http://ww.lullabot.com&quot;&gt;Lullabot.com&lt;/a&gt;.&lt;/p&gt;

&lt;strong&gt;Note:&lt;/strong&gt; In some places the command line prompt is cut-off. The YouTube version of this video doesn&#039;t have the cut-off problem. We are working on getting this fixed, but in the meantime, check out the YouTube version instead.

&lt;a href=&quot;https://www.youtube.com/watch?v=UlLnSa6UJ_Y&amp;list=PLVqGqrTs4ZWOhcApSWYIX_rnPMZDAClJa&amp;index=11&quot;&gt;Command Line Basics 11: More Editing with Vi/Vim editor&lt;/a&gt; (youtube.com)

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ePO8QTqVO-Kb5SEcBF851LLvoFl3o2Za-Ji1OzVm9i0.jpg.jpg</video:thumbnail_loc><video:duration>454</video:duration><video:publication_date>2011-06-17</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/course/drupal-deployment-features-and-drush</loc><lastmod>2020-03-04T23:53Z</lastmod><changefreq>never</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/other-features-modules</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Other Features Modules</video:title><video:description>As we wrap up and review the series, we also look at other modules that work with, or depend on, Features to provide you a jumpstart.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/PSNnzX90ZBRBc5EFQfSjUwBo89OdJJpIkodEQkdynvo.jpg.jpg</video:thumbnail_loc><video:duration>424</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/overview-drupal-deployment</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Overview of Drupal Deployment</video:title><video:description>This is a quick overview of the various pieces we&#039;ll be covering in this series.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/_ftz0D1givlRC19-L4H5b6N74dR2EBniZOEu3PhabCM.jpg.jpg</video:thumbnail_loc><video:duration>224</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/analyzing-code-created-features</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Analyzing Code Created by Features</video:title><video:description>We&#039;ll take some time to open up the feature we&#039;ve created and look at the code that was generated so that we can better understand what is going on under the hood.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Juyj1YrLQnKFhzxD2lmqHJlZdYivWLRu8ZsQdBHxM2E.jpg.jpg</video:thumbnail_loc><video:duration>939</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/features-overrides-and-recreating-feature</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Features Overrides and Recreating a Feature</video:title><video:description>In this video we&#039;ll look at how you can update a feature by making changes, reviewing overrides, and then recreating the feature for deployment.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EtbDsgsjsbenjAtIPpa-MFp9wwfF-Ehs-4v6mhZirRY.jpg.jpg</video:thumbnail_loc><video:duration>865</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/reverting-features-and-using-drush-features-update</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Reverting Features and Using Drush Features Update</video:title><video:description>Sometimes when a feature has been overridden we don&#039;t want to update the feature, but instead go back to where we were. Here we will look at how to revert a feature, as well as how to use Drush to make these processes much faster and simpler.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZNmL1claeKfqObiIkjxY-3UVVrcKe6AdNvAAgbRQkrw.jpg.jpg</video:thumbnail_loc><video:duration>695</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/exporting-settings-variables-strongarm</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Exporting Settings Variables with Strongarm</video:title><video:description>Often you need to create a feature with system variables to make them complete. Features itself does not provide this, but the Strongarm module does, and we&#039;ll see how to add that to the mix.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EYVs-Zt87U8YH5sn6JMtwpyzT3edef22ArKKjXOSSXA.jpg.jpg</video:thumbnail_loc><video:duration>726</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/workshops</loc><lastmod>2024-01-24T02:16Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/tutorial/managing-features-team-developers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Managing Features with a Team of Developers</video:title><video:description>In this video we&#039;ll specifically look at using Git as a tool to aid our development process, especially when working with other people, to make sure that you don&#039;t step on each others toes and destroy work.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/EpiWx8SIcMNhWMyDKrB2vuFCFN1fK7y_5VVA3Q37U8Q.jpg.jpg</video:thumbnail_loc><video:duration>1018</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/creating-helper-tools-drupal-developers</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Creating Helper Tools for Drupal Developers</video:title><video:description>Features are most often used for building out actual site features. Here we look at how you can use Features to provide you with quickstart developer tools as well.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/ZFA6bvdqTXtABxANYjJXJU1V8MzXGRsuq8s9x81f09U.jpg.jpg</video:thumbnail_loc><video:duration>996</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/resolving-conflicts-between-features</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Resolving Conflicts Between Features</video:title><video:description>If you have more than one feature module on your site, they can sometimes step on each other and cause nasty conflicts. We&#039;ll create some conflicts and show you how this happens and how to back out of them.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/features&quot;&gt;Features project&lt;/a&gt; (Drupal.org)
&lt;a href=&quot;https://drupalize.me/series/introduction-drush-series&quot;&gt;Introduction to Drush Series&lt;/a&gt; (Drupalize.Me)
&lt;a href=&quot;https://github.com/DrupalizeMe/drupalize-lullablog&quot;&gt;https://github.com/DrupalizeMe/drupalize-lullablog&lt;/a&gt; (GitHub.com)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/xys6w4pBrCmOPlL4ajHCxGKcMKnskh9S0C_lrUxrZFs.jpg.jpg</video:thumbnail_loc><video:duration>1150</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/tutorial/making-your-custom-code-exportable-ctools</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Making Your Custom Code Exportable with CTools</video:title><video:description>When you write your own custom modules, you can make them exportable to Features as well. Here we look at how to do that with the Chaos Tools (CTools) module.

&lt;h3&gt;Additional resources&lt;/h3&gt;

&lt;a href=&quot;https://drupal.org/project/ctools&quot;&gt;CTools project&lt;/a&gt; (Drupal.org)</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/iOSN5un6aFeJXlF7DG4o_8rydeIUfXjAINRBmQJV3j4.jpg.jpg</video:thumbnail_loc><video:duration>2177</video:duration><video:publication_date>2011-06-10</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/workshops/theming</loc><lastmod>2025-11-07T22:40Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/course/introduction-jquery-series</loc><lastmod>2024-07-23T20:08Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/tutorial/implementing-ajax-jquery</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Implementing AJAX with jQuery</video:title><video:description>&lt;p&gt;AJAX is one of the main reasons to use a Javascript library such as jQuery. See how simple it is to perform a previously difficult task that required complex browser specific code to preform reliably and was prone to simple mistakes. Implement basic AJAX requests using jQuery&amp;#39;s built in methods which make it extremely simple to send an asynchronous request to a server, gather the returned data, and insert it into the page.&lt;/p&gt;

Example code:

&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;
// AJAX Live Function
$(&#039;.content p&#039;).live(&#039;mouseenter mouseleave&#039;,
  function() {
    $(this).toggleClass(&#039;hilight&#039;);
  }
);

// AJAX Example
$(&#039;.node_read_more a&#039;).click(function() {
  var url = $(this).attr(&#039;href&#039;);
  var link = this;

  $.ajax({
    url: url,
    success: function(data) {
      var $fullContent = $(&#039;#content-output .content&#039;, data);
      var html = $fullContent.html();
      $(link).closest(&#039;div.node&#039;).find(&#039;div.content&#039;).html(html);
      $(link).hide();
    }
  });
  return false;
});
&lt;/code&gt;&lt;/pre&gt;

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/5DCNSkeqG7tiIh7hr9x6K5SLHVj_LwK2itnnLVee2D0.jpg.jpg</video:thumbnail_loc><video:duration>1866</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/workshops/migrate</loc><lastmod>2024-02-22T20:40Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/tutorial/jquery-overview</loc><lastmod>2025-05-16T21:43Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority><video:video><video:title>jQuery Overview</video:title><video:description>Provides a high-level overview of jQuery to people who are brand new to this JavaScript library.

</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/Kzp75YtqdhStU3rlwG18QtklgQ3jmGyebInGQtySOGI.jpg.jpg</video:thumbnail_loc><video:duration>693</video:duration><video:publication_date>2010-05-27</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/workshops/web-services</loc><lastmod>2020-09-08T21:04Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/tutorial/introduction-jquery-0</loc><lastmod>2023-06-15T20:19Z</lastmod><changefreq>never</changefreq><priority>0.9</priority><video:video><video:title>Introduction to jQuery</video:title><video:description>In its short history, jQuery has revolutionized front-end web development, making it faster, easier, and more rewarding to write JavaScript &amp;ndash; allowing easier selection and manipulation of HTML elements, and ensuring that scripts work across the ever increasing landscape of browsers and operating systems.

Nate Haug and Jeff Robbins show many hands-on examples demonstrating how to use jQuery&amp;#39;s simple syntax to choose and manipulate HTML elements, traverse the document object model (DOM), and to attach event handlers which can react to user interaction with the page.

In this video, Jeff and Nate introduce themselves and the agenda for this series, including Selectors, Effects, and AJAX.  
  


</video:description><video:thumbnail_loc>http://drupalize.me/sites/default/files/sproutvideo_thumbnails/9yda17K264FiU9mPvsQul7iMEY6AtCQxgUtHvxBnktQ.jpg.jpg</video:thumbnail_loc><video:duration>122</video:duration><video:publication_date>2010-03-31</video:publication_date><video:live>no</video:live></video:video></url>
<url><loc>https://drupalize.me/workshops/react-and-drupal</loc><lastmod>2020-09-08T21:04Z</lastmod><changefreq>never</changefreq></url>
<url><loc>https://drupalize.me/blog/sorry-about-aka-whoopsie-daisy</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/command-line-basics-series</loc><lastmod>2023-07-25T22:11Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/video-series-image-styles</loc><lastmod>2023-05-15T12:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/pricing</loc><changefreq>yearly</changefreq><priority>0.6</priority></url>
<url><loc>http://drupalize.me/videos</loc><changefreq>weekly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/support</loc><changefreq>yearly</changefreq><priority>0.6</priority></url>
<url><loc>https://drupalize.me/faq</loc><lastmod>2025-05-16T21:39Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/welcome-our-new-drupal-9-site</loc><lastmod>2023-05-15T20:56Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-drupal-learning-community</loc><lastmod>2023-06-01T13:09Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorials-migratelookup-process-plugin-and-migrate-apis-map-tables</loc><lastmod>2023-06-30T23:26Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/changes-how-we-approach-theming-drupal</loc><lastmod>2023-07-20T00:13Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/performance-and-scalability-drupal-sites</loc><lastmod>2024-11-08T19:36Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/release-day-performance-and-scalability-drupal-sites</loc><lastmod>2023-07-14T17:12Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updated-drupal-10-search-api-and-solr-tutorials</loc><lastmod>2023-07-20T00:12Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorial-start-new-theme-starterkit</loc><lastmod>2023-07-27T22:59Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/guide/using-drupal-book-oreilly-media</loc><lastmod>2024-07-03T00:06Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/extend-migrate-api</loc><lastmod>2024-11-08T20:18Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/drupal-drupal-migrations-drupal-7-upgrade</loc><lastmod>2024-11-08T20:17Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/migrating-drupal</loc><lastmod>2024-11-08T20:14Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/learn-migrate-drupal</loc><lastmod>2025-07-09T23:44Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/what-if-yoda-taught-you-drupal</loc><lastmod>2023-12-06T00:06Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/merge-values-two-entity-reference-fields-during-drupal-7-drupal-10-migration</loc><lastmod>2023-11-21T19:20Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-tutorial-install-drupal-locally-ddev</loc><lastmod>2023-11-21T19:53Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learn-how-implement-plugin-any-type-drupal-now-video</loc><lastmod>2023-11-22T00:54Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/planning-better-hello-world-drupal</loc><lastmod>2023-12-05T19:28Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/routes-and-controllers-drupal</loc><lastmod>2024-11-08T19:57Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/videos-added-routes-and-controllers-tutorials</loc><lastmod>2023-12-06T03:04Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/2023-drupal-advent-calendar-full-tasty-educational-treats</loc><lastmod>2023-12-21T23:07Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-1020-just-released-and-other-drupal-news-new-drupalizeme-tutorial-feature-icymi-holiday</loc><lastmod>2025-12-16T09:22Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/part-1-httpkernel-drupal-spotlight-symfony-drupal</loc><lastmod>2024-02-01T00:06Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/part-2-eventdispatcher-drupal-spotlight-symfony-drupal</loc><lastmod>2024-02-01T00:06Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/register-now-remote-workshops-february-and-march-2024</loc><lastmod>2024-01-31T03:28Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/part-3-routing-drupal-spotlight-symfony-drupal</loc><lastmod>2024-02-01T00:07Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/part-4-utility-components-drupal-spotlight-symfony-drupal</loc><lastmod>2024-02-01T00:05Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/guide/symfony-drupal-developers</loc><lastmod>2024-11-08T20:20Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/php-attributes-drupal-plugins</loc><lastmod>2024-02-17T03:02Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-drupal-102-create-new-field-ui</loc><lastmod>2024-02-15T23:43Z</lastmod><changefreq>never</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/chatgpt-experiments-act-drush-shall-we-play-game</loc><lastmod>2024-04-19T20:35Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/tuning-drupalizeme-search-results-solr-query-re-ranking-and-search-api</loc><lastmod>2024-04-19T00:03Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/learning-drupal-help-ai-tutor</loc><lastmod>2024-04-29T15:23Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/chapter-0-preface</loc><lastmod>2024-10-31T20:57Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-1-introduction-drupal-module-development</loc><lastmod>2024-10-31T21:00Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-2-hello-world</loc><lastmod>2024-10-31T21:03Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-3-routes-and-controllers</loc><lastmod>2024-10-31T21:05Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/dcpdx-2024-iq</loc><lastmod>2024-05-06T16:00Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/chapter-4-services-and-dependency-injection</loc><lastmod>2024-10-31T21:33Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-5-output-themeable-content-module</loc><lastmod>2024-10-31T21:36Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-6-hooks-and-events</loc><lastmod>2024-10-31T21:40Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-7-plugins</loc><lastmod>2024-10-31T21:41Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-8-forms</loc><lastmod>2024-10-31T21:43Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-9-working-data</loc><lastmod>2024-10-31T22:07Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-10-caching</loc><lastmod>2024-10-31T22:17Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-11-testing</loc><lastmod>2024-10-31T22:19Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-12-additional-considerations</loc><lastmod>2024-10-31T22:21Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-13-collaborate-community</loc><lastmod>2024-10-31T22:24Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/chapter-14-final-thoughts-0</loc><lastmod>2024-10-31T22:25Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/drupal-module-developer-guide</loc><lastmod>2025-10-14T12:31Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-module-developer-guide-here</loc><lastmod>2024-05-01T19:48Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/pardon-our-dust-new-tutorial-organization-and-navigation-roll-out</loc><lastmod>2024-06-12T22:20Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/output-themeable-content-drupal</loc><lastmod>2024-11-08T20:00Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/internationalization-i18n-drupal</loc><lastmod>2024-11-08T19:50Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/services-and-dependency-injection-drupal</loc><lastmod>2024-11-08T19:55Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/validating-forms-drupal</loc><lastmod>2024-11-08T19:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/processing-forms-drupal</loc><lastmod>2024-11-08T19:01Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/alter-drupal-modules</loc><lastmod>2024-11-08T19:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/work-data-modules</loc><lastmod>2025-11-21T00:40Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/output-and-format-data-code</loc><lastmod>2024-11-08T19:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/develop-custom-pages</loc><lastmod>2024-11-08T19:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/settings-forms-drupal</loc><lastmod>2024-11-08T19:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/automated-testing-drupal-course</loc><lastmod>2024-11-07T01:09Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/running-automated-tests-drupal</loc><lastmod>2024-11-07T01:10Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/writing-automated-tests-drupal</loc><lastmod>2024-11-07T01:10Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/test-drupal-sites-automated-tests</loc><lastmod>2025-09-04T19:16Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/themes-drupal</loc><lastmod>2025-03-07T18:16Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/creating-themes-drupal</loc><lastmod>2024-11-08T18:54Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/theme-hook-suggestions-drupal-templates</loc><lastmod>2024-11-08T18:58Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/hands-theming-exercises-drupal</loc><lastmod>2024-11-08T18:58Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/layout-builder-api-drupal</loc><lastmod>2024-11-08T19:04Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/layout-builder</loc><lastmod>2026-01-20T21:02Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/views-drupal</loc><lastmod>2026-01-20T21:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/media-api-drupal</loc><lastmod>2024-11-08T19:05Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/breakpoint-api-drupal</loc><lastmod>2024-11-08T19:05Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/media-and-responsive-images</loc><lastmod>2026-01-20T21:04Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/using-jsonapi-drupal</loc><lastmod>2025-09-12T01:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/decoupled-headless-drupal</loc><lastmod>2024-11-08T19:50Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/api-authentication-jsonapi-drupal</loc><lastmod>2025-09-12T01:06Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/integrate-javascript-drupal</loc><lastmod>2024-11-08T19:49Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/install-and-update-drupal</loc><lastmod>2024-11-01T01:02Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/upgrade-drupal</loc><lastmod>2024-10-31T22:31Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/keep-drupal-up-to-date</loc><lastmod>2025-05-29T19:33Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/command-line-tools-drupal</loc><lastmod>2024-11-08T19:38Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/keep-calm-and-clear-cache</loc><lastmod>2024-11-08T19:34Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/drupal-site-administration</loc><lastmod>2026-01-20T21:07Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/introducing-docker-drupal-developers</loc><lastmod>2024-11-08T19:46Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/customizing-docker-images</loc><lastmod>2024-11-08T19:47Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/course/docker-your-workflow</loc><lastmod>2024-11-08T19:48Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/guide/docker-drupal-developers</loc><lastmod>2024-11-08T19:46Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/course/general-drupal-development</loc><lastmod>2024-11-08T19:52Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/topic/psr-4-namespaces-and-autoloading-php</loc><lastmod>2024-12-03T23:58Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/guide/legacy-module-development</loc><lastmod>2024-07-24T20:53Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/legacy-theme-development</loc><lastmod>2024-07-19T23:29Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/guide/legacy-site-building</loc><lastmod>2024-07-24T00:03Z</lastmod><changefreq>yearly</changefreq><priority>0.9</priority></url>
<url><loc>https://drupalize.me/blog/explore-our-new-courses-guides-and-tutorial-navigation</loc><lastmod>2024-07-27T00:19Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/we-updated-drupal-user-guide-drupal-11</loc><lastmod>2024-08-29T19:20Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/adopt-document-sponsor-drupal-cms-documentation</loc><lastmod>2025-01-14T22:47Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-ai-how-set-it-and-try-it-out</loc><lastmod>2024-09-28T00:58Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/keeping-drupals-evolving-plugin-api-updating-tutorials-php-attributes</loc><lastmod>2025-11-12T21:09Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drush-custom-command-tutorials-updated</loc><lastmod>2024-10-29T23:14Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/new-and-updated-tutorials-drupal-11</loc><lastmod>2024-11-06T19:20Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/understanding-difference-between-cache-keys-and-cache-tags-drupal</loc><lastmod>2024-12-07T00:06Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-cms-guide-update-challenge-documenting-fast-moving-open-source-product</loc><lastmod>2025-01-15T15:47Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-111-adds-hooks-classes-history-how-and-tutorials-weve-updated</loc><lastmod>2025-02-01T00:48Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/fresh-batch-new-videos-added-module-developer-guide-tutorials</loc><lastmod>2025-02-11T21:23Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/drupal-cms-docs-should-we-combine-cms-and-user-guides</loc><lastmod>2025-03-13T12:51Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/more-videos-added-module-developer-guide-tutorials</loc><lastmod>2025-02-22T00:25Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/whats-new-drupal-cms-user-guide-june-2025-update</loc><lastmod>2025-06-13T22:25Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/seo-drupal-users-what-you-need-know</loc><lastmod>2025-09-03T22:41Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/automatic-updates-is-it-right-for-your-drupal-site</loc><lastmod>2025-07-10T23:46Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/single-directory-components-drupal</loc><lastmod>2025-09-16T20:32Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/release-day-single-directory-components-drupal</loc><lastmod>2025-08-26T21:50Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/updates-react-and-oauth-2-tutorials</loc><lastmod>2025-09-12T21:58Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/2-new-tutorials-added-single-directory-components-course</loc><lastmod>2025-09-16T21:05Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/3-new-videos-learn-how-set-oauth-get-tokens-and-make-authenticated-requests</loc><lastmod>2025-10-10T00:28Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/topic/cron</loc><lastmod>2025-11-08T00:57Z</lastmod><changefreq>yearly</changefreq></url>
<url><loc>https://drupalize.me/blog/entity-api-course-updated-cover-use-php-attributes</loc><lastmod>2025-11-12T21:07Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/meet-new-drupalizeme-ai-assistant</loc><lastmod>2025-11-20T18:51Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/what-drupaldisplace-and-why-should-i-care</loc><lastmod>2025-12-05T14:53Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/free-coaching-drupal-community</loc><lastmod>2025-12-09T12:26Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/course/drupal-recipes</loc><lastmod>2026-01-20T21:06Z</lastmod><changefreq>yearly</changefreq><priority>0.7</priority></url>
<url><loc>https://drupalize.me/blog/release-day-drupal-recipes-api</loc><lastmod>2026-01-27T12:03Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/using-composer-path-repositories-handle-module-dependencies-during-development</loc><lastmod>2026-02-05T10:28Z</lastmod><changefreq>yearly</changefreq><priority>0.8</priority></url>
<url><loc>https://drupalize.me/blog/who-pays-documentation</loc><lastmod>2026-03-18T11:18Z</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url>
</urlset>
