<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Envision Interactive &#124; Dallas, TX</title>
	<atom:link href="http://envisioninteractive.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://envisioninteractive.com</link>
	<description>An Interactive Advertising &#38; Marketing Agency</description>
	<lastBuildDate>Fri, 18 May 2012 01:48:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Three Advantages on Why Your Company Should Invest Time Into Google+</title>
		<link>http://envisioninteractive.com/social-media-marketing/three-advantages-on-why-your-company-should-invest-time-into-google/</link>
		<comments>http://envisioninteractive.com/social-media-marketing/three-advantages-on-why-your-company-should-invest-time-into-google/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 21:34:36 +0000</pubDate>
		<dc:creator>Andrea Freeman</dc:creator>
				<category><![CDATA[Social Media Marketing]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2255</guid>
		<description><![CDATA[Google+ launched its brand pages for organizations and businesses a little over a month ago. Like Facebook Business Pages, Google+ brand pages are used to promote activities, share information, and interact with fans/stakeholders. What was your first reaction to the initial launch?]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2012/02/GoogleLogo-150x150.jpg" alt="" title="GoogleLogo" width="150" height="150" class="aleft floater" /> As you may know, <a href="http://mashable.com/2011/11/07/google-launches-branded-pages/" title="Google+ Launches Branded Pages" rel="nofollow"> Google+ launched its brand pages</a> for organizations and businesses a little over a month ago. Like Facebook Business Pages, Google+ brand pages are used to promote activities, share information, and interact with fans/stakeholders. What was your first reaction to the initial launch? Were you excited or did you think it was just another social media channel?</p>
<p>You might already devote a lot of your time to managing a Facebook and Twitter page so you may think that adding another social media channel to your to-do list isn’t all that important. <span id="more-2255"></span></p>
<p>Before you dismiss the idea of investing time into a Google+ page, consider these top three advantages.</p>
<ol class="wide">
<li><strong>Google+ brand pages are professional, informational, and industry-specific focused.</strong><br />
Okay, so Google+ has 40 million users compared to Facebook’s  800 million, but that doesn’t mean you can’t start the buzz about your business and be heard. The most popular brands were quick to implement <a href="http://thebiggandbusiness.com/articles/how-brands-engage-fans-in-google-pages" title="How Brands Engage Fans in Google+ Pages" rel="nofollow">engagement tactics to interact with fans</a> on their new brand pages.</p>
<p>Think about the advantages of having a smaller user base. Unlike Facebook, applications, “Happy birthday!” comments, and games people play are not a part of Google+ so you can direct your attention to those in your circles, otherwise known as your target audience(s), create and maintain strong relationships with your customers, and focus on the content that really matters: yours.</li>
<li><strong>Having a Google+ brand page will impact search rankings</strong><br />
<img src="http://envisioninteractive.com/wp-content/uploads/2012/02/google+-brand-page-260x300.png" alt="" title="google+-brand-page" width="260" height="300" class="aleft floater" /> Since Google has a strong presence in the internet world, they are the ones who decide who appears first in searches. By having a brand page, you can improve and increase your visibility.</p>
<p>If the possibility to highlight Google+ pages is near, your brand page could appear at the top of a search. Since the initial launch, Google didn’t change anything to its existing method. What does this mean? It means that they indirectly favor their brand pages by placing them on high importance on factors such as “content freshness” so obviously, with Google+ pages, content is more likely to be considered fresh than non-Google+ pages. Up to the top of the search your business goes!</p>
<p>It’s only a matter of time until Google+ will be integrated with other their services such as Places, Maps, Web/Image search, and YouTube and surpass social media rankings. Why? Because Google has the means to promote its social network and pages from within, something Facebook and Twitter cannot do.</p>
<p>Google is always evolving so if a feature that enables users to bypass search altogether is unveiled soon, Google+ could be the answer for businesses in the future. What this means is that if user enters a “+” before an inquiry, s/he could immediately be sent to the organization’s or business’s page, therefore increasing traffic. If this kind of feature takes off, those without a Google+ page will be neglected.</li>
<li><strong>Your Google+ page is essentially a second website for your business.</strong><br />
Tell me, could you really say no if your <a href="http://mashable.com/2011/10/22/what-google-brand-pages-could-look-like-pics/" title="What Google+ Brand Pages Could Look Like [PICS]" rel="nofollow">Google+ brand page could look like this</a>? Having a brand page is just like a second website, only better. Instead of waiting for people to find you, those interested in your business or organization are already there waiting for you. Through the +1 feature, a Facebook-like button, traffic can increase to your page when users read and communicate to their circles what they like about the content you share. Moreover, you can see how your audience(s) engages with your brand and how they feel about it.</p>
<p>Check out <a href="https://plus.google.com/102371865054310418159/posts" title="NASA - Google+" rel="nofollow">NASA’s Google+ page</a>. They were one of the first government agencies to create a Google+ page and it looks like they’re off to a great start on catching up with their number of Facebook fans with little over 58,000 people in their circles.</p>
<p>Currently, Google+’s hangouts (live group video chats) are limited to 10 people, but can you imagine having industry-focused chats with those in your circles? Facebook users will soon find themselves on Google+ because of closer ties with those in their communities.</li>
</ol>
<p>Although there aren’t a lot of Google+ users at the moment, <a href="http://mashable.com/2011/11/08/how-to-google-plus-brand-page/" title="How to Set Up a Google+ Brand Page" rel="nofollow">set up your Google+ page</a> anyway and begin expanding your presence online. It’s like a city. You want to build a big city that people can grow into. While Google+ continues to grow, take the time to update others about your brand, maintain your page, grow your circles, and wait for the number of users to roll in.</p>
<p>If you aren’t sure if Google+ is right for your business and would like to talk with an Envision Interactive social media expert, visit us at: <a href="http://envisioninteractive.com/" title="Envision Interactive">www.envisioninteractive.com</a>. We look forward to being your plus one!</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/social-media-marketing/three-advantages-on-why-your-company-should-invest-time-into-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal 7 Views with Faceted Filters, without ApacheSolr</title>
		<link>http://envisioninteractive.com/drupal/drupal-7-views-with-faceted-filters-without-apachesolr/</link>
		<comments>http://envisioninteractive.com/drupal/drupal-7-views-with-faceted-filters-without-apachesolr/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 19:08:51 +0000</pubDate>
		<dc:creator>Mark Sims</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2128</guid>
		<description><![CDATA[Search facets and filtering are a great way to guide your user to the information they are looking for. With facets, we can create an intuitive way for users to narrow down the items that are visible on the screen. Drupal's core search capability does not provide a way to implement facets, so we need to look at contributed modules to achieve this. In Drupal 6, we would reach for the Apache Solr Search module. This is a great, high performance solution, but it has it's drawbacks. Installing Solr on your web server can be tricky, and with most shared hosting accounts not even permitted. Fortunately, with Drupal 7 and a few API modules, we can incorporate these wonderful little facets without the need for a full-blown Solr setup.]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/darth-drupal-150x150.jpg" alt="" title="darth-drupal" width="170" height="170" class="aleft floater" /> Search facets and filtering are a great way to guide your user to the information they are looking for. With facets, we can create an intuitive way for users to narrow down the items that are visible on the screen. Drupal&#8217;s core search capability does not provide a way to implement facets, so we need to look at contributed modules to achieve this. In Drupal 6, we would reach for the Apache Solr Search module. This is a great, high performance solution, but it has it&#8217;s drawbacks. Installing Solr on your web server can be tricky, and with most shared hosting accounts not even permitted. Fortunately, with Drupal 7 and a few API modules, we can incorporate these wonderful little facets without the need for a full-blown Solr setup. <span id="more-2128"></span></p>
<p>As an example, we are going to walk through creating a photo gallery using Views. We will then use the powerful combination of the Search API, Entity API and Facet API to allow users to filter the photos using 2 facet blocks.</p>
<h2>Create the content type and test data</h2>
<p>First, let&#8217;s start by creating our content type, called <em>Photo</em>, with the following fields:</p>
<ul>
<li>Title</li>
<li>Photo &#8211; Image</li>
<li>Location &#8211; List (text)</li>
<li>Type &#8211; List (text)</li>
</ul>
<p>Make sure to populate your Location and Type lists with some values. Next, we need to generate test data using <a href="http://drupal.org/project/devel">Devel Generate content</a>. I created 50 Photo nodes, but feel free to create a different amount if you prefer.</p>
<h2>Download the API modules</h2>
<p>Download the <a href="http://drupal.org/project/search_api">Search API</a>, <a href="http://drupal.org/project/entity">Entity API</a>, <a href="http://drupal.org/project/facetapi">Facet API</a> and Database search modules to your modules directory. Now, visit the Modules admin page (/admin/modules) and enable the following modules:</p>
<ul>
<li><a href="http://drupal.org/project/search_api">Search API</a></li>
<li>Search facets</li>
<li>Search views</li>
<li><a href="http://drupal.org/project/entity">Entity API</a></li>
<li><a href="http://drupal.org/project/facetapi">Facet API</a></li>
<li>Database search</li>
</ul>
<h2>Configure the search server</h2>
<p>Let&#8217;s go to the Configuration admin page (/admin/config) and click on the <strong>Search API</strong> link. You should now be on the <a href="http://drupal.org/project/search_api">Search API</a> configuration page:</p>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-1.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-1.png" alt="" title="no-solr-1" width="680" height="127" class="bdr1px" /></a></p>
<p>Click on the <strong>Add server</strong> link and you will see this form:</p>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-2.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-2.png" alt="" title="no-solr-2" width="469" height="557" class="bdr1px" /></a></p>
<p>Choose a name for your server (I chose MySQL) and select <strong>Database service</strong> for the <em>Service class</em> field. Click the <strong>Create server</strong> button, and you will see the following:</p>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-3.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-3.png" alt="" title="no-solr-3" width="680" height="605" class="bdr1px" /></a></p>
<h2>Configure the search index</h2>
<p>Now, click back to the <a href="http://drupal.org/project/search_api">Search API</a> config page, and click the <strong>Add index</strong> link. You will see the following:</p>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-4.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-4.png" alt="" title="no-solr-4" width="658" height="784" class="bdr1px" /></a></p>
<p>Use the following values:</p>
<ul>
<li>Index name: GalleryIndex</li>
<li>Item type: Node</li>
<li>Server: MySQL</li>
<li>Index items immediately: checked</li>
</ul>
<p>Now, click the <strong>Create index</strong> button. We are now faced with a rather large form that will allow us to select which fields we would like to index and make available to Views. We are going to check the following:</p>
<ul>
<li>Content type</li>
<li>Location</li>
<li>Type</li>
</ul>
<p>Now, click the <strong>Save configuration</strong> button.</p>
<p>We now need to select the indexed items that we would like to have facets for. Click on the <strong>Facets</strong> tab and you will see the indexed items we chose. It is recommended for performance reasons to only choose the facets that are needed, so let&#8217;s select <strong>Location</strong> and <strong>Type</strong>. Click on the <strong>Save configuration</strong> button when you are done.</p>
<h2>Don&#8217;t forget to run Cron!</h2>
<p>We must run cron at this point to populate the search index.</p>
<h2>Create the view</h2>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-5.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-5.png" alt="" title="no-solr-5" width="680" height="703" class="bdr1px" /></a></p>
<p>Let&#8217;s go to the Structure &raquo; Views page and click on <strong>Add new view</strong> link. Use the following values:</p>
<ul>
<li>View name: Gallery</li>
<li>Show: GalleryIndex (this corresponds to the name of the search index we created earlier)</li>
<li>Create a page: checked</li>
<li>Path: gallery</li>
<li>Display format: Grid</li>
</ul>
<p>Now, click the <strong>Continue &amp; edit</strong> button.</p>
<h2>Tweak the view</h2>
<p>The View setup is pretty straight ahead. We need to add a filter criteria for the <em>Photo</em> Content type. Notice that it is labeled <em>Indexed Node: Content type</em>. Once we do that, we just need to remove the existing <em>Node ID</em> field and add the <em>Indexed Node: Photo</em> field. Now, save your view.</p>
<h2>Place the Facet blocks</h2>
<p>Go to the Structure &raquo; Blocks page (/admin/structure/block) and you should see the facet blocks for Location and Type in the listing. All we need to do is put them in the region in which we want them to appear. In my case I selected Sidebar Second. </p>
<h2>Success!</h2>
<p>Now, visit the Gallery page (/gallery) and you should see something similar to this:</p>
<p><a class="grouped_elements" rel="apachesolr" href="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-6.png"><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/no-solr-6.png" alt="" title="no-solr-6" width="680" height="397" class="bdr1px" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/drupal/drupal-7-views-with-faceted-filters-without-apachesolr/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Three Reasons to Use Pinterest to Boost Your Brand Image</title>
		<link>http://envisioninteractive.com/social-media-marketing/three-reasons-to-use-pinterest-to-boost-your-brand-image/</link>
		<comments>http://envisioninteractive.com/social-media-marketing/three-reasons-to-use-pinterest-to-boost-your-brand-image/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 22:16:22 +0000</pubDate>
		<dc:creator>Huong Vo</dc:creator>
				<category><![CDATA[Social Media Marketing]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2109</guid>
		<description><![CDATA[Growing up, I remember ripping pages out of magazines to save beauty tips, pretty pictures of models, coveted clothes and shoes, and do-it-yourself crafts. As my pile grew and my “idea” box got heavier, I thought, “There’s got to be an easier way.” And there was. My life got easier and a bit more fun when Pinterest, an online pinboard where you can “organize and share things you love,” launched just this last year.]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2012/01/pinterest-logo.png" alt="" title="pinterest-logo" width="125" height="125" class="floater aleft" /> Growing up, I remember ripping pages out of magazines to save beauty tips, pretty pictures of models, coveted clothes and shoes, and do-it-yourself crafts. As my pile grew and my “idea” box got heavier, I thought, “There’s got to be an easier way.” And there was. My life got easier and a bit more fun when <a href="http://pinterest.com/" title="Pinterest">Pinterest</a>, an online pinboard where you can “organize and share things you love,” launched just this last year. <span id="more-2109"></span></p>
<p>From architecture to weddings, you can create themed boards and “pin” your favorite things, places, people, products, animals, beauty tips, and advice on just about anything you can think of. The best part? When you click on an image, it takes you directly to the website where the image is from so you can buy the product, discover an unsung DIY blogger, find a website that gives ideas on activities you can do with your kids or how to take stains out of your carpet using a home remedy.</p>
<p>Sounds great already, doesn’t it? Sure, it’s great for your personal life, but have you thought about taking Pinterest one step further and using this social media platform for your business? Here are three reasons why you should use Pinterest to improve your brand’s image.</p>
<ol class="wide">
<li>
    <img src="http://envisioninteractive.com/wp-content/uploads/2012/01/pinterest.png" width="600" height="300" alt="" /></p>
<p>   <b>Boost your brand image by telling people who you are through pictures.</b> Everyone is a different learner:  auditory learners, tactile/kinesthetic learners (those who learn via action), and <a href="http://www.lbctnz.co.nz/sld/LearningStyles.html" title="Visual Learners">visual learners</a>. Reach out to visual learners. A picture is worth a thousand words, so why not tell people about your brand by showing them? Statistics show that the likelihood of gaining followers on a social media platform is higher when you post images. However, before you pin away, take note that Pinterest frowns upon spamming so don’t bombard your board with too much of your own projects or products without evening it out with other different kinds of pins not related to your brand.</p>
<p>When creating boards, theme your boards pertaining to your brand. Start by creating a board about the company and pinning images of your brand’s logo, maps where you’re located, and pictures of the team. Add a board with pins of the city, buildings, activities to do, and other businesses where your company is located.  Why not create boards for each person at your company so others can get to know the team? Think of Pinterest like a Pictionary game. Say what you want to say to others through images.</p>
<p>Keep in mind that you don’t have to pin only images. Videos can be pinned too. DIY tutorials are all over the website, so go a step further, pin videos of events such as your company’s holiday party. Have some fun with this social media platform!
  </li>
<li>
  <b>Build a community of followers who can ultimately become your clients, customers, or investors.</b> Pinterest has the characteristics of other social networking sites, so take advantage of it and find your targeted audiences. Just like Facebook and Twitter, your followers can “like” and comment on your pins, and just like sharing and re-tweeting, they can re-pin your images. Followers can also use the @ symbol to direct your pins to certain followers of theirs. You’d be surprised at how many people will re-pin your images. Then utilize the # symbol, otherwise known as hash tags, when captioning your images to help others find you. Take a look at one of <a href="http://pinterest.com/envisiondallas/websites-we-love/" title="Envision Interactive's Board - Pinterest">Envision’s boards</a> for example.</p>
<p>When building your community, start with friends and family who already have accounts and ask them to follow your company’s boards. Next, while searching, use keywords that pertain to your brand. Users can choose to follow all of your boards or select ones they’re interested in so when maintaining your boards, title your boards and add pins people can relate to. Give people reasons to follow you, re-pin your products/services, and be addicted to your brand’s boards.
  </li>
<li>
  <a href="http://searchengineland.com/how-to-use-pinterest-for-local-seo-102697" title="Use Pinterest for SEO and Link Building"><b>Use Pinterest for SEO and Link Building</b></a>. Remember when I said earlier that when you click on an image, Pinterest takes you directly to the site when the image is found? Use Pinterest to plan your <a href="http://www.searchenginejournal.com/pinterest-link-building-seo-strategies/36951/" title="SEO Stragities">SEO strategies</a> and build <a href="http://www.semclubhouse.com/pinterest-gaining-traction-for-external-seo/" title="External Links">external links</a> to give some leverage to your brand’s image. Note: Not all images link back to the site where it’s originally from, but you can just click on the image to edit the URL. Also, Links cannot be changed once an image has been re-pinned so make sure you change the URL before you pin it to your board.</p>
<p>  One last thing, for SEO purposes, don’t forget to uncheck the Hide your Pinterest profile from search engines box found in your settings. Let your brand be found. If you have fellow co-workers who have Pinterest accounts, add them as contributors your brand’s boards. They can search and pin images you haven’t thought of that best describes you, your work environment, and your brand. Moreover, they can add pins from their personal blogs or business websites to increase traffic to your page and theirs. Everyone benefits!
  </li>
</ol>
<p>Extend your boards across other social media platforms and company/personal blogs. However, if you don’t want to bombard your Facebook fans or followers on Twitter, just connect your profile to your other social network sites like Google+ and your personal blog. Share and tweet your brand’s link to your fans/followers at least once a month. Your new fans/followers need to know you have a Pinterest page.</p>
<p>If you don’t already have an account, we highly suggest you send away for your invite and join the amazing world of Pinterest! <a href="http://mashable.com/2011/12/26/pinterest-beginners-guide/" title="Beginner Users">Beginner users</a>, Pinterest will be the kind of addiction that’s good for you.</p>
<p><a href="http://pinterest.com/envisiondallas/" title="Envision Interactive - Pinterest">Find us on Pinterest</a> to learn more about who we are, what we like, and take a peek into our portfolio while you’re at it. If you’d like to talk to an Envision Interactive Social Media Expert, contact us at <a href="http://www.envisioninteractive.com" title="Envision Interactive">www.envisioninteractive.com</a> and we will be more than happy to have a “pinteresting” conversation with you!</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/social-media-marketing/three-reasons-to-use-pinterest-to-boost-your-brand-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three Reasons Why Social Media is Important for Your Brand</title>
		<link>http://envisioninteractive.com/social-media-marketing/three-reasons-why-social-media-is-important-for-your-brand/</link>
		<comments>http://envisioninteractive.com/social-media-marketing/three-reasons-why-social-media-is-important-for-your-brand/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 02:01:06 +0000</pubDate>
		<dc:creator>Huong Vo</dc:creator>
				<category><![CDATA[Social Media Marketing]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2078</guid>
		<description><![CDATA[You just started a business and have all your ducks in a row. With experienced and trained teams in human resources, operations/business development, marketing, web development, accounting, customer service, and planning/product development set up, you’re ready to launch. However, before you do, have you thought of integrating an in-house social media team into your marketing department? ]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2011/12/3-reasons.png" alt="" title="3-reasons" width="255" height="216" class="aleft floater" /> You just started a business and have all your ducks in a row. With experienced and trained teams in human resources, operations/business development, marketing, web development, accounting, customer service, and planning/product development set up, you’re ready to launch. However, before you do, have you thought of integrating an <a href="http://mashable.com/2010/11/02/building-social-media-team/">in-house social media team</a> into your marketing department?</p>
<p>Whether your business is new or well-seasoned, if you haven’t thought about it, here are three important reasons why it’s time to take your shoes and socks off and step into <a href="http://mashable.com/2010/01/14/social-media-strategy-needs/">social media</a> waters. <span id="more-2078"></span><br />
<br style="clear:both; "/></p>
<ol class="wide">
<li><strong>Someone is always willing to listen to what you have to say/offer. </strong><br />
In order to tell others about your brand, products, or services, you have to find the Dr. Frasier Cranes of the world, otherwise known as those with an “I’m listening.” attitude. People are always looking for a company that offers something unique and new to them. So, how do you find these kinds of people? </p>
<p>Unlike being in any crowded place, when it comes to social media, you want to go where the people are. Promoting your brand across social media platforms is important because there is always someone out there who wants to see or hear what you have up your sleeve. <a href="http://www.toprankblog.com/2011/01/community-manager-do/">Community managers</a> are people who live and breathe on social media platforms. Their job is to talk to your current and potential customers, provide updates on the latest news/trends/products, and most importantly, listen to what your customers have to say. Since there are a variety of industries out there, you can have one of more community manager who focuses specifically on customer service, marketing/sales, customer support, etc. </p>
<p>Remember, you never know who is listening because when you least expect it, someone might come along and want to invest in your innovative business, product, or service!</li>
<li><strong>Grow your business by learning who your consumers are to gain a better understanding of your audience’s needs.</strong><br />
Rather than trying to guess your audience’s needs, use social media platforms to listen. Social media is a way for brands to listen, measure, and engage with their audiences to create solutions. If you have ever left a good or bad review such as in <strong>yelp.com</strong> for a product you purchased or read reviews before buying something, you are giving/using customer insight. By doing this, you as a customer, are giving feedback to the company as well as current and potential customers. From a business standpoint, consider your customers’ feedback as useful “offline” conversations to better understand your audience’s needs. </p>
<p>In what other ways can you use social media platforms to get to know your audience? Well, you can stream events live through a <strong>YouTube</strong> channel for those who can’t physically make it to your End of the Year Fundraiser Event. How about letting everyone in on the latest news happening at your company via <strong>Twitter</strong> or even holding contests just for your <strong>Facebook</strong> fans? By using social media, you can build your relationship with your customers, maintain strong connections with your stakeholders and show others through conversation that you care. Don’t just hear. Listen. Show that the power of an individual really matters to your brand by keeping your current customers and gaining new ones through understanding their needs. </p>
<p>How else can a company gain customer insights, improve their product development, and strengthen their customer service if listening and engaging in conversation does not happen? The better you understand your audience, the more your business will grow.</li>
<li><strong>Improve your brand’s message by gaining a plethora of data critical for your business.</strong><br />
Social media platforms hands you important data on a silver, wait, scratch that, platinum platter. Marketers have these technology and resources to see how your customers/clients like your services/products. For example, Facebook’s Insights Summary feature is an in-your-face, here-is-what-others-think-about-your-brand metric system in real-time.</li>
</ol>
<p>All you have to do is just look at the right corner of your Facebook Business Page to see how many active users you have, if anyone new digs your brand, and the amount of impressions, likes, and comments you are getting. From this information, you can strategize your next plan for your fans such as a contest just for your loyal customers. To have a successful social media campaign, it’s important to talk to your marketing agency to build a campaign customized for your company.</p>
<p>Using social media as a marketing strategy can be exasperating, especially for major brands who receive attention through a large range of platforms. However, remember that if you’re just starting, don’t expect for your business to grow overnight via social media. Networking, making those connections, and building relationships takes time. Observe the feedback your customers are giving you and the conversations going on offline and use this information as real-time data to be responsive and helpful to your customers, improve your brand’s image, and grow your business. </p>
<p>If you would like to learn more about the social media platforms that are right for your business and/or are thinking about having a community manager(s), contact us at: <a href="http://envisioninteractive.com/">www.envisioninteractive.com</a> to talk with an Envision Interactive Social Media Expert. </p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/social-media-marketing/three-reasons-why-social-media-is-important-for-your-brand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Five Tips for a Successful Facebook Business Page</title>
		<link>http://envisioninteractive.com/social-media-marketing/five-tips-for-a-successful-facebook-business-page/</link>
		<comments>http://envisioninteractive.com/social-media-marketing/five-tips-for-a-successful-facebook-business-page/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 19:13:49 +0000</pubDate>
		<dc:creator>Huong Vo</dc:creator>
				<category><![CDATA[Social Media Marketing]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2051</guid>
		<description><![CDATA[Do you promote your business on Facebook? How do you communicate your company’s image to gain fans? We all know social media is important when it comes to marketing your company, brand, service, and/or product, but how valuable is Facebook for your business?]]></description>
			<content:encoded><![CDATA[<p>Do you promote your business on Facebook? How do you communicate your company’s image to gain fans? We all know social media is important when it comes to marketing your company, brand, service, and/or product, but how valuable is Facebook for your business? <span id="more-2051"></span></p>
<p>If you don’t know this already, Facebook is critical for your business. Your “fans” are current customers or potential consumers. For a successful Facebook business page, your goal is to continuously increase your fan base while keeping an eye if there’s ever a drop.  </p>
<p>Here are a couple of tips to avoid such a thing from happening. </p>
<p><strong>Create the initial spark.</strong> DDB Paris and OpinionWay’s recent research found that <a href="http://adage.com/article/special-report-social-media-guide/fans-friend-brand-facebook/229824/" rel="nofollow">the number one reason fans un-friend a page</a> is that they are “no longer interested in the brand.” Ouch. Let me get you some ice for that sting!</p>
<p>Start with the basics. Create a vanity URL. By default, Facebook assigns you a really super long and ugly “www.facebook.com/pages/yourbusiness/789541231ref=1&#038;_7” URL.  After building your page to 25 fans, you’ll be able to create a beautiful vanity URL like this: “https://www.facebook.com/pages/KT-Photography/231961068628.” </p>
<p><a href="http://envisioninteractive.com/wp-content/uploads/2011/12/Facebook-Business-Page.jpg"><img src="http://envisioninteractive.com/wp-content/uploads/2011/12/Facebook-Business-Page-300x260.jpg" alt="" title="Facebook Business Page" width="300" height="260" class="alignnone size-medium wp-image-2055" /></a></p>
<p>Do this so others can find you easily when searching for your business. Plus, people are more likely to share/open a link they can read versus a jumbled mess.</p>
<p><strong>Don’t be boring.</strong> Wait. How can your business be uninteresting? With boredom as the number two reason why fans stop following brands, it’s time to bust out your notepad and take notes on what your fans like to share. You gave your fans a reason to start following you, right? Give them more reasons to continue to follow your brand.</p>
<p>Understand the kinds of content your users like to share. Engage with your fans on your wall. Make it personal and get to know who they are and their interests. ‘Like’ other businesses associated with yours. If you’re a photographer, ‘like’ fellow photography businesses in your area in addition to boutiques and businesses that lend to photo shoots such as hair accessories, jewelry, clothing, and props. Create interesting links.</p>
<p>From there, give your fans sneak peeks of your latest ideas. Gain new fans and keep current fans excited about your business.</p>
<p><strong>Watch the quality and quantity of your status updates. </strong><br />
Fans don’t want spam. Start by looking at your fans’ demographics. Are they the type who wants to hear from you more or less? From there, you can adjust when you send your updates. </p>
<p>I know you don’t converse in a spam-like manner to people every day, now do you? If you’re going to be a real business, be genuine. Act like a human being.</p>
<p><strong>Engage with your audience.</strong><br />
It’s called social media, not anti-social media. When your fans comment/like a status, video, and/or photo, respond to them.  Be a part of the conversation.</p>
<p>Add brief and engaging content. By keeping it short and interesting, your fans are going to stay loyal, want more from you, and share your page with their friends.</p>
<p>A great example of a business I’m a fan of is KT Photography. The owner updates her fans with images of her work every couple of days. Through statuses, she reminds her fans when emails will be sent out, what surprises she has up her sleeve in addition to when she will be on vacation with her family. Through comments and photo captions, she engages with her clients and keeps it fun with images and captions of her working like, “I love my newbies even when they do this! Haha.” She creates buzz and conversations between clients keeps going because fans and other clients comment on each other’s photos.</p>
<p>Show that you can listen and that you care about what your fans want. In return, you can ask your fans for help on growing your page by sharing it with their friends. </p>
<p><strong>Take the VIP approach. </strong><br />
Answer the infamous, “What’s in it for me?” question. Bring in your fans by creating deals just for your Facebook fans. Your fans expect you to give them deals. They will wait for those deals and will keep coming back for more, so keep the fire alive.</p>
<p>Remember to approach your Facebook page as if it’s your website or another website for your brand. When building your Facebook Business Page, take the following into consideration: content, incentives, user expectations, timing, and cultural differences. In the end, it’s all about finding a method that works for you and your brand. </p>
<p>If you’d like to talk with an Envision Interactive social media expert, visit us at: <a href="www.envisioninteractive.com/">www.envisioninteractive.com</a>. Look forward to engaging with you! </p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/social-media-marketing/five-tips-for-a-successful-facebook-business-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Guidelines For Creating Effective Landing Pages</title>
		<link>http://envisioninteractive.com/marketing/5-guidelines-for-creating-effective-landing-pages/</link>
		<comments>http://envisioninteractive.com/marketing/5-guidelines-for-creating-effective-landing-pages/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 19:40:55 +0000</pubDate>
		<dc:creator>Andrea Freeman</dc:creator>
				<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2020</guid>
		<description><![CDATA[A landing page is a place you send traffic when you really want some action. Landing pages, when implemented correctly, have big potential for success. There are times however, when missing the basic details can hurt your chances of conversions.]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2011/12/landing-pages-300x225.jpg" alt="5 Guidelines for Creating effective Landing Pages" title="landing-pages" width="300" height="225" class="aleft marright"/> A landing page is a web page you send traffic when you want them to take action. They are often coupled with pay-per-click ads, email campaigns, QR codes and other forms of advertising. Landing pages, when implemented correctly, have big potential for success. There are times however, when missing the basic details can hurt your chances of conversions.</p>
<p>Here are five important guidelines to follow when creating effective landing pages. <span id="more-2020"></span></p>
<p><strong>1. Establish a Clear Call To Action</strong><br />
What is the single most important action you want a user to take once they arrive on your landing page?  Fill out a lead-generation form?  Add a product to a shopping cart? Whatever your answer is, make sure it’s the most obvious thing on the page and guide your user toward that action. Sure, you need to provide enough content to persuade them to act, but too much content will cause users to hesitate and lead to high bounce rates. </p>
<p>There a few other things to remember. Users aren’t mind readers. Don’t expect them to know exactly what you action you want them to take.  Assume this is their first experience with your brand. Be brief with your CTA message, and make sure you instruct the user every step of the way. Ideally one single call to action is recommended to keep the user from getting overwhelmed with one too many offers. </p>
<p><strong>2. Don’t distract the user.</strong><br />
The world is full of distractions for users: competing offers, texts from Mom, a nagging boss.  Just when a user finally reaches your landing page – SQUIRREL!  You get the idea. So, keeping their attention is of ultimate importance. Using pop-up windows (or modals) on your landing pages? Get rid of those. Is your call-to-action below the fold? Move it up. Too much copy? Find a way to cut it down to the key message required to win them over.</p>
<p><strong>3. Send your traffic to a relevant landing page</strong><br />
So, you’ve sent out an email blast, or you’re running Facebook ads – super!  But where are you sending your clicks? I’m sure your homepage looks fantastic – it’s the web page most companies spend the most time crafting – but don’t assume it will perform well as a landing page if it doesn’t address the needs that a user has.  Send them to a relevant targeted landing page.  If your ad is targeting pediatric home health services, don’t send them to your hospital’s home page.</p>
<p><strong>4. Create an enjoyable experience.</strong><br />
Bored and confused prospects will quickly take their conversion clicks (and wallets) elsewhere if your landing page lacks a fun factor. Create an attention-grabbing headline.  Have your designer use creative and relevant imagery over clip art or cheap stock photos.  Use large legible fonts that work for all age groups.  Consider bulleted lists of data rather than long paragraphs of text.  Keep your call to action simple and on-screen at all times (if your call to action is above the fold, but you have supporting copy that extends well below the fold, have ANOTHER call to action at the bottom).  Long forms to fill out are intimidating and boring.</p>
<p><strong>5. Test, Measure and Revise</strong><br />
A good-looking landing page with a clear call to action isn’t enough.  It has to work.  And by work, I mean function properly in all browsers (PC and Mac) including mobile devices. To get there, you’ll need to rigorously test your landing page. Make sure your form works. What happens after you hit your submit button? Does it take users to a Thank You page?  Does the Thank You page clearly instruct the user on the next step in your process? Are errors in a form submission handled properly? Did you look for broken links and images? Are your anchor texts SEO-friendly?  Did you install tracking codes properly?</p>
<p>Measure your results!  You’ll need someone monitoring the campaign.  Here’s quick list of statistics you should be capturing in order to determine if your landing page is effective.  Google Website Optimizer is a powerful resource that can measure the effects of different elements on its ability to convert.</p>
<p>Revise your landing page according to the data, not opinions.  Test more than one landing page against another.  Try different headlines or colors or form lengths.  Let the numbers guide you!</p>
<p><a href="http://envisioninteractive.com/contact/" title="Contact us">Contact us</a> for more information on how your users can land on a successful landing page.</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/marketing/5-guidelines-for-creating-effective-landing-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Secure Your Drupal 3rd Party Integrations Using OAuth</title>
		<link>http://envisioninteractive.com/web-development/secure-your-drupal-3rd-party-integrations-using-oauth/</link>
		<comments>http://envisioninteractive.com/web-development/secure-your-drupal-3rd-party-integrations-using-oauth/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 00:37:10 +0000</pubDate>
		<dc:creator>Ian Whitcomb</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2013</guid>
		<description><![CDATA[While I was researching how to integrate a Twitter application into a Drupal site I found that there was very little documentation on how to accomplish this using their OAuth protocol. This can be a pretty confusing topic, and chances are that if youʼve landed here then youʼre already somewhat familiar with what OAuth is are having the same problem that I had.]]></description>
			<content:encoded><![CDATA[<p>While I was researching how to integrate a Twitter application into a Drupal site I found that there was very little documentation on how to accomplish this using their OAuth protocol. This can be a pretty confusing topic, and chances are that if youʼve landed here then youʼre already somewhat familiar with what OAuth is are having the same problem that I had. <span id="more-2013"></span>The basic idea is that users can grant access to their 3rd party account, like Twitter, all without trading or saving any of the users login information. This is much more secure because the information used to communicate with the 3rd party is specific to your application and canʼt be reused by anyone else(ie: It canʼt be easily hijacked).</p>
<p>This post will demonstrate how to implement OAuth into your website/modules using Twitter as an example. Keep in mind, OAuth technology is not necessarily specific to Twitter, it is simply the authentication protocol they use and can also be seen used in some other 3rd party integrations, the idea is all the same.</p>
<p><strong>Requirements:</strong></p>
<ul>
<li><a href="http://drupal.org/project/twitter/" rel="external">Twitter module</a> </li>
<li><a href="http://drupal.org/project/oauth/" rel="external">OAuth module</a></li>
</ul>
<p>Youʼll want to activate both the twitter and oauth modules. Start by creating a new module called <strong>twitter_login</strong>, make sure you specify twitter and oauth_common as dependencies in your <strong>twitter_login.info</strong> file, it should look something like this:</p>
<pre class="brush: php; title: ; notranslate">name = Twitter Login Application
core = &quot;6.x&quot;
project = &quot;twitter_app&quot;
description = Provide a method of allowing users to register/login through
Twitter OAuth.
package = &quot;Twitter&quot;
dependencies[] = oauth_common
dependencies[] = twitter</pre>
<p>Now create a new application over at <a href="http://dev.twitter.com/">dev.twitter.com</a>, the fields donʼt really matter very much, you will need the consumer key and secret after youʼve saved the application.</p>
<p>After having created your Twitter application make sure you define the consumer key and consumer secret at the top of your <strong>twitter_login.module</strong>. Youʼll also want to include the Twitter API files from the twitter module.</p>
<pre class="brush: php; title: ; notranslate">define('TWITTER_LOGIN_CONSUMER_KEY', 'consumer key goes here'); define('TWITTER_LOGIN_CONSUMER_SECRET', 'consumer secret goes here');
define('TWITTER_LOGIN_API_URL', 'http://api.twitter.com');
define('TWITTER_LOGIN_SIG_METHOD', 'HMAC-SHA1');
module_load_include('lib.php', 'twitter', 'twitter');
module_load_include('inc', 'twitter', 'twitter');</pre>
<p>Save the OAuth consumer data to the database using <a href="http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_init/6">hook_init</a>.</p>
<pre class="brush: php; title: ; notranslate">
function twitter_login_init(){
   $consumer = DrupalOAuthConsumer::load(TWITTER_LOGIN_CONSUMER_KEY, FALSE);
   if ($consumer) {
      $consumer-&gt;secret = TWITTER_LOGIN_CONSUMER_KEY;
      $consumer-&gt;configuration['provider_url'] = TWITTER_LOGIN_API_URL;                                                                                                                                        $consumer-&gt;configuration['signature_method'] = TWITTER_LOGIN_SIG_METHOD;                                                                                                                                $consumer-&gt;configuration['authentication_realm'] = '';
      $consumer-&gt;configuration['access_endpoint'] = '/oauth/access_token';
      $consumer-&gt;write(TRUE);
    } else {
      $consumer = new DrupalOAuthConsumer(TWITTER_LOGIN_CONSUMER_KEY,
TWITTER_LOGIN_CONSUMER_SECRET, 'oob', FALSE, array(
           'configuration' =&gt; array(
               'provider_url' =&gt; TWITTER_LOGIN_API_URL,
           )
          ));
          $consumer-&gt;write();
        }
}</pre>
<p>Now we can start building the core parts of the module that will initiate the authentication, and decide what to do once the user has enabled your application. Using <a href="http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_menu/6">hook_menu</a> create a menu callback where you will send users to start the authentication process.</p>
<pre class="brush: php; title: ; notranslate">
function twitter_login_menu(){
   $items = array();
   $items['twitter/login'] = array(
      'title' =&gt; 'Login',
      'page callback' =&gt; 'twitter_login_login',
      'access callback' =&gt; TRUE,
      'type' =&gt; MENU_CALLBACK,
     );
}</pre>
<p>In the page callback function we need to validate the consumer key and secret with Twitter in order to receive a URL(or a request token) to send the user off to for authentication. This authentication screen is where the magic happens, the user will be asked to login and enable your Twitter application on their Twitter account in case they havenʼt already done so. However, if the user is already logged into Twitter, and the application is already enabled on their account then they wonʼt see anything at all, they will just be forwarded on to the next step in the process.</p>
<pre class="brush: php; title: ; notranslate">
function twitter_login_login(){
    $callback = (!empty($_GET['callback'])) ? $_GET['callback'] : 'user';
    if(TWITTER_LOGIN_CONSUMER_KEY and TWITTER_LOGIN_CONSUMER_SECRET){
       $consumer_token = DrupalOAuthConsumer::load(TWITTER_LOGIN_CONSUMER_KEY, FALSE);
       $sig_method = DrupalOAuthClient::signatureMethod(substr(strtolower('HMAC- SHA1'), 5));
       $client = new DrupalOAuthClient(TWITTER_LOGIN_CONSUMER_KEY, NULL, $sig_method);
       $request_token = $client-&gt;getRequestToken('/oauth/request_token', array(
          'realm' =&gt; null,
          'callback' =&gt; url('oauth/authorized', array(
            'absolute' =&gt; TRUE,
            'query' =&gt; array('callback' =&gt; $callback),
           )),
         ));
         $request_token-&gt;write();
         $_SESSION['oauthconnector_request_key'] = $request_token-&gt;key;
         $request_token = $client-&gt;getAuthorizationUrl('/oauth/authenticate',
array(
            'callback' =&gt; url('oauth/authorized', array(
            'absolute' =&gt; TRUE,
            'query' =&gt; array('callback' =&gt; $callback),
           )),
         ));
         drupal_goto($request_token);
       } else {
         drupal_not_found();
       }
}</pre>
<p>In case you didnʼt notice, on the second line of the last snippet of code were pulling the <strong>callback</strong> variable from the URL query string, this works very much like the <strong>destination</strong> variable when logging into Drupal(ie: What is the users final destination after logging in?)</p>
<p>After the user has logged into Twitter and chosen to enable your application on their profile they are sent back to your site where you will now have access to their Twitter account. Itʼs probably a good idea to save their OAuth tokens using <strong>hook_oauth_common_authorized</strong> in case you need to use them later. This will prevent you from having to go through this process again.</p>
<p>In this example, before sending the user to the callback page, were going to tie the Twitter account with the logged in Drupal users using <strong>twitter_account_save</strong> function.</p>
<pre class="brush: php; title: ; notranslate">
function twitter_login_oauth_common_authorized($consumer, $access_token,
$request_token){
    parse_str($access_token, $access_token);
    $twitter = new TwitterOAuth($consumer-&gt;key, $consumer-&gt;secret,
$access_token['oauth_token'], $access_token['oauth_token_secret']);
     if($twitter_user = $twitter-&gt;verify_credentials()){
        $twitter_user-&gt;set_auth($access_token);
         twitter_account_save($twitter_user, TRUE);
         drupal_goto($_GET['callback']);
       } else {
         drupal_access_denied();
       }
}</pre>
<p>Now that youʼve saved the users OAuth tokens to the database you can use the Twitter module to interact with their account and, based on your application permissions, access different Twitter function like sending or reading direct messages, and tweets.</p>
<p>Youʼll also want to keep in mind that because most Twitter data is public and they have a pretty strict set of terms that your application needs to abide by so youʼll want to check out their <a href="https://dev.twitter.com/terms/api-terms">Developer Rules of the Road</a> before doing anything too crazy with the API. If youʼre trying to integrate a different 3rd party application you can just</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/web-development/secure-your-drupal-3rd-party-integrations-using-oauth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Breaking Drupal 7 Webforms into Multiple Steps the Easy Way</title>
		<link>http://envisioninteractive.com/web-development/breaking-drupal-7-webforms-into-multiple-steps-the-easy-way/</link>
		<comments>http://envisioninteractive.com/web-development/breaking-drupal-7-webforms-into-multiple-steps-the-easy-way/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 00:14:00 +0000</pubDate>
		<dc:creator>Mark Sims</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=2005</guid>
		<description><![CDATA[I recently played the role of Information Architect on a site remodel. We were charged with the task of doing a brand new build to replace an existing Flash site. One of the priorities of the client was to retain the elaborate Request for Quote form. ]]></description>
			<content:encoded><![CDATA[<p>I recently played the role of Information Architect on a site remodel. We were charged with the task of doing a brand new build to replace an existing Flash site. One of the priorities of the client was to retain the elaborate Request for Quote form. <span id="more-2005"></span>There were many, many form fields that comprised this web form so I began to ponder if we should break the form up into a multiple step form, to improve the overall user experience. After careful consideration, I decided that we should definitely split the form up (for more on this matter check out <a href="http://www.uxmatters.com/mt/archives/2010/03/pagination-in-web-forms-evaluating-the-effectiveness-of-web-forms.php">Pagination in Web Forms | Evaluating the Effectiveness of Web Forms</a> on <a href="http://uxmatter.com">UXmatter.com</a>). Since there was no logic needed in the progression of the form, I felt that Javascript would be an acceptable solution, over using an actual server-side wizard. Thanks to Janko and his <a href="http://www.jankoatwarpspeed.com/post/2009/09/28/webform-wizard-jquery.aspx">Turn any webform into a powerful wizard with jQuery</a> blog, I found his JQuery plugin very easy to implement. This tutorial assumes that you have some basic working knowledge of the <a href="http://drupal.org/project/webform">Webform module</a> and how to create a custom module of your own.</p>
<h2>Module or Theme?</h2>
<p>I feel like I ask myself that question at least 10 times a day. This solution could be implemented using either method, but after careful consideration, I felt like this was more of a function feature than just appearance, so I decided that the modular level was the way to go. Our demonstration module will be called Wizardify. Let&#8217;s get started.</p>
<h2>Set up the webform</h2>
<p>The first thing we need to do is make sure the <a href="http://drupal.org/project/webform">Webform module</a> is enabled, and create a Weform node. The wizardify plugin that we will be using splits the form up by fieldsets, so we need to create some fieldsets, each with a few fields inside. Here&#8217;s what it looks like:</p>
<p><a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-1.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-1.png" alt="" title="webform-wizard-1" width="478" height="551" class="alignnone size-full wp-image-2006" /></a></p>
<h2>Download the plugin</h2>
<p>Next we&#8217;re going to <a href="http://www.jankoatwarpspeed.com/file.axd?file=2009%2f9%2fFormToWizard.zip">download the FormToWizard</a> plugin. Create a folder inside your module called <em>js</em>, and place the <em>formToWizard.js</em> file in that folder.</p>
<h2>Include the plugin</h2>
<p>In your <em>wizardify.module</em> file, we are going to use the <a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/7">drupal_add_js</a> function inside the hook_preprocess_page to include the FormToWizard plugin.</p>
<pre class="brush: php; title: ; notranslate">/**
 * Implements hook_preprocess_page
 */
function wizardify_preprocess_page(&amp;$variables) {
  // define base path for our module
  $base = drupal_get_path('module', 'wizardify');
  // add the wizardifying javascripts
  drupal_add_js($base . '/js/formToWizard.js');
}</pre>
<h2>Initiate the plugin</h2>
<p>We need to write a small piece of JavaScript to initiate the plugin. Inside the <em>js</em> folder, create a file called <em>jquery.wizardify.init.js</em> and insert the following code:</p>
<pre class="brush: jscript; title: ; notranslate">jQuery(document).ready(function () {
  // wizardify the webform
  jQuery(&quot;#webform-client-form-55&quot;).formToWizard({ submitButton: &quot;edit-submit&quot; });
});</pre>
<p>What we&#8217;re doing here is using the form id of #webform-client-form-55 and applying the formToWizard plugin, once the page is fully loaded. My webform node id is 55, but yours will be something different. Make sure to double check the id of your form element, and use that in the jQuery context. The only parameter that we&#8217;re using is the submitButton, which allows you to specify the id of the submit button on the form. This will hide the submit button until the final &#8220;panel&#8221; of the form is displayed.</p>
<h2>Include the init javascript</h2>
<p>We need to add a new <a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/7">drupal_add_js</a> line to our hook_preprocess to include the init javascript we just created. It now looks like:</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Implements hook_preprocess_page
 */
function wizardify_preprocess_page(&amp;$variables) {
  // define base path for our module
  $base = drupal_get_path('module', 'wizardify');
  // add the wizardifying javascripts
  drupal_add_js($base . '/js/formToWizard.js');
  drupal_add_js($base . '/js/jquery.wizardify.init.js');
}
</pre>
<p>Now if you refresh the Webform node, you should see the new wizardified version of the form, complete with a progress indicator, created from the legend elements of our fieldsets. Go ahead and try it out.</p>
<p><a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-2.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-2.png" alt="" title="webform-wizard-2" width="480" height="297" class="alignnone size-full wp-image-2007" /></a></p>
<h2>Spiff it up</h2>
<p>Our form now works, but we can take this another step further in the name of UX. We&#8217;re going to add the &#8220;button&#8221; class to our Next and Previous links, and add some custom css just to pretty things up a bit.</p>
<h2>Add the button classes</h2>
<p>Since the next and previous links are created by javascript, it&#8217;s fair to modify them using javascript. We want them to look like our theme&#8217;s buttons. In your <em>jquery.wizardify.init.js</em> file, we&#8217;re going to use the addClass method. It should now look something like:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(document).ready(function () {
  // wizardify the webform
  jQuery(&quot;#webform-client-form-55&quot;).formToWizard({ submitButton: &quot;edit-submit&quot; });
  // add the 'button' class to the next and previous links
  jQuery('a.prev').addClass('button');
  jQuery('a.next').addClass('button');
});
</pre>
<p>Refresh the page and it should now look like this:</p>
<p><a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-3.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-3.png" alt="" title="webform-wizard-3" width="490" height="302" class="alignnone size-full wp-image-2008" /></a></p>
<h2>Create custom CSS</h2>
<p>We&#8217;re going to add a little bit of custom css to finish this thing up. We need to create a directory inside our module called <em>css</em>. In the <em>css</em> folder, create a file called <em>wizardify.css</em> and paste in the following code:</p>
<pre class="brush: css; title: ; notranslate">
#steps{
  border:1px solid #CCCCCC;
  border-radius:4px;
  margin-top:10px;
  padding:10px;
}

#steps li{
  list-style-type:none;
  color:#ccc;
}

#steps .current{
  color:#3B3B3B;
}

#steps .fieldset-legend{
  margin-left:15px;
}

#step0 fieldset legend,
#step1 fieldset legend,
#step2 fieldset legend{
  display:none;
}

.next,
.prev{
  margin-left:10px;
}
</pre>
<h2>Include custom CSS</h2>
<p>Now, we need to include that custom css file. Go to the <em>wizardify.module</em> file and insert a <a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_css">drupal_add_css</a> in the hook_preprocess_page. It will now look like this:</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Implements hook_preprocess_page
 */
function wizardify_preprocess_page(&amp;$variables) {
  // define base path for our module
  $base = drupal_get_path('module', 'wizardify');
  // add the wizardifying javascripts
  drupal_add_js($base . '/js/formToWizard.js');
  drupal_add_js($base . '/js/jquery.wizardify.init.js');
  // add the custom css
  drupal_add_css($base .'/css/wizardify.css');
}
</pre>
<p>Refresh the page and it should now look pretty nice.</p>
<p><a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4a.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4a.png" alt="" title="webform-wizard-4a" width="489" height="314" class="alignnone size-full wp-image-2009" /></a><br />
<a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4b.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4b.png" alt="" title="webform-wizard-4b" width="489" height="303" class="alignnone size-full wp-image-2010" /></a><br />
<a href="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4c.png"><img src="http://envisioninteractive.com/wp-content/uploads/2011/11/webform-wizard-4c.png" alt="" title="webform-wizard-4c" width="478" height="290" class="alignnone size-full wp-image-2011" /></a></p>
<h2>Success!</h2>
<p>We&#8217;ve now successfully created our Webform node, added a jQuery plugin, included our custom Javascript, and included some custom CSS. My client deliverable actually took things a bit further with client-side validation and more robust styling, so feel free to experiment to create a great and useable faux-wizard form.</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/web-development/breaking-drupal-7-webforms-into-multiple-steps-the-easy-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Drupal Batch API in a Nutshell</title>
		<link>http://envisioninteractive.com/drupal/drupal-batch-api-in-a-nutshell/</link>
		<comments>http://envisioninteractive.com/drupal/drupal-batch-api-in-a-nutshell/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 18:38:47 +0000</pubDate>
		<dc:creator>Ian Whitcomb</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=1936</guid>
		<description><![CDATA[Drupals internal batch API can be really helpful for handling large cumbersome processes on your web server.]]></description>
			<content:encoded><![CDATA[<p><img src="http://envisioninteractive.com/wp-content/uploads/2011/08/batch-api-drupal.png" alt="" title="" width="151" height="190"  class="aleft floater"  /></p>
<p>Drupals internal batch API can be really helpful for handling large cumbersome processes on your web server. Rather than submitting a form and waiting for one of these processes to finish before reaching the next page, the batch API can be utilized to break the process down across multiple page loads. This not only cuts down on the server load, but will prevent the page from timing out. Progress bars will be displayed to the user while the process runs which will keep them informed of where they are at in the process.</p>
<p>In this example, I&#8217;ll explain how to do a simple assembly line-like process to generating page nodes in bulk, similar to Devel&#8217;s node generate function. <span id="more-1936"></span></p>
<p>Youʼll need to start with a custom module. First, create a simple page with a form on it where you can specify the title of the pages, and how many you want to create. This is somewhat irrelevant but in order to show an example of how the batch API works we&#8217;ll need it.</p>
<pre class="brush: php; title: ; notranslate">function batch_demo_menu(){
  $items = array();
  $items['batch-demo'] = array(
    'title' =&gt; t('Batch API Demo'),
    'page callback' =&gt; 'drupal_get_form',
    'page arguments' =&gt; array('batch_demo_form'), 'access arguments' =&gt; array('access content'), 'type' =&gt; MENU_NORMAL_ITEM,
  );
  return $items;
}
function batch_demo_form(&amp;$form_state){
  $form = array();
  $form['title'] = array(
    '#title' =&gt; 'Title',
    '#type' =&gt; 'textfield',
    '#required' =&gt; TRUE,
    '#description' =&gt; t('Enter the title of the pages.'),
  );
  $form['qty'] = array(
    '#title' =&gt; 'Quantity', '#type' =&gt; 'textfield', '#required' =&gt; TRUE,
    '#default_value' =&gt; 100,
    '#description' =&gt; t('Enter the number of pages you want to create.'),
  );
  $form['submit'] = array(
    '#type' =&gt; 'submit',
    '#value' =&gt; t('Create'),
  );
  return $form;
}
function batch_demo_form_validate(&amp;$form, &amp;$form_state){
  if(!is_numeric($form_state['values']['qty'])){
    form_set_error('qty','You must enter a numeric value for quantity.');
  }
}</pre>
<p>In the hook_form_submit() is where we will initialize the batch process.</p>
<pre class="brush: php; title: ; notranslate">function batch_demo_form_submit(&amp;$form, &amp;$form_state){
  batch_set(array(
    'title' =&gt; t('Batch API Demo'), 'operations' =&gt; array(
      // You can actually chain together multiple batch processes here
      array('batch_demo_batch', array($form_state['values'] ['title'], $form_state['values']['qty'])), // Specify a callback for the batch
    ),
    'finished' =&gt; 'batch_demo_finished_batch', // Finished batch callback.
    )
  );
  // Start the batch process and tell it where to send the user when it's done. In this case, we’ll send the user back to the batch-demo page.
  batch_process('batch-demo');
}</pre>
<p>Now we&#8217;ll setup the finished batch callback which will be used to run any final code at the end of the batch like displaying a message to the user.</p>
<pre class="brush: php; title: ; notranslate">function register_parking_finished_batch($success, $results, $operations){
  if ($success) {
    $message = format_plural(count($results), 'One node created', '@count nodes created.');
  } else {
    $message = t('Finished with an error.');
  }
  drupal_set_message($message);
}</pre>
<p>Now for the meat and potatoes of the batch process.</p>
<pre class="brush: php; title: ; notranslate">function batch_demo_batch($title, $qty, &amp;$context){
  global $user;
  /*
  Set the number of nodes you want to create within a single iteration of the batch. This number
  should be pretty low as it is the reason why we're creating the batch process in the first place.
  */
  $limit = 10;

  /*
  Set the variables that need to persist throughout the batch process. These need to be set inside
  the $context array because that's what persists throughout the process.
  */
  if (!isset($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0; $context['sandbox']['title'] = $title; $context['sandbox']['max'] = $qty;
  }

  // Create some new nodes based on current progress and the $limit per page load. It’s important that you get this right otherwise you can potentially get stuck in an infinite loop or the process won’t do what you want it to.
  for($i = 0; $i &lt; $limit; $i++){
    if($context['sandbox']['progress'] &lt; $context['sandbox']['max']){
      $node = node_load();
      $node-&gt;title = $context['sandbox']['title'].' #'.$context ['sandbox']['progress'];
      $node-&gt;uid = $user-&gt;uid; $node-&gt;type = 'page';
      node_save($node);
      $context['sandbox']['progress']++; // Used to keep track of how many nodes we've already created.
      $context['results'][] = check_plain($node-&gt;title); // Keep a running tab of all of the nodes created.
      $context['message'] = &quot;Created node &quot; . $context ['sandbox']['progress'] . &quot; of &quot; . $context['sandbox']['max'];
    }
  }
  // Check if the batch is finished
  if ($context['sandbox']['progress'] &lt; $context['sandbox'] ['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}</pre>
<p><a href="http://envisioninteractive.com/downloads/batch_demo.zip">Download the example file</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/drupal/drupal-batch-api-in-a-nutshell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing Drupal sites with AEgir: Importing Your Site</title>
		<link>http://envisioninteractive.com/drupal/managing-drupal-sites-with-aegir-importing-your-site/</link>
		<comments>http://envisioninteractive.com/drupal/managing-drupal-sites-with-aegir-importing-your-site/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 18:20:18 +0000</pubDate>
		<dc:creator>Ian Whitcomb</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://envisioninteractive.com/?p=1919</guid>
		<description><![CDATA[Now that weʼve got our AEgir instance setup and running, you may be asking yourself, “what now?” AEgir can be somewhat perplexing if youʼre unfamiliar with the multisite file structure so weʼll start by discussing some of the terminology.]]></description>
			<content:encoded><![CDATA[<p><a href="http://envisioninteractive.com/drupal/managing-drupal-sites-with-aegir-getting-started/" title="Managing Drupal sites with AEgir: Getting Started | Envision Interactive | Dallas, TX">Now that weʼve got our AEgir instance setup</a> and running, you may be asking yourself, “what now?” AEgir can be somewhat perplexing if youʼre unfamiliar with the multisite file structure so weʼll start by discussing some of the terminology. <span id="more-1919"></span></p>
<p>Sites are exactly what they sound like. These are the individual Drupal instances hosted on your AEgir install. Each site has its own database and is treated as a completely separate Drupal instance although they share the same codebase within the platform theyʼre installed on.</p>
<p>Platforms are the different Drupal profiles available to you when creating sites. Multiple sites can share a platform. It is important to remember that when updating a platform, youʼre updating every site that uses it.</p>
<p><img style="margin-left:100px;" class="bdr1px" src="http://envisioninteractive.com/wp-content/uploads/2011/08/aegir-structure.png" alt="" title="aegir-structure" /></p>
<h2>Importing an Existing Drupal Site</h2>
<ol>
<li>Upload your entire core into the /var/aegir/platforms/platorm_name folder.</li>
<li>From your AEgir dashboard add a new platform and make sure you set the publish path to the /var/aegir/platforms/platorm_name folder.</li>
<li>Add a new site using the newly created platform. Weʼll call it www.yoursite.com.</li>
<li>Move all site files from sites/default/files to sites/www.yoursite.com/files.</li>
<li>Use drush or backup_migrate to import the websites database.</li>
<li>Use the AEgir migrate task to change the path of the site from www.yoursite.com to www2.yoursite.com and then back. (This will help correctly reset all file paths in the database)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://envisioninteractive.com/drupal/managing-drupal-sites-with-aegir-importing-your-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

