By Senior Magento Developer Alan Barber
This week my team celebrated the completion of our most recent project: TeachMeToday.com. This is a heavily customized version of Magento which allows users the opportunity to pay for a membership which gives them access to over 400 eLearning courses.
Each of these areas could have a full article written about them, but I will try and provide a few paragraphs about how we accomplished each
This was probably the largest piece of the project. TeachMeToday had ~400 products and ~80 categories in an external catalog. Each of the products was essential an online “course” which launched a java application on the user’s computer. While we couldn’t import the java apps themselves, we could import the category hierarchy and metadata for individual courses. The process we developed for this is as follows:
Mage::helper("apihelper")->{api_method_name}
— cool huh? The the other objects in the module, the API calls were just regular method calls…our soap class had built in functions to handle soap faults as errors and to parse the soap response.
Mage::log({message}, null, {filename})
which allows you to put a custom log at var/log/{filename}
TeachMeToday is based on a membership which gives users access to all products in the system. Be default, the community edition of Magento doesn’t enable this functionality. However it is surprisingly simple to implement this:

Mage::getSingleton("customer/session")->getCustomer()
to grab the current customer instance and check their is_active flag.Mage::dispatchEvent("our_custom_event", array("customer" => $customer))
which passes the newly-signed-up customer to our custom module (which then updates the appropriate customer attributes). We created a similar event for when the customer is deleted or fails billing.We needed a way to continually charge customers (since the product they were purchasing was a monthly membership/subscription). However, it requires a lot of legwork and special infrastructure to store credit cards with and be PCI Compliant — and the community edition of Magento is not PCI compliant. Therefore, we decided to use Authorize.net’s CIM. CIM allows you as merchant to store credit card information on authorize.net’s servers, and then provides you a handle for each customer with which you can rebill them without storing their info — cool huh?
Our process was as follows:
>We needed a number of different landing pages for TeachMeToday to AB test affiliate traffic to. These landing pages needed to be highly optimized for conversions. The process for creating landing pages that could create orders in Magento was as follows:
Create CMS Pages with each landing page URL
Since TeachMeToday receives a large amount of affiliate traffic, they needed to do a few things:
Mage::getModel("newsletter/subscriber")
)Mage::getSingleton("checkout/session")->getLastRealOrderId() will give you the order id).
I’ve outlined a lot of complicated processes above. It was a considerable amount of work—but it goes to show how Magento’s modular structure allows you to do just about anything with it (and how awesome our Customer Paradigm Team is!).
Alan Barber is a Senior Magento Programmer at Customer Paradigm who specializes in systems architecture and application troubleshooting. For more information, or to get Magento help now, visit customerparadigm.com.
The dad of one of our lead Magento Developers here at Customer Paradigm found this article about why he doesn’t fear losing his job to overseas talent, and it’s a great article: http://blog.jpl-consulting.com/2011/12/why-i-will-never-feel-threatened-by-programmers-in-india/ When I first started our company, I was lured into using inexpensive overseas programmers to handle building websites, etc. What I found by hiring an all US-based team of programmers for Magento Development and php programming was that: – The code the US programmers wrote is a lot better – The programmers here in the office were at least 5 to 10 times more efficient – Turnaround times were are lot faster – Customers like being able to talk to a real programmer – Project management costs and frustrations are way down / reduced by 2 to 4 times – There’s a huge premium for having programmers sit together in an office and tackle problems efficiently. Today, we have two of our top programmers traveling to visit one of our clients in San Francisco, CA – a short 2 hour flight from here. Thanks, Alan’s Dad!
A lot of people have asked me what I brought on a 2.5 week trip, for successful photography — while not going crazy.
Here’s the list: Canon 50D. I normally shoot with the vertical grip attached, but I left it at home due to space. Seven batteries for the camera. I wasn’t sure how often I would be able to charge them. One of the batteries failed during the trip (wouldn’t keep a charge) Lens cleaner, lens cleaning cloth, air blower. It’s the desert, so everything gets dusty and sandy. Every memory card I own... over 125+ GB worth. A cable to plug in the camera directly to my computer. I thought about bringing a card reader, but to save space, I connected directly to the computer. Macbook Pro, with Lightroom 3.0 installed. With Lightroom, I could keep shooting until cards were completely full, and it would handle not importing duplicates into the system. I used Lightroom to pick the winner photos (usually about 10% of the ones I shoot are worthy of really keeping), and then export them in two different sizes: 700 pixels wide for uploading to Facebook, and full JPG size for printing. 500 GB backup hard drive. All images were also backed up there as well. I kept this separate from the computer, so that if the computer was stolen, I’d still have a copy of all of the RAW images and files. Plug adapters for Israel. I did find on a couple of occasions that the chargers would “heat up” and would stop working. If I unplugged them for about an hour, they started to work again. Probably an issue with 220 volt electricity. I did bring a small powerstrip, but it didn’t work in some cases (I needed the plug adapter, then the powerstrip, then a charger, and it was too heavy and fell out of the wall). USB thumb drive. I used this to backup all of the “final” jpg images, and kept this in a different location than everything else. I also used this to print a few images at a local photo lab as presents to some cousins. Lenses: I tried to bring just what I needed for the trip, without going overboard. 10-20 mm Wide Angle lens. Perfect for desert shots or tight spaces. 28-70 mm f/2.8 L zoom lens, for all-around photos. 50 mm f/1.4 lens, great for tooling around, portraits, and low-light shots. 70-200 mm f/2.8 lens, for getting in closer. 2x converter for the 70-200 mm, for wildlife shots. 580 EXII flash, plus three sets of rechargeable batteries. I didn’t use the flash that often, as it’s pretty conspicuous. I used it on some bright-day outdoor shots. A green canvas Domke bag for keeping everything in. This made it a lot easier to keep everything organized and ready. Things I didn’t bring: – I didn’t bring a second camera body, as I figured that I could always purchase another one there if mine went south. – I didn’t bring a tripod or a monopod. I thought about it, but it was too much space. – Additional flashes, diffusers, reflectors, etc. Things I wish I had brought: – Perhaps a second 500 GB backup drive, for even more peace of mind. They are really lightweight, and keep a full copy of all of the images. – A second battery charger, or a vertical grip so I could use AA batteries if I was stuck. Batteries were a single point of failure with only one charger. – A couple of extra high-capacity USB thumb drives for backing up final images.
Magento Wishlist Module, why are you only showing your name? Don’t you realize that you are not of use if you don’t let us in, give use some information about yourself? When My Wishlist is clicked, the expectation is that one will see a list of items tucked away to review at a later date. What does one see?
The home page . . . what is up with that?
After a “Why are you doing this to me?” the search began for a solution to this issue. Many questions similar to mine were returned by our favorite answer man, Google, and yet only vague solutions were provided. One discussion seemed to intimate that this was a bug in the Magneto code base . . . but there was no reference to a bug report nor a patch provided to resolve the issue. None of the suggested solutions provided the key to unlock the list of items secretly held by My Wishlist.
Are you kidding? Does anyone have a solution? This treasure trove of information is held by a key member of the Magento core and to not have access has become unbelievably frustrating. Can you relate? Are you ready to pull out your hair?
Well, take a deep breathe and read on … as the issue was due a breakdown in communication between My Wishlist and the rest of the core Links group they belong to.
Here is how we helped My Wishlist to communicate nicely with the core Links group.
You need to navigate to
app/code/core/Mage/Wishlist/Block/Links.php
add the function
public function getUrl()
{
Return $this->_url;
}
Now My Wishlist will allow us now to see the information once hidden.
For more information about configuring modules in Magento , or for Magento Programming help now, visit customerparadigm.com/ or contact us to speak to a real person about Magento web development.
Cyber Monday marked the beginning of an annual online shopping spree, where online shoppers hurry from site to site, looking for great deals and exclusive offers from online stores. While it’s a great way to skip the long lines, it can also be a time where credit card fraud, hackers, and scammers run rampant. Here are some tips with words of caution for you as you make your online purchases. Tips to help fight crooked online retailers, scammers and hackers: Guard your Computer Make sure your computer has been updated with the most recent versions of spam filters, anti-virus and anti-spyware software and has a secure firewall. Make sure you’re shopping on a trusted website Shoppers should check the seller’s reputation and record for customer satisfaction. Make sure the site is real: there are some sites out there that copy seals to appear genuine. Keep your personal information private Read the Privacy Policy and get a handle on what kind of personal information you will need to reveal and how it will be used. If you can’t find a privacy policy on the site, that is a huge sign that the site may be unsafe and your information may end up getting used or sold without your permission. Be cautious of “too good to be true” deals When you find offers online with extremely low prices on high-demand, expensive items, it can sound too good to be true…and it usually is. Make sure to trust your gut and don’t be afraid to forgo deals that could end up costing you much more in the end. Look out for Phishing If you get an email from a business claiming they have issues with your order or your account, and if they ask you to reveal any financial information, we recommend calling the contact number on the site where your purchase was made, just to make sure there really was a problem with the transaction in the first place. Confirm your online purchase is secure When you are making a payment online, make sure you check the URL on the top of your screen for the “s” in https:// and look for the “lock” icon in the lower right-hand corner. If you have some questions on the security of the site, we recommend right-clicking anywhere on the page and select “Properties.” This will let you see the real web address and the dialog box will reveal if the site is encrypted or not. Save your order confirmationsWhen you complete your order online, make sure to save the final confirmation page and any confirmation emails received. Just in case an issue comes up with your order, it’s always good to have a record of your order on hand for future reference.
We hope that you have a safe online holiday shopping experience this season!
Hi everybody. Today I want to talk about a process that I used to adapt Magento to incorporate Google Content for a site called Love ‘n Lace (http://www.lovenlace.com/). I hope that you will find this information useful.
I started by uninstalling the previous Google shopping extension via Magento Connect. Next, I used the the http://connect20.magentocommerce.com/community/Mage_GoogleShopping-0.2.12 extension key to install the extension. This key is compatible with Magento 1.5.0.1.

After I had installed the extension, I added a new product attribute: ‘availibility.’ (Catalog -> Attributes -> Manage Attributes). drop-down (as opposed to text field) required values = yes scope = global apply to all product types Manage Label / Options Manage Titles Admin = Availability Manage Options 1. ‘in stock,’ position 0, default value 2. ‘available for order,’ position 1 3. ‘out of stock,’ position 2 4. ‘preorder,’ position 3 I then added ‘availability’ under the Default attribute set (Catalog -> Attributes -> Manage Attribute Sets) under the ‘general’ category.
By Customer Paradigm’s Magento Consultant Gillian Owen .
That’s a question we hear from a lot of our Magento eCommerce clients. The fact is that upgrading Magento can be costly, time consuming and often results in downtime of the store. So, do you really need to upgrade Magento every time a new version comes out? The simple answer is no. Every new version of Magento contains maybe a handful of improvements and a ton of bug fixes. You can see all of the improvements and fixes in each version of Magento here.
We recommend upgrading Magneto when:
For more information about upgrading magento, or to get Magento programming help now, call us at 888.772.0777 or contact us to speak to a real person now.
by Jeff Finkelstein When Should I Upgrade Magento? That’s a question we hear from a lot of our Magento eCommerce clients. The fact is that updating Magento can be costly, time consuming and often results in downtime of the store. So, do you really need to upgrade Magento every time a new version comes out? The simple answer is no. Every new version of Magento contains maybe a handful of improvements and a ton of bug fixes. You can see all of the improvements and fixes in each version of Magento here. We recommend upgrading when: Magento is more than two versions out of date (example Magento has released 1.6, so if you are still running 1.3 it’s time to upgrade). If you need or want a new feature that is available on a newer version (example, you’d like to have a mobile version of your site and this is available on 1.5+) If a newer version includes a fix for a bug you commonly encounter (example, you frequently need to import customers and run into errors when importing customers from a CSV so you need to upgrade to 1.6)
Today we discovered that the iPhone camera that has secretly hidden a Panorama Mode which allows you to capture a big panoramic scene using multiple photos. 
Today we discovered that the iPhone camera that has secretly hidden a Panorama Mode which allows you to capture a big panoramic scene using multiple photos. 
by Customer Paradigm Magento Programmers Alan Barber and Gillian Owen
While eCommerce stores running Magento’s Professional or Enterprise editions are PCI compliant, having PCI compliance on the Community edition of Magento is a little more complicated. The easiest and perhaps most affordable solution is to use a hosted payment method such as Paypal’s PayFlow Link. However, our client K9Power was running an early version of Magento ( 1.4.2) which did not include this PCI compliant payment option. So the decision was made to upgrade them to 1.6.
To start we made a copy of the live site and preceded with a regular upgrade to 1.6 following the usual methods for upgrading magento. However, we ran into a problem during the database upgrade—Magento kept erroring out on a SQL call to drop a foreign key in the `sales_flat_order_item` table. To discover the exact call being made, we hacked the Mage::printException function to see a full error dump. We then manually dropped the problematic key and resumed the database upgrade (which completed successfully).
The next step was to move over the design and custom extensions from the 1.4.2 installation to the 1.6 installation. The design was easily ported, however we ran into an issue with the OrganicInternet Simple Configurable Products extension —it became apparent this module was not compatible with 1.6. After finding a forum discussion about it, we installed an updated version from github, which seemed to resolve the compatibility issue.
Now K9power is running successfully on 1.6 and can utilize Paypal’s PayFlow Link for PCI compliant payment processing. Plus they have the added benefit of now being able to use Magento’s new Persistent Shopping Cart, which saves the shopping cart for a customer even if they leave the site. During this upgrade we also added Memcache and APC cache to increase speed, installed One Step Checkout to stream line the checkout process, and installed the Constant Contact extension to sync his mailing lists.
For more information on upgrading magento, or to get Magento programming help now, call us at 888.772.0777 or contact us to speak to a real person now.It seems that Blackberry is down again today, Monday, November 7, 2011. I was wondering why I didn’t receive any emails this morning from 7:00 am on through the Blackberry Internet service…
Update: 9:29 am, November 7, 2011: I just received a test email I sent to myself. It was sent at 8:15 am; it just arrived at 9:30 am. Perhaps it’s clearing through the queue?
Customer Paradigm Senior Magento programmer Alan Barber has just published a comprehensive guide to upgrading your Magento installation.
Basically, there are three steps to any Magento Upgrade:
1. Install a fresh version the Magento file tree (the version you are trying to upgrade to)
2. Run the installer from this file tree on-top of the outdated database (thereby upgrading the database)
3. Move over themes and custom extensions from the old version to the current version of Magento.
Read more about Upgrading Magento. Check back in for more informational articles from Customer Paradigm about Magento programming and search engine marketing.
To get Magento help now call us at 888.772.0777 to speak to a real person about Magento web development.
My friend, Marc Sotkin, has another book available… and you can preview it before you buy it:
More information – Get the book – click here.
With the holiday season rapidly approaching it’s time to focus on your online marketing strategy! Starting well in advance of the holiday season with “Early Bird Discounts” and “Sneak Peeks” is a great way to ensure that you have a successful and profitable final quarter this year.
Obviously most people who are interested in sharing or liking your products will not want to share once they see that! So we investigated and discovered that none of the meta descriptions had been set up for those products. In Magento you can add a meta description by going to Catalog -> Manage Products -> Product -> Meta Information.
Then just copy over your description as plain text without any HTML and place it into the meta description. Now your products can be shared without any funky code showing up.
I was helping lead Adventure Rabbi’s Yom Kippurclosing service, and we saw this rather large black bear just off the trail:
So you’ve installed Magento on your server and your ready to start developing your new store, but your not quite sure where to start. You know you don’t want Google to index your site until it’s ready to go live and you know you will need to configure some initial settings in the system, but exactly what should you do? Here are my steps to configuring your new Magento store for development, once your are ready to go live a couple things will need to be changed back. The things that will need to be turned back on are in BOLD.
To start it’s always easiest to pick an existing Magento theme and install it by uploading the app, skin and media folders your root directory. You should merge these files and if necessary you may need to overwrite some files. Once you have uploaded the theme log in to your backend of your Magento Administration and go to “System”→ “Configuration “→”Design”. Open the “Themes” tab, then enter the identifier of the theme you are setting up (for example: hellocanvas) in the fields: “Templates” , “Skin (Images / CSS)” , “Layout” , “Default” , and then click “Save Config”.
Clear out the Messages Inbox: System → Notifications. Then Select All and Actions: Mark As Read and Submit.
Go to System → Index Management, and reindex all of the indexes.
Disable the Cache in System → Cache Management
Finally update all the Configurations, go to System → Configuration
Update with Locale Options and Store Information.
In Web update Unsecure and Secure Base URLs to be your store’s URL, if you are developing on a development domain you will need to update these URLs when your store goes live.
In Design update your HTML Headers, and make sure Default Robots is set to “NOINDEX, NOFOLLOW”
Then update information in Header and Footer to reflect your business.
In Store Email Addresses update with correct emails for your business.
In Contacts update the Email options with the correct email.
Catalog go to Frontend and use Flat Catalog Category and Use Flat Catalog Product to Yes.
If you are not using Magento to manage your inventory then under Product Stock Options change Manage Stock to No. Otherwise leave as is you will update your inventory for products in each individual product’s page.
In Sales, update the invoice and Packing slip with Address & logo.
In Tax, update Default Tax Destination Calculation with correct Country, State, and Zip.
In Shipping Settings, update Origin with address. In Shipping Methods make sure you set up at least one shipping method.
In Google API add your Google analytics account numeber.
In Payment Methods, set up your Authorize.net account or whatever other payment gateway is needed.
Disable Unused Modules, go to Advanced →Advanced.
Disable modules like Find_Feed, Newsletter, Polls, ect anything that won’t get used.
First get your logo, open up FTP and go to store/skin/frontend/theme and replace
i. Logo.gif
ii. Logo_email.gif
iii. Logo_print.gif
Next replace the “No Image” default pictures in catalog/products/placeholder/
i. Image.jpg
ii. Small_image.jpg
iii. Thumbnail.jpg
Go to CMS → Polls and delete the test poll Go to CMS → Static Blocks and remove or edit the Footer Links (if using a hello themes them you’ll need to replace with the supplied ones in the folder → staticblock) Go to CMS → Pages and remove or edit the About Us, Customer Service, and Home Page pages.
Finally go to System →Index Management and Reindex all your indexes.
When your website is ready to go live make sure you go back through and update your web URLs, Default Robots and remove the Demo Store Notice. I personally always make a list of settings I feel need to be updated when a Magento store goes live, this way I do not miss any and I highly suggest you do the same!
I helped guide the Rosh Hashanah Retreat in the Rockies with Adventure Rabbi, and took lots and lots of photos. The holiday is a time to reflect back on the year that has passed, and think about what you want to do this next year. These photos of a participant looking into the lake, with the reflection of the yellow Aspen trees were some of my favorites:
Here’s the view from a bit of a wider angle:
And here’s one of a person casting a stone into the water:
Yesterday, Discount Decorating went live with a new home page layout design that is intended to increase usability of the site and increase shopping. The new look was designed by Gillian to simplify the page, and direct users to the parts of the site that will be highlighted each week or month. 
Customer Paradigm is a proud sponsor of the 2nd Annual The Bad Ass SEO Guest Blogging Contest hosted by The Search Engine Marketing Group. Started by Gerald Weber, the blog has become one of the premier sources of SEM content online. The contest brings together the SEO community by showcasing the awesome guest blogging skills of SEOs and Internet marketers. It began on 9.12.11 and goes until 10.12.11. Acceptable guest post topics include anything related to SEO, Internet marketing or social media. For more info, visit here. Know some great writers who want to show off their SEO savvy? Spread the word. It’s a great chance to connect and bring the SEO community together.
“The service I requested much completed much faster than expected. Additionally, the representative was flexible and offered to look into my Magento issues before I had to make payment. If I ever need Magento work, I’ll definitely be using Customer Paradigm.” – Aaron West
Think about how much time you spend on Facebook. New research from a Nielsen study released today concluded that Americans spent a total of 53.5 billion minutes on Facebook in May 2011 – more than any other website – as part of the firm’s “State of the Media” quarterly report on social networking. Here’s an excerpt from the article in the San Francisco Chronicle:
…Yahoo was second with 17.2 billion minutes in May, with Google third at 12.5 billion minutes. With Americans now spending one-quarter of their overall Internet time on social networks and blogs, Nielsen said the results show “how powerful this influence is on consumer behavior, both online and off.” “Whether it’s a brand icon inviting consumers to connect with a company on LinkedIn, a news ticker promoting an anchor’s Twitter handle or an advertisement asking a consumer to ‘Like’ a product on Facebook, people are constantly being driven to social media,” the study said. Read more here.
If you’re a business or run an eCommerce site, how are you capturing the attention of all these social media users?
When I had a sewer line issue at our home in Boulder, Colorado, I called Shannon from Aspen Creek HVAC (we built a website in an afternoon for them). She referred me to McAdams Plumbing. A really nice company, very affordable plumber serving Boulder, Colorado. I highly recommend them!