Top Ten Problems Every Magento Store Will Inevitably Face. Part 2
Categorized as : Ecommerce
To developers, savvy merchants and support teams...
I have already reviewed the first 5 problems from the Top Ten Magento Store Problems List. If you were busy or occasionally missed them last week, it’s a good time to open the Part 1 right now: chances are high you were stuck with these issues before, so you can compare our recommendations with your experience. When nothing similar happened to you, don't take trouble-free situation for granted. The best way to deal with potential difficulties is to be prepared for them.
As a head of support team in aheadWorks I strongly advise you to study below-mentioned cases and get equipped with knowledge which will never be wasted. When one of these challenges arises, you will be done with it in a moment.
Q6: Extensions that use cron are working incorrectly.
A6: Code I present shows one of many available protection methods against the restart of a running task.
[php] const L_CACHE = 'aw_hdu_lock';
const L_TIMEOUT = 300;
public function runJobs() {
if (self::checkLock()) {
$this->processJobs();
Mage::app()->removeCache(self::L_CACHE);
}
}
public static function checkLock() {
$_lastExecutionTime = Mage::app()->loadCache(self::L_CACHE);
if (self::L_TIMEOUT > (time() - $_lastExecutionTime)) {
return false;
}
Mage::app()->saveCache(time(),self::L_CACHE,array(),self::L_TIMEOUT);
return true;
}
[/php]
Q7: Valid code returns errors instead of working flawlessly.
A7: Here I detect the problem with methods of the latest php version, while on the client’s website the earlier php version is installed. Below I point out the code with late static binding (Kung Fu from the 5.3 php version, that does not work on the 5.2).
[php] abstract class AWAS_Model_Indexer_Abstract
{
public function getIndexTableModel() {
return new AWAS_Model_Zend_Db_Table(array(
Zend_Db_Table_Abstract::PRIMARY => static::PRIMARY
));
}
}
class AWAS_Model_Indexer_Catalog extends AWAS_Model_Indexer_Abstract
{
const PRIMARY = 'entity_id';
protected function _fillData() {
$table = $this->getIndexTableModel();
}
}
[/php]
The next code is the same one, rewritten the way to use methods familiar to old php versions.
[php] abstract class AWAS_Model_Indexer_Abstract
{
abstract protected function _getPrimary();
public function getIndexTableModel() {
return new AWAS_Model_Zend_Db_Table(array(
Zend_Db_Table_Abstract::PRIMARY => $this->_getPrimary()
));
}
}
class AWAS_Model_Indexer_Catalog extends AWAS_Model_Indexer_Abstract
{
const PRIMARY = 'entity_id';
protected function _fillData() {
$table = $this->getIndexTableModel();
}
protected function _getPrimary(){
return self::PRIMARY;
}
}
[/php]
The bottom line here: before doing customization, check technology versions your store is based on. Only after this being done, start writing code that will work with all current versions.
Q8: You have installed the extension, but cannot log in to the admin panel.
A8: During extension installation compilation was enabled. The picture shows what you can do, using a standard Magento arsenal.
Q9: You have customized the store, added new features, changed the template and theme styles. Few weeks later you saw that all changes stopped working.
A9: This is the example of how custom-pack should look like, where each file with changes is duplicated (.MODIFIED). Its original version is also saved as backup (.ORIGINAL).
Backups allow tracking changes at any given time, i.e. what was made. Duplicates contain all the work in case you update the extension and unintentionally remove changes.
Q10: For developers only. A customer sets the task for you, but refuses to give the required accesses.
A10: Image below demonstrates the list of folders, to which you need accesses in most cases. I recommend to discuss the necessity of accesses with a customer way before you proceed with the task. Define special folders to be revealed instead of requiring full access to everything.
Forewarned is forearmed. I hope that knowledge of these ten problems and their solutions will help you in operating your Magento store. I am absolutely sure you will find or have already discovered more elegant ways to deal with these cases. If so, do us a favor and share your strike findings in comments!