Yay I’m officially a Magento 2 Certified Developer

Maybe it’s just the fresh trauma, but I think the M2 cert exam was much more difficult than my M1 Dev+. Many of the questions were basically ‘here’s some requirements, here are four different ways to fulfill them, pick which one is best’. I don’t think there was a single simple memorization question in the whole 60 question exam.

But at least I’m certified, I guess I somehow managed to accrue the recommended ‘1.5 years of Magento 2 experience’ in about 6 months by leveraging my M1 knowledge, architecting/leading an M1>M2 replatform, building some example modules, and studying my ass off.

I have a module built with over 700 multiple choice questions that I built to help me study, I’ll release that eventually for others aspiring to pass the cert.

Preventing Magento 2 upgrade scripts from upgrading past setup_version

So… here’s a ‘neat’ Magento 2 install script ‘feature’:

Magento 2 upgrade scripts, as I see them written in basically every blog post I find and the Magento 2 docs, blindly upgrade as far as they can. What version you put in ./etc/module.xml before you run ./bin/magento setup:upgrade doesn’t matter. Here’s an example from the dev docs:

2019-01-07_13h08_54
$context->getVersion() contains the current installed version of the module, version_compare sees if that is lower than 0.0.2, and if so, whatever upgrade operations exist in the next code block are run.

Here’s where that causes problems:

– You’re developing, and need to test incremental upgrades.
– Your upgrade script upgrades to version 0.0.2 and 0.0.3
– You update ./etc/module.xml’s setup_version to 0.0.2, intending to only execute the 0.0.1 -> 0.0.2 upgrade
– You run ./bin/magento setup:upgrade, and your module still ends up at version 0.0.3

So, how do you get around it? No idea if this is ‘proper’, but it worked for me:

– Inject a \Magento\Framework\Module\ModuleList
2019-01-07_13h27_11

– use it to read the setup_version from the ./etc/module.xml file2019-01-07_13h27_40

– update your version testing code to ensure that current version is below the upgrade code version,  AND that the upgrade code version is less than or equal to the setup_version in ./etc/module.xml.

2019-01-07_15h00_23

Magento 2 Missing Main Navigation

Weirdly, and unlike M1, Magento 2 does not show the main navigation menu by default. You need to create some categories and subcategories to act as placeholders while you are theming, *and* assign them to the store view, to make the main navigation show up.

Creating the categories is simple, just go Catalog > Categories

2018-10-22_22h48_26

Adding them to the store view is the part that tripped me up. Go Stores > All Stores

2018-10-22_22h50_14
…. and click on a store but *not* a website or store view.  Only stores have give you the option to set a root category.

2018-10-22_22h52_55

Clear cache and the navigation should show up now.