<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss" xmlns:media="http://search.yahoo.com/mrss/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>MontanaProgrammer.com</title>
	<atom:link href="https://montanaprogrammer.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://montanaprogrammer.com</link>
	<description>Drupal, PHP, Wordpress and the journey of a web developer.</description>
	<lastBuildDate>Sat, 10 Sep 2016 22:50:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">116534835</site><cloud domain="montanaprogrammer.com" path="/?rsscloud=notify" port="80" protocol="http-post" registerProcedure=""/>
<image>
		<url>https://s2.wp.com/i/webclip.png</url>
		<title>MontanaProgrammer.com</title>
		<link>https://montanaprogrammer.com</link>
	</image>
	<atom:link href="https://montanaprogrammer.com/osd.xml" rel="search" title="MontanaProgrammer.com" type="application/opensearchdescription+xml"/>
	<atom:link href="https://montanaprogrammer.com/?pushpress=hub" rel="hub"/>
	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>Correct Way in Adding JS/CSS to a Block in Drupal 7</title>
		<link>https://montanaprogrammer.com/2012/11/19/drupal-block-add-js-css/</link>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Tue, 20 Nov 2012 00:00:47 +0000</pubDate>
				<category><![CDATA[Drupal Tips & Tutorials]]></category>
		<category><![CDATA[Drupal]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1779</guid>

					<description><![CDATA[In Drupal, drupal_add_js() and drupal_add_css() are great functions for adding JS/CSS to the module or theme layer. However, if you do this inside of the &#8216;#markup&#8217; call in Drupal 7, you are doing it wrong. This becomes obvious when you turn block caching or anonymous page caching on, because the JS/CSS won&#8217;t be included on &#8230; <a href="https://montanaprogrammer.com/2012/11/19/drupal-block-add-js-css/" class="more-link">Continue reading <span class="screen-reader-text">Correct Way in Adding JS/CSS to a Block in Drupal&#160;7</span></a>]]></description>
										<content:encoded><![CDATA[<p>In Drupal, drupal_add_js() and drupal_add_css() are great functions for adding JS/CSS to the module or theme layer. However, if you do this inside of the &#8216;#markup&#8217; call in Drupal 7, you are doing it wrong.</p>
<p>This becomes obvious when you turn block caching or anonymous page caching on, because the JS/CSS won&#8217;t be included on the page. Here is the code in how to do it correctly.</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Implements hook_block_info().
 */
function mymodule_block_info() {
  $blocks['testblock'] = array(
    'info' =&gt; t('Testing Block'),
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function mymodule_block_view($delta = '') {
  $block = array();

  switch ($delta) {
    case 'testblock':
      $block['subject'] = t('Testing block');
      $block['content'] = array(
        '#markup' =&gt; mymodule_testblock_content(),
        '#attached' =&gt; array(
          'css' =&gt; array(
            drupal_get_path('module', 'mymodule') . '/css/mymodule.css',
          ),
          'js' =&gt; array(
            drupal_get_path('module', 'mymodule') . '/js/mymodule.js',
          ),
        ),
      );
      break;
  }
  return $block;
}

function mymodule_testblock_content() {
  return '&lt;p&gt;This is a testing block!&lt;/p&gt;';
}
</pre>
<p>This code will ultimately call drupal_add_js() and drupal_add_css(), but it is hit even with block caching on. It makes sense when you think about it, because block caching grabs the html generated in &#8216;#markup&#8217; once, and doesn&#8217;t call it again when it is cached.</p>
<p>Here is a <a href="http://shomeya.com/articles/getting-used-to-attached" target="_blank">great article</a> that goes through another example in how to do this.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1779</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>Options for Building a Website from a Developers Perspective</title>
		<link>https://montanaprogrammer.com/2012/06/24/developing-website-options/</link>
					<comments>https://montanaprogrammer.com/2012/06/24/developing-website-options/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Sun, 24 Jun 2012 14:23:09 +0000</pubDate>
				<category><![CDATA[Learn How to Work Smarter]]></category>
		<category><![CDATA[Drupal]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1742</guid>

					<description><![CDATA[Over the years I&#8217;ve built many different types of websites. These range from being a few pages, to being very customized with advanced features. I&#8217;ve learned there is no clear definition in the best way to create a website. But I do think there are advantages and disadvantages to pursuing different methods. This article takes &#8230; <a href="https://montanaprogrammer.com/2012/06/24/developing-website-options/" class="more-link">Continue reading <span class="screen-reader-text">Options for Building a Website from a Developers&#160;Perspective</span></a>]]></description>
										<content:encoded><![CDATA[<p>Over the years I&#8217;ve built many different types of websites. These range from being a few pages, to being very customized with advanced features. I&#8217;ve learned there is no clear definition in the best way to create a website. But I do think there are advantages and disadvantages to pursuing different methods. This article takes an analytical look at each option.<span id="more-1742"></span></p>
<p>Let&#8217;s take a closer look at the different approaches in building a website.</p>
<h2>Option #1: Static Website</h2>
<p>With this option you have full control over every page of the site. But the big disadvantage with this method is that you have to update every page of the site if a common element is updated (like a header or a footer). And if the site grows or more advanced features are added, it will take more time to maintain a static site. Unless you only have a two or three page site, this is usually not the best approach. The client also needs to consider that any basic text changes done to the site will need to be done by the web shop, which will add additional maintenance costs.</p>
<h2>Option #2: Custom Programming</h2>
<p>Unlike the static website option, this is usually the point where web programmers get involved. They can implement login systems or contact forms. But how well and how easily maintainable the website is, depends by the code produced or used. In other words, you are 100% in the hands of the programmers working on your projects. As you go to option #3 and #4, this becomes less of a factor&#8230;.because less of the system is created by custom code.</p>
<p>These types of websites usually take more time debugging and tweaking than options #3 an #4, because there is no type of framework system involved specifying how things should be implemented. This problem becomes more obvious when other programmers need to come in and work on the system.</p>
<h2>Option #3: Web Framework</h2>
<p>This improves on the previous option with a few advantages:</p>
<ul>
<li>Access plugins for the framework to more easily add new functionality.</li>
<li>Makes it easier for other programmers to work with the system, since the framework provides online documentation.</li>
<li>You can implement a template engine easily to more separate your code from the html (such as Smarty or Twig).</li>
<li>Allows for full customization of the website system.</li>
</ul>
<p>The biggest disadvantage with options #2 and #3 is that it requires more dependency on programming than on anyone else (when compared with the 4th option), including designers. Even if you implement a template engine, unless your designers know how to work with it, they will be depending on the programmers to make updates to the template files (but this often depends on the designer).</p>
<p>It is my opinion that it costs most web shops more money to go with this route, since their dependency on programmers becomes the highest priority on most projects. The exception to this is if you need a very large system that requires extensive customizations on every level.</p>
<h2>Option #4: CMS System</h2>
<p>This option takes most of what works with using a framework system, and adds the following advantages:</p>
<ul>
<li>Most CMS systems are designed to implement modules that provide high level features without any programming required. And unlike a lot of the plugins you see with framework systems, these usually also come with an admin interface.</li>
<li>Instead of depending on programmers to do most of the work for these types of projects, they are only required for very customized functionality. Everything else can be done by none programmers or designers.</li>
<li>If you use a CMS system that is actively maintained, you can upgrade your websites and automatically inherit the new features and security benefits of the system. With how much and how quickly things are changing on the web, this is a huge advantage, and lowers the cost of the upgrade process (especially when you look at the cost over a period of 6-10 years).</li>
<li>Out of the box allows non technical people to update their website with some basic training in how to use the system through the admin interface.</li>
</ul>
<p>The biggest disadvantage of a system like this is that you need to keep up on the updates for the CMS and modules to keep your site secure and you are investing resources with the idea that the CMS is going in the right direction. Hackers like to focus on vulnerabilities in systems that are widely used. But with that said, large gaping security holes in systems like this are less likely than Option #2 where programmers are creating custom code on their own.</p>
<p>You also need to keep in mind that the learning curve with a system like this is often higher than option #3, because you not only have to learn a framework type of system, but also have to learn how use the admin and contributed modules.</p>
<p>Even with small websites, I think going with <a href="http://www.drupal.org/" target="_blank">Drupal</a> or <a href="http://www.wordpress.org/" target="_blank">WordPress</a> is the way to go. Both of these systems are evolving and becoming more user friendly, and with Drupal you can create a very advanced website and save 75%-90% of the time it would take to create the same website outside of Drupal.</p>
<p>As a professional Drupal developer working for <a href="http://www.thebrickfactory.com/" target="_blank">The Brick Factory</a>, I have grown to love working with <a href="http://www.drupal.org/" target="_blank">Drupal</a>. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2012/06/24/developing-website-options/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1742</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>Drupal 8: A Look Ahead</title>
		<link>https://montanaprogrammer.com/2011/11/28/drupal-8-a-look-ahead/</link>
					<comments>https://montanaprogrammer.com/2011/11/28/drupal-8-a-look-ahead/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Tue, 29 Nov 2011 00:00:35 +0000</pubDate>
				<category><![CDATA[Drupal Tips & Tutorials]]></category>
		<category><![CDATA[Drupal]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1725</guid>

					<description><![CDATA[Since the release of Drupal 7, there has been much talk about what to expect for the next major release of Drupal. Drupal’s founder Dries Buytaert has outlined some of the goals for Drupal 8. These goals provide some insights into what we are likely to see in the next Drupal version. A few of &#8230; <a href="https://montanaprogrammer.com/2011/11/28/drupal-8-a-look-ahead/" class="more-link">Continue reading <span class="screen-reader-text">Drupal 8: A Look&#160;Ahead</span></a>]]></description>
										<content:encoded><![CDATA[<p>Since the release of Drupal 7, there has been much talk about what to expect for the next major release of Drupal. Drupal’s founder Dries Buytaert has outlined some of the goals for Drupal 8. These goals provide some insights into what we are likely to see in the next Drupal version.<span id="more-1725"></span></p>
<p>A few of the goals Dries has outlined includes the following: to integrate web services, optimize for HTML5, improve configuration management, improve design and usability, and to become mobile and tablet friendly.</p>
<h2>Web Services</h2>
<p>Web Services are one of the central features for Drupal 8. The goal for Drupal is to use the Representational State Transfer architecture (REST) for its integrated services functionality. Drupal 8 will aim to have the ability to produce data in different formats, such as JSON, XML as well as other formats.</p>
<p>The reason for this is that data for a website can no longer be assumed to mostly be full html pages. These days AJAX combined with communicating via web services is becoming more of a priority. It is good to see Drupal recognize this.</p>
<h2>HTML 5</h2>
<p>HTML 5 is another major initiative for the next Drupal release. All indications have shown that HTML 5 is a major milestone in the evolution of the internet and is now supported on the latest browsers. Drupal 8 is setting a goal to use HTML 5 as its default doctype.</p>
<h2>Configuration Management</h2>
<p>This initiative aims to create more control over configuration changes.  It allows configurations such as rollbacks, which can return the settings back to a particular time. It also allows the saving of a configuration change, such that changes made to one site, can be automatically applied to another site. To make these types of updates to Drupal, there are  a few changes that need to be made to the Drupal core and will result in much more control for Drupal developers.</p>
<h2>Design</h2>
<p>One of the main goals of Drupal 7 was to improve design and Drupal will aim to push this even further. Ideally the focus here will be to attract designers, which was not achieved in in the past. There will be a new core theme, which will not only be a beautifully designed theme, but it will path the way for an improved theme development process.</p>
<h2>Mobile Devices</h2>
<p>The previously mentioned initiatives of web services, html5 and design are directly contributing to improving the Drupal mobile experience (including tablets). A mobile initiative has been created to make Drupal the foremost mobile platform. There is a major shift predicted from desktops to tablets and mobile phones, and Drupal aims to be ready for this shift. It will be important that the backend is usable and accessible on mobile devices. </p>
<h2>Usability</h2>
<p>As with Design, usability was a strong focus for Drupal 7. For Drupal 8, usability will continue to be further emphasized. Formal usability tests are being conducted to see what can be improved. This will make Drupal easier to learn, quicker to perform tasks, easier to remember tasks, reduce errors, easier to recover from errors and overall make Drupal more pleasant to use. Drupal has sometimes been criticized for not being intuitive and quick to learn, so these improvements will be one of the most important of all the initiatives.</p>
<h2>Drupal 8 Progress</h2>
<p>You are able to keep track of the progress of these initiatives by following the <a href="http://groups.drupal.org/drupal-initiatives" target="_blank">Drupal 8 Initiatives</a> group. This group provides updates and announcements and is the best group to join if you are interested in keeping up to date with Drupal 8 news. </p>
<h2>Overview</h2>
<p>Drupal 8 promises some exciting changes to bring it in line with some of the latest trends. It will also improve aspects that have put people off by Drupal in the past, especially usability and design. </p>
<p><em>This article was written by Mitchel Xavier. He is a <a href="http://www.infinitytechnologies.com.au/webdesign/drupal-cms.html" target="_blank">Drupal Developer</a> in Sydney Australia</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/11/28/drupal-8-a-look-ahead/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1725</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>Drupal 7: Reflecting on my Experience</title>
		<link>https://montanaprogrammer.com/2011/10/31/drupal-7-reflection/</link>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Tue, 01 Nov 2011 01:00:33 +0000</pubDate>
				<category><![CDATA[Drupal Tips & Tutorials]]></category>
		<category><![CDATA[Drupal]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1708</guid>

					<description><![CDATA[Over the last few years I started working extensively with Drupal. I first started with Drupal 6 and late last year got into Drupal 7. Drupal has seen widespread growth and I only see the system improving going forward. This isn&#8217;t to say that Drupal is the only system you should use. But when looking &#8230; <a href="https://montanaprogrammer.com/2011/10/31/drupal-7-reflection/" class="more-link">Continue reading <span class="screen-reader-text">Drupal 7: Reflecting on my&#160;Experience</span></a>]]></description>
										<content:encoded><![CDATA[<p>Over the last few years I started working extensively with Drupal. I first started with Drupal 6 and late last year got into Drupal 7. Drupal has seen widespread growth and I only see the system improving going forward.<span id="more-1708"></span></p>
<p>This isn&#8217;t to say that Drupal is the only system you should use. But when looking at the system objectively, I think there are some advantages and disadvantages in choosing Drupal 7.</p>
<h2>Drupal 7 Advantages</h2>
<ul>
<li><strong>Admin Power</strong>: If you have experience creating PHP programming websites from scratch, than you know how much work it can take in programming a website. Drupal 7 takes care of 90% of what most people need in a website and provides the ability in having the website content updated through an easy to use admin interface. In fact, the UI interface from Drupal 6 to Drupal 7 has become much more user friendly. What took 20 hours to implement via a totally custom solution, now takes 30 minutes. This is probably the biggest advantage in using Drupal 7.</li>
<li><strong>Contributed Modules</strong>: When Drupal 7 first came out, most of the major contributed modules were still in beta. However, it finally seems like the modules are in stable releases and more contributed modules are upgraded more frequently now.</li>
<li><strong>Theme Layer</strong>: The default theme layer uses PHPTemplate, but other engines can be used. It provides a flexible way for non programmers to create and modify the design of the site without requiring PHP knowledge (even though some helps).</li>
<li><strong>Active Community</strong>: With this type of system, you want people actively working on the system and modules so that bugs and security flaws are ironed out quickly. With Drupal 7, we&#8217;ve seen updates to core come out every 1-2 months since the stable version has launched.</li>
<li><strong>Custom Programming</strong>: Drupal 7 has added many hooks that allows a PHP programmer to tap into the system and contributed modules to modify behavior. This allows for extreme flexibility. In the case where you need to create a custom module from the ground up, the Drupal form API becomes a very useful and secure tool at your disposal.</li>
<li><strong>Fields</strong>: With Drupal 7, fields became widespread across the system. You now can add fields to pretty much everything: nodes, users, comments, custom entities, etc&#8230; This allows for easy customization throughout the system and is a very handy feature.</li>
</ul>
<h2>Disadvantages of Drupal 7</h2>
<ul>
<li><strong>Learning Curve</strong>: Once you get familiar with the basic mechanics of the system, it becomes second nature in how to do the most common things via programming. However, getting to that point requires referencing the documentation a lot in the beginning. The curve has steepened with Drupal 7, with the introduction of entities&#8230;but in most cases you won&#8217;t need to create a custom entity. Also learning how to best use the theme layer can take time in figuring out.</li>
<li><strong>Security Concerns</strong> Just like any other shared code, the risk of someone taking advantage of a security flaw is greater than it is with a totally custom system. You can minimize this risk by keeping the code up to date with security updates. With this said, I have not come across a drupal site that has been kept relatively up to date.</li>
<li><strong>Updating</strong>: Updating the core code is not difficult. But when compared to WordPress, it is a little more time consuming&#8230;especially when you do it via FTP. There are ways in speeding up this process. But most people won&#8217;t know how to take advantage of these techniques.</li>
<li><strong>Lack of Documentation</strong>: When Drupal 7 first became stable, there was very little as far as completed documentation. This made the learning curve even more difficult. Be prepared to have to do multiple Google searches in finding sample code that helps you along. Hopefully in the next year this will not be an issue.</li>
<li><strong>Speed</strong>: There is a performance hit when using a system like this with all of the moving parts of the system. The cache does help things, but it still is not the fastest system out there. I do see this improving, up through Drupal 8.</li>
</ul>
<h2>Summary</h2>
<p>All in all, I believe Drupal 7 is a great option for most websites. It is flexible enough to handle complicated websites with a huge user base and combined with the contributed modules, most things can be handled without needing any PHP programming. The user interface has become much more user friendly since Drupal 6.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1708</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>What does it mean to be an Advanced PHP Programmer?</title>
		<link>https://montanaprogrammer.com/2011/06/03/what-does-it-mean-to-be-an-advanced-php-programmer/</link>
					<comments>https://montanaprogrammer.com/2011/06/03/what-does-it-mean-to-be-an-advanced-php-programmer/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Fri, 03 Jun 2011 23:00:46 +0000</pubDate>
				<category><![CDATA[Learn How to Work Smarter]]></category>
		<category><![CDATA[Learn PHP with Sample PHP Code]]></category>
		<category><![CDATA[PHP Tips and Tricks]]></category>
		<category><![CDATA[PHP Programmer Tips]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1687</guid>

					<description><![CDATA[On a previous post I had someone comment that they did not agree that the code implementation that was presented in the article was advanced (which was described in the title). They also claimed that I was not an advanced PHP programmer. This made me think. Not because my programming skill or knowledge was challenged. &#8230; <a href="https://montanaprogrammer.com/2011/06/03/what-does-it-mean-to-be-an-advanced-php-programmer/" class="more-link">Continue reading <span class="screen-reader-text">What does it mean to be an Advanced PHP&#160;Programmer?</span></a>]]></description>
										<content:encoded><![CDATA[<p>On a previous post I had someone comment that they did not agree that the code implementation that was presented in the article was advanced (which was described in the title). They also claimed that I was not an advanced PHP programmer.</p>
<p>This made me think. Not because my programming skill or knowledge was challenged. But because I&#8217;m not sure what makes code or a programmer &#8220;advanced&#8221;. This article is meant to take a look at this from an analytical perspective. I&#8217;m less concerned about general labels, and more concerned in how to improve going things going forward.<span id="more-1687"></span></p>
<h2>What makes a PHP programmer advanced?</h2>
<ol>
<li>Is it the programming concepts they understand? If so, which concepts do they need to understand in order to be considered advanced?</li>
<li>Is it the amount of experience they have or the size of the websites they&#8217;ve worked on? If so, how long do they need to have programmed or how large of a website do they need to have worked on to be considered advanced?</li>
<li>Is it how fast or efficient they program? If so how fast do they need to be?</li>
<li>Or maybe it is dependent on how modular their code is?</li>
<li>Does it depend on how much they makes?</li>
<li>Does it depend on whether the PHP programmer went to college or not, and which college they went to?</li>
<li>Or does it depend on the conferences the programmer has been to?</li>
</ol>
<p>The point I&#8217;m trying to make is that the term &#8220;advanced&#8221; is a relative term and is subjective to the person using it. A person may define a PHP programmer as advanced if they understand object oriented concepts. Or they may consider a PHP programmer advanced if they make a six figure income. But the fact of the matter is that you can use whatever labels you want, but that doesn&#8217;t define your value as a PHP programmer. Outside of general programming knowledge and concepts, there are many other factors to consider when analyzing the value of a PHP programmer. On top of that, the term &#8220;advanced&#8221; does not always equal &#8220;best&#8221; or &#8220;most valuable&#8221;. I wrote an article last year that goes through <a target="_blank">Analyzing the Value of a PHP Programmer</a>.</p>
<h2>What makes PHP code advanced?</h2>
<p>Similar to the previous section, I think this question is very subjective&#8230;and honestly I think it is irrelevant. You can have the most &#8220;advanced&#8221; PHP code in the world for a system, but it could also be the most worthless code because it is impractical in most situations. I also think it misses the point.</p>
<p>In any given scenario, the best solution is sometimes a simpler solution than a more advanced implementation. A real world example of this that I&#8217;ve experience is the use of object oriented PHP code. In a framework system such as Zend Framework, using object oriented code makes a lot of sense. But for a simple site with only a few pages and one simple form, using objected oriented code may be overkill and take much more time to implement. At one point in my career I had built a custom object oriented framework that I used with all of the custom sites I worked on. This worked okay at the time, but looking back I now realize that I had spent a lot of time that I didn&#8217;t need to spend creating a framework system when I could have used countless other systems that were already created. On top of that, there were some websites where I had used this system where it would have been faster to just put together a more simplified solution.</p>
<h2>Summary</h2>
<p>Instead of throwing around general terms in labeling code or other programmers, let&#8217;s come together and figure out ways in improving code together. Practical applications. Questions such as, when does it make sense to use OOP? Or how can we make this code more modular in a site that needs to re-use the code? These are the questions that are worth pursuing. This is how we can help others improve their code (without caring how &#8220;advanced&#8221; they are) and this is how we can improve our own code and increase our value as a PHP programmer!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/06/03/what-does-it-mean-to-be-an-advanced-php-programmer/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1687</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>Advanced PHP Form Validation</title>
		<link>https://montanaprogrammer.com/2011/05/03/advanced-php-form-validation/</link>
					<comments>https://montanaprogrammer.com/2011/05/03/advanced-php-form-validation/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Tue, 03 May 2011 23:00:17 +0000</pubDate>
				<category><![CDATA[Learn PHP with Sample PHP Code]]></category>
		<category><![CDATA[Sample PHP Code]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1663</guid>

					<description><![CDATA[Last year I wrote an article in how to implement basic validation for a form with PHP. I decided to re-look at this and improve what I did in that article. This time we are going to make a more advanced PHP form that is more responsive and effective. This PHP sample code has many &#8230; <a href="https://montanaprogrammer.com/2011/05/03/advanced-php-form-validation/" class="more-link">Continue reading <span class="screen-reader-text">Advanced PHP Form&#160;Validation</span></a>]]></description>
										<content:encoded><![CDATA[<p>Last year I wrote an article in how to implement basic validation for a form with PHP. I decided to re-look at this and improve what I did in that article. This time we are going to make a more <em>advanced PHP form</em> that is more responsive and effective.</p>
<p>This PHP sample code has many advantages over the previous article. Not only that, but for the most part it is easier to implement with more complexed forms where you need more than basic validation.<span id="more-1663"></span></p>
<h2>Requirements</h2>
<p>Below are the requirements for the code included in this PHP form tutorial:</p>
<ul>
<li>PHP 5</li>
<li><a href="http://www.jquery.com/" target="_blank">jQuery</a></li>
<li><a href="http://docs.jquery.com/Plugins/validation" target="_blank">jQuery Validate Plugin</a></li>
</ul>
<p>JavaScript has become standard in browsers, which makes client side form validation user friendly before submitting the form. In fact, in most cases, it is the standard for form validation on the web.</p>
<p>With that said, I do not recommend depending on client side validation for your forms&#8230;mainly in defending against hackers and bots. But most people who use your form should have JavaScript enabled.</p>
<p>You can <a href="/uploadedfiles/phpform/" target="_blank">view a demo of the PHP form in action</a>. You will not only see the standard validation (email, phone, and required fields), but we also take it a step further by validating check boxes. If the visitor checks the newsletter option, they must then check two topics before the form can be submitted (in the same way, you can do something like this with radio buttons). If there are errors in the form, and those errors are corrected, they will immediately disappear.</p>
<p>I took an example from the jQuery validation documentation and tweaked it a little bit to fit the form, for this PHP tutorial.</p>
<h2>Form HTML Page</h2>
<p>Below is the html for the page where the form will sit.</p>
<pre class="brush: xml; pad-line-numbers: false; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.5.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.validate.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/additional-methods.min.js&quot;&gt;&lt;/script&gt;

&lt;style type=&quot;text/css&quot;&gt;
label { 
	float: left; 
	padding-right:10px;
}
label.error { 
	float: none; 
	color: red; 
	padding-left: .5em; 
	vertical-align: top; 
}
p { 
	clear: both; 
}
.gray { 
	/*color: gray;*/
	display: none;
}
#newsletter_topics label.error {
	display: none;
	padding-left: 0px;
}
&lt;/style&gt;


&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
	// validate signup form on keyup and submit
	$(&quot;#signupForm&quot;).validate({
		rules: {
			firstname: &quot;required&quot;,
			lastname: &quot;required&quot;,
			email: {
				required: true,
				email: true
			},
			phone: {
				required: true,
				phoneUS: true
			},
			agree: &quot;required&quot;,
			'topic[]': {
				required: &quot;#newsletter:checked&quot;,
				minlength: 2
			}
		},
		messages: {
			firstname: &quot;Please enter your firstname.&quot;,
			lastname: &quot;Please enter your lastname.&quot;,
			email: &quot;Please enter a valid email address.&quot;,
			phone: &quot;Please specify a valid phone number.&quot;,
			agree: &quot;Please accept our policy.&quot;
		}
	});
	
	//code to hide topic selection, disable for demo
	var newsletter = $(&quot;#newsletter&quot;);
	
	// newsletter topics are optional, hide at first
	var inital = newsletter.is(&quot;:checked&quot;);
	var topics = $(&quot;#newsletter_topics&quot;)[inital ? &quot;removeClass&quot; : &quot;addClass&quot;](&quot;gray&quot;);
	var topicInputs = topics.find(&quot;input&quot;).attr(&quot;disabled&quot;, !inital);
	
	// show when newsletter is checked
	newsletter.click(function() {
		topics[this.checked ? &quot;removeClass&quot; : &quot;addClass&quot;](&quot;gray&quot;);
		topicInputs.attr(&quot;disabled&quot;, !this.checked);
	});
});
&lt;/script&gt; 

&lt;/head&gt;
&lt;body&gt;

&lt;form id=&quot;signupForm&quot; method=&quot;POST&quot; action=&quot;processform.php&quot;&gt; 
	&lt;fieldset&gt; 
		&lt;legend&gt;Signup Form&lt;/legend&gt; 
		&lt;p&gt; 
			&lt;label for=&quot;firstname&quot;&gt;*Firstname:&lt;/label&gt; 
			&lt;input id=&quot;firstname&quot; name=&quot;firstname&quot; /&gt; 
		&lt;/p&gt; 
		&lt;p&gt; 
			&lt;label for=&quot;lastname&quot;&gt;*Lastname:&lt;/label&gt; 
			&lt;input id=&quot;lastname&quot; name=&quot;lastname&quot; /&gt; 
		&lt;/p&gt; 
		&lt;p&gt; 
			&lt;label for=&quot;email&quot;&gt;*Email:&lt;/label&gt; 
			&lt;input id=&quot;email&quot; name=&quot;email&quot; /&gt; 
		&lt;/p&gt; 
		&lt;p&gt; 
			&lt;label for=&quot;phone&quot;&gt;*Phone Number:&lt;/label&gt; 
			&lt;input id=&quot;phone&quot; name=&quot;phone&quot; /&gt; 
		&lt;/p&gt; 
		
		&lt;p&gt;[ENTER POLICY HERE]&lt;/p&gt;
		&lt;p&gt; 
			&lt;label for=&quot;agree&quot;&gt;*Do you agree to our policy?&lt;/label&gt; 
			&lt;input type=&quot;checkbox&quot; class=&quot;checkbox&quot; id=&quot;agree&quot; name=&quot;agree&quot; /&gt; 
		&lt;/p&gt;
		
		&lt;p&gt; 
			&lt;label for=&quot;newsletter&quot;&gt;Would you like to receive our newsletter?&lt;/label&gt; 
			&lt;input type=&quot;checkbox&quot; class=&quot;checkbox&quot; id=&quot;newsletter&quot; name=&quot;newsletter&quot; /&gt; 
		&lt;/p&gt; 
		&lt;fieldset id=&quot;newsletter_topics&quot;&gt; 
			&lt;legend&gt;Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo&lt;/legend&gt; 
			&lt;label for=&quot;topic_marketflash&quot;&gt; 
				&lt;input type=&quot;checkbox&quot; id=&quot;topic_marketflash&quot; value=&quot;marketflash&quot; name=&quot;topic[]&quot; /&gt; 
				Marketflash
			&lt;/label&gt; 
			&lt;label for=&quot;topic_fuzz&quot;&gt; 
				&lt;input type=&quot;checkbox&quot; id=&quot;topic_fuzz&quot; value=&quot;fuzz&quot; name=&quot;topic[]&quot; /&gt; 
				Latest fuzz
			&lt;/label&gt; 
			&lt;label for=&quot;topic_digester&quot;&gt; 
				&lt;input type=&quot;checkbox&quot; id=&quot;topic_digester&quot; value=&quot;digester&quot; name=&quot;topic[]&quot; /&gt; 
				Mailing list digester
			&lt;/label&gt; 
			&lt;label for=&quot;topic[]&quot; class=&quot;error&quot;&gt;&lt;br /&gt;&lt;br /&gt;Please select at least two topics you'd like to receive.&lt;/label&gt; 
		&lt;/fieldset&gt; 
		&lt;p&gt; 
			&lt;input class=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Submit&quot;/&gt; 
		&lt;/p&gt; 
	&lt;/fieldset&gt; 
&lt;/form&gt; 

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>One thing you will notice is that there is no PHP code on this page. You will also notice that jQuery is used heavily. In the head tag we define which fields are required and the error messages to display if the field is not entered correctly. This is the largest improvement over the last form example, since the client side error handling is immediate and it displays the errors without posting the form. There was no client side validation in the previous <a href="/php-web-programming/php-form-validation/" target="_blank">PHP form article</a>.</p>
<p>If you are not familiar in working with jQuery, I highly recommend going through some basic jQuery examples. The bundled code I provide at the end of this PHP tutorial includes the jQuery files necessary in making this example work.</p>
<h2>PHP: Process the Form</h2>
<p>Since jQuery is JavaScript, if the visitor has JavaScript disabled, the validation on this page will not work and the form will be posted. With this in mind, we still need to do server side validation. I took the code that was used in the previous tutorial, and improved it for this example.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php 
/*
 * BEGIN CONFIG
 */

// The page you want the user to be redirected if there are no errors.
$thankYouPage = 'thanks.html';

// Define which values we are to accept from the form. If you add additional 
// fields to the form, make sure to add the form name values here.
$allowedFields = array(
	'firstname', 
	'lastname',
	'email',
	'phone',
	'agree',
	'newsletter',
	'topic',
);

// Specify the required form fields. The key is the field name and the value 
// is the error message to display.
$requiredFields = array(
	'firstname' =&gt; 'First name is required.', 
	'lastname' =&gt; 'Last name is required.',
	'email' =&gt; 'Email address is required.',
	'phone' =&gt; 'Phone number is required.',
	'agree' =&gt; 'You must agree with our policy.',
);

// Note: Since we are requiring two topics to be checked if they want to receive 
// our newsletter, we need to implement custom code.

/*
 * END CONFIG
 */


/*
 * Since we are doing javascript error checking on the form before the form gets submitted, 
 * the server side check is only a backup if the user has javascript disabled. Since this 
 * is unlikely, we are displaying the server side errors on a separate page of the form.
 * 
 * The more practical purpose of server side checking (in this case) is to prevent hackers from exploiting 
 * your PHP processing code.
 */


/*
 * BEGIN FORM VALIDATION
 */

$errors = array();

// We need to loop through the required variables to make sure they were posted with the form.
foreach($requiredFields as $fieldname =&gt; $errorMsg)
{
	if(empty($_POST[$fieldname]))
	{
		$errors[] = $errorMsg;
	}
}

// Loop through the $_POST array, to create the PHP variables from our form.
foreach($_POST AS $key =&gt; $value)
{
    // Is this an allowed field? This is a security measure.
    if(in_array($key, $allowedFields))
    {
        ${$key} = $value;
    }
}

// Code to validate the newsletter topic checkboxes
if(!empty($_POST['newsletter']))
{
	// They checked the newsletter checkbox...make sure they 
	// checked at least two topics.
	if(count($_POST['topic']) &lt; 2)
	{
		$errors[] = &quot;In order to receive our newsletter, you must check at least two topics.&quot;;
	}
}

/*
 * END FORM VALIDATION
 */


// Were there any errors?
if(count($errors) &gt; 0)
{
    $errorString .= '&lt;ul&gt;';
    foreach($errors as $error)
    {
        $errorString .= &quot;&lt;li&gt;$error&lt;/li&gt;&quot;;
    }
    $errorString .= '&lt;/ul&gt;';
 
    // display the errors on the page
    ?&gt;
    &lt;html&gt;
    &lt;head&gt;
    &lt;title&gt;Error Processing Form&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;h2&gt;Error Processing Form&lt;/h2&gt;
    &lt;p&gt;There was an error processing the form.&lt;/p&gt;
    &lt;?php echo $errorString; ?&gt;
    &lt;p&gt;&lt;a href=&quot;index.php&quot;&gt;Go Back to the Form&lt;/a&gt;&lt;/p&gt;
    &lt;/body&gt;
    &lt;/html&gt;
    &lt;?php 
}
else
{
    // At this point you can send out an email or do whatever you want
    // with the data...
 
    // each allowed form field name is now a php variable that you can access
 
    // display the thank you page
    header(&quot;Location: $thankYouPage&quot;);
}
?&gt;
</pre>
<p>A configuration area was added to the beginning of the file. Notice that in this code, if there is are no errors processing the form, we display the errors on this page instead of the previous form. This does several things:</p>
<p>1. Since the majority of people will have JavaScript enabled, the server side form validation is only meant as a backup and to prevent hackers from trying to exploit the form. So displaying errors on a blank page should suffice in this case. With that said, there may be times were going back to the form and pre-populating the fields makes sense.</p>
<p>2. This simplifies things. We don&#8217;t have to use PHP on the form html page at all.</p>
<p>I also do not use the short tag version of calling PHP for compatibility.</p>
<p>You can download all of the <a href="/uploadedfiles/phpform.zip">PHP Form Code</a>, which includes the required JavaScript files.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/05/03/advanced-php-form-validation/feed/</wfw:commentRss>
			<slash:comments>38</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1663</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>The Last Few Years: What a PHP Programmer Has Learned</title>
		<link>https://montanaprogrammer.com/2011/04/22/reflection-of-a-php-programmer/</link>
					<comments>https://montanaprogrammer.com/2011/04/22/reflection-of-a-php-programmer/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Fri, 22 Apr 2011 23:00:12 +0000</pubDate>
				<category><![CDATA[PHP Tips and Tricks]]></category>
		<category><![CDATA[PHP Programmer Tips]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1603</guid>

					<description><![CDATA[Over the last few years I&#8217;ve become more familiar with multiple systems. I go over a few things that I&#8217;ve learned and the areas that I hope to improve upon over the next year. Linux Terminal Previously, I used the terminal through SSH when I needed to. But these times were limited to basic functionality. &#8230; <a href="https://montanaprogrammer.com/2011/04/22/reflection-of-a-php-programmer/" class="more-link">Continue reading <span class="screen-reader-text">The Last Few Years: What a PHP Programmer Has&#160;Learned</span></a>]]></description>
										<content:encoded><![CDATA[<p>Over the last few years I&#8217;ve become more familiar with multiple systems. I go over a few things that I&#8217;ve learned and the areas that I hope to improve upon over the next year.<span id="more-1603"></span></p>
<h2>Linux Terminal</h2>
<p>Previously, I used the terminal through SSH when I needed to. But these times were limited to basic functionality. Recently I became more familiar in working with MySQL over the command line and creating PHP shell scripts. The advantages of running PHP through the shell are that you can use a program like Screen to run a PHP daemon script. This allows the PHP script to run infinitely, which is useful in some applications when you want to check for updates every xx seconds or minutes (in a sense, it is an upgrade in using cron jobs). You also are no longer limited to the PHP memory config or time limits that are set by the php.ini file, so you have more freedom. I was able to put this to use when creating <a href="http://www.slurp140.com" target="_blank">Slurp140</a>, among several other projects.</p>
<h2>SVN Repository</h2>
<p>I&#8217;ve always heard of SVN, but I hadn&#8217;t used it very much prior to moving to Helena, MT. You can look at revision history, export previous revisions, see who did what revision and when, among many other useful features. For managers, they can see exactly the new code a programmer wrote in emails that are sent when the code is committed to the repository&#8230;.instead of having to figure out what they did. In fact, it seems that every medium to large size company I have worked for in the last 2.5 years uses this system.</p>
<p>More recently I started using Git in Drupal contributions.</p>
<h2>Drupal</h2>
<p>I&#8217;ve been aware of Drupal for a long time, but it wasn&#8217;t until 2009 when I started using the system quite often. In fact, I&#8217;ve grown to love Drupal. It has a huge community with modules that cover most everything that you need. In fact, unless you need a very custom solution, there usually is a module that exists for what you are looking for.</p>
<p>I was able to create many custom modules for projects that needed custom interfaces. I was pleasantly surprised by how well thought out their module system is laid out, and how easy it is to tap into Drupal core functionality.</p>
<p>More recently I started working with Drupal 7. I found this version a little more difficult to pickup than Drupal 6, but it is more powerful.</p>
<h2>WordPress</h2>
<p>Most of my experience with WordPress has been through this site, but I also worked on several projects that used this system. I don&#8217;t like it as much as Drupal, but for a simple blog&#8230;.Wordpress is hard to beat. </p>
<h2>CiviCRM</h2>
<p>This technically is a module for Drupal (and Joomla), but it is such a huge system that it is worth mentioning. Unfortunately, I don&#8217;t agree with how some elements have been put together for this system&#8230;.but it has a ton of features and I&#8217;ve seen it used with millions of contacts for projects that I&#8217;ve worked on. It was good to get some experience with CRM a system.</p>
<h2>Mailing Lists</h2>
<p>I&#8217;ve worked with mailing list systems in the past, but over the last year I&#8217;ve worked with many more. Lyris, Mail Chimp, and Constant Contact&#8230;just to name a few. All of them have different API&#8217;s that are very different from each other. I personally find Mail Chimp to be the easiest to use out of all of them, and Lyris to be the most difficult (but it does have a lot more features).</p>
<h2>Going Forward</h2>
<p>I feel very good with the diversity in different systems I&#8217;ve learned how to use. I&#8217;ve become a better programmer because of it. But I do feel like I can improve on my command line knowledge.</p>
<p>Knowing what I know now five years ago, I probably would have spent more time understanding how servers work on a basic level, and how to edit code and work with a database using only the command line. With that said, I don&#8217;t think that knowing these things makes you a great programmer. In my experiences, reliability and organization are a lot more valuable to the PHP programmer!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/04/22/reflection-of-a-php-programmer/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1603</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP Content Management System of Choice</title>
		<link>https://montanaprogrammer.com/2011/02/05/php-cm/</link>
					<comments>https://montanaprogrammer.com/2011/02/05/php-cm/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Sun, 06 Feb 2011 00:00:29 +0000</pubDate>
				<category><![CDATA[PHP Tips and Tricks]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1630</guid>

					<description><![CDATA[Guest author Carrie Donalds goes through her perspective on WordPress, while I give you my take on this subject. There are many PHP content management systems out there, and we go through a few different perspectives. If you want to write a guest post on a specific PHP or project management related topic, please contact &#8230; <a href="https://montanaprogrammer.com/2011/02/05/php-cm/" class="more-link">Continue reading <span class="screen-reader-text">PHP Content Management System of&#160;Choice</span></a>]]></description>
										<content:encoded><![CDATA[<p>Guest author Carrie Donalds goes through her perspective on WordPress, while I give you my take on this subject.  There are many PHP content management systems out there, and we go through a few different perspectives.</p>
<p>If you want to write a guest post on a specific PHP or project management related topic, please <a href="/contact/">contact me</a>.<span id="more-1630"></span></p>
<p>WordPress is a popular publishing platform that was primarily used for blogging purposes. Part of the widespread popularity of WordPress was due to the ease of use and quick setup. Users didn&#8217;t have to have a background in website programming in order to create and install an online platform to share their thoughts with the world. The downside to this popular platform in the beginning was the limited template designs and plugins that were available. The user could post blog entries or write articles, but were unable to customize the look and add other features to their WordPress site very easily.</p>
<p>Compared to other scripting languages, <a href="/learn-php/beginning-php-part1/" target="_blank">learning PHP</a> is fairly easy, which makes getting down and dirty with with WordPress even easier. Over time, web designers and website programmers began using custom PHP programming in conjunction with WordPress to build websites. This allowed designers to use a readymade platform while having the ability to customize the look of their website, without PHP programming knowledge. This technique made it fast and profitable to build a website that was completely customizable according to the client&#8217;s preferences, without having to hand code everything. Another thing that is nice about using WordPress as a content management system is the availability of plugins. Plugins are like miniature programs that can be easily added to a website to enhance its use or functionality. For example, there are plenty of readymade plugins that can do just about anything from posting the current date and time, to allowing your site visitors to sign up for a newsletter. These can be installed quickly and most of them are simple to customize. </p>
<p>Not only is <a href="http://www.webhostingsearch.com/php-web-hosting.php" target="_blank">PHP hosting</a> required for building a site with WordPress, but it is a good idea because it gives you access to other systems that also use PHP and MySQL. PHP has a great open source community that provides plenty of support to help with technical issues or other custom programming projects. All of the plug and play extras, such as forums and chat rooms are a piece of cake to install. </p>
<h2>Chris Roane’s Perspective</h2>
<p>I agree that WordPress is a powerful platform for building simple websites, like a blog. However, in the last few years, I’ve determined that Drupal is a more programmer friendly option when you really need to do a lot of customizations or implement advanced features. The module system in Drupal is much more integrated, and you can more easily modify deeper aspects of Drupal than you can in WordPress.</p>
<p>With that said, WordPress is more easily picked up by none PHP programmers (mainly due to the complexity of the Drupal API). Also, the admin interface for WordPress is more user friendly than Drupal, but now that is debatable since Drupal 7 launched (early last month). Both systems have active and large communities that provide tons of open source code to customize your website through plugins and modules. There are other options, but I would put Drupal and WordPress at the top of my go to list for the best PHP CMS systems out there.</p>
<blockquote><p><strong>About Carrie:</strong></p>
<p>This article is contributed by Carrie Donalds, a senior writer for <a href="http://www.webhostingsearch.com" target="_blank">WebHostingSearch.com</a>. She has been writing since her school days&#8211;from academic writing to blogging. Aside from writing, Carrie is also into creating home-cooked meals.</p></blockquote>
<p><em>What is your favorite PHP content management system, and why?</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/02/05/php-cm/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1630</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP Programming With Leadership</title>
		<link>https://montanaprogrammer.com/2011/01/01/php-programming-with-leadership/</link>
					<comments>https://montanaprogrammer.com/2011/01/01/php-programming-with-leadership/#comments</comments>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Sat, 01 Jan 2011 20:51:29 +0000</pubDate>
				<category><![CDATA[PHP Tips and Tricks]]></category>
		<category><![CDATA[PHP Programmer Tips]]></category>
		<category><![CDATA[Programming Advice]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1616</guid>

					<description><![CDATA[Until recently, I thought leadership was a gift that you either had or did not have. I still believe it is something you can learn and get better at, but I&#8217;m now realizing that leadership is something we all have to some capacity. In fact, to be a successful PHP programmer, you have to be &#8230; <a href="https://montanaprogrammer.com/2011/01/01/php-programming-with-leadership/" class="more-link">Continue reading <span class="screen-reader-text">PHP Programming With&#160;Leadership</span></a>]]></description>
										<content:encoded><![CDATA[<p>Until recently, I thought leadership was a gift that you either had or did not have. I still believe it is something you can learn and get better at, but I&#8217;m now realizing that leadership is something we all have to some capacity. <em>In fact, to be a successful PHP programmer, you have to be a good leader.</em><span id="more-1616"></span></p>
<p>When I think of leadership, I typically think of someone leading a group of people through a project or a task. But when you look at a good leader, their ability not only lies in how they manage others&#8230;.but also how they manage their own time and productivity. An <strong>excellent PHP programmer</strong> is not only intelligent, but they also have a good understanding in how to make a project successful and refuse to make any promises or commitments that are not realistic.</p>
<p>Whatever you do, you are responsible for leading your own life. This includes at work and at home&#8230;even if you are not in what is considered a &#8220;leadership position&#8221;. How you interact with people, what you do with your time, how you handle problems, etc&#8230;all deal with choices that you make every day. You are the master/commander/chief/president of your own life.</p>
<p>Let&#8217;s take a look at how this principle relates to the web programming industry. We have a PHP programmer who works at a company we will call Cool Ass Websites. A project comes in that they want a cost estimate on. Management sends the information to the programmer and asks for a time estimate.</p>
<p>Now a programmer with good leadership skills will first determine if they can create an accurate time estimate based on the provided specification (see my <a href="/web-project-management/website-specification-how-to/" target="_blank">Website Specification How To Guide</a>). If they cannot, the programmer will request more information. If they can accurately determine a time estimate for the project, the next question they will ask themselves is if they can get the project done in the specified time line (if this was included), based on what is currently on their plate. They will not promise to complete a project in a time line that does not fit in with their work load&#8230;.without either adjusting the current work load or pushing back deadlines.</p>
<p>Not only that, but the time estimates this programmer provides for their time is fairly accurate. In most cases they are able to get the project done in less time than they anticipate, which makes project cost estimates and project time lines go smoothly.</p>
<p>If you have any upper management experience in this industry, you realize that what this programmer is doing is not different than what a good project manager or team leader would be doing for multiple people. It shows signs of initiative and responsibility&#8230;traits that we all can learn.</p>
<p>This type of PHP programmer is valuable because they do not need someone constantly babysitting them. They can be trusted and people can depend on them confidently. If you are a manager, these are the people you want to manage because they will make you look good. </p>
<p>If you are in a programming related field, show people that when things get tough, you are the last one they should consider firing!</p>
<p>Also, if you are looking to expand your leadership role in the programming field, look into what an <a href="http://www.creighton-online.com/programs/online-masters-degree-in-information-technology-management.asp">online Information Technology degree</a> has to offer.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://montanaprogrammer.com/2011/01/01/php-programming-with-leadership/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1616</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
		<item>
		<title>Awesome T-Shirt and Interview</title>
		<link>https://montanaprogrammer.com/2010/12/23/awesome-tshirt/</link>
		
		<dc:creator><![CDATA[Chris Roane]]></dc:creator>
		<pubDate>Thu, 23 Dec 2010 18:36:00 +0000</pubDate>
				<category><![CDATA[Site Announcements]]></category>
		<guid isPermaLink="false">http://www.montanaprogrammer.com/?p=1608</guid>

					<description><![CDATA[I review a t-shirt and talk about an interview and the future. I received a shirt from Crazy Like That. I came across this site a while ago, and I liked the &#8220;geek&#8221; humor that is on these shirts. It is funny to see how much people know about the geek world, in how they &#8230; <a href="https://montanaprogrammer.com/2010/12/23/awesome-tshirt/" class="more-link">Continue reading <span class="screen-reader-text">Awesome T-Shirt and&#160;Interview</span></a>]]></description>
										<content:encoded><![CDATA[<p>I review a t-shirt and talk about an interview and the future.<span id="more-1608"></span></p>
<p>I received a shirt from <a href="http://www.crazylikethat.com/" target="_blank">Crazy Like That</a>. I came across this site a while ago, and I liked the &#8220;geek&#8221; humor that is on these shirts. It is funny to see how much people know about the geek world, in how they respond to these shirts.</p>
<p>They sent me the <a href="http://www.crazylikethat.com/geek-t-shirts/binary-t-shirt.html" target="_blank">Binary Geek T-Shirt</a>. The quality is great, and the lettering is crisp. If you want a good quality, geek humor t-shirt&#8230;.you need to take a look at their site.</p>
<p>They also did an email interview of me, which I really enjoyed. <a href="http://www.crazylikethat.com/blog/2010/11/interview-with-chris-roane-the-montanna-programmer/" target="_blank">Check out the interview</a> on their site. If you want to see a different side of me that is not shown very much on this website, take a ponder at the article.</p>
<p>Things have been very busy over the last month&#8230;.but fear not! I have not forgot about this site or given up on it. I plan on getting back to a more regular writing schedule soon. On an interesting note, even through my writing silence, I have been bringing in more traffic through search engines. So stay tuned!</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1608</post-id>
		<media:content medium="image" url="https://1.gravatar.com/avatar/143695cbd182ef0ef39f0b6e35df362e5deff7b730957a6b33ea565b836731e9?s=96&amp;d=https%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;r=G">
			<media:title type="html">chrisroane</media:title>
		</media:content>
	</item>
	</channel>
</rss>