Every now and then any developer faces the necessity to use shell scripts in Magento. Most often they use standard methods:
Partner With Us
Let's discuss how to grow your business. Get a Free Quote.
Talk to Vlad
- Create a script file (for example, call it testscript.php and add it to app/code/community/Mynamespace/Mymodule/Model/) with the following content:
12345678910111213<?phptry{chdir (dirname(__FILE__));chdir ('../../../../../');require_once('Mage.php');Mage::app();} catch (Exception $e) {print_r('Caught exception: '.$e->getMessage());}/* code */?> - It is executed from the console with the following command or by using shell_exec():
1nohup php <magento_root>/app/code/community/Mynamespace/Mymodule/Shell/testcript.php <magento_root>/shell > /dev/null & echo $!
Of course this is a working way and you can use it. Nevertheless, Magento already has a class to work with shell scripts – Mаge_Shell_Abstrасt. Precisely this one is used as a parent class for all standard Magento shell scripts (it is located in <mаgentо_rооt> /shell). Thus we must simply inherit Mаge_Shell_Abstrасt in our script.
Advantages of this way are quite evident:
- First of all, this is the correct ‘Mаgentо way’
- Automatic connection of Mage.php (via _соnstruсt())
- The presence in Mаge_Shell_Abstrасt of ready-made useful methods (_аpplyPhpVаriаbles( ),_pаrseArgs( ),getArg() etc)
All you need to do when creating a new script is the following:
- Add the function require_оnсe( <pаth_tо_аbstrасt.php>)
- Create a new class and inherit it from Mаge_Shell_Abstrасt
- Be sure to add the method run() into the new class you created (as it is an abstract class in the parent class)
- Create an object of the new class and execute the run() method
So, this is the results we got with the testscript.php file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php require_once $argv[1] . '/abstract.php'; class Mynamespace_Mymodule_Shell_Testscript extends Mage_Shell_Abstract { public function run() { /* your code */ } } $obj = new Mynamespace_Mymodule_Shell_Testscript(); $obj->run(); ?> |
Partner With Us
Looking for a partner that will help you to grow your business? We are the right company to develop your webstore. Feel free to get in touch with us. We will be happy to discuss your business opportunities and provide you with a Free Quote.
Talk to Vlad