How to create Magneto System Configuration Settings??
Step 1. Create global configuration File
Step 2. Create module configuration file
Step 3. Create helper class
Step 4. Create System configuration file
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is ConfigurationSettings. Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_ConfigurationSettings.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/ConfigurationSettings/etc as name "config.xml"
Step 3. Now next thing is to create helper inside the directory /app/code/local/ExtendTree/ConfigurationSettings/Helper/ as name "Data.php"
class ExtendTree_ConfigurationSettings_Helper_Data extends Mage_Core_Helper_Abstract {
}
Step 4. Now last thing is to create system configuration file inside the directory /app/code/local/ExtendTree/ConfigurationSettings/etc/ as name "System.xml"
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is OverrideControllers. Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_OverrideControllers.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/OverrideControllers/etc as name "config.xml"
Step 3. Now create new frontend controller. Suppose we want to override frontend controller Mage_Checkout_OnepageController then we will create one controller class in our module in directory app/code/local/ExtendTree/OverrideControllers/controllers/ by name OnepageController.php
require_once(Mage::getModuleDir('controllers','Mage_Checkout').DS.'OnepageController.php');
class ExtendTree_OverrideControllers_OnepageController extends Mage_Checkout_OnepageController
{
/**
* List of functions for section update
*
* @var array
*/
protected $_sectionUpdateFunctions = array(
'payment-method' => '_getPaymentMethodsHtml',
'shipping-method' => '_getShippingMethodsHtml',
'review' => '_getReviewHtml',
);
/**
* @var Mage_Sales_Model_Order
*/
protected $_order;
/**
* Predispatch: should set layout area
*
* @return Mage_Checkout_OnepageController
*/
public function preDispatch()
{
parent::preDispatch();
$this->_preDispatchValidateCustomer();
$checkoutSessionQuote = Mage::getSingleton('checkout/session')->getQuote();
if ($checkoutSessionQuote->getIsMultiShipping()) {
$checkoutSessionQuote->setIsMultiShipping(false);
$checkoutSessionQuote->removeAllAddresses();
}
if (!$this->_canShowForUnregisteredUsers()) {
$this->norouteAction();
$this->setFlag('',self::FLAG_NO_DISPATCH,true);
return;
}
return $this;
}
/**
* Send Ajax redirect response
*
* @return Mage_Checkout_OnepageController
*/
protected function _ajaxRedirectResponse()
{
$this->getResponse()
->setHeader('HTTP/1.1', '403 Session Expired')
->setHeader('Login-Required', 'true')
->sendResponse();
return $this;
}
/**
* Validate ajax request and redirect on failure
*
* @return bool
*/
protected function _expireAjax()
{
if (!$this->getOnepage()->getQuote()->hasItems()
|| $this->getOnepage()->getQuote()->getHasError()
|| $this->getOnepage()->getQuote()->getIsMultiShipping()
) {
$this->_ajaxRedirectResponse();
return true;
}
$action = $this->getRequest()->getActionName();
if (Mage::getSingleton('checkout/session')->getCartWasUpdated(true)
&& !in_array($action, array('index', 'progress'))
) {
$this->_ajaxRedirectResponse();
return true;
}
return false;
}
/**
* Get shipping method step html
*
* @return string
*/
protected function _getShippingMethodsHtml()
{
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('checkout_onepage_shippingmethod');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput();
return $output;
}
/**
* Get payment method step html
*
* @return string
*/
protected function _getPaymentMethodsHtml()
{
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('checkout_onepage_paymentmethod');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput();
return $output;
}
/**
* Return block content from the 'checkout_onepage_additional'
* This is the additional content for shipping method
*
* @return string
*/
protected function _getAdditionalHtml()
{
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('checkout_onepage_additional');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput();
Mage::getSingleton('core/translate_inline')->processResponseBody($output);
return $output;
}
/**
* Get order review step html
*
* @return string
*/
protected function _getReviewHtml()
{
return $this->getLayout()->getBlock('root')->toHtml();
}
/**
* Get one page checkout model
*
* @return Mage_Checkout_Model_Type_Onepage
*/
public function getOnepage()
{
return Mage::getSingleton('checkout/type_onepage');
}
/**
* Checkout page
*/
public function indexAction()
{
if (!Mage::helper('checkout')->canOnepageCheckout()) {
Mage::getSingleton('checkout/session')->addError($this->__('The onepage checkout is disabled.'));
$this->_redirect('checkout/cart');
return;
}
$quote = $this->getOnepage()->getQuote();
if (!$quote->hasItems() || $quote->getHasError()) {
$this->_redirect('checkout/cart');
return;
}
if (!$quote->validateMinimumAmount()) {
$error = Mage::getStoreConfig('sales/minimum_order/error_message') ?
Mage::getStoreConfig('sales/minimum_order/error_message') :
Mage::helper('checkout')->__('Subtotal must exceed minimum order amount');
Mage::getSingleton('checkout/session')->addError($error);
$this->_redirect('checkout/cart');
return;
}
Mage::getSingleton('checkout/session')->setCartWasUpdated(false);
Mage::getSingleton('customer/session')->setBeforeAuthUrl(Mage::getUrl('*/*/*', array('_secure' => true)));
$this->getOnepage()->initCheckout();
$this->loadLayout();
$this->_initLayoutMessages('customer/session');
$this->getLayout()->getBlock('head')->setTitle($this->__('Checkout'));
$this->renderLayout();
}
/**
* Refreshes the previous step
* Loads the block corresponding to the current step and sets it
* in to the response body
*
* This function is called from the reloadProgessBlock
* function from the javascript
*
* @return string|null
*/
public function progressAction()
{
// previous step should never be null. We always start with billing and go forward
$prevStep = $this->getRequest()->getParam('prevStep', false);
if ($this->_expireAjax() || !$prevStep) {
return null;
}
$layout = $this->getLayout();
$update = $layout->getUpdate();
/* Load the block belonging to the current step*/
$update->load('checkout_onepage_progress_' . $prevStep);
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput();
$this->getResponse()->setBody($output);
return $output;
}
/**
* Shipping method action
*/
public function shippingMethodAction()
{
if ($this->_expireAjax()) {
return;
}
$this->loadLayout(false);
$this->renderLayout();
}
/**
* Review page action
*/
public function reviewAction()
{
if ($this->_expireAjax()) {
return;
}
$this->loadLayout(false);
$this->renderLayout();
}
/**
* Order success action
*/
public function successAction()
{
$session = $this->getOnepage()->getCheckout();
if (!$session->getLastSuccessQuoteId()) {
$this->_redirect('checkout/cart');
return;
}
$lastQuoteId = $session->getLastQuoteId();
$lastOrderId = $session->getLastOrderId();
$lastRecurringProfiles = $session->getLastRecurringProfileIds();
if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
$this->_redirect('checkout/cart');
return;
}
$session->clear();
$this->loadLayout();
$this->_initLayoutMessages('checkout/session');
Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
$this->renderLayout();
}
/**
* Failure action
*/
public function failureAction()
{
$lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
$lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
if (!$lastQuoteId || !$lastOrderId) {
$this->_redirect('checkout/cart');
return;
}
$this->loadLayout();
$this->renderLayout();
}
/**
* Get additional info action
*/
public function getAdditionalAction()
{
$this->getResponse()->setBody($this->_getAdditionalHtml());
}
/**
* Address JSON
*/
public function getAddressAction()
{
if ($this->_expireAjax()) {
return;
}
$addressId = $this->getRequest()->getParam('address', false);
if ($addressId) {
$address = $this->getOnepage()->getAddress($addressId);
if (Mage::getSingleton('customer/session')->getCustomer()->getId() == $address->getCustomerId()) {
$this->getResponse()->setHeader('Content-type', 'application/x-json');
$this->getResponse()->setBody($address->toJson());
} else {
$this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
}
}
}
/**
* Save checkout method
*/
public function saveMethodAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$method = $this->getRequest()->getPost('method');
$result = $this->getOnepage()->saveCheckoutMethod($method);
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
/**
* Save checkout billing address
*/
public function saveBillingAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('billing', array());
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
if (isset($data['email'])) {
$data['email'] = trim($data['email']);
}
$result = $this->getOnepage()->saveBilling($data, $customerAddressId);
if (!isset($result['error'])) {
if ($this->getOnepage()->getQuote()->isVirtual()) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
} elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) {
$result['goto_section'] = 'shipping_method';
$result['update_section'] = array(
'name' => 'shipping-method',
'html' => $this->_getShippingMethodsHtml()
);
$result['allow_sections'] = array('shipping');
$result['duplicateBillingInfo'] = 'true';
} else {
$result['goto_section'] = 'shipping';
}
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
/**
* Shipping address save action
*/
public function saveShippingAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('shipping', array());
$customerAddressId = $this->getRequest()->getPost('shipping_address_id', false);
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
if (!isset($result['error'])) {
$result['goto_section'] = 'shipping_method';
$result['update_section'] = array(
'name' => 'shipping-method',
'html' => $this->_getShippingMethodsHtml()
);
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
/**
* Shipping method save action
*/
public function saveShippingMethodAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('shipping_method', '');
$result = $this->getOnepage()->saveShippingMethod($data);
// $result will contain error data if shipping method is empty
if (!$result) {
Mage::dispatchEvent(
'checkout_controller_onepage_save_shipping_method',
array(
'request' => $this->getRequest(),
'quote' => $this->getOnepage()->getQuote()));
$this->getOnepage()->getQuote()->collectTotals();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
}
$this->getOnepage()->getQuote()->collectTotals()->save();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
/**
* Save payment ajax action
*
* Sets either redirect or a JSON response
*/
public function savePaymentAction()
{
if ($this->_expireAjax()) {
return;
}
try {
if (!$this->getRequest()->isPost()) {
$this->_ajaxRedirectResponse();
return;
}
$data = $this->getRequest()->getPost('payment', array());
$result = $this->getOnepage()->savePayment($data);
// get section and redirect data
$redirectUrl = $this->getOnepage()->getQuote()->getPayment()->getCheckoutRedirectUrl();
if (empty($result['error']) && !$redirectUrl) {
$this->loadLayout('checkout_onepage_review');
$result['goto_section'] = 'review';
$result['update_section'] = array(
'name' => 'review',
'html' => $this->_getReviewHtml()
);
}
if ($redirectUrl) {
$result['redirect'] = $redirectUrl;
}
} catch (Mage_Payment_Exception $e) {
if ($e->getFields()) {
$result['fields'] = $e->getFields();
}
$result['error'] = $e->getMessage();
} catch (Mage_Core_Exception $e) {
$result['error'] = $e->getMessage();
} catch (Exception $e) {
Mage::logException($e);
$result['error'] = $this->__('Unable to set Payment Method.');
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
/**
* Get Order by quoteId
*
* @throws Mage_Payment_Model_Info_Exception
* @return Mage_Sales_Model_Order
*/
protected function _getOrder()
{
if (is_null($this->_order)) {
$this->_order = Mage::getModel('sales/order')->load($this->getOnepage()->getQuote()->getId(), 'quote_id');
if (!$this->_order->getId()) {
throw new Mage_Payment_Model_Info_Exception(Mage::helper('core')->__("Can not create invoice. Order was not found."));
}
}
return $this->_order;
}
/**
* Create invoice
*
* @return Mage_Sales_Model_Order_Invoice
*/
protected function _initInvoice()
{
$items = array();
foreach ($this->_getOrder()->getAllItems() as $item) {
$items[$item->getId()] = $item->getQtyOrdered();
}
/* @var $invoice Mage_Sales_Model_Service_Order */
$invoice = Mage::getModel('sales/service_order', $this->_getOrder())->prepareInvoice($items);
$invoice->setEmailSent(true)->register();
Mage::register('current_invoice', $invoice);
return $invoice;
}
/**
* Create order action
*/
public function saveOrderAction()
{
if (!$this->_validateFormKey()) {
$this->_redirect('*/*');
return;
}
if ($this->_expireAjax()) {
return;
}
$result = array();
try {
$requiredAgreements = Mage::helper('checkout')->getRequiredAgreementIds();
if ($requiredAgreements) {
$postedAgreements = array_keys($this->getRequest()->getPost('agreement', array()));
$diff = array_diff($requiredAgreements, $postedAgreements);
if ($diff) {
$result['success'] = false;
$result['error'] = true;
$result['error_messages'] = $this->__('Please agree to all the terms and conditions before placing the order.');
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
return;
}
}
$data = $this->getRequest()->getPost('payment', array());
if ($data) {
$data['checks'] = Mage_Payment_Model_Method_Abstract::CHECK_USE_CHECKOUT
| Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_COUNTRY
| Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_CURRENCY
| Mage_Payment_Model_Method_Abstract::CHECK_ORDER_TOTAL_MIN_MAX
| Mage_Payment_Model_Method_Abstract::CHECK_ZERO_TOTAL;
$this->getOnepage()->getQuote()->getPayment()->importData($data);
}
$this->getOnepage()->saveOrder();
$redirectUrl = $this->getOnepage()->getCheckout()->getRedirectUrl();
$result['success'] = true;
$result['error'] = false;
} catch (Mage_Payment_Model_Info_Exception $e) {
$message = $e->getMessage();
if (!empty($message)) {
$result['error_messages'] = $message;
}
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
} catch (Mage_Core_Exception $e) {
Mage::logException($e);
Mage::helper('checkout')->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage());
$result['success'] = false;
$result['error'] = true;
$result['error_messages'] = $e->getMessage();
$gotoSection = $this->getOnepage()->getCheckout()->getGotoSection();
if ($gotoSection) {
$result['goto_section'] = $gotoSection;
$this->getOnepage()->getCheckout()->setGotoSection(null);
}
$updateSection = $this->getOnepage()->getCheckout()->getUpdateSection();
if ($updateSection) {
if (isset($this->_sectionUpdateFunctions[$updateSection])) {
$updateSectionFunction = $this->_sectionUpdateFunctions[$updateSection];
$result['update_section'] = array(
'name' => $updateSection,
'html' => $this->$updateSectionFunction()
);
}
$this->getOnepage()->getCheckout()->setUpdateSection(null);
}
} catch (Exception $e) {
Mage::logException($e);
Mage::helper('checkout')->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage());
$result['success'] = false;
$result['error'] = true;
$result['error_messages'] = $this->__('There was an error processing your order. Please contact us or try again later.');
}
$this->getOnepage()->getQuote()->save();
/**
* when there is redirect to third party, we don't want to save order yet.
* we will save the order in return action.
*/
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
/**
* Filtering posted data. Converting localized data if needed
*
* @param array
* @return array
*/
protected function _filterPostData($data)
{
$data = $this->_filterDates($data, array('dob'));
return $data;
}
/**
* Check can page show for unregistered users
*
* @return boolean
*/
protected function _canShowForUnregisteredUsers()
{
return Mage::getSingleton('customer/session')->isLoggedIn()
|| $this->getRequest()->getActionName() == 'index'
|| Mage::helper('checkout')->isAllowedGuestCheckout($this->getOnepage()->getQuote())
|| !Mage::helper('checkout')->isCustomerMustBeLogged();
}
}
Step 4. Now create new backend controller. Suppose we want to override backend controller Mage_Adminhtml_Customer_OnlineController then we will create one controller class in our module in directory app/code/local/ExtendTree/OverrideControllers/adminhtml/customer/ by name OnlineController.php
require_once(Mage::getModuleDir('controllers', 'Mage_Adminhtml') . DS . 'Customer/OnlineController.php');
class ExtendTree_OverrideControllers_Adminhtml_Customer_OnlineController extends Mage_Adminhtml_Customer_OnlineController {
public function indexAction() {
$this->_title($this->__('Customers'))->_title($this->__('Online Customers'));
if ($this->getRequest()->getParam('ajax')) {
$this->_forward('grid');
return;
}
$this->loadLayout();
$this->_setActiveMenu('customer/online');
$this->_addContent($this->getLayout()->createBlock('adminhtml/customer_online', 'customers'));
$this->_addBreadcrumb(Mage::helper('customer')->__('Customers'), Mage::helper('customer')->__('Customers'));
$this->_addBreadcrumb(Mage::helper('customer')->__('Online Customers'), Mage::helper('customer')->__('Online Customers'));
$this->renderLayout();
}
protected function _isAllowed() {
return Mage::getSingleton('admin/session')->isAllowed('customer/online');
}
}
That's it..!! Same way we can override any core frontend or admin controler
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is RewriteClasses Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_RewriteClasses.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/RewriteClasses /etc as name "config.xml"
Step 3. Now create the helper class. Suppose we want to rewrite class Mage_Adminhtml_Helper_Catalog_Product_Edit_Action_Attribute then we will create one helper class in our module in directory app/code/local/ExtendTree/RewriteClasses/Helper/Catalog/Product/Edit/Action/ by name Attribute.php
class ExtendTree_RewriteClasses_Helper_Catalog_Product_Edit_Action_Attribute extends Mage_Adminhtml_Helper_Catalog_Product_Edit_Action_Attribute {
/**
* Selected products for mass-update
*
* @var Mage_Catalog_Model_Entity_Product_Collection
*/
protected $_products;
/**
* Array of same attributes for selected products
*
* @var Mage_Eav_Model_Mysql4_Entity_Attribute_Collection
*/
protected $_attributes;
/**
* Excluded from batch update attribute codes
*
* @var array
*/
protected $_excludedAttributes = array('url_key');
/**
* Return product collection with selected product filter
* Product collection didn't load
*
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
*/
public function getProducts() {
if (is_null($this->_products)) {
$productsIds = $this->getProductIds();
if (!is_array($productsIds)) {
$productsIds = array(0);
}
$this->_products = Mage::getResourceModel('catalog/product_collection')
->setStoreId($this->getSelectedStoreId())
->addIdFilter($productsIds);
}
return $this->_products;
}
/**
* Return array of selected product ids from post or session
*
* @return array|null
*/
public function getProductIds() {
$session = Mage::getSingleton('adminhtml/session');
if ($this->_getRequest()->isPost() && $this->_getRequest()->getActionName() == 'edit') {
$session->setProductIds($this->_getRequest()->getParam('product', null));
}
return $session->getProductIds();
}
/**
* Return selected store id from request
*
* @return integer
*/
public function getSelectedStoreId() {
return (int) $this->_getRequest()->getParam('store', Mage_Core_Model_App::ADMIN_STORE_ID);
}
/**
* Return array of attribute sets by selected products
*
* @return array
*/
public function getProductsSetIds() {
return $this->getProducts()->getSetIds();
}
/**
* Return collection of same attributes for selected products without unique
*
* @return Mage_Eav_Model_Mysql4_Entity_Attribute_Collection
*/
public function getAttributes() {
if (is_null($this->_attributes)) {
$this->_attributes = Mage::getSingleton('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)
->getAttributeCollection()
->addIsNotUniqueFilter()
->setInAllAttributeSetsFilter($this->getProductsSetIds());
if ($this->_excludedAttributes) {
$this->_attributes->addFieldToFilter('attribute_code', array('nin' => $this->_excludedAttributes));
}
// check product type apply to limitation and remove attributes that impossible to change in mass-update
$productTypeIds = $this->getProducts()->getProductTypeIds();
foreach ($this->_attributes as $attribute) {
/* @var $attribute Mage_Catalog_Model_Entity_Attribute */
foreach ($productTypeIds as $productTypeId) {
$applyTo = $attribute->getApplyTo();
if (count($applyTo) > 0 && !in_array($productTypeId, $applyTo)) {
$this->_attributes->removeItemByKey($attribute->getId());
break;
}
}
}
}
return $this->_attributes;
}
/**
* Return product ids that not available for selected store
*
* @deprecated since 1.4.1
* @return array
*/
public function getProductsNotInStoreIds() {
return array();
}
}
Step 4. Now create the model class. Suppose we want to rewrite class Mage_Adminhtml_Model_Customer_Renderer_Region then we will create one model class in our module in directory app/code/local/ExtendTree/RewriteClasses/Model/Customer/Renderer by name Region.php
class ExtendTree_RewriteClasses_Model_Customer_Renderer_Region extends Mage_Adminhtml_Model_Customer_Renderer_Region {
/**
* Country region collections
*
* array(
* [$countryId] => Varien_Data_Collection_Db
* )
*
* @var array
*/
static protected $_regionCollections;
public function render(Varien_Data_Form_Element_Abstract $element) {
$html = '
' . "\n";
$countryId = false;
if ($country = $element->getForm()->getElement('country_id')) {
$countryId = $country->getValue();
}
$regionCollection = false;
if ($countryId) {
if (!isset(self::$_regionCollections[$countryId])) {
self::$_regionCollections[$countryId] = Mage::getModel('directory/country')
->setId($countryId)
->getLoadedRegionCollection()
->toOptionArray();
}
$regionCollection = self::$_regionCollections[$countryId];
}
$regionId = intval($element->getForm()->getElement('region_id')->getValue());
$htmlAttributes = $element->getHtmlAttributes();
foreach ($htmlAttributes as $key => $attribute) {
if ('type' === $attribute) {
unset($htmlAttributes[$key]);
break;
}
}
// Output two elements - for 'region' and for 'region_id'.
// Two elements are needed later upon form post - to properly set data to address model,
// otherwise old value can be left in region_id attribute and saved to DB.
// Depending on country selected either 'region' (input text) or 'region_id' (selectbox) is visible to user
$regionHtmlName = $element->getName();
$regionIdHtmlName = str_replace('region', 'region_id', $regionHtmlName);
$regionHtmlId = $element->getHtmlId();
$regionIdHtmlId = str_replace('region', 'region_id', $regionHtmlId);
if ($regionCollection && count($regionCollection) > 0) {
$elementClass = $element->getClass();
$html.= '
Step 5. Now create the Block class. Suppose we want to rewrite class Mage_Adminhtml_Block_Sales_Order_Grid then we will create one block class in our module in directory app/code/local/ExtendTree/RewriteClasses/Block/Sales/Order by name Grid.php
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is SimpleCrons. Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_SimpleCrons.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/SimpleCrons/etc as name "config.xml"
Step 3. Now next thing is to create model cron inside the directory /app/code/local/ExtendTree/SimpleCrons/Model/ as name "Cron.php"
class ExtendTree_SimpleCrons_Model_Cron {
/*
* This cron will run in one minute.
*/
public function doThisInMinute() {
/**
* Write your custom code here
*/
Mage::log('One minute completed', null, 'FirstCron.log');
}
/*
* This cron will run in two minutea.
*/
public function doThisInTwoMinute() {
/**
* Write your custom code here.
*/
Mage::log('Two minute completed', null, 'SecondCron.log');
}
}
That's it..!! Now as per your server cron setup. It should create a log file in one and two minute interval inside the directory /var/log
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is SimpleObservers. Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_SimpleObservers.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/SimpleObservers/etc as name "config.xml"
Step 3. Now next thing is to create model observer inside the directory /app/code/local/ExtendTree/SimpleObservers/Model/ as name "Observer.php"
class ExtendTree_SimpleObservers_Model_Observer {
/*
* This observer will be called on each page load in frontend.
*/
public function controller_front_init_before($observer) {
Mage::log('Frontend Page loaded', null, 'FirstObserver.log');
}
/*
* This observer will be called on each Customer registeration.
*/
public function customer_register_success($observer) {
Mage::log('Customer registered', null, 'SecondObserver.log');
}
/*
* This observer will be called when visitor add product into cart.
*/
public function sales_quote_add_item($observer) {
Mage::log('One Product Added into Cart', null, 'ThirdObserver.log');
}
/*
* This observer will be called when an order will be placed.
*/
public function sales_order_place_after($observer) {
Mage::log('One order has been placed', null, 'FourthObserver.log');
}
}
That's it..!! Now try to place an order, customer registeration, add product to cart, load frontend. It should create a log file inside the directory /var/log
How to create Magneto frontend (Hello World) module??
Step 1. Create Global Configuration File
Step 2. Create Module Configuration file
Step 3. Create Module Frontend controller
Step 4. Create Module Frontend Layout file
Step 5. Create Module Frontend Template file
Step 1. Each Module should have one Namespace & Module name. Name space could be some company name etc. & module name should be something that represents module functionality. So let suppose Namespace is ExtendTree and Module name is FrontendModule. Now Create Global Configuration File inside root directory /app/etc/modules as name "ExtendTree_FrontendModule.xml"
truelocal
Step 2. Now Create Module Configuration File inside the directory /app/code/local/ExtendTree/FrontendModule/etc as name "config.xml"
Step 3. Now next thing is to create frontend controller inside the directory /app/code/local/ExtendTree/FrontendModule/controllers as name "IndexController.php"
class ExtendTree_Frontendmodule_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
}
Step 4. Now create frontend layout file inside the directory /app/design/frontend/base/default/layout/extendtree as name "frontendmodule.xml"
page/1column.phtml
Step 5. Last step is to create frontend template file inside the directory /app/design/frontend/base/default/template/extendtree as name "frontendmodule.phtml"
__('Hello World..!!')?>
__('I just Created my first magento frontend module.')?>
That's it..!! Now just run your module by URL as "YOUR_SITE_BASE_URL"/helloworld
Step 3. Add a xml file named "module.xml" in directory: magento2/app/code/Extendtree/Helloworld/etc/module.xml
Step 4. Create a registration.php in directory: magento2/app/code/Extendtree/Helloworld/registration.php
Step 5. Now we have to enable our module, we have two ways to do this.
Enable module from config.php (located in directory magento2/app/etc/config.php )
Or First run the command php bin/magento module:status to checked out enable modules in our magento2
To enable module use the command php bin/magento module:enable Extendtree_Helloworld
Step 6. Just after step 5 you have to execute a command bin/magento setup:upgrade
Else our magento site will through an error as Please upgrade your database: Run “bin/magento setup:upgrade” from the Magento root directory.
Step 7. Now our module is fully configured with magento system. To confirm this check in backend :Store->Configuration->Advanced
Step 8. Now create routers for your module. First add routes.xml in directory magento2/app/code/Extendtree/Helloworld/etc/frontend/routes.xml
Step 9. Add controller to handle the requests in directory magento2/app/code/Extendtree/Helloworld/Controller/Test/Helloworld.php
Step 10. Now open URL : http://__BASEURL__/extendtree/test/helloworld
Here is how the URL composed: http://__BASEURL__/route_id/controller_name/front_name
Step 3. Create Observer file & declare method in app/code/Extendtree/Customevent/Observer/Observer.php
namespace Extendtree\Customevent\Observer;
use Magento\Framework\Event\ObserverInterface;
class Observer implements ObserverInterface{
public function __construct() {}
public function execute(\Magento\Framework\Event\Observer $observer){
/**************Do Something****************/
/**************Do Something***************/
}
}