218 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			218 lines
		
	
	
	
		
			9.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | ||
| <html class="no-js" lang="en-GB">
 | ||
|     <head>
 | ||
|         <title>Turning Your Custom Drupal Module into a Feature | Oliver Davies</title>
 | ||
| 
 | ||
|         <meta charset="UTF-8">
 | ||
|         <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | ||
|         <meta name="viewport" content="width=device-width, initial-scale=1">
 | ||
| 
 | ||
|         
 | ||
|         <meta property="og:url" content="https://www.oliverdavies.uk/blog/2017/05/20/turning-drupal-module-into-feature/">
 | ||
| <meta property="og:title" content="Turning Your Custom Drupal Module into a Feature"/>
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     <meta property="og:image" content="https://www.oliverdavies.uk/assets/images/me-precedent.jpg"/>
 | ||
|     <meta property="og:image:height" content="327"/>
 | ||
|     <meta property="og:image:type" content="image/jpg">
 | ||
|     <meta property="og:image:width" content="327"/>
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         <link rel="stylesheet" href="https://www.oliverdavies.uk/assets/css/main.css">
 | ||
|         
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=57" sizes="57x57">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=114" sizes="114x114">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=72" sizes="72x72">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=144" sizes="144x144">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=60" sizes="60x60">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=120" sizes="120x120">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=76" sizes="76x76">
 | ||
|                     <link rel="apple-touch-icon" href="/assets/images/me-precedent.jpg?s=152" sizes="152x152">
 | ||
|         
 | ||
|                     <link rel="icon" href="/assets/images/me-precedent.jpg?s=160" sizes="160x160">
 | ||
|                     <link rel="icon" href="/assets/images/me-precedent.jpg?s=96" sizes="96x96">
 | ||
|                     <link rel="icon" href="/assets/images/me-precedent.jpg?s=32" sizes="32x32">
 | ||
|                     <link rel="icon" href="/assets/images/me-precedent.jpg?s=16" sizes="16x16">
 | ||
|             </head>
 | ||
|     <body class="">
 | ||
|         <nav class="navbar navbar-inverse navbar-fixed-top">
 | ||
|     <div class="container">
 | ||
|         <div class="navbar-header">
 | ||
|             <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
 | ||
|                 <span class="sr-only">Toggle navigation</span>
 | ||
|                 <span class="icon-bar"></span>
 | ||
|                 <span class="icon-bar"></span>
 | ||
|                 <span class="icon-bar"></span>
 | ||
|             </button>
 | ||
|             <a class="navbar-brand" href="https://www.oliverdavies.uk/">Oliver Davies</a>
 | ||
|         </div>
 | ||
| 
 | ||
|         <div id="navbar" class="collapse navbar-collapse" role="navigation">
 | ||
|             <ul class="nav navbar-nav">
 | ||
|                 <li class="">
 | ||
|                     <a href="/">About</a>
 | ||
|                 </li>
 | ||
| 
 | ||
|                 <li class="">
 | ||
|                     <a href="/experience">Experience</a>
 | ||
|                 </li>
 | ||
| 
 | ||
|                 <li class="">
 | ||
|                     <a href="/testimonials">Testimonials</a>
 | ||
|                 </li>
 | ||
| 
 | ||
|                 <li class="">
 | ||
|                     <a href="/talks">Talks</a>
 | ||
|                 </li>
 | ||
| 
 | ||
|                 <li class="active">
 | ||
|                     <a href="/blog">Blog</a>
 | ||
|                 </li>
 | ||
| 
 | ||
|                 <li class="">
 | ||
|                     <a href="/contact">Contact</a>
 | ||
|                 </li>
 | ||
|             </ul>
 | ||
|         </div>    </div>
 | ||
| </nav>
 | ||
| 
 | ||
|         <div class="container">
 | ||
|             <div class="row">
 | ||
|                 <main class="col-md-9">
 | ||
|                                             <h1>Turning Your Custom Drupal Module into a Feature</h1>
 | ||
| 
 | ||
| <p class="posted text-light">20th May 2017</p>
 | ||
| 
 | ||
|     <p>Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’t present within the standard installation profile used to run tests.</p>
 | ||
| 
 | ||
| <p>I decided to convert the custom module into a <a href="https://www.drupal.org/project/features">Feature</a> so that the content type and it’s fields could be added to it, and therefore present on the testing site once the module is installed.</p>
 | ||
| 
 | ||
| <p>To do this, I needed to expose the module to the Features API.</p>
 | ||
| 
 | ||
| <p>All that’s needed is to add this line to the <code>mymodule.info</code> file:</p>
 | ||
| 
 | ||
| <pre><code class="language-ini">features[features_api][] = api:2
 | ||
| </code></pre>
 | ||
| 
 | ||
| <p>After clearing the cache, the module is now visible in the Features list - and ready to have the appropriate configuration added to it.</p>
 | ||
| 
 | ||
| <p><img src="/assets/images/blog/custom-module-as-a-feature.png" alt="'The features list showing the custom module'" /></p>
 | ||
| 
 | ||
|                 <p class="tags">
 | ||
|         Tags:
 | ||
|                     <a href="https://www.oliverdavies.uk/blog/tags/drupal">drupal</a>,                     <a href="https://www.oliverdavies.uk/blog/tags/drupal-7">drupal-7</a>,                     <a href="https://www.oliverdavies.uk/blog/tags/drupal-planet">drupal-planet</a>,                     <a href="https://www.oliverdavies.uk/blog/tags/features">features</a>            </p>
 | ||
|     <div class="post-pager is-flex">
 | ||
|             <div class="is-half">
 | ||
|            <a href="/blog/2017/05/15/drupalcamp-bristol-early-bird-tickets-sessions-sponsors/">
 | ||
|                 « DrupalCamp Bristol 2017 - Early Bird Tickets, Call for Sessions, Sponsors
 | ||
|             </a>
 | ||
|         </div>
 | ||
|     
 | ||
|             <div class="is-half text-right">
 | ||
|             <a href="/blog/2017/06/09/introducing-the-drupal-meetups-twitterbot/">
 | ||
|                 Introducing the Drupal Meetups Twitterbot »
 | ||
|             </a>
 | ||
|         </div>
 | ||
|     </div>
 | ||
|     <div class="about-author">
 | ||
|     <h2>About the Author</h2>
 | ||
| 
 | ||
|     <img src="//www.oliverdavies.uk/assets/images/me-precedent.jpg" alt="Picture of Oliver" class="img-circle">
 | ||
| 
 | ||
|     <p>Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a Senior Developer at <a href="https://microserve.io">Microserve</a> and also provides freelance consultancy services for Drupal websites, PHP applications and Linux servers.</p>
 | ||
| </div>
 | ||
|                                     </main>
 | ||
| 
 | ||
|                                     <div class="col-md-3">
 | ||
|                                                     <div class="panel badges text-center">
 | ||
|     <a href="https://assoc.drupal.org/membership" title="I’m a Drupal Association member." class="is-block">
 | ||
|         <img
 | ||
|             src="//www.oliverdavies.uk/assets/images/badges/da-individual-member.png"
 | ||
|             alt="Drupal Association Individual Member"
 | ||
|             width="200"
 | ||
|         />
 | ||
|     </a>
 | ||
| 
 | ||
|     <div class="is-flex align-items-center">
 | ||
|         <img
 | ||
|             src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-developer.png"
 | ||
|             alt="Acquia Certified Developer - Drupal 8 Exam Badge"
 | ||
|             class="is-2"
 | ||
|         />
 | ||
| 
 | ||
|         <img
 | ||
|             src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-back-end.png"
 | ||
|             alt="Acquia Certified Back End Specialist - Drupal 8 Exam Badge"
 | ||
|             class="is-2"
 | ||
|         />
 | ||
|     </div>
 | ||
| 
 | ||
|     <a href="http://conference.phpnw.org.uk/phpnw17" class="is-block">
 | ||
|         <img src="//www.oliverdavies.uk/assets/images/badges/phpnw17.png" alt="">
 | ||
|     </a>
 | ||
| </div>
 | ||
|                             <div class="availability panel panel-default">
 | ||
|     <div class="panel-heading">Availability</div>
 | ||
| 
 | ||
|     <div class="panel-body">
 | ||
|                     <p>
 | ||
|     <i class="fa fa-thumbs-o-up text-warning"></i>
 | ||
| 
 | ||
|     
 | ||
|     Currently have limited part-time capacity
 | ||
| </p>
 | ||
|                     <p>
 | ||
|     <i class="fa fa-thumbs-o-down text-danger"></i>
 | ||
| 
 | ||
|     Currently no spare full-time capacity.
 | ||
|     
 | ||
| </p>
 | ||
|             </div>
 | ||
| </div>
 | ||
|                                                                                                     </div>
 | ||
|                 
 | ||
|             </div>        </div>
 | ||
|         <footer class="container">
 | ||
|             <p class="copyright">
 | ||
|                 © 2010-2017 Oliver Davies. Built with <a href="https://sculpin.io">Sculpin</a>.
 | ||
|             </p>
 | ||
| 
 | ||
|             <div class="meetups">
 | ||
|     <h2>Things that I organise</h2>
 | ||
|     <ul>
 | ||
|                     <li class="meetups--drupal-bristol">
 | ||
|                 <a href="http://www.drupalbristol.org.uk" title="Drupal Bristol">
 | ||
|                     <img
 | ||
|                         src="//www.oliverdavies.uk/assets/images/meetups/drupal-bristol.jpeg"
 | ||
|                         alt="Drupal Bristol logo"
 | ||
|                     >
 | ||
|                 </a>
 | ||
|             </li>
 | ||
|                     <li class="meetups--drupalcamp-bristol">
 | ||
|                 <a href="http://www.drupalcampbristol.co.uk" title="DrupalCamp Bristol">
 | ||
|                     <img
 | ||
|                         src="//www.oliverdavies.uk/assets/images/meetups/drupalcamp-bristol.png"
 | ||
|                         alt="DrupalCamp Bristol logo"
 | ||
|                     >
 | ||
|                 </a>
 | ||
|             </li>
 | ||
|                     <li class="meetups--phpsw">
 | ||
|                 <a href="http://phpsw.uk" title="PHPSW">
 | ||
|                     <img
 | ||
|                         src="//www.oliverdavies.uk/assets/images/meetups/phpsw.jpeg"
 | ||
|                         alt="PHPSW logo"
 | ||
|                     >
 | ||
|                 </a>
 | ||
|             </li>
 | ||
|             </ul>
 | ||
| </div>
 | ||
|         </footer>
 | ||
| 
 | ||
|         <script src="https://www.oliverdavies.uk/assets/js/site.js"></script>
 | ||
| 
 | ||
|                     <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11967257-1', 'auto'); ga('send', 'pageview');</script>
 | ||
|         
 | ||
|             </body>
 | ||
| </html>
 |