<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>Magento在市场上已有15年的历史,拥有超过150,000家在线商店,是电子商务行业的巨头。它灵活且功能丰富 - 因此,是中型和大型企业的首选 - 这一切都归功于围绕它建立的蓬勃发展的社区。</p><p>但正如经常发生的那样,没有刺的玫瑰。就Magento而言,对于许多商人来说,棘手的是解锁Magento力量所需的技术专长水平。大多数情况下,这需要一个熟练的Magento开发团队 - 内部或外部。如果您在公司内不具备所需的开发技能,那么如何从庞大的可用人才库中选择一个专业的Magento开发团队,而不会不知所措?</p><p>作为经过认证的Magento / Adobe合作伙伴,以及拥有15年专业知识的Magento开发公司,Atwix在这里阐明这个问题。继续阅读以了解选择Magento电子商务代理商时真正重要的是什么。</p><p>选择Magento开发供应商的关键因素</p><p>选择卓越的B2B Magento代理商的最重要因素是什么?首先,寻找是Magento生态系统的重要组成部分的公司。这些机构将被Adobe和整个市场认可为Magento电子商务领域的先驱。根据我们的经验,以下是要寻找的标准:</p><p>1. 寻找具有区域专业化的成熟公司</p><p>Magento社区奖项是Adobe(平台所有者)的认可印章,也是公司整体专业精神的标志。例如,Atwix拥有100多项认证,这表明我们是世界上与Magento和Adobe平台合作的最佳Magento代理商之一。</p><p>Adobe认证与对Magento生态系统的贡献齐头并进。高度认证和高贡献的机构积极参与Magento的开发,利用其丰富的知识和经验帮助发展该平台。例如,Atwix是认证最高的Adobe金牌解决方案合作伙伴 - 从1年到2018年,我们也是Magento代码库的<span style="color: #6a9955;">#2023贡献者,这并非巧合。</span></p><p>选择Magento机构时,检查他们在特定地理区域内的专业化也很重要。不同的国家采取不同的方法,并对电子商务持有特定的态度。通过了解市场及其文化需求,您可以更好地为成功的市场发布做好准备。</p><p>例如,Atwix 在北美和 EMEA(欧洲、中东和非洲)市场拥有专长。花了12 +年的时间在他们中积累了我们的经验和理解,我们不仅是Magento认证的代理商,我们还是全球电子商务市场的专家。</p><p>2.您的Magento代理商必须是社区的一部分</p><p>Magento拥有一个活跃且蓬勃发展的开源社区,致力于通过对其GitHub代码库的贡献来改进平台。作为这个生态系统不可或缺的一部分,Atwix在过去五年中一直是Magento开源代码库的<span style="color: #6a9955;">#1贡献者。</span></p><p>此外,Atwix首席执行官Viacheslav Kravchuk是Magento协会的董事,Magento协会是一个非营利组织,其唯一目的是保持社区的健康,成长和开放。选择Magento电子商务开发机构时,请确保它在社区中广为人知并受到尊重。</p><p>3. 在 Adobe 合作伙伴列表中寻找公司</p><p>在计划外包Magento开发时,选择受信任的供应商至关重要。Magento平台的当前所有者Adobe策划了一个合作伙伴列表,其中包含Adobe信任的所有公司,以提供世界一流的Magento集成。代理商在此列表中的存在意味着它是可以提供世界级解决方案的值得信赖的供应商。该列表可以根据您的特定需求进行过滤,从而轻松为您的项目找到合适的Magento开发公司。</p><p>4. Magento开发机构必须是市场支柱</p><p>Atwix在Adobe的合作伙伴名单中名列前茅是有充分理由的,他在Magento网络开发服务方面投入了超过12年。从核心网站开发到重新设计欧洲最大的交付系统的运作方式,我们的产品组合可能多种多样。这就是为什么我们如此重视那些已经存在足够长的公司,以积累最好的声誉之一。简而言之,与Adobe没有明确联系的Magento营销机构从一开始就存在相当大的风险。</p><p>机构的寿命很重要的原因是,Magento平台在不断发展和扩展。作为该技术的早期采用者,并跟踪其发展,Atwix帮助引入了Magento 2,并通过我们持续的代码贡献帮助使其变得更好。自推出以来,Atwix一直是顶级贡献者,也是Magento 2的顶级代理商。</p><p>5. 没有太好的投资组合</p><p>多年来,我们了解到接受新的挑战至关重要。这种态度将有助于任何电子商务Magento开发机构了解该技术的独特且不断发展的方面。在此过程中,机构可以从简单但有效的站点转移到规模更大、更复杂的项目。</p><p>只需看看 Byrne Electrical Expertss 向强大的 B2B 市场的过渡。Atwix团队集成了Byrne的ERP,实现了非目录产品的销售,并集成了Magepack以提高前端性能,这对于大型电子商务网站至关重要。</p><p>在寻找和选择您自己的Magento开发供应商时,请考虑其产品组合的多样性。他们的用例是否与您的相似?客户成功的多样性和范围是否激发了信心?“足够好”足够好吗?还是您需要更伟大的东西?</p><p>6. 超越自我的能力</p><p>说到客户成功,这是一些Magento开发公司经常忽视的一个领域。Atwix的客户成功模式被称为“客户轨道”,它将客户及其需求置于我们运营的核心。实时客户电话通常涉及三名关键员工 - 项目经理,技术主管和客户成功经理 - 他们确保敏捷项目可交付成果与业务需求和功能要求保持一致。</p><p>我们试图始终满足客户的需求,即使是那些尚未表达的需求。我们通过积极倾听和主动沟通来做到这一点。我们的目标是交付不言自明的结果,无论项目规模或持续时间如何。我们相信Magento开发机构必须追求完美才能提供卓越。</p><p>7. 满足客户要求的灵活性</p><p>作为顶级的Magento代理商,Atwix也喜欢参与发布后的合作。例如,Magnanni是一个拥有悠久而辉煌历史的奢侈品牌,它希望使其在线平台像鞋子一样优雅。Atwix 能够提供延期交货跟踪、不断刷新的库存状态以及解决公司一些最讨厌的缓存问题的解决方案。</p><p>在寻找Magento代理商时,可能会采取类似的方法。适应不断变化的业务需求的敏捷性至关重要。成功的电子商务要求您满足买家不断变化的需求,因此您选择的Magento代理商必须能够应对这种情况。</p><p>现在您知道世界上最好的Magento机构的特征了......让我们开始工作</p><p>使用这七个技巧,您现在可以在寻求Magento网页设计机构时确定关键特征:</p><p>官方认证和 Adobe 合作伙伴身份</p><p>参与magento社区</p><p>区域专业化和专业知识市场</p><p>熟悉您的利基市场</p><p>灵活和高质量的服务,跻身世界级供应商之列</p><p>Atwix体现了这些价值观,这些价值观造就了一家顶级的Magento开发公司。我们花了12 +年的时间为全球客户提供卓越的质量,为所有垂直行业和运营领域的企业提供服务。从小型初创公司到大型企业,我们通过利用Magento平台提供的所有优势来特别关心我们的客户。</p><p><br/><br/></p><p><br/></p>
文章列表
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在安装过程中,Magento提供了为数据库配置表前缀的选项。真棒。</p><p>如果您错过了它,或者后来意识到当您的数据库中已有实际数据(目录、客户、销售等)时需要对其进行配置,该怎么办?</p><p>别担心,我们已经为您提供了保障。您只需要按照以下步骤操作:</p><p>1. 准备要重命名的 SQL 语句</p><p></p><pre class="brush:bash;toolbar:false">SET @TABLE_PREFIX = 'uat_'; SET @DATABASE = 'magento242'; SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' RENAME TO ', @TABLE_PREFIX, TABLE_NAME, ';') AS 'SQL' FROM information_schema.tables WHERE table_schema = @DATABASE;</pre><p>您需要更改 & 变量的值 。@TABLE_PREFIX@DATABASE</p><p>2. 执行 SQL 语句</p><p>如果运行上述 SQL,它将生成准备执行的 SQL 语句列表。</p><p>例如,下面是为vanilla Magento v2.4.2生成的语句列表:</p><p></p><pre class="brush:bash;toolbar:false">ALTER TABLE admin_analytics_usage_version_log RENAME TO uat_admin_analytics_usage_version_log; ALTER TABLE admin_passwords RENAME TO uat_admin_passwords; ALTER TABLE admin_system_messages RENAME TO uat_admin_system_messages; ALTER TABLE admin_user RENAME TO uat_admin_user; ALTER TABLE admin_user_expiration RENAME TO uat_admin_user_expiration; ALTER TABLE admin_user_session RENAME TO uat_admin_user_session; ALTER TABLE adminnotification_inbox RENAME TO uat_adminnotification_inbox; ALTER TABLE authorization_role RENAME TO uat_authorization_role; ALTER TABLE authorization_rule RENAME TO uat_authorization_rule; ALTER TABLE cache RENAME TO uat_cache; ALTER TABLE cache_tag RENAME TO uat_cache_tag; ALTER TABLE captcha_log RENAME TO uat_captcha_log; ALTER TABLE catalog_category_entity RENAME TO uat_catalog_category_entity; ALTER TABLE catalog_category_entity_datetime RENAME TO uat_catalog_category_entity_datetime; ALTER TABLE catalog_category_entity_decimal RENAME TO uat_catalog_category_entity_decimal; ALTER TABLE catalog_category_entity_int RENAME TO uat_catalog_category_entity_int; ALTER TABLE catalog_category_entity_text RENAME TO uat_catalog_category_entity_text; ALTER TABLE catalog_category_entity_varchar RENAME TO uat_catalog_category_entity_varchar; ALTER TABLE catalog_category_product RENAME TO uat_catalog_category_product; ALTER TABLE catalog_category_product_index RENAME TO uat_catalog_category_product_index; ALTER TABLE catalog_category_product_index_replica RENAME TO uat_catalog_category_product_index_replica; ALTER TABLE catalog_category_product_index_store1 RENAME TO uat_catalog_category_product_index_store1; ALTER TABLE catalog_category_product_index_store1_replica RENAME TO uat_catalog_category_product_index_store1_replica; ALTER TABLE catalog_category_product_index_tmp RENAME TO uat_catalog_category_product_index_tmp; ALTER TABLE catalog_compare_item RENAME TO uat_catalog_compare_item; ALTER TABLE catalog_compare_list RENAME TO uat_catalog_compare_list; ALTER TABLE catalog_eav_attribute RENAME TO uat_catalog_eav_attribute; ALTER TABLE catalog_product_bundle_option RENAME TO uat_catalog_product_bundle_option; ALTER TABLE catalog_product_bundle_option_value RENAME TO uat_catalog_product_bundle_option_value; ALTER TABLE catalog_product_bundle_price_index RENAME TO uat_catalog_product_bundle_price_index; ALTER TABLE catalog_product_bundle_selection RENAME TO uat_catalog_product_bundle_selection; ALTER TABLE catalog_product_bundle_selection_price RENAME TO uat_catalog_product_bundle_selection_price; ALTER TABLE catalog_product_bundle_stock_index RENAME TO uat_catalog_product_bundle_stock_index; ALTER TABLE catalog_product_entity RENAME TO uat_catalog_product_entity; ALTER TABLE catalog_product_entity_datetime RENAME TO uat_catalog_product_entity_datetime; ALTER TABLE catalog_product_entity_decimal RENAME TO uat_catalog_product_entity_decimal; ALTER TABLE catalog_product_entity_gallery RENAME TO uat_catalog_product_entity_gallery; ALTER TABLE catalog_product_entity_int RENAME TO uat_catalog_product_entity_int; ALTER TABLE catalog_product_entity_media_gallery RENAME TO uat_catalog_product_entity_media_gallery; ALTER TABLE catalog_product_entity_media_gallery_value RENAME TO uat_catalog_product_entity_media_gallery_value; ALTER TABLE catalog_product_entity_media_gallery_value_to_entity RENAME TO uat_catalog_product_entity_media_gallery_value_to_entity; ALTER TABLE catalog_product_entity_media_gallery_value_video RENAME TO uat_catalog_product_entity_media_gallery_value_video; ALTER TABLE catalog_product_entity_text RENAME TO uat_catalog_product_entity_text; ALTER TABLE catalog_product_entity_tier_price RENAME TO uat_catalog_product_entity_tier_price; ALTER TABLE catalog_product_entity_varchar RENAME TO uat_catalog_product_entity_varchar; ALTER TABLE catalog_product_frontend_action RENAME TO uat_catalog_product_frontend_action; ALTER TABLE catalog_product_index_eav RENAME TO uat_catalog_product_index_eav; ALTER TABLE catalog_product_index_eav_decimal RENAME TO uat_catalog_product_index_eav_decimal; ALTER TABLE catalog_product_index_eav_decimal_idx RENAME TO uat_catalog_product_index_eav_decimal_idx; ALTER TABLE catalog_product_index_eav_decimal_replica RENAME TO uat_catalog_product_index_eav_decimal_replica; ALTER TABLE catalog_product_index_eav_decimal_tmp RENAME TO uat_catalog_product_index_eav_decimal_tmp; ALTER TABLE catalog_product_index_eav_idx RENAME TO uat_catalog_product_index_eav_idx; ALTER TABLE catalog_product_index_eav_replica RENAME TO uat_catalog_product_index_eav_replica; ALTER TABLE catalog_product_index_eav_tmp RENAME TO uat_catalog_product_index_eav_tmp; ALTER TABLE catalog_product_index_price RENAME TO uat_catalog_product_index_price; ALTER TABLE catalog_product_index_price_bundle_idx RENAME TO uat_catalog_product_index_price_bundle_idx; ALTER TABLE catalog_product_index_price_bundle_opt_idx RENAME TO uat_catalog_product_index_price_bundle_opt_idx; ALTER TABLE catalog_product_index_price_bundle_opt_tmp RENAME TO uat_catalog_product_index_price_bundle_opt_tmp; ALTER TABLE catalog_product_index_price_bundle_sel_idx RENAME TO uat_catalog_product_index_price_bundle_sel_idx; ALTER TABLE catalog_product_index_price_bundle_sel_tmp RENAME TO uat_catalog_product_index_price_bundle_sel_tmp; ALTER TABLE catalog_product_index_price_bundle_tmp RENAME TO uat_catalog_product_index_price_bundle_tmp; ALTER TABLE catalog_product_index_price_cfg_opt_agr_idx RENAME TO uat_catalog_product_index_price_cfg_opt_agr_idx; ALTER TABLE catalog_product_index_price_cfg_opt_agr_tmp RENAME TO uat_catalog_product_index_price_cfg_opt_agr_tmp; ALTER TABLE catalog_product_index_price_cfg_opt_idx RENAME TO uat_catalog_product_index_price_cfg_opt_idx; ALTER TABLE catalog_product_index_price_cfg_opt_tmp RENAME TO uat_catalog_product_index_price_cfg_opt_tmp; ALTER TABLE catalog_product_index_price_downlod_idx RENAME TO uat_catalog_product_index_price_downlod_idx; ALTER TABLE catalog_product_index_price_downlod_tmp RENAME TO uat_catalog_product_index_price_downlod_tmp; ALTER TABLE catalog_product_index_price_final_idx RENAME TO uat_catalog_product_index_price_final_idx; ALTER TABLE catalog_product_index_price_final_tmp RENAME TO uat_catalog_product_index_price_final_tmp; ALTER TABLE catalog_product_index_price_idx RENAME TO uat_catalog_product_index_price_idx; ALTER TABLE catalog_product_index_price_opt_agr_idx RENAME TO uat_catalog_product_index_price_opt_agr_idx; ALTER TABLE catalog_product_index_price_opt_agr_tmp RENAME TO uat_catalog_product_index_price_opt_agr_tmp; ALTER TABLE catalog_product_index_price_opt_idx RENAME TO uat_catalog_product_index_price_opt_idx; ALTER TABLE catalog_product_index_price_opt_tmp RENAME TO uat_catalog_product_index_price_opt_tmp; ALTER TABLE catalog_product_index_price_replica RENAME TO uat_catalog_product_index_price_replica; ALTER TABLE catalog_product_index_price_tmp RENAME TO uat_catalog_product_index_price_tmp; ALTER TABLE catalog_product_index_tier_price RENAME TO uat_catalog_product_index_tier_price; ALTER TABLE catalog_product_index_website RENAME TO uat_catalog_product_index_website; ALTER TABLE catalog_product_link RENAME TO uat_catalog_product_link; ALTER TABLE catalog_product_link_attribute RENAME TO uat_catalog_product_link_attribute; ALTER TABLE catalog_product_link_attribute_decimal RENAME TO uat_catalog_product_link_attribute_decimal; ALTER TABLE catalog_product_link_attribute_int RENAME TO uat_catalog_product_link_attribute_int; ALTER TABLE catalog_product_link_attribute_varchar RENAME TO uat_catalog_product_link_attribute_varchar; ALTER TABLE catalog_product_link_type RENAME TO uat_catalog_product_link_type; ALTER TABLE catalog_product_option RENAME TO uat_catalog_product_option; ALTER TABLE catalog_product_option_price RENAME TO uat_catalog_product_option_price; ALTER TABLE catalog_product_option_title RENAME TO uat_catalog_product_option_title; ALTER TABLE catalog_product_option_type_price RENAME TO uat_catalog_product_option_type_price; ALTER TABLE catalog_product_option_type_title RENAME TO uat_catalog_product_option_type_title; ALTER TABLE catalog_product_option_type_value RENAME TO uat_catalog_product_option_type_value; ALTER TABLE catalog_product_relation RENAME TO uat_catalog_product_relation; ALTER TABLE catalog_product_super_attribute RENAME TO uat_catalog_product_super_attribute; ALTER TABLE catalog_product_super_attribute_label RENAME TO uat_catalog_product_super_attribute_label; ALTER TABLE catalog_product_super_link RENAME TO uat_catalog_product_super_link; ALTER TABLE catalog_product_website RENAME TO uat_catalog_product_website; ALTER TABLE catalog_url_rewrite_product_category RENAME TO uat_catalog_url_rewrite_product_category; ALTER TABLE cataloginventory_stock RENAME TO uat_cataloginventory_stock; ALTER TABLE cataloginventory_stock_item RENAME TO uat_cataloginventory_stock_item; ALTER TABLE cataloginventory_stock_status RENAME TO uat_cataloginventory_stock_status; ALTER TABLE cataloginventory_stock_status_idx RENAME TO uat_cataloginventory_stock_status_idx; ALTER TABLE cataloginventory_stock_status_replica RENAME TO uat_cataloginventory_stock_status_replica; ALTER TABLE cataloginventory_stock_status_tmp RENAME TO uat_cataloginventory_stock_status_tmp; ALTER TABLE catalogrule RENAME TO uat_catalogrule; ALTER TABLE catalogrule_customer_group RENAME TO uat_catalogrule_customer_group; ALTER TABLE catalogrule_group_website RENAME TO uat_catalogrule_group_website; ALTER TABLE catalogrule_group_website_replica RENAME TO uat_catalogrule_group_website_replica; ALTER TABLE catalogrule_product RENAME TO uat_catalogrule_product; ALTER TABLE catalogrule_product_price RENAME TO uat_catalogrule_product_price; ALTER TABLE catalogrule_product_price_replica RENAME TO uat_catalogrule_product_price_replica; ALTER TABLE catalogrule_product_replica RENAME TO uat_catalogrule_product_replica; ALTER TABLE catalogrule_website RENAME TO uat_catalogrule_website; ALTER TABLE catalogsearch_recommendations RENAME TO uat_catalogsearch_recommendations; ALTER TABLE checkout_agreement RENAME TO uat_checkout_agreement; ALTER TABLE checkout_agreement_store RENAME TO uat_checkout_agreement_store; ALTER TABLE cms_block RENAME TO uat_cms_block; ALTER TABLE cms_block_store RENAME TO uat_cms_block_store; ALTER TABLE cms_page RENAME TO uat_cms_page; ALTER TABLE cms_page_store RENAME TO uat_cms_page_store; ALTER TABLE core_config_data RENAME TO uat_core_config_data; ALTER TABLE cron_schedule RENAME TO uat_cron_schedule; ALTER TABLE customer_address_entity RENAME TO uat_customer_address_entity; ALTER TABLE customer_address_entity_datetime RENAME TO uat_customer_address_entity_datetime; ALTER TABLE customer_address_entity_decimal RENAME TO uat_customer_address_entity_decimal; ALTER TABLE customer_address_entity_int RENAME TO uat_customer_address_entity_int; ALTER TABLE customer_address_entity_text RENAME TO uat_customer_address_entity_text; ALTER TABLE customer_address_entity_varchar RENAME TO uat_customer_address_entity_varchar; ALTER TABLE customer_eav_attribute RENAME TO uat_customer_eav_attribute; ALTER TABLE customer_eav_attribute_website RENAME TO uat_customer_eav_attribute_website; ALTER TABLE customer_entity RENAME TO uat_customer_entity; ALTER TABLE customer_entity_datetime RENAME TO uat_customer_entity_datetime; ALTER TABLE customer_entity_decimal RENAME TO uat_customer_entity_decimal; ALTER TABLE customer_entity_int RENAME TO uat_customer_entity_int; ALTER TABLE customer_entity_text RENAME TO uat_customer_entity_text; ALTER TABLE customer_entity_varchar RENAME TO uat_customer_entity_varchar; ALTER TABLE customer_form_attribute RENAME TO uat_customer_form_attribute; ALTER TABLE customer_grid_flat RENAME TO uat_customer_grid_flat; ALTER TABLE customer_group RENAME TO uat_customer_group; ALTER TABLE customer_log RENAME TO uat_customer_log; ALTER TABLE customer_visitor RENAME TO uat_customer_visitor; ALTER TABLE design_change RENAME TO uat_design_change; ALTER TABLE design_config_grid_flat RENAME TO uat_design_config_grid_flat; ALTER TABLE directory_country RENAME TO uat_directory_country; ALTER TABLE directory_country_format RENAME TO uat_directory_country_format; ALTER TABLE directory_country_region RENAME TO uat_directory_country_region; ALTER TABLE directory_country_region_city RENAME TO uat_directory_country_region_city; ALTER TABLE directory_country_region_city_name RENAME TO uat_directory_country_region_city_name; ALTER TABLE directory_country_region_name RENAME TO uat_directory_country_region_name; ALTER TABLE directory_currency_rate RENAME TO uat_directory_currency_rate; ALTER TABLE downloadable_link RENAME TO uat_downloadable_link; ALTER TABLE downloadable_link_price RENAME TO uat_downloadable_link_price; ALTER TABLE downloadable_link_purchased RENAME TO uat_downloadable_link_purchased; ALTER TABLE downloadable_link_purchased_item RENAME TO uat_downloadable_link_purchased_item; ALTER TABLE downloadable_link_title RENAME TO uat_downloadable_link_title; ALTER TABLE downloadable_sample RENAME TO uat_downloadable_sample; ALTER TABLE downloadable_sample_title RENAME TO uat_downloadable_sample_title; ALTER TABLE eav_attribute RENAME TO uat_eav_attribute; ALTER TABLE eav_attribute_group RENAME TO uat_eav_attribute_group; ALTER TABLE eav_attribute_label RENAME TO uat_eav_attribute_label; ALTER TABLE eav_attribute_option RENAME TO uat_eav_attribute_option; ALTER TABLE eav_attribute_option_swatch RENAME TO uat_eav_attribute_option_swatch; ALTER TABLE eav_attribute_option_value RENAME TO uat_eav_attribute_option_value; ALTER TABLE eav_attribute_set RENAME TO uat_eav_attribute_set; ALTER TABLE eav_entity RENAME TO uat_eav_entity; ALTER TABLE eav_entity_attribute RENAME TO uat_eav_entity_attribute; ALTER TABLE eav_entity_datetime RENAME TO uat_eav_entity_datetime; ALTER TABLE eav_entity_decimal RENAME TO uat_eav_entity_decimal; ALTER TABLE eav_entity_int RENAME TO uat_eav_entity_int; ALTER TABLE eav_entity_store RENAME TO uat_eav_entity_store; ALTER TABLE eav_entity_text RENAME TO uat_eav_entity_text; ALTER TABLE eav_entity_type RENAME TO uat_eav_entity_type; ALTER TABLE eav_entity_varchar RENAME TO uat_eav_entity_varchar; ALTER TABLE eav_form_element RENAME TO uat_eav_form_element; ALTER TABLE eav_form_fieldset RENAME TO uat_eav_form_fieldset; ALTER TABLE eav_form_fieldset_label RENAME TO uat_eav_form_fieldset_label; ALTER TABLE eav_form_type RENAME TO uat_eav_form_type; ALTER TABLE eav_form_type_entity RENAME TO uat_eav_form_type_entity; ALTER TABLE email_template RENAME TO uat_email_template; ALTER TABLE flag RENAME TO uat_flag; ALTER TABLE gift_message RENAME TO uat_gift_message; ALTER TABLE googleoptimizer_code RENAME TO uat_googleoptimizer_code; ALTER TABLE import_history RENAME TO uat_import_history; ALTER TABLE importexport_importdata RENAME TO uat_importexport_importdata; ALTER TABLE indexer_state RENAME TO uat_indexer_state; ALTER TABLE integration RENAME TO uat_integration; ALTER TABLE layout_link RENAME TO uat_layout_link; ALTER TABLE layout_update RENAME TO uat_layout_update; ALTER TABLE login_as_customer RENAME TO uat_login_as_customer; ALTER TABLE login_as_customer_assistance_allowed RENAME TO uat_login_as_customer_assistance_allowed; ALTER TABLE magento_acknowledged_bulk RENAME TO uat_magento_acknowledged_bulk; ALTER TABLE magento_bulk RENAME TO uat_magento_bulk; ALTER TABLE magento_login_as_customer_log RENAME TO uat_magento_login_as_customer_log; ALTER TABLE magento_operation RENAME TO uat_magento_operation; ALTER TABLE media_content_asset RENAME TO uat_media_content_asset; ALTER TABLE media_gallery_asset RENAME TO uat_media_gallery_asset; ALTER TABLE media_gallery_asset_keyword RENAME TO uat_media_gallery_asset_keyword; ALTER TABLE media_gallery_keyword RENAME TO uat_media_gallery_keyword; ALTER TABLE mview_state RENAME TO uat_mview_state; ALTER TABLE newsletter_problem RENAME TO uat_newsletter_problem; ALTER TABLE newsletter_queue RENAME TO uat_newsletter_queue; ALTER TABLE newsletter_queue_link RENAME TO uat_newsletter_queue_link; ALTER TABLE newsletter_queue_store_link RENAME TO uat_newsletter_queue_store_link; ALTER TABLE newsletter_subscriber RENAME TO uat_newsletter_subscriber; ALTER TABLE newsletter_template RENAME TO uat_newsletter_template; ALTER TABLE oauth_consumer RENAME TO uat_oauth_consumer; ALTER TABLE oauth_nonce RENAME TO uat_oauth_nonce; ALTER TABLE oauth_token RENAME TO uat_oauth_token; ALTER TABLE oauth_token_request_log RENAME TO uat_oauth_token_request_log; ALTER TABLE password_reset_request_event RENAME TO uat_password_reset_request_event; ALTER TABLE patch_list RENAME TO uat_patch_list; ALTER TABLE paypal_billing_agreement RENAME TO uat_paypal_billing_agreement; ALTER TABLE paypal_billing_agreement_order RENAME TO uat_paypal_billing_agreement_order; ALTER TABLE paypal_cert RENAME TO uat_paypal_cert; ALTER TABLE paypal_payment_transaction RENAME TO uat_paypal_payment_transaction; ALTER TABLE paypal_settlement_report RENAME TO uat_paypal_settlement_report; ALTER TABLE paypal_settlement_report_row RENAME TO uat_paypal_settlement_report_row; ALTER TABLE persistent_session RENAME TO uat_persistent_session; ALTER TABLE product_alert_price RENAME TO uat_product_alert_price; ALTER TABLE product_alert_stock RENAME TO uat_product_alert_stock; ALTER TABLE queue RENAME TO uat_queue; ALTER TABLE queue_lock RENAME TO uat_queue_lock; ALTER TABLE queue_message RENAME TO uat_queue_message; ALTER TABLE queue_message_status RENAME TO uat_queue_message_status; ALTER TABLE queue_poison_pill RENAME TO uat_queue_poison_pill; ALTER TABLE quote RENAME TO uat_quote; ALTER TABLE quote_address RENAME TO uat_quote_address; ALTER TABLE quote_address_item RENAME TO uat_quote_address_item; ALTER TABLE quote_id_mask RENAME TO uat_quote_id_mask; ALTER TABLE quote_item RENAME TO uat_quote_item; ALTER TABLE quote_item_option RENAME TO uat_quote_item_option; ALTER TABLE quote_payment RENAME TO uat_quote_payment; ALTER TABLE quote_shipping_rate RENAME TO uat_quote_shipping_rate; ALTER TABLE rating RENAME TO uat_rating; ALTER TABLE rating_entity RENAME TO uat_rating_entity; ALTER TABLE rating_option RENAME TO uat_rating_option; ALTER TABLE rating_option_vote RENAME TO uat_rating_option_vote; ALTER TABLE rating_option_vote_aggregated RENAME TO uat_rating_option_vote_aggregated; ALTER TABLE rating_store RENAME TO uat_rating_store; ALTER TABLE rating_title RENAME TO uat_rating_title; ALTER TABLE release_notification_viewer_log RENAME TO uat_release_notification_viewer_log; ALTER TABLE report_compared_product_index RENAME TO uat_report_compared_product_index; ALTER TABLE report_event RENAME TO uat_report_event; ALTER TABLE report_event_types RENAME TO uat_report_event_types; ALTER TABLE report_viewed_product_aggregated_daily RENAME TO uat_report_viewed_product_aggregated_daily; ALTER TABLE report_viewed_product_aggregated_monthly RENAME TO uat_report_viewed_product_aggregated_monthly; ALTER TABLE report_viewed_product_aggregated_yearly RENAME TO uat_report_viewed_product_aggregated_yearly; ALTER TABLE report_viewed_product_index RENAME TO uat_report_viewed_product_index; ALTER TABLE reporting_counts RENAME TO uat_reporting_counts; ALTER TABLE reporting_module_status RENAME TO uat_reporting_module_status; ALTER TABLE reporting_orders RENAME TO uat_reporting_orders; ALTER TABLE reporting_system_updates RENAME TO uat_reporting_system_updates; ALTER TABLE reporting_users RENAME TO uat_reporting_users; ALTER TABLE review RENAME TO uat_review; ALTER TABLE review_detail RENAME TO uat_review_detail; ALTER TABLE review_entity RENAME TO uat_review_entity; ALTER TABLE review_entity_summary RENAME TO uat_review_entity_summary; ALTER TABLE review_status RENAME TO uat_review_status; ALTER TABLE review_store RENAME TO uat_review_store; ALTER TABLE sales_bestsellers_aggregated_daily RENAME TO uat_sales_bestsellers_aggregated_daily; ALTER TABLE sales_bestsellers_aggregated_monthly RENAME TO uat_sales_bestsellers_aggregated_monthly; ALTER TABLE sales_bestsellers_aggregated_yearly RENAME TO uat_sales_bestsellers_aggregated_yearly; ALTER TABLE sales_creditmemo RENAME TO uat_sales_creditmemo; ALTER TABLE sales_creditmemo_comment RENAME TO uat_sales_creditmemo_comment; ALTER TABLE sales_creditmemo_grid RENAME TO uat_sales_creditmemo_grid; ALTER TABLE sales_creditmemo_item RENAME TO uat_sales_creditmemo_item; ALTER TABLE sales_invoice RENAME TO uat_sales_invoice; ALTER TABLE sales_invoice_comment RENAME TO uat_sales_invoice_comment; ALTER TABLE sales_invoice_grid RENAME TO uat_sales_invoice_grid; ALTER TABLE sales_invoice_item RENAME TO uat_sales_invoice_item; ALTER TABLE sales_invoiced_aggregated RENAME TO uat_sales_invoiced_aggregated; ALTER TABLE sales_invoiced_aggregated_order RENAME TO uat_sales_invoiced_aggregated_order; ALTER TABLE sales_order RENAME TO uat_sales_order; ALTER TABLE sales_order_address RENAME TO uat_sales_order_address; ALTER TABLE sales_order_aggregated_created RENAME TO uat_sales_order_aggregated_created; ALTER TABLE sales_order_aggregated_updated RENAME TO uat_sales_order_aggregated_updated; ALTER TABLE sales_order_grid RENAME TO uat_sales_order_grid; ALTER TABLE sales_order_item RENAME TO uat_sales_order_item; ALTER TABLE sales_order_payment RENAME TO uat_sales_order_payment; ALTER TABLE sales_order_status RENAME TO uat_sales_order_status; ALTER TABLE sales_order_status_history RENAME TO uat_sales_order_status_history; ALTER TABLE sales_order_status_label RENAME TO uat_sales_order_status_label; ALTER TABLE sales_order_status_state RENAME TO uat_sales_order_status_state; ALTER TABLE sales_order_tax RENAME TO uat_sales_order_tax; ALTER TABLE sales_order_tax_item RENAME TO uat_sales_order_tax_item; ALTER TABLE sales_payment_transaction RENAME TO uat_sales_payment_transaction; ALTER TABLE sales_refunded_aggregated RENAME TO uat_sales_refunded_aggregated; ALTER TABLE sales_refunded_aggregated_order RENAME TO uat_sales_refunded_aggregated_order; ALTER TABLE sales_sequence_meta RENAME TO uat_sales_sequence_meta; ALTER TABLE sales_sequence_profile RENAME TO uat_sales_sequence_profile; ALTER TABLE sales_shipment RENAME TO uat_sales_shipment; ALTER TABLE sales_shipment_comment RENAME TO uat_sales_shipment_comment; ALTER TABLE sales_shipment_grid RENAME TO uat_sales_shipment_grid; ALTER TABLE sales_shipment_item RENAME TO uat_sales_shipment_item; ALTER TABLE sales_shipment_track RENAME TO uat_sales_shipment_track; ALTER TABLE sales_shipping_aggregated RENAME TO uat_sales_shipping_aggregated; ALTER TABLE sales_shipping_aggregated_order RENAME TO uat_sales_shipping_aggregated_order; ALTER TABLE salesrule RENAME TO uat_salesrule; ALTER TABLE salesrule_coupon RENAME TO uat_salesrule_coupon; ALTER TABLE salesrule_coupon_aggregated RENAME TO uat_salesrule_coupon_aggregated; ALTER TABLE salesrule_coupon_aggregated_order RENAME TO uat_salesrule_coupon_aggregated_order; ALTER TABLE salesrule_coupon_aggregated_updated RENAME TO uat_salesrule_coupon_aggregated_updated; ALTER TABLE salesrule_coupon_usage RENAME TO uat_salesrule_coupon_usage; ALTER TABLE salesrule_customer RENAME TO uat_salesrule_customer; ALTER TABLE salesrule_customer_group RENAME TO uat_salesrule_customer_group; ALTER TABLE salesrule_label RENAME TO uat_salesrule_label; ALTER TABLE salesrule_product_attribute RENAME TO uat_salesrule_product_attribute; ALTER TABLE salesrule_website RENAME TO uat_salesrule_website; ALTER TABLE search_query RENAME TO uat_search_query; ALTER TABLE search_synonyms RENAME TO uat_search_synonyms; ALTER TABLE sendfriend_log RENAME TO uat_sendfriend_log; ALTER TABLE sequence_creditmemo_0 RENAME TO uat_sequence_creditmemo_0; ALTER TABLE sequence_creditmemo_1 RENAME TO uat_sequence_creditmemo_1; ALTER TABLE sequence_invoice_0 RENAME TO uat_sequence_invoice_0; ALTER TABLE sequence_invoice_1 RENAME TO uat_sequence_invoice_1; ALTER TABLE sequence_order_0 RENAME TO uat_sequence_order_0; ALTER TABLE sequence_order_1 RENAME TO uat_sequence_order_1; ALTER TABLE sequence_shipment_0 RENAME TO uat_sequence_shipment_0; ALTER TABLE sequence_shipment_1 RENAME TO uat_sequence_shipment_1; ALTER TABLE session RENAME TO uat_session; ALTER TABLE setup_module RENAME TO uat_setup_module; ALTER TABLE shipping_tablerate RENAME TO uat_shipping_tablerate; ALTER TABLE sitemap RENAME TO uat_sitemap; ALTER TABLE store RENAME TO uat_store; ALTER TABLE store_group RENAME TO uat_store_group; ALTER TABLE store_website RENAME TO uat_store_website; ALTER TABLE tax_calculation RENAME TO uat_tax_calculation; ALTER TABLE tax_calculation_rate RENAME TO uat_tax_calculation_rate; ALTER TABLE tax_calculation_rate_title RENAME TO uat_tax_calculation_rate_title; ALTER TABLE tax_calculation_rule RENAME TO uat_tax_calculation_rule; ALTER TABLE tax_class RENAME TO uat_tax_class; ALTER TABLE tax_order_aggregated_created RENAME TO uat_tax_order_aggregated_created; ALTER TABLE tax_order_aggregated_updated RENAME TO uat_tax_order_aggregated_updated; ALTER TABLE theme RENAME TO uat_theme; ALTER TABLE theme_file RENAME TO uat_theme_file; ALTER TABLE translation RENAME TO uat_translation; ALTER TABLE ui_bookmark RENAME TO uat_ui_bookmark; ALTER TABLE url_rewrite RENAME TO uat_url_rewrite; ALTER TABLE variable RENAME TO uat_variable; ALTER TABLE variable_value RENAME TO uat_variable_value; ALTER TABLE vault_payment_token RENAME TO uat_vault_payment_token; ALTER TABLE vault_payment_token_order_payment_link RENAME TO uat_vault_payment_token_order_payment_link; ALTER TABLE weee_tax RENAME TO uat_weee_tax; ALTER TABLE widget RENAME TO uat_widget; ALTER TABLE widget_instance RENAME TO uat_widget_instance; ALTER TABLE widget_instance_page RENAME TO uat_widget_instance_page; ALTER TABLE widget_instance_page_layout RENAME TO uat_widget_instance_page_layout; ALTER TABLE wishlist RENAME TO uat_wishlist; ALTER TABLE wishlist_item RENAME TO uat_wishlist_item; ALTER TABLE wishlist_item_option RENAME TO uat_wishlist_item_option;</pre><p>3. 更改应用程序/等/环境中的表前缀.php</p><p>打开文件并更改节点下的键的值。</p><p>例如:app/etc/env.phptable_prefixdb</p><pre class="brush:bash;toolbar:false">'db' => [ 'table_prefix' => 'uat_', 'connection' => [ 'default' => [ 'host' => 'localhost', 'dbname' => 'magento242', 'username' => 'dbuser', 'password' => 'dbpass', 'model' => 'mysql4', 'engine' => 'innodb', 'initStatements' => 'SET NAMES utf8;', 'active' => '1', ] ] ],</pre><p>如果需要,您可以运行 命令。setup:upgrade</p><p>4.清除缓存</p><p>执行步骤 2 中生成的 SQL 语句并按步骤 3 配置表前缀后,我们就可以清除缓存了。</p><p>在下面的评论中让我们知道此解决方案是否以任何方式对您有所帮助或有一些替代/更好的方法。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>使用最强大的CMS Magento 2,它允许您自定义结帐流程,并在运输和评论付款部分之间添加自己的步骤。让我们使用一个例子来做到这一点,在这里我们添加了一个指令步骤,然后下订单并将客户进一步转发到Magento 2商店的付款部分。此外,安装自定义结帐字段,这有助于商店管理员通过添加额外字段来自定义结帐页面。</p><p>首先,我们需要创建“checkout_index_index.xml”以在此路径中添加自定义结帐步骤。</p><p>app\code\Vendor\Extension\frontend\view\layout\checkout_index_index.xml</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="checkout.root"> <arguments> <argument name="jsLayout" xsi:type="array"> <item name="components" xsi:type="array"> <item name="checkout" xsi:type="array"> <item name="children" xsi:type="array"> <item name="steps" xsi:type="array"> <item name="children" xsi:type="array"> <!-- The new step you add --> <item name="check-login-step" xsi:type="array"> <item name="component" xsi:type="string">Vendor_Extension/js/view/checkout-new-step </item> <item name="sortOrder" xsi:type="string">2</item> <item name="children" xsi:type="array"> <!--add here child component declaration for your step--> </item> </item> </item> </item> </item> </item> </item> </argument> </arguments> </referenceBlock> </body> </page></pre><p>在上面的代码中,我们在“运输步骤”之后添加了结帐步骤。如果您想在结帐过程中更改步骤位置,以下是一些方案。</p><p>要在发货步骤“sortOrder”值之前显示步骤内容,应< 1 显示发货步骤和付款步骤之间的步骤内容 1</p><p><“sortOrder” < 2 显示付款步骤“sortOrder”后的步骤内容 > 2</p><p>在下一步中,我们需要在前端 Web 文件夹中创建一个 Js 文件。</p><p>app\code\Vendor\Extension\view\frontend\web\js\view\checkout-new-step.js</p><p></p><pre class="brush:bash;toolbar:false">define( [ 'ko', 'uiComponent', 'underscore', 'Magento_Checkout/js/model/step-navigator', 'Magento_Checkout/js/model/full-screen-loader', 'mage/storage', 'Magento_Customer/js/model/customer', 'Magento_Checkout/js/model/quote', 'Magento_Checkout/js/model/shipping-rate-registry', 'Magento_Checkout/js/action/get-totals', 'Magento_Checkout/js/model/totals', 'Magento_Checkout/js/model/cart/totals-processor/default', 'Magento_Checkout/js/model/cart/cache' ], function (ko, Component, _, stepNavigator, fullScreenLoader, storage, customer, quote, rateRegistry, totals, getTotalsAction, defaultTotal, cartCache) { 'use strict'; /** * check-login - is the name of the component's .html template */ return Component.extend({ defaults: { template: ‘Vendor_Extension/check-new’ }, //add here your logic to display step, isVisible: ko.observable(true), isVisibleDrop: ko.observable(false), isLogedIn: customer.isLoggedIn(), //step code will be used as step content id in the component template stepCode: 'newstep', //step title value stepTitle: "New Step", /** * * @returns {*} */ initialize: function () { this._super(); // register your step stepNavigator.registerStep( this.stepCode, //step alias null, this.stepTitle, //observable property with logic when display step or hide step this.isVisible, _.bind(this.navigate, this), /** * sort order value * 'sort order value' < 10: step displays before shipping step; * 10 < 'sort order value' < 20 : step displays between shipping and payment step * 'sort order value' > 20 : step displays after payment step */ 15 ); return this; }, isStepDisplayed: function () { return true; }, /** * The navigate() method is responsible for navigation between checkout step * during checkout. You can add custom logic, for example some conditions * for switching to your custom step */ navigate: function () { }, /** * @returns void */ navigateToNextStep: function () { stepNavigator.next(); } }); } );</pre><p><span style="color: #ce9178;">现在在最后一步中,我们需要在此路径上再创建一个 html 文件。</span></p><p><span style="color: #ce9178;">app</span><span style="color: #d7ba7d;">\c</span><span style="color: #ce9178;">ode</span><span style="color: #d7ba7d;">\V</span><span style="color: #ce9178;">endor</span><span style="color: #d7ba7d;">\E</span><span style="color: #ce9178;">xtension</span><span style="color: #d7ba7d;">\v</span><span style="color: #ce9178;">iew</span><span style="color: #d7ba7d;">\f</span><span style="color: #ce9178;">rontend</span><span style="color: #d7ba7d;">\w</span><span style="color: #ce9178;">eb</span><span style="color: #d7ba7d;">\j</span><span style="color: #ce9178;">s</span><span style="color: #d7ba7d;">\v</span><span style="color: #ce9178;">iew</span><span style="color: #d7ba7d;">\c</span><span style="color: #ce9178;">heck-new.html</span></p><p><span style="color: #ce9178;"></span></p><pre class="brush:bash;toolbar:false"><!--Use 'stepCode' as id attribute--> <li data-bind="fadeVisible: isVisible, attr: { id: stepCode }"> <div class="step-title" data-bind="i18n: stepTitle" data-role="title"></div> <div id="checkout-step-title" class="step-content delivery-option-master" data-role="content"> <div class="fieldset"> <span><!-- ko i18n: 'New Step Added'--><!-- /ko --></span> </div> </div> </li></pre><p><span style="color: #ce9178;">哒!您已成功在Magento 2结帐流程中添加自定义步骤。</span></p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>流行的API类型之一是REST,旨在利用现有的HTTP协议。主要是,RESTful API是一个应用程序接口(API),它使用HTTP请求来获取,放置,发布和删除数据。此外,如果您想使用 REST API,则不需要安装任何插件或库。REST API的唯一主要优点是它提供了更好的灵活性,可以处理多种类型的调用,返回不同的数据格式,并且可以在结构上实现正确的超媒体。这意味着它允许开发人员通过接触新客户来构建满足所有业务需求的 API。</p><p>同样,Magento 2 API框架允许开发人员开发新的服务,用于使用CRUD操作同步Magento 2存储数据。</p><p>此外,如果您熟悉在 PHP 中调用 API 的流程,那么使用 Rest API 就像馅饼一样简单。如果您正在开发此类服务,您可能会遇到使用 REST API 获取订单数据的要求。因此,我们再次回到了另一个博客,它允许您使用Magento 2中的REST API获取所有订单状态。</p><p>首先,我们需要在此路径的扩展中创建“注册.php”文件。</p><p>app\code\VENDOR\EXTENSION</p><p><!--?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, <span style="color: #ce9178;">'VENDOR_EXTENSION'</span>, __DIR__ )<span style="color: #6a9955;">; </pre> <p>After that, we need to create “<strong>Module.xml</strong>” file inside extension etc folder<br ?--></span></p><p><strong>app\code\VENDOR\EXTENSION\etc</strong></p><p><!--?xml <span style="color: #569cd6;">version</span>=<span style="color: #ce9178;">"1.0"</span>?--></p><p>现在,我们必须在同一个 etc 文件夹中再创建一个文件“Webapi.xml”。</p><p>app\code\VENDOR\EXTENSION\etc</p><p><!--?xml <span style="color: #569cd6;">version</span>=<span style="color: #ce9178;">"1.0"</span>?--></p><p>之后,我们需要在同一等文件夹中创建“Di.xml”文件。</p><p>app\code\VENDOR\EXTENSION\etc</p><p><!--?xml <span style="color: #569cd6;">version</span>=<span style="color: #ce9178;">"1.0"</span>?--></p><p>之后,我们需要在扩展 API 文件夹中创建“Getorderstatus.php”文件来提供响应。</p><p>app\code\VENDOR\EXTENSION\Api\</p><pre class="brush:bash;toolbar:false"><!--?php namespace VENDOR\EXTENSION\Api ; interface Getorderstatus { public function getorderstatusarray(); } </pre> <p>Lastly, Create "<strong>GetorderstatusModel.php</strong>" file inside model folder of extension.<br ?--></pre><p><strong>app\code\VENDOR\EXTENSION\Model</strong></p><pre class="brush:bash;toolbar:false"><!--?php namespace VENDOR\EXTENSION\Model ; use VENDOR\EXTENSION\Api\Getorderstatus; class GetorderstatusModel implements Getorderstatus { protected $statusCollectionFactory; public function __construct( \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $statusCollectionFactory ) { $this->statusCollectionFactory = $statusCollectionFactory; } public function getorderstatusarray() { $options = $this->statusCollectionFactory->create()->toOptionArray(); return $options; } } </pre> <p>Now, Go to <strong>Admin -> System -> Integrations</strong> and Get Access Token value and set authorization value into postman application.<br ?--></pre><p>今天就讲到这里!您已成功添加获取Magento 2订单状态,您可以根据使用REST API获取数据的需要自由自定义此代码。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在电子商务商店中,每种产品都有不同的运费以及店主收取的其他额外费用。因此,如果客户在他/她的购物车中添加了产品,则可以在购物车中以及在结帐时查看整个购物车摘要。此外,Magento将每个购物车存储在后端中称为持久购物车,所有添加的产品都绑定在一个报价项目字段中。但是,如果恢复此类购物车,则只会恢复选定的产品,而不会恢复其额外费用或运费。因此,每次您的客户在回来结账时都需要重新选择每个选项。</p><p>因此,要解决此类问题,您需要在后端创建自定义附加报价字段,该字段保存此类值并在购物车恢复时重新应用费用。要执行相同的操作,只需按照以下两个步骤将自定义字段从报价单项转换为Magento</p><p>中的订单项 首先,在以下路径创建“di.xml”文件。</p><p>app\code \Vendor \Extension\etc\</p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Quote\Model\Quote\Item\ToOrderItem"> <plugin name="quote_item_to_order_item" type="Vendor\Extension\Plugin\Quote\Convertquoteitemtoorder"/> </type> </config> </pre></pre><p>现在,我们需要再创建一个文件“转换报价项到订单.php”以在此路径上转换报价项。</p><p>app\code\Vendor\Extension\Plugin\Quote\</p><p><br/></p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <?php namespace Vendor\Extension\Plugin\Quote; class Convertquoteitemtoorder{ public function aroundConvert( \Magento\Quote\Model\Quote\Item\ToOrderItem $subject, \Closure $proceed, \Magento\Quote\Model\Quote\Item\AbstractItem $item, $additional = [] ) { $orderItem = $proceed($item, $additional); $orderItem->setCustomField1($item->getCustomField1()); $orderItem->setCustomField2($item->getCustomField2()); $orderItem->setCustomField3($item->getCustomField3()); return $orderItem; } } </pre></pre><p>就是这样,通过遵循这两个简单的步骤,您可以将报价字段中的所有附加自定义字段转移到客户的最终订单列表中。您可以自由添加上面的代码操作。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在前端客户结账时,您的客户可以在下订单之前轻松应用优惠券代码。但是,如果您看到此功能,则可以将其用作折叠选项卡,有时不容易注意到。因此,即使拥有优惠券代码,您的客户也无法在结帐时找到申请选项并放弃购物车。相反,以编程方式将此折叠的选项卡保持打开状态,突出显示优惠券代码框,您的客户可以轻松查找和使用代码。</p><p>为此,您必须将折扣可折叠小部件设置为 true,并且需要通过创建自定义扩展来覆盖两个模板文件。</p><p>首先,我们需要使用以下代码在自定义扩展中创建一个“checkout_cart_index.xml”文件。</p><p>app/code/VENDOR/EXTENSION/view/frontend/layout/</p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <?xml version="1.0" encoding="UTF-8"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="cart.summary"> <block class="Magento\Checkout\Block\Cart\Coupon" name="checkout.cart.coupon" as="coupon" template="VENDOR_EXTENSION::cart/coupon.phtml"/> </referenceContainer> </body> </page> </pre></pre><p>现在,您需要使用以下代码在此路径上再创建一个文件“coupon.phtml”。</p><p>app/code/VENDOR/EXTENSION/view/frontend/templates/cart/</p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <?php // @codingStandardsIgnoreFile ?> <div class="block discount" id="block-discount" data-mage-init='{"collapsible":{"openedState": "active", "active": true, "saveState": false}}'> <div class="title" data-role="title"> <strong id="block-discount-heading" role="heading" aria-level="2"><?= /* @escapeNotVerified */ __('Apply Discount Code') ?></strong> </div> <div class="content" data-role="content" aria-labelledby="block-discount-heading"> <form id="discount-coupon-form" action="<?= /* @escapeNotVerified */ $block->getUrl('checkout/cart/couponPost') ?>" method="post" data-mage-init='{"discountCode":{"couponCodeSelector": "#coupon_code", "removeCouponSelector": "#remove-coupon", "applyButton": "button.action.apply", "cancelButton": "button.action.cancel"}}'> <div class="fieldset coupon<?= strlen($block->getCouponCode()) ? ' applied' : '' ?>"> <input type="hidden" name="remove" id="remove-coupon" value="0" /> <div class="field"> <label for="coupon_code" class="label"><span><?= /* @escapeNotVerified */ __('Enter discount code') ?></span></label> <div class="control"> <input type="text" class="input-text" id="coupon_code" name="coupon_code" value="<?= $block->escapeHtml($block->getCouponCode()) ?>" placeholder="<?= $block->escapeHtml(__('Enter discount code')) ?>" <?php if (strlen($block->getCouponCode())): ?> disabled="disabled" <?php endif; ?> /> </div> </div> <div class="actions-toolbar"> <?php if (!strlen($block->getCouponCode())): ?> <div class="primary"> <button class="action apply primary" type="button" value="<?= /* @escapeNotVerified */ __('Apply Discount') ?>"> <span><?= /* @escapeNotVerified */ __('Apply Discount') ?></span> </button> </div> <?php else: ?> <div class="primary"> <button type="button" class="action cancel primary" value="<?= /* @escapeNotVerified */ __('Cancel Coupon') ?>"><span><?= /* @escapeNotVerified */ __('Cancel Coupon') ?></span></button> </div> <?php endif; ?> </div> </div> </form> </div> </div> </pre></pre><p>就是这样。如果您看到上面的“coupon.phtml”模板文件,我们已经修改了以下</p><p>代码 执行此操作后,此自定义扩展将使您的优惠券代码框保持打开状态而不会折叠。</p><p>最后,如果您发现此博客有帮助,请不要忘记与您的同事和Magento朋友分享,如果您在实现此代码时遇到任何问题,请告诉我们。</p><p>祝您编码愉快!</p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <div class="block discount" id="block-discount" data-mage-init='{"collapsible":{"openedState": "active", "saveState": false}}'> </pre> to <pre class="lang:default decode:true"> <div class="block discount" id="block-discount" data-mage-init='{"collapsible":{"openedState": "active", "active": true, "saveState": false}}'> </pre></pre><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>这是我执行删除SQL查询以向您展示一个演示,该演示如何在不使用Magento 2中的模型文件的情况下删除特定数量的行/记录。</p><p>为此,我使用以下代码在此路径的扩展文件夹中创建了“Index.php”文件。</p><p>app\code\Vendor\Extension\Controller\Deletequery\</p><pre class="brush:bash;toolbar:false"><pre class="lang:default decode:true"> <?php namespace Vendor\Extension\Controller\Deletequery; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\Action\Context; class Index extends \Magento\Framework\App\Action\Action { const QUOTE_TABLE = 'quote'; private $resourceConnection; public function __construct( Context $context, ResourceConnection $resourceConnection) { $this->resourceConnection = $resourceConnection; return parent::__construct($context); } public function execute() { $connection = $this->resourceConnection->getConnection(); $tableName = $connection->getTableName(self::QUOTE_TABLE); $quoteId = 191; $whereConditions = [ $connection->quoteInto('entity_id = ?', $quoteId), ]; $deleteRows = $connection->delete($tableName, $whereConditions); echo "Deleted Rows : ".$deleteRows; } } </pre></pre><p>就是这样。使用此代码,您可以执行类似的不同SQL操作,而无需创建标准的Magento 2模型文件。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>如果您在全新安装Magento 2.x后遇到相同的空白页问题,这是一个解决方案。</p><p>要先执行相同的操作,您需要打开位于以下路径的“验证器.php”文件。</p><p>vendor\magento\framework\View\Element\Template\File\Validator.php</p><p>大约在第 133 行左右,你会发现这个函数。</p><p>protected function isPathInDirectories($path, $directories)</p><p>现在在这个函数中找到这个代码。</p><p>$<span style="color: #569cd6;">realPath</span> = $this->fileDriver->getRealPath($path)<span style="color: #6a9955;">;</span></p><p>并将其替换为以下代码。</p><p>$<span style="color: #569cd6;">realPath</span> = str_replace(<span style="color: #ce9178;">'</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">'</span>, <span style="color: #ce9178;">'/'</span>, $this->fileDriver->getRealPath($path))<span style="color: #6a9955;">;</span></p><p>就是这样,现在打开命令行界面 (CLI) 并运行以下命令。</p><pre class="brush:bash;toolbar:false">php bin/magento cache:clean php bin/magento cache:flush php bin/magento indexer:reindex php bin/magento setup:upgrade php bin/magento setup:static-content:deploy -f</pre><p>就是这样。现在导航到管理页面,它将开始工作,您的空白页问题现已解决。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>Magento是为电子商务CMS打造的之一,以其功能,灵活的代码结构和性能而闻名。它使用 MySQL 作为存储后端,以表格格式存储和检索数据。它存储所有有用信息的位置,例如客户数据,订单数据和配置。</p><p>但是很多时候,您的客户无法在商店前端登录,或者他们忘记了重置详细信息或商店电子邮件不起作用,在这种情况下如何重置客户帐户的密码?如果您是新手,则解决客户的登录问题变得更加困难。但是,如果您是Magento专家,则可以轻松重置密码并恢复其登录的一些技巧。因此,我们再次使用了一个小型PHP脚本,您可以使用该脚本快速重置客户帐户密码。</p><p>只需使用以下代码在Magento根目录中创建一个“change_password.php”文件。不要忘记指定要在代码中设置的客户 ID 和密码。</p><pre class="brush:bash;toolbar:false"><?php use Magento\Framework\AppInterface; try { require_once __DIR__ . '/app/bootstrap.php'; } catch (\Exception $e) { echo 'Autoload error: ' . $e->getMessage(); exit(1); } try{ $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $appState = $objectManager->get('\Magento\Framework\App\State'); $customerRepositoryInterface = $objectManager->get('\Magento\Customer\Api\CustomerRepositoryInterface'); $customerRegistry = $objectManager->get('\Magento\Customer\Model\CustomerRegistry'); $encryptor = $objectManager->get('\Magento\Framework\Encryption\EncryptorInterface'); $appState->setAreaCode('frontend'); $customerId = 1; // here assign your customer id $password = "custom_password"; // set your custom password $customer = $customerRepositoryInterface->getById($customerId); // _customerRepositoryInterface is an instance of \Magento\Customer\Api\CustomerRepositoryInterface $customerSecure = $customerRegistry->retrieveSecureData($customerId); // _customerRegistry is an instance of \Magento\Customer\Model\CustomerRegistry $customerSecure->setRpToken(null); $customerSecure->setRpTokenCreatedAt(null); $customerSecure->setPasswordHash($encryptor->getHash($password, true)); // here _encryptor is an instance of \Magento\Framework\Encryption\EncryptorInterface $customerRepositoryInterface->save($customer); echo 'Successfully Changes Your Password.'; } catch(\Exception $e){ print_r($e->getMessage()); }</pre><p>就是这样。成功执行脚本后,您的客户将能够使用定义的密码登录其帐户。在这种紧急情况下,使用PHP脚本重置密码成为开发人员的救星。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>有时开发人员想要执行数据库操作,例如存储某些数据、修改数据或在编码过程中删除数据。但是Magento中有一定的编码标准。根据这些标准,开发人员必须创建一个模型文件才能执行任何SQL查询。对于电子商务商店来说,这是一个近乎完美的平台中的一个忙碌的困境。</p><p>但是,如果可以在不使用模型文件的情况下执行这些SQL查询,该怎么办?相信我,这是可能的。今天的博客也是关于同样的。在这里,我将向您展示如何执行更新查询。在下面的代码中显示了更新,它显示了如何在不使用模态文件的情况下执行任意次数的更新。那么,让我们开始吧...??</p><p>最初,为了执行它,您需要在我的扩展文件夹中创建一个“Index.php”文件,该文件位于下面定义的路径中。</p><p>app\code\Vendor\Extension\Controller\Deletequery\</p><p>创建文件夹后,您需要应用以下代码才能执行更新操作。</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Controller\Updatequery; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\Action\Context; class Index extends \Magento\Framework\App\Action\Action { const QUOTE_TABLE = '[TABLE_NAME]'; private $resourceConnection; public function __construct( Context $context, ResourceConnection $resourceConnection) { $this->resourceConnection = $resourceConnection; return parent::__construct($context); } public function execute() { $connection = $this->resourceConnection->getConnection(); $data = ["field1"=>3,"field2"=>15]; // you can use as per your requirement $id = 1; $where = ['entity_id = ?' => (int)$id]; $tableName = $connection->getTableName(self::QUOTE_TABLE); $updatedRows=$connection->update($tableName, $data, $where); echo "Updated Rows : ".$updatedRows; } }</pre><p>就是这样。借助此代码,您可以执行多个 SQL 更新操作,而无需创建模型文件。不创建标准的Magento 2模型文件在您的开发阶段会非常有用。</p><p><br/></p>