PHP & Magento Developer in Minnesota

Thank you for visiting my website. I’m Nick Bartlett and have over ten years professional experience as a web developer with both frontend and backend skills. I’m one of a handful of Zend PHP 5 certified engineers in Minnesota and have years of experience contracting for local and remote companies.  If you or your company needs help with any of the below areas, please contact me through this website or email nick at bartlett dot com.

  1. Object Oriented PHP 5
  2. High performance, high traffic PHP websites
  3. MySQL 5
  4. JavaScript / Jquery
  5. HTML/CSS
  6. Magento
  7. WordPress
  8. Zend Framework
  9. Yii Framework

Magento 2 vs Magento 1 pricing differences

Advanced Pricing

Advanced pricing is a section where you can setup specials and tiered pricing.  The functionality is the same as in M1, but they’ve just moved and renamed some functionality.

There are two kinds of advanced pricing in magento 2.

  1. You can set a special price for a date range, which was already available in M1.
    1. Special price to and from date is missing in Magento 2 EE. This is because Magento intentionally removed it from EE so admins would use scheduled updates instead.
    2. In addition to specifying a fixed price discount for tiered pricing, in M2 tiered pricing can be a percentage off discount.
    3. M2 has an input for product cost, which has no value that I can find.  It’s not in reports or anything; it does get inserted into the order quote though.

 

Configurable Products

In Magento 1, once the simple product is associated to the configurable, the simple’s price no longer matters; it’s not used.  It’s still visible when viewing the configurable’s simple products and adds confusion.  In M1 the variations’s pricing is based off the configurable’s price plus a difference of fixed amount or percentage.  The difference can be negative. 

In Magento 2, configurable variation pricing is one of the following:

  1. All simple variations inherit the price from the configurable
  2. A price is specified for each simple. The difference from M1 is, the price you specify isn’t based on the configurable’s price at all; it’s independent.  If the configurable’s price is $20, and you want this simple’s price to be $25, you’ll specify $25 in M2 instead of $5 in M1.  This works much better if you’re pulling in prices from an ERP that has the full price specified. 


Solved Windows 10 1709 Fall Creators Update failure

Once again updating my Windows PC, which is running Windows 10 and started life as Windows 7, was a major pain as the update to 1709 Fall Creators Update failed at 45% completion with the message “windows could not configure one or more system components”. What took me 7 hours of waiting through a dozen or more downloads of updates and reboots you get to read in a few minutes haha.

My previous solution to solve windows update errors using WSUS offline updater didn’t work this time around. The tool downloaded many updates, but then said no updates required. This was not true as I was running Windows 1607 and the current version is 1709.

A hint of the issue came from viewing the file C:\$Windows.~WS\Sources\Panther\setupact.log

2018-01-13 08:41:50, Info                  CSI    000000de ==Error Summary Start==
2018-01-13 08:41:50, Error                 CSI    000000df (F) Generic Command	ErrorCode: 80004005	Executable: iissetup.exe	ExitCode: 9	Phase: 38	Mode: Install (first install)	Component: Microsoft-Windows-IIS-SharedLibraries-GC, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=amd64, versionScope=NonSxS[gle=0x80004005]
2018-01-13 08:41:50, Info                  CSI    000000e0 ==Error Summary End==

There is something wrong with IIS, which I am not using on this computer. To solve this, on your computer click the search icon and type “windows features” and click the result “Turn windows features on or off”. I initially disabled IIS on my computer, rebooted and tried again. No luck, same issue. Hours later I Tried it again, only this time I came in with a bigger hammer and disabled Microsoft .NET framework 3.5 and 4.7, Internet Explorer 11, and Internet Information Services (IIS). Click “OK”, then reboot your computer. Then run the update again and this time it worked.

Afterward, I went back to windows features and enabled both .NET frameworks and Internet Explorer, but left IIS off. This required another reboot. Also, the upgrade deleted my video card driver, and updating it from the device manager failed. It an nvidia geforce 9500 and I was able to find and download the correct driver from their website for the fix.

All is good, until next time.


A faceted navigation that’s optimal for both site visitors and SEO

A project of mine suffers from over categorization as described here https://baymard.com/blog/ecommerce-over-categorization . There are too many sub categories, many of which contain just a product or two, that silo the visitor into a cumbersome experience. Imagine you visited a site and viewed their TV’s and you looked at their category for 40″ TVs. But then, you decided to view other TV’s, so you viewed the 42″ category, and then the 46″ category. The same would happen if you wanted to shop TV’s by brand, type, or another feature. It would take a long time to browse all available TV’s with the features that are valuable to you! This is an example of over categorization. Instead the categories should be turned into a TV’s category with a variety of available facets (filters) that can be applied together.

Aside from a good information architecture, site speed is important. An ajax based navigation, such as this one https://www.lacrossetechnology.com/products/weather/weather-stations provides a great user experience because only the products will reload when a filter is applied. An entire page reload when a filter changes is not necessary, which improves performance.

While an ajax based navigation is great for visitors, it’s terrible for search engine optimization because:

  1. The filters (facets) and combinations of filters won’t have unique meta content or in page descriptions like the previous sub categories did. With the previous over categorization there was a separate category for “Sony TV’s” that had a unique URL, page title and meta data, and a unique in page description. This is extremely important for SEO and is lost when switching to a general TV’s category with a brand filter (Sony).

    Solution –
    I was happy to find this Amasty extension https://amasty.com/improved-navigation-ajax-layered-navigation.html solves the problem. Try out the filtering on this demo http://improved-navigation-1910.demo.amasty.com/improved-navigation-1910/women/dresses-skirts/dresses-long.html . Notice I’ve linked you directly to the category page with a few filters applied; the combination of filters produces a unique URL without a query string (dresses-long.html) that is built in the same order every time for consistency. Additionally, this unique set of filters will dynamically change the page’s meta description, heading, and show/hide cms blocks of your choosing. You get the best of both worlds here – ajax driven navigation for the user and unique page content for the search engine. The downside it is takes a fair amount of configuration, but it’s worth it. This is especially important if we’re rearranging site categories and changing unnecessary sub categories, which have link juice, info filters.

  2. The filters (facets) and combinations of filters won’t get indexed by search engines like the previous sub categories did. Take the TV’s category for example – there will be one URL for TV’s that your ecommerce solution, such as Magento, will include in the Google sitemap. If you want to link the visitor directly to Sony TV’s it’s possible but with an ugly URL that won’t be included in the google sitemap by default. This URL will be in the form of a query string like tvs.html?brand=sony&size=46, which are not preferred by search engines.

    Solution –
    Build or buy functionality that will add URL’s of your choosing to the google sitemap. Again Amasty to the rescue with this module that allows you to add URL’s of your choosing https://amasty.com/magento-xml-google-sitemap.html .

I found these related articles helpful
https://moz.com/ugc/guide-to-ecommerce-facets-filters-and-categories
https://moz.com/blog/building-faceted-navigation-that-doesnt-suck
https://www.practicalecommerce.com/SEO-When-Product-Facets-and-Filters-Fail


Magento 2 Solutions Specialist

The other day I passed the Magento 2 Solutions Specialist exam. I cannot provide details of the exam, but I’ll say there were a number of challenging questions. I found the study guide and practice test from swift otter to be very helpful https://swiftotter.com/technical/magento-2-certified-solution-specialist-practice-test , but there were some incorrect statements that should be fixed. I have emailed Joshua with this request.

“Inventory is associated with a specific website.”
This is incorrect. Invetory Qty is global.

“Flat product pricing can be changed on a store view basis.”
Product price is global by default, but can be changed to “website” (not store) in stores->configuration->catalog->catalog->price .

“What marketing and merchandising features are available only in Magento 2 Enterprise Edition?”
1. Bulk ordering doesn’t exist out of box.
2. Bluefoot CMS is not built in. Module today has been deprecated.

“What does the acronym MOSCOW stand for? How is it used?”
MosCoW is a way determining the importance of requirements for a project, hence the term MoSCoW Prioritisation. MoSCoW stands for Must haves, Should haves, Could haves, Won’t haves. The o’s are added to make the acronym pronounceable and memorable.

Details of the exam are here https://u.magento.com/certified-magento2-solution-specialist#.WkfCtt-nFhE .

MAGENTO 2 SOLUTION SPECIALIST OVERVIEW

A Magento 2 Solution Specialist is an expert user of the Magento 2 ecommerce platform. Drawing on a deep background in business and ecommerce, the Magento 2 Solution Specialist can efficiently align business objectives with Magento 2 functionality, optimize use of native features, and avoid unnecessary customization. Whether as a merchant, a manager, a consultant, or an analyst, the Magento 2 Solution Specialist knows how to make the best use of Magento 2 features and functionality.

A Magento 2 Certified Solution Specialist has deep familiarity with the Magento platform, including:

Magento 2 Architecture: layouts, themes, extensions and customizations; Magento data models
Elements of a Magento 2 ecommerce site: catalog, shipping, payment, order processing, promotions, extensions, import/export, etc.
Application of Magento 2 knowledge to business goals: mapping client needs to Magento features, recommending the most effective options for implementing client requirements in Magento
ABOUT THE EXAM
75 Multiple Choice items
90 minutes to complete the exam


Magento 2: cron “Too late for the schedule” message in cron_schedule table

I ran into this issue today where every cron job would get created a few seconds after when it was supposed to execute. Because of this it would fail to run.

Notice the “send_notification” cron job at the top was executed, but then never finished and the “Too late for the schedule” message started shortly after. Geil Berkers also encountered this issue with Magento 2 in his post https://gielberkers.com/solving-too-late-for-the-schedule-with-magento-crons/ .

The issue with that cron job caused all subsequent crons to become too late for the schedule. As a temporary solution I manually entered a date in the “finished_at” column of the “send_notification” record and within a few minutes all crons started running again.