refer: http://www.boostingecommerce.com/10-magento-front-end-development-best-practices
http://www.magentocommerce.com/wiki/
http://www.magentocommerce.com/knowledge-base
http://www.youtube.com/watch?v=r44z5OMHk6A
https://www.ebayopensource.org
http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento-architecture
http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-1-introduction-to-magento#5
http://www.alrayeswebsolutions.com/blog/e-commerce/block-caching-vs-page-caching-on-magento/
http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram
http://www.magereverse.com/index/magento-database-diagram/version/1-7-0-0-beta
http://www.magentocommerce.com/wiki/import-export_and_data_manipulation/removing_products_through_the_database
http://www.magentocommerce.com/wiki/4_-_themes_and_template_customization/0_-_theming_in_magento/package
http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method
http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table#custom_module_with_custom_database_table
http://inchoo.net/
sites:
http://www.geeksucks.com/inspiration/25-awesome-online-store-built-with-magento.htm
$mageFilename = MAGENTO_ROOT . '/app/Mage.php'; require_once $mageFilename; if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) { Mage::setIsDeveloperMode(true); } self::_setConfigModel($options); -> self::$_config = new Mage_Core_Model_Config($options); -->$this->_options = new Mage_Core_Model_Config_Options($sourceData); ---> $this->_data['code_dir'] = $appRoot.DS.'code'; $this->_data['design_dir'] = $appRoot.DS.'design'; $this->_data['etc_dir'] = $appRoot.DS.'etc'; $this->_data['lib_dir'] = $root.DS.'lib'; Mage::run($mageRunCode, $mageRunType); -> self::$_app = new Mage_Core_Model_App(); -> self::$_app->run(...)
(single class)Mage_Core_Model_App->run() -> $this->baseInit($options) --> $this->_initBaseConfig(); --->Varien_Profiler::start('mage::app::init::system_config'); --->$this->_config->loadBase(); ---->$etcDir = $this->getOptions()->getEtcDir(); $files = glob($etcDir.DS.'*.xml'); $this->loadFile(current($files)); if (in_array($etcDir.DS.'local.xml', $files)) { $this->_isLocalConfigLoaded = true; } --->Varien_Profiler::stop('mage::app::init::system_config'); -> $this->_cache->processRequest() $this->getResponse()->sendResponse(); return;
OR
-> $this->_initModules(); --> $this->_config->loadModules --->$this->_loadDeclaredModules(); ----> $moduleFiles = $this->_getDeclaredModuleFiles(); ----->$etcDir = $this->getOptions()->getEtcDir(); $moduleFiles = glob($etcDir . DS . 'modules' . DS . '*.xml'); --->$resourceConfig = sprintf('config.%s.xml', $this->_getResourceConnectionModel('core')); --->$this->loadModulesConfiguration(array('config.xml',$resourceConfig), $this); ----> into etc directory of each module to load all configs only load modules is active --> $this->_config->loadDb(); ---> $dbConf = $this->getResourceModel();(Mage_Core_Model_Resource_Config) ---> $dbConf->loadToXml($this); ----> load tables: core_website, core_store, core_config_data $this->getTable('core/website') $this->getTable('core/store') $this->getMainTable()->get config in database default/design/theme/default->f002 --> $this->_config->saveCache(); -> $this->_initCurrentStore($scopeCode, $scopeType); -->load tables: core_store, core_website, core_store_group (all AS main_table) -> $this->getFrontController()->dispatch();(Mage_Core_Controller_Varien_Front) -->Mage::getModel('core/url_rewrite')->rewrite();(Mage_Core_Model_Url_Rewrite) load tables: core_url_rewrite --->$this->loadByRequestPath($requestCases); ---->$this->_getResource()->loadByRequestPath($this, $path);(Mage_Core_Model_Resource_Url_Rewrite) ----->$this->getMainTable()(Mage_Core_Model_Resource_Db_Abstract->getMainTable()) -->$this->rewrite();(load rewrite from config global/rewrite) -->Mage_Core_Controller_Varien_Router Mage_Core_Controller_Varien_Router_Admin Mage_Core_Controller_Varien_Router_Standard -->$router->match($this->getRequest()) ---->$controllerInstance->dispatch($action); ---->for default page: Mage_Cms_IndexController index
Mage_Cms_IndexController in [app/code/core/Mage/cms/controllers/IndexController.php]
index
[app/code/core/Mage/cms/etc/config.xml]
<global> <models> <cms> <class>Mage_Cms_Model</class> <resourceModel>cms_resource</resourceModel> </cms> <cms_resource> <class>Mage_Cms_Model_Resource</class> <deprecatedNode>cms_mysql4</deprecatedNode> <entities> <page> <table>cms_page</table> </page> <page_store> <table>cms_page_store</table> </page_store> <block> <table>cms_block</table> </block> <block_store> <table>cms_block_store</table> </block_store> </entities> </cms_resource> </models> ......... </global>
Mage_Catalog_CategoryController in app/code/core/Mage/Catalog/controllers/IndexController.php
Function: view
[app/code/core/Mage/Catalog/etc/config.xml]
<global> <models> <catalog> <class>Mage_Catalog_Model</class> <resourceModel>catalog_resource</resourceModel> </catalog> <catalog_resource> <class>Mage_Catalog_Model_Resource</class> <deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode> <entities> <product> <table>catalog_product_entity</table> </product> <category> <table>catalog_category_entity</table> </category> <category_product> <table>catalog_category_product</table> </category_product> <category_product_index> <table>catalog_category_product_index</table> </category_product_index> <compare_item> <table>catalog_compare_item</table> </compare_item> <product_website> <table>catalog_product_website</table> </product_website> ......................... </entities> </catalog_resource> </models>
Mage::getModel('catalog/product'); -> catalog -> Mage_Catalog_Model product -> class Mage_Catalog_Model_Product Mage::helper('catalog/product'); -> catalog -> Mage_Catalog_helper product -> class Mage_Catalog_helper_Product
…………………….
[Paramater/Value - id/25]
<frontend> <routers> <catalog> <use>standard</use> <args> <module>Mage_Catalog</module> <frontName>catalog</frontName> </args> </catalog> </routers> ..............................
⇒ router:
- view detail
app\code\core\Mage\Customer\Helper\Data.php
<customer_account_index translate="label"> <label>Customer My Account Dashboard</label> <update handle="customer_account"/> <!-- Mage_Customer --> <reference name="root"> <action method="setTemplate"><template>page/2columns-left.phtml</template></action> </reference> <reference name="my.account.wrapper"> <block type="customer/account_dashboard" name="customer_account_dashboard" template="customer/account/dashboard.phtml"> <block type="customer/account_dashboard_hello" name="customer_account_dashboard_hello" as="hello" template="customer/account/dashboard/hello.phtml"/> <block type="core/template" name="customer_account_dashboard_top" as="top" /> <block type="customer/account_dashboard_info" name="customer_account_dashboard_info" as="info" template="customer/account/dashboard/info.phtml"/> <block type="customer/account_dashboard_newsletter" name="customer_account_dashboard_newsletter" as="newsletter" template="customer/account/dashboard/newsletter.phtml"/> <block type="customer/account_dashboard_address" name="customer_account_dashboard_address" as="address" template="customer/account/dashboard/address.phtml"/> </block> </reference> </customer_account_index>
<customer_account_login translate="label"> <label>Customer Account Login Form</label> <!-- Mage_Customer --> <remove name="right"/> <remove name="left"/> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> </reference> <reference name="content"> <block type="customer/form_login" name="customer_form_login" template="customer/form/login.phtml" /> </reference> </customer_account_login>
To enable or disable 1 module and layout ⇒ Change config in app/etc/modules/*.xml
Default layout, loads most of the pages
<layout version="0.1.0"> <!-- Default layout, loads most of the pages --> <default translate="label" module="page"> <label>All Pages</label> <block type="page/html" name="root" output="toHtml" template="page/2columns-left.phtml"> <block type="page/html_head" name="head" as="head"> <action method="addJs"><script>prototype/prototype.js</script></action> <action method="addJs"><script>lib/ccard.js</script></action> ......................................................... <block type="page/js_cookie" name="js_cookies" template="page/js/cookie.phtml"/> ......................................................... <action method="addCss"><stylesheet>css/styles.css</stylesheet></action> ......................................................... <action method="addItem"><type>skin_js</type><name>js/ie6.js</name><params/><if>lt IE 7</if></action> </block> <block type="core/text_list" name="after_body_start" as="after_body_start" translate="label"> <label>Page Top</label> </block> <block type="page/html_notices" name="global_notices" as="global_notices" template="page/html/notices.phtml" /> <block type="page/html_header" name="header" as="header"> <block type="checkout/cart_sidebar" name="cart_header" template="checkout/cart/sidebar_header.phtml"> <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/sidebar/default.phtml</template></action> <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/sidebar/default.phtml</template></action> <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/sidebar/default.phtml</template></action> <block type="core/text_list" name="cart_sidebar.extra_actions" as="extra_actions" translate="label" module="checkout"> <label>Shopping Cart Sidebar Extra Actions</label> </block> </block> <block type="page/template_links" name="top.links" as="topLinks"/> <block type="page/template_links" name="top.links.left" as="topLinksLeft"/> <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/> <block type="directory/currency" name="currency" template="directory/currency.phtml"/> <block type="core/text_list" name="top.menu" as="topMenu" translate="label"> <label>Navigation Bar</label> <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/> </block> <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label"> <label>Page Header</label> <action method="setElementClass"><value>top-container</value></action> </block> </block> <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs"/> <block type="core/text_list" name="left" as="left" translate="label"> <label>Left Column</label> </block> <block type="core/messages" name="global_messages" as="global_messages"/> <block type="core/messages" name="messages" as="messages"/> <block type="core/text_list" name="content" as="content" translate="label"> <label>Main Content Area</label> </block> <block type="core/text_list" name="right" as="right" translate="label"> <label>Right Column</label> </block> <block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"> <block type="cms/block" name="footer_list"> <action method="setBlockId"><block_id>footer_list</block_id></action> </block> <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label"> <label>Page Footer</label> <action method="setElementClass"><value>bottom-container</value></action> </block> <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/> <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/> </block> <block type="core/text_list" name="before_body_end" as="before_body_end" translate="label"> <label>Page Bottom</label> </block> </block> <block type="core/profiler" output="toHtml" name="core_profiler"/> </default> <print translate="label" module="page"> <label>All Pages (Print Version)</label> <!-- Mage_Page --> <block type="page/html" name="root" output="toHtml" template="page/print.phtml"> <block type="page/html_head" name="head" as="head"> <action method="addJs"><script>prototype/prototype.js</script></action> <action method="addCss"><stylesheet>css/print.css</stylesheet><params>media="print"</params></action> ......................................................... <action method="addItem"><type>js</type><name>lib/ds-sleight.js</name><params/><if>lt IE 7</if></action> <action method="addItem"><type>skin_js</type><name>js/ie6.js</name><params/><if>lt IE 7</if></action> </block> <block type="core/text_list" name="content" as="content" translate="label"> <label>Main Content Area</label> </block> </block> </print> <!-- Custom page layout handles --> <page_empty translate="label"> <label>All Empty Layout Pages</label> <reference name="root"> <action method="setTemplate"><template>page/empty.phtml</template></action> <!-- Mark root page block that template is applied --> <action method="setIsHandle"><applied>1</applied></action> </reference> </page_empty> <page_one_column translate="label"> <label>All One-Column Layout Pages</label> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> <!-- Mark root page block that template is applied --> <action method="setIsHandle"><applied>1</applied></action> </reference> </page_one_column> <page_two_columns_left translate="label"> <label>All Two-Column Layout Pages (Left Column)</label> <reference name="root"> <action method="setTemplate"><template>page/2columns-left.phtml</template></action> <!-- Mark root page block that template is applied --> <action method="setIsHandle"><applied>1</applied></action> </reference> </page_two_columns_left> <page_two_columns_right translate="label"> <label>All Two-Column Layout Pages (Right Column)</label> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> <!-- Mark root page block that template is applied --> <action method="setIsHandle"><applied>1</applied></action> </reference> </page_two_columns_right> <page_three_columns translate="label"> <label>All Three-Column Layout Pages</label> <reference name="root"> <action method="setTemplate"><template>page/3columns.phtml</template></action> <!-- Mark root page block that template is applied --> <action method="setIsHandle"><applied>1</applied></action> </reference> </page_three_columns> </layout>
one_column, two_columns_left, two_columns_right, three_columns
SELECT `cms_page`.* FROM `cms_page` INNER JOIN `cms_page_store` ON cms_page.page_id = cms_page_store.page_id WHERE (`cms_page`.`identifier`='home') AND (is_active = 1) AND (cms_page_store.store_id IN (0, 1)) ORDER BY `cms_page_store`.`store_id` DESC LIMIT 1
[catalog.xml]
<catalog_product_view translate="label"> <label>Catalog Product View (Any)</label> <!-- Mage_Catalog --> <reference name="root"> <action method="setTemplate"><template>page/2columns-right.phtml</template></action> </reference> .....
<default> <block name="formkey" type="core/template" template="core/formkey.phtml" /> </default>
<default> <reference name="footer"> <block type="cms/block" name="cms_footer_links" before="footer_links"> <!-- The content of this block is taken from the database by its block_id. You can manage it in admin CMS -> Static Blocks --> <action method="setBlockId"><block_id>footer_links</block_id></action> </block> </reference> <cms_index_index translate="label"> <label>CMS Home Page</label> </cms_index_index> <cms_index_defaultindex> <remove name="right"/> <remove name="left"/> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> </reference> <reference name="content"> <block type="core/template" name="default_home_page" template="cms/default/home.phtml"/> </reference> </cms_index_defaultindex> </default>
<default> <!-- Mage_Catalog --> <reference name="left"> <block type="core/template" name="left.permanent.callout" template="callouts/left_col.phtml"> <action method="setImgSrc"><src>images/media/col_left_callout.jpg</src></action> <action method="setImgAlt" translate="alt" module="catalog"><alt>Our customer service is available 24/7. Call us at (555) 555-0123.</alt></action> <action method="setLinkUrl"><url>checkout/cart</url></action> </block> </reference> <reference name="right"> ............................. </reference> <reference name="footer_links"> ............................ </reference> <block type="catalog/product_price_template" name="catalog_product_price_template" /> </default>
Edit in Admin: Quan ly CMS → Page → Home Edit layout and page config in Design
<reference name="head"> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.fancybox-1.3.4.js</name></action> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.easing-1.3.pack.js</name></action> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.mousewheel-3.0.6.pack.js</name></action> <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action> <action method="addCss"><stylesheet>js/fancybox/jquery.fancybox-1.3.4.css</stylesheet></action> </reference> <reference name="content"> <block type="catalog/product_list_random" template="catalog/product/list.phtml"> <action method="setNumProducts"><count>12</count></action> </block> </reference> <reference name="right"> <action method="unsetChild"><alias>right.reports.product.viewed</alias></action> <action method="unsetChild"><alias>right.reports.product.compared</alias></action> </reference> <reference name="top_slider"> <block type="cms/block" name="showcase"> <action method="setBlockId"> <block_id>showcase</block_id> </action> </block> </reference>
Example config for module ajax:
<catalog_product_view> <reference name="head"> <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action> <action method="addItem"><type>skin_js</type><name>js/script.js</name></action> </reference> <reference name='product.info'> <action method='setTemplate'><template>ajax/catalog/product/view.phtml</template></action> </reference> <reference name='product.info.addtocart'> <action method='setTemplate'><template>ajax/catalog/product/view/addtocart.phtml</template></action> </reference> </catalog_product_view> <catalog_category_default> <reference name="head"> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.fancybox-1.3.4.js</name></action> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.easing-1.3.pack.js</name></action> <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.mousewheel-3.0.6.pack.js</name></action> <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action> <action method="addCss"><stylesheet>js/fancybox/jquery.fancybox-1.3.4.css</stylesheet></action> </reference> <reference name='product_list'> <action method='setTemplate'><template>ajax/catalog/product/view/list.phtml</template></action> </reference> </catalog_category_default>
⇒ This module update below pages:
<default> ................ <catalog_product_view translate="label">...</catalog_product_view> ................ </default>
<default> ................ <catalog_category_default translate="label">...</catalog_category_default> ................ </default>
<reference name="left"> <block type="core/template" name="left.permanent.callout" template="callouts/left_col.phtml"> <action method="setBlockId"><block_id>callouts_left_col</block_id></action> .......................................
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('callouts_left_col')->toHtml() ?>
<div class="block block-banner"> <div class="block-title"><strong><span>Liên hệ đặt hàng</span></strong></div> <div class="block-content"><ol class="hotline"> <li style="text-align: left;"><strong>Phone: </strong><span style="color: #888888; font-size: small;">0903 245 543</span></li> <li style="text-align: left;"><strong>Địa chỉ:</strong> <span style="font-size: small;"><span style="color: #b2b2b2;"><span style="color: #b2b2b2;">436/59/37 Cách Mạng tháng 8 , Phường 11, Quận 3, TPHCM </span></span></span></li> <li><span style="font-size: medium;"><a href="https://maps.google.com/maps/ms?msid=202899200564903042773.0004c3609fb3a34b78a53&msa=0&ie=UTF8&ll=10.784228,106.67098&spn=0.002682,0.005284&t=m&source=embed" target="_blank">Xem bản đồ đường đi</a></span></li> <li class="icon-address" style="text-align: left;"><strong>Email: </strong><span style="color: #b2b2b2; font-size: small;">[email protected]</span></li> </ol></div> </div> <div class="block block-banner"> <div class="block-title"><strong><span>Giờ mở cửa</span></strong></div> <div class="block-content"><ol class="hotline"> <li style="text-align: left;"><strong>Thứ 2 đến thứ 6:<span style="font-size: small;"><span style="color: #b2b2b2;">9:00-20:00</span></span></strong></li> <li style="text-align: left;"><strong>Thứ 7,CN : </strong><span style="color: #b2b2b2; font-size: small;">vui lòng gọi điện thoại trước khi đến</span></li> </ol></div> </div>
<script id="cid0020000087513494433" data-cfasync="false" async src="//st.chatango.com/js/gz/emb.js" style="width: 210px;height: 350px;">{"handle":"shopbabiesvn","arch":"js","styles":{"b":100,"c":"f97789","d":"006699","e":"fdfdfd","h":"f2f2f2","l":"9ddbf6","m":"FFFFFF","p":"10","q":"9ddbf6","r":100}}</script>
<?php if($toplinks && is_array($toplinks)): ?> <ul class="links"> <?php echo $this->getChildHtml() ?> <?php foreach($toplinks as $_toplink): ?> <li<?php if($_toplink['first']||$_toplink['last']): ?> class="<?php if($_toplink['first']): ?>first<?php endif; ?><?php if($_toplink['last']): ?> last<?php endif; ?>"<?php endif; ?> <?php echo $_toplink['liParams'] ?>><?php echo $_toplink['beforeText'] ?><a <?php echo $_toplink['aParams'] ?>><?php echo $_toplink['innerText'] ?></a><?php echo $_toplink['afterText'] ?></li> <?php endforeach; ?> </ul>
<layout version="0.1.0"> <!-- Default layout, loads most of the pages --> <default> <!-- Mage_Customer --> <reference name="top.links"> <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><urlParams/><position>10</position></action> </reference> </default> <!-- Load this update on every page when customer is logged in --> <customer_logged_in> <reference name="top.links"> <action method="addLink" translate="label title" module="customer"><label>Log Out</label><url helper="customer/getLogoutUrl"/><title>Log Out</title><prepare/><urlParams/><position>100</position></action> </reference> </customer_logged_in> <!-- Load this update on every page when customer is logged out --> <customer_logged_out> <!---<reference name="right"> <block type="customer/form_login" name="customer_form_mini_login" before="-" template="customer/form/mini.login.phtml"/> </reference>--> <reference name="top.links"> <action method="addLink" translate="label title" module="customer"><label>Log In</label><url helper="customer/getLoginUrl"/><title>Log In</title><prepare/><urlParams/><position>100</position></action> </reference> <remove name="reorder"></remove> </customer_logged_out>
SELECT `core_url_rewrite`.* FROM `core_url_rewrite` WHERE (request_path IN ('/', '')) AND (store_id IN(0, 1)) -> empty DATA SELECT `main_table`.* FROM `design_change` AS `main_table` WHERE (store_id = '1') AND (date_from <= '2012-05-25 13:49:56' OR date_from IS NULL) AND (date_to >= '2012-05-25 13:49:56' OR date_to IS NULL) -> empty DATA SELECT `cms_page`.* FROM `cms_page` INNER JOIN `cms_page_store` ON cms_page.page_id = cms_page_store.page_id WHERE (`cms_page`.`identifier`='home') AND (is_active = 1) AND (cms_page_store.store_id IN (0, 1)) ORDER BY `cms_page_store`.`store_id` DESC LIMIT 1 (2,"Home page","two_columns_right") SELECT `cms_page_store`.`store_id` FROM `cms_page_store` WHERE (page_id = 2) (1|2|3) SELECT `eav_entity_type`.* FROM `eav_entity_type` WHERE (`eav_entity_type`.`entity_type_code`='catalog_category') 9 catalog_category catalog/category catalog/resource_eav_attribute catalog/category SELECT `catalog_category_entity`.`entity_id` FROM `catalog_category_entity` WHERE (entity_id = '2') (2) SELECT `catalog_category_entity`.* FROM `catalog_category_entity` WHERE (`catalog_category_entity`.`entity_id` = '2') SELECT `catalog_category_entity`.* FROM `catalog_category_entity` WHERE (`catalog_category_entity`.`path` LIKE '1/2/%') ORDER BY `catalog_category_entity`.`position` ASC
catalog_category_entity_varchar (`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) (1,9,111,0,3,'Root Catalog'),(2,9,118,0,3,'PRODUCTS'),(3,9,479,0,3,'root-catalog'),(4,9,111,0,4,'Shirts'),(5,9,118,0,4,'PRODUCTS'),(6,9,479,0,4,'shirts'),(7,9,111,0,5,'Shoes'),(8,9,118,0,5,'PRODUCTS'),(9,9,479,0,5,'shoes'),(10,9,111,0,8,'Cell Phones')
catalog_product_entity(entity_id,entity_type_id,attribute_set_id,type_id,sku) catalog_product_index_price(entity_id,customer_group_id,website_id,tax_class_id,price,final_price,min_price,max_price) 16 0 1 2 149.99 149.99 149.99 149.99 16 1 1 2 149.99 149.99 149.99 149.99
customer_entity(entity_id,email,is_active) 1, anh.vochi@gmail.com customer_entity_varchar(attribute_id,entity_id,VALUE) 5 1 Anh 7 1 Vo Chi 12 1 2646fdab0814a50d2aca365bcfa3dd83:p2 3 1 DEFAULT Store VIEW
[Mage_Core_Model_App]
const XML_PATH_SKIP_PROCESS_MODULES_UPDATES = 'global/skip_process_modules_updates'; return (bool)(string)$this->_config->getNode(self::XML_PATH_SKIP_PROCESS_MODULES_UPDATES);
[local.xml]
<global> ..... <skip_process_modules_updates>true</skip_process_modules_updates> ....
Refer:
http://ultimento.com/wiki/blog/speed-up-magento-with-these-simple-admin-settings/
http://www.magentocommerce.com/knowledge-base/entry/understanding-magento-scalability-and-performance
http://www.magentocommerce.com/blog/category/performance/
http://www.magentocommerce.com/wiki/groups/168/optimising_your_web_stack_performance_for_magento
Cache some data don't change:
Debug cache in: app\code\core\Mage\Core\Model\Cache.php function load
Refer:
http://www.jewelsboutique.com/news/systems/magento-performance-optimization-continued-custom-block-cache-in-magento.html
before getting block output Magento will dispatch an Event (core_block_abstract_to_html_before), this is a good place to inject our cache setting for any block we want rather than editing each block independently
.............. <events> <core_block_abstract_to_html_before> <observers> <cacheBlock> <type>singleton</type> <class>core/blockcache_observer</class> <method>customBlockCache</method> </cacheBlock> </observers> </core_block_abstract_to_html_before> </events> </frontend>
<?php class Mage_Core_Model_Blockcache_Observer{ //you can make this to be configurable at Admin Panel const CUSTOM_CACHE_LIFETIME = 9999999999; //the non-CMS Block you want to cache private $cacheableBlocks = array('Mage_Page_Block_Html_Topmenu', 'Mage_Page_Block_Html_Footer'); public function customBlockCache(Varien_Event_Observer $observer){ try { $event = $observer->getEvent(); $block = $event->getBlock(); $class = get_class($block); //Zend_Debug::dump($class); if (('Mage_Cms_Block_Block' == $class) && $block->getBlockId()) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'cms_block_' . $block->getBlockId()); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $block->getBlockId())); } elseif (('Mage_Cms_Block_Page' == $class) && $block->getPage()->getIdentifier()) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'cms_page_' . $block->getPage()->getIdentifier()); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $block->getPage()->getIdentifier())); } elseif (in_array($class, $this->cacheableBlocks)) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'block_' . $class); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $class)); } } catch (Exception $e) { Mage::logException(e); } } }
<?php class Mage_Core_Model_Blockcache_Observer{ //you can make this to be configurable at Admin Panel const CUSTOM_CACHE_LIFETIME = 9999999999; //the non-CMS Block you want to cache private $cacheableBlocks = array('Mage_Page_Block_Html_Topmenu', 'Mage_Page_Block_Html_Footer'); public function customBlockCache(Varien_Event_Observer $observer){ try { $event = $observer->getEvent(); $block = $event->getBlock(); $class = get_class($block); if (('Mage_Cms_Block_Block' == $class) && $block->getBlockId()) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'cms_block_' . $block->getBlockId()); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $block->getBlockId())); } elseif (('Mage_Cms_Block_Page' == $class) && $block->getPage()->getIdentifier()) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'cms_page_' . $block->getPage()->getIdentifier()); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $block->getPage()->getIdentifier())); } elseif (('Mage_Catalog_Block_Category_View' == $class) && $block->getCurrentCategory()->getId()) { $request = $block->getRequest(); $order = $request->getParam('order'); $page = $request->getParam('p'); $limit = $request->getParam('limit'); $dir = $request->getParam('dir'); $mode = $request->getParam('mode'); $cache_key = $class . '_' . $block->getCurrentCategory()->getId(); $cache_tags = array(Mage_Catalog_Model_Category::CACHE_TAG,$block->getCurrentCategory()->getId()); if(!empty($order)) { $cache_key = $cache_key . '_' . $order; $cache_tags[] = $order; } if(!empty($page)) { $cache_key = $cache_key . '_page' . $page; $cache_tags[] = '_page' .$page; } if(!empty($limit)) { $cache_key = $cache_key . '_limit' . $limit; $cache_tags[] = '_limit' . $limit; } if(!empty($dir)) { $cache_key = $cache_key . '_' . $dir; $cache_tags[] = $dir; } if(!empty($mode)) { $cache_key = $cache_key . '_' . $mode; $cache_tags[] = $mode; } $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', $cache_key); $block->setData('cache_tags', $cache_tags); } elseif (('Mage_Catalog_Block_Product_View' == $class) && $block->getProduct()->getId()) { $cache_key = $class . '_' . $block->getProduct()->getId(); $cache_tags = array(Mage_Catalog_Model_Product::CACHE_TAG,$block->getProduct()->getId()); $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', $cache_key); $block->setData('cache_tags', $cache_tags); } elseif (('Mage_Catalog_Block_Product_List_Related' == $class) && Mage::registry('product')->getId()) { $cache_key = $class . '_' . Mage::registry('product')->getId(); $cache_tags = array(Mage_Catalog_Model_Product::CACHE_TAG, Mage::registry('product')->getId()); $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', $cache_key); $block->setData('cache_tags', $cache_tags); } elseif (in_array($class, $this->cacheableBlocks)) { $block->setData('cache_lifetime', self::CUSTOM_CACHE_LIFETIME); $block->setData('cache_key', 'block_' . $class); $block->setData('cache_tags', array(Mage_Core_Model_Store::CACHE_TAG, $class)); } else { //Zend_Debug::dump($class); } } catch (Exception $e) { Mage::logException(e); } } }
php.exe compiler help
php.exe compiler compile
[app\code\core\Mage\Core\Model\Config\Options.php]
$this->_data['app_dir'] = $appRoot; $this->_data['base_dir'] = $root; $this->_data['code_dir'] = $appRoot.DS.'code'; $this->_data['design_dir'] = $appRoot.DS.'design'; $this->_data['etc_dir'] = $appRoot.DS.'etc'; $this->_data['lib_dir'] = $root.DS.'lib'; $this->_data['locale_dir'] = $appRoot.DS.'locale'; $this->_data['media_dir'] = $root.DS.'media'; $this->_data['skin_dir'] = $root.DS.'skin'; $this->_data['var_dir'] = $this->getVarDir(); $this->_data['tmp_dir'] = $this->_data['var_dir'].DS.'tmp'; $this->_data['cache_dir'] = $this->_data['var_dir'].DS.'cache'; $this->_data['log_dir'] = $this->_data['var_dir'].DS.'log'; $this->_data['session_dir'] = $this->_data['var_dir'].DS.'session'; $this->_data['upload_dir'] = $this->_data['media_dir'].DS.'upload'; $this->_data['export_dir'] = $this->_data['var_dir'].DS.'export';
[config.xml]
<entities> <config_data> <table>core_config_data</table> </config_data> <website> <table>core_website</table> </website> <store> <table>core_store</table> </store> <resource> <table>core_resource</table> </resource> <cache> <table>core_cache</table> </cache> <cache_tag> <table>core_cache_tag</table> </cache_tag> <cache_option> <table>core_cache_option</table> </cache_option> </entities> <filesystem> <base>{{root_dir}}</base> <app>{{root_dir}}/app</app> <codes>{{app_dir}}/code</codes> <design>{{app_dir}}/design</design> <locale>{{app_dir}}/locale</locale> <etc>{{app_dir}}/etc</etc> <media>{{root_dir}}/media</media> <upload>{{root_dir}}/media/upload</upload> <skin>{{root_dir}}/skin</skin> <var>{{var_dir}}</var> <cache>{{var_dir}}/cache</cache> <session>{{var_dir}}/session</session> <tmp>{{var_dir}}/tmp</tmp> <pear>{{var_dir}}/pear</pear> <export>{{var_dir}}/export</export> </filesystem>
UPDATE core_config_data SET VALUE = 'http://shop.babies.vn/' WHERE path IN ('web/unsecure/base_url', 'web/secure/base_url','admin/dashboard/enable_charts');
UPDATE core_config_data SET VALUE='0' WHERE path IN ('web/secure/use_in_frontend', 'web/secure/use_in_adminhtml');
rm -rf /data/www/babyshopvnupdate/var/cache/*
Config Debug Mode:
$_SERVER['MAGE_IS_DEVELOPER_MODE'] = True; ini_set('display_errors', '1');
Code to log Magento Information:
$info = __FILE__ . ': ' . __LINE__ . "\n"; $info.= 'Block "catalog.topnav" not found'; Mage::log($info, null, 'wp_custommenu.log');
Check the error log in files below:
app\design\frontend\base\default\template\page\ 1column.phtml, 2columns-right.phtml, 2columns-left.phtml, 3columns.phtml
base: app\design\frontend\base\default\ update: app\design\frontend\default\f002\
directory_country directory_country_region SELECT `main_table`.*, `rname`.`name` FROM `directory_country_region` AS `main_table` LEFT JOIN `directory_country_region_name` AS `rname` ON main_table.region_id = rname.region_id AND rname.locale = 'vi_VN' WHERE (main_table.country_id IN('AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'ST', 'SV', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW')) ORDER BY name ASC, default_name ASC
SELECT `count_table`.`category_id`, COUNT(DISTINCT count_table.product_id) AS `product_count` FROM `catalog_product_entity` AS `e` INNER JOIN `catalogsearch_result` AS `search_result` ON search_result.product_id=e.entity_id AND search_result.query_id='29' INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = '3' INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id='1' AND cat_index.visibility IN(3, 4) AND cat_index.category_id='3' INNER JOIN `catalog_category_product_index` AS `count_table` ON count_table.product_id = e.entity_id WHERE (count_table.store_id = 1) AND (count_table.category_id IN ('10', '18', '8', '15', '12')) GROUP BY `count_table`.`category_id`
→ re-index data to fix bug search product:
public function getCopyright() { if (!$this->_copyright) { $this->_copyright = Mage::getStoreConfig('design/footer/copyright'); } return $this->_copyright; }
[page.xml]
<block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"> <block type="page/html_wrapper" name="bottom.container" as="bottomContainer" translate="label"> <label>Page Footer</label> <action method="setElementClass"><value>bottom-container</value></action> </block> <block type="page/switch" name="store_switcher" as="store_switcher" template="page/switch/stores.phtml"/> <block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml"/> </block>
⇒ config childhtml of footer - config get information of footer [footer.xml]
<?php echo $this->getChildHtml() ?> <address><?php echo $this->getCopyright() ?></address>
system/configuration/GoogleAPI
protected $_defaultColumnCount = 3;
<action method="setColumnCount"><columns>3</columns></action>
<reference name="content"> <block type="catalog/product_list_random" template="catalog/product/list.phtml"> <action method="setNumProducts"><count>12</count></action> </block> </reference>
<reference name="content"> <block type="catalog/product_new" template="catalog/product/new.phtml"> </block> </reference>
Go to “Nhóm Sản Phẩm” → Random Related Products to edit “Number of items to show”
UPDATE catalog_category_entity_int SET VALUE = 1 WHERE attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'is_anchor' LIMIT 1);
Research Manufacture database
SELECT attribute_id, entity_type_id, attribute_code FROM eav_attribute WHERE attribute_code="manufacture"; 137 4 manufacture SELECT option_id, VALUE FROM eav_attribute_option_value WHERE VALUE LIKE "%KIM%" 40 Kim Home 40 Kim Home 40 Kim Home SELECT entity_id,NAME FROM catalog_product_flat_1 WHERE NAME LIKE "%KIM%"; 1960 GỐI LÕM CARA KIM HOME 1955 GỐI ÔM CARA CHO BÉ 60x25cm KIM HOME INSERT INTO `catalog_product_entity_int` (`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES ('4', '137', '0', '1960', '40') ON DUPLICATE KEY UPDATE `value` = VALUES(`value`)--only chage parameter 40(manufacture Kim Home) and 1960(Product Name) --list all products have manufacture with name like "%KIM HOME%" SELECT catp.entity_type_id, catp.attribute_id, catp.entity_id, catflat.name, catp.value FROM `catalog_product_entity_int` AS catp JOIN catalog_product_flat_1 AS catflat ON catp.`entity_type_id` = 4 AND catp.`attribute_id`=137 AND catp.`entity_id` = catflat.`entity_id` AND catflat.name LIKE "%KIM HOME%"; UPDATE `catalog_product_entity_int` AS catp, catalog_product_flat_1 AS catflat SET catp.value = 40 WHERE catp.`entity_type_id` = 4 AND catp.`attribute_id`=137 AND catp.`entity_id` = catflat.`entity_id` AND catflat.name LIKE "%KIM HOME%";
Update Manufacture from database:
SELECT option_id, VALUE FROM eav_attribute_option_value WHERE VALUE LIKE "%KIM%" 40 Kim Home 40 Kim Home 40 Kim Home
⇒ option_id = 40
UPDATE `catalog_product_entity_int` AS catp, catalog_product_flat_1 AS catflat SET catp.value = 40 WHERE catp.`entity_type_id` = 4 AND catp.`attribute_id`=137 AND catp.`entity_id` = catflat.`entity_id` AND catflat.name LIKE "%KIM HOME%";
SELECT catp.entity_type_id, catp.attribute_id, catp.entity_id, catflat.name, catp.value FROM `catalog_product_entity_int` AS catp JOIN catalog_product_flat_1 AS catflat ON catp.`entity_type_id` = 4 AND catp.`attribute_id`=137 AND catp.`entity_id` = catflat.`entity_id` AND catflat.name LIKE "%KIM HOME%";
Go to Admin panel → System → Magento Connect → Magento Connect Manager:
mysqldump -u'root' -p babyshopvn > babyshopvnlatest.sql mysqladmin -p create babyshopvnupdate mysql -f --default-character-set=utf8 -u'root' -p babyshopvnupdate < babyshopvnlatest.sql
<VirtualHost *:80> ServerName shoptest.babies.vn DocumentRoot "/data/www/babyshopvnupdate" SetEnv MAGE_IS_DEVELOPER_MODE "false" <Directory /data/www/babyshopvnupdate> Options Indexes FollowSymLinks MultiViews AllowOverride all Order Deny,Allow Allow from all </Directory> ErrorLog logs/babyshopvnupdate-error_log CustomLog logs/babyshopvnupdate-access_log common </VirtualHost>
mysql -u'root' -p babyshopvnupdate <<< "update core_config_data set value = 'http://shop.babies.vn/' where path in ('web/unsecure/base_url', 'web/secure/base_url','admin/dashboard/enable_charts');"
rm -rf /data/www/babyshopvnupdate/var/cache/*
Magento relies a lot on its cache tools to get the best out of a website. This is due to several reasons, most notably the sheer amount of stylesheets and javascript libraries loading into the page, and a complex XML layout that involves a lot of querying behind the scenes.
Ideally each page on the website should only query and load in the appropriate content and libraries that the page needs. For example, a generic page might not need to load in a jQuery library or a contact form stylesheet.
Although Magento is one of the leading ecommerce frameworks, it has a fairly poor CMS and its limited fields prevent full customisable product and page templates. For instance, if a client wanted an editable carousel on the website homepage a WYSIWYG or an expensive yet ineffective module will be used.
I am a firm believer that all content on a CMS driven website should be editable via the CMS, from the sites logo to the navigation.
Setting up and building a Magento website takes a lot of time and effort due to the complex XML layout system which requires multiple file changes to determine the appearance of a page. A change request to alter the websites appearance takes too much time which is ineffective if a bug fix is needed.
SELECT log_visitor.visitor_id,http_referer,last_url_id,last_visit_at,INET_NTOA(remote_addr) FROM log_visitor LEFT JOIN log_visitor_info AS info ON info.visitor_id=log_visitor.visitor_id WHERE last_visit_at >= '2015-03-20' AND http_referer IS NOT NULL; SELECT log_visitor.visitor_id,last_url_id,last_visit_at,COUNT(*),INET_NTOA(remote_addr) AS addr FROM log_visitor LEFT JOIN log_visitor_info AS info ON info.visitor_id=log_visitor.visitor_id WHERE last_visit_at LIKE '2015-03-20%' GROUP BY addr; SELECT log_visitor.visitor_id,http_referer,last_url_id,last_visit_at,INET_NTOA(remote_addr) FROM log_visitor LEFT JOIN log_visitor_info AS info ON info.visitor_id=log_visitor.visitor_id WHERE last_visit_at LIKE '2015-03-20%' AND INET_NTOA(remote_addr)='115.73.43.228';
Basic show products in products cache of magento:
SELECT entity_id,name,price,special_price,url_path FROM catalog_product_flat_1 WHERE price > 0 ORDER BY name;
⇒ Filter all Group Products
mysql --default-character-set=utf8 -uroot -p babyshopvn <<< "SELECT entity_id,name,price,special_price,url_path,thumbnail FROM catalog_product_flat_1 where price > 0 ORDER BY entity_id;" > /tmp/products.txt
=CONCATENATE("select short_description from catalog_product_flat_1 where entity_id = ",$C4,";") =CONCATENATE("mysql --default-character-set=utf8 -uroot -p babyshopvn <<< '",$I4,"' > ",$C4,".txt;")
And copy all commands to bash file and run it
Show products with barcode:
SELECT attribute_id, entity_type_id, attribute_code, frontend_input, frontend_label FROM eav_attribute WHERE attribute_code='barcode';
output:
+--------------+----------------+----------------+----------------+----------------+ | attribute_id | entity_type_id | attribute_code | frontend_input | frontend_label | +--------------+----------------+----------------+----------------+----------------+ | 139 | 4 | barcode | text | barcode | +--------------+----------------+----------------+----------------+----------------+
attribute_id = 139
SELECT * FROM catalog_product_entity_varchar WHERE attribute_id=139 AND VALUE IS NOT NULL; +----------+----------------+--------------+----------+-----------+---------------+ | value_id | entity_type_id | attribute_id | store_id | entity_id | VALUE | +----------+----------------+--------------+----------+-----------+---------------+ | 53852 | 4 | 139 | 0 | 718 | 8851989060422 | | 53860 | 4 | 139 | 0 | 155 | 8936006854205 | | 53868 | 4 | 139 | 0 | 157 | 8938500402357 | | 53876 | 4 | 139 | 0 | 713 | 78300058687 | +----------+----------------+--------------+----------+-----------+---------------+
SELECT products.entity_id,att_products.value AS barcode,name,price,special_price,url_path,thumbnail FROM catalog_product_flat_1 AS products INNER JOIN catalog_product_entity_varchar AS att_products ON att_products.attribute_id = 139 AND products.entity_id = att_products.entity_id AND att_products.value IS NOT NULL WHERE price > 0 ORDER BY name;
output:
+-----------+---------------+--------------------------------------------+-------------+---------------+ | entity_id | barcode | name | price | special_price | +-----------+---------------+--------------------------------------------+-------------+---------------+ | 157 | 8938500402357 | B▒NH S?A AGI 60ML | 25000.0000 | NULL | | 713 | 78300058687 | B▒NH S?A PLAYTEX 200ML | 150000.0000 | NULL | | 155 | 8936006854205 | QU?N L▒T D▒NG 1 L?N M▒U TR?NG( SET 5 C▒I ) | 13000.0000 | NULL | | 718 | 8851989060422 | T?M G?I DNEE 380ML | 82000.0000 | NULL | +-----------+---------------+--------------------------------------------+-------------+---------------+
Show products with categories:
SELECT entity_id,name,price,special_price,url_path,cat4.value FROM catalog_product_flat_1 AS flat1 LEFT JOIN (SELECT cat1.product_id, cat1.category_id, cat2.value FROM catalog_category_product AS cat1 LEFT JOIN catalog_category_entity_varchar AS cat2 ON cat1.category_id = cat2.entity_id AND cat2.attribute_id = 41 WHERE cat1.category_id = (SELECT MAX(cat3.category_id) FROM catalog_category_product AS cat3 WHERE cat1.product_id=cat3.product_id)) AS cat4 ON flat1.entity_id=cat4.product_id WHERE price > 0 ORDER BY name;
mysql --default-character-set=utf8 -uroot -p babyshopvn <<< "SELECT entity_id,name,price,special_price,url_path,cat4.value FROM catalog_product_flat_1 as flat1 left join (select cat1.product_id, cat1.category_id, cat2.value from catalog_category_product as cat1 left join catalog_category_entity_varchar as cat2 on cat1.category_id = cat2.entity_id and cat2.attribute_id = 41 where cat1.category_id = (select max(cat3.category_id) from catalog_category_product as cat3 where cat1.product_id=cat3.product_id)) as cat4 on flat1.entity_id=cat4.product_id WHERE price > 0 ORDER BY name;" > /tmp/products.txt
SELECT cat1.product_id, cat2.value FROM catalog_category_product AS cat1 LEFT JOIN catalog_category_entity_varchar AS cat2 ON cat1.category_id = cat2.entity_id AND cat2.attribute_id = 41;
SELECT cat1.product_id, cat1.category_id, cat2.value FROM catalog_category_product AS cat1 LEFT JOIN catalog_category_entity_varchar AS cat2 ON cat1.category_id = cat2.entity_id AND cat2.attribute_id = 41 WHERE cat1.category_id = (SELECT MIN(cat3.category_id) FROM catalog_category_product AS cat3 WHERE cat1.product_id=cat3.product_id);
SELECT entity_id, VALUE FROM catalog_category_entity_varchar WHERE store_id = 0 AND attribute_id = 41;
mysql --default-character-set=utf8 -uroot -p babyshopvn <<< "select entity_id, value from catalog_category_entity_varchar where store_id = 0 and attribute_id = 41;" > /tmp/categories.txt
Truncate logs:
TRUNCATE TABLE log_customer; TRUNCATE TABLE log_quote; TRUNCATE TABLE log_summary; TRUNCATE TABLE log_summary_type; TRUNCATE TABLE log_url; TRUNCATE TABLE log_url_info; TRUNCATE TABLE log_visitor; TRUNCATE TABLE log_visitor_info; TRUNCATE TABLE log_visitor_online;
Truncate Reports:
TRUNCATE TABLE report_compared_product_index; TRUNCATE TABLE report_event; TRUNCATE TABLE report_viewed_product_aggregated_daily; TRUNCATE TABLE report_viewed_product_aggregated_monthly; TRUNCATE TABLE report_viewed_product_aggregated_yearly; TRUNCATE TABLE report_viewed_product_index;
Truncate Search Queries:
TRUNCATE TABLE catalogsearch_query; TRUNCATE TABLE catalogsearch_fulltext; TRUNCATE TABLE catalogsearch_result;