<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[Magento开发教程及电子商务最新动态]]></title>
    <link>https://www.360magento.com/blog/</link>
    <description><![CDATA[Magento开发教程及电子商务最新动态]]></description>
    <pubDate>Sun, 05 Apr 2026 10:38:02 +0000</pubDate>
    <generator>Zend_Feed</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Magento如何将附件添加到邮件中]]></title>
      <link>https://www.360magento.com/blog/add-attachments-to-magento-email/</link>
      <description><![CDATA[<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">在 Magento 中，增强沟通策略可以显著提高客户满意度和参与度。其中一种有效的方法就是在电子邮件中添加附件，为客户提供详细的信息，并改善整体用户体验。&nbsp;</p>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">在这篇博文中，我们将指导您完成创建 Magento 模块的过程，以将发票自动附加到您的电子邮件中，从而增强整体用户体验。</p>
<h2 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Why_adding_attachments_to_Magento_email_is_a_valuable_enhancement" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>为什么向Magento 电子邮件添加附件是一项有价值的增强功能<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h2>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">事实证明，将文件附加到 Magento 电子邮件对企业和客户都有利。</p>
<h3 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="With_businesses" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>与企业<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h3>
<h4 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Efficiency_and_Time_Savings" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>提高效率并节省时间<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h4>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">通过预先自动准备发票附件，企业可以节省时间和精力。发件人可以轻松点击&ldquo;发送&rdquo;，简化沟通过程。</p>
<h4 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Professional_Brand_Image" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>专业的品牌形象<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h4>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">将精心设计的附件包含在内有助于公司树立专业形象。这反映了对组织有序和详细沟通的承诺，提升了业务的整体感知。</p>
<h3 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="With_customers" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">与客户</span><br /><span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h3>
<h4 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Comprehensive_Order_Details" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">全面的订单详情</span><br /><span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h4>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">附件提供给客户详细的订单信息，例如发票、收据和运输详情，直接在电子邮件中。这消除了客户需要在外部平台导航的必要，确保他们全面了解自己的购买。</p>
<h4 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Simplified_Communication" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">简化沟通</span><br /><span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h4>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">附件采用了易于理解的格式，减少了客户阅读冗长电子邮件的必要性。重要信息被清晰、简洁地呈现，从而提升了整体用户体验。</p>
<h2 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Step-by-step_Instructions_to_Add_an_Invoice_Attachment_to_Magento_Email" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">在Magento电子邮件中添加发票附件的步骤说明</span><br /><span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h2>
<h3 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="1_Create_Module_Files" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">1. 创建模块文件</span><br /><span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h3>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">首先，您需要使用以下文件设置模块的基本结构：</p>
<p data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce" data-immersive-translate-paragraph="1">文件 di.xml</span></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
 
 
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"&gt;
   &lt;preference for="Magento\Framework\Mail\Template\TransportBuilder"
           	type="Alwayly\SendPdf\Mail\Template\TransportBuilder"/&gt;
   &lt;type name="Magento\Sales\Model\Order\Email\SenderBuilder"&gt;
   	&lt;plugin name="add.attachment.email" type="Alwayly\SendPdf\Plugin\SenderBuilder"/&gt;
   &lt;/type&gt;
&lt;/config&gt;</code></pre>
<p data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">文件 module.xml</span></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
   &lt;module name="Alwayly_SendPdf" /&gt;
&lt;/config&gt;</code></pre>
<p data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce" data-immersive-translate-paragraph="1">文件 registration.php</span></p>
<pre class="wp-block-code"><code>&lt;?php
/*
* @author  Alwayly Solutions &lt;info@Alwayly.com&gt;
* @copyright Copyright (c) 2023 Alwayly Solutions &lt;https://www.alwayly.com&gt;. All rights reserved.
* @license  Open Software License (&ldquo;OSL&rdquo;) v. 3.0
*/
 
use Magento\Framework\Component\ComponentRegistrar;
 
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Alwayly_SendPdf', __DIR__);</code></pre>
<h3 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="2_Override_TransportBuilder" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>2.&nbsp;重写TransportBuilder&nbsp;<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h3>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">然后，我们需要覆盖Magento 中Alwayly\SendPdf\Mail\Template目录中的TransportBuilder文件以包含附件功能。</p>
<pre class="wp-block-code"><code>&lt;?php
 
declare (strict_types=1);
 
namespace Alwayly\SendPdf\Mail\Template;
 
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Mail\AddressConverter;
use Magento\Framework\Mail\EmailMessageInterfaceFactory;
use Magento\Framework\Mail\MessageInterface;
use Magento\Framework\Mail\MessageInterfaceFactory;
use Magento\Framework\Mail\MimeMessageInterfaceFactory;
use Magento\Framework\Mail\MimePartInterfaceFactory;
use Magento\Framework\Mail\Template\FactoryInterface;
use Magento\Framework\Mail\Template\SenderResolverInterface;
use Magento\Framework\Mail\TransportInterfaceFactory;
use Magento\Framework\ObjectManagerInterface;
use Laminas\Mime\Mime;
use Laminas\Mime\Message;
use Laminas\Mime\PartFactory;
 
/**
* Class TransportBuilder
* @package Alwayly\SendPdf\Mail\Template
*/
class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
{
   /**
	* @var Message
	*/
   protected $messageMime;
 
   /**
	* @var
	*/
   protected $message;
 
   /**
	* @var array
	*/
   protected $attachments = [];
 
   /**
	* @var PartFactory|mixed
	*/
   protected $partFactory;
 
   /**
	* @param Message $messageMime
	* @param PartFactory $partFactory
	* @param FactoryInterface $templateFactory
	* @param MessageInterface $message
	* @param SenderResolverInterface $senderResolver
	* @param ObjectManagerInterface $objectManager
	* @param TransportInterfaceFactory $mailTransportFactory
	* @param MessageInterfaceFactory|null $messageFactory
	* @param EmailMessageInterfaceFactory|null $emailMessageInterfaceFactory
	* @param MimeMessageInterfaceFactory|null $mimeMessageInterfaceFactory
	* @param MimePartInterfaceFactory|null $mimePartInterfaceFactory
	* @param AddressConverter|null $addressConverter
	*/
   public function __construct(
   	Message $messageMime,
   	PartFactory $partFactory,
   	FactoryInterface $templateFactory,
   	MessageInterface $message,
   	SenderResolverInterface $senderResolver,
   	ObjectManagerInterface $objectManager,
   	TransportInterfaceFactory $mailTransportFactory,
   	MessageInterfaceFactory $messageFactory = null,
   	EmailMessageInterfaceFactory $emailMessageInterfaceFactory = null,
   	MimeMessageInterfaceFactory $mimeMessageInterfaceFactory = null,
   	MimePartInterfaceFactory $mimePartInterfaceFactory = null,
   	AddressConverter $addressConverter = null
   ) {
   	$this-&gt;templateFactory = $templateFactory;
   	$this-&gt;partFactory = $partFactory;
   	$this-&gt;messageMime = $messageMime;
   	parent::__construct(
       	$templateFactory,
       	$message,
       	$senderResolver,
       	$objectManager,
       	$mailTransportFactory,
       	$messageFactory,
       	$emailMessageInterfaceFactory,
       	$mimeMessageInterfaceFactory,
       	$mimePartInterfaceFactory,
       	$addressConverter
   	);
   }
 
   /**
	* @return $this|TransportBuilder
	* @throws LocalizedException
	*/
 protected function prepareMessage()
   {
   	$result = parent::prepareMessage();
   	if (!empty($this-&gt;attachments)) {
       	foreach ($this-&gt;attachments as $attachment) {
           	$body = $this-&gt;message-&gt;getBody();
           	if (!$body) {
               	$body = $this-&gt;messageMime;
           	}
           	$body-&gt;addPart($attachment);
           	$this-&gt;message-&gt;setBody($body);
       	}
       	$this-&gt;attachments = [];
   	}
   	return $result;
   }
 
   /**
	* @param $content
	* @param $fileName
	* @param $fileType
	* @return $this
	*/
   public function addAttachment($content, $fileName, $fileType)
   {
   	$attachmentPart = $this-&gt;partFactory-&gt;create();
   	$attachmentPart-&gt;setContent($content)
       	-&gt;setType($fileType)
       	-&gt;setFileName($fileName)
       	-&gt;setDisposition(Mime::DISPOSITION_ATTACHMENT)
       	-&gt;setEncoding(Mime::ENCODING_BASE64);
   	$this-&gt;attachments[] = $attachmentPart;
 
   	return $this;
   }
}</code></pre>
<h3 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="3_Plugin_for_SenderBuilder" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>3. SenderBuilder插件<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h3>
<pre class="wp-block-code"><code>&lt;?php
 
namespace Alwayly\SendPdf\Plugin;
 
use Laminas\Validator\Date;
use Alwayly\SendPdf\Mail\Template\TransportBuilder;
use Magento\Sales\Model\Order\Email\Container\Template;
use Magento\Sales\Model\Order\Pdf\Invoice;
use Magento\Framework\Stdlib\DateTime\DateTime;
 
class SenderBuilder
{
   private TransportBuilder $transportBuilder;
 
   private Template $templateContainer;
 
   private Invoice $renderInvoice;
 
   private DateTime $dateTime;
 
   public function __construct(
   	DateTime $dateTime,
   	Invoice $renderInvoice,
   	Template $templateContainer,
   	TransportBuilder $transportBuilder
   ) {
   	$this-&gt;transportBuilder = $transportBuilder;
   	$this-&gt;templateContainer = $templateContainer;
   	$this-&gt;renderInvoice = $renderInvoice;
   	$this-&gt;dateTime = $dateTime;
   }
 
   public function beforeSend(\Magento\Sales\Model\Order\Email\SenderBuilder $subject)
   {
   	$dataInvoice = $this-&gt;_getDataTemplate();
   	try {
       	if(!empty($dataInvoice)){
           	$pdfContent = $this-&gt;renderInvoice-&gt;getPdf($dataInvoice)-&gt;render();
           	$date = $this-&gt;dateTime-&gt;date('Y-m-d_H-i-s');
           	$this-&gt;transportBuilder-&gt;addAttachment($pdfContent, 'invoice' . $date . '.pdf', 'application/pdf');
       	}
   	} catch (\Exception $e) {
       	return;
   	}
   }
 
   private function _getDataTemplate()
   {
   	$data = $this-&gt;templateContainer-&gt;getTemplateVars();
   	if (array_key_exists('invoice_id', $data)) {
       	return [$data['invoice']];
   	}
   	if (isset($data['order']) &amp;&amp; $data['order']-&gt;hasInvoices()) {
       	return $data['order']-&gt;getInvoiceCollection()-&gt;getItems();
   	}
   	return [$data['invoice']] ?? '';
   }</code></pre>
<h2 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Result" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>结果<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h2>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">当发出发票或订单的电子邮件时，会自动地在邮件中添加发票附件。</p>
<p><img alt="Magento 邮件附件" src="https://www.360magento.com/media/wysiwyg/blog_815/pasted_image_0.png" title="Magento 邮件附件" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce" /></p>
<h2 class="wp-block-heading" data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"><span class="ez-toc-section" id="Conclusion" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span>总结<span class="ez-toc-section-end" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce"></span></h2>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">总之，按照这些步骤，您可以轻松地将发票附件添加到Magento的电子邮件中。这样做可以增强您的沟通策略，为客户提供详细信息，从而促进积极的购物体验。</p>
<p data-immersive-translate-paragraph="1" data-immersive-translate-walked="92b8b840-8be6-4601-9621-63d1461f18ce">根据您的具体需求对该模块进行定制，从而在竞争激烈的电子商务市场中提高客户参与度。如果需要，欢迎联系我们，我们为您提供更多的Magento平台定制服务。</p>]]></description>
      <pubDate>Wed, 27 Mar 2024 05:29:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示/删除 CMS 页面的面包屑导航]]></title>
      <link>https://www.360magento.com/blog/how-to-show-breadcrumbs-to-cms-pages-magento/</link>
      <description><![CDATA[<h2 class="wp-block-heading" id="670915065-a6159s">实践中常见的 3 种面包屑类型</h2>
<p>面包屑主要分为三种类型。每个都有其自己的目的和不同的用途。以下是您在网站上有效实施面包屑的 3 种方法。</p>
<p>总之，强烈建议您在 Magento 商店中添加面包屑，尽管它不是网站的强制组件。</p>
<h3 class="wp-block-heading" id="-1290161138-1zu3iu">基于层次结构的面包屑</h3>
<p>这被认为是使用最广泛和最常见的面包屑类型。本质上，基于层次结构的面包屑告诉网络访问者他们在网站结构中的位置。每个文本链接所指向的页面比其右侧的页面高一级。</p>
<p>我们以亚马逊为例。当打开亚马逊上的任何产品页面时，您可以轻松地在页面的左上角看到类似这样的面包屑痕迹。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/R4df8yk.jpg" /></p>
<p><span>例如：</span>电子产品 &gt; 计算机及配件 &gt; 计算机配件及外围设备。</p>
<p>显然，这种类型的面包屑可以帮助用户轻松查看他们在网站架构中的位置。当您可以与面包屑路径的每个部分进行交互时，导航到较低或较高级别的页面也变得更加方便。</p>
<h3 class="wp-block-heading" id="-740246070-2y1vhf">基于历史的面包屑</h3>
<p>与基于层次结构的面包屑不同，基于历史（或基于路径）的面包屑具有与浏览器后退按钮相同的功能。它允许用户快速返回到他们访问过的先前页面，并且所有选择都完好无损。</p>
<p>当访问者在类别页面上应用多个过滤器后只想快速跳回到上一页时，这种类型的面包屑链接非常有用。它关注的是实际的点击路径而不是位置。</p>
<h3 class="wp-block-heading" id="-1757321817-l7587y">基于属性的面包屑</h3>
<p>除了第一种面包屑类型之外，基于属性的面包屑是电子商务网站上使用最广泛的两种面包屑类型。</p>
<p>顾名思义，这种面包屑类型包含产品属性，这些属性向客户显示他们点击了哪些属性。</p>
<p>基于属性的面包屑与基于层次结构的面包屑最显着的区别在于，它不仅列出您的路径，还表示您在产品上选择的过滤器（价格、质量、颜色等）。您还可以直接在面包屑路径上取消选择产品过滤器。</p>
<h2 class="wp-block-heading" id="2051462103-xoj5vm">为什么面包屑对电子商务商店很重要？</h2>
<p>对于电子商务企业来说，面包屑在帮助用户有效地浏览整个网站和页面之间发挥着至关重要的作用。</p>
<p>然而，面包屑不仅仅局限于改善用户的浏览体验，它在很多方面都更有益。</p>
<h3 class="wp-block-heading" id="519656927-o68zfl">提升用户体验</h3>
<p>不用说，面包屑使网络访问者可以更轻松地系统地浏览整个在线商店。当顾客在您的商店里闲逛时迷路时，您只需要面包屑路径即可为他们指明出路。</p>
<p>通过正确实施面包屑类型，您可以帮助用户眨眼间移动到他们想要的页面。</p>
<p>尽管面包屑只是一种常见的界面元素，但它有助于减少摩擦并为客户带来便利。</p>
<h3 class="wp-block-heading" id="1814997951-hrfpbs">降低跳出率</h3>
<p>面包屑本身的另一个好处是能够降低跳出率。如前所述，面包屑可以作为一种方便的指南：</p>
<ul>
<li>向用户准确显示他们在您网站上的位置</li>
<li>只需单击一下即可根据客户的偏好向后或向前导航</li>
</ul>
<p>换句话说，您为网络访问者提供了一种使用面包屑导航轻松浏览您的网站的便捷方式。</p>
<p>因此，面包屑的应用提高了可用性、价值、网站的可信度以及整体用户体验。</p>
<h3 class="wp-block-heading" id="-381822069-uxi31r">有助于网站的 SEO 性能</h3>
<p>面包屑不仅有利于用户体验，而且对 Google 排名也有重大影响。对于那些不知道的人，Google 使用面包屑对内容进行分类和上下文关联。</p>
<p>换句话说，面包屑向搜索引擎显示该网站的结构。这对于 SEO 来说是双赢，因为面包屑会直接影响：</p>
<ul>
<li>用户如何在您的网站上查找信息，从而提高网络可用性</li>
<li>搜索引擎如何对您的网站编制索引并确定您的网站在 Google 上的排名</li>
</ul>
<p>从SEO优化的角度来看，面包屑无疑是一个多功能工具。</p>
<h2 class="wp-block-heading" id="-1578893068-bbia9a">如何在 Magento 2 中向 CMS 页面显示面包屑</h2>
<ol>
<li>在 Magento 2 管理面板上，单击<span>商店</span>。在<span>设置</span>部分中，选择<span>配置</span>。</li>
<li>在左侧面板的&ldquo;常规&rdquo;下，选择&ldquo;Web&rdquo;</li>
<li>打开<span>默认页面</span>部分。</li>
<li><span>将CMS 页面的显示面包屑</span>更改为 *Yes</li>
<li>完成后，单击<span>&ldquo;保存配置&rdquo;</span>。<br /><img src="https://www.360magento.com/media/wysiwyg/2v19oJC.jpg" /></li>
</ol>]]></description>
      <pubDate>Wed, 28 Feb 2024 07:38:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何获取浏览量最高的产品]]></title>
      <link>https://www.360magento.com/blog/get-most-viewed-product-collection-magento/</link>
      <description><![CDATA[<p>展示浏览次数最多的产品通常用于吸引客户使用该产品，也可以作为对他们的推荐。这个浏览次数最多的产品系列对于对商店中销售的产品不太了解的首次访问用户特别有帮助。它可以帮助他们更轻松地选择最好的商品。</p>
<p><span>浏览次数最多的产品</span>在帮助您的商店提高销量方面发挥着重要作用。这是因为在您的网站上展示这些产品可以引导客户收集最有趣的产品，而不是让他们毫无方向地闲逛。但是，要显示浏览次数最多的产品，您需要获取浏览次数最多的产品集合。因此，在今天的文章中，我将指导您如何在 Magento 2 中<span>获得浏览次数最多的产品集合</span>。</p>
<p><span>获取浏览次数最多的产品系列的 3 个步骤</span></p>
<ul>
<li>第 1 步：创建 MostViewedProducts 块</li>
<li>第 2 步：插入phtml文件</li>
<li>第 3 步：刷新缓存和测试结果</li>
</ul>
<h2 class="wp-block-heading" id="1808567723-oyrfsm">第 1 步：创建 MostViewedProducts 块</h2>
<p>要获得浏览次数最多的产品集合，首先，您需要创建一个<code>MostViewedProducts</code>块。为此，请按照路径<code>Example/Productslider/Block/MostViewedProducts.php</code>添加以下代码：</p>
<pre class="wp-block-code"><code>&lt;?php

namespace Example\Productslider\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\App\Http\Context as HttpContext;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Mageplaza\Productslider\Helper\Data;
use Example\Productslider\Model\ResourceModel\Report\Product\CollectionFactory as MostViewedCollectionFactory;
/**
 * Class MostViewedProducts
 * @package Mageplaza\Productslider\Block
 */
class MostViewedProducts extends AbstractSlider
{
    /**
     * @var MostViewedCollectionFactory
     */
    protected $_mostViewedProductsFactory;
    /**
     * MostViewedProducts constructor.
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     * @param Visibility $catalogProductVisibility
     * @param DateTime $dateTime
     * @param Data $helperData
     * @param HttpContext $httpContext
     * @param MostViewedCollectionFactory $mostViewedProductsFactory
     * @param array $data
     */
    public function __construct(
        Context $context,
        CollectionFactory $productCollectionFactory,
        Visibility $catalogProductVisibility,
        DateTime $dateTime,
        Data $helperData,
        HttpContext $httpContext,
        MostViewedCollectionFactory $mostViewedProductsFactory,
        array $data = []
    ) {
        $this-&gt;_mostViewedProductsFactory = $mostViewedProductsFactory;
        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);
    }
    /**
     * Get Product Collection of MostViewed Products
     * @return mixed
     */
    public function getProductCollection()
    {
        $collection = $this-&gt;_mostViewedProductsFactory-&gt;create()
            -&gt;addAttributeToSelect('*')
            -&gt;setStoreId($this-&gt;getStoreId())-&gt;addViewsCount()
            -&gt;addStoreFilter($this-&gt;getStoreId())
            -&gt;setPageSize($this-&gt;getProductsCount());
        return $collection;
    }
}
</code></pre>
<h2 class="wp-block-heading" id="541800160-dw3lip">第 2 步：插入phtml文件</h2>
<p>在块中拥有集合后，现在您可以按照此代码片段从块中获取产品集合<code>Example/HelloWorld/view/frontend/templates/list.phtml</code>。</p>
<p>接下来，请在phtml文件中插入以下代码</p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<h2 class="wp-block-heading" id="-964542453-qy5wef">第 3 步：刷新缓存和测试结果</h2>
<p>最后，让我们刷新缓存并测试结果。</p>]]></description>
      <pubDate>Thu, 22 Feb 2024 07:13:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用Magento 2 API获取所有产品、订单和类别的指南]]></title>
      <link>https://www.360magento.com/blog/get-all-products-orders-categories-magento2/</link>
      <description><![CDATA[<p>Magento是一款功能强大的电子商务平台，提供了强大的API来与其进行集成。通过Magento 2 API，您可以轻松地获取产品、订单和类别等信息，从而实现各种自动化和定制化的功能。本文将介绍如何使用Magento 2 API来获取所有产品、订单和类别的方法。</p>
<h3>1. 准备工作</h3>
<p>首先，您需要确保您有一个Magento 2的实例，并且已经配置了API访问权限。在Magento 2的后台管理界面中，您可以通过以下步骤配置API访问权限：</p>
<ul>
<li>登录Magento 2后台管理界面。</li>
<li>转到&ldquo;系统&rdquo; -&gt; &ldquo;集成API&rdquo;。</li>
<li>确保已启用API，并创建一个新的集成。</li>
</ul>
<p>创建集成后，您将获得一个访问令牌，用于通过API进行身份验证。</p>
<h3>2. 使用API获取产品信息</h3>
<p>要获取所有产品的信息，您可以使用Magento 2的<code>catalogProductRepositoryV1</code>端点。您可以发送一个GET请求到以下端点：</p>
<div class="dark bg-gray-950 rounded-md">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-bash">http://yourmagento2domain.com/rest/V1/products</code></div>
</div>
<p>确保在请求头中包含正确的身份验证信息，使用您的访问令牌进行身份验证。这将返回包含所有产品信息的JSON响应。</p>
<h3>3. 使用API获取订单信息</h3>
<p>要获取所有订单的信息，您可以使用Magento 2的<code>salesOrderRepositoryV1</code>端点。发送GET请求到以下端点：</p>
<div class="dark bg-gray-950 rounded-md">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-bash">http://yourmagento2domain.com/rest/V1/orders</code></div>
</div>
<p>同样，请确保在请求头中包含正确的身份验证信息。响应将包含所有订单的详细信息。</p>
<h3>4. 使用API获取类别信息</h3>
<p>要获取所有类别的信息，您可以使用Magento 2的<code>catalogCategoryManagementV1</code>端点。发送GET请求到以下端点：</p>
<div class="dark bg-gray-950 rounded-md">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-bash">http://yourmagento2domain.com/rest/V1/categories</code><br /><span></span></div>
</div>
<p>同样，不要忘记在请求头中包含身份验证信息。响应将包含所有类别的详细信息。</p>
<h3>5. 示例代码</h3>
<p>以下是一个简单的Python示例代码，演示如何使用<code>requests</code>库来通过Magento 2 API获取产品、订单和类别信息：</p>
<div class="dark bg-gray-950 rounded-md">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>python</span></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span></span><code class="!whitespace-pre hljs language-python"><span class="hljs-keyword">import</span> requests <span class="hljs-comment"># 设置Magento 2的API端点和访问令牌</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">base_url = <span class="hljs-string">"http://yourmagento2domain.com/rest/V1/"</span></code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python"> token = <span class="hljs-string">"your_access_token"</span> <span class="hljs-comment"># 获取所有产品信息</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">product_url = base_url + <span class="hljs-string">"products"</span> product_response = requests.get(product_url, headers={<span class="hljs-string">"Authorization"</span>: <span class="hljs-string">"Bearer "</span> + token})</code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python"> products = product_response.json() <span class="hljs-built_in">print</span>(<span class="hljs-string">"Products:"</span>, products) <span class="hljs-comment"># 获取所有订单信息</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">order_url = base_url + <span class="hljs-string">"orders"</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">order_response = requests.get(order_url, headers={<span class="hljs-string">"Authorization"</span>: <span class="hljs-string">"Bearer "</span> + token}) </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">orders = order_response.json() <span class="hljs-built_in">print</span>(<span class="hljs-string">"Orders:"</span>, orders) <span class="hljs-comment"># 获取所有类别信息</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">category_url = base_url + <span class="hljs-string">"categories"</span> </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">category_response = requests.get(category_url, headers={<span class="hljs-string">"Authorization"</span>: <span class="hljs-string">"Bearer "</span> + token}) </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python">categories = category_response.json() </code></div>
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-python"><span class="hljs-built_in">print</span>(<span class="hljs-string">"Categories:"</span>, categories)</code></div>
</div>]]></description>
      <pubDate>Mon, 19 Feb 2024 07:02:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改 Favicon]]></title>
      <link>https://www.360magento.com/blog/how-upload-favicon-magento/</link>
      <description><![CDATA[<p>在Magento 2中更改站点的favicon是一个相对简单的过程，您可以通过以下步骤完成。在这篇博文中，我将指导您如何更改Magento 2站点的favicon。</p>
<h3>步骤 1：准备favicon图标</h3>
<p>首先，您需要准备好要用作favicon的图标。通常，这是一个ICO格式的图标文件，建议大小为16x16像素或32x32像素。您可以使用图标制作工具或在线图标生成器来创建favicon。</p>
<h3>步骤 2：上传favicon图标到Magento 2</h3>
<ol>
<li>
<p>将favicon图标上传到Magento 2的您的主题目录中。您的主题目录通常位于<code>app/design/frontend/Your_Vendor/Your_Theme</code>。</p>
</li>
<li>
<p>将favicon图标放置在您的主题目录的<code>web</code>子目录中。如果<code>web</code>子目录不存在，请创建它。</p>
</li>
</ol>
<h3>步骤 3：更新Magento 2配置</h3>
<ol>
<li>
<p>登录到Magento 2后台管理面板。</p>
</li>
<li>
<p>转到&ldquo;内容(Content)&rdquo; &gt; &ldquo;配置(Configuration)&rdquo; &gt; &ldquo;设计(Design)&rdquo;。</p>
</li>
<li>
<p>在&ldquo;HTML头部(HTML Head)&rdquo;部分，找到&ldquo;Favicon图标(Favicon Icon)&rdquo;字段。</p>
</li>
<li>
<p>在&ldquo;Favicon图标(Favicon Icon)&rdquo;字段中输入您的favicon图标的URL。例如，如果您的主题目录是<code>app/design/frontend/Your_Vendor/Your_Theme</code>，而您的favicon图标名为<code>favicon.ico</code>，则输入<code>Your_Vendor/Your_Theme/favicon.ico</code>。</p>
</li>
<li>
<p>保存配置更改。</p>
</li>
</ol>
<h3>步骤 4：清除缓存并刷新页面</h3>
<p>在Magento 2中更新任何配置后，都应该清除缓存以确保更改生效。完成后，刷新您的Magento 2网站页面，您应该能够看到新的favicon图标已经生效了。</p>]]></description>
      <pubDate>Sun, 18 Feb 2024 07:52:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加新的 CMS 块]]></title>
      <link>https://www.360magento.com/blog/how-to-add-new-cms-blocks-magento/</link>
      <description><![CDATA[<p>Magento 2的CMS块（Content Management System Blocks）是一种方便的方式，可以在网站的不同位置添加自定义内容，而无需深度的编码知识。以下是在Magento 2中添加新的CMS块的详细步骤：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>通过浏览器访问Magento 2后台，输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入CMS块管理页面</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Content&rdquo;（内容），然后选择&ldquo;Elements&rdquo;（元素）下的&ldquo;Blocks&rdquo;（块）。</p>
<p><span>步骤 3：创建新CMS块</span></p>
<p>在&ldquo;Blocks&rdquo;页面上，点击右上角的&ldquo;Add New Block&rdquo;（添加新块）按钮。</p>
<p><span>步骤 4：填写CMS块信息</span></p>
<p>在&ldquo;Block Information&rdquo;（块信息）页面上，填写以下信息：</p>
<ul>
<li><span>Block Title（块标题）：</span> 输入CMS块的标题。</li>
<li><span>Identifier（标识符）：</span> 输入唯一的标识符，通常是小写字母和下划线的组合，用于在代码中引用CMS块。</li>
<li><span>Store View（商店视图）：</span> 选择CMS块要适用的商店视图。</li>
<li><span>Content（内容）：</span> 在文本编辑器中输入CMS块的内容，您可以使用HTML标记自定义格式。</li>
</ul>
<p><span>步骤 5：设置CMS块的显示与隐藏</span></p>
<p>在&ldquo;Block Information&rdquo;页面的右上角，您可以选择CMS块的状态：</p>
<ul>
<li><span>Enable Block（启用块）：</span> 将其设置为&ldquo;Yes&rdquo;（是）以启用CMS块。</li>
<li><span>Hide from Navigation (在导航中隐藏)：</span> 将其设置为&ldquo;Yes&rdquo;（是）以在导航中隐藏CMS块。</li>
</ul>
<p><span>步骤 6：保存CMS块</span></p>
<p>点击页面右上角的&ldquo;Save Block&rdquo;（保存块）按钮，以保存新创建的CMS块。</p>
<p><span>步骤 7：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>步骤 8：在页面或布局中调用CMS块</span></p>
<p>在您希望显示CMS块的页面或布局文件中，您可以使用以下代码调用CMS块：</p>
<div class="dark bg-black rounded-md">
<div class="flex items-center relative text-token-text-secondary bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span></span><code class="!whitespace-pre hljs language-xml"></code></div>
</div>
<p>将<code>your_block_identifier</code>替换为您在第4步中设置的标识符。</p>]]></description>
      <pubDate>Mon, 12 Feb 2024 07:28:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加、删除、管理客户评论和评级？]]></title>
      <link>https://www.360magento.com/blog/how-manage-review-rating-magento/</link>
      <description><![CDATA[<p><span>步骤 1：登录Magento后台</span></p>
<p>通过浏览器访问Magento 2后台，输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：添加客户评论和评级</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Marketing&rdquo;（营销），然后选择&ldquo;User Content&rdquo;（用户内容）下的&ldquo;Reviews and Ratings&rdquo;（评论和评级）。</p>
<ul>
<li><span>添加新评论：</span>
<ul>
<li>点击&ldquo;Customer Reviews&rdquo;（客户评论）。</li>
<li>点击右上角的&ldquo;Add New Review&rdquo;（添加新评论）按钮。</li>
<li>选择要评价的产品，填写评分和评论信息。</li>
<li>点击&ldquo;Save Review&rdquo;（保存评论）。</li>
</ul>
</li>
</ul>
<p><span>步骤 3：管理评论和评级</span></p>
<ul>
<li><span>查看和编辑评论：</span>
<ul>
<li>在&ldquo;Customer Reviews&rdquo;页面，您可以查看所有评论和评级。</li>
<li>点击要编辑的评论，进行相应的修改。</li>
<li>点击&ldquo;Save Review&rdquo;（保存评论）以保存更改。</li>
</ul>
</li>
</ul>
<p><span>步骤 4：删除评论和评级</span></p>
<ul>
<li><span>删除评论：</span>
<ul>
<li>在&ldquo;Customer Reviews&rdquo;页面，找到要删除的评论。</li>
<li>选择评论并点击右上角的&ldquo;Delete&rdquo;（删除）按钮。</li>
<li>确认删除。</li>
</ul>
</li>
</ul>
<p><span>步骤 5：管理评级选项</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店），然后选择&ldquo;Configuration&rdquo;（配置）。在&ldquo;Catalog&rdquo;（目录）下的&ldquo;Product Reviews&rdquo;（产品评论）中，您可以配置有关评论和评级的各种选项。</p>
<ul>
<li>
<p><span>启用/禁用评论：</span></p>
<ul>
<li>在&ldquo;Product Reviews&rdquo;页面，找到&ldquo;General Settings&rdquo;（常规设置）部分。</li>
<li>将&ldquo;Enabled&rdquo;（启用）设置为&ldquo;Yes&rdquo;（是）以启用评论功能，设置为&ldquo;No&rdquo;（否）以禁用。</li>
</ul>
</li>
<li>
<p><span>审核评论：</span></p>
<ul>
<li>在&ldquo;Product Reviews&rdquo;页面，找到&ldquo;Product Review Approval&rdquo;（产品评论批准）部分。</li>
<li>将&ldquo;New Reviews&rdquo;（新评论）设置为&ldquo;Approved&rdquo;（批准）或&ldquo;Pending&rdquo;（待定）。</li>
</ul>
</li>
</ul>
<p><span>步骤 6：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>注意事项：</span></p>
<ol>
<li>
<p><span>审慎删除评论：</span> 在删除评论之前，请确保您真的需要删除它们，并且了解删除评论可能对客户信任和购买决策产生的影响。</p>
</li>
<li>
<p><span>定期审核：</span> 定期审核和回复评论，以维护积极的在线社区和客户关系。</p>
</li>
</ol>]]></description>
      <pubDate>Sun, 11 Feb 2024 08:25:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中更改商店电子邮件地址的详细步骤]]></title>
      <link>https://www.360magento.com/blog/how-change-store-email-addresses-magento/</link>
      <description><![CDATA[<p>通过浏览器访问Magento 2后台，输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入系统配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店），然后选择&ldquo;Configuration&rdquo;（配置）。</p>
<p><span>步骤 3：配置Store Email Addresses</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，展开&ldquo;General&rdquo;（常规）并选择&ldquo;Store Email Addresses&rdquo;（商店电子邮件地址）。</p>
<p><span>步骤 4：更新General Contact（一般联系）地址</span></p>
<p>在&ldquo;Store Email Addresses&rdquo;页面上，您将看到&ldquo;General Contact&rdquo;（一般联系）部分。在这里，您可以更改与一般店铺联系相关的电子邮件地址。</p>
<ul>
<li><span>Sender Name：</span> 输入显示为邮件发送者的名称。</li>
<li><span>Sender Email：</span> 输入商店的一般联系电子邮件地址。</li>
</ul>
<p><span>步骤 5：更新Sales Representative（销售代表）地址（可选）</span></p>
<p>如果您的商店需要与销售相关的电子邮件通知，您可以在&ldquo;Sales Representative&rdquo;（销售代表）部分更新相关信息。</p>
<ul>
<li><span>Sender Name：</span> 输入显示为邮件发送者的名称。</li>
<li><span>Sender Email：</span> 输入销售代表的电子邮件地址。</li>
</ul>
<p><span>步骤 6：更新Customer Support（客户支持）地址（可选）</span></p>
<p>如果您的商店提供客户支持，您可以在&ldquo;Customer Support&rdquo;（客户支持）部分更新相关信息。</p>
<ul>
<li><span>Sender Name：</span> 输入显示为邮件发送者的名称。</li>
<li><span>Sender Email：</span> 输入客户支持的电子邮件地址。</li>
</ul>
<p><span>步骤 7：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对商店电子邮件地址的更改。</p>
<p><span>步骤 8：清理缓存</span></p>]]></description>
      <pubDate>Sat, 10 Feb 2024 07:15:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改 Favicon]]></title>
      <link>https://www.360magento.com/blog/how-upload-favicon-magento-2/</link>
      <description><![CDATA[<p>Favicon是显示在浏览器标签页和书签上的小图标，对于网站来说是一个重要的视觉元素。在Magento 2中，更改Favicon是一项简单的任务，以下是详细的步骤：</p>
<p><span>步骤 1：准备Favicon图标</span></p>
<p>首先，准备一个正方形的图标，通常推荐大小为16x16像素或32x32像素。确保图标的文件格式为.ico（Windows图标格式）或.png。</p>
<p><span>步骤 2：上传Favicon图标</span></p>
<p>将准备好的Favicon图标上传到Magento 2的媒体文件夹。您可以使用FTP或Magento后台的媒体库来完成此操作。推荐将图标命名为<code>favicon.ico</code>以确保兼容性。</p>
<p><span>步骤 3：登录Magento后台</span></p>
<p>通过浏览器访问Magento 2后台，输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 4：进入主题配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Content&rdquo;（内容），然后选择&ldquo;Configuration&rdquo;（配置）。</p>
<p><span>步骤 5：选择当前主题</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，找到您当前使用的主题。在&ldquo;Themes&rdquo;部分，展开当前主题的选项。</p>
<p><span>步骤 6：配置Favicon设置</span></p>
<p>在当前主题的选项下，找到&ldquo;Favicon&rdquo;部分。在&ldquo;Favicon Icon&rdquo;字段中，输入您上传的Favicon图标的路径。例如，如果您上传的图标在<code>/media/favicon.ico</code>，则在该字段中输入<code>/media/favicon.ico</code>。</p>
<p><span>步骤 7：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对Favicon的更改。</p>
<p><span>步骤 8：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>步骤 9：刷新浏览器缓存</span></p>
<p>刷新您的浏览器缓存，或者在浏览器中打开一个新的标签页，以查看更改后的Favicon。</p>]]></description>
      <pubDate>Fri, 09 Feb 2024 07:12:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中将小部件插入侧边栏的详细步骤]]></title>
      <link>https://www.360magento.com/blog/how-to-insert-a-widget-into-sidebar-magento/</link>
      <description><![CDATA[<p>在Magento 2中，使用小部件（Widget）是一种方便的方法，可以在网站的侧边栏中添加各种自定义内容，例如广告、促销信息或其他相关信息。以下是在Magento 2中将小部件插入侧边栏的步骤：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>在您的Magento 2安装目录中，通过浏览器访问Magento后台。输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：创建小部件</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Content&rdquo;（内容），然后选择&ldquo;Widgets&rdquo;（小部件）。</p>
<p>在&ldquo;Widgets&rdquo;页面上，点击右上角的&ldquo;Add Widget&rdquo;（添加小部件）按钮。</p>
<p><span>步骤 3：选择小部件类型</span></p>
<p>在&ldquo;Type&rdquo;（类型）下拉菜单中，选择要插入侧边栏的小部件类型。通常，您可以选择&ldquo;CMS Static Block&rdquo;（CMS静态块）或其他适合您需求的小部件类型。</p>
<p><span>步骤 4：配置小部件参数</span></p>
<p>根据所选小部件类型，您将看到不同的配置选项。例如，如果选择&ldquo;CMS Static Block&rdquo;（CMS静态块），您需要选择要显示的静态块。</p>
<p>填写所需的配置信息，确保选择正确的Store View（商店视图），然后点击&ldquo;Save and Continue Edit&rdquo;（保存并继续编辑）。</p>
<p><span>步骤 5：指定布局更新</span></p>
<p>在左侧导航栏中，选择&ldquo;Layout Updates&rdquo;（布局更新）。然后，点击&ldquo;Add Layout Update&rdquo;（添加布局更新）按钮。</p>
<p>在&ldquo;Display On&rdquo;（显示在）下拉菜单中，选择&ldquo;Specified Page&rdquo;（指定页面），并选择您希望小部件显示的页面。</p>
<p><span>步骤 6：保存小部件配置</span></p>
<p>点击页面右上角的&ldquo;Save&rdquo;（保存）按钮，以保存小部件的配置。</p>
<p><span>步骤 7：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>步骤 8：刷新前端页面</span></p>
<p>刷新您的网站前端页面，您将看到已添加的小部件显示在指定的侧边栏位置上。</p>]]></description>
      <pubDate>Thu, 08 Feb 2024 07:11:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中启用模板路径提示的详细步骤]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-template-path-hints-magento/</link>
      <description><![CDATA[<p>Magento 2提供了一种方便的开发工具，即模板路径提示，它可以在前端页面上显示每个块的模板路径。以下是在Magento 2中启用和使用模板路径提示的步骤：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>在您的Magento 2安装目录中，通过浏览器访问Magento后台。输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入系统配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店）下的&ldquo;Configuration&rdquo;（配置）选项。</p>
<p><span>步骤 3：配置Developer模式</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，左侧导航栏中展开&ldquo;Advanced&rdquo;（高级）并选择&ldquo;Developer&rdquo;（开发者）。</p>
<ul>
<li>在&ldquo;Debug&rdquo;（调试）部分，将&ldquo;Enabled Template Path Hints for Storefront&rdquo;（在商店前端启用模板路径提示）设置为&ldquo;Yes&rdquo;（是）。</li>
<li>将&ldquo;Enabled Template Path Hints for Admin&rdquo;（在管理后台启用模板路径提示）设置为&ldquo;Yes&rdquo;（是）。</li>
</ul>
<p><span>步骤 4：配置Developer Client Restrictions（可选）</span></p>
<p>在&ldquo;Developer&rdquo;页面上，继续滚动到&ldquo;Developer Client Restrictions&rdquo;部分。</p>
<ul>
<li>如果您想仅在特定IP地址上显示模板路径提示，将&ldquo;Allowed IPs (comma-separated)&rdquo;（允许的IP地址，用逗号分隔）设置为相应的IP地址。</li>
</ul>
<p><span>步骤 5：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对系统配置的更改。</p>
<p><span>步骤 6：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>步骤 7：刷新前端页面</span></p>
<p>在前端页面上，刷新浏览器，您将看到每个块的模板路径提示。</p>]]></description>
      <pubDate>Wed, 07 Feb 2024 08:03:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中启用CSS和JavaScript文件合并的步骤]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-merge-css-javascript-magento/</link>
      <description><![CDATA[<p>Magento 2允许您通过合并CSS和JavaScript文件来减少HTTP请求，从而提高页面加载速度。以下是在Magento 2中启用此功能的步骤：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>在您的Magento 2安装目录中，通过浏览器访问Magento后台。输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入系统配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店）下的&ldquo;Configuration&rdquo;（配置）选项。</p>
<p><span>步骤 3：配置CSS合并</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，左侧导航栏中展开&ldquo;Advanced&rdquo;（高级）并选择&ldquo;Developer&rdquo;（开发者）下的&ldquo;CSS Settings&rdquo;（CSS设置）。</p>
<ul>
<li>将&ldquo;Merge CSS Files&rdquo;（合并CSS文件）设置为&ldquo;Yes&rdquo;（是）。</li>
<li>将&ldquo;Minify CSS Files&rdquo;（压缩CSS文件）设置为&ldquo;Yes&rdquo;（是）（可选）。</li>
<li>将&ldquo;Generate Source Maps&rdquo;（生成源映射）设置为&ldquo;Yes&rdquo;（是）（可选）。</li>
</ul>
<p><span>步骤 4：配置JavaScript合并</span></p>
<p>在&ldquo;Developer&rdquo;页面上，继续滚动到&ldquo;JavaScript Settings&rdquo;（JavaScript设置）部分。</p>
<ul>
<li>将&ldquo;Enable JavaScript Bundling&rdquo;（启用JavaScript捆绑）设置为&ldquo;Yes&rdquo;（是）。</li>
<li>将&ldquo;Minify JavaScript Files&rdquo;（压缩JavaScript文件）设置为&ldquo;Yes&rdquo;（是）（可选）。</li>
<li>将&ldquo;Enable JavaScript Source Maps&rdquo;（启用JavaScript源映射）设置为&ldquo;Yes&rdquo;（是）（可选）。</li>
</ul>
<p><span>步骤 5：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对系统配置的更改。</p>
<p><span>步骤 6：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>]]></description>
      <pubDate>Tue, 06 Feb 2024 03:59:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用客户登录/注册验证码]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-customer-login-register-captcha-magento/</link>
      <description><![CDATA[<p>启用验证码是一项有效的安全措施，可以防止自动化攻击和恶意注册。在Magento 2中，您可以通过以下步骤启用客户登录和注册时的验证码：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>在您的Magento 2安装目录中，通过浏览器访问Magento后台。输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入系统配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店）下的&ldquo;Configuration&rdquo;（配置）选项。</p>
<p><span>步骤 3：配置验证码设置</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，左侧导航栏中展开&ldquo;Customers&rdquo;（客户）并选择&ldquo;Customer Configuration&rdquo;（客户配置）。</p>
<ul>
<li>在&ldquo;Create New Account Options&rdquo;（创建新帐户选项）下，将&ldquo;Enable CAPTCHA on Storefront&rdquo;（在商店前端启用验证码）设置为&ldquo;Yes&rdquo;（是）。</li>
<li>在&ldquo;Login Options&rdquo;（登录选项）下，将&ldquo;Enable CAPTCHA in Admin&rdquo;（在管理后台启用验证码）设置为&ldquo;Yes&rdquo;（是）（可选）。</li>
</ul>
<p><span>步骤 4：选择验证码类型</span></p>
<p>在&ldquo;Customer Configuration&rdquo;页面上，继续滚动到&ldquo;CAPTCHA&rdquo;部分。</p>
<ul>
<li>在&ldquo;Forms&rdquo;（表单）下，选择要启用验证码的表单，例如&ldquo;Create User&rdquo;（创建用户）和&ldquo;Login&rdquo;（登录）。</li>
<li>在&ldquo;Displaying Mode&rdquo;（显示模式）下，选择&ldquo;Always&rdquo;（始终）或&ldquo;After Number of Attempts to Login&rdquo;（登录尝试次数后）。</li>
</ul>
<p><span>步骤 5：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对系统配置的更改。</p>
<p><span>步骤 6：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>]]></description>
      <pubDate>Mon, 05 Feb 2024 07:00:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中启用单一商店模式的步骤和注意事项]]></title>
      <link>https://www.360magento.com/blog/how-enable-single-store-mode-magento-2/</link>
      <description><![CDATA[<p>Magento 2 默认以多商店模式运行，这意味着您可以在一个Magento实例中管理多个商店。但在某些情况下，可能需要将系统配置为单一商店模式，特别是在只需要一个商店的情况下。以下是在Magento 2中启用单一商店模式的步骤：</p>
<p><span>步骤 1：登录Magento后台</span></p>
<p>在您的Magento 2安装目录中，通过浏览器访问Magento后台。输入管理员用户名和密码，登录到Magento管理面板。</p>
<p><span>步骤 2：进入系统配置</span></p>
<p>在Magento管理面板的左侧导航栏中，找到并点击&ldquo;Stores&rdquo;（商店）下的&ldquo;Configuration&rdquo;（配置）选项。</p>
<p><span>步骤 3：选择单一商店模式</span></p>
<p>在&ldquo;Configuration&rdquo;页面上，左侧导航栏中展开&ldquo;General&rdquo;（常规）并选择&ldquo;General&rdquo;下的&ldquo;Single-Store Mode&rdquo;（单一商店模式）。</p>
<p><span>步骤 4：启用单一商店模式</span></p>
<p>在&ldquo;Single-Store Mode&rdquo;选项中，将&ldquo;Enable Single-Store Mode&rdquo;（启用单一商店模式）设置为&ldquo;Yes&rdquo;（是）。</p>
<p><span>步骤 5：保存配置更改</span></p>
<p>点击页面右上角的&ldquo;Save Config&rdquo;（保存配置）按钮，以保存对系统配置的更改。</p>
<p><span>步骤 6：清理缓存</span></p>
<p>在Magento 2中，配置更改后通常需要清理缓存。在Magento管理面板的左侧导航栏中，选择&ldquo;System&rdquo;（系统）下的&ldquo;Cache Management&rdquo;（缓存管理）。然后，点击&ldquo;Flush Magento Cache&rdquo;（清除Magento缓存）以确保新的配置生效。</p>
<p><span>注意事项：</span></p>
<ol>
<li>
<p><span>备份数据库和文件：</span> 在进行系统配置更改之前，请务必备份Magento数据库和文件。这样可以在发生意外情况时恢复系统状态。</p>
</li>
<li>
<p><span>检查扩展和主题兼容性：</span> 一些Magento扩展和主题可能依赖于多商店模式，因此在切换到单一商店模式之前，请确保您使用的扩展和主题与该模式兼容。</p>
</li>
<li>
<p><span>审查网站链接：</span> 在单一商店模式下，网站链接的结构可能会发生变化。确保在更改模式后，您的网站链接仍然正常工作，以避免SEO和用户体验方面的问题。</p>
</li>
<li>
<p><span>测试功能和购物流程：</span> 在切换到单一商店模式后，仔细测试您的网站功能和购物流程，确保一切正常运作。</p>
</li>
</ol>]]></description>
      <pubDate>Sun, 04 Feb 2024 08:55:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[创建新的 Magento 2 管理员用户]]></title>
      <link>https://www.360magento.com/blog/how-to-create-new-admin-user-magento-2/</link>
      <description><![CDATA[<h2 class="wp-block-heading" id="604957466-0euw2p">通过命令行创建 Magento 2 管理员帐户</h2>
<p>创建管理员帐户/用户的另一种方法是，我们可以通过命令行（cli）创建新的管理员用户。以下是具体操作方法。</p>
<p>转到 Magento 2 根文件夹，运行创建一个新的管理员用户命令行：</p>
<pre class="wp-block-code"><code>php bin/magento admin:user:create
</code></pre>
<p>它会询问您：用户名、密码、电子邮件、名字和姓氏。</p>
<p>这是我们填写的内容：</p>
<pre class="wp-block-code"><code>Admin user: YourName
Admin password: YourPassword
Admin email: YourName@email.com
Admin first name: YourName
Admin last name: Team
</code></pre>
<p>并得到结果：</p>
<pre class="wp-block-code"><code>Created Magento administrator user named YourName</code></pre>]]></description>
      <pubDate>Sat, 03 Feb 2024 07:51:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 缓存管理：12 种缓存类型]]></title>
      <link>https://www.360magento.com/blog/10-cache-types-how-manage-cache-magento-2/</link>
      <description><![CDATA[<h2 class="wp-block-heading" id="1085759115-1jpjjf"><br class="Apple-interchange-newline" />12 Magento 2 缓存类型</h2>
<p>具体来说，<span>Cache</span>的不同类别是：</p>
<ul>
<li><code>Configuration (config)</code>：调整配置文件后，需要刷新它们，包括配置并存储特定设置</li>
<li><code>Layouts (layout)</code>：调整布局文件后，需要刷新它们，包括所有组件中编译后的页面布局</li>
<li><code>Blocks HTML output (block_html)</code>：调整视图层后，需要刷新它们，包括每个块的页面片段</li>
<li><code>Collections Data (collections)</code>：通过Magento，它可以自动刷新数据库查询。但是，自定义模块可能会写入导致 Magento 无法自行清理的条目，以防 Magento 无法清理，因此我们需要清理缓存</li>
<li><code>Reflection Data (reflection)</code>：API接口反射数据将被刷新</li>
<li><code>Database DDL operations (db_ddl)</code>：它可以由Magento自动刷新，但第3方可以在对 进行自定义更改后添加更多数据，<code>database schema</code>这可以清理缓存</li>
<li><code>EAV types and attributes (eav)</code>：将有关实体属性的元数据放入缓存中，一般情况下不应该刷新缓存</li>
<li><code>Integrations Configuration (config_integration)</code>：在您的商店中缓存已编译的集成。添加新的或更改现有的集成后进行清理</li>
<li><code>Integrations API Configuration (config_integration_api)</code>：商店集成的编译集成API配置</li>
<li><code>Page Cache (full_page)</code>：此缓存链接 HTML 页面，因此有必要定期清理此类缓存</li>
<li><code>Translations (translate)</code>：合并所有模块的翻译后，合并缓存将被清除</li>
<li><code>Web Services Configuration (config_webservice)</code>: 缓存<code>Web API Structure</code></li>
</ul>]]></description>
      <pubDate>Fri, 02 Feb 2024 07:48:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento开发中的10个小技巧，让您的项目更高效]]></title>
      <link>https://www.360magento.com/blog/magento-dev-totips/</link>
      <description><![CDATA[<ol>
<li>
<p><span>使用代码段（Snippets）提高效率：</span> 利用您的IDE（集成开发环境）或编辑器中的代码段功能，预定义一些常用的Magento代码片段，如创建新模块、添加布局文件等。这样可以加快编码速度，减少重复性劳动。</p>
</li>
<li>
<p><span>使用Magento命令行工具：</span> Magento命令行工具（CLI）提供了许多有用的命令，如清理缓存、重建索引、安装模块等。熟练使用这些命令可以在开发过程中省时省力。</p>
</li>
<li>
<p><span>启用开发者模式：</span> 在开发环境中启用Magento的开发者模式，这可以提供更详细的错误报告和调试信息。在<code>app/bootstrap.php</code>文件中设置<code>MAGENTO_MODE</code>为<code>developer</code>即可。</p>
</li>
</ol><ol start="4">
<li>
<p><span>使用Xdebug进行调试：</span> 集成Xdebug来进行代码调试，这样可以更轻松地识别和解决问题。配置您的IDE以与Xdebug一起使用，并设置断点进行逐步调试。</p>
</li>
<li>
<p><span>定期清理日志和临时文件：</span> 定期清理Magento的日志文件和临时文件，以保持系统性能。您可以设置定时任务或使用Magento命令行工具来自动执行这些清理操作。</p>
</li>
<li>
<p><span>了解Magento事件（Events）：</span> 使用Magento的事件体系，它允许您在系统的不同部分插入自定义代码。这是扩展Magento功能的强大方式，同时保持模块的松耦合性。</p>
</li>
<li>
<p><span>优化数据库查询：</span> 编写高效的数据库查询是关键之一。使用Magento的数据库抽象层和索引，避免使用直接SQL查询，以确保查询的效率和可维护性。</p>
</li>
<li>
<p><span>使用布局和块缓存：</span> 利用Magento的布局和块缓存，减少页面加载时间。了解何时使用缓存，以及如何在需要时清除缓存，有助于提高网站性能。</p>
</li>
<li>
<p><span>合理使用Magento UI组件：</span> Magento的UI组件提供了丰富的前端功能。了解如何正确使用这些组件，以及如何根据项目需要进行自定义，可以使您的前端开发更加灵活。</p>
</li>
<li>
<p><span>版本控制和部署策略：</span> 使用版本控制系统（如Git）来管理您的Magento项目。定义清晰的部署策略，包括配置文件、数据库迁移等，以确保在不同环境中的一致性。</p>
</li>
</ol>
<p><span>结论：</span> 这些小技巧可能看似微不足道，但在Magento开发过程中，它们可以累积成为提高效率和代码质量的关键因素。通过灵活运用这些技巧，您将更轻松地应对各种开发挑战，提升Magento项目的成功实施。</p>]]></description>
      <pubDate>Thu, 01 Feb 2024 07:36:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2的最新技术趋势]]></title>
      <link>https://www.360magento.com/blog/magento-new-technology-trends/</link>
      <description><![CDATA[<p>尊敬的Magento2开发者们，</p>
<p>欢迎回到我们的博客！今天，我们将深入探讨Magento2的一些最新技术趋势，帮助您更好地了解如何提升您的开发效率和用户体验。让我们一起来看看吧！</p>
<p><span>1. Magento PWA Studio的崭新体验</span></p>
<p>随着移动设备在电商中的重要性不断增加，Magento PWA Studio成为开发者们的热门选择。采用渐进式Web应用程序（PWA）的理念，Magento PWA Studio能够提供更快速、流畅的用户体验，并在各种设备上保持一致性。我们建议您深入研究并考虑在您的项目中采用PWA技术，以提高网站性能和用户满意度。</p>
<p><span>2. Magento Cloud的便捷部署与扩展性</span></p>
<p>随着云计算的普及，Magento Cloud提供了一种简化部署和扩展性的解决方案。借助云服务，您可以轻松部署、管理和扩展您的Magento2实例，同时受益于高级安全性和性能优化。我们建议您考虑将您的Magento2项目迁移到云平台，以获得更灵活的扩展和更好的性能。</p>
<p><span>3. GraphQL的数据查询灵活性</span></p>
<p>Magento2引入了GraphQL，这是一种强大的数据查询语言，能够帮助您更精准地获取所需的数据，减少不必要的负载。通过合理利用GraphQL，您可以提高数据查询的效率，并为客户提供更快速的响应时间。在您的开发过程中，尝试使用GraphQL来优化数据获取流程，提升网站性能。</p>
<p><span>4. Magento2.4.x的安全更新</span></p>
<p>安全始终是我们开发者关注的焦点。确保您的Magento2实例始终更新到最新版本，以获取最新的安全补丁和功能改进。Magento2.4.x系列引入了一系列安全性增强措施，包括CSRF攻击防护和更强大的身份验证机制。保持更新，是确保您的网站安全的关键步骤。</p>]]></description>
      <pubDate>Thu, 18 Jan 2024 08:44:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2 中 ngnix 配置多站点]]></title>
      <link>https://www.360magento.com/blog/magento2-ngnix-config/</link>
      <description><![CDATA[<p>在 Magento 2 中，配置多站点（Multi-Store）需要特殊的 Nginx 配置，因为 Magento 2 支持在同一个安装中运行多个站点。以下是一个简单的示例，假设您有两个站点，分别是 site1.com 和 site2.com：</p>
<div class="bg-black rounded-md">
<pre>server {
    listen 80;
    server_name site1.com www.site1.com;

    set $MAGE_ROOT /path/to/magento2;
    set $MAGE_MODE production;

    include /path/to/magento2/nginx.conf.sample;
}
 
server {
    listen 80;
    server_name site2.com www.site2.com;

    set $MAGE_ROOT /path/to/magento2;
    set $MAGE_MODE production;

    include /path/to/magento2/nginx.conf.sample;
}
</pre>
</div>
<p>在这个配置中，每个 <code>server</code> 块对应一个站点，通过 <code>server_name</code> 指定了该 server 块所处理的域名。</p>
<p>请将 <code>/path/to/magento2</code> 替换为您 Magento 2 安装的实际路径。并确保 Nginx 配置文件 <code>/path/to/magento2/nginx.conf.sample</code> 存在并包含 Magento 2 的相关配置。</p>
<p>Magento 2 通常附带一个名为 <code>nginx.conf.sample</code> 的示例配置文件，您可以在 Magento 安装目录的 <code>pub</code> 子目录下找到它。确保配置文件中的 <code>fastcgi_pass</code> 和其他相关设置正确指向您的 Magento 2 安装。</p>
<p>最后，确保每个域名的 DNS 记录正确指向您的服务器 IP 地址。配置完成后，重新加载或重启 Nginx 使配置生效。</p>]]></description>
      <pubDate>Wed, 17 Jan 2024 08:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 中ngnix 和Apache 配置 ]]></title>
      <link>https://www.360magento.com/blog/magento2-web-ngnix-apach/</link>
      <description><![CDATA[<p>在 Magento 2 中，您可以选择使用 Nginx 或 Apache 作为 web 服务器。以下是简单的示例配置，分别适用于 Nginx 和 Apache。</p>
<h3>Nginx 配置示例：<br /><br /></h3>
<pre>server {
    listen 80;
    server_name your_domain.com www.your_domain.com;

    set $MAGE_ROOT /path/to/your/magento2;
    set $MAGE_MODE production;

    include /path/to/your/magento2/nginx.conf.sample;
}
</pre>
<p>请将 <code>/path/to/your/magento2</code> 替换为您 Magento 2 安装的实际路径。确保 Nginx 配置文件 <code>/path/to/your/magento2/nginx.conf.sample</code> 存在并包含 Magento 2 的相关配置。</p>
<h3>Apache 配置示例：</h3>
<p>&lt;VirtualHost *:80&gt;<br /> ServerAdmin webmaster@your_domain.com<br /> DocumentRoot "/path/to/your/magento2"<br /> ServerName your_domain.com<br /> ServerAlias www.your_domain.com</p>
<p>&lt;Directory "/path/to/your/magento2"&gt;<br /> Options Indexes FollowSymLinks<br /> AllowOverride All<br /> Require all granted<br /> &lt;/Directory&gt;</p>
<p>ErrorLog "/var/log/apache2/your_domain_error.log"<br /> CustomLog "/var/log/apache2/your_domain_access.log" combined<br />&lt;/VirtualHost&gt;</p>
<p>同样，请将 <code>/path/to/your/magento2</code> 替换为您 Magento 2 安装的实际路径。确保 Apache 的虚拟主机配置文件包含了必要的设置，如 <code>AllowOverride All</code> 以启用 <code>.htaccess</code> 文件。</p>
<p>在上述配置中，您需要确保 Nginx 或 Apache 的配置正确指向 Magento 2 的安装目录，并且相关的访问和错误日志路径是正确的。</p>
<p>此外，如果您有多个站点（Multi-Store）需要配置，请根据具体情况修改上述配置文件，并确保 Magento 2 的配置文件（如 <code>nginx.conf.sample</code>）中也正确设置了站点信息。</p>
<p>配置完成后，请重新加载或重启相应的 web 服务器，以使配置生效。</p>
<pre><span style="white-space: normal;">
</span></pre>
<div id="gtx-trans" style="position: absolute; left: -51px; top: 28px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 16 Jan 2024 03:22:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 未来趋势]]></title>
      <link>https://www.360magento.com/blog/magento-future-trends/</link>
      <description><![CDATA[<p>Magento作为一流的电商平台，一直在不断演进以适应市场和技术的变化。在这篇文章中，我们将深入研究Magento未来的趋势，以及在下一代电商体验中将会迎来的创新和变革。</p>
<h3>1. <span>头脑购物体验</span></h3>
<p>未来的Magento电商平台将更加注重提供头脑购物（Mindful Shopping）体验。这包括通过人工智能和个性化推荐系统，更深入地了解用户需求，提供更符合其兴趣和偏好的产品。</p>
<h3>2. <span>增强现实（AR）和虚拟现实（VR）整合</span></h3>
<p>Magento将更多地整合增强现实和虚拟现实技术，为用户提供更丰富的购物体验。通过AR，用户可以在实际环境中预览产品，而VR则为他们提供沉浸式的虚拟商店体验。</p>
<h3>3. <span>社交购物整合</span></h3>
<p>未来的Magento将更深度地整合社交媒体和购物体验。用户可以直接在社交平台上发现产品并完成购买，同时商家可以通过社交媒体建立更紧密的客户关系。</p>
<h3>4. <span>可持续和负责任的电商</span></h3>
<p>Magento未来将更加关注可持续和负责任的电商实践。这包括推动供应链的可追溯性、提供环保选项以及支持社会责任项目。这样的做法将有助于塑造品牌形象，吸引越来越注重可持续性的消费者。</p>
<h3>5. <span>无缝跨渠道体验</span></h3>
<p>Magento未来版本将进一步提升跨渠道购物的无缝体验。无论用户是通过电脑、平板还是手机，他们都能够享受一致的购物体验，从而提高用户忠诚度和购物转化率。</p>
<h3>6. <span>智能物流和快速交付</span></h3>
<p>未来Magento将更加注重智能物流系统，通过实时数据和智能算法提高物流效率。同时，支持更快速和可靠的配送方式，以满足用户对于即时交付的需求。</p>
<div id="gtx-trans" style="position: absolute; left: -123px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 15 Jan 2024 08:36:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2的购物车体验]]></title>
      <link>https://www.360magento.com/blog/magento2-engaging-shopping-cart/</link>
      <description><![CDATA[<h3>1. 显示清晰的购物车总览</h3>
<p>确保购物车页面显示清晰而详细的购物车总览信息，包括产品名称、数量、价格和小计。这有助于用户一目了然地了解其购物车内的商品。</p>
<h3>2. 提供即时更新</h3>
<p>通过使用Ajax技术，实现购物车页面的即时更新。当用户更改产品数量或删除产品时，购物车总览应立即反映这些变化，而无需刷新整个页面。</p>
<h3>3. 强调优惠和促销信息</h3>
<p>如果有适用的优惠券或促销活动，确保这些信息在购物车页面中得到明显的展示。这可以激励用户继续购物，并提高购物车价值。</p>
<h3>4. 提供购物车内商品推荐</h3>
<p>在购物车页面底部或侧边，显示购物车内商品的相关推荐。这有助于引导用户发现其他可能感兴趣的产品，增加交叉销售机会。</p>
<h3>5. 实现购物车内编辑功能</h3>
<p>允许用户在购物车内直接编辑产品的数量、修改选项或移除商品。提供清晰的编辑界面，确保用户能够轻松进行调整。</p>
<h3>6. 购物车响应式设计</h3>
<p>确保购物车页面在各种设备上都能够呈现出色。购物车的响应式设计应适应不同屏幕尺寸，提供一致的用户体验。</p>
<h3>7. 引导用户进入结算流程</h3>
<p>在购物车页面明确显示结算按钮，引导用户进入结算流程。提供简化的结算过程，减少步骤，提高用户的购物完成率。</p>
<h3>8. 显示购物车内产品库存状态</h3>
<p>在购物车页面显示产品的实时库存状态，以避免用户在结算时遇到缺货情况。这可以帮助用户做出明智的购物决策。</p>
<h3>9. 提供购物车内产品搜索</h3>
<p>如果购物车中有大量产品，提供购物车内产品搜索功能。这使用户可以快速找到特定的商品，提高购物车内产品的可管理性。</p>
<h3>10. 优化加载速度</h3>
<p>确保购物车页面的加载速度迅速。优化页面元素和资源，减少不必要的HTTP请求，以确保购物车页面在各种网络条件下都能够快速加载。</p>]]></description>
      <pubDate>Sun, 14 Jan 2024 07:07:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何提高Magento2结账流程]]></title>
      <link>https://www.360magento.com/blog/magento2-checkout-optimization/</link>
      <description><![CDATA[<p>结账流程是电子商务网站上最关键的一环之一，直接关系到用户是否最终完成购买。在这篇博客文章中，我们将深入探讨如何在Magento 2主题开发中优化结账流程，以提高转化率并提供无缝的购物体验。</p>
<h3>1. 简化结账步骤</h3>
<p>减少结账流程的步骤数量，将多个步骤合并为一个页面或模态框。用户在短时间内完成结账流程，减少因过长流程而放弃购物车的可能性。</p>
<h3>2. 清晰的结账进度指示</h3>
<p>提供清晰的结账进度指示，让用户了解他们在结账流程中的位置。这可以减轻用户焦虑感，增加完成结账的信心。</p>
<h3>3. 提供多种支付选项</h3>
<p>确保结账页面提供多种支付选项，包括信用卡、PayPal、银行转账等。给予用户灵活性，选择他们偏好的支付方式。</p>
<h3>4. 支持快速注册和访客结账</h3>
<p>允许用户使用访客结账或快速注册选项，减少注册流程中的障碍。提供社交媒体登录选项，简化新用户的注册过程。</p>
<h3>5. 自动填充地址和支付信息</h3>
<p>通过使用自动填充技术，预填充用户已保存的地址和支付信息，减少用户在结账过程中输入的工作。这有助于加速结账速度。</p>
<h3>6. 引导用户解决错误</h3>
<p>如果用户在结账过程中遇到错误或遗漏信息，提供明确的错误消息和引导，帮助用户快速解决问题。避免用户因错误而中断结账流程。</p>
<h3>7. 透明的运费和税费信息</h3>
<p>在结账页面清晰显示运费和税费信息，以避免用户在最后一步才发现额外费用。透明的价格信息有助于建立用户的信任感。</p>
<h3>8. 提供订单总览</h3>
<p>在结账页面提供订单总览，包括产品列表、价格明细和总金额。用户应该在确认订单前清晰地了解他们的购买详情。</p>
<h3>9. 实现订单跟踪和通知</h3>
<p>让用户在结账后能够跟踪他们的订单，并通过电子邮件或短信接收订单更新通知。这有助于提供良好的客户服务体验。</p>
<h3>10. 移动设备友好</h3>
<p>确保结账流程在移动设备上能够流畅运行。通过响应式设计和移动优化来提供在小屏幕上的良好用户体验。</p>
<div id="gtx-trans" style="position: absolute; left: -42px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 14 Jan 2024 03:09:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 主题开发：集成社交媒体分享功能]]></title>
      <link>https://www.360magento.com/blog/magento2-social-media-sharing/</link>
      <description><![CDATA[<h3>1. 选择社交媒体平台</h3>
<p>在开始之前，确定您想要在网站上集成哪些社交媒体平台的分享功能。常见的选择包括Facebook、Twitter、LinkedIn、Pinterest等。确保选择的平台与您的目标受众和业务目标相匹配。</p>
<h3>2. 获取社交媒体分享按钮代码</h3>
<p>每个社交媒体平台都提供用于在网站上添加分享按钮的官方代码。访问相应的社交媒体开发者页面，获取分享按钮的代码片段。</p>
<h3>3. 创建一个专用的社交媒体分享区域</h3>
<p>在Magento 2主题中，创建一个专用的区域，用于容纳社交媒体分享按钮。通常，这可以在您网站的页脚、顶部导航栏或文章页面的侧边栏中实现。</p>
<h3>4. 将分享按钮代码嵌入主题</h3>
<p>在Magento 2主题的相应文件中，将获取的社交媒体分享按钮代码嵌入到您创建的社交媒体分享区域。这通常涉及到在HTML文件或布局文件中添加相应的代码片段。</p>
<h3>5. 优化分享按钮样式</h3>
<p>确保社交媒体分享按钮与您的网站主题一致，并符合品牌风格。您可以使用CSS样式表对这些按钮进行进一步的样式调整，以使它们看起来更加吸引人。</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"><span class="hljs-comment">/* 示例CSS样式表 */</span> <span class="hljs-selector-class">.social-share-button</span> { <span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span> <span class="hljs-number">10px</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#333</span>; <span class="hljs-attribute">transition</span>: color <span class="hljs-number">0.3s</span> ease-in-out; }</code></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"> <span class="hljs-selector-class">.social-share-button</span><span class="hljs-selector-pseudo">:hover</span> { <span class="hljs-attribute">color</span>: <span class="hljs-number">#007bff</span>; } </code></div>
</div>
<h3>6. 测试社交媒体分享功能</h3>
<p>在完成集成后，通过测试确保社交媒体分享功能在不同浏览器和设备上正常工作。确保分享的内容（例如页面标题、描述）是准确的且可自定义的。</p>
<h3>7. 考虑使用社交媒体插件</h3>
<p>一些社交媒体平台提供插件或API，可以更深度地集成分享功能。考虑使用这些插件，以获得更多定制选项和用户交互功能。</p>]]></description>
      <pubDate>Sat, 13 Jan 2024 07:05:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 快速搜索功能]]></title>
      <link>https://www.360magento.com/blog/magento2-quick-search-enhancement/</link>
      <description><![CDATA[<h3>1. 集成Magento 2的内置搜索功能</h3>
<p>Magento 2已经内置了强大的搜索功能，包括全文搜索和自动完成。确保在主题中启用这些功能，并在Magento 2后台配置中进行相应的设置。</p>
<h3>2. 优化搜索建议</h3>
<p>通过在搜索建议中显示产品图像、价格和简短描述等信息，提高用户对搜索结果的了解。这可以通过调整主题的HTML和CSS来实现。</p>
<h3>3. 支持自定义搜索过滤器</h3>
<p>考虑支持自定义搜索过滤器，以便用户可以根据特定条件快速缩小搜索范围。这可以包括按类别、品牌或价格范围过滤搜索结果。</p>
<h3>4. 实施Ajax搜索</h3>
<p>使用Ajax技术实现即时搜索结果的加载，无需刷新整个页面。这样可以提高搜索速度，使用户在输入关键词时立即看到相关结果。</p>
<h3>5. 智能搜索建议</h3>
<p>利用智能搜索建议，根据用户输入的关键词提供相关而准确的建议。可以使用机器学习算法或预测性搜索技术来实现。</p>
<h3>6. 移动设备适配</h3>
<p>确保您的快速搜索功能在移动设备上同样友好。优化搜索建议的显示方式，确保在小屏幕上也能提供良好的用户体验。</p>
<h3>7. 提供搜索历史和热门搜索</h3>
<p>为用户提供搜索历史记录和热门搜索建议，帮助他们更快速地找到他们之前或其他用户常搜索的内容。</p>
<h3>8. 结合自动完成</h3>
<p>将自动完成功能与快速搜索相结合，确保用户在输入过程中能够快速找到他们需要的信息。</p>
<h3>9. 实时搜索反馈</h3>
<p>在进行搜索时，通过实时反馈告知用户搜索的进行状态。这可以包括加载指示器或其他提示，使用户知道系统正在工作。</p>]]></description>
      <pubDate>Sat, 13 Jan 2024 03:06:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 创建自定义商品详情页模板]]></title>
      <link>https://www.360magento.com/blog/magento2-custom-product-details-template/</link>
      <description><![CDATA[<p>Magento 2 提供了强大的商品管理系统，但通过创建自定义商品详情页模板，您可以进一步定制和优化商品展示。在这篇博客文章中，我们将深入探讨如何在Magento 2主题开发中创建自定义商品详情页模板，以满足您网站的独特需求。</p>
<h3>1. 了解Magento 2商品详情页结构</h3>
<p>在开始之前，深入了解Magento 2商品详情页的结构是至关重要的。商品详情页通常包括商品图像、价格、描述、属性、加入购物车按钮等元素。了解这些元素的布局和结构是创建自定义模板的第一步。</p>
<h3>2. 创建自定义主题</h3>
<p>确保您已经创建了自定义Magento 2主题。如果没有，请按照Magento 2主题开发的标准流程创建一个新主题，并将其设置为当前主题。</p>
<h3>3. 复制默认商品详情页模板</h3>
<p>在Magento 2主题文件夹中，找到默认商品详情页模板文件，通常位于：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-bash">vendor/magento/module-catalog/view/frontend/templates/product/view/details.phtml </code></div>
</div>
<p>将该文件复制到您的主题文件夹中，路径可能是：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/Magento_Catalog/templates/product/view/details.phtml </code></div>
</div>
<h3>4. 修改自定义模板</h3>
<p>在您复制的<code>details.phtml</code>文件中，您可以根据需要进行修改和定制。您可以添加、删除或调整各个商品详情页元素的排列和样式。</p>
<h3>5. 更新主题布局文件</h3>
<p>在Magento 2主题布局文件中，确保正确引用和加载您创建的自定义商品详情页模板。这通常可以在 <code>catalog_product_view.xml</code> 文件中完成。</p>
<h3>6. 添加自定义样式和脚本</h3>
<p>如果需要添加自定义样式或JavaScript脚本以增强商品详情页的外观和交互性，确保将它们添加到您的主题中的相应文件夹，如：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/web/css/custom-styles.css app/design/frontend/{Vendor}/{Theme}/web/js/custom-scripts.js </code></div>
</div>
<h3>7. 测试和优化</h3>
<p>通过在Magento 2商店中查看商品详情页，测试您的自定义模板。确保它在不同设备和浏览器上都能正常运行，并根据需要进行优化。</p>
<div id="gtx-trans" style="position: absolute; left: -26px; top: 527.969px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 12 Jan 2024 07:04:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 引入字体和图标]]></title>
      <link>https://www.360magento.com/blog/magento2-custom-fonts-icons/</link>
      <description><![CDATA[<p>在Magento 2主题开发中，引入定制字体和图标是提高网站独特性和品牌形象的重要步骤。在这篇博客文章中，我们将深入讨论如何在Magento 2主题中引入和使用定制字体和图标，以打造独特而吸引人的网站设计。</p>
<h3>1. 选择合适的字体</h3>
<p>在选择定制字体之前，考虑您网站的品牌风格和目标受众。您可以选择从Google Fonts、Adobe Fonts等提供商中挑选合适的字体，或者使用自定义字体文件。</p>
<h3>2. 下载和集成字体文件</h3>
<p>一旦选择了字体，下载相应的字体文件（通常包括woff、woff2、ttf等格式）。将这些字体文件添加到Magento 2主题的合适位置，通常是：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/web/fonts/ </code></div>
</div>
<h3>3. 创建字体样式表</h3>
<p>在Magento 2主题中创建一个新的CSS文件，用于定义您引入的字体样式。确保在样式表中正确设置字体路径：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"><span class="hljs-comment">/* 示例字体样式表 */</span> <span class="hljs-keyword">@font-face</span> { <span class="hljs-attribute">font-family</span>: <span class="hljs-string">'YourCustomFont'</span>; <span class="hljs-attribute">src</span>: <span class="hljs-built_in">url</span>(<span class="hljs-string">'../fonts/your-custom-font.woff2'</span>) <span class="hljs-built_in">format</span>(<span class="hljs-string">'woff2'</span>), <span class="hljs-built_in">url</span>(<span class="hljs-string">'../fonts/your-custom-font.woff'</span>) <span class="hljs-built_in">format</span>(<span class="hljs-string">'woff'</span>); <span class="hljs-attribute">font-weight</span>: normal; <span class="hljs-attribute">font-style</span>: normal; } <span class="hljs-selector-tag">body</span> { <span class="hljs-attribute">font-family</span>: <span class="hljs-string">'YourCustomFont'</span>, sans-serif; } </code></div>
</div>
<h3>4. 引入图标库</h3>
<p>除了字体，图标也是网站设计中的关键元素。您可以选择使用矢量图标库，如Font Awesome或Material Icons。引入图标库的步骤通常包括将样式表和字体文件引入主题中。</p>
<h3>5. 使用CSS样式设置图标</h3>
<p>在Magento 2主题中，通过CSS样式表设置图标的方式类似于字体。创建一个新的CSS文件，定义图标的样式：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"><span class="hljs-comment">/* 示例图标样式表 */</span> <span class="hljs-selector-class">.icon</span> { <span class="hljs-attribute">font-family</span>: <span class="hljs-string">'Font Awesome'</span>; <span class="hljs-comment">/* 或其他图标库的名称 */</span> <span class="hljs-attribute">font-weight</span>: normal; <span class="hljs-attribute">font-style</span>: normal; } <span class="hljs-comment">/* 使用图标 */</span> <span class="hljs-selector-class">.custom-icon</span><span class="hljs-selector-pseudo">::before</span> { <span class="hljs-attribute">content</span>: <span class="hljs-string">'\f123'</span>; <span class="hljs-comment">/* 替换为您所选择图标的Unicode字符 */</span> } </code></div>
</div>
<h3>6. 更新主题布局</h3>
<p>在Magento 2主题布局文件中，确保正确引用和加载您创建的字体和图标样式表。通常，这可以在 <code>default_head_blocks.xml</code> 文件中完成。</p>
<h3>7. 测试和调整</h3>
<p>在引入定制字体和图标后，通过测试确保它们在不同设备和浏览器上正常显示。根据需要进行调整，以确保字体和图标在整个网站中一致使用。</p>
<div id="gtx-trans" style="position: absolute; left: -38px; top: 451.391px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 12 Jan 2024 03:45:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 响应式]]></title>
      <link>https://www.360magento.com/blog/magento2-responsive-design/</link>
      <description><![CDATA[<p>随着移动设备的广泛使用，响应式设计在Magento 2主题开发中变得愈发重要。在这篇博客文章中，我们将深入探讨如何在Magento 2主题中实践响应式设计，以确保您的电子商务网站在各种设备上都能提供出色的用户体验。</p>
<h3>1. 了解响应式设计原理</h3>
<p>在开始之前，让我们回顾一下响应式设计的基本原理。响应式设计的目标是使网站布局和内容能够适应不同屏幕尺寸和分辨率，包括桌面、平板和移动设备。</p>
<h3>2. 使用媒体查询（Media Queries）</h3>
<p>Magento 2主题中使用媒体查询是实现响应式设计的关键。通过在CSS中嵌入媒体查询，您可以根据屏幕宽度应用不同的样式，以适应不同设备。</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"><span class="hljs-comment">/* 示例媒体查询 */</span> <span class="hljs-keyword">@media</span> <span class="hljs-keyword">only</span> screen <span class="hljs-keyword">and</span> (<span class="hljs-attribute">max-width</span>: <span class="hljs-number">768px</span>) { <span class="hljs-comment">/* 在这里添加移动设备的样式 */</span> } <span class="hljs-keyword">@media</span> <span class="hljs-keyword">only</span> screen <span class="hljs-keyword">and</span> (<span class="hljs-attribute">min-width</span>: <span class="hljs-number">769px</span>) <span class="hljs-keyword">and</span> (<span class="hljs-attribute">max-width</span>: <span class="hljs-number">1024px</span>) { <span class="hljs-comment">/* 在这里添加平板设备的样式 */</span> } </code></div>
</div>
<h3>3. 弹性网格布局（Flexible Grid Layout）</h3>
<p>使用弹性网格布局是实现响应式设计的另一个关键因素。确保您的主题使用相对单位（如百分比）而不是固定单位（如像素）来定义网格和元素的宽度，以适应不同屏幕尺寸。</p>
<h3>4. 图像和多媒体的处理</h3>
<p>通过使用<code>max-width</code>属性和<code>height: auto</code>，确保图像在小屏幕上不会溢出。同时，选择适当的图像格式和压缩以提高加载速度。</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>&nbsp;</span></div>
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-css"><span class="hljs-comment">/* 图像响应式样式 */</span> <span class="hljs-selector-tag">img</span> { <span class="hljs-attribute">max-width</span>: <span class="hljs-number">100%</span>; <span class="hljs-attribute">height</span>: auto; } </code></div>
</div>
<h3>5. 移动导航（Mobile Navigation）</h3>
<p>为移动设备设计简洁的导航菜单。您可以考虑使用折叠式菜单、滑动菜单或下拉菜单，以确保在小屏幕上提供更好的导航体验。</p>
<h3>6. 测试在不同设备上</h3>
<p>在开发过程中，定期测试您的Magento 2主题在不同设备上的表现。使用浏览器开发者工具或实际设备进行测试，确保网站在各种情况下都能正常运行。</p>
<div id="gtx-trans" style="position: absolute; left: -54px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 11 Jan 2024 07:05:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 主题优化]]></title>
      <link>https://www.360magento.com/blog/magento2-themes-optimization/</link>
      <description><![CDATA[<h3>1. 图片优化</h3>
<p>优化网站图片是提高性能的首要任务。使用压缩工具来减小图片文件大小，同时确保图片质量不受影响。考虑使用WebP格式，以进一步提高加载速度。</p>
<h3>2. 启用Magento 2 缓存</h3>
<p>Magento 2提供了丰富的缓存功能，包括布局缓存、块缓存和页面缓存。确保这些缓存功能都被启用，以减少服务器响应时间并提高整体性能。</p>
<h3>3. 使用CDN（内容分发网络）</h3>
<p>集成内容分发网络（CDN）以加速静态资源的加载速度。CDN会将网站内容分发到全球多个服务器，使用户从最近的服务器获取资源，从而减少加载时间。</p>
<h3>4. Lazy Loading</h3>
<p>实施图片和其他媒体资源的Lazy Loading，以确保仅在用户滚动到可见区域时加载这些资源，而不是一次性加载所有内容。</p>
<h3>5. 压缩CSS和JavaScript</h3>
<p>使用CSS和JavaScript压缩工具来减小文件大小。这有助于减少页面加载时间，尤其是在较慢的网络连接下。</p>
<h3>6. 移除不必要的扩展和模块</h3>
<p>检查并移除不必要的Magento 2扩展和模块，因为它们可能会增加网站的负载时间。只保留对网站功能至关重要的扩展。</p>
<h3>7. 优化数据库</h3>
<p>定期清理Magento 2数据库，删除不需要的数据和日志。您可以使用Magento 2提供的数据库优化工具或使用第三方工具进行优化。</p>
<h3>8. 使用合适的主题</h3>
<p>选择一个轻量且优化良好的Magento 2主题。避免使用过于复杂或过度设计的主题，以确保页面加载速度得到最大程度的优化。</p>]]></description>
      <pubDate>Thu, 11 Jan 2024 03:25:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2主题开发 ：创建自定义页面模板]]></title>
      <link>https://www.360magento.com/blog/magento2-custom-page-development/</link>
      <description><![CDATA[<h3>1. 了解Magento 2页面结构</h3>
<p>在开始之前，让我们先了解Magento 2的页面结构。每个页面通常由多个块（blocks）组成，而这些块又由布局（layouts）控制。了解页面的块和布局结构是创建自定义页面的关键。</p>
<h3>2. 创建自定义主题</h3>
<p>首先，确保您已经创建了自定义Magento 2主题。如果没有，请按照Magento 2主题开发的标准流程创建一个新主题，并将其设置为当前主题。</p>
<h3>3. 创建自定义页面布局</h3>
<p>在主题文件夹中，创建一个新的布局文件，用于定义自定义页面的结构。通常，这个文件可以命名为 <code>cms_custom_page.xml</code>，放置在以下路径：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span></span><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/Magento_Theme/layout/</code></div>
</div>
<p>在这个文件中，您可以使用布局标记定义块和容器，以构建您页面的基本结构。</p>
<h3>4. 创建自定义块</h3>
<p>在主题文件夹中，创建一个新的块文件，用于处理页面的业务逻辑和渲染。这个文件可以命名为 <code>CustomPage.php</code>，放置在以下路径：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span></span><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/Magento_Theme/Block/</code></div>
</div>
<p>在块文件中，您可以编写PHP代码来处理数据和业务逻辑，并为页面渲染准备必要的信息。</p>
<h3>5. 创建自定义页面模板</h3>
<p>最后，在主题文件夹中，创建一个新的模板文件，用于定义页面的HTML结构。这个文件可以命名为 <code>custom_page.phtml</code>，放置在以下路径：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span></span><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/Magento_Theme/templates/</code></div>
</div>
<p>在模板文件中，您可以使用HTML和Magento的块标记（如 <code>&lt;?= $block-&gt;getChildHtml('custom.block') ?&gt;</code>）来渲染页面的内容。</p>
<h3>6. 集成到Magento 2系统</h3>
<p>最后一步是将您的自定义页面集成到Magento 2系统中。您可以通过创建一个CMS页面或自定义布局来调用您创建的页面模板。</p>]]></description>
      <pubDate>Wed, 10 Jan 2024 06:55:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 定制产品列表页]]></title>
      <link>https://www.360magento.com/blog/magento2-custom-product-list-page/</link>
      <description><![CDATA[<p>1. 了解Magento 2产品列表结构<br />在开始之前，我们需要了解Magento 2产品列表页的结构。产品列表页通常由多个块（blocks）组成，包括产品列表、分页、排序和过滤器等。深入理解这些组件是定制产品列表的关键。</p>
<p>2. 创建自定义主题<br />确保您已经创建了自定义Magento 2主题。如果没有，请按照Magento 2主题开发的标准流程创建一个新主题，并将其设置为当前主题。</p>
<p>3. 定制产品列表布局<br />在主题文件夹中，创建一个新的布局文件，用于定义产品列表页的结构。此文件通常命名为 catalog_product_view.xml，放置在以下路径：</p>
<p>app/design/frontend/{Vendor}/{Theme}/Magento_Catalog/layout/<br />在这个文件中，您可以使用Magento的布局标记定义产品列表块、分页和其他相关组件。</p>
<p>4. 创建自定义块和模板<br />在主题文件夹中，创建一个新的块文件和模板文件，用于处理产品列表的业务逻辑和渲染。块文件通常命名为 ProductList.php，放置在以下路径：</p>
<p><br />app/design/frontend/{Vendor}/{Theme}/Magento_Catalog/Block/Product/<br />模板文件通常命名为 product_list.phtml，放置在以下路径：</p>
<p><br />app/design/frontend/{Vendor}/{Theme}/Magento_Catalog/templates/product/<br />在这两个文件中，您可以编写PHP代码和HTML代码，以自定义产品列表的外观和功能。</p>
<p>5. 集成到Magento 2系统<br />最后一步是将您的自定义产品列表集成到Magento 2系统中。您可以通过在CMS页面或自定义布局中调用您创建的产品列表块来实现。</p>
<p>6. 添加自定义样式和交互效果<br />通过使用Less或Sass等CSS预处理器，以及Magento提供的JavaScript库，为您的产品列表添加自定义样式和交互效果。确保您的样式与整体网站设计一致。</p>
<div id="gtx-trans" style="position: absolute; left: -48px; top: 168.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 10 Jan 2024 03:35:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 主题开发]]></title>
      <link>https://www.360magento.com/blog/magento2-frontend-development/</link>
      <description><![CDATA[<p>Magento 2 是一款强大而灵活的电子商务平台，提供了丰富的功能和扩展性。在这篇博客文章中，我们将深入了解Magento 2前端开发，着重介绍如何构建一个响应式主题，以确保您的电子商务网站在各种设备上都能提供出色的用户体验。</p>
<h3>1. 了解Magento 2主题结构</h3>
<p>在开始之前，让我们首先了解Magento 2主题的基本结构。Magento 2主题通常包含以下几个关键文件夹：</p>
<ul>
<li><code>app/design/frontend/{Vendor}/{Theme}/</code>：主题文件夹</li>
<li><code>web/</code>：包含CSS、JavaScript和图像等资源</li>
<li><code>Magento_Theme</code>：主题配置文件夹</li>
</ul>
<h3>2. 创建自定义主题</h3>
<p>要创建自定义主题，您需要在Magento 2的主题文件夹中新建一个文件夹，其中包括主题的名称和供应商名称。例如：</p>
<div class="bg-black rounded-md">
<div class="flex items-center relative text-gray-200 bg-gray-800 dark:bg-token-surface-primary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/</code></div>
</div>
<h3>3. 设定主题的基本配置</h3>
<p>在主题文件夹中，您需要创建一个 <code>theme.xml</code> 文件以配置主题的基本信息，如名称、父主题等。此文件通常位于：</p>
<div class="bg-black rounded-md">
<div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-bash">app/design/frontend/{Vendor}/{Theme}/Magento_Theme/ </code></div>
</div>
<h3>4. 创建响应式布局</h3>
<p>Magento 2鼓励使用CSS框架和技术来实现响应式设计。您可以使用Less或Sass等预处理器，确保您的CSS代码更加模块化和易于维护。同时，了解Magento 2提供的媒体查询和布局工具，以确保您的主题在各种屏幕尺寸上都能正常显示。</p>
<h3>5. 优化图片和字体</h3>
<p>在响应式主题中，图片和字体的优化至关重要。使用适当的图片压缩工具，并确保字体在不同设备上显示良好。考虑使用WebP格式的图片以提高性能。</p>
<h3>6. 集成JavaScript和Ajax</h3>
<p>Magento 2支持JavaScript的模块化开发，您可以使用RequireJS来管理JavaScript文件的依赖关系。利用Magento提供的Ajax功能，提高网站的交互性和用户体验。</p>]]></description>
      <pubDate>Tue, 09 Jan 2024 07:54:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2 PHTML小技巧]]></title>
      <link>https://www.360magento.com/blog/magento-phtml-tips/</link>
      <description><![CDATA[<h2><span>可翻译的文本</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?= __('String to translate'); ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#call-static-block-id-in-phtml--template-if-existenablednot-empty" id="user-content-call-static-block-id-in-phtml--template-if-existenablednot-empty" tabindex="-1"></a><span>在.phtml模板中调用静态块ID（如果存在/启用/不为空）</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?php if($this-&gt;getLayout()-&gt;createBlock('Magento\Cms\Block\Block')-&gt;setBlockId('BLOCK_ID')-&gt;toHtml() != ''): ?&gt;
    &lt;div class="static-block"&gt;
        &lt;?php echo $this-&gt;getLayout()-&gt;createBlock('Magento\Cms\Block\Block')-&gt;setBlockId('BLOCK_ID')-&gt;toHtml(); ?&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#call-widget-in-phtml-template" id="user-content-call-widget-in-phtml-template" tabindex="-1"></a><span>在.phtml模板中调用小部件</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?= $this-&gt;getLayout()-&gt;createBlock("Magento\Catalog\Block\Product\Widget\NewWidget")
            -&gt;setDisplayType("all_products")
            -&gt;setShowPager(1)
            -&gt;setProductsPerPage(5)
            -&gt;setProductsCount(10)
            -&gt;setPageVarName("pwkvbl")
            -&gt;setTemplate("product/widget/new/content/new_grid.phtml")
            -&gt;toHtml(); ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#call-method-from-module-helper" id="user-content-call-method-from-module-helper" tabindex="-1"></a><span>从模块助手调用方法</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?php $helper = $this-&gt;helper('Vendor\Module\Helper\Data'); ?&gt;
&lt;?php $helper-&gt;callMethodName(); ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#get-var-value-from-etcviewxml-in-phtml" id="user-content-get-var-value-from-etcviewxml-in-phtml" tabindex="-1"></a><span>从phtml中的/etc/view.xml获取VAR值</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?= $block-&gt;getVar("gallery/width", 'Magento_Catalog'); ?&gt;
&lt;?= $block-&gt;getVar("breakpoints/mobile/conditions/max-width", 'Magento_Catalog'); ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#useful-block-functions" id="user-content-useful-block-functions" tabindex="-1"></a><span>有用的块功能</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>$block-&gt;getViewFileUrl('images/loader-1.gif'); - from web/images directory
$block-&gt;getViewFileUrl('Magento_Catalog::images/filename.jpg'); - from e.g Magento_Catalog/web/images directory

$block-&gt;getUrl('checkout/cart/index');
$block-&gt;getUrl('', array('_direct'=&gt;'hairproducts.html'));
$block-&gt;getUrl('', array('_direct'=&gt;'hairproducts.html', '_query'=&gt;'manufacturer=412'));

$block-&gt;getBaseUrl();
$block-&gt;getMediaDirectory();
$block-&gt;getChildBlock('block.name');
$block-&gt;getChildHtml('block.name');
$block-&gt;getChildChildHtml('block.name');
$block-&gt;getBlockHtml('block.name');
$block-&gt;escapeHtml();
$block-&gt;escapeUrl();
$block-&gt;stripTags(); // removes HTML tags

$block-&gt;escapeHtml('value', $allowedTags);
$block-&gt;escapeHtmlAttr('value', $escapeSingleQuote);
$block-&gt;escapeJs('value');
$block-&gt;escapeUrl($url);
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#example-operations-on-product-attribute" id="user-content-example-operations-on-product-attribute" tabindex="-1"></a><span>产品属性操作示例</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?php if($_product-&gt;getTypeId() == \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE): ?&gt;
        &lt;?php
        $deliveryTime = $_product-&gt;getResource()-&gt;getAttribute('delivery_time');
        $minDeliveryTime = $deliveryTime-&gt;getFrontend()-&gt;getValue($_product);
        ?&gt;
        &lt;div class="delivery-time"&gt;
            &lt;?php echo __('Delivery time: %1', $minDeliveryTime); ?&gt;
        &lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>$product-&gt;getAttributeText('color'); - value as 'text' label
$product-&gt;getResource()-&gt;getAttribute('color')-&gt;getFrontend()-&gt;getValue($product); - value as 'text' label
$product-&gt;getData('color'); - value as 'id attribute number'
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#execute-javascript-code-after-swatches-are-displayed-in-category-view" id="user-content-execute-javascript-code-after-swatches-are-displayed-in-category-view" tabindex="-1"></a><span>在类别视图中显示样本后执行 JavaScript 代码</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;script&gt;
    require(['jquery', 'Magento_Swatches/js/swatch-renderer'], function ($, swatch) {
        $(document).on('swatch.initialized', function() {
            // Here make some layout changes
        });
    });
&lt;/script&gt;  
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#can-be-used-to-get-the-list-of-handles-while-debugging" id="user-content-can-be-used-to-get-the-list-of-handles-while-debugging" tabindex="-1"></a><span>可用于在调试时获取句柄列表</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>$this-&gt;getLayout()-&gt;getUpdate()-&gt;getHandles();
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#get-backend-config-option-enebleddisabled" id="user-content-get-backend-config-option-enebleddisabled" tabindex="-1"></a><span>获取后端配置选项启用/禁用</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?php $config = $block-&gt;getLayout()-&gt;createBlock(\Magento\Config\Block\System\Config\Form::class);?&gt;
&lt;?php if($config-&gt;getConfigValue('dev/translate_inline/active')): ?&gt;
  // do something
&lt;?php endif; ?&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#media-queries-in-javascript" id="user-content-media-queries-in-javascript" tabindex="-1"></a><span>JavaScript 中的媒体查询</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;script type="text/javascript"&gt;
        require(['jquery', 'matchMedia'], function ($, mediaCheck) {
            mediaCheck({
                media: '(min-width: 768px)',
                // Switch to Desktop Version
                entry: function () {
                   alert('desktop');
                },
                // Switch to Mobile Version
                exit: function () {
                    alert('mobile');
                }
            });
        });
    &lt;/script&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#2-ways-to-call-fotorama-gallery-script" id="user-content-2-ways-to-call-fotorama-gallery-script" tabindex="-1"></a><span>调用 Fotorama 图库脚本的 2 种方法</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;script type="text/x-magento-init"&gt;
    {
        "[data-gallery-role=gallery-placeholder]": {
            "mage/gallery/gallery": {
                "mixins":["magnifier/magnify"],
                "magnifierOpts": &lt;?= $block-&gt;getMagnifier() ?&gt;,
                "data": &lt;?= $block-&gt;getGalleryImagesJson() ?&gt;,
                "options": &lt;?= $block-&gt;getGalleryOptions()-&gt;getOptionsJson() ?&gt;,
                "fullscreen": &lt;?= $block-&gt;getGalleryOptions()-&gt;getFSOptionsJson() ?&gt;,
                "breakpoints": &lt;?= $block-&gt;getBreakpoints() ?&gt;
            }
        }
    }
&lt;/script&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;script&gt;
    require(['jquery', 'mage/gallery/gallery'], function ($, gallery) {
        $(function () {
            $('[data-gallery-role="gallery-placeholder"]').each(function(index, element) {
                gallery({
                    "mixins":["magnifier/magnify"],
                    "magnifierOpts": &lt;?= $block-&gt;getMagnifier() ?&gt;,
                    "data": &lt;?= $block-&gt;getGalleryImagesJson() ?&gt;,
                    "options": &lt;?= $block-&gt;getGalleryOptions()-&gt;getOptionsJson() ?&gt;,
                    "fullscreen": &lt;?= $block-&gt;getGalleryOptions()-&gt;getFSOptionsJson() ?&gt;,
                    "breakpoints": &lt;?= $block-&gt;getBreakpoints() ?&gt;
                }, element);
             });
        });
    });
&lt;/script&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/phtml.md#script-initialization" id="user-content-script-initialization" tabindex="-1"></a><span>脚本初始化</span></h2>
<p><span>标准</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;div class="swiper-container header-slider" data-mage-init='{"Swissup_Swiper/js/swiper": {"loop":true,"centeredSlides":true,"autoplay": {"delay": 10000}, "navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"}}}'&gt;
    &lt;div class="swiper-wrapper"&gt;
        &lt;div class="swiper-slide"&gt;1&lt;/div&gt;
        &lt;div class="swiper-slide"&gt;2&lt;/div&gt;
        &lt;div class="swiper-slide"&gt;3&lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>或更好：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;script type="text/lazy"&gt;
    require(['jquery', 'Swissup_Swiper/js/swiper'], function ($, swiper) {
        $(function() {
            $('.header-slider').each(function(index, element) {
                swiper({"loop":true,"centeredSlides":true,"autoplay": {"delay": 10000}, "navigation":{"nextEl":".swiper-button-next","prevEl":".swiper-button-prev"}}, element);
             });
        });
    });
&lt;/script&gt;</code></pre>
</div>]]></description>
      <pubDate>Mon, 08 Jan 2024 16:02:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 常用变量]]></title>
      <link>https://www.360magento.com/blog/magento-curly-braces-variable/</link>
      <description><![CDATA[<h2><span>自定义变量</span></h2>
<p><code></code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#store-url" id="user-content-store-url" tabindex="-1"></a><span>商店网址</span></h2>
<p><code>https://www.360magento.com/customer/account/</code><span>- 末尾有斜线</span></p>
<p><code>https://www.360magento.com/contact-us</code><span>- 末尾没有斜杠</span></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#media-url" id="user-content-media-url" tabindex="-1"></a><span>媒体网址</span></h2>
<p><code>https://www.360magento.com/media/wysiwyg/your-image.jpg</code>&nbsp;<code>{{view url='images/logo.svg'}}</code>&nbsp;<code>{{view url='Magento_Theme::images/logo.svg'}}</code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#block-id" id="user-content-block-id" tabindex="-1"></a><span>区块ID</span></h2>
<p><code></code></p>
<p><code></code></p>
<p><code></code></p>
<p><code></code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#widget" id="user-content-widget" tabindex="-1"></a><span>小部件</span></h2>
<p><code></code></p>
<p><code><div class="widget widget-new-products">
    <div class="widget-title">
        <h2>新产品</h2>
    </div>
    <div class="widget-products">
                                <ul class="products-grid">
                    <li class="item first">
                <a href="https://www.360magento.com/anli030" title="LsyBeauty假发在线商城" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/0/1/01_01_1.jpg" width="85" height="85" alt="LsyBeauty假发在线商城" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli030" title="LsyBeauty假发在线商城)">LsyBeauty假发在线商城</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-30-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/30/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/30/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                                    <li class="item">
                <a href="https://www.360magento.com/anli024" title="两端国际跨境电商" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/0/1/01-1.jpg" width="85" height="85" alt="两端国际跨境电商" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli024" title="两端国际跨境电商)">两端国际跨境电商</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-24-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/24/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/24/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                                    <li class="item">
                <a href="https://www.360magento.com/anli020" title="Fiberoutlets光通信产品批发交易平台" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/0/1/01_1_12.jpg" width="85" height="85" alt="Fiberoutlets光通信产品批发交易平台" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli020" title="Fiberoutlets光通信产品批发交易平台)">Fiberoutlets光通信产品批发交易平台</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-20-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/20/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/20/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                                    <li class="item">
                <a href="https://www.360magento.com/anli025" title="豆皮小程序电商平台" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/s/m/small_01.jpg" width="85" height="85" alt="豆皮小程序电商平台" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli025" title="豆皮小程序电商平台)">豆皮小程序电商平台</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-25-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/25/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/25/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                                    <li class="item last">
                <a href="https://www.360magento.com/anli023" title="代盟海外代购服务平台" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/0/1/01_1_14.jpg" width="85" height="85" alt="代盟海外代购服务平台" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli023" title="代盟海外代购服务平台)">代盟海外代购服务平台</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-23-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/23/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/23/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                </ul>
                                <ul class="products-grid">
                    <li class="item first">
                <a href="https://www.360magento.com/anli019" title="Eurofitca线上交易平台" class="product-image"><img src="https://www.360magento.com/media/catalog/product/cache/1/small_image/85x/9df78eab33525d08d6e5fb8d27136e95/0/1/01_1_11.jpg" width="85" height="85" alt="Eurofitca线上交易平台" /></a>
                <h3 class="product-name"><a href="https://www.360magento.com/anli019" title="Eurofitca线上交易平台)">Eurofitca线上交易平台</a></h3>
                                

                        
    <div class="price-box">
                                                                <span class="regular-price" id="product-price-19-widget-new-grid">
                                            <span class="price">￥ 0.00</span>                                    </span>
                        
        </div>

                <div class="actions">
                                            <button type="button" title="加入购物车" class="button btn-cart" onclick="setLocation('https://www.360magento.com/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/product/19/form_key/3VEI7lbscBBdU7OI/')"><span><span>加入购物车</span></span></button>
                                        <ul class="add-to-links">
                                                                            <li><span class="separator">|</span> <a href="https://www.360magento.com/catalog/product_compare/add/product/19/uenc/aHR0cHM6Ly93d3cuMzYwbWFnZW50by5jb20vYmxvZy9yc3MvaW5kZXgvc3RvcmVfaWQvMS8,/form_key/3VEI7lbscBBdU7OI/" class="link-compare">添加并比较</a></li>
                                            </ul>
                </div>
            </li>
                </ul>
                    </div>
</div>
</code></p>
<p><code></code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#store-contact-information-variables" id="user-content-store-contact-information-variables" tabindex="-1"></a><span>存储联系信息变量</span></h2>
<p><span>基本安全 URL&nbsp;</span><code>https://www.360magento.com/</code></p>
<p><span>一般联系电子邮件&nbsp;</span><code>sales@360magento.com</code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#new-account-template-variables" id="user-content-new-account-template-variables" tabindex="-1"></a><span>新帐户模板变量</span></h2>
<p><span>客户帐户网址</span><code>{{var this.getUrl($store, &lsquo;customer/account/&rsquo;)}}</code></p>
<p><span>客户邮箱</span><code>{{var customer.email}}</code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#new-order-template-variables" id="user-content-new-order-template-variables" tabindex="-1"></a><span>新订单模板变量</span></h2>
<p><span>订单号</span><code>{{var order.increment_id}}</code></p>
<p><span>付款详情</span><code>{{var payment_html|raw}}</code></p>
<p><span>运输说明</span><code>{{var order.getShippingDescription()}}</code></p>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/curly-braces-variable.md#email-template-variables" id="user-content-email-template-variables" tabindex="-1"></a><span>电子邮件模板变量</span></h2>
<p><span>电子邮件徽标图像 URL</span><code>{{var logo_url}}</code></p>
<p><span>电子邮件徽标图像宽度</span><code>{{var logo_width}}</code></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&ndash; For registration:
{{var customer}}

{{var customer.ID}}

{{var customer.email}}

{{var customer.firstname}}

{{var customer.lastname}}

{{var customer.name}}

{{var customer.password}}

{{var customer.created_in}} Store Name

{{var customer.dob}} Date of Birth

{{var customer.password_hash}}

{{var customer.prefix}}

{{var customer.middlename}} Initial

{{var customer.suffix}}

{{var customer.group_id}}

{{var customer.taxvat}}

{{var customer.store.name}}

{{var customer.store.group.name}}

&ndash; To subscribe/unsubscribe newsletter:

{{var subscriber.getConfirmationLink()}}

{{var subscriber.getUnsubscriptionLink()}}

{{var subscriber.email}}

&ndash; Send to a friend:

{{var product_image}}

{{var name}} Recipient&rsquo;s Name

{{var email}} Recipient&rsquo;s Email

{{var product_name}} Product Name

{{var product_url}} Product Url

{{var message}} Message Text

{{var sender_name}} Sender&rsquo;s Name

{{var sender_email}} Sender&rsquo;s Email

{{var product_image}} Product Image

&ndash; Depend Condition

{{depend order.getIsNotVirtual()}}

{{/depend}}

{{depend salable}}

{{/depend}}

&ndash; If Condition

{{if order.getIsNotVirtual()}}

{{else}}

{{/if}}

(else is optional)


&ndash; New order : Shipping Address

{{var order.getShippingAddress().format(&lsquo;html&rsquo;)}}

Items of the shipping address :

{{var order.getShippingAddress().getName()}} Get the first and last name

{{var order.getShippingAddress().getPrefix()}}

{{var order.getShippingAddress().getFirstName()}}

{{var order.getShippingAddress().getMiddleName()}}

{{var order.getShippingAddress().getLastName()}}

{{var order.getShippingAddress().getSuffix()}}

{{var order.getShippingAddress().getStreet1()}}

{{var order.getShippingAddress().getStreet2()}}

{{var order.getShippingAddress().getCity()}}

{{var order.getShippingAddress().getRegion()}}

{{var order.getShippingAddress().getPostcode()}}

{{var order.getShippingAddress().getCountry()}} Get the country&rsquo;s ID

{{var order.getShippingAddress().getCountryModel().getName()}} Get the country&rsquo;s full name

{{var order.getShippingAddress().getRegion()}}

{{var order.getShippingAddress().getTelephone()}}

&ndash; Other

{{var addAllLink}}

{{var alertGrid}}

{{var billingAddress.format(&lsquo;html&rsquo;)}}

{{var checkoutType}}

{{var comment}}

{{var creditmemo.id}}

{{var creditmemo.increment_id}}

{{var data.comment}}

{{var data.email}}

{{var data.name}}

{{var data.telephone}}

{{var dateAndTime}}

{{var invoice.id}}

{{var invoice.increment_id}}

{{var invoice.created_at}}

{{var items}}

{{var items_html}}

{{var message}}

{{var name}}

{{var order.customer_email}}

{{var order.getBillingAddress().format(&lsquo;html&rsquo;)}}

{{var order.getBillingAddress().getName()}}

{{var order.getCreatedAtFormated(&lsquo;long&rsquo;)}}

{{var order.getCustomerName()}}

{{var order.getCustomerFirstname()}}

{{var order.getCustomerLastname()}}

{{var order.getEmailCustomerNote()}} Currently unknwon how to test this variable for being set/empty

{{var order.getShippingDescription()}}

{{var order.getStatusLabel()}}

{{var order.getStoreGroupName()}}

{{var order.id}}

{{var order.increment_id}}

{{var password}}

{{var payment_html}}

{{var paymentMethod}}

{{var product_name}}

{{var product_url}}

{{var reason}} Reason for payment failure

{{var shipment.increment_id}}

{{var shippingAddress.format(&lsquo;html&rsquo;)}}

{{var shippingMethod}}

{{var total}}

{{var user.name}}

{{var viewOnSiteLink}}

{{var warnings}}

{{var billing.name}}</code></pre>
</div>]]></description>
      <pubDate>Mon, 08 Jan 2024 07:58:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[有用的 Magento 2 CLI 命令]]></title>
      <link>https://www.360magento.com/blog/magento2-CLI-commands/</link>
      <description><![CDATA[<h1><span>有用的 Magento 2 CLI 命令</span></h1>
<p><span>部署模式功能：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento deploy:mode:show
php bin/magento deploy:mode:set developer ( default | production | developer )
php bin/magento deploy:mode:set production --skip-compilation

php bin/magento maintenance:disable
php bin/magento maintenance:enable
php bin/magento maintenance:enable --ip=192.0.0.1 --ip=192.0.0.2 (for all clients except this IPs)
php bin/magento maintenance:enable --ip=none (to clear the list of IPs)
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>用于开发的 CSS 和 JS 配置</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento config:set dev/js/enable_js_bundling 0
php bin/magento config:set dev/js/merge_files 0
php bin/magento config:set dev/js/minify_files 0
php bin/magento config:set dev/css/merge_css_files 0
php bin/magento config:set dev/css/minify_files 0
php bin/magento config:set dev/static/sign 0

php bin/magento config:set --scope="stores" --scope-code="default" dev/js/minify_files 0
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>缓存操作：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento cache:status
php bin/magento c:f ( cache:flush }
php bin/magento c:c ( cache:clean }
php bin/magento cache:disable full_page layout block_html translate
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>默认缓存类型：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code> config
 layout
 block_html
 collections
 reflection
 db_ddl
 compiled_config
 eav
 customer_notification
 config_integration
 config_integration_api
 full_page
 config_webservice
 translate
 vertex
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>模块操作（检查当前状态/禁用模块/启用模块）：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento module:status
php bin/magento module:disable VENDOR_MODULENAME
php bin/magento module:enable VENDOR_MODULENAME
php bin/magento module:uninstall VENDOR_MODULENAME (if installed by Composer)
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>设置升级/设置编译/静态内容部署：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php -d memory_limit=2048M bin/magento setup:upgrade
php -d memory_limit=2048M bin/magento setup:di:compile
php -d memory_limit=2048M bin/magento setup:static-content:deploy
php bin/magento setup:static-content:deploy pl_PL -f
php bin/magento setup:static-content:deploy pl_PL --theme Vendor/theme --no-html-minify -f
php bin/magento setup:static-content:deploy pl_PL en_US en_GB --jobs 20

</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>设置配置：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento setup:store-config:set --base-url="http://project.dev/"
php bin/magento setup:store-config:set --base-url-secure="https://project.dev/"

php bin/magento config:set admin/security/session_lifetime 604800 ( 86400 = 1 day / 604800 = 7 days / 31536000 = 1 year / etc )
php bin/magento config:set admin/security/password_is_forced 0
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>索引器（重新索引|重置）：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento indexer:reset
php -d memory_limit=2048M bin/magento indexer:reindex

php bin/magento indexer:status
php bin/magento indexer:reset cataloginventory_stock
php bin/magento indexer:reindex cataloginventory_stock
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>为特定模块生成翻译包</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento i18n:collect-phrases -o app/code/Module/Vendor/i18n/pl_PL.csv app/code/Module/Vendor/
php bin/magento i18n:collect-phrases --output="app/design/frontend//Module/Vendor/i18n/pl_PL.csv" --magento (This option adds themes or modules to each line in the dictionary.)
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>目录图像调整大小：</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento catalog:image:resize
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>对于管理员</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento admin:user:create
php bin/magento info:adminuri
php bin/magento admin:user:unlock USERNAME
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<p><span>获取所有可用命令的列表</span></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>php bin/magento list
php bin/magento help</code></pre>
</div>
<div id="gtx-trans" style="position: absolute; left: 375px; top: -7.92188px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 08 Jan 2024 03:56:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 XML中的属性说明]]></title>
      <link>https://www.360magento.com/blog/magento2-handy-snippets/</link>
      <description><![CDATA[<h2><span>带模板的自定义块</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;block class="Magento\Framework\View\Element\Template" name="my_block" template="Vendor_Module::my-template.phtml" /&gt; ( after="-" or before="-" )
&lt;block class="Magento\Framework\View\Element\Template" name="footer_logo_brands" template="Magento_Theme::html/brand-logos.phtml" after="footer_links"/&gt; 
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#block-with-configuration-condition" id="user-content-block-with-configuration-condition" tabindex="-1"></a><span>具有配置条件的块</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;block class="Magento\Newsletter\Block\Subscribe" name="form.subscribe" as="subscribe" before="-" template="Magento_Newsletter::subscribe.phtml" ifconfig="newsletter/general/active"/&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#block-inside-container" id="user-content-block-inside-container" tabindex="-1"></a><span>容器内的块</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;container name="some.block.wrapper" htmlTag="div" htmlClass="container"&gt;
      // block here
&lt;/container&gt;</code></pre>
<h2><span>从 XML 调用静态块</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;referenceContainer name="footer-container"&gt;
            &lt;block class="Magento\Cms\Block\Block" name="promo" before="-"&gt;
                &lt;arguments&gt;
                    &lt;argument name="block_id" xsi:type="string"&gt;promo&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/block&gt;
&lt;/referenceContainer&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#two-ways-set-template-in-xml" id="user-content-two-ways-set-template-in-xml" tabindex="-1"></a><span>在xml中设置模板的两种方法</span></h2>
<ol>
<li></li>
</ol>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;referenceBlock name="page.main.title" template="Vendor_Module::path/to/template.phtml"/&gt;`
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<ol start="2">
<li></li>
</ol>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;referenceBlock name="page.main.title"&gt;
	&lt;arguments&gt;
		&lt;argument name="template" xsi:type="string"&gt;Vendor_Module::path/to/template.phtml&lt;/argument&gt;
	&lt;/arguments&gt;
&lt;/referenceBlock&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#set-template-layout-in-xml-eg-2columns-left-in-catalog_category_viewxml" id="user-content-set-template-layout-in-xml-eg-2columns-left-in-catalog_category_viewxml" tabindex="-1"></a><span>在xml中设置模板布局（例如catalog_category_view.xml中的&ldquo;2columns-left&rdquo;）</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        ...
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#add-custom-link-to-toplinks-customer-dropdown" id="user-content-add-custom-link-to-toplinks-customer-dropdown" tabindex="-1"></a><span>将自定义链接添加到top.links（客户下拉列表）</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;referenceBlock name="top.links"&gt;
    &lt;block class="Magento\Framework\View\Element\Html\Link" name="acount-create-link"&gt;
        &lt;arguments&gt;
            &lt;argument name="label" xsi:type="string" translate="true"&gt;Create an Account&lt;/argument&gt;
            &lt;argument name="path" xsi:type="string"&gt;customer/account/create&lt;/argument&gt;
            &lt;argument name="sortOrder" xsi:type="number"&gt;100&lt;/argument&gt;
        &lt;/arguments&gt;
    &lt;/block&gt;
&lt;/referenceBlock&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#include-static-resources-javascript-css-fonts" id="user-content-include-static-resources-javascript-css-fonts" tabindex="-1"></a><span>包括静态资源（JavaScript、CSS、字体）</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;head&gt;
    &lt;!-- Add local styles resources --&gt;
    &lt;css src="css/my-styles.css" /&gt;
    &lt;css src="&lt;Namespace&gt;_&lt;Module&gt;::css/custom-styles.css" /&gt;

    &lt;!-- The following two ways to add local JavaScript files are equal --&gt;
    &lt;script src="Magento_Catalog::js/sample1.js" /&gt;
    &lt;script src="Magento_Catalog/js/sample1.js" /&gt;

    &lt;!-- Magento support async or defer attribute in script tag --&gt;
    &lt;script async="" src="Magento_Catalog::js/sample1.js" /&gt;
    &lt;script defer="" src="Magento_Catalog::js/sample1.js" /&gt;

    &lt;link src="js/sample.js" /&gt;
    &lt;link src="sample.js" /&gt;

    &lt;!-- Add external resources --&gt;
    &lt;css src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" src_type="url" /&gt;
    &lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" /&gt;
    &lt;link rel="stylesheet" type="text/css" src="http://fonts.googleapis.com/css?family=Montserrat" src_type="url" /&gt;
  &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#remove-static-resources-javascript-css-fonts" id="user-content-remove-static-resources-javascript-css-fonts" tabindex="-1"></a><span>删除静态资源（JavaScript、CSS、字体）</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;head&gt;
    &lt;!-- Remove local styles resources --&gt;
    &lt;remove src="css/styles-m.css" /&gt;
    &lt;remove src="&lt;Namespace&gt;_&lt;ModuleName&gt;::css/styles.css" /&gt;

    &lt;!-- Remove js resources --&gt;
    &lt;remove src="my-js.js" /&gt;
    &lt;remove src="Magento_Catalog::js/sample1.js" /&gt;

    &lt;!-- Remove external resources --&gt;
    &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" /&gt;
    &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" /&gt;
    &lt;remove src="http://fonts.googleapis.com/css?family=Montserrat" /&gt;
   &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#add-meta-tags-to-the-head-block" id="user-content-add-meta-tags-to-the-head-block" tabindex="-1"></a><span>将元标记添加到头块</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;head&gt;
    &lt;!-- This will create a tag like '&lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"&gt;' --&gt;
    &lt;meta name="x_ua_compatible" content="IE=edge,chrome=1"/&gt;
    &lt;!-- This will create a tag like '&lt;meta property="og:type" content="article"/&gt;'' --&gt;
    &lt;meta name="og:type" content="article"/&gt;
    &lt;!-- This will create a tag like '&lt;meta charset="UTF-8"&gt;' --&gt;
    &lt;meta name="charset" content="UTF-8"/&gt;
    &lt;!-- This will create a tag like '&lt;meta http-equiv="Content-Type" content="content-type-value"/&gt;' --&gt;
    &lt;meta name="content_type" content="content-type-value"/&gt;
    &lt;!-- This tag will not render (see \Magento\Framework\View\Page\Config\Renderer for details) --&gt;
    &lt;meta name="media_type" content="any-value"/&gt;
    &lt;!-- This will create a tag like '&lt;meta name="my_custom_type" content="my_custom_value"/&gt;' --&gt;
    &lt;meta name="my_custom_type" content="my_custom_value"/&gt;
   &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#set-body-attributes" id="user-content-set-body-attributes" tabindex="-1"></a><span>设置身体属性</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;body&gt;
     &lt;attribute name="class" value="my-new-body-class"/&gt;
&lt;/body&gt;
</code></pre>
<div class="zeroclipboard-container"></div>
</div>
<h2><a class="anchor" href="https://github.com/dev-jq/magento2-handy-snippets/blob/master/xml.md#set-custom-page-title" id="user-content-set-custom-page-title" tabindex="-1"></a><span>设置自定义页面标题</span></h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>&lt;referenceBlock name="page.main.title"&gt;
     &lt;action method="setPageTitle"&gt;
          &lt;argument translate="true" name="title" xsi:type="string"&gt;My title&lt;/argument&gt;
     &lt;/action&gt;
&lt;/referenceBlock&gt;</code></pre>
</div>
</div>]]></description>
      <pubDate>Sun, 07 Jan 2024 07:49:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento网站管理步骤]]></title>
      <link>https://www.360magento.com/blog/magento-website-management/</link>
      <description><![CDATA[<p>Magento是一款功能强大的电子商务平台，为在线商家提供了一个完整的解决方案。然而，要确保您的Magento网站能够取得成功并实现预期的业绩，良好的网站管理是至关重要的。本文将介绍一些关键的Magento网站管理步骤，以帮助您优化网站性能、提升用户体验并实现业务目标。</p>
<ol>
<li>
<p>定期备份和恢复：<br />每个Magento网站都应该定期备份其数据库和文件，以防止数据丢失或网站故障。您可以使用Magento的内置备份工具或第三方插件来执行自动备份，并确保备份文件的安全存储。在需要时，您可以使用这些备份文件来快速恢复网站。</p>
</li>
<li>
<p>更新和维护Magento版本：<br />Magento定期发布更新和修复程序，以解决安全漏洞和错误。确保您的Magento网站始终运行最新版本是至关重要的，这将有助于保护您的网站免受潜在的安全威胁，并提供更好的性能和功能。在进行任何升级前，务必在测试环境中进行充分的测试和验证。</p>
</li>
<li>
<p>密码和访问控制：<br />确保您的Magento网站具有强大的管理员密码，并将其保持机密。此外，限制对Magento后台的访问，并为每个管理员分配适当的权限。这样可以减少潜在的安全风险，并防止未经授权的访问和操作。</p>
</li>
<li>
<p>监控和性能优化：<br />使用监控工具来实时监测您的Magento网站的性能和可用性。这些工具可以提供关键指标，如网站的加载时间、访问量和服务器资源使用情况。通过定期监控，您可以及时发现并解决潜在的性能问题，并确保您的网站始终处于最佳状态。</p>
</li>
<li>
<p>安全和防护措施：<br />采取适当的安全措施来保护您的Magento网站免受潜在的攻击和恶意行为。这包括安装SSL证书，以确保安全的数据传输，以及配置防火墙和入侵检测系统来阻止恶意流量和未经授权的访问。</p>
</li>
<li>
<p>更新和优化内容：<br />定期更新您的Magento网站上的内容，并进行关键字优化，以提高搜索引擎排名和流量。确保您的商品信息、价格、促销和页面内容都是准确、清晰和吸引人的。此外，确保您的网站页面加载速度快，并具有良好的用户导航和响应式设计。</p>
</li>
<li>
<p>用户支持和反馈：<br />提供优质的用户支持，并鼓励用户提供反馈和建议。确保您的Magento网站上有易于找到的联系方式，并及时回复用户的问题和需求。用户反馈是改进您的网站和提供更好用户体验的重要来源。</p>
</li>
</ol>]]></description>
      <pubDate>Sun, 07 Jan 2024 03:46:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2的性能优化]]></title>
      <link>https://www.360magento.com/blog/Magento2-asa-srapageppasa/</link>
      <description><![CDATA[<p><span>Magento 2是一款功能强大的电子商务平台，但在处理大量产品和访问量较高的情况下，性能可能受到影响。本文将介绍一些Magento 2性能优化的关键方面和最佳实践，帮助您加速您的电子商务网站。</span></p>
<ol>
<li>
<p>了解Magento 2的性能挑战：</p>
<ul>
<li>Magento 2的复杂性和资源需求</li>
<li>响应时间和页面加载速度的重要性</li>
<li>常见的性能瓶颈和挑战</li>
</ul>
</li>
<li>
<p>优化Magento 2的服务器环境：</p>
<ul>
<li>选择适当的服务器规格和配置</li>
<li>配置服务器缓存和加速器</li>
<li>优化数据库性能和查询</li>
</ul>
</li>
<li>
<p>Magento 2缓存管理和优化：</p>
<ul>
<li>启用和配置Magento 2的缓存</li>
<li>优化缓存存储和清除策略</li>
<li>利用Varnish和Redis等外部缓存解决方案</li>
</ul>
</li>
<li>
<p>图像和静态资源优化：</p>
<ul>
<li>优化图像大小和格式</li>
<li>使用图像CDN加速图像加载</li>
<li>压缩和合并CSS和JavaScript文件</li>
</ul>
</li>
<li>
<p>代码和数据库优化：</p>
<ul>
<li>优化Magento 2的代码和扩展</li>
<li>避免不必要的重写和扩展</li>
<li>优化数据库查询和索引</li>
</ul>
</li>
<li>
<p>性能监测和测试：</p>
<ul>
<li>使用Magento 2的性能工具和插件</li>
<li>进行负载测试和压力测试</li>
<li>分析和监控网站性能</li>
</ul>
</li>
<li>
<p>高可用性和容错性：</p>
<ul>
<li>设置Magento 2的备份和恢复策略</li>
<li>实施负载均衡和故障转移机制</li>
<li>备份和优化Magento 2的数据</li>
</ul>
</li>
</ol>]]></description>
      <pubDate>Sat, 06 Jan 2024 07:43:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2的主题定制]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-customization/</link>
      <description><![CDATA[<p>Magento 2是一款强大的电子商务平台，提供了丰富的主题定制功能，使您能够创建独特而引人注目的在线商店外观。本文将介绍Magento 2主题定制的基本概念和步骤，以及如何利用它来实现个性化的品牌形象。</p>
<ol>
<li>
<p>Magento 2主题定制的基础知识：</p>
<ul>
<li>Magento 2的主题结构和层次</li>
<li>主题文件和目录的作用</li>
<li>主题继承和覆盖机制</li>
</ul>
</li>
<li>
<p>创建自定义Magento 2主题：</p>
<ul>
<li>创建主题文件和目录结构</li>
<li>定义主题的基本配置</li>
<li>创建和修改布局文件</li>
<li>自定义样式和CSS</li>
<li>添加和修改静态资源（图像、字体等）</li>
</ul>
</li>
<li>
<p>主题定制的最佳实践：</p>
<ul>
<li>使用子主题进行定制</li>
<li>利用Magento 2的主题继承机制</li>
<li>重写和扩展Magento 2的模板文件</li>
<li>利用Magento 2的UI组件进行布局定制</li>
</ul>
</li>
<li>
<p>主题定制的高级技巧和扩展：</p>
<ul>
<li>利用Magento 2的LESS和RequireJS进行高级样式和脚本定制</li>
<li>创建自定义模块和主题集成</li>
<li>主题本地化和多语言支持</li>
</ul>
</li>
<li>
<p>主题定制的测试和部署：</p>
<ul>
<li>使用Magento 2的开发者工具进行主题定制的调试和测试</li>
<li>主题定制的部署和发布流程</li>
<li>主题定制的性能优化和缓存管理</li>
</ul>
</li>
</ol>]]></description>
      <pubDate>Sat, 06 Jan 2024 03:41:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[了解Magento 2：功能强大的电子商务平台]]></title>
      <link>https://www.360magento.com/blog/introduction-to-magento2/</link>
      <description><![CDATA[<p>Magento 2是一款开源的电子商务平台，具有丰富的功能和灵活的可扩展性。本文将介绍Magento 2的主要特点和功能，以及为什么它是构建强大在线商店的理想选择。</p>
<ol>
<li>
<p>Magento 2的特点和优势：</p>
<ul>
<li>现代化的架构和技术栈</li>
<li>强大的扩展性和定制性</li>
<li>多店铺和多语言支持</li>
<li>响应式设计和移动优化</li>
<li>内置的SEO功能和营销工具</li>
</ul>
</li>
<li>
<p>Magento 2的核心功能：</p>
<ul>
<li>产品和目录管理</li>
<li>订单和支付处理</li>
<li>客户管理和个性化体验</li>
<li>营销和促销工具</li>
<li>物流和库存管理</li>
</ul>
</li>
<li>
<p>Magento 2的模块和扩展市场：</p>
<ul>
<li>Magento Marketplace的扩展和主题</li>
<li>自定义模块和主题开发</li>
<li>第三方集成和API支持</li>
</ul>
</li>
<li>
<p>Magento 2的性能和安全性：</p>
<ul>
<li>缓存和索引优化</li>
<li>代码和数据的安全性</li>
<li>支持HTTPS和PCI DSS合规性</li>
</ul>
</li>
<li>
<p>Magento 2的社区和支持：</p>
<ul>
<li>Magento开发者社区和论坛</li>
<li>官方文档和教程资源</li>
<li>Magento认证和培训机会</li>
</ul>
</li>
</ol>
<p>结论：Magento 2是一款功能强大的电子商务平台，它提供了丰富的功能和灵活的可扩展性，让您能够构建和管理强大的在线商店。无论是小型企业还是大型企业，Magento 2都是一个值得考虑的选择。</p>]]></description>
      <pubDate>Fri, 05 Jan 2024 08:39:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的API来获取产品信息]]></title>
      <link>https://www.360magento.com/blog/magento2-api-get-products/</link>
      <description><![CDATA[<pre>
$host = 'http://your-magento-site.com';
$apiUser = 'your_api_username';
$apiKey = 'your_api_key';

$productId = 123; // 产品ID

$client = new SoapClient($host . '/api/soap/?wsdl');

// 登录到API
$session = $client-&gt;login($apiUser, $apiKey);

// 获取产品信息
$productInfo = $client-&gt;call($session, 'catalog_product.info', $productId);

// 打印产品信息
echo '产品名称：' . $productInfo['name'] . "\n";
echo '产品价格：' . $productInfo['price'] . "\n";
echo '产品描述：' . $productInfo['description'] . "\n";

// 注销API会话
$client-&gt;endSession($session);
</pre>
<pre><br /><br /></pre>
<p>在上述示例代码中，您需要替换以下变量：</p>
<ul>
<li><code>$host</code>：您的Magento站点的URL。</li>
<li><code>$apiUser</code>：您在Magento中创建的API用户名。</li>
<li><code>$apiKey</code>：与API用户关联的API密钥。</li>
<li><code>$productId</code>：您要获取信息的产品ID。</li>
</ul>
<p>上述代码首先创建了一个SOAP客户端，并使用提供的URL进行登录。然后，通过调用<code>catalog_product.info</code>方法并传递产品ID，从API中获取产品信息。最后，通过打印结果来显示产品的名称、价格和描述等信息。</p>
<p>请确保您的Magento站点已启用并配置了SOAP API，并且您已经具有正确的API访问凭据。</p>]]></description>
      <pubDate>Thu, 04 Jan 2024 16:33:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何配置 Magento 2 管理操作日志]]></title>
      <link>https://www.360magento.com/blog/system_config_edit/</link>
      <description><![CDATA[<p>Magento 2是一款强大的电商平台，为了确保系统的安全性和稳定性，配置管理操作日志是至关重要的。管理操作日志记录了后台用户的活动，帮助你跟踪变更、排除问题，并提高系统监控水平。</p>
<p>以下是配置Magento 2管理操作日志的步骤：</p>
<h3>步骤1：登录Magento 2后台</h3>
<p>首先，使用管理员凭证登录Magento 2后台。</p>
<h3>步骤2：打开配置设置</h3>
<ol>
<li>在左侧导航栏中，选择&ldquo;系统&rdquo;。</li>
<li>在下拉菜单中，选择&ldquo;配置&rdquo;。</li>
</ol>
<h3>步骤3：选择管理操作日志设置</h3>
<p>在配置页面，选择&ldquo;高级&rdquo;部分。在这里，你可以看到&ldquo;系统&rdquo;下的&ldquo;管理操作日志&rdquo;。</p>
<h3>步骤4：启用管理操作日志</h3>
<ol>
<li>将&ldquo;启用管理操作日志&rdquo;选项切换为&ldquo;是&rdquo;。</li>
<li>根据需要，你还可以调整&ldquo;最长日志保留期限&rdquo;以限制日志保存的时间。</li>
</ol>
<h3>步骤5：保存配置</h3>
<p>确保在更改设置后，点击页面右上角的&ldquo;保存配置&rdquo;按钮。</p>
<h3>步骤6：检查日志</h3>
<p>现在，Magento 2将开始记录管理操作日志。你可以在系统的/var/log目录中找到日志文件。</p>
<div id="gtx-trans" style="position: absolute; left: -132px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 04 Jan 2024 06:52:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中重写控制器]]></title>
      <link>https://www.360magento.com/blog/magento-review-Controller/</link>
      <description><![CDATA[<h2>1. <span>了解Magento的控制器结构</span></h2>
<p>在开始重写控制器之前，首先需要了解Magento的控制器结构。Magento的控制器通常位于<code>app/code/{Vendor}/{Module}/Controller/{Path}</code>目录下。了解控制器的路径结构以及它们是如何组织的，对于成功地进行重写是至关重要的。</p>
<h2>2. <span>选择重写的控制器</span></h2>
<p>确定你想要重写的控制器。在Magento中，你可以通过查看模块的<code>routes.xml</code>文件来了解控制器的路由和名称。选择与你定制需求相关的控制器进行重写。</p>
<h2>3. <span>创建一个新的模块</span></h2>
<p>在开始重写之前，创建一个新的Magento模块。这可以通过创建一个<code>registration.php</code>文件和一个<code>module.xml</code>文件来实现。确保在<code>module.xml</code>文件中指定正确的依赖关系和顺序。</p>
<h2>4. <span>创建新的控制器类</span></h2>
<p>在新的模块中创建一个新的控制器类，该类将用于替代原始控制器。确保这个类继承自原始控制器，并重写你需要修改的方法。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/QQ20240102-151524_2x.png" /></p>
<h2>5. <span>配置重写</span></h2>
<p>在新的模块目录下，创建一个<code>di.xml</code>文件，用于配置控制器的重写。在文件中添加以下内容：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/QQ20240102-151535_2x.png" /></p>
<p>确保替换大括号内的占位符为你实际的供应商、模块和控制器路径。</p>
<h2>6. <span>清除缓存</span></h2>
<p>在完成上述步骤后，清除Magento缓存以确保新的控制器类得到正确加载。</p>]]></description>
      <pubDate>Wed, 03 Jan 2024 07:14:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento JS异步加载优化]]></title>
      <link>https://www.360magento.com/blog/magento-js-custom/</link>
      <description><![CDATA[<p>JavaScript异步加载是提高Magento网站性能的一项重要策略。通过在加载JavaScript时优化异步加载，你可以确保页面在等待文件下载和执行时仍能够迅速呈现。以下是一些建议，帮助你优化Magento JS异步加载。</p>
<h2>1. 合理使用异步标记</h2>
<p>在Magento中，你可以使用<code>async</code>标记来异步加载JavaScript文件。确保仅将此标记应用于不影响关键用户交互和页面渲染的文件。对于必需的JS文件，考虑使用延迟加载，以确保它们在页面准备好时加载。</p>
<p>&lt;script src="your-script.js" async&gt;&lt;/script&gt;</p>
<h2>2. 考虑使用延迟加载</h2>
<p>延迟加载允许JavaScript文件在页面加载完毕后再加载，而不会阻塞页面的初始渲染。这对于非关键脚本和跟踪代码非常有用，但要小心不要延迟加载对页面关键功能和用户体验有影响的文件。<br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"your-script.js"</span> <span class="hljs-attr">defer</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></p>
<h2>3. 优化加载顺序</h2>
<p>确保按照正确的顺序加载JavaScript文件，特别是对于依赖关系较强的文件。这可以防止潜在的错误和确保文件按照正确的顺序执行。</p>
<h2>4. 使用外部库和CDN</h2>
<p>考虑将常用的JavaScript库，如jQuery等，从外部引入并托管在内容分发网络（CDN）上。这可以提高文件加载速度，并利用CDN的缓存效果。</p>
<h2>5. 定期检查和测试</h2>
<p>在Magento后台启用JS合并和缓存时，定期检查并测试你的网站性能。确保这些优化措施仍然有效，并根据需要进行调整。</p>]]></description>
      <pubDate>Wed, 03 Jan 2024 03:11:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento布局]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-custom/</link>
      <description><![CDATA[<p>Magento是一款强大而灵活的电子商务平台，而布局设计是打造成功在线商店的关键因素之一。在这篇博客中，我们将深入探讨Magento布局的相关概念，帮助你优化你的网站设计，提升用户体验。</p>
<h2>1. Magento布局基础</h2>
<p>Magento采用XML文件定义布局，将页面划分为块（blocks）、容器（containers）和其他元素。了解布局基础是优化和定制你的商店外观的第一步。</p>
<h2>2. 主题和布局</h2>
<p>Magento主题是布局的核心组成部分之一。通过选择或创建适合你品牌的主题，你可以轻松改变整个商店的外观。了解如何在Magento中使用主题以及如何自定义主题布局是成功设计商店的关键。</p>
<h2>3. 响应式设计</h2>
<p>随着移动设备的普及，响应式设计变得至关重要。确保你的Magento布局能够适应不同屏幕大小和设备类型，提供无缝的用户体验。</p>
<h2>4. 布局调试和优化</h2>
<p>在实际设计中，布局可能会遇到一些挑战。学会使用Magento提供的调试工具，如Layout Handles和Template Path Hints，可以帮助你更轻松地识别和解决布局问题。</p>
<h2>5. 自定义布局元素</h2>
<p>除了使用Magento提供的默认布局元素外，你还可以通过自定义块和容器来进一步个性化你的商店。掌握如何添加自定义布局元素将帮助你实现更精确的设计目标。</p>]]></description>
      <pubDate>Tue, 02 Jan 2024 07:19:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2集成支付]]></title>
      <link>https://www.360magento.com/blog/integrating-payment-gateways-magento-2/</link>
      <description><![CDATA[<p>在电商网站中，集成支付网关是一个关键的任务，而Magento 2提供了强大的功能来实现与各种支付网关的集成。本篇博客将为您介绍Magento 2集成支付网关的步骤和注意事项，帮助您顺利实现安全、可靠的在线支付功能。</p>
<p>首先，我们将讨论Magento 2支付网关集成的准备工作。这包括了解您选择的支付网关的要求和接口文档，获取必要的API密钥和凭证，以及确保您的Magento 2网站具备HTTPS支持和SSL证书等安全要求。</p>
<p>接下来，我们将深入探讨Magento 2支付网关集成的实际步骤。我们将介绍如何使用Magento 2的扩展机制来安装和配置支付网关模块。您将学习如何设置支付网关的参数、回调URL和通知机制，以确保支付交易的正常处理和状态更新。</p>
<p>我们还将讨论Magento 2中的支付流程和订单管理。您将了解如何处理支付请求、生成订单、更新订单状态和发送支付确认邮件给客户。</p>
<p>除了基本的支付网关集成，我们还将介绍一些高级功能和注意事项。这包括处理退款和取消订单、处理异常情况和错误处理、以及实施额外的安全性措施，如双因素身份验证和反欺诈策略等。</p>
<p>最后，我们将分享一些Magento 2支付网关集成的最佳实践。这些实践包括进行充分的测试和模拟交易，定期监测支付交易日志和报告，以及保持与支付网关提供商的沟通和升级。</p>]]></description>
      <pubDate>Mon, 01 Jan 2024 07:08:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento主题开发]]></title>
      <link>https://www.360magento.com/blog/magento-theme-development/</link>
      <description><![CDATA[<p>在电商网站设计中，主题起着至关重要的作用，决定了网站的外观和用户体验。Magento作为一款流行的电商平台，提供了强大而灵活的主题开发功能，使网站开发人员能够根据特定需求定制化网站设计。本文将详细介绍Magento主题开发的关键步骤，帮助您创建独特且符合品牌形象的电商网站。</p>
<ol>
<li>理解Magento主题结构</li>
</ol>
<p>首先，我们将介绍Magento主题的基本结构。您将了解到Magento主题的目录结构，包括主题文件夹、布局文件、模板文件、静态资源文件等。我们将解释每个文件夹和文件的作用，以及它们在主题开发中的重要性。</p>
<ol start="2">
<li>创建自定义主题</li>
</ol>
<p>接下来，我们将讨论如何创建自定义主题。您将学习如何在Magento中创建新的主题文件夹，并设置主题的层次结构。我们还将介绍如何创建主题的配置文件，并设置主题的父主题（如果有）。此外，我们将探讨如何在Magento后台中启用和配置自定义主题。</p>
<ol start="3">
<li>定义主题布局</li>
</ol>
<p>在本节中，我们将重点介绍如何定义主题的布局。您将学习如何创建主题的布局文件，并使用Magento的布局指令来定义页面的结构和内容。我们将讨论如何定义主页、分类页面、产品页面等的布局，并展示如何使用块和容器来组织页面的不同部分。</p>
<ol start="4">
<li>定制主题样式</li>
</ol>
<p>在此部分，我们将讨论如何定制主题的样式。您将了解如何使用CSS和LESS来修改主题的样式表，并实现自定义的外观效果。我们将介绍如何使用Magento的样式继承机制和样式覆盖规则，以确保样式修改的正确应用。</p>
<ol start="5">
<li>集成JavaScript和定制功能</li>
</ol>
<p>最后，我们将讨论如何集成JavaScript和定制功能到主题中。您将学习如何添加自定义JavaScript文件，并进行必要的初始化和事件处理。我们还将介绍如何使用Magento的模块开发功能，添加自定义功能和扩展到主题中，以满足特定需求。</p>]]></description>
      <pubDate>Sun, 31 Dec 2023 16:22:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2主题开发]]></title>
      <link>https://www.360magento.com/blog/magento-2-theme-development/</link>
      <description><![CDATA[<p>Magento 2作为一款功能强大的电商平台，提供了丰富的主题定制化选项，使您能够个性化您的电商网站外观。在本篇博客中，我们将深入探讨Magento 2主题开发，帮助您定制化网站外观，以满足品牌需求和提供卓越的用户体验。</p>
<p>首先，我们将介绍Magento 2主题的基本结构和文件组成。了解主题的目录结构、模板文件和布局文件的关系，是进行主题开发的关键。</p>
<p>接下来，我们将讨论Magento 2主题开发中的样式定制。您将学习如何使用CSS和LESS来修改和定制网站的样式，包括颜色、字体、布局等。我们还将介绍如何使用Magento 2的样式覆盖机制和模块化CSS来避免样式冲突。</p>
<p>我们还将深入研究Magento 2主题的模板定制。通过修改和定制Magento 2的模板文件，您可以调整网站的布局、块级元素和内容显示。我们将演示如何使用Magento 2的块和容器来构建自定义页面和部分，以及如何使用UI组件来实现交互功能。</p>
<p>此外，我们将讨论Magento 2主题开发中的响应式设计。了解如何创建响应式的主题，以适应不同设备和屏幕尺寸，将为您的电商网站提供无缝的跨平台体验。</p>
<p>最后，我们将分享一些Magento 2主题开发的最佳实践和调试技巧。这些实践包括代码规范、调试工具和跨浏览器测试，以确保您开发的主题在各种环境下工作正常。</p>
<p>通过本篇博客，您将掌握Magento 2主题开发的关键技巧，能够定制化您的电商网站外观，提升品牌形象和用户体验。</p>]]></description>
      <pubDate>Sun, 31 Dec 2023 08:07:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento布局开发]]></title>
      <link>https://www.360magento.com/blog/magento-layout-insights/</link>
      <description><![CDATA[<p>在电商网站的设计和开发过程中，布局起着至关重要的作用。Magento作为一款流行的电商平台，提供了灵活而强大的布局系统，使网站设计人员能够创建具有吸引力和功能性的页面。本文将深入探讨Magento布局的重要性以及如何优化布局以提升电商网站的设计和用户体验。</p>
<ol>
<li>了解Magento布局体系结构</li>
</ol>
<p>首先，我们将介绍Magento布局体系结构的基本概念。您将了解到Magento布局的层次结构，包括布局文件、块（Blocks）和容器（Containers）的概念。我们将探讨布局文件的作用和结构，并介绍常用的布局文件类型，如XML布局文件和主题布局文件。</p>
<ol start="2">
<li>使用布局文件自定义页面结构</li>
</ol>
<p>接下来，我们将讨论如何使用Magento的布局文件来自定义页面结构。您将了解如何创建自定义布局文件，并使用布局指令来定义页面上的块和容器。我们将介绍如何在布局文件中引用模板文件和块类，并向您展示如何使用布局文件来组织页面的不同部分和内容。</p>
<ol start="3">
<li>利用布局文件进行页面排版和设计</li>
</ol>
<p>在本节中，我们将探讨如何使用Magento的布局文件进行页面排版和设计。您将学习如何使用布局指令来定义页面的列和行，以及如何配置块和容器的位置和大小。我们还将介绍如何使用Magento的栅格系统来创建响应式布局，以适应不同的设备和屏幕尺寸。</p>
<ol start="4">
<li>优化布局以提升用户体验</li>
</ol>
<p>最后，我们将分享一些优化布局的最佳实践，以提升电商网站的用户体验。您将学习如何合理使用布局文件和块来优化页面加载速度，以及如何通过合理的布局设计来提升页面的可用性和易用性。我们还将介绍如何使用Magento的布局更新（Layout Updates）功能来实现页面的动态变化和个性化。</p>]]></description>
      <pubDate>Sun, 31 Dec 2023 03:21:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2缓存优化]]></title>
      <link>https://www.360magento.com/blog/optimizing-magento-2-performance/</link>
      <description><![CDATA[<p>作为一款功能强大的电商平台，Magento 2的性能优化对于提供良好的用户体验至关重要。在本篇博客中，我们将分享一些优化Magento 2性能的关键技巧，帮助您加速网站加载速度、提高响应性能，并提升整体用户体验。</p>
<p>首先，我们将介绍Magento 2的缓存系统。了解如何正确配置和管理Magento 2的缓存设置，包括页面缓存、块级缓存和对象缓存，可以显著减少页面加载时间和数据库负载。</p>
<p>接着，我们将探讨优化Magento 2的数据库性能。通过优化数据库查询、索引和表结构，您可以提高数据访问速度和响应性能。我们还将介绍工具和技术，如数据库分片和读写分离，用于处理高负载情况下的数据库压力。</p>
<p>我们还将讨论优化Magento 2前端性能的关键技巧。这包括合并和压缩CSS和JavaScript文件、使用图像优化技术、启用HTTP/2和CDN等，以加快网页加载速度并减少网络请求。</p>
<p>此外，我们将分享一些针对Magento 2的服务器配置和优化建议。通过正确配置服务器环境、调整PHP和数据库参数，以及使用高性能缓存和反向代理等技术，您可以提升Magento 2的整体性能表现。</p>
<p>最后，我们将提供一些监测和测试Magento 2性能的工具和方法。通过定期监测和测试，您可以识别瓶颈和性能问题，并采取相应的优化措施。</p>
<p>通过本篇博客，您将了解到一些关键的技巧和最佳实践，帮助您优化Magento 2的性能，提升网站速度和用户体验。</p>]]></description>
      <pubDate>Sat, 30 Dec 2023 08:06:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2安全性指南]]></title>
      <link>https://www.360magento.com/blog/magento-2-security-guide/</link>
      <description><![CDATA[<p>首先，我们将介绍Magento 2的安全功能和设置。这包括使用安全证书（SSL）来加密网站的通信，启用两步验证（2FA）以增强管理员和用户的身份验证，以及配置强密码策略和登录尝试限制来防止恶意登录。</p>
<p>接着，我们将深入研究Magento 2安全性的主要方面。您将了解到如何保护Magento 2的后台管理页面，包括限制IP访问、使用安全的管理员用户名和密码，以及监控和审计管理员活动。我们还将讨论如何保护Magento 2的数据库，包括加密敏感数据、定期备份和监控数据库的安全性。</p>
<p>我们还将探讨Magento 2插件和主题的安全性。您将学习如何选择可靠的插件和主题供应商，审查插件和主题的代码质量和安全性，以及定期更新和升级插件和主题以修复安全漏洞。</p>
<p>此外，我们将介绍一些Magento 2安全性的最佳实践和建议。这些实践包括定期更新Magento 2的核心代码和扩展，使用安全的托管环境和防火墙，定期进行安全性扫描和漏洞评估，以及培训员工和用户有关安全性最佳实践和保护隐私的意识。</p>
<p>最后，我们将分享一些Magento 2安全性资源和社区支持。您将了解到可以获取安全性文档、漏洞报告和安全更新的官方资源，以及参与Magento 2安全性社区和论坛的机会。</p>]]></description>
      <pubDate>Sat, 30 Dec 2023 03:16:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento数据库优化]]></title>
      <link>https://www.360magento.com/blog/magento-database-optimization/</link>
      <description><![CDATA[<p>数据库是Magento系统关键组成部分,优化它对提升整体性能影响重大。主要优化方面包括:</p>
<ol>
<li>索引优化</li>
</ol>
<p>根据查询条件添加合理索引,如商品名、分类等字段。</p>
<ol start="2">
<li>表结构优化</li>
</ol>
<p>调整表字段类型、去除没用字段、合并小表等操作。</p>
<ol start="3">
<li>查询优化</li>
</ol>
<p>避免表关联深度过多,使用explain分析查询效率。</p>
<ol start="4">
<li>缓存查询结果</li>
</ol>
<p>对常用数据如商品信息等进行缓存,降低查询次数。</p>
<ol start="5">
<li>分表设计</li>
</ol>
<p>对数据量大的表 like order_item 分割表。</p>
<ol start="6">
<li>数据库参数调优</li>
</ol>
<p>优化MySQL参数如查询缓存大小、连接数等。</p>
<ol start="7">
<li>数据归档</li>
</ol>
<p>定期归档老数据到其他数据库或表,降低活跃表数据量。</p>
<p>通过系统地进行这些优化,可以显著提升Magento数据库访问效率,对整体系统性能提升很重要。</p>]]></description>
      <pubDate>Fri, 29 Dec 2023 07:05:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 SEO优化]]></title>
      <link>https://www.360magento.com/blog/magento-2-seo-optimization/</link>
      <description><![CDATA[<p>在竞争激烈的电商市场中，优化您的网站以提升搜索排名是至关重要的。Magento 2作为一款流行的电商平台，提供了各种功能和工具来帮助您进行SEO（搜索引擎优化）。在本篇博客中，我们将深入探讨Magento 2的SEO优化策略和技巧，帮助您提升电商网站在搜索引擎中的可见性和排名。</p>
<p>首先，我们将介绍Magento 2中的基本SEO设置和配置。您将学习如何优化网站的标题（Title）、描述（Meta Description）和关键词（Meta Keywords），以及如何生成友好的URL结构。我们还将讨论如何设置网站地图（Sitemap）和Robots.txt文件，以便搜索引擎能够正确地抓取和索引您的网页。</p>
<p>接下来，我们将深入探讨Magento 2网页优化的关键因素。这包括优化网页内容、使用关键词和标签、以及创建高质量的产品和类别页面。我们还将介绍如何优化网页的加载速度和性能，以提供更好的用户体验和满足搜索引擎的要求。</p>
<p>我们还将讨论Magento 2中的技术SEO优化。这包括使用友好的URL重写（URL Rewrites）来消除重复内容和优化链接结构，设置301重定向以处理页面重定向和更改，以及使用Canonical标签来处理重复内容和规范化网页版本。</p>
<p>除了基本的SEO优化，我们还将介绍一些高级策略和技巧。这包括优化图像和多媒体内容、集成社交媒体和用户生成内容、以及使用结构化数据（Schema Markup）来增强搜索结果的显示。</p>
<p>最后，我们将分享一些Magento 2 SEO优化的最佳实践和工具。这些实践包括进行关键词研究和竞争分析、定期监测和跟踪搜索排名和流量、以及参与社区和论坛来获取更多的SEO建议和支持。</p>]]></description>
      <pubDate>Fri, 29 Dec 2023 03:09:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 REST API]]></title>
      <link>https://www.360magento.com/blog/mobile-development-with-magento-2-rest-api/</link>
      <description><![CDATA[<p>Magento 2提供了完整的RESTful API接口,开发者可以基于此为移动端应用快速开发 order 管理、商品浏览等功能:</p>
<ol>
<li>获取Access Token</li>
</ol>
<p>调用OAuth接口获取长期有效的访问令牌。</p>
<ol start="2">
<li>API路由与权限</li>
</ol>
<p>了解各API接口地址与需要的权限级别。</p>
<ol start="3">
<li>数据模型与实体</li>
</ol>
<p>传输的JSON格式与Magento对象对应。</p>
<ol start="4">
<li>订单管理API</li>
</ol>
<p>创建、更新订单以及查询订单详情状态。</p>
<ol start="5">
<li>商品资源API</li>
</ol>
<p>搜索、浏览分类和商品详情信息。</p>
<ol start="6">
<li>客户资源API</li>
</ol>
<p>管理用户地址单和客户账户信息。</p>
<ol start="7">
<li>配置API</li>
</ol>
<p>获取系统配置如货币的信息。</p>
<ol start="8">
<li>异步任务API</li>
</ol>
<p>支持定期同步更新订单等后台任务。</p>
<ol start="9">
<li>错误处理</li>
</ol>
<p>标准化处理各类API调用错误。</p>
<p>利用REST API可以快速构建跨平台的移动解决方案,有效扩展Magento商城业务。</p>]]></description>
      <pubDate>Thu, 28 Dec 2023 07:04:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2插件开发]]></title>
      <link>https://www.360magento.com/blog/magento-2-plugin-development/</link>
      <description><![CDATA[<p>Magento 2作为一款功能强大的电商平台，提供了插件开发的灵活性，使您能够扩展和定制化您的电商网站功能。在本篇博客中，我们将深入探讨Magento 2插件开发，帮助您扩展网站功能，满足特定业务需求和提供更好的用户体验。</p>
<p>首先，我们将介绍Magento 2插件的基本概念和结构。了解插件的目录结构、配置文件和代码组成是进行插件开发的关键。我们还将探讨插件的类型，包括观察者（Observers）、插件（Plugins）和扩展（Extensions），以及它们在Magento 2中的应用场景和用途。</p>
<p>接下来，我们将深入研究Magento 2插件开发中的关键技术和功能。您将学习如何使用观察者模式来监听和响应Magento 2中的事件，以实现定制化的业务逻辑。我们还将介绍如何使用插件来修改和扩展Magento 2的核心功能，如模型（Models）、控制器（Controllers）和块（Blocks）。</p>
<p>我们还将讨论Magento 2插件开发中的最佳实践和调试技巧。这些实践包括使用正确的事件和插件顺序、编写干净和可维护的代码、以及使用调试工具和日志记录来排查问题和优化性能。</p>
<p>除了基本的插件开发，我们还将介绍一些高级功能和应用。这包括创建自定义的插件配置、实现插件的版本控制和升级、以及在多个Magento 2实例之间共享和复用插件。</p>
<p>最后，我们将分享一些Magento 2插件开发的资源和社区支持。您将了解到可以获取插件开发文档、示例代码和教程的官方资源，以及参与Magento 2开发者社区和论坛的机会。</p>]]></description>
      <pubDate>Wed, 27 Dec 2023 16:09:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[了解Magento 2的模块开发]]></title>
      <link>https://www.360magento.com/blog/magento-2-module-development/</link>
      <description><![CDATA[<p>Magento 2是一款功能强大的开源电商平台，广泛应用于各种规模的电商网站。其中，模块开发是扩展和定制Magento 2功能的关键部分。在本篇博客中，我们将深入了解Magento 2的模块开发，为您提供宝贵的指导和技巧。</p>
<p>首先，我们将介绍Magento 2模块的基本结构和组成部分。了解模块的目录结构、配置文件和代码组织对于正确开发和集成模块至关重要。</p>
<p>接下来，我们将深入探讨Magento 2模块的事件（Event）和观察者（Observer）系统。通过使用事件和观察者，您可以在Magento 2的各个关键点插入自定义逻辑，实现个性化的功能扩展。</p>
<p>我们还将介绍Magento 2模块的插件（Plugin）机制。插件提供了一种非侵入性的方式，允许您修改和扩展Magento 2核心类的行为。我们将详细讨论插件的创建、配置和使用。</p>
<p>此外，我们将研究Magento 2模块的数据库操作和数据迁移。您将学习如何使用Magento 2提供的资源模型和安装脚本来管理数据库结构和数据。</p>
<p>最后，我们将分享一些Magento 2模块开发的最佳实践。这些实践包括代码质量、性能优化和安全性等方面的建议，以确保您开发的模块在生产环境中稳定可靠。</p>]]></description>
      <pubDate>Wed, 27 Dec 2023 07:03:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2数据迁移]]></title>
      <link>https://www.360magento.com/blog/comprehensive-guide-magento-2-data-migration/</link>
      <description><![CDATA[<p>在将您的电商网站迁移到Magento 2平台时，数据迁移是一个至关重要的任务。为了帮助您顺利迁移数据并确保数据完整性，本篇博客将提供Magento 2数据迁移的综合指南，涵盖关键步骤、工具和最佳实践。</p>
<p>首先，我们将介绍Magento 2数据迁移的准备工作。这包括了解您当前网站的数据结构、数据库和文件系统，以及评估迁移的范围和复杂性。我们还将讨论如何创建备份和快照，以防止数据丢失或损坏。</p>
<p>接下来，我们将深入探讨Magento 2数据迁移的不同方法。您将了解到使用Magento 2的数据迁移工具（Data Migration Tool）的步骤和流程。我们还将介绍如何使用第三方迁移工具和扩展，以满足特定的迁移需求。</p>
<p>我们将讨论Magento 2数据迁移中的常见挑战和解决方案。这包括处理数据格式的不兼容性、解决数据库架构差异、以及处理自定义模块和功能的迁移问题。我们还将提供一些建议和技巧，帮助您克服潜在的问题和障碍。</p>
<p>除了基本的数据迁移，我们还将介绍如何迁移其他关键数据，如产品、订单、客户和库存。您将学习如何映射和转换数据字段、处理数据关联性、以及确保数据的一致性和准确性。</p>]]></description>
      <pubDate>Wed, 27 Dec 2023 03:09:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2与跨境电子商务]]></title>
      <link>https://www.360magento.com/blog/magento2-cross-border-ecommerce-strategies/</link>
      <description><![CDATA[<p>随着全球化和数字化的推进，跨境电子商务成为许多商家拓展市场的重要途径。作为一种功能丰富的电子商务平台，Magento 2为商家提供了一系列跨境电子商务策略和扩展功能，帮助他们克服跨境交易中的挑战，并实现全球销售。在本文中，我们将探讨一些适用于Magento 2的跨境电子商务策略和扩展。</p>
<ol>
<li>
<p>多语言和多货币支持：利用Magento 2的多语言和多货币功能，将您的网站本地化以适应不同的目标市场。提供多种语言选项和货币转换功能，可以提高用户的舒适度和购买意愿。</p>
</li>
<li>
<p>地理定位和本地化：通过使用地理定位技术和本地化策略，向用户提供与其所在地区相关的内容、价格和优惠。根据用户的位置和IP地址，自动调整货币、税率和运费等信息，提高用户的购买体验和转化率。</p>
</li>
<li>
<p>国际物流和运输：整合Magento 2与全球物流服务提供商，以简化跨境物流和运输过程。提供多个物流选项、实时运费计算和订单追踪功能，确保订单能够快速、可靠地送达全球各地。</p>
</li>
<li>
<p>海关和税务合规性：了解目标市场的海关和税务规定，并确保您的Magento 2网站符合当地的法规要求。提供正确的产品分类、税率计算和报关文件，以避免海关问题和税务纠纷。</p>
</li>
<li>
<p>支付和结算：提供多种跨境支付选项，如信用卡支付、电子钱包和本地化支付解决方案。整合安全可靠的支付网关，并确保支付过程符合当地的支付安全标准和合规要求。</p>
</li>
<li>
<p>跨境营销和推广：针对不同的目标市场制定跨境营销和推广策略。利用Magento 2的市场营销工具和功能，如SEO优化、社交媒体整合和跨境广告活动，增加品牌曝光和用户参与度。</p>
</li>
<li>
<p>多国家客户支持：提供多语言的客户支持和售后服务，以满足不同国家和地区的用户需求。设立多语言的客服团队，并提供在线聊天、电子邮件和电话支持等渠道，解答用户的疑问和处理问题。</p>
</li>
<li>
<p>跨境数据分析和优化：利用Magento 2的数据分析工具和仪表板，深入了解不同国家和地区的市场表现和用户行为。根据数据结果进行优化和改进，调整产品定价、市场定位和营销策略，以提高跨境电子商务的效果和回报率。</p>
</li>
</ol>
<p>通过采用上述Magento 2中的跨境电子商务策略和扩展，您可以充分利用全球市场的机会，并实现全球范围内的业务增长。</p>]]></description>
      <pubDate>Tue, 26 Dec 2023 08:20:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中的安全性]]></title>
      <link>https://www.360magento.com/blog/mmagento2-security-measures/</link>
      <description><![CDATA[<p>作为一款广受欢迎的电子商务平台，Magento 2提供了一系列强大的安全性措施和最佳实践，以保护您的网站和客户的敏感信息免受潜在的威胁。在本文中，我们将介绍一些适用于Magento 2的关键安全性措施和建议。</p>
<ol>
<li>
<p>及时更新Magento版本：确保您的Magento 2平台及其相关扩展和插件始终使用最新的安全补丁和更新版本。定期检查Magento官方网站和社区，以获取最新的安全性公告和建议，并遵循官方的升级指南。</p>
</li>
<li>
<p>强化管理员访问控制：采取措施限制对Magento管理员后台的访问。创建强密码并定期更改密码，使用双因素身份验证增加额外的安全层级，并仅授予必要的管理员权限给相关人员。</p>
</li>
<li>
<p>安全的扩展和主题：仅从官方Magento Marketplace或可信的第三方开发者处获取和安装扩展和主题。审查扩展和主题的评分、用户评论和开发者声誉，并确保它们是经过安全审计和测试的。</p>
</li>
<li>
<p>进行安全扫描和漏洞测试：定期进行Magento网站的安全扫描和漏洞测试，以检测潜在的漏洞和弱点。使用安全扫描工具和服务来评估您的网站的安全性，并及时修复发现的问题。</p>
</li>
<li>
<p>数据备份和恢复计划：定期备份Magento 2网站的数据，并确保备份数据存储在安全的位置。创建详细的数据恢复计划，以便在发生数据丢失或系统故障时能够快速恢复网站功能。</p>
</li>
<li>
<p>安全的支付和敏感信息保护：采用安全的支付网关和加密技术，以保护客户的支付信息和敏感数据。确保您的网站使用HTTPS协议进行安全的数据传输，并遵守PCI DSS（支付卡行业数据安全标准）的合规要求。</p>
</li>
<li>
<p>监控和日志记录：设置实时监控和日志记录系统，以及时检测和记录异常活动。监测登录尝试、访问模式和异常行为，并建立警报机制，以便在发生安全事件时能够及时采取行动。</p>
</li>
<li>
<p>培训和意识提升：定期为您的团队提供安全意识培训，教育他们识别和应对潜在的网络威胁。强调密码安全、社会工程学攻击和恶意软件防范等关键安全概念。</p>
</li>
</ol>
<p>通过采用上述Magento 2中的安全性措施和最佳实践，您可以提高您的网站和客户数据的安全性，并降低潜在的安全风险和漏洞。</p>]]></description>
      <pubDate>Tue, 26 Dec 2023 03:22:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中的优化建议]]></title>
      <link>https://www.360magento.com/blog/magento2-mobile-optimization/</link>
      <description><![CDATA[<p>随着移动设备的普及和用户购物行为的变化，为移动用户提供优质的体验变得至关重要。作为一种功能强大的电子商务平台，Magento 2提供了一系列移动优化策略和最佳实践，以确保您的网站在移动设备上获得卓越的性能和用户体验。在本文中，我们将分享一些适用于Magento 2的移动优化策略和技巧。</p>
<ol>
<li>
<p>响应式网站设计：采用响应式网站设计，确保您的Magento 2网站能够自适应不同大小的移动设备屏幕。响应式设计可以提供一致的用户体验，并避免为每个设备单独创建独立的网站版本。</p>
</li>
<li>
<p>移动友好的用户界面：优化您的Magento 2网站的用户界面，使其在移动设备上易于导航和操作。确保按钮和链接足够大，并避免使用弹出窗口和复杂的表单输入，以提高用户的互动和转化率。</p>
</li>
<li>
<p>加速网站加载速度：移动设备通常具有较低的带宽和处理能力，因此优化您的Magento 2网站以提高加载速度至关重要。压缩图像、减少HTTP请求、优化CSS和JavaScript文件，并启用浏览器缓存等措施，可以显著提升移动网站的性能。</p>
</li>
<li>
<p>移动支付选项：为移动用户提供多种方便快捷的支付选项，如移动钱包、支付宝、微信支付等。简化结账流程，并确保移动支付体验安全可靠，以提高用户的购买转化率。</p>
</li>
<li>
<p>移动搜索优化：优化您的Magento 2网站以适应移动搜索引擎的需求。重点关注移动关键词和本地化搜索，确保您的网站内容对移动用户具有高度相关性和可见性。</p>
</li>
<li>
<p>视频和图像优化：在移动设备上播放视频和加载图像可能会消耗用户的流量和时间。优化视频和图像的大小和格式，以提供高质量的视觉体验，同时减少加载时间和数据消耗。</p>
</li>
<li>
<p>移动推送通知：利用Magento 2的移动推送通知功能，向用户发送个性化的促销和重要信息。通过向移动用户发送定制化的通知，您可以增加用户参与度和购买动力。</p>
</li>
<li>
<p>移动设备测试：确保定期在各种移动设备上测试您的Magento 2网站。检查页面布局、功能和用户体验，并解决任何移动设备兼容性问题，以提供一致的优质体验。</p>
</li>
</ol>
<p>通过采用上述Magento 2中的移动优化策略和最佳实践，您可以提供出色的移动用户体验，并吸引更多移动用户进行购买和交互。</p>]]></description>
      <pubDate>Mon, 25 Dec 2023 08:18:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的搜索引擎优化（SEO）策略和技巧]]></title>
      <link>https://www.360magento.com/blog/magento-seo-strategies/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务领域中，将您的Magento网站优化为搜索引擎友好的是吸引更多有针对性的流量和提升在线可见性的关键。通过采用一系列的搜索引擎优化（SEO）策略和技巧，您可以提高您的Magento网站在搜索引擎结果页面中的排名。在本文中，我们将介绍一些适用于Magento的SEO策略和最佳实践，帮助您最大程度地优化您的网站。</p>
<ol>
<li>
<p>关键词研究和优化：通过进行关键词研究，确定与您的产品和业务相关的关键词和短语。将这些关键词合理地应用于您的Magento网站的页面标题、元描述、URL和内容中，以帮助搜索引擎了解您的网站内容和关键主题。</p>
</li>
<li>
<p>优化页面元素：确保每个页面都具有唯一且相关的页面标题和元描述。使用有意义的标题标签（H1、H2等）来组织页面内容，并优化页面URL以反映关键词和内容。</p>
</li>
<li>
<p>内部链接优化：在您的Magento网站内部进行链接优化，以建立页面之间的相关性和内部权重传递。使用有关键词的锚文本链接相关页面，并创建一个清晰的网站结构，使搜索引擎和用户都可以轻松导航和理解您的网站。</p>
</li>
<li>
<p>图像优化：对您的Magento网站中的图像进行优化，包括使用描述性的文件名和替代文本（ALT文本），以帮助搜索引擎理解图像内容。还可以压缩图像文件大小，以提高页面加载速度。</p>
</li>
<li>
<p>用户友好的URL结构：使用简洁、描述性和用户友好的URL结构，包括关键词和相关信息。避免使用复杂的参数和动态URL，优先选择静态URL。</p>
</li>
<li>
<p>网站速度优化：优化您的Magento网站以提高页面加载速度。压缩CSS和JavaScript文件，启用浏览器缓存，优化图像大小，减少HTTP请求等，以提供更快的用户体验和搜索引擎的偏好。</p>
</li>
<li>
<p>社交媒体整合：在您的Magento网站上集成社交媒体分享按钮，并确保您的网站内容易于分享和传播。社交媒体的参与和分享可以增加您的网站的曝光度和流量。</p>
</li>
<li>
<p>定期监测和优化：使用分析工具来跟踪您的Magento网站的搜索引擎排名、流量来源和用户行为。根据数据结果，进行定期的优化和调整，以持续改进您的SEO策略和网站性能。</p>
</li>
</ol>
<p>通过采用上述Magento中的搜索引擎优化（SEO）策略和技巧，您可以提升您的网站在搜索引擎中的排名，吸引更多有针对性的流量，并提升在线业务的成功。</p>]]></description>
      <pubDate>Sun, 24 Dec 2023 07:24:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中提高电子商务转化率的关键策略]]></title>
      <link>https://www.360magento.com/blog/magento2-conversion-rate-strategies/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，提高转化率是每个在线商家的关键目标之一。Magento 2作为一种功能强大且灵活的电子商务平台，为商家提供了许多工具和功能来增加销售和转化率。在本文中，我们将分享一些提高您的Magento 2网站转化率的关键策略和技巧。</p>
<ol>
<li>
<p>简化购物体验：确保您的Magento 2网站的购物流程简单、直观且无缝。简化注册和结账过程，减少步骤和信息输入的要求，提供多种支付选项，并优化移动设备上的用户体验。简化购物体验可以减少购物车放弃率，并增加转化率。</p>
</li>
<li>
<p>提供个性化推荐：利用Magento 2的个性化推荐功能，向用户展示与他们兴趣和购买历史相关的产品。通过根据用户的喜好和行为提供相关的产品建议，可以增加交叉销售和重复购买的机会。</p>
</li>
<li>
<p>优化产品页面：确保您的产品页面具有清晰的产品图像、吸引人的描述和详细的规格信息。使用高品质的图像和视频展示产品，提供清晰的产品描述和特色，以吸引用户并增加他们的购买决策。</p>
</li>
<li>
<p>引入客户评价和社交证明：在您的Magento 2网站上添加客户评价和社交证明，如用户评论、评级和社交媒体分享。积极的客户评价和社交证明可以增加信任度，促使其他用户进行购买决策。</p>
</li>
<li>
<p>使用优惠和促销：利用Magento 2的优惠和促销功能，提供吸引人的优惠、折扣和奖励计划。通过限时促销、买一送一和积分奖励等策略，刺激用户的购买欲望，并增加转化率。</p>
</li>
<li>
<p>实施购物车提醒：在用户离开购物车而没有完成购买时，通过电子邮件或弹出窗口提醒他们购物车中的待购商品。这可以提醒用户并鼓励他们完成交易，减少购物车放弃率。</p>
</li>
<li>
<p>优化网站加载速度：确保您的Magento 2网站具有快速的加载速度，以提供流畅的用户体验。优化图像大小、合并和压缩CSS和JavaScript文件、启用浏览器缓存等措施可以提高网站的加载速度，减少用户的等待时间。</p>
</li>
<li>
<p>数据驱动的优化：利用Magento 2的分析工具和报告，深入了解用户行为和转化率数据。根据数据结果进行优化和测试，如A/B测试、多变量测试等，以不断改进您的网站和营销策略。</p>
</li>
</ol>
<p>通过采用上述关键策略和技巧，您可以提高您的Magento 2网站的转化率，增加销售和业务成功。记住，持续的测试、优化和关注用户反馈是实现持续改进的关键。</p>]]></description>
      <pubDate>Sun, 24 Dec 2023 03:27:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的用户体验优化策略和最佳实践]]></title>
      <link>https://www.360magento.com/blog/magento-user-experience-optimization/</link>
      <description><![CDATA[<p>提供卓越的用户体验是在竞争激烈的电子商务市场中脱颖而出的关键。当用户访问您的Magento网站时，他们期望流畅的浏览体验、易于导航的界面和简单的购物过程。在本文中，我们将介绍一些Magento中的用户体验优化策略和最佳实践，帮助您提供令人满意的用户体验并提升转化率。</p>
<ol>
<li>
<p>响应式设计：确保您的Magento网站具有响应式设计，可以自适应不同的设备和屏幕尺寸，包括桌面电脑、平板电脑和移动设备。这样可以确保用户在任何设备上都能获得一致的优质体验。</p>
</li>
<li>
<p>简化导航和布局：设计清晰、直观的导航结构，使用户能够轻松找到他们所需的产品和信息。使用易于理解的标签和菜单，并确保页面布局整洁、有序，减少混乱和冗余的元素。</p>
</li>
<li>
<p>快速加载速度：优化您的Magento网站以提高页面加载速度。压缩图像、合并和缓存CSS和JavaScript文件，并优化服务器响应时间，确保用户在访问您的网站时能够获得快速的响应和流畅的浏览体验。</p>
</li>
<li>
<p>简化购物流程：简化Magento网站的购物流程，使用户能够快速、方便地完成购买。减少步骤和填写字段的数量，提供多种支付选项，并确保购物车和结账过程清晰明了。</p>
</li>
<li>
<p>强调产品和内容：突出展示您的产品和内容，使用高质量的图像和详细的产品描述。提供用户评价和评论，以增加购买决策的信任度和可靠性。</p>
</li>
<li>
<p>个性化推荐：利用Magento的个性化推荐功能，根据用户的兴趣和行为推荐相关的产品和内容。这样可以提高用户的参与度和购买意愿。</p>
</li>
<li>
<p>多语言和多货币支持：如果您的目标市场跨越多个地区和语言，确保您的Magento网站支持多语言和多货币。这样可以为用户提供更个性化和便利的体验。</p>
</li>
<li>
<p>用户反馈和支持：提供易于访问的用户反馈渠道，如在线聊天、联系表单或客户支持热线。及时回应用户的问题和反馈，并持续改进用户支持体系。</p>
</li>
</ol>
<p>通过采用上述Magento中的用户体验优化策略和最佳实践，您可以提升您的网站的用户满意度，增加用户参与度，并提高转化率和客户忠诚度。</p>
<p>请记住，用户体验是一个不断演进的过程，需要不断地监测和改进。定期评估和优化您的Magento网站，以满足用户的期望和不断变化的市场需求。</p>]]></description>
      <pubDate>Sat, 23 Dec 2023 07:20:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的安全性最佳实践和保护策略]]></title>
      <link>https://www.360magento.com/blog/magento-securitys-best-practices/</link>
      <description><![CDATA[<p>保护您的Magento网站免受潜在的安全威胁是至关重要的。在今天的数字环境中，电子商务网站成为了黑客攻击的目标。为了确保您的Magento网站和客户数据的安全，您需要采取一系列的安全性最佳实践和保护策略。在本文中，我们将介绍一些Magento中的安全性最佳实践，帮助您加强网站的安全性。</p>
<ol>
<li>
<p>及时更新Magento版本：确保您的Magento网站始终运行最新版本的软件。Magento定期发布安全更新和补丁程序，以修复已知的漏洞和弱点。定期检查并应用这些更新，以确保您的网站免受已知漏洞的影响。</p>
</li>
<li>
<p>强化管理员访问：限制对Magento后台的访问权限，仅授权给必要的管理员用户。使用强密码和两步验证等安全措施，确保只有授权的用户能够登录和管理网站。</p>
</li>
<li>
<p>安全备份策略：定期备份您的Magento网站和数据库，并将备份存储在安全的位置。这样可以在发生安全事件或数据丢失时快速恢复网站功能。</p>
</li>
<li>
<p>安全扩展和主题：在安装任何Magento扩展或主题之前，确保它们来自可信赖的来源，并经过安全审查。仔细评估扩展和主题的代码质量和安全性，以避免安全漏洞和后门。</p>
</li>
<li>
<p>强化网络安全：使用防火墙和入侵检测系统来保护您的Magento服务器免受未经授权的访问和恶意攻击。定期监测服务器日志和网络活动，及时检测异常行为。</p>
</li>
<li>
<p>安全的支付处理：确保您的Magento网站采用安全的支付处理方式，如使用SSL证书加密用户与网站之间的通信，以保护敏感的支付信息。</p>
</li>
<li>
<p>安全审计和监测：定期进行安全审计和漏洞扫描，以识别潜在的安全风险和漏洞。使用安全监测工具来实时监测您的Magento网站，及时发现和应对任何安全威胁。</p>
</li>
<li>
<p>培训和意识提升：培训您的团队成员，包括管理员和开发人员，关于Magento安全性最佳实践和对抗潜在威胁的方法。增强员工的安全意识和敏感性，以确保他们能够正确处理安全问题和紧急情况。</p>
</li>
</ol>
<p>通过采用上述Magento中的安全性最佳实践和保护策略，您可以加固您的网站的安全防线，降低潜在风险，并保护您的客户数据和业务利益。</p>
<p>请记住，安全是一个持续的过程，需要定期评估和更新。随着安全威胁的不断演变，您需要保持警惕并及时采取相应的安全措施。</p>]]></description>
      <pubDate>Sat, 23 Dec 2023 03:23:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的SEO最佳实践和优化策略]]></title>
      <link>https://www.360magento.com/blog/magento-seo-best-practices/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，优化您的Magento网站以提高搜索引擎排名对于吸引更多的有机流量和增加销售至关重要。在本文中，我们将介绍一些Magento中的SEO最佳实践和优化策略，帮助您在搜索引擎结果页面上脱颖而出。</p>
<ol>
<li>
<p>关键字研究和优化：进行深入的关键字研究，了解您的目标受众在搜索引擎中使用的关键字。将这些关键字合理地应用于您的网站内容、标题、元标签和URL中，以提高页面的相关性和可发现性。</p>
</li>
<li>
<p>优化网站结构：确保您的Magento网站具有清晰的网站结构和导航层次。使用有意义的目录结构和URL结构，使搜索引擎和用户能够轻松浏览和理解您的网站。</p>
</li>
<li>
<p>内容优化：编写高质量、原创和有价值的内容是吸引搜索引擎和用户的关键。在您的Magento网站上创建有吸引力的产品描述、博客文章和页面内容，并确保关键字的自然集成。</p>
</li>
<li>
<p>图像优化：优化您的产品图像以提高搜索引擎的可索引性。使用描述性文件名和ALT标签，并压缩图像以提高页面加载速度。</p>
</li>
<li>
<p>友好的URL结构：使用有意义和描述性的URL，包含关键字，并避免使用动态参数。优化URL可以提高搜索引擎对页面的理解和排名。</p>
</li>
<li>
<p>网站速度优化：确保您的Magento网站具有快速的加载速度，以提供良好的用户体验并获得更好的搜索引擎排名。压缩和合并CSS和JavaScript文件，优化图像，并使用缓存和CDN等技术来减少页面加载时间。</p>
</li>
<li>
<p>社交媒体整合：将您的Magento网站与社交媒体平台整合，以增加社交分享和品牌曝光。通过分享按钮和社交媒体链接，鼓励用户与您的网站内容进行互动和分享。</p>
</li>
<li>
<p>持续监测和优化：使用工具如Google Analytics来监测您的Magento网站的关键指标，如流量来源、页面访问量和转化率。根据数据分析结果，优化您的SEO策略和网站内容，以实现更好的结果。</p>
</li>
</ol>
<p>通过采用上述Magento中的SEO最佳实践和优化策略，您可以提高您的网站在搜索引擎中的可见性和排名，吸引更多的有机流量，并增加销售和转化率。</p>]]></description>
      <pubDate>Fri, 22 Dec 2023 07:18:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的安全性最佳实践和保护策略]]></title>
      <link>https://www.360magento.com/blog/magento-security-best-practices/</link>
      <description><![CDATA[<p>保护您的Magento电子商务网站免受安全威胁是至关重要的。在今天的数字时代，保护客户数据、防止恶意攻击和确保网站的安全性是您作为网站所有者的首要任务。在本文中，我们将介绍一些Magento中的安全性最佳实践和保护策略。</p>
<ol>
<li>
<p>使用最新的Magento版本：始终使用最新的Magento版本，以确保您能够获得最新的安全更新和补丁程序。Magento持续发布安全更新，以解决已知的漏洞和强化系统的安全性。</p>
</li>
<li>
<p>强化管理员访问控制：限制对Magento后台的访问，并为管理员分配强密码和唯一的用户名。另外，使用双因素身份验证（2FA）来提供额外的安全层级。</p>
</li>
<li>
<p>安全的主机环境：选择可信赖的主机提供商，并确保他们提供安全的服务器环境。确保服务器上的操作系统、数据库和软件都得到及时更新和安全配置。</p>
</li>
<li>
<p>使用SSL加密：为您的Magento网站启用SSL证书，通过HTTPS协议来加密用户的敏感数据传输。这样可以防止中间人攻击和数据泄露，并为用户提供更安全的购物环境。</p>
</li>
<li>
<p>定期备份和恢复测试：定期备份Magento网站的数据库和文件，并进行恢复测试，以确保备份的可用性和完整性。这样可以在发生数据丢失或系统故障时快速还原网站。</p>
</li>
<li>
<p>安全扩展和主题：仅从可靠和受信任的源获取Magento扩展和主题。确保它们经过安全审查，并且来自可靠的供应商。定期更新和升级扩展和主题以获取最新的安全修复和功能改进。</p>
</li>
<li>
<p>监控和日志记录：启用Magento的日志记录功能，并监控网站的活动和访问。设置警报系统以及实时监控和检测潜在的安全威胁。</p>
</li>
<li>
<p>安全意识培训：培训您的团队，包括管理员和员工，以提高安全意识和识别潜在的网络威胁。教育他们关于密码安全、社交工程攻击和恶意软件防护等方面的最佳实践。</p>
</li>
</ol>
<p>通过采用上述Magento安全性最佳实践和保护策略，您可以大大提高您的电子商务网站的安全性，降低潜在的风险，并保护用户数据的机密性和完整性。</p>]]></description>
      <pubDate>Thu, 21 Dec 2023 16:16:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento中优化电子商务网站的性能]]></title>
      <link>https://www.360magento.com/blog/magento-performance-optimizations/</link>
      <description><![CDATA[<p>电子商务网站的性能优化对于提供卓越的用户体验、提高转化率和搜索引擎排名至关重要。在Magento中，有许多优化措施可以帮助您提升网站的性能。在本文中，我们将介绍一些Magento中优化电子商务网站性能的最佳实践。</p>
<ol>
<li>
<p>使用全页缓存（Full Page Cache）：Magento提供了全页缓存功能，通过缓存整个页面，可以显著提高页面加载速度。启用全页缓存并配置适当的缓存策略，可以减少数据库查询和动态页面生成的次数，从而提高性能。</p>
</li>
<li>
<p>压缩和合并CSS和JavaScript：将多个CSS和JavaScript文件合并为较少的文件，并使用压缩工具来减小文件大小。这样可以减少HTTP请求次数并提高页面加载速度。Magento提供了内置的资源合并和压缩功能，您可以在Magento后台启用它们。</p>
</li>
<li>
<p>优化图像：优化图像可以减少页面的加载时间。使用适当的图像格式（如JPEG、PNG）并压缩图像以减小文件大小。同时，使用图像的响应式设计，根据设备屏幕的大小提供适当尺寸的图像，避免无谓的带宽浪费。</p>
</li>
<li>
<p>使用CDN（内容分发网络）：通过使用CDN，您可以将网站的静态资源（如图像、CSS和JavaScript文件）分发到全球各地的服务器，从而实现更快的加载速度。选择一个可靠的CDN提供商，并将Magento配置为使用CDN来提供静态资源。</p>
</li>
<li>
<p>优化数据库：通过优化数据库表结构、使用索引和定期清理日志等方法，可以改善Magento网站的性能。使用Magento提供的数据库优化工具或借助第三方扩展来执行这些优化操作。</p>
</li>
<li>
<p>考虑使用缓存扩展：Magento还提供了许多缓存扩展，如Redis、Memcached等。这些扩展可以提供更高效的缓存存储和读取，进一步提升网站的性能。</p>
</li>
</ol>
<p>通过采用上述优化措施，您可以显著提升Magento电子商务网站的性能，提供更好的用户体验，并为您的业务增加竞争力。</p>
<p>请注意，这只是一些Magento性能优化的基本建议，实际的优化策略可能因网站的特定需求和配置而有所不同。建议在进行任何更改之前，先在测试环境中进行测试和验证。</p>]]></description>
      <pubDate>Thu, 21 Dec 2023 07:11:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的移动优化策略和最佳实践]]></title>
      <link>https://www.360magento.com/blog/magento-mobile-optimization/</link>
      <description><![CDATA[<p>移动设备的普及使得移动优化对于电子商务网站至关重要。在Magento中，实施有效的移动优化策略可以提升用户体验、增加转化率，并提高搜索引擎排名。在本文中，我们将介绍一些Magento中的移动优化策略和最佳实践。</p>
<ol>
<li>
<p>响应式设计：使用响应式设计来确保您的Magento网站在各种移动设备上都能够提供良好的用户体验。响应式设计可以根据设备屏幕的大小和分辨率自动调整网站的布局和样式，使其适应不同的屏幕尺寸。</p>
</li>
<li>
<p>移动友好的导航：精简和简化导航栏是移动优化的关键。确保导航栏在移动设备上易于操作，并提供简洁的菜单结构，以便用户能够轻松浏览和导航网站。</p>
</li>
<li>
<p>快速加载速度：移动设备通常具有较低的带宽和处理能力，因此快速加载速度对于移动优化至关重要。通过压缩和合并CSS和JavaScript文件、优化图像、启用缓存以及使用CDN等技术来减少页面加载时间。</p>
</li>
<li>
<p>简化结账流程：移动设备上的结账流程应尽可能简化和优化。减少步骤和输入字段，并提供易于填写的表单和选择器，以提高移动用户的结账转化率。</p>
</li>
<li>
<p>移动支付选项：提供多种移动支付选项，如移动钱包、支付宝、微信支付等，以满足移动用户的支付需求，并提高购物车转化率。</p>
</li>
<li>
<p>点击目标和按钮设计：确保按钮和点击目标具有足够的大小，以便在触摸屏上轻松点击。调整按钮样式和间距，以便移动用户可以轻松识别和操作。</p>
</li>
<li>
<p>测试和优化：在实施移动优化策略之前，进行适当的测试是必要的。使用移动设备和模拟器测试网站的响应性、布局和功能，并根据测试结果进行优化和改进。</p>
</li>
</ol>
<p>通过采用上述Magento移动优化策略和最佳实践，您可以提升移动用户的体验，增加转化率，并确保您的网站在移动设备上获得更好的可见性和排名。</p>
<p>请注意，移动优化是一个持续的过程，需要定期监测和优化。建议根据您的网站和用户需求，定期评估和改进移动优化策略。</p>]]></description>
      <pubDate>Wed, 20 Dec 2023 16:14:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[借助主题优化工具提升Magento模板效率]]></title>
      <link>https://www.360magento.com/blog/enhance-magento-theme-development-with-tools/</link>
      <description><![CDATA[<p>专注开发主题对提升Magento店铺用户体验很重要。为了提高开发效率,可以使用下列主题优化工具:</p>
<ol>
<li>
<p>Less/Sass编译器:比如Dart Sass支持变量、混合、导入等特性,简化CSS书写。</p>
</li>
<li>
<p>工程化工具:如Webpack打包主题资源,自动处理依赖、样式重用等任务。</p>
</li>
<li>
<p>部件库:像Magento UI提供了一套基础组件,减少重复开发工作。</p>
</li>
<li>
<p>主题开发插件:示例VSCode插件支持智能感知Magento路径、代码补全等。</p>
</li>
<li>
<p>模板引擎:例如Pug/Twig可读性好,有效提高模板效率。</p>
</li>
<li>
<p>图片优化:TinyPNG等在线服务可以自动压缩主题图片质量与体积。</p>
</li>
<li>
<p>原型设计工具:Axure或Zeplin可在设计阶段预览主题效果。</p>
</li>
<li>
<p>测试工具:Karma或WebDriver测试模板静动态脚本。</p>
</li>
</ol>
<p>使用这些功能强大的主题开发助手,可以更专注于商业需求,开发出高质量主题。</p>
<div id="gtx-trans" style="position: absolute; left: -186px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 20 Dec 2023 07:09:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[遵循这些Magento开发最佳实践提高项目质量]]></title>
      <link>https://www.360magento.com/blog/magento-development-best-practices/</link>
      <description><![CDATA[<p>开发高质量的Magento项目需要遵循一些开发流程上的最佳实践,包括:</p>
<ol>
<li>
<p>项目设计阶段要定义清晰的架构蓝图和规范。</p>
</li>
<li>
<p>开发前准备好项目环境、依赖和开发工具。</p>
</li>
<li>
<p>每个功能区块使用模块化思想进行解耦开发。</p>
</li>
<li>
<p>基于接口编程,使用依赖注入降低耦合。</p>
</li>
<li>
<p>定义完善的命名标准和注释规范。</p>
</li>
<li>
<p>使用Git版本控制并实施规范的版本管理流程。</p>
</li>
<li>
<p>开发过程中实施中间代码检查和各种测试。</p>
</li>
<li>
<p>发布代码前进行严格的质量检测与评审。</p>
</li>
<li>
<p>开发文档与代码同步,给新人提供参考。</p>
</li>
<li>
<p>监控线上环境并定期进行维护迭代更新。</p>
</li>
</ol>
<p>严格遵循以上最佳实践可以进一步提高项目质量和可控性。这也是每位Magento开发者都应追求的目标。</p>
<div id="gtx-trans" style="position: absolute; left: -106px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 20 Dec 2023 03:10:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[搭建基于Magento 2的PWA应用]]></title>
      <link>https://www.360magento.com/blog/building-pwa-with-magento-2/</link>
      <description><![CDATA[<p>正如我们所知,PWA(渐进式网络应用)可以将移动应用的用户体验带到网上,它利用了Service Worker、HTTP/2等现代Web技术。</p>
<p>在Magento2中构建PWA应用需要以下步骤:</p>
<ol>
<li>
<p>引入PWA Studio库。它包含构建PWA必需的依赖和配置。</p>
</li>
<li>
<p>添加Manifest文件。定义应用名称、图标、启动页面等元数据。</p>
</li>
<li>
<p>设置Service Worker。用于缓存依赖资源,实现离线访问能力。</p>
</li>
<li>
<p>使用前端框架。例如React构建单页应用体验页面。</p>
</li>
<li>
<p>集成推送通知。使用Web Push API给用户发送推送。</p>
</li>
<li>
<p>主题和部署配置。专门为移动端定制界面样式和优化部署。</p>
</li>
<li>
<p>性能监控和优化。分析打包大小、命中率等指标。</p>
</li>
<li>
<p>A/B测试和迭代。在PWA Studio中支持实验发布机制。</p>
</li>
</ol>
<p>以上实现可让Magento商城应用拥有原生APP体验,大幅提升用户粘性。这将是未来一条重要的发展方向。</p>]]></description>
      <pubDate>Tue, 19 Dec 2023 07:18:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何系统化开发优质的Magento模块]]></title>
      <link>https://www.360magento.com/blog/systematic-magento-module-development/</link>
      <description><![CDATA[<p>开发Magento模块需要遵循清晰的原则,以下几点可以帮助系统化提质量:</p>
<ol>
<li>
<p>设计模块功能和架构</p>
</li>
<li>
<p>使用组件化思想划分模块</p>
</li>
<li>
<p>注重模块解耦和服务分层</p>
</li>
<li>
<p>声明模块配置和依赖</p>
</li>
<li>
<p>开发基于接口的模块类</p>
</li>
<li>
<p>使用Factory和Repository模式</p>
</li>
<li>
<p>定义通用模块事件与观察者</p>
</li>
<li>
<p>使用注解完成IoC绑定</p>
</li>
<li>
<p>编写单元与集成测试用例</p>
</li>
<li>
<p>规范代码样式与注释</p>
</li>
<li>
<p>发布模块到Composer仓库</p>
</li>
<li>
<p>持续迭代与优化模块</p>
</li>
</ol>
<p>遵循这些建议可以打造模块功能强大、测试覆盖率高、质量可靠。这将给用户提供一流的开发体验。</p>]]></description>
      <pubDate>Tue, 19 Dec 2023 03:21:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento中优化电子商务网站的性能]]></title>
      <link>https://www.360magento.com/blog/magento-performance-optimization/</link>
      <description><![CDATA[<p>Magento是一种功能强大的电子商务平台，但在处理大量产品和高流量时，可能会面临性能方面的挑战。优化Magento网站的性能对于提供良好的用户体验、提高转化率和搜索引擎排名至关重要。在本文中，我们将介绍一些优化Magento网站性能的最佳实践。</p>
<ol>
<li>
<p>选择合适的主机：选择一个可靠且专门针对Magento优化的主机提供商，确保您的网站能够获得足够的服务器资源和性能。</p>
</li>
<li>
<p>使用全页缓存：Magento提供了一个全页缓存功能，它可以缓存整个页面，从而提高页面加载速度。确保启用并配置全页缓存以获得最佳性能。</p>
</li>
<li>
<p>优化图像：优化图像可以大幅度减少页面加载时间。使用适当的图像格式（如JPEG、PNG）并压缩图像以减小文件大小。还可以使用懒加载技术，在用户滚动到图像时再加载它们。</p>
</li>
<li>
<p>合并和压缩CSS和JavaScript：将多个CSS和JavaScript文件合并为较少的文件，并使用压缩工具来减小文件大小。这将减少HTTP请求次数并提高页面加载速度。</p>
</li>
<li>
<p>使用CDN</p>
</li>
</ol>
<p></p>]]></description>
      <pubDate>Mon, 18 Dec 2023 07:13:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[提升Magento网站访问速度的7个有效方式]]></title>
      <link>https://www.360magento.com/blog/7-ways-to-boost-magento-site-performance/</link>
      <description><![CDATA[<p>随着电商业务量的增长,网站访问性能优化变得尤为重要。这里介绍7个可以有效提升Magento速度的方法:</p>
<ol>
<li>浏览器缓存静态资源</li>
</ol>
<p>正确配置Expires头和缓存策略,让浏览器长期缓存JavaScript、CSS、图片等静态文件。</p>
<ol start="2">
<li>CDN加速静态内容访问</li>
</ol>
<p>使用内容分发网络(CDN)将静态文件部署至就近节点,大幅减少下载时间。</p>
<ol start="3">
<li>数据库和对象缓存</li>
</ol>
<p>利用Memcached/Redis缓存常用数据库查询和模型访问,降低数据库压力。</p>
<ol start="4">
<li>页面缓存</li>
</ol>
<p>通过Varnish或FPC对频繁访问页面进行缓存,只在必要时才重新生成HTML。</p>
<ol start="5">
<li>数据库索引优化</li>
</ol>
<p>根据查询需求添加合理索引,提升数据库查询效率。</p>
<ol start="6">
<li>JS和CSS合并压缩</li>
</ol>
<p>合并JavaScript和CSS文件,减少HTTP请求数,同时压缩ToFile大小。</p>
<ol start="7">
<li>错误日志和访问日志分析</li>
</ol>
<p>分析错误日志排查性能问题,优化访问热点流量瓶颈。</p>
<p>贯彻应用以上方法可以在很大程度上提升Magento网站的整体性能,提升用户体验。</p>
<div id="gtx-trans" style="position: absolute; left: -78px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 18 Dec 2023 03:16:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[全面了解Magento扩展开发的重要概念]]></title>
      <link>https://www.360magento.com/blog/important-concepts-for-magento-extension-development/</link>
      <description><![CDATA[<p>正如之前所介绍的,开发扩展是给Magento网站添加新功能的主要方式。要深入掌握扩展开发,有必要了解其中的一些关键概念:</p>
<p>模块(Module)</p>
<p>这个是Magento扩展的基本单位,每个扩展都是一个模块。它封装了完整的功能逻辑和资源。</p>
<p>配置(Configuration)</p>
<p>模型(Model)</p>
<p>资源模型(Resource Model)</p>
<p>集合(Collections)</p>
<p>块(Block)</p>
<p>控制器(Controller)</p>
<p>事件观察者(Event/Observer)</p>
<p>配置风格(Configuration Types)</p>
<p>这些建构扩展的基础概念都需要掌握,将有助于设计出高内聚的架构。后续还可以关注测试、打包等工程实践。</p>
<div id="gtx-trans" style="position: absolute; left: -90px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 17 Dec 2023 07:12:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[从零开始构建你的第一个Magento扩展]]></title>
      <link>https://www.360magento.com/blog/how-to-build-your-first-magento-extension/</link>
      <description><![CDATA[<p>如果你想给Magento网站添加新的功能特性,最简单直接的方法就是开发一个Magento扩展模块。本文将分步给出构建简单Magento扩展的入门过程:</p>
<ol>
<li>
<p>创建基本文件结构</p>
</li>
<li>
<p>注册模块</p>
</li>
<li>
<p>创建模型类</p>
</li>
<li>
<p>定义数据库表</p>
</li>
<li>
<p>定义控制器</p>
</li>
<li>
<p>创建配置文件</p>
</li>
<li>
<p>定义模板文件</p>
</li>
<li>
<p>测试与调试</p>
</li>
<li>
<p>打包发布</p>
</li>
</ol>
<p>此流程快速为你构建了一个简单的工作扩展。熟悉后可以根据实际需求进行功能充实。</p>
<div id="gtx-trans" style="position: absolute; left: -125px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 17 Dec 2023 03:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何进行有效的Magento模块测试]]></title>
      <link>https://www.360magento.com/blog/effective-testing-for-magento-modules/</link>
      <description><![CDATA[<p>测试工作对保证Magento模块质量极为重要。这里介绍几种常用的Magento模块测试方法:</p>
<ul>
<li>
<p>单元测试:使用PHPUnit测试模块类、函数等单个逻辑单元,检查输入输出是否符合预期。</p>
</li>
<li>
<p>集成测试:测试模块间交互是否正常,如调用其它模块功能流程。此类测试需要模拟完整环境。</p>
</li>
<li>
<p>功能测试:从用户视角测试模块关键功能是否可用,如从前端提交表单数据流程。可使用Selenium自动化测试。</p>
</li>
<li>
<p>验收测试:在实际业务场景下,验证模块是否满足原先设计的功能需求规格。</p>
</li>
<li>
<p>回归测试:发布新版本后,重新运行历史用例以防新问题。</p>
</li>
<li>
<p>性能测试:使用工具测试模块性能指标,如响应时间是否在合理范围。</p>
</li>
<li>
<p>安全测试:通过fuzz测试与漏洞扫描测试模块安全强度。</p>
</li>
<li>
<p>本地测试:在开发环境下运行AutoTests套件进行快速测试。</p>
</li>
<li>
<p>线上测试:在测试环境或线上真实数据下进行黑盒测试。</p>
</li>
</ul>
<p>持续完善模块测试套件,保证各种场景下都有覆盖性,给开发带来靠谱的 feedback,也能在发布前锤炼代码质量。测试工作需要在全生命周期贯穿始终。</p>
<div id="gtx-trans" style="position: absolute; left: -136px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 16 Dec 2023 07:09:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用这些工具提升Magento网站的效能]]></title>
      <link>https://www.360magento.com/blog/tools-for-magento-performance-optimization/</link>
      <description><![CDATA[<p>性能优化对每个Magento网站都很重要。这里介绍几种有效的工具可以帮助优化Magento性能:</p>
<ul>
<li>
<p>Google PageSpeed:分析网站速度和体验级数,提供优化建议。</p>
</li>
<li>
<p>GTmetrix:类似PageSpeed但报告更详细,也支持mobile测试。</p>
</li>
</ul>
<p>-黑灯瞎火:分析网站各项性能指标如图像大小、加载时间等。</p>
<p>-图表分析工具:如DareBoost可以视觉化展示各项metrics变化趋势。</p>
<p>-YSlow:检查网站按照Yahoo!的规则是否优化,定位坑点。</p>
<p>-轻量级缓存:如Varnish缓存HTML提速访问。</p>
<p>-数据库优化:正确索引、缓存查询等提升数据库性能。</p>
<p>-图像优化:压缩图片尺寸、格式提升加载速度。</p>
<p>-资源优化:合并JS/CSS、启用Gzip前端持续减少请求。</p>
<p>-CDN:通过内容分发网络降低访问延迟。</p>
<p>-异步任务:使用延迟队列处理低优先级任务。</p>
<p>结合这些建议跟工具,能有效提升Magento网站的性能表现。定期监控也很关键。</p>
<div id="gtx-trans" style="position: absolute; left: -186px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 16 Dec 2023 03:09:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[入门Magento主题开发需要掌握的技能]]></title>
      <link>https://www.360magento.com/blog/skills-for-magento-theme-development/</link>
      <description><![CDATA[<p>与网站前端设计息息相关的Magento主题开发是广大前端开发者常接触的一个领域。要想开发出高质量的Magento主题,开发者需要掌握一定的技能。本文将介绍入门Magento主题开发需要了解的一些基础知识。</p>
<ul>
<li>
<p>HTML/CSS基础:了解网页结构标签和css样式规则。这是开发主题的基础。</p>
</li>
<li>
<p>响应式设计:如何通过流式布局、媒体查询等手段开发出支持不同屏幕大小的响应式主题。</p>
</li>
<li>
<p>Less/Sass预处理器:使用变量、混合宏等特性高效开发主题样式表。</p>
</li>
<li>
<p>Magento模板系统:了解主题文件与模板的对应关系以及坐标查找规则。</p>
</li>
<li>
<p>网格系统:Magento使用网格系统布局,需要掌握其工作原理。</p>
</li>
<li>
<p>图片优化:如何优化图片尺寸和格式,减轻页面加载压力。</p>
</li>
<li>
<p>主题自定义化:通过配置修改主题外观与功能,如更换logo颜色等。</p>
</li>
<li>
<p>PHP语法基础:需要处理少量PHP逻辑代码,如if条件判断。</p>
</li>
<li>
<p>使用版本管理:使用Git等工具管理主题文件版本更新。</p>
</li>
</ul>
<p>掌握这些基础知识即可快速上手Magento主题开发。初期可以参考官方主题进行修改,并通过测试期迭代优化主题质量。掌握技巧后能自主设计主题。</p>
<div id="gtx-trans" style="position: absolute; left: -140px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 15 Dec 2023 07:07:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用模块化思想来优化你的Magento项目]]></title>
      <link>https://www.360magento.com/blog/optimize-magento-project-with-modular-thinking/</link>
      <description><![CDATA[<p>模块化开发已成为目前前端和后端开发中的主流思路。将完整项目拆分成各个完整的模块,可以有效提高代码可维护性和扩展能力。但是在Magento项目中,我们仍常见将所有代码集中在一个核心模块中。这就失去了模块化的诸多优点。</p>
<p>所以要真正利用模块化思想优化Magento项目,需要遵循以下设计原则:</p>
<ol>
<li>
<p>根据功能域划分模块边界,将一个大的需求区域抽象为一个独立的模块。</p>
</li>
<li>
<p>每个模块只负责自己的职责,对外提供明确的接口和契约。</p>
</li>
<li>
<p>模块间交互使用解耦的方式,如通过发布/订阅事件或基于接口编程。</p>
</li>
<li>
<p>各模块可以单独开发、测试和部署,不依赖其他模块的内部实现。</p>
</li>
<li>
<p>引用关系使用配置实现,如Composer,而不是硬编码。</p>
</li>
<li>
<p>提供完整的开发和运行环境以支持模块的快速迭代。</p>
</li>
</ol>
<p>将一个可复用的功能单元模块化实现后,我们可以灵活组合这些模块构建项目;代码可以每个小片段独立优化;将来也可以动态加载新模块扩展功能。这将带来开发效率和项目可维护性的很大提升。</p>
<p>正确使用模块化思想是优化Magento项目的一个重要方面。希望这些经验可以给您的开发带来帮助。</p>
<div id="gtx-trans" style="position: absolute; left: -70px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 15 Dec 2023 03:08:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2: 提供客户体验的关键功能]]></title>
      <link>https://www.360magento.com/blog/magento2-customer-experience/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，提供优质的客户体验是吸引和保留客户的关键。Magento 2作为一款功能强大的电子商务平台，提供了许多功能和工具，帮助您提供卓越的客户体验。在本篇博客中，我们将探讨Magento 2的关键功能，这些功能可以提升您的在线商店的客户体验，并分享一些最佳实践和技巧。</p>
<ol>
<li>
<p>响应式和移动友好的设计：<br />Magento 2提供了响应式设计，使您的在线商店能够自适应不同的设备和屏幕尺寸，包括桌面电脑、平板电脑和手机。移动友好的设计确保用户可以在任何设备上无缝浏览和购物，并提供一致的用户体验。</p>
</li>
<li>
<p>个性化内容和推荐：<br />Magento 2允许您根据客户的兴趣、购买历史和行为数据，提供个性化的内容和推荐。通过使用Magento 2的营销工具和规则引擎，您可以向客户展示相关的产品、优惠和推广活动，提高购买转化率并增强客户满意度。</p>
</li>
<li>
<p>简化的购物流程：<br />Magento 2的购物流程经过优化，使用户可以轻松浏览产品、添加到购物车、结账和支付。通过提供简化且直观的界面，减少步骤和点击次数，您可以提高购物的便捷性和顺畅性，从而增加销售机会。</p>
</li>
<li>
<p>多语言和多货币支持：<br />如果您的在线商店面向国际客户，Magento 2提供了多语言和多货币支持。您可以轻松创建多个语言版本和货币设置，以满足不同地区和用户的需求，提供本地化的购物体验，增强全球客户的满意度。</p>
</li>
<li>
<p>顾客自助服务：<br />Magento 2的自助服务功能允许客户进行自主管理，如查看订单状态、修改个人信息、申请退款等。通过提供自助服务，您可以减轻客户支持负担，提供便利和灵活性，增强客户对您品牌的忠诚度。</p>
</li>
</ol>
<p>结论：<br />Magento 2的关键功能帮助您提供卓越的客户体验，从而增加客户满意度、提高销售转化率并促进业务增长。通过响应式设计、个性化内容和推荐、简化的购物流程、多语言和多货币支持以及顾客自助服务，您可以满足用户的期望，并建立良好的品牌形象。</p>
<div id="gtx-trans" style="position: absolute; left: -33px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 14 Dec 2023 08:14:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2: 提高销售和营销的关键策略]]></title>
      <link>https://www.360magento.com/blog/magento2-sales-marketing/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，提高销售和营销的效果对于在线商店的成功至关重要。Magento 2作为一款强大的电子商务平台，提供了多种功能和策略，帮助您增加销售额并改进营销活动的效果。在本篇博客中，我们将探讨Magento 2的关键策略，以提高您的在线商店的销售和营销成果，并分享一些最佳实践。</p>
<ol>
<li>
<p>促销和特价活动：<br />Magento 2提供了丰富的促销和特价活动功能，使您能够轻松创建各种促销策略，如折扣码、团购、限时特价等。通过运用这些策略，您可以吸引客户，促进购买决策，并增加销售额。</p>
</li>
<li>
<p>奖励计划和积分系统：<br />Magento 2允许您设置奖励计划和积分系统，以激励和回馈忠诚的客户。通过给予积分、折扣券或兑换礼品等奖励，您可以鼓励客户的重复购买行为，并建立长期客户关系。</p>
</li>
<li>
<p>个性化营销：<br />利用Magento 2的个性化营销功能，您可以根据客户的行为、喜好和购买历史，发送定制化的营销内容和推荐。通过向客户提供个性化的体验，您可以增加购买转化率，并提高客户满意度和忠诚度。</p>
</li>
<li>
<p>购物车和结账优化：<br />优化购物车和结账流程对于提高销售转化率至关重要。Magento 2提供了简化和优化的购物车和结账界面，使用户能够轻松添加商品、查看订单总结和进行安全快速的支付。通过提供顺畅的购物体验，您可以减少购物车遗弃率并促进完成订单。</p>
</li>
<li>
<p>数据驱动的决策：<br />Magento 2的报告和分析功能提供了关键的业务数据和指标，帮助您了解销售趋势、顾客行为和营销活动的效果。通过基于数据做出决策，您可以优化产品定位、调整价格策略，并改进营销活动，以达到更好的销售和营销结果。</p>
</li>
</ol>
<p>结论：<br />Magento 2的关键策略可以帮助您提高销售额并改进营销活动的效果。通过运用促销和特价活动、奖励计划和积分系统、个性化营销、购物车和结账优化以及数据驱动的决策，您可以吸引客户、促进购买决策，并提升客户满意度和忠诚度。</p>
<div id="gtx-trans" style="position: absolute; left: -112px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 14 Dec 2023 03:16:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：提升电商运营效率的关键]]></title>
      <link>https://www.360magento.com/blog/magento2-ecommerce-efficiency/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，高效运营是一个成功在线商店的关键要素。Magento 2作为一款功能强大的电子商务平台，提供了许多工具和功能，可以显著提升您的电商运营效率。在本篇博客中，我们将探讨Magento 2如何成为提升电商运营效率的关键，并分享一些最佳实践和技巧。</p>
<ol>
<li>
<p>自动化流程：<br />Magento 2允许您自动化许多重复性任务和流程，从而节省时间和减少错误。您可以设置自动化库存管理、订单处理、发货通知等功能，以提高处理效率并提供更快的客户服务。此外，Magento 2还提供了自动化报表和分析工具，帮助您快速了解业务绩效并做出相应的决策。</p>
</li>
<li>
<p>强大的管理工具：<br />Magento 2提供了直观且易于使用的后台管理界面，使您能够轻松管理产品、库存、订单和客户等关键业务数据。您可以快速添加和编辑产品信息、创建和跟踪订单、管理客户信息，并进行灵活的报价和促销活动。这些管理工具帮助您更高效地处理日常任务，提高运营效率。</p>
</li>
<li>
<p>广泛的集成能力：<br />Magento 2支持与第三方系统和服务的集成，如支付网关、物流服务、CRM系统等。通过集成这些关键系统，您可以实现数据的自动同步和流程的无缝连接，从而提高工作效率和减少人工干预。Magento 2的开放式API和扩展点使得集成变得更加简便和灵活。</p>
</li>
<li>
<p>多店铺管理：<br />对于企业经营多个在线商店的情况，Magento 2提供了多店铺管理功能。您可以在单个Magento 2安装中运行多个商店，并共享产品目录、客户数据库和订单管理系统。这样，您可以通过一个统一的后台管理界面轻松管理多个商店，提高运营效率并降低维护成本。</p>
</li>
<li>
<p>数据驱动的决策：<br />Magento 2提供了丰富的报表和分析功能，帮助您深入了解销售趋势、客户行为和产品表现。通过对这些数据的分析，您可以做出明智的决策和战略规划，以优化运营效率并提高业绩。Magento 2还支持与Google Analytics等第三方分析工具的集成，让您能够更全面地了解您的在线商店。</p>
</li>
</ol>
<p>结论：<br />Magento 2是一个提升电商运营效率的强大工具。通过自动化流程、强大的管理工具、广泛的集成能力、多店铺管理和数据驱动的决策，Magento 2帮助企业更高效地管理和运营在线商店。无论是小型企业还是大型企业，Magento 2都能满足其不断增长的业务需求，并提供卓越的运营效率。</p>
<div id="gtx-trans" style="position: absolute; left: -26px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 13 Dec 2023 08:11:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ Magento 2的安全性与风险管理]]></title>
      <link>https://www.360magento.com/blog/magento2-security1/</link>
      <description><![CDATA[<p>在当今数字化时代，保护在线商店和客户的安全成为了至关重要的任务。作为一款广泛使用的电子商务平台，Magento 2注重安全性，并提供了一系列功能和最佳实践来帮助您管理安全风险。在本篇博客中，我们将探讨Magento 2的安全性与风险管理，并分享一些保护您的在线商店的关键措施。</p>
<ol>
<li>
<p>安全更新和补丁：<br />Magento 2定期发布安全更新和补丁，修复已知漏洞和弱点。及时安装这些更新是保护您的在线商店的重要步骤。Magento 2的后台管理界面提供了方便的升级和安装工具，使您能够轻松获取最新的安全修复程序。</p>
</li>
<li>
<p>SSL加密：<br />Magento 2支持SSL加密技术，通过为数据传输提供安全通道来保护敏感信息。使用有效的SSL证书可以确保客户的个人数据、支付信息和登录凭据得到加密，并防止被非法获取。启用SSL加密可提高您的在线商店的安全性，并增强客户对您的信任。</p>
</li>
<li>
<p>访问控制和身份验证：<br />Magento 2提供了强大的访问控制和身份验证功能，以保护管理员和用户账户的安全。您可以设置复杂的密码策略、多因素身份验证和限制登录尝试次数等措施，减少未经授权的访问和潜在的安全风险。</p>
</li>
<li>
<p>PCI DSS合规性：<br />Magento 2符合PCI DSS（Payment Card Industry Data Security Standard）标准，这是一套涵盖支付卡数据安全的全球性标准。通过使用Magento 2与符合PCI DSS标准的支付网关集成，您可以确保客户的支付信息得到保护，并遵守相关的合规要求。</p>
</li>
<li>
<p>安全审计和监控：<br />Magento 2提供了日志记录、事件监控和异常检测等功能，以帮助您跟踪和分析潜在的安全问题。通过监控登录活动、异常请求和系统日志，您可以及时发现和应对安全威胁，并采取适当的措施来保护您的在线商店。</p>
</li>
</ol>
<p>结论：<br />Magento 2的安全性与风险管理功能使得保护您的在线商店和客户变得更加可靠和高效。通过及时安装安全更新、使用SSL加密、实施访问控制和身份验证、遵守PCI DSS合规性要求，并进行安全审计和监控，您可以降低安全风险，保护您的在线业务和客户数据。</p>
<div id="gtx-trans" style="position: absolute; left: -47px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 13 Dec 2023 03:13:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：强大而灵活的电子商务平台]]></title>
      <link>https://www.360magento.com/blog/magento-saa-dev-safsmasla/</link>
      <description><![CDATA[<p>Magento是目前最受欢迎的开源电子商务平台之一，提供了丰富的功能和灵活性，使商家能够轻松创建和管理在线商店。在本篇博客中，我们将介绍Magento 2的一些关键功能和技术优势，以及为什么它是许多企业选择的首选电子商务解决方案。</p>
<ol>
<li>
<p>强大的功能套件:<br />Magento 2提供了一整套功能，包括目录管理、产品管理、订单管理、支付和结账、客户管理、营销工具等。无论是小型企业还是大型企业，都可以根据其需求自定义和配置这些功能，以满足其特定的电子商务需求。</p>
</li>
<li>
<p>可扩展的架构:<br />Magento 2采用了现代化的模块化架构，使开发人员能够轻松扩展和定制平台。它提供了丰富的API和扩展点，使开发人员可以根据需要添加新功能、集成第三方系统和服务，并优化性能。</p>
</li>
<li>
<p>强大的性能和可伸缩性:<br />Magento 2通过使用Varnish缓存、数据库优化、页面片段缓存和延迟加载等技术，提供了卓越的性能。它还支持多服务器部署和负载均衡，以实现高可用性和可伸缩性，确保您的在线商店能够处理高流量和快速增长。</p>
</li>
<li>
<p>多店铺和多语言支持:<br />Magento 2允许您在单个安装中运行多个在线商店，并为每个商店设置不同的产品目录、价格、支付选项和运费规则。此外，它还提供了多语言支持，使您能够轻松创建多语言版本的商店，以满足全球客户的需求。</p>
</li>
<li>
<p>丰富的市场和社区生态系统:<br />Magento拥有庞大的市场和社区生态系统，提供了各种主题、模板、插件和扩展，以满足不同行业和业务需求。从设计到支付网关，从物流到营销自动化，您可以在Magento市场上找到适合您的解决方案。</p>
</li>
</ol>
<p>总结起来，Magento 2是一款功能强大、灵活可扩展的电子商务平台，适用于各种规模和类型的企业。它具有丰富的功能、可定制性强、性能优越，并拥有庞大的市场和社区支持。如果您正在寻找一个可靠的电子商务解决方案，Magento 2值得您的考虑</p>
<div id="gtx-trans" style="position: absolute; left: -114px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 12 Dec 2023 08:02:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用Magento 2构建出色的电子商务体验]]></title>
      <link>https://www.360magento.com/blog/magento2-ecommerce-experience/</link>
      <description><![CDATA[<p>在当今数字化时代，电子商务已经成为许多企业成功的关键。为了在竞争激烈的市场中脱颖而出，选择一个功能强大、灵活且可定制的电子商务平台至关重要。在本篇博客中，我们将探讨如何使用Magento 2构建出色的电子商务体验，并为您提供一些最佳实践和技巧。</p>
<ol>
<li>
<p>定制化能力：<br />Magento 2是一款高度可定制的电子商务平台，可以满足各种业务需求。从产品目录和定价策略到支付和结账流程，您可以根据您的品牌和目标受众来定制和配置每个细节。利用Magento 2的灵活性，您可以为您的客户提供独特而个性化的购物体验。</p>
</li>
<li>
<p>响应式设计：<br />移动设备的普及使得移动购物成为一种趋势。Magento 2提供了响应式设计的主题和布局，确保您的在线商店在各种设备上都能提供一致且优秀的用户体验。通过优化移动界面和用户导航，您可以提高移动用户的参与度和转化率。</p>
</li>
<li>
<p>强大的营销工具：<br />Magento 2提供了丰富的营销工具，帮助您吸引潜在客户并提高销售额。您可以通过设置促销活动、优惠券和购物车价格规则来诱导购买行为。此外，Magento 2还具备强大的SEO功能，帮助您优化网站内容，提高搜索引擎排名。</p>
</li>
<li>
<p>高性能和可扩展性：<br />Magento 2通过使用高级缓存技术、数据库优化和延迟加载等功能，提供卓越的性能。此外，它支持多服务器部署和负载均衡，保证您的在线商店能够处理高流量和快速增长。无论您的业务规模如何，Magento 2都能轻松应对。</p>
</li>
<li>
<p>安全性和可靠性：<br />Magento 2以安全性为重点，提供多层次的安全措施来保护您和客户的数据。它支持符合PCI DSS标准的支付网关，并提供强大的身份验证和访问控制。此外，Magento 2还提供了可靠的备份和恢复功能，保障您的业务连续运行。</p>
</li>
</ol>
<p>结论：<br />Magento 2是一个强大而灵活的电子商务平台，为企业提供了构建出色电子商务体验的工具和功能。定制化能力、响应式设计、强大的营销工具、高性能和可扩展性，以及安全性和可靠性，使得Magento 2成为许多企业的首选平台。通过利用Magento 2的优势，您可以建立一个引人注目且成功的在线商店</p>
<div id="gtx-trans" style="position: absolute; left: -5px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 12 Dec 2023 03:10:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 电子商务：提升销售的战略和工具]]></title>
      <link>https://www.360magento.com/blog/magento-ecommerce-sales-strategies/</link>
      <description><![CDATA[<p>Magento作为一款强大的电子商务平台，提供了多种战略和工具，可帮助企业提升销售业绩。在这篇文章中，我们将深入研究一些Magento电子商务的关键战略和工具，以助力你的在线业务取得更大的成功。</p>
<h2>1. <span>个性化用户体验</span></h2>
<p>通过Magento的个性化功能，你可以根据用户的历史购买记录、浏览行为和个人喜好，为他们呈现定制化的内容和推荐产品。这有助于提高购物体验，增加转化率。</p>
<h2>2. <span>强大的促销和优惠工具</span></h2>
<p>Magento提供丰富的促销和优惠工具，如限时促销、购物车规则和优惠券。合理运用这些工具可以刺激销售，吸引更多顾客完成购买。</p>
<h2>3. <span>全渠道销售整合</span></h2>
<p>整合线上线下销售渠道，创造一致的购物体验。Magento支持多个销售渠道的管理，使你能够更好地满足多样化的客户需求。</p>
<h2>4. <span>移动优化与响应式设计</span></h2>
<p>通过Magento的响应式设计，确保你的在线商店在各种移动设备上都能够提供优秀的用户体验。移动优化对于现代消费者至关重要，有助于提高销售。</p>
<h2>5. <span>实时库存管理</span></h2>
<p>保持实时库存追踪，避免因库存不足而失去销售机会。Magento的库存管理工具可以帮助你及时了解库存情况，制定合理的补货策略。</p>
<h2>6. <span>社交媒体整合</span></h2>
<p>整合社交媒体渠道，通过Magento的社交媒体整合工具将产品直接推送到各大平台。这有助于提高品牌知名度，吸引更多目标受众。</p>]]></description>
      <pubDate>Mon, 11 Dec 2023 07:41:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 营销大全：提升销售、拓展市场份额]]></title>
      <link>https://www.360magento.com/blog/magento-2-marketing-strategies/</link>
      <description><![CDATA[<p>Magento 2作为一款强大的电子商务平台，提供了丰富的营销工具，帮助你提升销售、拓展市场份额。在本文中，我们将深入研究一些Magento 2的营销策略，助你在激烈的市场竞争中脱颖而出。</p>
<h2>1. <span>优化搜索引擎排名（SEO）</span></h2>
<p>通过Magento 2的SEO工具，优化产品页面、元标签和网站结构，提高在搜索引擎中的排名。这有助于增加有机流量，提高网站曝光度。</p>
<h2>2. <span>电子邮件营销</span></h2>
<p>建立强大的电子邮件营销策略，包括定期发送营销邮件、促销活动和新产品通知。通过Magento 2的电子邮件营销工具，保持与客户的紧密联系。</p>
<h2>3. <span>社交媒体推广</span></h2>
<p>整合社交媒体推广，通过Magento 2的社交媒体整合工具分享产品信息、促销活动，增加品牌曝光度。与潜在客户建立更紧密的联系。</p>
<h2>4. <span>积分与奖励计划</span></h2>
<p>建立积分与奖励计划，激励客户进行购物并参与其他活动。通过Magento 2的积分系统，提高用户忠诚度，增加重复购买率。</p>
<h2>5. <span>合作与联盟营销</span></h2>
<p>与其他品牌或业务建立合作与联盟关系，共同进行营销活动。通过Magento 2的合作伙伴管理，实施有效的联合营销计划。</p>
<h2>6. <span>满减与促销活动</span></h2>
<p>定期进行满减和促销活动，通过Magento 2的促销工具设置吸引人的优惠，促进销售增长。这可以提高购物车价值和客户满意度。</p>
<h2>结论</h2>
<p>通过这些Magento 2的营销策略，你可以在激烈的市场竞争中脱颖而出，提升销售业绩。精心设计的营销计划将有助于吸引新客户、保留现有客户，并在竞争激烈的市场中保持竞争力。</p>]]></description>
      <pubDate>Mon, 11 Dec 2023 03:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 进阶性能优化：提升网站速度与用户满意度]]></title>
      <link>https://www.360magento.com/blog/magento-2-advanced-performance-optimization-s2/</link>
      <description><![CDATA[<p>Magento 2的进阶性能优化是提高网站速度和用户满意度的关键步骤。通过深入优化技术和实施高级策略，你可以为用户提供更快速、更流畅的购物体验。在本文中，我们将探讨一些Magento 2的高级性能优化策略，以帮助你实现网站速度的巅峰状态。</p>
<h2>1. <span>精细化代码优化</span></h2>
<p>进行更深入的代码优化，包括删除冗余代码、减少数据库查询次数和优化算法。通过审查代码，找到性能瓶颈并进行改进，提高系统响应速度。</p>
<h2>2. <span>高级缓存策略</span></h2>
<p>实施更高级的缓存策略，如Full Page Cache（FPC）和Object Caching。这些策略可以大幅度减少服务器响应时间，提升网站性能。</p>
<h2>3. <span>无限滚动与异步加载</span></h2>
<p>引入无限滚动和异步加载技术，以减少页面的加载次数。通过仅在需要时加载内容，提高用户体验，减轻服务器负担。</p>
<h2>4. <span>前端资源优化</span></h2>
<p>精细化前端资源的加载，包括压缩CSS和JavaScript文件、延迟加载和最小化HTTP请求。这有助于减少页面加载时间，改善用户感知。</p>
<h2>5. <span>自动化任务调度</span></h2>
<p>使用任务调度系统自动化任务，如数据清理、索引重建等。通过将这些任务放入后台进行处理，避免阻塞前台操作，提高网站的即时响应性。</p>
<h2>6. <span>高级性能监控和分析</span></h2>
<p>引入高级性能监控和分析工具，以实时追踪性能指标、错误率和用户行为。通过深入分析，及时发现潜在问题并采取相应措施。</p>
<h2>结论</h2>
<p>通过实施这些高级性能优化策略，你将能够将Magento 2网站的性能提升到一个全新的水平。这不仅将满足用户的高期望，同时也将有助于提高搜索引擎排名和用户满意度。</p>]]></description>
      <pubDate>Sun, 10 Dec 2023 07:10:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2进阶性能优化：更高速、更出色的电商体验]]></title>
      <link>https://www.360magento.com/blog/magento-2-advanced-performance-optimization/</link>
      <description><![CDATA[<p>Magento 2的性能优化是一个不断演进的过程，通过更进一步的优化策略，可以进一步提升网站速度，提供更出色的电商体验。在本文中，我们将深入研究一些Magento 2的进阶性能优化策略，帮助你实现更高速、更卓越的网站性能。</p>
<h2>1. <span>使用缓存层</span></h2>
<p>在Magento 2上使用额外的缓存层，如Varnish或Redis，以加速页面交付。这样可以减轻服务器负担，提高响应速度。</p>
<h2>2. <span>优化数据库查询</span></h2>
<p>深入优化Magento 2的数据库查询，使用索引、合理的查询语句，以确保数据库操作的效率。定期清理无用的数据，保持数据库的轻量级。</p>
<h2>3. <span>服务端优化</span></h2>
<p>优化服务器设置，包括Web服务器（如Nginx或Apache）和数据库服务器。调整服务器参数，增加硬件资源，以适应不断增长的访问量。</p>
<h2>4. <span>使用异步任务</span></h2>
<p>将一些耗时的任务转换为异步任务，如图片处理、邮件发送等。这样可以避免阻塞主要操作，提高页面加载速度。</p>
<h2>5. <span>定期监控和调整</span></h2>
<p>使用监控工具，定期检查网站性能。根据监控结果，调整配置、优化代码，以适应不断变化的需求和流量。</p>
<h2>6. <span>内容优化和CDN进阶应用</span></h2>
<p>进一步优化网站内容，确保高质量的内容交付。将CDN的应用进一步优化，选择更适合你网站的CDN服务商，提供更广泛的内容分发。</p>
<h2>结论</h2>
<p>通过这些进阶性能优化策略，你可以将Magento 2网站的性能提升到一个新的水平。这将不仅为用户提供更出色的体验，同时也为你的电商业务的成功打下坚实的基础。</p>
<div id="gtx-trans" style="position: absolute; left: -168px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 10 Dec 2023 03:27:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2安全性策略：保护商店和客户的隐私安全]]></title>
      <link>https://www.360magento.com/blog/magento-Security-policy/</link>
      <description><![CDATA[<p>Magento 2作为一款广受欢迎的电子商务平台，安全性至关重要。保护商店和客户的隐私安全是维护声誉和业务持续发展的关键因素。在本文中，我们将深入研究一些Magento 2的安全性策略，以确保你的商店和客户信息的安全。</p>
<h2>1. <span>及时更新Magento 2</span></h2>
<p>保持Magento 2平台及其组件的更新非常重要。及时应用最新的补丁和安全更新，以防范潜在的漏洞和安全威胁。</p>
<h2>2. <span>强化管理员账户安全性</span></h2>
<p>确保管理员账户具有足够的安全性。使用强密码，并定期更改密码。限制管理员账户的访问权限，只允许必要的操作，以降低潜在威胁。</p>
<h2>3. <span>启用SSL加密</span></h2>
<p>使用SSL（安全套接层）加密来保护客户在网站上的敏感信息。确保在Magento 2中启用SSL，特别是在结账过程中，以加密付款信息等关键数据。</p>
<h2>4. <span>实施两步验证（2FA）</span></h2>
<p>在Magento 2中启用两步验证，增加对管理员和用户账户的额外层次的安全验证。这种额外的认证步骤有助于防止未经授权的访问。</p>
<h2>5. <span>监控日志和报警</span></h2>
<p>启用Magento 2的日志记录功能，并设置报警系统，以及时获得异常活动的通知。监控日志有助于及时发现潜在的安全问题，并采取必要的措施。</p>
<h2>6. <span>备份数据</span></h2>
<p>定期备份Magento 2的数据库和文件，确保在发生数据丢失或系统崩溃时能够快速恢复。存储备份文件在安全的位置，以防止未经授权的访问。</p>
<h2>结论</h2>
<p>通过严格执行这些Magento 2安全性策略，你可以有效地保护商店和客户的隐私安全。安全性是建立信任、确保商业连续性的关键环节，务必引起足够的重视。</p>]]></description>
      <pubDate>Sat, 09 Dec 2023 08:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2性能优化策略：提升网站速度，优化用户体验]]></title>
      <link>https://www.360magento.com/blog/magento-2-performance-optimization-s/</link>
      <description><![CDATA[<p>Magento 2作为一款功能丰富的电子商务平台，优化性能对于提供卓越的用户体验至关重要。在本文中，我们将深入研究一些Magento 2的性能优化策略，帮助你提升网站速度，优化用户体验。</p>
<h2>1. <span>启用页面缓存</span></h2>
<p>在Magento 2中启用页面缓存，以减少页面加载时间。缓存页面的静态内容，使用户在访问相同页面时能够更快地加载。</p>
<h2>2. <span>图片优化</span></h2>
<p>对产品图片进行优化，包括压缩图片和使用适当的图片格式。确保图片文件大小合理，以减少页面加载时间，提高性能。</p>
<h2>3. <span>延迟加载（Lazy Loading）</span></h2>
<p>使用延迟加载技术，使页面上的图片和其他资源在用户滚动到它们时才加载。这有助于加速初始页面加载时间，提升用户体验。</p>
<h2>4. <span>合并和压缩CSS和JavaScript文件</span></h2>
<p>合并和压缩Magento 2的CSS和JavaScript文件，减少文件大小，加快页面加载速度。这可以通过Magento 2的后台设置或使用优化工具实现。</p>
<h2>5. <span>使用CDN加速</span></h2>
<p>整合内容分发网络（CDN）以加速静态资源的加载。CDN可以将这些资源分发到全球多个服务器，使用户从最近的服务器加载资源，提高访问速度。</p>
<h2>6. <span>优化数据库</span></h2>
<p>定期优化Magento 2的数据库，删除无用的数据和日志。一个清理的数据库有助于提高数据库查询性能，加速页面加载。</p>
<h2>结论</h2>
<p>通过实施这些Magento 2性能优化策略，你可以显著提升网站速度，优化用户体验。快速加载的网站不仅有助于留住访问者，还对搜索引擎排名产生积极影响。</p>]]></description>
      <pubDate>Sat, 09 Dec 2023 03:26:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2社交媒体整合与影响力营销：拓展品牌影响力，吸引更多客户]]></title>
      <link>https://www.360magento.com/blog/magento-Social-media/</link>
      <description><![CDATA[<h2>1. <span>社交媒体账号整合</span></h2>
<p>整合Magento 2与你的社交媒体账号，包括Facebook、Instagram、Twitter等平台。确保产品页面、促销信息都能方便地分享到社交媒体，扩大品牌曝光。</p>
<h2>2. <span>社交分享和互动</span></h2>
<p>在Magento 2商店中添加社交分享按钮，鼓励用户分享他们的购物体验、喜欢的产品或促销信息。及时回复用户在社交媒体上的评论和提问，建立积极的互动关系。</p>
<h2>3. <span>社交媒体广告整合</span></h2>
<p>结合Magento 2的广告整合功能，将社交媒体广告与你的电商活动相结合。通过有针对性的社交广告，提高品牌知名度，引导潜在客户访问你的网站。</p>
<h2>4. <span>合作和赞助</span></h2>
<p>与有影响力的社交媒体用户、博主或其他品牌进行合作和赞助。这样的合作可以为你的品牌带来更广泛的关注，提高潜在客户的信任度。</p>
<h2>5. <span>创建有趣的社交媒体内容</span></h2>
<p>通过Magento 2的内容管理系统，创建有趣而有吸引力的社交媒体内容。这可以包括教程、产品展示、幕后故事等，以提升品牌故事性和用户互动性。</p>
<h2>6. <span>用户生成内容（UGC）活动</span></h2>
<p>鼓励用户生成内容，例如上传他们使用你产品的照片或分享使用心得。通过Magento 2的UGC活动，可以在社交媒体上展示这些内容，增强社区感和用户参与度。</p>
<h2>结论</h2>
<p>Magento 2的社交媒体整合和影响力营销工具可以帮助你更好地利用社交平台，与潜在客户建立连接，提高品牌影响力。通过巧妙整合社交媒体，你将能够在竞争激烈的市场中脱颖而出。</p>]]></description>
      <pubDate>Fri, 08 Dec 2023 07:21:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2客户服务与忠诚度建设：创造卓越体验，促进长期关系]]></title>
      <link>https://www.360magento.com/blog/magento-customer-service/</link>
      <description><![CDATA[<p>Magento 2作为一款综合性的电子商务平台，提供了丰富的客户服务和忠诚度建设工具，帮助你创造卓越的购物体验，促进客户忠诚度。在本文中，我们将深入研究一些Magento 2的客户服务和忠诚度建设策略，助力你在竞争激烈的市场中赢得客户的长期支持。</p>
<h2>1. <span>多渠道客服支持</span></h2>
<p>整合多渠道客服支持，包括在线聊天、电子邮件、电话等。确保客户可以轻松找到并选择最适合他们的联系方式，解决问题和提供支持。</p>
<h2>2. <span>实时在线聊天</span></h2>
<p>在Magento 2商店中添加实时在线聊天功能，使客户能够立即与客服代表互动。这有助于解决即时问题，提高购物体验。</p>
<h2>3. <span>积分和奖励计划</span></h2>
<p>建立积分和奖励计划，激励客户进行购物并参与其他活动。通过Magento 2的积分系统，为客户提供折扣、礼品或会员特权，增加他们的忠诚度。</p>
<h2>4. <span>个性化服务</span></h2>
<p>利用Magento 2的客户分析工具，了解客户的购物历史和偏好。基于这些信息，提供个性化的产品建议、促销和服务，使客户感到特别重视。</p>
<h2>5. <span>定期沟通和回馈</span></h2>
<p>建立定期沟通和反馈机制，通过电子邮件、短信或其他渠道与客户保持联系。向客户发送特别优惠、新产品信息，并鼓励他们提供反馈，以改善服务。</p>
<h2>6. <span>售后服务和保修政策</span></h2>
<p>明确的售后服务和保修政策是建立客户信任的重要因素。在Magento 2商店中清晰地展示售后服务政策，确保客户在购物后有可靠的支持。</p>
<h2>结论</h2>
<p>通过提供卓越的客户服务和实施忠诚度建设策略，你可以在Magento 2平台上建立长期关系，促进客户忠诚度。满足客户需求、提供个性化服务将帮助你在激烈的市场竞争中脱颖而出。</p>
<div id="gtx-trans" style="position: absolute; left: -38px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 08 Dec 2023 03:22:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 Data analysis and marketing strateg：基于洞察力制定成功计划]]></title>
      <link>https://www.360magento.com/blog/Magento-Data-analysis-and-marketing/</link>
      <description><![CDATA[<p>Magento 2作为一款全面的电子商务平台，提供了丰富的数据分析工具，帮助你更好地理解用户行为并制定有效的营销策略。在本文中，我们将深入研究一些Magento 2的数据分析和营销策略，以基于深入洞察力制定成功的电商计划。</p>
<h2>1. <span>使用Google Analytics整合</span></h2>
<p>整合Google Analytics到你的Magento 2商店，以获取全面的网站访问数据。通过分析用户行为、流量来源和转化率等指标，你可以更好地了解用户喜好和购物习惯，从而调整营销策略。</p>
<h2>2. <span>购物者流程分析</span></h2>
<p>使用Magento 2的购物者流程分析工具，深入了解用户在购物过程中的行为路径。确定用户在网站上的关键互动点，并优化这些步骤，以提高转化率和销售。</p>
<h2>3. <span>利用A/B测试</span></h2>
<p>进行A/B测试，测试不同的页面布局、促销活动或产品展示方式。通过比较不同变体的性能，你可以确定哪种设计或策略更有效，从而优化用户体验和提高转化率。</p>
<h2>4. <span>分析购物篮放弃率</span></h2>
<p>深入分析购物篮放弃率，找出用户在结账前放弃购物篮的原因。可能是高额的运费、繁琐的结账流程等问题。通过解决这些问题，可以提高结账完成率。</p>
<h2>5. <span>客户分群和个性化营销</span></h2>
<p>使用Magento 2的客户分群功能，将用户划分为不同的群体，根据其行为和偏好制定个性化的营销计划。通过向特定群体发送定制的促销信息，提高用户参与度和购买意愿。</p>
<h2>6. <span>实时销售和库存分析</span></h2>
<p>通过实时销售和库存分析，了解热门产品、畅销时段和库存水平。基于这些信息，可以调整库存管理、推动促销活动，并在高需求时提供更多库存。</p>
<h2>结论</h2>
<p>Magento 2提供了强大的数据分析工具，帮助你更好地理解用户行为和网站性能。通过深入洞察力，你可以制定更精准的营销策略，提高销售效果，促使业务的不断增长。</p>]]></description>
      <pubDate>Thu, 07 Dec 2023 07:20:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Improve Magento 2 User experience (UX)：创造令人难忘的购物旅程]]></title>
      <link>https://www.360magento.com/blog/Improve-Magento-User-experience/</link>
      <description><![CDATA[<p>Magento 2作为一款强大的电子商务平台，注重用户体验至关重要。在本文中，我们将深入了解一些提升Magento 2用户体验的关键策略，以创造令人难忘的购物旅程，促进客户忠诚度和提高销售。</p>
<h2>1. <span>响应式设计</span></h2>
<p>确保你的Magento 2商店采用响应式设计，以确保在各种设备上都能提供一致而流畅的用户体验。无论是在台式电脑、平板还是手机上，用户都应该能够轻松访问和浏览你的网站。</p>
<h2>2. <span>简洁而直观的导航</span></h2>
<p>设计简洁而直观的导航结构，让用户能够轻松找到他们想要的产品。清晰的菜单、有效的筛选和搜索功能都是帮助用户快速导航的关键。</p>
<h2>3. <span>快速的页面加载速度</span></h2>
<p>优化Magento 2商店的页面加载速度，确保用户能够快速访问产品页面。压缩图像、启用浏览器缓存、减少HTTP请求等优化措施，都有助于提高页面加载速度。</p>
<h2>4. <span>个性化推荐和建议</span></h2>
<p>利用Magento 2的个性化推荐功能，向用户展示他们可能感兴趣的产品。根据用户的浏览历史、购买记录和个人喜好，定制推荐，提升购物体验。</p>
<h2>5. <span>简化结账流程</span></h2>
<p>简化Magento 2商店的结账流程，减少用户的购物车放弃率。优化每个结账步骤，提供明确的指导，尽量减少填写表单的步骤，让结账过程更加顺畅。</p>
<h2>6. <span>实时支持和反馈</span></h2>
<p>提供实时支持和反馈机制，确保用户在购物过程中能够得到及时的帮助。集成在线聊天、客服热线或提供详细的帮助文档，为用户提供全方位的支持。</p>
<h2>结论</h2>
<p>通过关注用户体验，你可以建立一个引人入胜的购物旅程，增加用户满意度和忠诚度。Magento 2提供了丰富的工具，帮助你优化用户体验，为用户创造难忘的购物体验</p>]]></description>
      <pubDate>Thu, 07 Dec 2023 03:03:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 e-commerce marketing strategy：吸引客户、提升销售]]></title>
      <link>https://www.360magento.com/blog/Magento-2-e-commerce-marketing-strategy/</link>
      <description><![CDATA[<p>Magento 2作为一款强大的电子商务平台，提供了丰富的营销工具，帮助商家吸引客户、提高销售。在本文中，我们将深入探讨一些Magento 2的营销策略，让你更好地利用平台功能，打造成功的电商业务。</p>
<h2>1. <span>创建引人注目的产品页面</span></h2>
<p>首先，确保你的产品页面设计引人注目。清晰的产品图片、详细的产品描述以及明确的购买按钮都是关键因素。采用响应式设计，确保在各种设备上都能提供出色的用户体验。</p>
<h2>2. <span>优惠券和促销活动</span></h2>
<p>Magento 2提供了灵活的优惠券和促销活动功能。利用这些功能，制定吸引人的促销策略，如打折、满减、赠品等，以激发客户的购买欲望。定期举办促销活动，吸引新客户并保持现有客户的忠诚度。</p>
<h2>3. <span>电子邮件营销</span></h2>
<p>建立强大的电子邮件营销策略，与客户保持联系。Magento 2允许你轻松地发送订单确认、促销信息、新产品推介等电子邮件。利用个性化的邮件内容，提高打开率和转化率。</p>
<h2>4. <span>社交媒体整合</span></h2>
<p>将社交媒体整合到Magento 2中，以扩大你的品牌影响力。分享产品、举办社交媒体竞赛、与客户互动，都是有效的社交媒体策略。通过社交分享按钮，让客户方便地分享他们的购物体验。</p>
<h2>5. <span>客户评论和建议</span></h2>
<p>鼓励客户留下产品评论和建议，这有助于增强信任感。正面的评价和建议对于其他潜在客户的购物决策起到重要作用。及时回复客户的评论，显示关注和专业。</p>
<h2>6. <span>购物车提醒和放弃购物车恢复</span></h2>
<p>Magento 2允许你设置购物车提醒，提醒客户他们的购物车中尚有未结账的商品。同时，设置放弃购物车恢复策略，通过电子邮件或其他渠道引导客户完成购买。</p>
<h2>结论</h2>
<p>Magento 2提供了丰富的营销工具，帮助你吸引客户、提高销售。通过巧妙利用这些功能，你可以制定出成功的电商营销策略，提升品牌知名度并增加盈利。</p>]]></description>
      <pubDate>Wed, 06 Dec 2023 07:16:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2搜索引擎优化（SEO）策略：提高在线商店可见性]]></title>
      <link>https://www.360magento.com/blog/Magento-Search-Engine-Optimization/</link>
      <description><![CDATA[<p>Magento 2作为一款强大的电子商务平台，提供了丰富的搜索引擎优化（SEO）功能，帮助商家提高在线商店在搜索引擎中的可见性。在本文中，我们将深入了解一些Magento 2的SEO策略，让你的商店在搜索结果中脱颖而出。</p>
<h2>1. <span>优化产品页面标题和描述</span></h2>
<p>确保每个产品页面都有独特、吸引人的标题和描述。标题和描述是搜索引擎展示结果中的第一印象，因此要使它们既包含关键词，又能吸引用户点击。</p>
<h2>2. <span>友好的URL结构</span></h2>
<p>设置Magento 2的URL结构为友好的形式。清晰、简洁的URL不仅有助于搜索引擎理解页面内容，还提升用户体验。使用描述性词汇和关键词来构建URL。</p>
<h2>3. <span>关键词研究和使用</span></h2>
<p>进行关键词研究，了解潜在客户在搜索引擎中使用的关键词。在产品描述、页面标题、标签等位置巧妙地使用这些关键词，以提高页面在搜索结果中的排名。</p>
<h2>4. <span>创建XML网站地图</span></h2>
<p>Magento 2允许你创建XML网站地图，这有助于搜索引擎索引你的网站。确保地图包含所有重要的页面链接，并在网站根目录下提供sitemap.xml文件。</p>
<h2>5. <span>优化图片</span></h2>
<p>对产品图片进行优化，包括使用描述性文件名和ALT文本。优化后的图片有助于提高页面加载速度，同时也能在图像搜索结果中显示。</p>
<h2>6. <span>社交媒体整合</span></h2>
<p>整合社交媒体到你的Magento 2商店，通过社交分享和互动来增强在线商店的社交信号。社交信号对搜索引擎排名有一定影响，因此积极参与社交媒体是一项有效的SEO策略。</p>
<h2>结论</h2>
<p>Magento 2的SEO功能为优化在线商店提供了丰富的工具。通过合理利用这些功能，你可以提高商店在搜索引擎中的可见性，吸引更多潜在客户，并提升销售。</p>]]></description>
      <pubDate>Wed, 06 Dec 2023 03:17:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[深入了解Magento 2主题定制：打造独特的在线商店外观]]></title>
      <link>https://www.360magento.com/blog/magento-stheme-customer/</link>
      <description><![CDATA[<p>Magento 2 是一款强大而灵活的电子商务平台，而主题定制是确保你的在线商店在外观上与众不同的关键步骤之一。在本文中，我们将探讨如何定制Magento 2主题，以便根据你的品牌和业务需求创建一个独特的用户体验。</p>
<h2>1. <span>了解Magento 2主题结构</span></h2>
<p>首先，理解Magento 2主题的结构是至关重要的。主题通常包括布局文件、模板文件、样式表和JavaScript文件。深入研究Magento 2主题结构将使你能够更有效地进行定制。</p>
<h2>2. <span>创建自定义主题</span></h2>
<p>Magento 2允许你创建自定义主题，以便轻松地进行定制。通过在<code>app/design/frontend</code>目录下创建你自己的主题，你可以开始定制你的商店的外观。确保你的主题从Magento 2的默认主题或其他现有主题继承，以便获取基本的样式和功能。</p>
<h2>3. <span>修改样式和布局</span></h2>
<p>通过修改主题的样式表和布局文件，你可以调整商店的颜色、字体、排列方式等。使用LESS或CSS预处理器，可以更轻松地管理样式。同时，Magento 2的布局文件允许你重新排列页面元素，以满足你的布局需求。</p>
<h2>4. <span>添加自定义图像和图标</span></h2>
<p>通过替换默认的图像和图标，可以将商店的外观与品牌形象相匹配。确保你的图像符合Magento 2的建议尺寸和规范，以确保页面加载速度和用户体验。</p>
<h2>5. <span>集成自定义JavaScript</span></h2>
<p>如果你需要添加特定的交互性或功能，可以通过集成自定义JavaScript来实现。例如，实现产品页面上的动画效果或改进购物车的交互性。</p>
<h2>结论</h2>
<p>通过深入了解Magento 2主题定制，你可以打造一个独特、引人注目的在线商店外观，与众不同地展示你的品牌。通过合理使用Magento 2的主题定制功能，你将能够为你的客户提供一个独特而难忘的购物体验。</p>]]></description>
      <pubDate>Tue, 05 Dec 2023 07:13:15 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[提升Magento 2安全性：保护你的在线商店和客户信息]]></title>
      <link>https://www.360magento.com/blog/magento2-Improved/</link>
      <description><![CDATA[<p>Magento 2是一款功能丰富的电子商务平台，而安全性是确保商店和客户信息安全的至关重要的方面。在本文中，我们将深入探讨一些提升Magento 2安全性的关键步骤，以确保你的电子商务运营得到充分的保护。</p>
<h2>1. <span>及时更新Magento 2</span></h2>
<p>始终保持Magento 2的更新是确保安全性的基本步骤。Magento的更新通常包括对潜在漏洞的修复和增强安全性的改进。定期检查并应用最新的Magento 2版本，以确保你的商店处于最安全的状态。</p>
<h2>2. <span>使用SSL加密</span></h2>
<p>使用SSL（安全套接层）加密是保护客户信息不被窃取的重要手段。确保在Magento 2中启用SSL，以加密数据传输，包括用户登录信息、付款详情等。购物车和结账过程中使用SSL是至关重要的。</p>
<h2>3. <span>强化管理员账户安全</span></h2>
<p>采取措施确保管理员账户的强大安全性是至关重要的。使用强密码，并定期更改密码。另外，限制管理员账户的访问权限，只允许必要的操作。</p>
<h2>4. <span>监控日志和报警</span></h2>
<p>启用Magento 2的日志记录功能，并设置报警系统，以便在发生异常活动时及时获得通知。通过监控日志，你可以及时发现潜在的安全威胁，并采取必要的措施。</p>
<h2>5. <span>防火墙和安全插件</span></h2>
<p>考虑在Magento 2中使用防火墙和安全插件，以提供额外的保护层。这些工具可以帮助检测和阻止潜在的恶意活动，增加商店的整体安全性。</p>
<h2>6. <span>定期备份</span></h2>
<p>定期备份Magento 2的数据库和文件是一种防范措施，可以在发生数据丢失或系统崩溃时快速恢复。确保备份是可用的，并存储在安全的位置。</p>
<h2>结论</h2>
<p>通过采取这些关键步骤，你可以显著提升Magento 2商店的安全性，保护客户信息免受潜在威胁。安全性是电子商务成功运营的基石，因此投资于Magento 2的安全性绝对是值得的。</p>]]></description>
      <pubDate>Tue, 05 Dec 2023 03:15:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[深入了解Magento 2：强大的电子商务平台]]></title>
      <link>https://www.360magento.com/blog/about-magento-shop/</link>
      <description><![CDATA[<p>Magento 2 是一款领先的开源电子商务平台，为在线商店提供了出色的灵活性和功能。在本文中，我们将深入探讨Magento 2的一些主要功能和优势。</p>
<h2>1. <span>现代化的架构</span></h2>
<p>Magento 2采用了现代化的架构，利用了最新的技术和最佳实践。这包括使用PHP 7和HTML5等技术，为用户提供更快、更可靠的购物体验。</p>
<h2>2. <span>响应式设计</span></h2>
<p>随着移动设备的普及，响应式设计变得至关重要。Magento 2通过提供响应式主题确保你的在线商店在各种设备上都能够提供优质的用户体验，从而提高销售和客户满意度。</p>
<h2>3. <span>强大的扩展性</span></h2>
<p>Magento 2提供了丰富的扩展性，允许你通过安装插件和扩展来定制和扩展你的商店功能。这使得Magento 2成为适应不同业务需求的理想选择。</p>
<h2>4. <span>全球化支持</span></h2>
<p>对于国际业务而言，Magento 2提供了多语言和多货币支持，使你的商店能够轻松扩展到全球市场。同时，它还支持不同的税收和运费规则，以适应不同的地理位置。</p>
<h2>5. <span>先进的安全性</span></h2>
<p>Magento 2致力于保护你的在线业务免受潜在威胁。通过使用SSL加密、安全支付网关和数据备份等功能，Magento 2确保你的商店和客户数据得到充分的保护。</p>
<h2>结论</h2>
<p>Magento 2是一款功能强大、灵活且现代的电子商务平台，适用于各种规模的企业。无论你是刚刚起步还是已经运营多年的企业，Magento 2都能提供所需的工具和功能，帮助你建立成功的在线业务。</p>]]></description>
      <pubDate>Mon, 04 Dec 2023 07:11:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[深入了解Magento 2扩展开发：为你的在线商店增加定制功能]]></title>
      <link>https://www.360magento.com/blog/magento-dev-enline-shop/</link>
      <description><![CDATA[<p>Magento 2是一款功能强大的电子商务平台，而通过扩展开发，你可以为你的在线商店增加各种定制功能，以满足特定业务需求。在本文中，我们将深入了解Magento 2扩展开发的基础知识，帮助你打造一个更强大、更灵活的电子商务解决方案。</p>
<h2>1. <span>创建自定义Magento 2扩展</span></h2>
<p>首先，了解如何创建自定义Magento 2扩展是至关重要的。通过在<code>app/code</code>目录下创建自己的扩展，你可以开始为商店添加新功能。确保你的扩展结构符合Magento 2的标准，以便顺利运行。</p>
<h2>2. <span>了解Magento 2扩展的结构</span></h2>
<p>了解Magento 2扩展的结构将有助于更好地组织和管理你的代码。Magento 2扩展通常包括控制器、模型、观察者和布局文件等元素。深入了解这些组件将有助于你更好地理解扩展的工作原理。</p>
<h2>3. <span>创建自定义控制器和模型</span></h2>
<p>通过创建自定义控制器和模型，你可以在Magento 2中添加新的业务逻辑。这使你能够处理特定的请求、生成自定义数据或与数据库交互。确保你的控制器和模型遵循Magento 2的最佳实践，以确保性能和稳定性。</p>
<h2>4. <span>使用观察者添加事件</span></h2>
<p>Magento 2的事件和观察者模式允许你在系统中添加自定义事件，并在需要时执行相应的操作。通过创建观察者，你可以在Magento 2中捕获特定的事件，并在事件发生时执行自定义代码，以实现更高度定制化的功能。</p>
<h2>5. <span>布局文件和前端资产</span></h2>
<p>通过创建自定义布局文件，你可以更改页面的结构和元素排列。同时，通过添加前端资产，如JavaScript和CSS文件，可以改进用户界面的外观和交互性。</p>
<h2>结论</h2>
<p>通过深入了解Magento 2扩展开发，你可以为你的在线商店添加各种自定义功能，从而提升用户体验并满足特定业务需求。合理利用Magento 2的扩展开发功能，将使你的电子商务解决方案更具竞争力。</p>]]></description>
      <pubDate>Mon, 04 Dec 2023 04:14:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 移动应用开发与响应式设计]]></title>
      <link>https://www.360magento.com/blog/magento2-mobile-app-development-responsive-design/</link>
      <description><![CDATA[<p>在当今数字化时代，移动设备的普及使得移动应用开发和响应式设计成为电子商务领域的重要趋势之一。对于使用 Magento 2 的电商网站，开发移动应用以及实施响应式设计可以为用户提供更好的移动体验，增强用户参与度和提升销售业绩。本篇博文将介绍 Magento 2 移动应用开发和响应式设计的关键要点。</p>
<p><strong>移动应用开发：</strong></p>
<ol>
<li>
<p>选择适当的移动应用开发框架：Magento 2 提供了 REST API，使得开发人员能够构建自定义的移动应用。您可以选择流行的移动应用开发框架，如 React Native、Flutter 或 Ionic，来构建跨平台的移动应用。</p>
</li>
<li>
<p>集成 Magento 2 API：使用 Magento 2 的 REST API，您可以在移动应用中访问和管理产品、订单、客户等数据。确保使用安全的认证方式，以保护敏感数据。</p>
</li>
<li>
<p>优化移动应用性能：移动应用的性能对于用户体验至关重要。优化应用的加载速度、响应时间和资源管理，以确保流畅的用户体验。</p>
</li>
<li>
<p>设计用户友好的界面：在移动应用中，设计简洁、直观且易于操作的用户界面非常重要。遵循移动应用设计准则，并确保应用的布局和导航在不同屏幕尺寸上都能良好地适应。</p>
</li>
</ol>
<p><strong>响应式设计：</strong></p>
<ol>
<li>
<p>使用响应式主题：Magento 2 提供了多个响应式主题，可以根据不同设备的屏幕尺寸和分辨率来自动调整布局和样式。选择适合您品牌形象和用户体验的主题，并进行必要的定制。</p>
</li>
<li>
<p>图片优化：针对移动设备，优化网站中的图片以减少加载时间。使用适当的图像压缩和缩放技术，确保在保持良好视觉质量的同时减小文件大小。</p>
</li>
<li>
<p>响应式导航和交互元素：设计导航和交互元素，以便在不同设备上易于触摸和操作。使用移动友好的菜单和按钮样式，确保用户能够轻松导航和与网站进行交互。</p>
</li>
<li>
<p>跨浏览器和设备测试：在实施响应式设计之前，进行广泛的测试，以确保您的网站在各种浏览器和设备上都能提供一致的用户体验。</p>
</li>
</ol>
<p>通过在 Magento 2 上进行移动应用开发和响应式设计，您可以为用户提供无缝的移动体验，并达到更高的用户满意度和销售转化率。</p>]]></description>
      <pubDate>Sun, 03 Dec 2023 07:44:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[了解Magento布局：构建强大的电子商务网站]]></title>
      <link>https://www.360magento.com/blog/understanding-magento-layout-building-powerful-ecommerce-website/</link>
      <description><![CDATA[<p>Magento是一个功能强大的电子商务平台，它提供了灵活的布局系统，使您能够构建定制化和响应式的电子商务网站。在本文中，我们将深入了解Magento的布局系统，了解它的工作原理以及如何利用它来构建强大的电子商务网站。</p>
<h3>什么是Magento布局？</h3>
<p>Magento布局是指定义和组织页面结构的XML文件。它决定了页面中各个元素的位置、顺序和外观。布局文件位于Magento主题的<code>app/design/frontend/{Vendor}/{Theme}/Magento_Theme/layout</code>目录下，其中<code>{Vendor}</code>和<code>{Theme}</code>是您当前使用的主题的名称。</p>
<h3>布局文件的结构</h3>
<p>Magento布局文件由一个或多个XML文件组成。其中最重要的文件是<code>default.xml</code>，它定义了网站的默认布局。其他布局文件可以覆盖和扩展默认布局，以适应不同的页面和区域。</p>
<p>布局文件通常包含以下几个主要部分：</p>
<ol>
<li><code>&lt;layout&gt;</code>&nbsp;根元素：它是布局文件的根元素，包含所有其他元素。</li>
<li><code>&lt;head&gt;</code>&nbsp;元素：它定义了页面的头部部分，通常用于引入CSS和JavaScript文件。</li>
<li><code>&lt;body&gt;</code>&nbsp;元素：它定义了页面的主体部分，包含各个区块和容器。</li>
<li><code>&lt;referenceContainer&gt;</code>&nbsp;元素：它用于定义和配置容器，容器将包含其他区块。</li>
<li><code>&lt;block&gt;</code>&nbsp;元素：它用于定义和配置区块，区块是页面上的可重用组件，例如导航栏、产品列表等。</li>
<li><code>&lt;referenceBlock&gt;</code>&nbsp;元素：它用于引用和配置已定义的区块，并进行进一步的配置或修改。</li>
<li><code>&lt;referenceContainer&gt;</code>&nbsp;和&nbsp;<code>&lt;referenceBlock&gt;</code>&nbsp;元素也可以包含其他元素，以实现更高级的布局操作。</li>
</ol>
<h3>使用Magento布局构建网站</h3>
<p>通过使用Magento布局，您可以根据需要自定义和调整页面的结构和外观。以下是一些在构建Magento网站时使用布局的常见场景和操作：</p>
<ol>
<li>
<p>添加、移除或修改区块（Blocks）：使用&nbsp;<code>&lt;referenceBlock&gt;</code>&nbsp;元素可以引用已定义的区块，并进行进一步的配置或修改。您可以修改区块的属性、位置和样式，或者添加新的区块来扩展页面功能。</p>
</li>
<li>
<p>调整容器（Containers）：使用&nbsp;<code>&lt;referenceContainer&gt;</code>&nbsp;元素可以引用已定义的容器，并进行进一步的配置或修改。您可以通过添加、移除或重新排序容器中的区块来调整页面的布局和结构。</p>
</li>
<li>
<p>扩展和重写布局文件：您可以创建自定义的布局文件，并将其放置在主题目录中，以覆盖或扩展默认布局文件。这使您能够根据需要自定义特定页面或区域的布局。</p>
</li>
<li>
<p>响应式布局：Magento提供了响应式设计的支持，使您可以根据不同的设备和屏幕尺寸调整页面的布局和外观。通过使用CSS媒体查询和Magento的响应式类，您可以为不同的设备提供定制的布局和样式。</p>
</li>
</ol>
<h3>总结</h3>
<p>Magento的布局系统为构建强大的电子商务网站提供了灵活而强大的工具。通过了解Magento布局文件的结构和使用方法，您可以根据需要自定义和调整页面的结构、布局和外观。使用Magento的布局系统可以创建灵活且独特的电子商务网站，为用户提供出色的购物体验。</p>]]></description>
      <pubDate>Sun, 03 Dec 2023 03:06:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2性能优化和缓存管理：加速您的电子商务网站]]></title>
      <link>https://www.360magento.com/blog/magento-2-performance-optimization-and-cache-management/</link>
      <description><![CDATA[<ol>
<li>理解Magento 2性能瓶颈</li>
</ol>
<p>首先，我们需要了解Magento 2可能面临的性能瓶颈。这些包括数据库查询、代码优化、资源加载、HTTP请求和响应时间等。通过识别和解决这些瓶颈，您可以显著提高网站的性能。</p>
<ol start="2">
<li>Magento 2缓存机制</li>
</ol>
<p>Magento 2提供了多种缓存机制来加速网站加载速度。了解Magento 2的缓存类型，如页面缓存、块缓存、配置缓存等，以及如何启用、配置和清除缓存，是优化性能的关键。</p>
<ol start="3">
<li>优化策略和技巧</li>
</ol>
<p>在Magento 2中，有许多优化策略和技巧可帮助您提升网站性能。这些包括使用CDN（内容分发网络）、压缩和合并CSS和JavaScript文件、优化图像、启用代码缓存和自动优化、使用高性能服务器和数据库等。了解这些策略并实施它们，将显著改善网站的性能。</p>
<ol start="4">
<li>工具和技术</li>
</ol>
<p>在优化Magento 2性能时，有一些有用的工具和技术可帮助您监测和分析性能瓶颈。这些工具包括Magento自带的性能配置、第三方性能分析工具（如New Relic、Blackfire等）、代码审查工具和调试工具。通过使用这些工具，您可以获得关于性能瓶颈的详细信息，并采取相应的措施来解决它们。</p>
<p>总结：</p>
<p>本篇博文提供了关于Magento 2性能优化和缓存管理的指导和技巧，帮助您加速和提升电子商务网站的性能。通过理解Magento 2的性能瓶颈、缓存机制、优化策略以及使用相关工具和技术，您将能够实现更快、更高效的网站加载和响应速度。</p>]]></description>
      <pubDate>Sat, 02 Dec 2023 07:51:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2多语言和多货币支持：扩展您的电子商务业务]]></title>
      <link>https://www.360magento.com/blog/magento-2-multilingual-multicurrency-support/</link>
      <description><![CDATA[<ol>
<li>多语言设置</li>
</ol>
<p>了解Magento 2的多语言设置是实现多语言支持的第一步。Magento 2提供了多语言包，您可以选择适合您目标市场的语言包进行安装和配置。同时，了解如何管理翻译文件、启用和禁用语言、处理静态文本和动态内容，将帮助您实现网站的多语言支持。</p>
<ol start="2">
<li>翻译和本地化</li>
</ol>
<p>为了确保网站内容的准确翻译和本地化，您可以使用Magento 2的翻译工具或第三方翻译服务。这包括对产品描述、页面文本、导航菜单、错误消息等的本地化处理。通过提供本地化的内容，您能够更好地满足不同语言用户的需求。</p>
<ol start="3">
<li>多货币配置</li>
</ol>
<p>Magento 2还提供了多货币配置功能，使您能够根据不同市场的需求设置不同的货币。您可以配置货币符号、汇率转换、税收设置等，以确保正确显示和计算不同货币的价格。这将帮助您吸引全球客户并提高销售效益。</p>
<ol start="4">
<li>扩展和技巧</li>
</ol>
<p>Magento 2的市场上有许多扩展和技巧可帮助您更好地实现多语言和多货币支持。这些扩展包括多语言翻译扩展、货币切换扩展、自动地理定位扩展等。了解这些扩展和技巧，并根据您的需求选择适合的解决方案，将为您的电子商务业务带来便利和优势。</p>
<p>总结：</p>
<p>本篇博文介绍了Magento 2多语言和多货币支持的重要性，并提供了实现这些功能的指导和建议。通过正确配置多语言设置、翻译和本地化处理、多货币配置以及应用相关的扩展和技巧，您将能够扩展您的电子商务业务，提供更广泛的市场覆盖并提升用户体验。</p>]]></description>
      <pubDate>Sat, 02 Dec 2023 02:53:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2数据库管理和数据迁移：最佳实践和工具]]></title>
      <link>https://www.360magento.com/blog/magento-2-database-management-and-data-migration/</link>
      <description><![CDATA[<ol>
<li>Magento 2数据库结构</li>
</ol>
<p>了解Magento 2的数据库结构是有效管理和操作数据库的关键。Magento 2使用EAV（Entity-Attribute-Value）模型来存储和管理数据，这个模型可以灵活地扩展和定制。您应该熟悉Magento 2的核心表和关系，以及自定义模块和扩展可能涉及的表和字段。</p>
<ol start="2">
<li>数据库备份和恢复</li>
</ol>
<p>定期备份Magento 2的数据库是保护数据完整性的重要步骤。您可以使用数据库管理工具或通过命令行执行备份操作。同时，了解如何恢复数据库备份以应对意外数据丢失或损坏的情况也是至关重要的。</p>
<ol start="3">
<li>数据迁移策略</li>
</ol>
<p>当您需要将Magento 2网站从一个环境迁移到另一个环境时，制定一个有效的数据迁移策略非常重要。您可以选择使用Magento 2提供的数据迁移工具，如Magento 2迁移工具（Migration Tool）或使用第三方工具和脚本来执行迁移操作。确保在迁移过程中保持数据的一致性和准确性。</p>
<ol start="4">
<li>数据迁移工具和技术</li>
</ol>
<p>有几个流行的工具和技术可用于Magento 2数据迁移。其中包括Magento 2迁移工具（Migration Tool）、Data Migration Pro（DMC）扩展、第三方ETL（Extract, Transform, Load）工具等。了解这些工具的使用方法和适用场景，可以帮助您更好地管理和执行数据迁移任务。</p>
<p>总结：</p>
<p>本篇博文提供了有关Magento 2数据库管理和数据迁移的最佳实践和工具。通过了解Magento 2的数据库结构、备份和恢复数据库、数据迁移策略以及常用的数据迁移工具和技术，您将能够有效地管理和迁移Magento 2网站的数据库。</p>]]></description>
      <pubDate>Fri, 01 Dec 2023 07:49:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 开发技术指南：构建强大的电子商务网站]]></title>
      <link>https://www.360magento.com/blog/magento-2-developer-guide/</link>
      <description><![CDATA[<p>Magento 2是一个流行且功能强大的开源电子商务平台，为企业提供了构建可扩展、高性能的在线商店的解决方案。如果您正在考虑使用Magento 2来开发您的电子商务网站，那么本篇博文将为您提供一些有用的技术指导。</p>
<ol>
<li>Magento 2基本架构</li>
</ol>
<p>了解Magento 2的基本架构对于开发者来说至关重要。Magento 2采用了模块化的体系结构，每个功能模块都以自己的方式工作，并可以通过Magento Marketplace进行扩展。熟悉Magento 2的基本组件和模块之间的关系，将帮助您更好地理解和开发您的网站。</p>
<ol start="2">
<li>模块开发</li>
</ol>
<p>Magento 2的模块开发是扩展和定制平台功能的关键。您可以根据特定需求创建自定义模块，并将其集成到Magento 2中。了解如何创建和配置模块、添加新功能、覆盖现有功能以及处理事件和触发器等关键概念，将帮助您更好地开发和管理自定义模块。</p>
<ol start="3">
<li>主题定制</li>
</ol>
<p>Magento 2的主题定制使您能够为您的电子商务网站创建独特的外观和用户体验。了解主题的结构、创建自定义主题、修改样式和布局，以及处理静态资源等方面的知识，将使您能够根据品牌需求定制您的网站外观。</p>
<ol start="4">
<li>最佳实践</li>
</ol>
<p>在开发Magento 2网站时，遵循一些最佳实践可以提高性能、安全性和用户体验。这包括使用缓存和索引、优化数据库查询、进行代码审查和测试、实施安全措施等。本文还将介绍一些最佳实践，以帮助您开发高质量的Magento 2网站。</p>
<p>总结：</p>
<p>本篇博文提供了关于Magento 2开发的一些基本指导和资源，帮助您构建功能强大的电子商务网站。通过了解Magento 2的基本架构、模块开发、主题定制以及一些最佳实践，您将能够充分利用Magento 2平台的优势，并为您的客户提供卓越的在线购物体验。</p>]]></description>
      <pubDate>Fri, 01 Dec 2023 03:47:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2性能优化：提升您的电子商务网站速度]]></title>
      <link>https://www.360magento.com/blog/magento-e-commerce-website-speed/</link>
      <description><![CDATA[<p>在竞争激烈的电子商务市场中，网站速度是吸引和保留客户的关键因素之一。Magento 2作为一款功能强大的电子商务平台，可以通过一些性能优化技巧来提高网站速度和响应时间。本文将介绍一些Magento 2性能优化的实践方法，帮助您提升电子商务网站的性能。</p>
<ol>
<li>
<p>使用最新版本的Magento 2：<br />始终使用最新版本的Magento 2是提升性能的重要步骤之一。每个版本都包含了对性能的改进和优化，包括代码优化、缓存机制改进和Bug修复等。确保您的网站已经升级到最新版本，以获得最佳性能和安全性。</p>
</li>
<li>
<p>启用缓存：<br />Magento 2提供了强大的缓存功能，通过缓存页面内容和数据库查询结果，可以大大减少页面加载时间。在Magento 2的后台设置中，您可以启用各种缓存类型，包括页面缓存、块缓存和数据库查询结果缓存等。启用适当的缓存类型可以显著提高网站的响应速度。</p>
</li>
<li>
<p>优化图片：<br />图片通常是网站加载时间较长的主要原因之一。通过优化图片大小和压缩，可以减少它们的文件大小，从而加快页面加载速度。使用适当的图片格式（如JPEG、PNG）和工具来优化图片，以确保它们在保持质量的同时具有较小的文件大小。</p>
</li>
<li>
<p>使用CDN（内容分发网络）：<br />CDN是一个分布式网络，可以将您的网站内容缓存到全球各个位置的服务器上。当用户访问您的网站时，他们将从最接近他们位置的服务器上加载内容，从而减少了网络延迟和传输时间。使用CDN可以显著提高网站的加载速度和性能。</p>
</li>
<li>
<p>优化数据库：<br />Magento 2使用数据库存储大量的网站数据，因此优化数据库性能对于提高网站速度至关重要。您可以执行数据库索引优化、删除不必要的数据和日志、优化数据库查询等操作来改善数据库性能。此外，使用数据库缓存和查询缓存也是提高性能的有效方法。</p>
</li>
<li>
<p>压缩和合并CSS和JavaScript文件：<br />通过压缩和合并网站的CSS和JavaScript文件，可以减少文件的数量和总体文件大小，从而加快页面加载速度。使用合适的工具和技术，将多个CSS文件合并为一个文件，并压缩JavaScript文件，以减少网络请求和提高性能。</p>
</li>
</ol>
<p>结论：<br />通过采取以上的Magento 2性能优化措施，您可以大大提升您的电子商务网站的速度和响应时间。优化网站性能不仅可以提供更好的用户体验，还能提高搜索引擎排名并吸引更多的访问者。始终关注网站性能，并定期评估和优化它，是保持竞争力的关键之一。</p>]]></description>
      <pubDate>Thu, 30 Nov 2023 07:49:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 数据迁移：顺畅升级您的电子商务平台]]></title>
      <link>https://www.360magento.com/blog/magento-data-platform/</link>
      <description><![CDATA[<p>升级到Magento 2是许多电子商务商家追求的目标，因为它提供了更好的功能和性能。然而，数据迁移可能是一个复杂的任务。本文将介绍Magento 2数据迁移的基本原理和技巧，帮助您顺畅升级您的电子商务平台。</p>
<p>首先，了解数据迁移的范围和目标是很重要的。数据迁移涉及将现有的商店数据从旧的Magento版本或其他电子商务平台迁移到Magento 2。这包括产品、订单、客户、库存、支付信息等。</p>
<p>在进行数据迁移之前，建议先备份您的现有数据。这将确保在迁移过程中出现问题时可以恢复数据。您可以使用Magento提供的备份工具或第三方备份解决方案进行数据备份。</p>
<p>接下来，需要评估数据的结构和格式。不同的电子商务平台使用不同的数据结构和格式，因此在迁移数据之前，您需要对源数据进行分析和转换。这可能涉及数据映射、转换和清理等操作。</p>
<p>在进行数据迁移时，Magento 2提供了Data Migration Tool，它是一个强大的工具，用于处理数据的迁移和转换。该工具使用命令行界面，并提供了丰富的选项和配置文件，以满足各种迁移需求。</p>
<p>在配置数据迁移工具时，您需要指定源数据和目标数据的连接信息，并定义迁移的范围和规则。根据具体情况，您可能需要编写自定义的映射和转换逻辑，以确保数据正确地迁移到Magento 2。</p>
<p>在迁移过程中，建议进行逐步迁移，逐个实体地迁移数据。这将有助于排查和解决任何迁移问题，同时减少对商店运营的干扰。</p>
<p>最后，进行数据迁移后，建议进行数据验证和测试。确保已迁移的数据在Magento 2中正确显示和运行。您可以手动检查数据的准确性，或者使用自动化测试工具进行功能和性能测试。</p>
<p>综上所述，Magento 2数据迁移是一个复杂但关键的任务。</p>
<div id="gtx-trans" style="position: absolute; left: 329px; top: 388px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 30 Nov 2023 02:48:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 主题开发：定制您的在线商店外观]]></title>
      <link>https://www.360magento.com/blog/magento-theme-customize/</link>
      <description><![CDATA[<p>Magento 2是一个功能强大的电子商务平台，允许您根据自己的品牌形象定制在线商店的外观。本文将介绍Magento 2主题开发的基础知识和技巧，帮助您创建一个独特而引人注目的在线商店外观。</p>
<p>首先，了解Magento 2主题的结构是很重要的。一个Magento 2主题通常由多个文件组成，包括布局文件、模板文件、CSS文件和JavaScript文件。通过编辑这些文件，您可以控制商店的整体布局、页面元素和样式。</p>
<p>要开始主题开发，您可以从Magento 2的默认主题Luma或Blank开始，或者从头开始创建一个全新的主题。无论您选择哪种方式，都可以通过覆盖和修改现有文件来实现自定义。</p>
<p>在主题开发过程中，布局文件（layout files）起着重要的作用。布局文件定义了页面的结构和组件的位置。通过修改布局文件，您可以调整页面的布局、添加、删除或重新排列组件。</p>
<p>此外，模板文件（template files）允许您直接编辑和控制页面的内容。您可以在模板文件中添加动态内容、自定义样式和布局，并与后端代码进行交互。</p>
<p>在定制主题外观时，CSS和JavaScript文件是不可或缺的。通过编辑这些文件，您可以调整颜色、字体、边距以及添加交互效果和动画等。</p>
<p>除了基本的主题开发，Magento 2还提供了丰富的主题扩展和市场，您可以从中选择适合您需求的主题。这些主题具有不同的风格和功能，可以满足各种电子商务业务的需求。</p>
<p>总而言之，Magento 2主题开发为您提供了无限的定制化可能性，帮助您打造一个独特而符合品牌形象的在线商店外观。通过熟悉Magento 2主题的结构和编辑相应的文件，您可以轻松创建一个引人注目的电子商务平台。</p>]]></description>
      <pubDate>Wed, 29 Nov 2023 06:45:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 扩展开发：定制化您的电子商务功能]]></title>
      <link>https://www.360magento.com/blog/magento-ecommerce-custome/</link>
      <description><![CDATA[<p>Magento 2是一款功能丰富的电子商务平台，但有时您可能需要特定的功能来满足业务需求。这就是Magento 2扩展开发的重要性所在。本文将介绍Magento 2扩展开发的基础知识和技巧，帮助您定制化您的电子商务功能。</p>
<p>要开始扩展开发，您需要了解Magento 2的扩展结构。一个Magento 2扩展通常由多个文件和目录组成，包括模块目录、配置文件、控制器、模型、观察者、布局文件等。这些组件共同工作，实现特定的功能。</p>
<p>首先，您需要创建一个自定义的模块。模块是Magento 2扩展的基本单元，用于组织和管理扩展的代码和资源。创建一个模块需要定义模块的标识符、名称、版本等信息，并将其放置在正确的目录结构中。</p>
<p>在模块中，您可以创建控制器来处理用户请求和响应。控制器是实现特定功能的核心部分，它接收用户的输入并生成相应的输出。通过编写控制器代码，您可以实现自定义的业务逻辑和流程。</p>
<p>除了控制器，模型是另一个重要的组件。模型用于处理数据和业务逻辑。通过创建和修改模型，您可以与数据库交互、处理数据操作，并为您的电子商务功能提供数据支持。</p>
<p>此外，观察者（Observers）也是Magento 2扩展开发中常用的组件。观察者允许您在特定事件发生时执行自定义的操作。通过定义观察者并使用事件和触发器，您可以实现特定功能的扩展和定制。</p>
<p>在扩展开发过程中，布局文件（layout files）也是不可或缺的。通过编辑布局文件，您可以调整页面的结构和组件的位置，定制页面的布局和外观。</p>
<p>最后，测试是扩展开发的重要环节。确保您的扩展在不同情况下能够正常运行，并与其他模块和功能兼容。Magento 2提供了丰富的测试工具和框架，帮助您进行单元测试、功能测试和集成测试。</p>
<p>总结起来，Magento 2扩展开发为您定制化电子商务功能提供了灵活性和无限可能性。通过了解Magento 2扩展的结构和组件，以及熟悉相应的开发技术和工具，您可以创建定制化的功能，满足您的业务需求。</p>]]></description>
      <pubDate>Wed, 29 Nov 2023 03:47:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：构建强大的电子商务平台]]></title>
      <link>https://www.360magento.com/blog/magento-shop-b2c-mage/</link>
      <description><![CDATA[<p>Magento 2是一款广泛使用的开源电子商务平台，为企业和商家提供了一个强大而灵活的在线销售解决方案。本文将介绍Magento 2的一些重要特性和优势，以及为什么它是构建强大的电子商务平台的理想选择。</p>
<p>Magento 2通过提供丰富的功能和灵活的架构，使得构建和管理电子商务网站变得更加容易。它具有以下几个关键特性：</p>
<ol>
<li>
<p><strong>模块化架构</strong>：Magento 2采用模块化的架构，使得扩展和定制变得简单。开发人员可以轻松添加新的功能和扩展，或者自定义现有功能以满足特定的业务需求。</p>
</li>
<li>
<p><strong>强大的前端体系</strong>：Magento 2采用现代化的前端技术，如HTML5、CSS3和JavaScript框架，为用户提供优雅而响应式的用户体验。它还支持移动设备优先的设计，确保您的网站在各种设备上都能良好运行。</p>
</li>
<li>
<p><strong>多店铺支持</strong>：Magento 2允许您在单个安装中创建和管理多个在线商店。这对于企业和多品牌零售商来说非常有用，因为它们可以在一个统一的界面下管理所有的在线业务。</p>
</li>
<li>
<p><strong>强大的产品目录管理</strong>：Magento 2提供了全面的产品目录管理功能。您可以创建和管理产品、分类、价格、库存等，并支持多种产品类型，如简单产品、配置产品和分组产品。</p>
</li>
<li>
<p><strong>高级营销工具</strong>：Magento 2提供了一套强大的营销工具，如促销规则、优惠券、购物车价格规则等。这些工具可以帮助您制定和执行各种营销策略，吸引和留住客户。</p>
</li>
<li>
<p><strong>稳定和可扩展</strong>：Magento 2经过了全面的重构和优化，提高了性能和稳定性。它采用现代的技术栈，并具有可扩展的架构，可以处理大量的流量和订单。</p>
</li>
</ol>
<p>总之，Magento 2是一个功能强大、灵活且可扩展的电子商务平台，适用于各种规模和类型的在线商店。它提供了丰富的功能和工具，帮助企业和商家建立成功的在线业务。如果您正在寻找一个可靠和强大的电子商务平台，Magento 2将是一个理想的选择。</p>
<p>无论是小型创业公司还是大型企业，Magento 2都为您提供了一套完整的解决方案，满足您的电子商务需求。开始使用Magento 2，构建一个强大而成功的在线商店吧！</p>]]></description>
      <pubDate>Tue, 28 Nov 2023 07:39:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：为您的电子商务业务带来无限可能]]></title>
      <link>https://www.360magento.com/blog/magento-possibilities/</link>
      <description><![CDATA[<p>Magento 2是当前最受欢迎和广泛使用的开源电子商务平台之一。作为Magento的最新版本，Magento 2为企业和商家提供了一个功能强大和灵活的在线销售解决方案。本文将探讨Magento 2的关键特性和优势，以及为什么选择Magento 2是为您的电子商务业务带来无限可能的正确决策。</p>
<p>首先，Magento 2采用了现代化的技术栈和模块化的架构，使得构建和管理电子商务网站变得更加容易。它提供了广泛的功能和灵活的自定义选项，使您能够根据业务需求轻松扩展和定制您的在线商店。无论是创建新的功能模块，还是修改现有功能，Magento 2都提供了强大的工具和API，使开发变得高效而灵活。</p>
<p>其次，Magento 2具有出色的性能和可扩展性。它经过全面的优化和重构，提高了网站的加载速度和响应能力。不仅如此，Magento 2还支持高并发访问和大规模交易处理，使您能够应对不断增长的业务需求。这对于那些追求扩展和持续增长的企业来说尤为重要。</p>
<p>Magento 2还提供了出色的用户体验和设计。它具有现代化的前端技术，使您的网站在各种设备上都能完美展现，无论是桌面还是移动设备。此外，Magento 2提供了丰富的主题和布局选项，使您能够轻松创建个性化的品牌形象，吸引并保留用户。</p>
<p>另一个令人印象深刻的功能是Magento 2的营销工具套件。它提供了广泛的促销规则、优惠券和购物车价格规则等功能，帮助您制定和执行各种营销策略，提高销售和客户参与度。无论是打折促销、交叉销售还是推荐产品，Magento 2都能满足您的需求。</p>
<p>最后，Magento 2拥有一个庞大的社区和丰富的资源库。您可以从社区获取支持、交流经验，并获取各种扩展和主题来增强您的在线商店。这个活跃的社区为Magento 2提供了持续的更新和改进，确保您始终处于技术的最前沿。</p>
<p>综上所述，Magento 2是为您的电子商务业务带来无限可能的绝佳选择。它提供了强大的功能、灵活的自定义选项、卓越的性能和用户体验，以及丰富的营销工具和社区支持。无论您是创业初创公司还是大型企业，Magento 2都能满足您的需求并帮助您实现在线销售的成功。赶紧选择Magento 2，为您的电子商务业务开启新的篇章吧！</p>]]></description>
      <pubDate>Tue, 28 Nov 2023 03:41:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何使用Magento 2的工厂创建新的集合实例？]]></title>
      <link>https://www.360magento.com/blog/magento-factory-devlop/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">在Magento 2中，您可以使用工厂（Factory）来创建新的集合实例。下面是使用工厂创建新的集合实例的步骤：</p>
<ol>
<li>首先，在您的类中注入集合工厂。您可以在构造函数中注入集合工厂，如下所示：</li>
</ol>
<pre>use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;

class YourClass
{
    protected $productCollectionFactory;

    public function __construct(
        ProductCollectionFactory $productCollectionFactory
    ) {
        $this-&gt;productCollectionFactory = $productCollectionFactory;
    }
}</pre>
<pre></pre>
<ol start="2">
<li>然后，您可以使用工厂创建新的集合实例。在需要创建集合的方法中，使用以下代码：</li>
</ol>
<pre>$productCollection = $this-&gt;productCollectionFactory-&gt;create();</pre>
<ol start="3">
<li>现在，您可以使用&nbsp;<code>$productCollection</code>&nbsp;对象来操作集合，例如添加过滤器、排序等。以下是一个示例：</li>
</ol>
<pre>$productCollection-&gt;addAttributeToFilter('status', ['eq' =&gt; 1])
    -&gt;addAttributeToFilter('price', ['gt' =&gt; 100])
    -&gt;setPageSize(10)
    -&gt;setCurPage(1);</pre>
<ol start="4">
<li>最后，您可以使用&nbsp;<code>$productCollection</code>&nbsp;对象来迭代集合中的每个元素，或者获取集合的其他属性。以下是一个示例：</li>
</ol>
<pre>foreach ($productCollection as $product) {
    echo $product-&gt;getName();
}<br /><span>通过使用工厂创建新的集合实例，您可以在Magento 2中更好地管理和操作数据。希望这个解答对您有帮助！</span>
</pre>
<div id="gtx-trans" style="position: absolute; left: -2px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 27 Nov 2023 07:50:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2除了集合工厂，还有其他方法可以创建新的集合实例吗？]]></title>
      <link>https://www.360magento.com/blog/magento-collection-factory/</link>
      <description><![CDATA[<ol>
<li>使用集合管理器（Collection Manager）：集合管理器是Magento 2中的一个核心类，它可以帮助您创建和管理集合实例。您可以通过依赖注入将集合管理器注入到您的类中，并使用它来创建新的集合实例。以下是一个示例：</li>
</ol>
<pre>use Magento\Framework\App\ResourceConnection;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Framework\Model\ResourceModel\Db\Collection\CollectionFactoryInterface;

class YourClass
{
    protected $collectionFactory;

    public function __construct(
        CollectionFactoryInterface $collectionFactory
    ) {
        $this-&gt;collectionFactory = $collectionFactory;
    }

    public function createNewCollection()
    {
        $collection = $this-&gt;collectionFactory-&gt;create();
        // 对集合进行操作
        return $collection;
    }
}</pre>
<ol start="2">
<li>使用对象管理器（Object Manager）：虽然不推荐直接使用对象管理器，但在某些情况下，您可以使用对象管理器来创建新的集合实例。以下是一个示例：</li>
</ol>
<pre>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$collection = $objectManager-&gt;create('Magento\Catalog\Model\ResourceModel\Product\Collection');
// 对集合进行操作<br /><span>请注意，使用对象管理器可能会导致依赖注入的问题，并且不符合Magento 2的最佳实践。因此，建议优先考虑使用集合工厂或集合管理器来创建新的集合实例。</span>
</pre>]]></description>
      <pubDate>Mon, 27 Nov 2023 03:54:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的高级搜索和过滤功能如何帮助顾客找到他们需要的产品？]]></title>
      <link>https://www.360magento.com/blog/magento-advance-search/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento的高级搜索和过滤功能通过以下方式帮助顾客找到他们需要的产品：</p>
<ol>
<li>
<p class="mb-2 last:mb-0">关键词搜索：顾客可以在Magento的搜索栏中输入关键词，例如产品名称、描述、型号等，以快速找到相关的产品。这使顾客能够通过简单的关键词搜索快速定位到他们感兴趣的产品。</p>
</li>
<li>
<p class="mb-2 last:mb-0">价格范围筛选：Magento允许顾客根据价格范围进行筛选，以便在他们预算范围内查找产品。顾客可以设置最低和最高价格，系统将只显示符合这个价格范围的产品，帮助顾客更快地找到合适的产品。</p>
</li>
<li>
<p class="mb-2 last:mb-0">属性筛选：Magento允许企业为产品定义各种属性，例如颜色、尺寸、材质等。顾客可以使用这些属性进行筛选，以便根据自己的偏好和需求找到符合要求的产品。例如，顾客可以选择特定颜色的衣服或特定尺寸的电子设备。</p>
</li>
<li>
<p class="mb-2 last:mb-0">类别筛选：Magento的产品目录可以根据不同的类别进行组织和分类。顾客可以通过选择特定的类别来缩小搜索范围，只显示该类别下的产品。这使顾客能够更快地找到他们感兴趣的产品，而无需浏览整个产品目录。</p>
</li>
<li>
<p class="mb-2 last:mb-0">标签和标识筛选：Magento允许企业为产品添加标签和标识，例如热销、新品、特价等。顾客可以使用这些标签和标识进行筛选，以便找到符合自己需求的特定类型的产品。这使顾客能够更轻松地发现促销产品或最新上市的产品。</p>
</li>
</ol>
<p class="mb-2 last:mb-0">通过这些高级搜索和过滤功能，顾客可以根据自己的需求和偏好快速准确地找到他们需要的产品。这提供了更好的购物体验，节省了顾客的时间和精力，并增加了他们对企业的满意度。</p>]]></description>
      <pubDate>Sun, 26 Nov 2023 07:50:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento的搜索栏中实现自动补全功能？]]></title>
      <link>https://www.360magento.com/blog/magento-link-search-by-customer/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">要在Magento的搜索栏中实现自动补全功能，可以按照以下步骤进行操作：</p>
<ol>
<li>登录到Magento的后台管理面板。</li>
<li>导航到&ldquo;Stores（商店）&rdquo;&gt;&ldquo;Configuration（配置）&rdquo;&gt;&ldquo;Catalog（目录）&rdquo;&gt;&ldquo;Catalog Search（目录搜索）&rdquo;。</li>
<li>在&ldquo;Search Options（搜索选项）&rdquo;部分，找到&ldquo;Enable Search Suggestions（启用搜索建议）&rdquo;选项。</li>
<li>将&ldquo;Enable Search Suggestions（启用搜索建议）&rdquo;设置为&ldquo;Yes（是）&rdquo;。</li>
<li>保存配置更改。</li>
</ol>
<p class="mb-2 last:mb-0">完成上述步骤后，Magento的搜索栏将开始显示自动补全建议。当顾客在搜索栏中输入关键词时，系统将根据已有的产品和搜索历史提供相关的建议。这些建议将在下拉菜单中显示，帮助顾客更快地找到他们想要的产品。</p>
<p class="mb-2 last:mb-0">请注意，要使自动补全功能正常工作，您的Magento网站需要有足够的产品数据和搜索历史数据。此外，确保您的服务器和数据库能够处理自动补全功能的负载。</p>
<p class="mb-2 last:mb-0">通过在Magento的搜索栏中启用自动补全功能，您可以提供更智能和便捷的搜索体验，帮助顾客更快速地找到他们需要的产品。</p>
<div id="gtx-trans" style="position: absolute; left: 472px; top: 108.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 26 Nov 2023 03:52:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 的电子商务功能是如何帮助公司提供无缝购物体验的？]]></title>
      <link>https://www.360magento.com/blog/mageno-company-shop/</link>
      <description><![CDATA[Magento的电子商务功能通过以下方式帮助这些公司提供无缝购物体验：

灵活的产品目录管理：Magento允许企业轻松管理和组织产品目录。它提供了丰富的产品属性和分类选项，使企业能够清晰地展示和描述其产品。这有助于顾客快速找到他们想要的产品。

强大的搜索和过滤功能：Magento提供高级搜索和过滤功能，使顾客能够快速准确地找到他们需要的产品。顾客可以根据关键词、价格范围、品牌、属性等进行搜索和筛选，从而缩小选择范围，节省时间。

个性化推荐和建议：Magento可以根据顾客的购买历史、浏览行为和偏好提供个性化的产品推荐和建议。这使顾客能够发现他们可能感兴趣的产品，提高购买决策的准确性和速度。

流畅的购物车和结账流程：Magento的购物车和结账流程设计简洁明了，使顾客能够轻松添加和管理购物车中的产品，并快速完成结账过程。它支持多种支付方式和配送选项，提供灵活的选择，满足顾客的个性化需求。

响应式设计和移动优化：Magento具有响应式设计，能够自适应不同设备和屏幕尺寸，提供一致的用户体验。它还提供移动优化功能，使顾客可以在移动设备上轻松浏览和购买产品，无论是在手机还是平板电脑上。

多语言和多货币支持：Magento支持多语言和多货币，使企业能够为全球顾客提供本地化的购物体验。顾客可以选择自己熟悉的语言和货币，方便地浏览和购买产品。

通过这些功能，Magento帮助企业提供无缝购物体验，使顾客能够轻松找到并购买他们想要的产品。这提高了顾客的满意度和忠诚度，促进了销售增长和业务成功。]]></description>
      <pubDate>Sat, 25 Nov 2023 07:45:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的栅格系统如何帮助开发人员创建响应式布局？]]></title>
      <link>https://www.360magento.com/blog/magento-grid-dev/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento的栅格系统是一种基于栅格布局的响应式设计工具，可以帮助开发人员创建适应不同设备的响应式布局。以下是栅格系统如何帮助开发人员创建响应式布局的几个关键点：</p>
<ol>
<li>
<p class="mb-2 last:mb-0">划分页面：栅格系统将页面划分为多个列，开发人员可以根据需要将内容放置在不同的列中。这样可以确保页面的布局在不同设备上自动适应。</p>
</li>
<li>
<p class="mb-2 last:mb-0">响应式列：栅格系统中的列具有响应式特性，它们可以根据设备的屏幕大小自动调整宽度。开发人员可以定义每个列在不同屏幕尺寸下所占的宽度比例，从而实现自适应布局。</p>
</li>
<li>
<p class="mb-2 last:mb-0">响应式偏移：栅格系统还支持响应式偏移，开发人员可以通过设置列的偏移量来调整内容在页面上的位置。这对于在不同设备上重新排列内容非常有用。</p>
</li>
<li>
<p class="mb-2 last:mb-0">响应式嵌套：栅格系统允许开发人员在列内部创建更深层次的嵌套结构。这样可以更灵活地组织和布局页面的内容，以适应不同设备的显示需求。</p>
</li>
</ol>
<p class="mb-2 last:mb-0">通过使用Magento的栅格系统，开发人员可以轻松创建具有响应式布局的网页。栅格系统提供了一种灵活的方式来划分和组织页面的内容，使其能够在不同设备上自动适应并提供一致的用户体验。开发人员可以根据需要定义列的宽度比例和偏移量，以实现所需的布局效果</p>]]></description>
      <pubDate>Sat, 25 Nov 2023 03:43:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的响应式设计如何提供一致的购物体验？]]></title>
      <link>https://www.360magento.com/blog/magento-respose/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento的响应式设计通过自动适应不同设备的屏幕大小和分辨率，提供一致的购物体验。以下是Magento响应式设计如何实现一致购物体验的几个关键点：</p>
<ol>
<li>
<p class="mb-2 last:mb-0">自适应布局：Magento的响应式设计使用自适应布局，使网站的布局和元素能够根据设备的屏幕大小和分辨率进行调整。无论用户是在桌面电脑、平板电脑还是手机上访问网站，页面的布局都会自动适应，确保内容的可读性和可操作性。</p>
</li>
<li>
<p class="mb-2 last:mb-0">图片优化：Magento的响应式设计会对图片进行优化，使其在不同设备上加载速度更快。通过使用适当的图像压缩和缩放技术，确保图片在不同屏幕上显示清晰，并且加载时间不会过长。</p>
</li>
<li>
<p class="mb-2 last:mb-0">导航和菜单：Magento的响应式设计会对导航和菜单进行优化，以适应不同设备的触摸操作和屏幕尺寸。在移动设备上，导航和菜单通常会以折叠或下拉的形式呈现，以节省屏幕空间并提供更好的用户体验。</p>
</li>
<li>
<p class="mb-2 last:mb-0">内容排版：Magento的响应式设计会对内容进行排版调整，以适应不同设备的屏幕大小和分辨率。文字、标题和其他内容元素会根据屏幕尺寸进行调整，以确保用户可以轻松阅读和理解页面上的信息。</p>
</li>
<li>
<p class="mb-2 last:mb-0">表单和输入：Magento的响应式设计会对表单和输入字段进行优化，以适应不同设备的触摸操作和输入方式。输入字段的大小和间距会根据屏幕尺寸进行调整，以提供更好的用户体验和易用性。</p>
</li>
</ol>
<p class="mb-2 last:mb-0">通过这些响应式设计的优化，Magento确保用户在不同设备上都能够获得一致的购物体验。无论用户是在桌面电脑、平板电脑还是手机上访问网站，他们都可以轻松浏览产品、添加到购物车并完成购买，从而提高用户满意度和转化率。</p>]]></description>
      <pubDate>Fri, 24 Nov 2023 07:41:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的响应式设计如何实现自适应布局]]></title>
      <link>https://www.360magento.com/blog/magento-res-layout/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento的响应式设计通过以下方式实现自适应布局：</p>
<ol>
<li>
<p class="mb-2 last:mb-0">媒体查询（Media Queries）：Magento使用CSS3的媒体查询功能来根据设备的屏幕大小和分辨率应用不同的样式。媒体查询允许开发人员根据不同的屏幕尺寸定义不同的CSS规则，从而实现自适应布局。</p>
</li>
<li>
<p class="mb-2 last:mb-0">栅格系统（Grid System）：Magento使用栅格系统来创建响应式布局。栅格系统将页面划分为多个列，开发人员可以根据不同的屏幕尺寸和布局需求，将内容放置在不同的列中。这样可以确保页面在不同设备上的布局和排列方式都能够自动适应。</p>
</li>
<li>
<p class="mb-2 last:mb-0">弹性图像（Flexible Images）：Magento使用弹性图像技术来确保图像在不同设备上的自适应显示。弹性图像使用CSS属性来控制图像的大小和比例，使其能够根据屏幕尺寸自动调整大小，从而适应不同设备的显示需求。</p>
</li>
<li>
<p class="mb-2 last:mb-0">响应式导航（Responsive Navigation）：Magento的响应式设计还包括响应式导航菜单。在小屏幕设备上，导航菜单通常会以折叠或下拉的形式呈现，以节省屏幕空间并提供更好的用户体验。当屏幕尺寸增大时，导航菜单会自动展开或以水平方式显示，以适应更大的屏幕空间。</p>
</li>
</ol>
<p class="mb-2 last:mb-0">通过这些技术和方法，Magento的响应式设计能够实现自适应布局，使网站能够在不同设备上提供一致的用户体验。用户无论是在桌面电脑、平板电脑还是手机上访问网站，都能够获得良好的浏览和交互体验。</p>
<div id="gtx-trans" style="position: absolute; left: 436px; top: 286px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 24 Nov 2023 03:42:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[关于magento的介绍]]></title>
      <link>https://www.360magento.com/blog/magento-detial/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento是一个基于开源技术构建的电子商务平台，由Magento, Inc.开发。它于2008年首次发布，使用PHP编写。目前，Adobe已将Magento Commerce整合到Adobe Commerce中，但Magento Open Source品牌和支持保持不变。Magento是最受欢迎的电子商务平台之一，被许多顶级电子商务网站采用。以下是关于Magento的一些事实、优势和劣势。</p>
<p class="mb-2 last:mb-0">Magento的优势包括：</p>
<ol>
<li>提供卓越的可扩展性和性能。</li>
<li>提供增强的用户购物体验。</li>
<li>提供强大的平台功能。</li>
<li>兼容移动设备。</li>
<li>可扩展性强，支持高级SEO功能。</li>
<li>提供可定制的安全功能。</li>
<li>支持市场集成和第三方集成。</li>
<li>提供智能搜索选项。</li>
<li>可选择任何托管服务。</li>
<li>拥有庞大的专业社区。</li>
</ol>
<p class="mb-2 last:mb-0">Magento的一些主要功能包括：</p>
<ol>
<li>产品管理：管理产品目录、库存和价格。</li>
<li>类别管理：创建和管理产品类别。</li>
<li>国际支持：支持多语言和多货币。</li>
<li>客户账户：管理客户账户和订单。</li>
<li>库存管理：跟踪库存和库存变化。</li>
<li>促销和营销工具：提供各种促销和营销工具。</li>
<li>搜索技术：提供高级搜索功能。</li>
<li>客户服务：提供客户支持和服务。</li>
<li>分析和报告：提供分析和报告功能。</li>
</ol>
<p class="mb-2 last:mb-0">Magento还提供了许多扩展，这些扩展可以增加特定的功能。扩展是一组代码，用于实现Magento的特定功能。</p>
<p class="mb-2 last:mb-0">Magento有两个版本：Magento 1和Magento 2。Magento 1是较旧的版本，稳定性较高，但即将到达生命周期的尽头。Magento 2是较新的版本，功能更强大，但复杂性也更高。</p>
<p class="mb-2 last:mb-0">Magento有两个版本：Magento Open Source（以前称为Magento Community Edition）和Magento Commerce（以前称为Magento Enterprise Edition）。Magento Open Source是免费的，提供基本功能。Magento Commerce是付费版本，提供更多高级功能和支持。</p>
<p class="mb-2 last:mb-0">总之，Magento是一个功能强大、灵活可定制的电子商务平台，适用于个人和企业建立长期、专业的电子商务网站。它具有丰富的功能和强大的社区支持，可以满足各种电子商务需求。</p>]]></description>
      <pubDate>Thu, 23 Nov 2023 07:39:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的可扩展性和性能如何提高用户购物体验？]]></title>
      <link>https://www.360magento.com/blog/magento-2mdsdms-shop/</link>
      <description><![CDATA[<p class="mb-2 last:mb-0">Magento通过其可扩展性和性能提高用户购物体验的方式有以下几点：</p>
<ol>
<li>
<p class="mb-2 last:mb-0">快速加载速度：Magento通过使用高级缓存技术和优化代码来提高网站的加载速度。快速加载速度可以减少用户等待时间，提高用户体验，并降低购物车放弃率。</p>
</li>
<li>
<p class="mb-2 last:mb-0">响应式设计：Magento具有响应式设计，可以自动适应不同设备的屏幕大小和分辨率。这意味着用户无论使用桌面电脑、平板电脑还是手机，都可以获得一致的购物体验。</p>
</li>
<li>
<p class="mb-2 last:mb-0">多语言和多货币支持：Magento支持多语言和多货币功能，使您能够为全球用户提供本地化的购物体验。用户可以在他们熟悉的语言和货币下浏览和购买产品，这提高了用户的舒适度和满意度。</p>
</li>
<li>
<p class="mb-2 last:mb-0">强大的搜索功能：Magento具有强大的搜索功能，可以帮助用户快速找到他们想要的产品。它支持高级搜索选项，如过滤器、排序和自定义搜索条件，使用户能够更轻松地浏览和筛选产品。</p>
</li>
<li>
<p class="mb-2 last:mb-0">个性化推荐：Magento可以根据用户的浏览和购买历史，提供个性化的产品推荐。这可以帮助用户发现他们可能感兴趣的产品，提高购买意愿和转化率。</p>
</li>
<li>
<p class="mb-2 last:mb-0">简化的结账流程：Magento提供了简化的结账流程，使用户能够快速、轻松地完成购买。它支持多种支付方式和快速结账选项，如快速填写表单和保存付款信息，提高了用户的购物体验。</p>
</li>
</ol>
<p class="mb-2 last:mb-0">总之，Magento通过其可扩展性和性能优化，提供了一个快速、响应式和个性化的购物体验。这些功能可以提高用户的满意度和购买意愿，帮助您的电子商务网站取得成功。</p>
<div id="gtx-trans" style="position: absolute; left: 352px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 23 Nov 2023 03:33:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[创建可配置产品：Magento 2的灵活性与个性化定制的利器]]></title>
      <link>https://www.360magento.com/blog/Magento-2-create-configurable/</link>
      <description><![CDATA[<p>对于电商平台而言，提供灵活的产品配置和个性化定制是吸引客户和提高销售的重要因素之一。Magento 2提供了强大的功能，使您能够轻松创建可配置产品，满足客户的不同需求。本文将详细介绍在Magento 2中创建可配置产品的过程和优势。</p>
<p><strong>1. 什么是可配置产品？</strong></p>
<p>可配置产品是指具有多个配置选项和变体的产品。例如，一件衣服的可配置选项可能包括颜色、尺寸和款式等。通过选择不同的配置选项，客户可以根据自己的喜好和需求来个性化定制产品。</p>
<p><strong>2. 创建可配置产品的步骤：</strong></p>
<p>在Magento 2中创建可配置产品需要按照以下步骤进行操作：</p>
<p><strong>步骤 1：创建属性</strong>：在Magento后台，创建与产品相关的属性。例如，对于衣服，您可以创建颜色和尺寸属性。</p>
<p><strong>步骤 2：创建属性集（Attribute Set）</strong>：属性集是一组属性的集合，用于定义产品的属性。创建一个属性集，并将相关属性添加到该属性集中。</p>
<p><strong>步骤 3：创建可配置产品</strong>：在Magento后台，创建一个新产品，并选择刚才创建的属性集。在产品配置选项中，启用"Create Configurations"选项，并选择相关的属性。</p>
<p><strong>步骤 4：配置选项设置</strong>：为每个属性设置相应的选项值。例如，对于颜色属性，您可以设置红色、蓝色和绿色等选项。</p>
<p><strong>步骤 5：创建产品变体</strong>：通过选择不同的配置选项值，创建产品的不同变体。例如，在颜色属性中选择红色，在尺寸属性中选择大号，就可以创建一个红色大号的产品变体。</p>
<p><strong>3. 可配置产品的优势：</strong></p>
<p>创建可配置产品带来了多个优势，包括：</p>
<p><strong>a. 个性化定制</strong>：可配置产品允许客户根据自己的需求和偏好进行个性化定制，提供更好的购物体验。</p>
<p><strong>b. 简化管理</strong>：通过使用可配置产品，您可以将多个变体整合到一个产品页面中，简化产品管理和库存管理。</p>
<p><strong>c. 提高销售</strong>：提供更多的选择和个性化定制选项可以吸引更多的客户，并增加销售机会。</p>]]></description>
      <pubDate>Wed, 22 Nov 2023 08:42:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[提高协作效率——Magento后台多用户登录功能的优势与用法]]></title>
      <link>https://www.360magento.com/blog/multiple-admin-users-login/</link>
      <description><![CDATA[<p>在一个电商平台上，有效的团队协作是实现高效运营和管理的关键因素之一。Magento电商平台提供了一项强大的功能&mdash;&mdash;后台多用户登录，它允许多个用户同时登录Magento后台管理界面。本文将详细介绍Magento后台多用户登录功能的优势和用法，以帮助您提高团队的协作效率。</p>
<p><strong>1. 优势：</strong></p>
<p>Magento后台多用户登录功能带来了许多优势，包括：</p>
<p><strong>a. 提高团队协作效率</strong>：多用户登录功能使多个团队成员能够同时登录后台管理界面，无需等待其他用户退出登录。这样，不同的团队成员可以同时处理各自的任务，大大提高了团队的协作效率。</p>
<p><strong>b. 灵活的权限管理</strong>：Magento提供了灵活的权限管理系统，您可以根据用户的角色和职责，为每个用户分配特定的权限。这样，您可以确保每个用户只能访问其需要的功能和数据，提高安全性和数据保护。</p>
<p><strong>c. 跟踪和审计</strong>：通过多用户登录功能，您可以轻松跟踪每个用户的活动和操作。这对于审计和故障排除非常有用，您可以快速了解到底是哪个用户进行了特定的更改或操作。</p>
<p><strong>2. 配置和使用Magento后台多用户登录功能：</strong></p>
<p>要配置和使用Magento后台多用户登录功能，您可以按照以下步骤进行操作：</p>
<p><strong>步骤 1：创建用户角色</strong>：在Magento后台，创建不同的用户角色，并为每个角色分配相应的权限。</p>
<p><strong>步骤 2：创建用户账号</strong>：为每个团队成员创建独立的用户账号，并将其分配给相应的用户角色。</p>
<p><strong>步骤 3：启用多用户登录</strong>：在Magento后台的系统设置中，启用多用户登录功能。</p>
<p><strong>步骤 4：登录后台</strong>：团队成员可以使用自己的用户账号登录Magento后台，开始进行相应的操作和管理任务。</p>]]></description>
      <pubDate>Wed, 22 Nov 2023 03:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2教程：如何创建新的商店视图]]></title>
      <link>https://www.360magento.com/blog/magento2-create-new-store-view/</link>
      <description><![CDATA[<p>在Magento 2中，商店视图（Store View）是一种用于展示商城内容的配置。通过创建新的商店视图，您可以将商城扩展到不同的语言、货币和地理位置，以满足全球用户的需求，并提供个性化的商城体验。下面是在Magento 2中创建新的商店视图的简明教程。</p>
<p>步骤1：登录到Magento 2后台管理面板。</p>
<ul>
<li>使用管理员帐户登录到Magento 2后台。</li>
</ul>
<p>步骤2：导航到商店视图设置。</p>
<ul>
<li>在Magento 2的管理面板中，导航到"商店" &gt; "设置（Configuration）"。</li>
<li>在左侧导航中，找到"商店"部分，并点击"商店视图（Store View）"选项。</li>
</ul>
<p>步骤3：创建新的商店视图。</p>
<ul>
<li>在商店视图页面，点击"创建商店视图（Create Store View）"按钮。</li>
<li>在"商店（Store）"字段中，选择要与新视图关联的商店。</li>
<li>在"名称（Name）"字段中，输入商店视图的名称，例如"英文商店"。</li>
<li>在"代码（Code）"字段中，输入商店视图的唯一代码，例如"en"。</li>
<li>在"状态（Status）"字段中，选择"启用（Enabled）"以激活商店视图。</li>
<li>在"排序（Sort Order）"字段中，输入商店视图的排序顺序（可选）。</li>
<li>点击"保存（Save Store View）"按钮以创建商店视图。</li>
</ul>
<p>步骤4：配置商店视图选项（可选）。</p>
<ul>
<li>在商店视图页面，找到您刚创建的商店视图，并点击进入编辑页面。</li>
<li>在编辑页面，您可以配置商店视图的各种选项，如语言、货币、时区等。</li>
<li>根据您的需求进行相应的配置，并点击"保存（Save Store View）"按钮以保存更改。</li>
</ul>
<p>通过按照上述步骤，在Magento 2中创建新的商店视图将变得简单而直观。您可以根据您的业务需求创建多个商店视图，以满足不同目标市场的需求，并提供个性化的商城体验。</p>]]></description>
      <pubDate>Tue, 21 Nov 2023 07:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2教程：如何创建CMS页面重写]]></title>
      <link>https://www.360magento.com/blog/magento2-create-cms-page-rewrite/</link>
      <description><![CDATA[<p>在Magento 2中，CMS页面重写允许您自定义CMS页面的链接路径和URL。这对于优化页面链接的可读性、提高用户体验和搜索引擎优化（SEO）效果非常有用。通过创建CMS页面重写，您可以使用自定义的URL路径来替代默认的CMS页面链接，使其更加友好和易于理解。下面是在Magento 2中创建CMS页面重写的简明教程。</p>
<p>步骤1：登录到Magento 2后台管理面板。</p>
<ul>
<li>使用管理员帐户登录到Magento 2后台。</li>
</ul>
<p>步骤2：导航到CMS页面设置。</p>
<ul>
<li>在Magento 2的管理面板中，导航到"内容" &gt; "页面（Pages）"。</li>
<li>找到您想要创建URL重写的CMS页面，点击进入页面编辑页面。</li>
</ul>
<p>步骤3：创建URL重写。</p>
<ul>
<li>在页面编辑页面的左侧导航中，展开"搜索引擎优化（SEO）"部分。</li>
<li>在"URL键（URL Key）"字段中，输入您想要自定义的页面链接路径。</li>
<li>Magento 2会自动检测并验证URL键的唯一性。如果URL键已经被使用，您需要选择其他唯一的键。</li>
<li>点击"保存（Save）"按钮以保存页面更改。</li>
</ul>
<p>步骤4：刷新前台页面并查看结果。</p>
<ul>
<li>在Magento 2后台管理面板的顶部菜单中，点击"清除缓存（Flush Cache Storage）"。</li>
<li>访问您的Magento 2商城，并导航到已创建URL重写的CMS页面。</li>
<li>您将看到页面链接已被自定义为新的URL路径。</li>
</ul>
<p>通过按照上述步骤，在Magento 2中创建CMS页面重写将变得简单而直观。请注意，创建URL重写后，确保更新站点地图和搜索引擎索引，以确保新的URL路径被正确引导和索引。</p>]]></description>
      <pubDate>Tue, 21 Nov 2023 03:43:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2教程：如何创建产品URL重写]]></title>
      <link>https://www.360magento.com/blog/magento2-create-product-url-rewrite/</link>
      <description><![CDATA[<p>在Magento 2中，产品URL重写是一种强大的功能，可以帮助您优化产品链接的结构和可读性，同时提升搜索引擎优化（SEO）效果。通过创建产品URL重写，您可以使用自定义的URL路径替代默认的产品链接，使其更加友好和易于理解。下面是在Magento 2中创建产品URL重写的简明教程。</p>
<p>步骤1：登录到Magento 2后台管理面板。</p>
<ul>
<li>使用管理员帐户登录到Magento 2后台。</li>
</ul>
<p>步骤2：导航到产品URL重写设置。</p>
<ul>
<li>在Magento 2的管理面板中，导航到"产品" &gt; "目录（Catalog）" &gt; "产品"。</li>
<li>找到您想要创建URL重写的产品，点击进入产品编辑页面。</li>
</ul>
<p>步骤3：创建URL重写。</p>
<ul>
<li>在产品编辑页面的左侧导航中，展开"搜索引擎优化（SEO）"部分。</li>
<li>在"URL键（URL Key）"字段中，输入您想要自定义的产品链接路径。</li>
<li>Magento 2会自动检测并验证URL键的唯一性。如果URL键已经被使用，您需要选择其他唯一的键。</li>
<li>点击"保存（Save）"按钮以保存产品更改。</li>
</ul>
<p>步骤4：刷新前台页面并查看结果。</p>
<ul>
<li>在Magento 2后台管理面板的顶部菜单中，点击"清除缓存（Flush Cache Storage）"。</li>
<li>访问您的Magento 2商城，并导航到已创建URL重写的产品页面。</li>
<li>您将看到产品链接已被自定义为新的URL路径。</li>
</ul>
<p>通过按照上述步骤，在Magento 2中创建产品URL重写将变得简单而直观。请注意，创建URL重写后，确保更新站点地图和搜索引擎索引，以确保新的URL路径被正确引导和索引。</p>]]></description>
      <pubDate>Mon, 20 Nov 2023 07:42:08 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2教程：如何在主页上插入产品]]></title>
      <link>https://www.360magento.com/blog/magento2-insert-products-homepage/</link>
      <description><![CDATA[<p>主页是Magento 2商城中最重要的页面之一，为您的客户提供了第一印象和导航入口。通过在主页上插入产品，您可以突出展示您的热门产品、特别推荐或促销活动，吸引客户并提高销售。下面是在Magento 2主页上插入产品的简明教程。</p>
<p>步骤1：登录到Magento 2后台管理面板。</p>
<ul>
<li>使用管理员帐户登录到Magento 2后台。</li>
</ul>
<p>步骤2：创建产品的产品块（Product Block）。</p>
<ul>
<li>在Magento 2的管理面板中，导航到"内容" &gt; "块（Blocks）"。</li>
<li>点击"添加新块（Add New Block）"按钮。</li>
<li>在"标识符（Identifier）"字段中输入一个唯一的标识符，例如"homepage-products"。</li>
<li>在"标题（Title）"字段中输入块的标题，例如"主页产品"。</li>
<li>在"内容（Content）"字段中输入以下代码：
<div>
<pre class="MarkdownCodeBlock_preTag__QMZEO"><code class="MarkdownCodeBlock_codeTag__5BV0Z"><span>{{</span><span>widget</span><span> </span><span class="hljs-attr">type</span><span>=</span><span>"Magento\Catalog\Block\Product\Widget\NewWidget"</span><span> </span><span class="hljs-attr">display_type</span><span>=</span><span>"all_products"</span><span>
</span><span></span><span class="hljs-attr">products_count</span><span>=</span><span>"4"</span><span> </span><span class="hljs-attr">template</span><span>=</span><span>"product/widget/new/content/new_grid.phtml"</span><span>}}</span><span class="xml">
</span><span class="xml"></span></code></pre>
</div>
</li>
<li>点击"保存和继续编辑（Save and Continue Edit）"按钮。</li>
</ul>
<p>步骤3：编辑主页布局并插入产品块。</p>
<ul>
<li>在Magento 2的管理面板中，导航到"内容" &gt; "页面（Pages）"。</li>
<li>找到并点击编辑您的主页。</li>
<li>在主页编辑器中，找到您想插入产品的位置，将光标放置在那里。</li>
<li>点击编辑器工具栏上的"插入变量（Insert Variable）"按钮。</li>
<li>在弹出窗口中，选择"产品块（Blocks）"选项。</li>
<li>在下拉菜单中选择您在步骤2中创建的产品块（例如"主页产品"）。</li>
<li>点击"插入（Insert）"按钮。</li>
<li>点击"保存（Save）"按钮以保存主页更改。</li>
</ul>
<p>步骤4：刷新前台页面并查看结果。</p>
<ul>
<li>在Magento 2后台管理面板的顶部菜单中，点击"清除缓存（Flush Cache Storage）"。</li>
<li>访问您的Magento 2商城的主页，刷新页面，您将看到插入的产品块显示在主页上。</li>
</ul>
<p>通过按照上述步骤，在Magento 2主页上插入产品将变得简单而直观。您可以根据需要自定义产品块的数量、样式和展示方式，以实现最佳的产品展示效果。</p>
<div id="gtx-trans" style="position: absolute; left: -10px; top: 239.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 20 Nov 2023 03:40:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2订单状态工作流程详解]]></title>
      <link>https://www.360magento.com/blog/magento2-order-status-workflow/</link>
      <description><![CDATA[<p>订单状态是Magento 2中跟踪和管理订单进程的关键组成部分。了解订单状态的工作流程对于运营一个Magento 2商城至关重要。下面是Magento 2中订单状态的详细工作流程。</p>
<ol>
<li>
<p>新订单（New）：</p>
<ul>
<li>当客户成功下单后，订单状态被设置为新订单。</li>
<li>在此状态下，商家可以进行一些操作，如编辑订单、添加备注等。</li>
<li>新订单通常需要进一步处理，以满足库存、支付和配送等需求。</li>
</ul>
</li>
<li>
<p>处理中（Processing）：</p>
<ul>
<li>当商家开始处理订单时，订单状态会从新订单转换为处理中。</li>
<li>处理中状态表示商家正在处理订单，并可能涉及库存扣减、支付确认等操作。</li>
</ul>
</li>
<li>
<p>完成（Complete）：</p>
<ul>
<li>当订单中的所有产品都已经准备好并发货时，订单状态会从处理中转换为完成。</li>
<li>完成状态表示订单已经处理完毕，并且产品已经交付给客户。</li>
</ul>
</li>
<li>
<p>部分发货（Partially Shipped）：</p>
<ul>
<li>如果订单中的一部分产品已经发货，但还有其他产品未发货，订单状态会变为部分发货。</li>
<li>部分发货状态允许商家在等待所有产品准备好后一次性发货。</li>
</ul>
</li>
<li>
<p>部分退款（Partially Refunded）：</p>
<ul>
<li>如果订单中的一部分金额被退款，订单状态会变为部分退款。</li>
<li>部分退款状态表示商家已经处理了部分退款请求。</li>
</ul>
</li>
<li>
<p>已取消（Canceled）：</p>
<ul>
<li>如果订单在处理过程中被取消，或者客户请求取消订单，订单状态会变为已取消。</li>
<li>已取消状态表示订单已被取消，不再需要进一步处理。</li>
</ul>
</li>
<li>
<p>已关闭（Closed）：</p>
<ul>
<li>当订单完成并且不再需要进一步操作时，订单状态会变为已关闭。</li>
<li>已关闭状态表示订单已经结束，不再进行任何操作。</li>
</ul>
</li>
</ol>
<p>请注意，以上是Magento 2中常见的订单状态，具体的订单状态可能会因商城设置和定制而有所不同。</p>
<p>通过了解Magento 2中订单状态的工作流程，您可以更好地管理和跟踪订单的状态变化，从而提供更好的客户体验和订单处理效率。</p>]]></description>
      <pubDate>Sun, 19 Nov 2023 07:37:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2备份指南：保护您的商城数据]]></title>
      <link>https://www.360magento.com/blog/magento2-backup-guide/</link>
      <description><![CDATA[<p>在Magento 2开发中，定期进行备份是保护您商城数据的重要措施之一。本文将为您提供一份详细的Magento 2备份指南，涵盖了数据库备份、文件备份以及备份策略的建议，帮助您确保数据的安全性和可恢复性。</p>
<p>正文：<br />在运营一个Magento 2商城时，保护商城数据的安全性至关重要。定期备份是一项关键任务，以确保您的数据在意外事件发生时能够恢复。以下是一份Magento 2备份指南，帮助您制定备份策略并执行备份操作。</p>
<ol>
<li>
<p>数据库备份：</p>
<ul>
<li>使用命令行工具（如mysqldump）或数据库管理工具（如phpMyAdmin）创建数据库备份。</li>
<li>将备份文件保存在安全的位置，最好是离线存储或云存储服务。</li>
</ul>
</li>
<li>
<p>文件备份：</p>
<ul>
<li>备份Magento 2的代码文件和媒体文件（如产品图片、CMS页面图片等）。</li>
<li>使用文件同步工具（如rsync）或压缩工具（如tar）创建文件备份。</li>
<li>将备份文件保存在安全的位置，与数据库备份分开存储。</li>
</ul>
</li>
<li>
<p>定期备份策略：</p>
<ul>
<li>确定备份频率，根据您的商城活动和数据增长情况制定备份计划。通常建议每日备份。</li>
<li>考虑创建完整备份和增量备份的组合，以减少备份时间和存储空间的使用。</li>
<li>保留历史备份，以便您可以根据需要恢复到特定时间点的数据。</li>
</ul>
</li>
<li>
<p>自动化备份：</p>
<ul>
<li>配置定时任务或使用备份工具自动执行备份操作，确保备份过程的一致性和可靠性。</li>
<li>监控备份过程，确保备份成功完成，并及时处理任何备份错误或警告。</li>
</ul>
</li>
<li>
<p>测试和恢复：</p>
<ul>
<li>定期测试备份文件的完整性和可恢复性，确保备份数据的有效性。</li>
<li>在安全的测试环境中进行恢复测试，以验证备份的可用性和恢复过程的正确性。</li>
</ul>
</li>
</ol>
<p>通过遵循这些Magento 2备份指南，您可以确保商城数据的安全性和可恢复性。备份是一项关键任务，不容忽视。</p>]]></description>
      <pubDate>Sun, 19 Nov 2023 03:29:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[10个实用的Magento 2开发小技巧]]></title>
      <link>https://www.360magento.com/blog/magento2-development-tips/</link>
      <description><![CDATA[<p>在Magento 2开发中，掌握一些实用的小技巧可以提高您的效率并优化您的代码。本文将分享10个实用的Magento 2开发小技巧，涵盖了从调试到性能优化的各个方面，帮助您更好地开发和定制Magento 2。</p>
<p>正文：<br />Magento 2是一个功能强大的电子商务平台，为开发人员提供了丰富的工具和功能。以下是一些实用的Magento 2开发小技巧，可以帮助您更好地利用这个平台：</p>
<ol>
<li>
<p>使用模板路径提示：在开发过程中，您可以在Magento 2后台启用模板路径提示，以快速找到当前页面使用的模板文件的路径。</p>
</li>
<li>
<p>自定义日志记录：使用Magento 2的日志记录功能，您可以在代码中轻松添加自定义日志语句，以便调试和跟踪问题。</p>
</li>
<li>
<p>使用插件（Plugins）进行修改：Magento 2的插件机制允许您在不修改核心代码的情况下修改或扩展现有的类和方法。</p>
</li>
<li>
<p>使用代码生成器：Magento 2提供了代码生成器（Code Generator）工具，可以帮助您快速生成模块、控制器、模型等基本代码结构。</p>
</li>
<li>
<p>启用缓存：在开发过程中，及时禁用或清除缓存以查看实时更改。但在生产环境中，启用缓存以提高性能是非常重要的。</p>
</li>
<li>
<p>使用命令行工具：Magento 2提供了许多强大的命令行工具，如数据库迁移、静态资源部署、索引重建等，可以简化开发流程。</p>
</li>
<li>
<p>使用代码嗅探器（Code Sniffer）：Magento 2附带了一个代码嗅探器工具，可以帮助您遵循Magento开发最佳实践，并确保代码质量。</p>
</li>
<li>
<p>优化数据库查询：在编写自定义代码时，尽量减少数据库查询次数，并使用Magento 2提供的查询优化技术，如使用索引、批处理操作等。</p>
</li>
<li>
<p>启用Varnish缓存：Varnish是一个流行的HTTP加速器，通过缓存页面内容来提高Magento 2的性能。在生产环境中启用Varnish缓存可以显著提升网站的加载速度。</p>
</li>
<li>
<p>及时更新和备份：确保您的Magento 2安装是最新版本，并定期备份您的代码和数据库，以便在需要时进行恢复。</p>
</li>
</ol>
<p>这些实用的Magento 2开发小技巧可以帮助您更高效地开发和定制Magento 2，并提升您的开发体验。</p>]]></description>
      <pubDate>Sat, 18 Nov 2023 08:28:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用观察者模式扩展Magento 2功能]]></title>
      <link>https://www.360magento.com/blog/magento2-observer-pattern/</link>
      <description><![CDATA[<p>观察者模式是Magento 2开发中一个强大而灵活的工具，它允许您在系统中的特定事件发生时执行自定义操作。本文将介绍Magento 2中的观察者模式，并提供一些示例代码，帮助您理解如何使用观察者模式来扩展和定制Magento 2的功能。</p>
<p>正文：<br />在Magento 2中，观察者模式是通过事件（Event）和调度程序（Dispatcher）的结合来实现的。事件是系统中发生的特定动作或状态的表示，而调度程序则负责监听和触发这些事件。当事件发生时，调度程序将通知所有注册的观察者，并执行它们所定义的操作。</p>
<p>首先，我们需要定义一个触发事件的点，并在需要监听的地方注册观察者。例如，假设我们想在添加商品到购物车时执行一些自定义操作。我们可以在<code>checkout_cart_add_product_complete</code>事件上注册一个观察者。</p>
<p>以下是一个基本的观察者类的示例代码：</p>
<div>
<div class="MarkdownCodeBlock_codeHeader__zWt_V">
<div class="MarkdownCodeBlock_languageName__4_BF8">php</div>
<button class="Button_buttonBase__Bv9Vx Button_flat__dcKQ1 MarkdownCodeBlock_copyButton__1_hA9">复制</button></div>
<pre class="MarkdownCodeBlock_preTag__QMZEO"><code class="MarkdownCodeBlock_codeTag__5BV0Z"><span>&lt;?php</span>
<span>namespace</span> <span>Vendor</span>\<span>Module</span>\<span>Observer</span>;

<span>use</span> <span>Magento</span>\<span>Framework</span>\<span>Event</span>\<span>ObserverInterface</span>;

<span class="hljs-class">class</span><span class="hljs-class"> </span><span class="hljs-class">AddToCartObserver</span><span class="hljs-class"> </span><span class="hljs-class">implements</span><span class="hljs-class"> </span><span class="hljs-class">ObserverInterface</span><span class="hljs-class">
</span><span class="hljs-class"></span>{
    <span>public</span> <span class="hljs-function">function</span><span class="hljs-function"> </span><span class="hljs-function">execute</span><span class="hljs-function">(</span><span class="hljs-function">\Magento\Framework\Event\Observer </span><span class="hljs-function">$observer</span><span class="hljs-function">)
</span><span class="hljs-function">    </span>{
        <span>// 在此处编写您的自定义操作代码</span>
    }
}
</code></pre>
</div>
<p>然后，我们需要在模块的<code>etc/events.xml</code>文件中定义观察者的配置：</p>
<div>
<div class="MarkdownCodeBlock_codeHeader__zWt_V">
<div class="MarkdownCodeBlock_languageName__4_BF8">xml</div>
<button class="Button_buttonBase__Bv9Vx Button_flat__dcKQ1 MarkdownCodeBlock_copyButton__1_hA9">复制</button></div>
<pre class="MarkdownCodeBlock_preTag__QMZEO"><code class="MarkdownCodeBlock_codeTag__5BV0Z"><span>&lt;?xml version="1.0"?&gt;</span>
<span>&lt;</span><span>config</span><span> </span><span class="hljs-attr">xmlns:xsi</span><span>=</span><span>"http://www.w3.org/2001/XMLSchema-instance"</span><span> </span><span class="hljs-attr">xsi:noNamespaceSchemaLocation</span><span>=</span><span>"urn:magento:framework:Event/etc/events.xsd"</span><span>&gt;</span>
    <span>&lt;</span><span>event</span><span> </span><span class="hljs-attr">name</span><span>=</span><span>"checkout_cart_add_product_complete"</span><span>&gt;</span>
        <span>&lt;</span><span>observer</span><span> </span><span class="hljs-attr">name</span><span>=</span><span>"vendor_module_addtocart_observer"</span><span> </span><span class="hljs-attr">instance</span><span>=</span><span>"Vendor\Module\Observer\AddToCartObserver"</span><span> /&gt;</span>
    <span>&lt;/</span><span>event</span><span>&gt;</span>
<span>&lt;/</span><span>config</span><span>&gt;</span>
</code></pre>
</div>
<p>在上述示例中，我们将<code>checkout_cart_add_product_complete</code>事件与<code>Vendor\Module\Observer\AddToCartObserver</code>观察者关联起来。当该事件在系统中被触发时，观察者的<code>execute</code>方法将会被调用。</p>
<p>您可以根据需要注册多个观察者，并在每个观察者的<code>execute</code>方法中编写自己的逻辑。</p>
<p>通过使用观察者模式，您可以方便地扩展和定制Magento 2的功能，而无需修改核心代码。观察者模式使得系统的各个部分能够松散地耦合在一起，提供了更高的可维护性和可扩展性。</p>]]></description>
      <pubDate>Sat, 18 Nov 2023 03:27:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中使用XML在首页插入静态块的方法]]></title>
      <link>https://www.360magento.com/blog/magento-insert-static-block-homepage-xml/</link>
      <description><![CDATA[<p>在Magento中，您可以使用XML布局文件来在首页或其他页面中插入静态块，以便在页面上显示自定义内容。本篇博文将介绍如何使用XML在Magento的首页插入静态块。</p>
<p>步骤 1：登录到Magento后台管理区域<br />使用管理员凭据登录到您的Magento后台管理区域。</p>
<p>步骤 2：创建静态块<br />在Magento后台管理区域，导航到左侧菜单中的&ldquo;内容&rdquo; &gt; &ldquo;块&rdquo;。点击&ldquo;创建新块&rdquo;按钮，创建一个新的静态块。填写块的相关信息，包括标识符和内容。</p>
<p>步骤 3：编辑首页布局文件<br />在Magento的主题中，找到用于首页的布局文件。通常，首页的布局文件位于以下路径：`app/design/frontend/{Vendor}/{Theme}/Magento_Theme/layout/default.xml`。如果您使用的是自定义主题，请相应地修改路径。</p>
<p>步骤 4：插入静态块的XML代码<br />在首页布局文件中，找到`&lt;body&gt;`标签，并在其中插入以下XML代码：</p>
<p>```xml<br />&lt;referenceContainer name="content"&gt;<br /> &lt;block class="Magento\Cms\Block\Block" name="your_block_name"&gt;<br /> &lt;arguments&gt;<br /> &lt;argument name="block_id" xsi:type="string"&gt;your_block_identifier&lt;/argument&gt;<br /> &lt;/arguments&gt;<br /> &lt;/block&gt;<br />&lt;/referenceContainer&gt;<br />```</p>
<p>将`your_block_name`替换为您希望为该静态块定义的名称，并将`your_block_identifier`替换为之前创建的静态块的标识符。</p>
<p>步骤 5：保存并清除缓存<br />保存并关闭首页布局文件。然后，登录到Magento后台管理区域，导航到&ldquo;系统&rdquo; &gt; &ldquo;缓存管理&rdquo;，并清除页面缓存，以便使更改生效。</p>
<p>步骤 6：查看首页上的静态块<br />现在，打开Magento商店的首页，您将看到之前创建的静态块已成功插入到首页中，并显示相应的内容。</p>
<p>使用XML在Magento的首页插入静态块使您能够轻松地自定义首页内容，并在页面上显示自定义的静态块。</p>
<p></p>]]></description>
      <pubDate>Fri, 17 Nov 2023 07:16:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中自定义首页页面的方法]]></title>
      <link>https://www.360magento.com/blog/magento2-customize-homepage/</link>
      <description><![CDATA[<p></p>
<p>Magento 2是一个功能强大的电子商务平台，允许您自定义和配置各个页面以满足您的商店需求。在本篇博文中，我们将介绍如何在Magento 2中自定义首页页面。</p>
<p>步骤 1：登录到Magento 2后台管理区域<br />使用管理员凭据登录到您的Magento 2后台管理区域。</p>
<p>步骤 2：创建自定义首页布局文件<br />在Magento的主题中，找到用于首页的布局文件。通常，首页的布局文件位于以下路径：`app/design/frontend/{Vendor}/{Theme}/Magento_Theme/layout/default.xml`。如果您使用的是自定义主题，请相应地修改路径。</p>
<p>步骤 3：编辑自定义首页布局文件<br />打开自定义首页布局文件，并根据您的需求进行编辑。您可以使用XML标签和属性来定义页面的结构、内容和布局。</p>
<p>以下是一些常见的自定义首页布局设置示例：</p>
<p>- 增加静态块：您可以使用`&lt;referenceContainer&gt;`标签和`&lt;block&gt;`标签来插入静态块到首页。您可以在适当的位置添加以下代码来插入静态块：</p>
<p>```xml<br />&lt;referenceContainer name="content"&gt;<br /> &lt;block class="Magento\Cms\Block\Block" name="your_block_name"&gt;<br /> &lt;arguments&gt;<br /> &lt;argument name="block_id" xsi:type="string"&gt;your_block_identifier&lt;/argument&gt;<br /> &lt;/arguments&gt;<br /> &lt;/block&gt;<br />&lt;/referenceContainer&gt;<br />```</p>
<p>将`your_block_name`替换为您给定的静态块名称，将`your_block_identifier`替换为静态块的标识符。</p>
<p>- 调整页面布局：您可以使用不同的容器名称和块标签来调整页面布局。通过在布局文件中的适当位置添加或修改容器和块标签，您可以重新排列页面的各个部分，如页眉、页脚、侧边栏等。</p>
<p>步骤 4：保存并清除缓存<br />保存并关闭自定义首页布局文件。然后，登录到Magento后台管理区域，导航到&ldquo;系统&rdquo; &gt; &ldquo;缓存管理&rdquo;，并清除页面缓存，以便使更改生效。</p>
<p>步骤 5：查看自定义的首页页面<br />现在，打开Magento商店的首页，您将看到您的自定义布局和修改已成功应用于首页页面。</p>
<p>通过自定义Magento 2的首页页面，您可以完全控制首页的布局、内容和呈现方式，以提供独特而个性化的用户体验。</p>
<p></p>
<div id="gtx-trans" style="position: absolute; left: -15px; top: 11.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 17 Nov 2023 03:57:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中添加CMS页面的步骤和说明]]></title>
      <link>https://www.360magento.com/blog/magento2-add-cms-page/</link>
      <description><![CDATA[<p></p>
<p>---</p>
<p>在Magento 2中，CMS页面允许您创建和管理自定义内容，如关于我们、联系我们、常见问题等页面。本篇博文将介绍在Magento 2中添加CMS页面的详细步骤和说明。</p>
<p>步骤 1：登录到Magento 2后台管理区域<br />在您的浏览器中打开Magento 2后台管理页面，并使用管理员凭据登录到您的商店。</p>
<p>步骤 2：导航到CMS页面管理<br />导航到左侧菜单中的&ldquo;内容&rdquo; &gt; &ldquo;页面&rdquo;下的&ldquo;页面&rdquo;选项。这将打开CMS页面管理区域。</p>
<p>步骤 3：创建新CMS页面<br />点击&ldquo;创建新页面&rdquo;按钮，开始创建新的CMS页面。</p>
<p>步骤 4：填写CMS页面信息<br />在创建CMS页面的编辑界面，您需要填写以下信息：<br />- 标题：输入CMS页面的标题。这是显示在前端页面上的页面名称。<br />- 标识符：输入CMS页面的唯一标识符。这将用于生成CMS页面的URL。<br />- 页面布局：选择页面布局。您可以选择全宽布局或左右侧边栏布局，具体取决于您的设计需求。<br />- 激活：选择是否激活该CMS页面。<br />- 排序：指定CMS页面的排序顺序。</p>
<p>步骤 5：编辑CMS页面内容<br />在&ldquo;内容&rdquo;选项卡下，您可以使用WYSIWYG编辑器输入和格式化CMS页面的内容。您可以添加文本、图像、链接和其他元素来定制页面。</p>
<p>步骤 6：保存并发布CMS页面<br />完成CMS页面内容编辑后，点击右上角的&ldquo;保存并发布&rdquo;按钮，保存并发布CMS页面。您的CMS页面现在已经创建成功并可在前端页面上访问。</p>
<p>步骤 7：查看CMS页面<br />要查看新添加的CMS页面，您可以导航到前端页面，并在导航菜单或链接中找到相应的CMS页面。</p>
<p>这些是在Magento 2中添加CMS页面的基本步骤和说明。通过创建自定义的CMS页面，您可以灵活地管理和展示内容，以满足您的商店需求。</p>
<p></p>
<div id="gtx-trans" style="position: absolute; left: 356px; top: 600.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 16 Nov 2023 07:11:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中添加CMS块的步骤和说明]]></title>
      <link>https://www.360magento.com/blog/magento2-add-cms-block/</link>
      <description><![CDATA[<p>在Magento 2中，CMS块是可重复使用的内容片段，可以在多个页面和布局中使用。本篇博文将介绍在Magento 2中添加CMS块的详细步骤和说明。</p>
<p>步骤 1：登录到Magento 2后台管理区域<br />在您的浏览器中打开Magento 2后台管理页面，并使用管理员凭据登录到您的商店。</p>
<p>步骤 2：导航到CMS块管理<br />导航到左侧菜单中的&ldquo;内容&rdquo; &gt; &ldquo;块&rdquo;下的&ldquo;块&rdquo;选项。这将打开CMS块管理区域。</p>
<p>步骤 3：创建新CMS块<br />点击&ldquo;创建新块&rdquo;按钮，开始创建新的CMS块。</p>
<p>步骤 4：填写CMS块信息<br />在创建CMS块的编辑界面，您需要填写以下信息：<br />- 标识符：输入CMS块的唯一标识符。这将用于在页面或布局中调用CMS块。<br />- 标题：输入CMS块的标题。这是显示在后台管理区域中的标识块的名称。<br />- 激活：选择是否激活该CMS块。</p>
<p>步骤 5：编辑CMS块内容<br />在&ldquo;内容&rdquo;选项卡下，您可以使用WYSIWYG编辑器输入和格式化CMS块的内容。您可以添加文本、图像、链接和其他元素来定制块。</p>
<p>步骤 6：保存并发布CMS块<br />完成CMS块内容编辑后，点击右上角的&ldquo;保存并发布&rdquo;按钮，保存并发布CMS块。您的CMS块现在已经创建成功并可在页面和布局中使用。</p>
<p>步骤 7：调用CMS块<br />要在页面或布局中调用CMS块，您可以使用以下代码：<br />```<br /><br />```<br />将`YOUR_BLOCK_IDENTIFIER`替换为您之前创建的CMS块的标识符。</p>
<p>步骤 8：保存并更新页面或布局<br />在调用CMS块的页面或布局中，点击右上角的&ldquo;保存&rdquo;按钮，保存并更新页面或布局。这将使CMS块在前端页面上显示。</p>
<p>这些是在Magento 2中添加CMS块的基本步骤和说明。通过创建和使用CMS块，您可以轻松地重复使用和管理内容片段，提高网站的灵活性和可维护性。</p>
<p></p>
<div id="gtx-trans" style="position: absolute; left: -29px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 16 Nov 2023 03:13:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[探索Magento 2的电商优势]]></title>
      <link>https://www.360magento.com/blog/magento2-ecommerce-advantages/</link>
      <description><![CDATA[<p>Magento 2是一款功能强大的开源电子商务平台，为在线商家提供了许多优势和功能。在本篇博文中，我们将探索Magento 2作为电子商务系统的一些主要优势。</p>
<p>1. 强大的扩展性：Magento 2提供了广泛的扩展和定制选项，使商家能够根据自己的需求和业务模型来定制和扩展其电子商务平台。通过丰富的市场和开发者社区，商家可以轻松地添加新功能、集成第三方服务和扩展其在线业务。</p>
<p>2. 灵活和可定制的设计：Magento 2提供了丰富的主题和布局选项，使商家能够根据自己的品牌形象和目标受众来设计独特和个性化的在线商店。商家可以轻松地更改颜色、字体、布局和其他设计元素，以创建具有吸引力和专业性的电子商务界面。</p>
<p>3. 强大的商品管理功能：Magento 2提供了全面的商品管理功能，包括库存管理、商品属性、产品类型和价格规则等。商家可以轻松地管理大量商品，设置不同的产品选项和价格策略，并使用灵活的目录结构来组织商品。</p>
<p>4. 多语言和多货币支持：作为一个全球化的电子商务平台，Magento 2支持多语言和多货币。商家可以轻松地创建多语言站点，并为不同地区的客户提供本地化的购物体验。多货币功能使商家能够在不同国家和地区接受多种货币的支付。</p>
<p>5. 强大的营销和促销工具：Magento 2提供了各种营销和促销工具，帮助商家吸引和留住客户。商家可以设置特价商品、优惠券、购物车价格规则等，以提供个性化和有吸引力的购物体验，并增加销售和转化率。</p>
<p>6. 高级搜索和过滤功能：Magento 2具有强大的搜索和过滤功能，使客户能够快速找到他们想要的商品。商家可以配置高级搜索引擎、设置筛选器和排序选项，提供优化的商品浏览和购物体验。</p>
<p>综上所述，Magento 2作为一款先进的电子商务系统，为商家提供了强大的功能和灵活性，能够满足各种在线商务需求。无论是中小型企业还是大型企业，Magento 2都为其提供了一个可靠和可扩展的电子商务平台。</p>
<p></p>
<div id="gtx-trans" style="position: absolute; left: -122px; top: 345.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 15 Nov 2023 07:04:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[成为一名出色的Magento前端开发人员所需的知识和技能]]></title>
      <link>https://www.360magento.com/blog/magento-frontend-developer-skills/</link>
      <description><![CDATA[<p></p>
<p>作为一名Magento前端开发人员，需要具备一系列的知识和技能，以便在开发过程中能够高效地创建出色的用户界面和用户体验。在本篇博文中，我们将探讨成为一名出色的Magento前端开发人员所需的关键知识和技能。</p>
<p>1. HTML、CSS和JavaScript：作为前端开发人员，掌握HTML、CSS和JavaScript是基础中的基础。深入了解HTML标记、CSS样式和JavaScript交互能力，能够构建具有良好结构、样式和交互的网页。</p>
<p>2. Magento主题开发：了解Magento的主题开发是成为一名优秀的Magento前端开发人员的关键。熟悉Magento主题的结构和层次结构，能够创建自定义主题、定制样式和布局，并应用到Magento商店中。</p>
<p>3. 响应式设计和移动优化：在移动设备使用的普及下，响应式设计和移动优化变得至关重要。具备响应式设计和移动优化的技能，能够确保Magento商店在各种设备上都能提供出色的用户体验。</p>
<p>4. 前端框架和库：掌握流行的前端框架和库，例如Bootstrap、jQuery等，能够使用这些工具来加速开发过程、提高效率，并实现更复杂的交互效果。</p>
<p>5. Sass或Less等CSS预处理器：使用CSS预处理器能够提供更灵活和可维护的CSS代码。熟悉Sass、Less等CSS预处理器，能够使用变量、嵌套规则和混合等功能，简化CSS开发并提高代码的可重用性。</p>
<p>6. 版本控制系统：熟悉版本控制系统，例如Git，能够有效地管理和追踪代码更改。掌握版本控制系统的基本操作和工作流程，能够与团队协作，并轻松地回溯和管理代码版本。</p>
<p>7. 网页性能优化：优化Magento商店的网页性能对于提供卓越的用户体验至关重要。了解前端性能优化的最佳实践，如减少HTTP请求、压缩和合并资源、使用缓存等技术，能够提高Magento商店的加载速度和响应性。</p>
<p>8. 调试和故障排除：作为一名前端开发人员，需要具备调试和故障排除的技能。能够使用浏览器开发者工具、日志和其他调试工具，快速定位和解决前端问题。</p>
<p>综上所述，成为一名出色的Magento前端开发人员需要掌握HTML、CSS和JavaScript等基础知识，具备Magento主题开发、响应式设计和移动优化等技能，并熟悉前端框架、CSS预处理器和网页性能优化等工具和技术。</p>
<div id="gtx-trans" style="position: absolute; left: -52px; top: 11.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 15 Nov 2023 03:07:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento程序中记录日志并保存在var/log目录]]></title>
      <link>https://www.360magento.com/blog/logging-in-magento-ultimate-guide/</link>
      <description><![CDATA[<p>在Magento开发中，记录日志是一种有用的方式来跟踪和调试应用程序中的问题。本文将提供一份详细的指南，教您如何在Magento程序中使用代码记录日志，并将日志保存在var/log目录中，以便轻松地管理和分析日志信息。</p>
<p>步骤1：创建日志记录器实例<br />首先，在您的Magento程序中，您需要创建一个日志记录器实例。您可以使用Magento的内置日志记录器类`\Psr\Log\LoggerInterface`来实现这一点。可以在您的类构造函数或需要记录日志的方法中注入该日志记录器实例。</p>
<pre>use Psr\Log\LoggerInterface;

class YourClass
{
    protected $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this-&gt;logger = $logger;
    }

    // ...
}</pre>
<p>步骤2：记录日志消息<br />一旦您有了日志记录器实例，您可以使用该实例记录日志消息。`LoggerInterface`接口提供了几个常用的日志级别，例如`debug`、`info`、`warning`和`error`。您可以根据需要选择适当的级别。</p>
<pre>// 在您的方法中记录日志
public function yourMethod()
{
    // ...

    $this-&gt;logger-&gt;debug('This is a debug message.');
    $this-&gt;logger-&gt;info('This is an info message.');
    $this-&gt;logger-&gt;warning('This is a warning message.');
    $this-&gt;logger-&gt;error('This is an error message.');

    // ...
}
</pre>
<p>步骤3：配置日志保存路径</p>
<p>默认情况下，Magento将日志保存在var/log目录下。确保该目录具有适当的写入权限，以便Magento可以在其中创建和写入日志文件。</p>
<p>步骤4：查看和管理日志<br />记录的日志将保存在var/log目录中的不同日志文件中。您可以使用SSH或FTP等工具，访问Magento安装目录下的var/log目录，以查看和管理生成的日志文件。根据需要，您可以在开发或调试过程中定期检查日志文件，以获取有关应用程序运行状况和潜在问题的详细信息。</p>
<p>结束语<br />通过按照上述步骤，在Magento程序中记录日志并将其保存在var/log目录中，您将能够轻松地跟踪和调试应用程序中的问题。日志记录是开发过程中的重要工具，可以帮助您定位和解决潜在的错误和异常情况。希望本篇指南对Magento程序中的日志记录有所帮助！</p>
<p></p>]]></description>
      <pubDate>Tue, 14 Nov 2023 08:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento电商网站购物车流程详细指南]]></title>
      <link>https://www.360magento.com/blog/magento-ecommerce-shopping-cart-guide/</link>
      <description><![CDATA[<p>购物车是电商网站中至关重要的一环，为用户提供了方便的购物体验和订单管理。本文将为您提供一份详细的指南，介绍Magento电商网站的购物车流程，从添加商品到结算订单的完整过程，帮助您了解和优化购物车流程，提升用户的购物体验。</p>
<p>步骤1：商品浏览和选择<br />用户首先浏览Magento电商网站上的商品列表，可以通过分类、搜索或推荐等方式找到感兴趣的商品。用户可以查看商品详情、价格、库存情况和其他相关信息，并选择要购买的商品。</p>
<p>步骤2：添加商品到购物车<br />一旦用户决定购买商品，他们可以将商品添加到购物车。在商品页面上，通常有一个"加入购物车"按钮，用户点击后，商品将被添加到购物车中。</p>
<p>步骤3：购物车页面<br />添加商品到购物车后，用户会被重定向到购物车页面，展示他们添加的商品列表。在购物车页面上，用户可以查看每个商品的详细信息，如名称、价格、数量和小计。用户可以修改商品数量、移除商品或清空整个购物车。</p>
<p>步骤4：结算流程<br />当用户完成商品选择并准备结算时，他们可以点击"结算"按钮，进入结算流程。在这一步骤中，Magento网站通常要求用户登录或创建一个新账户。用户需要提供相关信息，如收货地址、付款方式和配送方式。</p>
<p>步骤5：订单确认<br />在结算流程的最后一步，用户将被导向订单确认页面。在此页面上，用户可以再次检查订单的详细信息，包括商品列表、收货地址、付款方式和配送方式。用户可以确认订单细节，并选择提交订单。</p>
<p>步骤6：订单完成<br />一旦用户提交订单，Magento电商网站会生成订单号并显示订单确认页面。用户可以在订单确认页面上查看订单摘要和详细信息，并收到订单确认的电子邮件通知。此时，用户可以选择继续购物或返回网站主页。</p>
<p>结束语<br />购物车流程是Magento电商网站中至关重要的一环，对用户的购物体验和订单管理起着关键作用。通过本文提供的详细指南，您可以了解Magento购物车流程的各个步骤，并通过优化和改进购物车流程来提升用户的购物体验。希望本篇指南对Magento电商网站的购物车流程有所帮助！</p>
<div id="gtx-trans" style="position: absolute; left: 527px; top: 477.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 14 Nov 2023 03:04:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[成为一名优秀的Magento开发人员所需的关键技能]]></title>
      <link>https://www.360magento.com/blog/skills-magento-developer/</link>
      <description><![CDATA[<p>导语：Magento是一种广泛使用的电子商务平台，作为一名Magento开发人员，掌握关键技能至关重要。本文将详细介绍成为一名优秀的Magento开发人员所需的关键技能，帮助您迈向成功的Magento开发之路。</p>
<ol>
<li>
<p>熟悉PHP编程语言：<br />作为Magento的主要开发语言，对PHP的熟悉程度对于成功开发和定制Magento非常重要。掌握PHP的基本语法、面向对象编程（OOP）和相关的设计模式是必不可少的。</p>
</li>
<li>
<p>Magento架构的理解：<br />深入了解Magento的架构和工作原理对于开发定制模块和主题至关重要。掌握Magento的模块结构、数据库架构、事件系统和前端技术栈（如布局、块和模板）是非常重要的。</p>
</li>
<li>
<p>Magento扩展和模块开发：<br />熟悉Magento扩展和模块开发是成为一名优秀Magento开发人员的关键。了解如何创建自定义模块、添加新功能、覆盖现有功能和扩展Magento的核心功能是必备技能。</p>
</li>
<li>
<p>前端开发技能：<br />熟悉HTML、CSS和JavaScript等前端技术，以及流行的前端框架（如Bootstrap）是非常有帮助的。这将使您能够定制Magento的前端样式和布局，提供出色的用户体验。</p>
</li>
<li>
<p>数据库管理：<br />熟悉MySQL或其他关系型数据库管理系统对于在Magento中处理数据非常重要。了解数据库设计、查询优化和索引的基本原理是必要的。</p>
</li>
<li>
<p>版本控制和团队协作：<br />掌握版本控制工具（如Git）和团队协作工具（如GitHub或Bitbucket）是必备技能。这将使您能够有效地管理代码、合作开发和进行版本控制。</p>
</li>
<li>
<p>问题排查和调试能力：<br />成为一名优秀的Magento开发人员需要具备良好的问题排查和调试能力。熟悉使用调试工具、查看错误日志和分析代码以解决问题是必要的技能。</p>
</li>
<li>
<p>学习和自我提升：<br />Magento是一个不断发展和更新的平台，作为开发人员，持续学习和自我提升是必须的。掌握新的技术和工具，关注Magento的最新版本和最佳实践将有助于您不断提升技能水平。</p>
</li>
</ol>
<p>结语：成为一名优秀的Magento开发人员需要综合运用多种技能和知识。通过熟悉PHP编程语言、深入了解Magento架构、掌握扩展开发和前端技术、熟悉数据库管理等关键技能，您将能够在Magento开发领域脱颖而出。同时，不断学习和自我提升是不可或缺的，以跟上Magento平台的发展和最新技术趋势。希望本文对您成为一名优秀的Magento开发人员有所帮助。</p>
<div id="gtx-trans" style="position: absolute; left: 31px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 13 Nov 2023 07:46:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何导入Magento的产品和图片]]></title>
      <link>https://www.360magento.com/blog/how-to-import-products-and-images-in-magento/</link>
      <description><![CDATA[<p>在Magento中导入产品和图片是建立和管理电子商务网站的重要任务。本文将提供一份详尽的指南，帮助您了解如何顺利导入产品和图片到Magento平台，并确保产品数据和图片正确关联，以提供出色的购物体验。</p>
<p>步骤1：准备产品和图片数据<br />首先，准备好产品和图片数据。确保产品数据以CSV或Excel文件的形式保存，其中包含产品的详细信息，如名称、描述、价格、SKU等。同时，收集产品图片并确保每个产品的图片与其对应的信息匹配。</p>
<p>步骤2：登录到Magento后台管理面板<br />使用管理员凭据登录到Magento的后台管理面板。确保您具备导入产品和管理目录的权限。</p>
<p>步骤3：导入产品数据<br />在Magento后台管理面板的左侧导航栏中，选择"System"，然后选择"Import"。在导入页面中，切换到"Products"选项卡，并点击"Choose File"按钮，选择包含产品数据的CSV或Excel文件。</p>
<p>步骤4：配置产品导入设置<br />在导入页面中，您可以配置各种产品导入设置。确保正确地映射CSV/Excel文件中的每个列与Magento的相应产品属性。您还可以设置其他选项，如处理重复产品、更新现有产品等。</p>
<p>步骤5：导入产品<br />配置完毕后，点击"Check Data"按钮，确保产品数据符合预期。如果没有错误，点击"Import"按钮开始导入产品数据。在导入过程中，系统将显示进度和结果。</p>
<p>步骤6：导入产品图片<br />在导入产品数据后，您需要导入相应的产品图片。将产品图片上传到Magento的媒体库，并将其与相应的产品关联。在Magento后台管理面板的左侧导航栏中，选择"Products"，然后选择"Catalog"。找到要导入图片的产品，并编辑每个产品的详细信息。在"Images and Videos"选项卡下，上传产品图片并设置其顺序和类型。</p>
<p>步骤7：保存和更新产品<br />在完成产品和图片导入后，确保点击保存并更新每个产品的信息。这将确保产品和图片正确关联和显示。</p>
<p>结束语<br />通过按照上述步骤，您可以顺利地将产品和图片导入到Magento平台，并确保它们正确关联和显示。这样，您将为您的电子商务网站提供丰富的产品信息和吸引人的图片，提升用户的购物体验。请记住，在进行任何导入之前，建议在测试环境中进行实验，以确保导入过程不会影响您的实际网站。希望本篇指南对您的Magento产品和图片导入过程有所帮助！</p>
<div id="gtx-trans" style="position: absolute; left: -53px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 13 Nov 2023 03:54:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[提高Magento外贸网站运行速度的关键措施]]></title>
      <link>https://www.360magento.com/blog/key-measures-to-improve-operating-speed-of-magento-foreign-trade-websites/</link>
      <description><![CDATA[<p>导语：在竞争激烈的外贸市场中，一个快速响应的网站对于吸引客户和提升销售至关重要。然而，许多Magento外贸网站可能存在速度较慢的问题，影响用户体验和搜索引擎排名。本文将分享一些权威的专业技巧，帮助您提高Magento外贸网站的运行速度，以获得更好的业务结果。</p>
<p>1. 优化图像和媒体文件：<br /> - 压缩和优化网站上的图像和媒体文件，以减少其文件大小并提高加载速度。<br /> - 使用适当的图像格式（如JPEG、PNG）并设置适当的压缩级别。</p>
<p>2. 使用缓存和CDN：<br /> - 配置Magento的缓存系统，包括页面缓存、对象缓存和数据库查询缓存。<br /> - 使用内容分发网络（CDN）将网站内容分发到全球各地的服务器，加快用户访问速度。</p>
<p>3. 压缩和合并CSS和JavaScript文件：<br /> - 压缩CSS和JavaScript文件，以减少其文件大小。<br /> - 合并多个CSS和JavaScript文件，减少HTTP请求的数量。</p>
<p>4. 使用优化的主题和扩展：<br /> - 选择优化的Magento主题和扩展，确保其代码质量和性能优化。<br /> - 定期检查和更新主题和扩展，以确保其与最新版本的Magento兼容。</p>
<p>5. 延迟加载和异步加载内容：<br /> - 使用延迟加载技术加载页面上的图片、视频和其他资源，以减少初始页面加载时间。<br /> - 将非关键的内容（如社交媒体插件）异步加载，确保页面的主要内容优先加载。</p>
<p>6. 优化数据库：<br /> - 定期清理Magento数据库中的无用数据，如日志、临时表等。<br /> - 优化数据库查询，包括创建索引、删除重复数据等。</p>
<p>7. 使用高速托管和服务器优化：<br /> - 将Magento网站托管在高速和可靠的服务器上，确保服务器响应时间快。<br /> - 配置服务器缓存和压缩，以提高网站性能。</p>
<p>8. 前端优化：<br /> - 最小化HTTP请求，减少页面加载时间。<br /> - 使用浏览器缓存和Gzip压缩，提高页面加载速度。</p>
<p>结语：通过采取以上关键措施，您可以显著提高Magento外贸网站的运行速度，提升用户体验和搜索引擎可见性。请记住，优化网站速度是一个持续的过程，建议定期进行测试和优化，以确保网站始终处于最佳状态。作为一个专业的外贸网站，快速响应和流畅的用户体验将为您赢得更多的客户和业务机会。</p>
<div id="gtx-trans" style="position: absolute; left: 120px; top: 61px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 12 Nov 2023 07:38:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何启用Magento的页面缓存功能以提升网站速度]]></title>
      <link>https://www.360magento.com/blog/enable-magento-page-caching/</link>
      <description><![CDATA[<p>Magento是一个功能强大的电子商务平台，为了提高网站速度和性能，启用页面缓存功能是至关重要的。本文将详细介绍如何在Magento中启用页面缓存功能，以加快网站加载速度并提升用户体验。</p>
<p>步骤1：登录Magento后台管理面板<br />首先，使用管理员凭据登录到Magento的后台管理面板。在成功登录后，您将进入控制面板，准备进行页面缓存的配置。</p>
<p>步骤2：进入配置页面<br />在控制面板中，点击左上角的"Stores"（商店）选项卡，然后选择"Configuration"（配置）。</p>
<p>步骤3：打开缓存配置<br />在左侧导航栏中，找到并展开"Advanced"（高级）选项。然后，点击"System"（系统）下的"Cache Management"（缓存管理）。</p>
<p>步骤4：启用页面缓存<br />在缓存管理页面中，您将看到各种缓存选项。找到"Full Page Cache"（完整页面缓存）并确保其状态为"Enabled"（已启用）。</p>
<p>步骤5：保存配置更改点击页面右上方的"Save Config"（保存配置）按钮，将您的更改保存到Magento配置中。</p>
<p>步骤6：清除缓存启用页面缓存后，您需要清除现有的缓存以使更改生效。点击页面右上方的"Flush Magento Cache"（清除Magento缓存）按钮，然后确认清除操作。</p>
<p>步骤7：测试页面缓存现在，您的Magento网站已经启用了页面缓存功能。为了确保缓存正常工作，您可以打开您的网站并浏览几个页面。注意观察页面加载速度的改善。</p>
<p>结语：通过启用Magento的页面缓存功能，您可以显著提升网站的加载速度和性能。这将改善用户体验、提高转化率，并有助于提升搜索引擎排名。记得定期清除缓存以确保最新的数据和内容被缓存。</p>
<p>优化网站速度是一个持续的过程，建议您定期进行测试和优化，以确保网站保持最佳状态。希望本文对您启用Magento页面缓存功能有所帮助。</p>]]></description>
      <pubDate>Sun, 12 Nov 2023 03:39:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用Magento构建强大的电子商务网站的亮点]]></title>
      <link>https://www.360magento.com/blog/highlights-of-building-powerful-ecommerce-sites-with-magento/</link>
      <description><![CDATA[<p>在当今数字化时代，拥有一个优秀的电子商务网站对于企业的成功至关重要。作为一种功能强大的电子商务平台，Magento为企业提供了一个全面而灵活的解决方案。本文将介绍使用Magento构建强大的电子商务网站的优势和关键功能。</p>
<ol>
<li>
<p>强大的功能和灵活性：<br />Magento提供了丰富的功能和灵活的架构，使企业能够构建适应其业务需求的定制化网站。无论是中小型企业还是大型企业，Magento都可以根据需求进行扩展和定制，满足各种电子商务业务模型。</p>
</li>
<li>
<p>多店铺管理：<br />Magento允许通过单个后台管理多个在线商店。这对于拥有多个品牌、产品线或地理位置的企业来说非常有用。通过统一的管理界面，您可以轻松地管理和监控各个店铺的库存、订单、支付和运输等。</p>
</li>
<li>
<p>丰富的扩展和集成：<br />Magento提供了一个庞大的扩展市场，您可以通过集成各种插件和模块来增强您的网站功能。无论是支付网关、物流服务、市场营销工具还是客户支持系统，Magento都有相应的扩展可供选择。</p>
</li>
<li>
<p>灵活的主题和设计：<br />Magento提供了丰富的主题和模板选择，使您能够根据品牌形象和用户体验需求来定制网站的外观和用户界面。您可以选择现有主题或进行定制开发，以实现独特的品牌风格和用户友好的设计。</p>
</li>
<li>
<p>强大的营销和SEO功能：<br />Magento内置了一系列强大的营销工具，包括促销活动、优惠券、产品推荐和客户分群等。此外，Magento还具有友好的搜索引擎优化（SEO）功能，有助于提高网站在搜索引擎中的可见性和排名。</p>
</li>
<li>
<p>安全和可靠性：<br />Magento提供了一系列安全性功能和措施，以确保网站和用户数据的安全。它具有强大的身份验证、加密和防范欺诈的功能，保护您的网站免受潜在的安全威胁。</p>
</li>
</ol>
<p>总而言之，使用Magento构建电子商务网站是一个明智的选择。其强大的功能、灵活性和可扩展性使企业能够打造出符合业务需求的出色网站。无论您是中小型企业还是大型企业，Magento都提供了一套完整的解决方案，帮助您实现在线销售的成功。开始使用Magento，为您的电子商务业务开辟一个新的篇章吧！</p>
<div id="gtx-trans" style="position: absolute; left: -175px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 11 Nov 2023 07:30:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento有哪些适用于中小型企业的定制化功能？]]></title>
      <link>https://www.360magento.com/blog/customizable-features-of-magento-suitable-for-smes/</link>
      <description><![CDATA[<p>导语：构建一个强大而灵活的电子商务网站对于中小型企业来说至关重要。而Magento作为一款功能强大的电子商务平台，为企业提供了全面的解决方案。本文将为您介绍如何利用Magento的定制化功能，为中小型企业打造一个令人印象深刻的在线销售平台。无论是个性化设计、促销活动还是客户管理，Magento都能满足您的需求，助力您实现电子商务的成功。让我们一起探索Magento的定制化功能，为您的企业开辟新的商机！</p>
<p>Magento提供了许多适用于中小型企业的定制化功能，以下是其中一些主要功能：</p>
<p>1. 主题和布局定制：Magento允许中小型企业根据自身品牌形象和用户需求进行网站主题和布局的定制。您可以选择现有的主题，进行自定义调整，或者进行定制开发以满足特定的设计要求。</p>
<p>2. 商品管理：中小型企业可以使用Magento的商品管理功能来管理产品目录、库存和价格。您可以轻松添加、编辑和删除产品，并设置不同的属性和选项。</p>
<p>3. 促销和优惠券：Magento提供了灵活的促销工具，中小型企业可以使用这些工具来创建各种促销活动和优惠券。您可以设置折扣、特价商品、买一送一等促销策略，以吸引和激励客户购买。</p>
<p>4. 客户管理：通过Magento的客户管理功能，中小型企业可以管理客户信息、订单历史和购物车内容。您可以查看和跟踪客户活动，为客户提供个性化的服务和推荐。</p>
<p>5. 支付和物流集成：中小型企业可以通过Magento集成各种支付网关和物流服务，以提供方便的支付和快速的配送选项。您可以选择适合您业务的支付解决方案，并与物流服务商合作，提供灵活的配送选择。</p>
<p>6. 多语言和多货币支持：如果您的中小型企业面向国际市场，Magento提供了多语言和多货币支持的功能。您可以轻松地创建多语言版本的网站，并根据不同地区的货币设置定价和支付选项。</p>
<p>7. 数据分析和报告：通过Magento的数据分析和报告功能，中小型企业可以获取关键的业务指标和销售数据。您可以监控网站流量、销售趋势和客户行为，以便做出战略决策和优化业务运营。</p>
<p>这些功能只是Magento提供给中小型企业的一小部分定制化功能。通过灵活的架构和丰富的扩展市场，企业可以根据自身需求进行更多的定制化开发，满足特定的业务需求。</p>]]></description>
      <pubDate>Sat, 11 Nov 2023 03:32:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2的发展前景：持续创新与市场机遇]]></title>
      <link>https://www.360magento.com/blog/magento-2-continued-innovation-and-market-opportunities/</link>
      <description><![CDATA[<p>导语：Magento 2作为一款强大而灵活的电商平台，一直以来都备受关注。在本文中，我们将探讨Magento 2的发展前景，包括其持续创新、市场机遇以及为企业带来的价值。</p>
<p>1. 持续创新与功能增强</p>
<p>Magento 2在推出以来一直致力于持续创新和功能增强。相对于Magento 1，Magento 2引入了一系列的改进和新功能，包括更强大的性能、更直观的后台管理界面、更好的移动端支持等。这些改进使得Magento 2成为一个更现代化、更易用的电商平台，能够帮助企业满足不断变化的市场需求。</p>
<p>2. 强大的生态系统和扩展库</p>
<p>Magento 2拥有一个庞大而活跃的生态系统，包括开发者、合作伙伴和社区。这个生态系统为Magento 2提供了丰富的扩展和集成选项，使得企业能够根据自身需求定制和扩展他们的电商平台。无论是支付网关、物流集成还是营销工具，都能够在Magento 2的扩展库中找到适合的解决方案。</p>
<p>3. 响应式设计和移动优化</p>
<p>随着移动互联网的普及，移动端的重要性不言而喻。Magento 2具备响应式设计和移动优化的特点，能够自适应不同屏幕尺寸，并提供出色的移动购物体验。这使得企业能够更好地满足消费者的移动购物需求，提高转化率和用户满意度。</p>
<p>4. 全球化和多语言支持</p>
<p>Magento 2具备全球化的能力，支持多语言和多货币。这使得企业能够轻松扩展到不同的国家和地区，拓展全球市场。无论是本地化的内容、价格还是支付方式，Magento 2都提供了强大的工具和功能，帮助企业实现全球化战略。</p>
<p>5. 企业级功能和可扩展性</p>
<p>Magento 2是一款强大的企业级电商平台，适用于各种规模和行业的企业。它提供了丰富的功能和可扩展性，能够满足复杂的业务需求。无论是B2C还是B2B电商，Magento 2都能够提供强大的功能和灵活的定制选项，支持企业实现增长和创新。</p>
<p>结论：</p>
<p>总体而言，Magento 2具备强大的发展前景。它不仅在技术上持续创新和改进，还能够满足企业的多样化需求。随着电商市场的不断发展和竞争的加剧，有一个可靠、灵活的电商平台是企业成功的关键。Magento 2通过其强大的功能、扩展库和全球化支持，成为许多企业的首选。无论是新兴企业还是已有企业的升级，选择Magento 2都能够为他们带来成功和增长的机会。因此，我们可以乐观地预见Magento 2在未来的市场中将继续保持领先地位，为企业带来持续的价值和竞争优势。</p>]]></description>
      <pubDate>Fri, 10 Nov 2023 07:36:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的发展历程：在当今电商领域的优势与突破]]></title>
      <link>https://www.360magento.com/blog/evolution-magento-advantages-current-ecommerce-landscape/</link>
      <description><![CDATA[<p>导语:<br />Magento作为一款知名的电子商务平台，在当前的电商领域中展现出了许多独特的优势。本文将为您详细介绍Magento的发展历程，并探讨它在当今社会电商领域的优势和突破。</p>
<ol>
<li>
<p>创立与初期发展<br />Magento于2007年由Roy Rubin和Yoav Kutner共同创立。他们致力于打造一款灵活、可扩展的电子商务平台，以满足不断变化的市场需求。Magento的创立标志着一个全新的电商时代的开始。</p>
</li>
<li>
<p>功能丰富与可定制性<br />Magento以其丰富的功能和可定制性而闻名。它提供了强大的产品目录管理、安全的支付网关、订单处理和客户关系管理等功能。商家可以根据自身需求对Magento进行定制，打造独特的在线购物体验。</p>
</li>
<li>
<p>开源优势<br />作为一款开源平台，Magento具有开放的架构和源代码。这使得开发者可以根据自己的需求对平台进行自由的扩展和定制。开源的特性使得Magento拥有庞大的开发者社区，为商家提供了丰富的资源和支持。</p>
</li>
<li>
<p>可扩展性与性能<br />随着电商行业的快速发展，可扩展性和性能成为了一个关键因素。Magento凭借其可扩展的架构和强大的性能，能够处理大规模的产品目录、高订单量和高流量的网站访问。即使在高峰期，Magento也能保持稳定的运行，为用户提供无缝的购物体验。</p>
</li>
<li>
<p>移动端和全渠道能力<br />在移动互联时代，移动端的重要性不可忽视。Magento提供了响应式设计和移动友好的功能，确保了在不同设备上的无缝购物体验。此外，Magento还提供了全渠道能力，商家可以将线上商店与实体零售店、在线市场和社交媒体平台进行整合，为用户提供统一和一致的品牌体验。</p>
</li>
</ol>
<p>结论:<br />Magento在电商领域的发展历程令人瞩目。其功能丰富的平台、可扩展性、开源灵活性以及活跃的社区支持使其成为商家建立强大在线存在的首选。通过充分利用Magento的优势，商家可以打造引人入胜的在线商店，适应不断变化的市场需求，并在当今竞争激烈的电商领域蓬勃发展。</p>]]></description>
      <pubDate>Fri, 10 Nov 2023 02:54:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何启用和优化Magento的缓存功能，提升网站性能]]></title>
      <link>https://www.360magento.com/blog/how-do-i-enable-and-optimize-magento-caching/</link>
      <description><![CDATA[<p>导语：Magento的缓存功能是提高网站性能和用户体验的重要工具。本文将介绍如何启用和优化Magento的缓存功能，以加快网站加载速度并提升性能。</p>
<p>Magento是一款功能强大的电子商务平台，但由于其复杂性，网站性能可能会受到影响。启用和优化Magento的缓存功能可以缓解这个问题，并提供更快的页面加载速度和更好的用户体验。下面是一些步骤和技巧，帮助您启用和优化Magento的缓存功能。</p>
<p>1. 启用Magento的缓存功能：</p>
<p>- 登录到Magento后台管理面板。<br />- 在侧边栏菜单中，选择"商店"（Store）&gt; "设置"（Configuration）。<br />- 在左侧菜单中，找到并点击"高级"（Advanced）&gt; "系统"（System）。<br />- 在"缓存管理器"（Cache Management）部分，您将看到各种缓存类型的列表。<br />- 选择您想要启用的缓存类型，如页面缓存（Page Cache）、块缓存（Block Cache）、对象缓存（Object Cache）等。<br />- 对于每种选择的缓存类型，使用下拉菜单选择"启用"（Enable）。<br />- 点击"提交"（Submit）按钮以保存更改。</p>
<p>2. 优化Magento缓存的设置：</p>
<p>- 精细调整缓存类型：根据您的网站需求，选择启用适当的缓存类型。页面缓存（Page Cache）适用于不经常更改的页面，而块缓存（Block Cache）适用于经常重复的页面元素。对象缓存（Object Cache）则用于存储数据库查询结果。<br />- 清除缓存：在进行更改之后，务必清除缓存以确保更改生效。在Magento后台的"缓存管理器"页面中，您可以选择清除整个缓存或仅清除特定缓存类型。<br />- 定期刷新缓存：设置Magento的缓存刷新时间，以确保缓存内容始终保持最新。通过定期刷新缓存，您可以在不影响网站性能的情况下更新内容。</p>
<p>3. 配置页面缓存：</p>
<p>- 使用Varnish缓存：Varnish是一个流行的反向代理缓存服务器，可以显著提高Magento网站的性能。通过配置Magento和Varnish之间的集成，您可以实现高速的页面缓存，减少服务器负载和网络延迟。<br />- 配置CDN（内容分发网络）：使用CDN来分发Magento网站的静态资源，如图像、CSS和JavaScript文件。CDN能够将这些资源缓存在全球各地的服务器上，从而加速资源加载速度。</p>
<p>通过启用和优化Magento的缓存功能，您可以显著提高网站的性能和用户体验。确保定期清除缓存、刷新缓存并根据网站需求进行适当的缓存类型选择。结合其他性能优化策略，如压缩图像、合并CSS和JavaScript文件等，您将创建一个快速、高效的Magento网站，为访问者提供卓越的用户体验。</p>
<div id="gtx-trans" style="position: absolute; left: 32px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 09 Nov 2023 07:31:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento站点技巧和对手分析方法：提升电商竞争力的关键]]></title>
      <link>https://www.360magento.com/blog/magento-site-tips-and-adversary-analysis-methods/</link>
      <description><![CDATA[<p>导语：在竞争激烈的电商市场中，建立一个成功的Magento站点需要掌握一些关键的技巧，并且了解对手分析的方法。本文将为您介绍一些提升Magento站点竞争力的技巧，并分享有效的对手分析方法。</p>
<p>一、Magento站点技巧：</p>
<ol>
<li>
<p>优化网站速度：网站速度直接影响用户体验和搜索引擎排名。优化图片大小、使用缓存技术、压缩文件等方法可以显著提高网站的加载速度。</p>
</li>
<li>
<p>响应式设计：确保您的Magento站点具有响应式设计，能够适应不同设备的屏幕尺寸。这将提供良好的移动用户体验，并有助于提高搜索引擎排名。</p>
</li>
<li>
<p>简化结账流程：简化结账流程可减少购物车放弃率，提高转化率。通过减少步骤、提供多种支付选项和优化表单填写等方式，使结账过程更加便捷和用户友好。</p>
</li>
<li>
<p>强化产品页面：优化产品页面的布局、描述和图片，确保清晰的产品信息和吸引人的展示效果。添加用户评价和社交分享功能，增加用户参与度和信任度。</p>
</li>
<li>
<p>SEO优化：对Magento站点进行关键词研究，并在标题、描述、URL和内容中合理地应用。创建有价值的内容和外部链接，提高搜索引擎的可见性和排名。</p>
</li>
</ol>
<p>二、对手分析方法：</p>
<ol>
<li>
<p>竞争对手识别：确定您的主要竞争对手，这些对手在目标市场上与您竞争相似的产品或服务。</p>
</li>
<li>
<p>网站分析：分析竞争对手的网站结构、设计和功能。注意他们的用户体验、页面加载速度、购物流程等关键因素。</p>
</li>
<li>
<p>关键词研究：研究竞争对手在搜索引擎上的关键词排名和搜索量。确定他们的关键词策略，并找到可以与之竞争的关键词。</p>
</li>
<li>
<p>社交媒体分析：了解竞争对手在社交媒体上的活动和影响力。分析他们的社交媒体策略、受众互动和内容推广方式。</p>
</li>
<li>
<p>价格和促销策略：了解竞争对手的定价策略和促销活动。分析他们的价格优势、销售策略和客户忠诚度计划。</p>
</li>
<li>
<p>用户反馈和评价：查看竞争对手的用户反馈和评价，了解他们的优点和不足之处。从中吸取经验教训，并改进您的Magento站点。</p>
</li>
</ol>
<p>结论：</p>
<p>通过掌握Magento站点的关键技巧和对手分析方法，您可以提升电商竞争力并实现业务增长。优化网站速度、响应式设计、简化结账流程、强化产品页面和SEO优化都是提升Magento站点的关键技巧。同时，通过竞争对手的分析，您可以了解他们的策略和优势，并从中汲取经验教训。记住，持续的优化和创新是保持竞争优势的关键，将这些技巧和对手分析方法应用于您的Magento站点，将为您带来更多的成功和增长机会。</p>]]></description>
      <pubDate>Thu, 09 Nov 2023 03:47:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[关于Magento网站优化的实用技巧]]></title>
      <link>https://www.360magento.com/blog/Practical_tips_on_Magento_website_optimization/</link>
      <description><![CDATA[<p>标题：提升Magento网站性能和用户体验的实用技巧</p>
<p>导语：优化Magento网站是提高性能、加速加载时间和提升用户体验的关键。在本文中，我们将分享一些实用的技巧和建议，帮助您提升Magento网站的性能和用户体验。</p>
<p>1. 优化网站速度</p>
<p>网站速度是用户体验的重要因素。以下是一些优化网站速度的技巧：</p>
<p>- 使用缓存：启用Magento的缓存功能，包括页面缓存、块缓存和对象缓存，以减少页面加载时间。<br />- 压缩图像：使用适当的图像压缩工具来减小图像文件的大小，以加快页面加载速度。<br />- 合并和压缩CSS和JavaScript：将多个CSS和JavaScript文件合并为较少的文件，并使用压缩工具减小文件大小。<br />- 使用CDN：使用内容分发网络（CDN）来分发网站的静态资源，以加快资源加载速度。</p>
<p>2. 优化网站结构</p>
<p>优化网站结构可以提高用户体验和搜索引擎的索引能力：</p>
<p>- 优化URL结构：使用有意义的、描述性的URL，包含关键词，并避免使用过长或复杂的URL。<br />- 良好的网站导航：设计清晰的网站导航结构，使用户能够轻松浏览和导航网站的不同部分。<br />- 改善内部链接：使用相关的内部链接将页面连接起来，以提高用户体验和搜索引擎的索引能力。</p>
<p>3. 优化网站内容</p>
<p>优化网站内容有助于提高搜索引擎可见性和用户体验：</p>
<p>- 关键词研究：进行关键词研究，了解您的目标受众在搜索引擎上使用的关键词，并将其应用到网站的元标记、标题和内容中。<br />- 内容优化：编写高质量、有用且相关的内容，符合SEO最佳实践，并包含目标关键词。<br />- 使用标签和标题：为每个页面使用恰当的标题标签（H1、H2等）和页面描述，以提高搜索引擎可读性和用户体验。</p>
<p>4. 优化网站安全性</p>
<p>确保Magento网站的安全性对于保护用户数据和信任度至关重要：</p>
<p>- 更新Magento版本：及时更新Magento版本以获取最新的安全补丁和功能改进。<br />- 强密码和访问控制：使用强密码保护Magento后台，并限制对敏感文件和目录的访问权限。<br />- 使用SSL证书：为网站启用SSL证书，以加密访问并增加用户信任度。</p>
<p>5. 监控和优化</p>
<p>定期监控和优化Magento网站是持续提高性能和用户体验的关键：</p>
<p>- 网站分析：使用网站分析工具（如Google Analytics）来监控网站性能、用户行为和流量来源，以做出优化决策。<br />- 错误日志和性能监控：定期检查Magento的错误日志和性能监控工具，以寻找潜在的问题并及时解决。</p>
<p>结语</p>
<p>通过遵循这些实用技巧和建议，您可以提升Magento网站的性能、用户体验和搜索引擎可见性。记住，优化是一个持续的过程，不断监控和改进是确保网站持续优化的关键。让我们一起努力，打造出卓越的Magento网站吧！</p>]]></description>
      <pubDate>Wed, 08 Nov 2023 07:26:49 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento开发人员的实用性技巧和方案：提高效率与质量]]></title>
      <link>https://www.360magento.com/blog/practical-tips-for-magento-developers/</link>
      <description><![CDATA[<p></p>
<p>作为Magento开发人员，提高开发效率和代码质量是至关重要的。在本文中，我们将分享一些实用的技巧和方案，帮助您更高效地开发Magento站点，并提供高质量的代码和功能。</p>
<p>1. 使用代码版本控制<br />使用Git或其他代码版本控制工具来管理您的Magento项目代码。通过版本控制，您可以轻松跟踪代码更改、回滚错误和协作开发。这样可以提高代码管理和团队协作的效率。</p>
<p>2. 自定义模块开发<br />遵循Magento的模块化开发原则，将自定义功能封装为模块。这样可以保持代码的可维护性和可扩展性，并避免直接修改核心文件。模块化的开发方式使得代码修改和更新更加灵活和可控。</p>
<p>3. 使用事件和观察者<br />利用Magento的事件和观察者模式，以松耦合的方式扩展和修改Magento的功能。通过触发和监听事件，可以在不修改核心代码的情况下实现自定义逻辑。这样可以提高代码的可维护性和可扩展性。</p>
<p>4. 数据库迁移和更新<br />使用Magento的数据库迁移工具（如Magento 2的Schema和Data Patch）来管理数据库的变更和更新。这样可以跟踪和应用数据库变更，并确保在不同环境之间的一致性。数据库迁移工具可以提高开发团队的协作效率和代码质量。</p>
<p>5. 优化数据库查询<br />在编写自定义查询时，遵循Magento的最佳实践，使用索引、缓存和合理的查询语句来优化数据库查询。避免在循环中执行查询，而是尽可能使用集合操作。优化数据库查询可以提高Magento站点的性能和响应速度。</p>
<p>6. 使用代码生成器<br />Magento提供了代码生成器工具（如命令行工具和代码模板），可以加快开发速度。使用这些工具可以自动生成常见的代码结构和文件，减少手动编写的重复工作。代码生成器可以节省时间并提高代码的一致性和规范性。</p>
<p>7. 测试和调试<br />编写单元测试和集成测试来验证您的代码的正确性。使用调试工具和日志记录来排查和解决问题。通过测试和调试，可以提高代码的质量和稳定性，减少潜在的错误和问题。</p>
<p>8. 安全性和性能优化<br />遵循Magento的安全性和性能优化指南，确保您的代码和配置符合最佳实践。保护网站免受潜在的安全漏洞，并实施性能优化措施，如缓存、CDN集成和代码优化。安全性和性能优化是确保Magento站点稳定和高效运行的关键。</p>
<p>9. 持续集成和部署<br />使用自动化工具和流程来实现持续集成和部署。通过自动构建、测试和部署代码，可以减少人工操作和减少错误。持续集成和部署可以提高开发团队的效率和代码交付的质量。</p>
<p>总结:<br />通过应用这些实用的技巧和方案，您可以提高Magento开发的效率和质量。代码版本控制、模块化开发、事件和观察者模式、数据库迁移、优化查询、代码生成器、测试和调试、安全性和性能优化，以及持续集成和部署等方法都能帮助您更好地管理和开发Magento站点。这些实践将帮助您节省时间、减少错误，并提供稳定高效的Magento站点。始终记住，不断学习和探索新的技术和最佳实践，以跟上Magento的发展和提高您的开发技能。祝您在Magento开发中取得成功！</p>
<div id="gtx-trans" style="position: absolute; left: -12px; top: 584px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 08 Nov 2023 03:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[选择Magento作为您的电子商务网站:优势和好处]]></title>
      <link>https://www.360magento.com/blog/choosing-magento-for-your-ecommerce-website/</link>
      <description><![CDATA[<h2><span>了解 Magento</span></h2>
<p><span><span><span><span>Magento</span></span></span><span><span>是一个功能强大且功能丰富的开源</span></span><span><span>电子商务平台</span></span><span><span>，使企业能够创建和管理在线商店。</span><span>它提供了一个灵活且可定制的框架，用于构建具有许多特性和功能的电子商务网站。&nbsp;</span></span></span></p>
<p><span><span><span>Magento采用</span></span><span><span>PHP</span></span><span><span>开发，提供可伸缩性、可扩展性以及丰富的插件和主题生态系统，使其成为各种规模的企业建立和发展在线业务的热门选择。</span></span></span></p>
<p><span><span><span>Magento 的两个版本是</span></span><span><span>Magento Open Source</span></span><span><span>和</span></span><span><span>Magento Commerce</span></span><span><span>。</span><span>这些版本满足不同的需求和业务要求，提供不同级别的功能、支持、可扩展性等。</span></span></span></p>
<h2><span>Magento 开源与 Magento 商务</span></h2>
<h4><span>Magento 开源&nbsp;</span></h4>
<p><span><span><span>Magento 开源提供强大的电子商务功能，包括产品目录管理、购物车功能、结帐选项、支付网关集成、SEO 优化等。</span><span>它还支持多商店和多语言功能，适合中小型企业。</span></span></span></p>
<h4><span>Magento 商务&nbsp;</span></h4>
<p><span><span><span>Magento Commerce 包含 Magento 开源的所有功能。</span><span>尽管如此，它还引入了先进的功能，例如个性化购物体验、客户细分、先进的营销工具、B2B 商务功能、增强的搜索功能等等。</span><span>这些功能旨在满足具有更复杂电子商务需求的大型企业。</span></span></span></p>
<h4><span>Magento 开源</span></h4>
<p><span>作为一个开源版本，Magento 开源受益于提供支持、扩展和更新的开发人员和贡献者社区。</span></p>
<h4><span>Magento 商务</span></h4>
<p><span><span><span>Magento Commerce 提供专门的技术支持、安全更新和性能优化。</span><span>对于需要在线商店保持一致的正常运行时间和可靠性的企业来说，这种级别的支持非常重要。</span></span></span></p>
<p><span><span><span><span>当您</span></span></span><span><span>看到 Magento Open sourse 和 Magento Commerce 之间的根本区别时，您可以选择最适合您的需求、预算和增长愿望的版本。&nbsp;</span></span></span></p>
<p><span>但是，如果您对哪个版本适合您的业务感到困惑，您可以从</span>Magento 开发公司<span><span><span>获得帮助。</span><span>他们将分析您的业务和您的需求。</span><span>之后，他们会建议最合适的选择。</span></span><a href="https://www.pixlogix.com/hire-certified-magento-developers-in-india/" rel="noopener" target="_blank"><span><span></span></span></a><span><span>可以节省大量资源和时间。&nbsp;</span></span></span></p>
<p><span><span><span>选择合适的公司后，您可以从他们那里获得高度可定制和可扩展的电子商务商店。</span></span><span><span>因此，如果您对Magento 版本</span></span><span><span>感到困惑</span><span>，请向他们寻求帮助。</span></span></span></p>
<p><span>此外，让我们看看使用两个版本的 Magento 电子商务网站构建器框架为您的企业带来的好处。&nbsp;</span></p>
<h2><span>Magento 的优点：-</span></h2>
<p><span>以下是使用 Magento 框架为像您这样的企业开发电子商务商店的一些主要好处。&nbsp;</span></p>
<h3><span>#1：可扩展性&nbsp;</span></h3>
<p><span><span><span>可扩展性对于确保在线商店能够容纳不断增长的客户、产品和交易而不会减慢或崩溃至关重要。</span><span>凭借其可扩展的架构和性能优化功能，Magento 能够很好地处理大型产品目录和高流量网站。</span></span></span></p>
<p><span><span><span>它支持批量产品导入、可配置产品和分层导航等功能，使企业能够有效地管理和展示广泛的产品范围。</span><span>其缓存机制和优化技术也确保即使在流量高峰期也能保证流畅的用户体验。</span></span></span></p>
<p><span><span><span>Magento 采用模块化和分层架构，将不同的组件和功能分开。</span><span>这使得企业能够根据需要扩展系统的各个部分，例如数据库服务器、应用程序服务器和缓存机制。</span></span></span></p>
<p><span>此外，它还支持多种缓存机制，例如全页缓存和对象缓存，可显着提高网站性能并减少服务器负载，使平台能够处理更高的流量。</span></p>
<h3><span>#2：灵活性</span></h3>
<p><span><span><span>Magento 提供了大量的自定义选项。</span><span>您可以修改前端设计、创建自定义主题并实施独特的功能，以使在线商店与其品牌标识和客户期望保持一致。</span></span></span></p>
<p><span><span><span><span>扩展：-</span></span></span><span><span>&nbsp;Magento 市场提供了广泛的</span></span><span><span>扩展</span></span><span><span>和插件，可以集成到平台中以增强功能。</span><span>这些扩展涵盖了支付网关、运输方式、营销工具等领域。</span></span></span></p>
<p><span><span><span>此外，Magento 支持 API 和集成框架，允许与 ERP、CRM 和库存管理工具等第三方系统无缝连接。</span><span>这使企业能够构建定制的工作流程并自动化各种流程。</span></span></span></p>
<p><span><span><span>Magento 的架构允许在单个安装中创建多个商店。</span><span>这对于管理多个品牌或迎合不同市场的企业来说是有益的，因为它可以集中管理，同时允许每个商店拥有独特的品牌和产品分类。</span></span></span></p>
<h3><span>#3：广泛的功能</span></h3>
<p><span><span><span>Magento 提供了一组广泛的内置功能，使电子商务企业能够创建全面且功能丰富的在线商店。</span><span>这些功能涵盖电子商务生命周期的各个方面。&nbsp;</span></span></span></p>
<p><span><span><span><span>例如</span></span></span><span><span>，产品管理有助于管理产品属性、变体、自定义选项、产品详细信息、图像、类别、折扣和特别优惠。</span><span>其次，库存控制功能提供了实时监控和管理库存水平、处理低库存产品通知、延期交货和库存产品以及仓库管理系统的灵活性。</span></span></span></p>
<p><span><span></span><span><span><span>管理中的订单处理</span></span></span><span><span>功能</span><span>也使订单处理和管理更加有效。</span><span>借助 Magento，电子商务商店所有者可以增强客户体验。</span><span>您可以提供个性化的购物体验，另外实施具有保存的地址和订单历史记录的用户帐户，启用访客结账或注册选项等。</span></span></span></p>
<p><span><span></span><span><span>此外，庞大的第三方扩展</span></span><span><span>和主题市场丰富了 Magento 的生态系统</span><span>。</span><span>这些扩展可以轻松集成到平台中，以增强功能并提高在线商店的美观度。</span></span></span></p>
<h3><span>#4：移动响应式设计</span></h3>
<p><span><span><span>越来越多的消费者使用移动设备在线浏览和购物。</span><span>移动设备已成为许多人访问互联网的主要方式。</span></span></span></p>
<p><span><span><span>移动响应式设计可确保网站或在线商店在各种设备和屏幕尺寸（包括智能手机、平板电脑和台式机）上正确显示和运行。</span><span>Magento 非常重视移动响应式设计，为用户提供无缝的购物体验，无论他们使用什么设备。</span></span></span></p>
<p><span><span><span>Magento 提供固有的移动响应式设计功能，使在线商店能够适应不同的屏幕尺寸和方向。</span><span>Magento 移动响应式设计的一些关键功能包括灵活的布局、触摸友好的界面、优化的图像、响应式菜单、用户友好的表单和性能优化。&nbsp;</span></span></span></p>
<h3><span>#5：SEO 友好</span></h3>
<p><span>Magento的架构和功能旨在支持SEO，确保在该平台上构建的在线商店可以轻松地被搜索引擎发现，并在搜索结果中获得更高的排名。</span></p>
<p><span><span><span>Magento 的代码库结构良好并遵循最佳实践，使搜索引擎机器人可以更轻松地导航和索引网站内容。</span><span>它允许用户为产品页面、类别和内容页面创建 SEO 友好的 URL。</span><span>这些 URL 可以定制为用户可读且搜索引擎友好的。</span><span>此外，它还提供产品和页面自定义过程的简单元标题和元描述，以便您可以在搜索引擎结果中创建相关片段。</span></span></span></p>
<p><span><span><span>此外，Magento 的架构和功能在设计时考虑了 SEO，为企业提供了创建 SEO 友好的在线商店所需的工具和实践。</span><span>利用 Magento 的功能并实施有效的 SEO 策略最终会提高转化率和销售额。</span></span></span></p>
<h3><span>#6：多语言和多货币支持</span></h3>
<p><span><span><span>全球市场提供的客户群比单一国内市场大得多。</span><span>针对来自不同国家的客户可以让企业开拓新的收入来源并最大限度地发挥其增长潜力。</span></span></span></p>
<p><span><span><span>Magento 的国际化能力使企业能够通过提供多语言内容和多货币选项来瞄准全球受众。</span><span>该功能集对于旨在扩大业务范围和服务客户​​的电子商务企业来说非常宝贵。&nbsp;</span></span></span></p>
<p><span><span><span>使用 Magento，您可以创建多个商店视图，每个视图都有其相关的语言、内容和产品信息。</span><span>借助 Milt 货币支持，Magento 使客户能够查看产品价格并以当地货币完成交易。</span><span>兑换率可以手动设置或与实时汇率数据集成，以确保为国际客户提供准确的定价。</span></span></span></p>
<h3><span>#7：强大的安全性</span></h3>
<p><span><span><span>Magento 非常重视</span></span><span><span>安全性</span></span><span><span>，以确保保护客户数据、敏感信息和在线交易。</span><span>它与各种安全支付网关集成，确保客户支付数据在交易过程中得到加密和安全传输。</span></span></span></p>
<p><span><span><span>通过 PCI DSS 和数据加密，它可以保护电子商务商店的内部数据。</span><span>强大的用户身份验证机制（包括密码策略和多因素身份验证）有助于防止未经授权访问管理面板和客户帐户。</span></span></span></p>
<p><span><span><span>Magento 定期发布安全补丁和更新以解决已知漏洞。</span><span>我们鼓励商家及时应用这些更新，以保护他们的商店。</span></span></span></p>
<p><span>除此之外，扩展安全、管理安全、监控和入侵检测使像您这样的在线商家更加安全。</span></p>
<h3><span>#8：社区支持</span></h3>
<p><span><span><span>Magento 社区由开发人员、设计师、商人和爱好者组成，他们积极参与讨论、论坛和知识共享平台。</span><span>社区成员提供协助、分享最佳实践并解决问题，使商家更轻松地找到解决方案并优化他们的商店。</span></span></span></p>
<p><span><span><span>Magento 社区论坛等平台使用户能够发布问题、寻求建议和分享经验。</span><span>经验丰富的社区成员经常提供有价值的见解和解决方案。</span><span>社区成员经常创建教程、指南和文章来帮助其他人理解和掌握该平台的不同方面。</span></span></span></p>
<p><span><span><span>此外，许多第三方开发人员向 Magento Marketplace 贡献免费和付费扩展和主题，扩展了该平台的功能和自定义选项。</span><span>此外，Magento 社区成员还组织活动、会议和聚会，以促进交流、学习和协作。</span></span></span></p>
<p><span></span></p>]]></description>
      <pubDate>Tue, 07 Nov 2023 08:37:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 产品推荐：优点和技巧]]></title>
      <link>https://www.360magento.com/blog/magento-product-recommendations/</link>
      <description><![CDATA[<h2 id="what-are-magento-product-recommendations">Magento 产品推荐是什么？</h2>
<p>Magento 产品推荐是一个帮助在目录中的产品页面上显示相关产品的工具。它们可以与某个商品相关，或者只是与它一起购买，这会产生相当诱人的报价。</p>
<p>因此，这些建议会促使您的客户购买更多产品并探索更多产品。鉴于您将某些产品放在客户眼前，这也可能会导致冲动购买。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/QQ20231106-114450_2x.png" /></p>
<p><span><span>借助 Magento 产品推荐引擎，一个产品页面可以包含多个项目。</span><span>相应地，这会给您带来许多好处。</span></span></p>
<h2 id="benefits-of-product-recommendations"><span>产品推荐的好处</span></h2>
<p><span><span>由于我们已经知道 Magento 2 产品推荐是什么，因此了解这些产品块如何使您的商店受益是合乎逻辑的。</span><span>那么，让我们来看看此功能的一些主要优点。</span></span></p>
<h3 class="notoc"><span>1.平均订单价值（AOV）的增加</span></h3>
<p><span><span>精心挑选的产品推荐巧妙地鼓励您的客户购买更多产品。</span><span>因此，当顾客购买额外的商品以及他们打算购买的商品时，订单总数就会增加。</span><span>如果该策略运行得足够好，您可以看到平均订单价值整体上的增长。</span></span></p>
<h3 class="notoc"><span>2. 销售和转化率改善</span></h3>
<p><span><span>从长远来看，AOV 的增加会带来销售额和转化率的提高。</span><span>客户可以使用更多商品，从而浏览您的网站并更多地与您的商店互动。</span><span>因此，您有机会降低购物车放弃率，并将闲置访客转变为买家。&nbsp;</span></span></p>
<h3 class="notoc"><span>3.交叉销售和追加销售</span></h3>
<p><span><span>每家商店都有一个比其他商店表现更好的产品。</span><span>可悲的是，仍然有一些商品卖得不好。</span><span>Magento 2 产品推荐可以完美地消除此类情况。</span><span>它们可以让您推广表现较差的产品，并让它们更容易被发现。</span></span></p>
<h3 class="notoc"><span>4. 增强客户体验</span></h3>
<p><span><span>最后，使用产品推荐对您和您的客户都有好处。</span><span>如果你能满足客户的需求，他们在做出选择时可能会感到更自由。</span><span>因此，您可以通过适量的个性化营销活动极大地改善客户的体验。</span></span></p>]]></description>
      <pubDate>Mon, 06 Nov 2023 07:42:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置联系我们表单的电子邮件 ID]]></title>
      <link>https://www.360magento.com/blog/setup-email-id-for-contact-us-form-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Enable_Magento_2_Contact_Us_Form">启用 Magento 2 联系我们表格的步骤</span></h2>
<p><span>第1步：</span><span>登录您的商店后台并进入管理面板，选择</span><span>商店 &gt; 设置 &gt; 配置</span></p>
<p><span>步骤 2：</span><span>展开</span><span>配置</span><span>并选择&nbsp;&nbsp;</span><span><span><span>常规部分</span></span><span><span>下的</span></span></span><span>联系人</span><span><span><span>。</span></span><span><span>然后转到</span></span><span><span>联系我们</span></span><span><span>设置。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/QQ20231103-101722_2x.png" /></span></p>
<p><span>步骤 3：</span><span><span><span>确保取消选中&ldquo;使用系统值&rdquo;。</span><span>默认情况下，要</span></span></span><span>启用&ldquo;联系我们&rdquo;，</span><span>该值将为&ldquo;是&rdquo;以激活联系我们线路。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Enable-Contact-Us-opotion-for-store-view.png" /></span></p>
<p><span>步骤 4：</span><span>转到</span><span>电子邮件选项</span><span>部分。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Email-Options-for-sender.png" /></span></p>
<ul>
<li><span>发送电子邮件至</span><span>：您需要在此处输入管理员电子邮件或您希望接收联系我们查询的电子邮件。</span></li>
<li><span>电子邮件发件人：</span><span>选择您希望看到的商店发件人作为电子邮件发件人。</span></li>
</ul>
<ul>
<li><span>电子邮件模板：</span><span>从现有模板中选择电子邮件模板，或从下拉菜单中选择默认模板选项。</span></li>
</ul>]]></description>
      <pubDate>Sun, 05 Nov 2023 07:16:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 的发票、发货和贷项凭证 PDF 中显示/隐藏订单 ID]]></title>
      <link>https://www.360magento.com/blog/show-hide-order-id-in-invoice-shipment-credit-memo-pdf-of-magento-2/</link>
      <description><![CDATA[<p><span><span>众所周知，Magento 是构建电子商务网站的强大 CMS 之一。</span><span>它提供了许多预加载的功能，为此，您无需编写一行代码，只需在 Magento 2 后端中设置一些配置即可启用这些功能。</span></span><br /><span><span>很多时候，当您的客户在您的 Magento 2 商店下订单时，他们会收到大量附有订单电子邮件的文档。</span><span>到时候他们就很难找到哪个文档与哪个订单相关了？</span><span>原因 Magento 不会在 Magento 2 的发票、发货和贷项凭证 PDF 标题的顶部显示订单 ID。这可能会让您的客户感到困惑。</span><span>但是，您可以在上述所有 Magento 生成的文档上显示订单 ID，而无需编写任何代码。</span><span>想知道如何正确？</span><span>嗯，Magento 2 后端预加载了一个配置，您只需启用它就可以了！</span></span></p>
<p><span>转到&nbsp;<span>Store &ndash;&gt; Configuration -&gt; Sales &ndash;&gt; PDF Printouts</span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/PDF-Printouts-Backend-Settings.png" /></span></p>
<p><span>默认情况下，所有这些配置都设置为&ldquo;是&rdquo;，但如果您想隐藏订单 ID，只需从下拉列表中选择&ldquo;否&rdquo;将其关闭。</span></p>]]></description>
      <pubDate>Sat, 04 Nov 2023 08:10:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[什么是基础货币以及如何在 Magento 2 中设置货币选项]]></title>
      <link>https://www.360magento.com/blog/what-is-base-currency-and-how-to-set-currency-options-in-your-magento/</link>
      <description><![CDATA[<p>电子商务是增长最快的技术型业务，许多成熟企业正在走向全球。因此，在向其他国家推出之前设置货币设置已成为每个电子商务商店的首要任务。</p>
<p>Magento 2 作为电子商务平台在世界各地广泛使用。它具有默认功能，可以为全球多达 200 个国家/地区设置货币。您可以设置要在产品价格、订单和发票中显示的货币符号。管理员可以自定义货币符号的外观。</p>
<p>将会有来自不同国家的商家利用 Magento 的力量来建立他们的电子商务商店。商家来自不同的国家，因此您可能需要当地货币作为主要货币，如果您不从事国际业务，则您的商店必须只需要启用当地货币。</p>
<p>如果您从事国际业务，那么您可能已经在 Magento 2 商店中设置了多网站或多商店视图，以使您的商店全球化。在这种情况下，您需要设置不同国家/地区的货币，例如，对于印度，您需要 INR，对于英国，您可以启用 GBP，对于美国和世界其他地区，假设您想要美国。所有这些都可以使用默认的 Magento 功能进行配置，甚至无需一行代码。</p>
<p>导航到<span>Store &gt;Configuration &gt;General &gt;Currency Setup &gt;Currency Options</span><span>,</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/currency-options.png" /></p>
<p><span>基础货币：</span><span><span>基础货币用于所有在线支付交易。</span><span>基础货币范围由目录价格范围定义（&ldquo;目录&rdquo;&gt;&ldquo;价格&rdquo;&gt;&ldquo;目录价格范围&rdquo;）。</span></span></p>
<p><span>默认显示货币：</span><span><span>默认显示货币是您要为商店设置的默认货币，如果您的商店仅限于您所在的国家/地区，则您可以设置自己的货币并保存。</span><span>例如，对于印度商店，我们将在此字段中选择印度卢比。</span></span></p>
<p>如果您有国际业务、多商店视图或多网站设置，则需要根据商店选择相应的货币。例如，印度商店为印度卢比，英国商店为英镑，美国和世界其他地区为美元。</p>
<p>允许的货币：当您开展国际业务并在全球范围内销售产品时，您将需要提供多种货币可供选择。如果客户有能力更改货币，他将获得更多信任，或者您可以允许全球接受的货币，例如美元和英镑。</p>
<p>无论您在此处选择哪种货币，这些货币都将在前端可供客户选择。在下面的示例中，我启用了美元和欧元。</p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/default-welcome-msg.png" /></span></span></p>]]></description>
      <pubDate>Fri, 03 Nov 2023 07:06:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更改 Magento 2 中的 Favicon 图像]]></title>
      <link>https://www.360magento.com/blog/how-to-change-the-favicon-image-in-magento-2/</link>
      <description><![CDATA[<p><span><span>今天，我们将学习如何更改默认 Magento 2 中的 favicon（图标）。我不需要告诉你太多关于 favicon 是什么，但如果我必须简短介绍它，那么让我告诉你它就是与站点标题一起出现在浏览器选项卡顶部的图标。</span><span>在某些浏览器中，它还可能出现在 URL 旁边。</span></span></p>
<p><span><span>它本质上代表了您的网站，因此根据您的需要设置或更改网站图标非常重要。</span><span>一些网络服务和搜索引擎也可能使用该图标。</span><span>默认情况下，Magento 有很多功能可供您使用。</span><span>这个简单的教程将帮助您如何自行更改网站图标。</span><span>Favicon 图标的大小应为 12 x 12 或 32 x 32。</span><span>它应该是 .ico 格式。</span></span></p>
<p><span>按照下面描述的步骤更改 Magento 2 商店的图标。</span></p>
<ol>
<li><span>登录到您的管理面板</span></li>
<li><span><span>选择菜单Content&nbsp;</span><span>&rarr;</span><span>&nbsp;Configuration&nbsp;</span><span>&rarr;</span><span>&nbsp;Select Your Theme&nbsp;</span><span>&rarr;</span><span>&nbsp;Edit<br /><img src="https://www.360magento.com/media/wysiwyg/change_fevicon_in_magento_2.png" /><br /></span></span></li>
<li><span><span><span>找到 HTML Head 部分<br /><img src="https://www.360magento.com/media/wysiwyg/upload_fevicon_in_magento_2.png" /><br /></span></span></span></li>
<li>您将看到一个上传图标的选项，点击上传并在此处上传您的图标。</li>
<li><span>保存配置</span></li>
</ol>]]></description>
      <pubDate>Thu, 02 Nov 2023 07:45:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中按产品 ID 和 SKU 加载产品？]]></title>
      <link>https://www.360magento.com/blog/load-products-by-id-and-sku-in-magento/</link>
      <description><![CDATA[<p><span>如何借助 Magento 推荐的一些简单代码从产品 ID 和 SKU 加载产品。</span></p>
<p><span>让我们首先看看如何从产品 ID 加载产品。</span></p>
<p><span>方法 &ndash; 1：</span><span>&nbsp;Magento 不推荐使用这种简短的方法，因此我们也不使用。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321b9227639086604729" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227639086604729-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227639086604729-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227639086604729-3">3</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227639086604729-1"><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227639086604729-2"><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Framework</span><span class="crayon-sy">\</span><span class="crayon-v">App</span><span class="crayon-sy">\</span><span class="crayon-v">ObjectManager</span><span class="crayon-o">::</span><span class="crayon-e">getInstance</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227639086604729-3"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-s">'Magento\Catalog\Api\ProductRepositoryInterface'</span><span class="crayon-sy">)</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getById</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>方法 - 2：</span><span>当您需要产品信息时，Magento 强烈推荐使用此方法。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321b9227650167612899" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-16">16</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-18">18</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227650167612899-19">19</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-1"><span class="crayon-o">&lt;</span><span class="crayon-sy">?</span><span class="crayon-e">php</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-2"><span class="crayon-t">namespace</span><span class="crayon-h"> </span><span class="crayon-v">Vendor</span><span class="crayon-sy">\</span><span class="crayon-v">Extension</span><span class="crayon-sy">\</span><span class="crayon-v">Block</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-3">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-4"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Product</span><span class="crayon-h"> </span><span class="crayon-r">extends</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-e">Magento</span><span class="crayon-sy">\</span><span class="crayon-e">Framework</span><span class="crayon-sy">\</span><span class="crayon-e">View</span><span class="crayon-sy">\</span><span class="crayon-e">Element</span><span class="crayon-sy">\</span><span class="crayon-e">Template</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-5"><span class="crayon-sy">{</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-6"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">protected</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span><span class="crayon-h">&nbsp;&nbsp;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-7">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-8"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">__construct</span><span class="crayon-sy">(</span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Catalog</span><span class="crayon-sy">\</span><span class="crayon-v">Api</span><span class="crayon-sy">\</span><span class="crayon-i">ProductRepositoryInterface</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-9"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-10"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-11">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-12"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">getProductDataUsingId</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getById</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-14"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-15"><span class="crayon-sy">}</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-16">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-17"><span class="crayon-e">PHTML </span><span class="crayon-e">file </span><span class="crayon-v">code</span><span class="crayon-sy">,</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227650167612899-18"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">block</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getProductDataUsingId</span><span class="crayon-sy">(</span><span class="crayon-cn">32</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227650167612899-19"><span class="crayon-i">echo</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getName</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>现在，我们来看看如何按产品SKU加载产品。</span></p>
<p><span>方法 &ndash; 1：</span><span>&nbsp;Magento 不推荐使用这种简短的方法，因此我们也不使用。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321b9227652368748903" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227652368748903-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227652368748903-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227652368748903-3">3</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227652368748903-1"><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">"productsku"</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227652368748903-2"><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Framework</span><span class="crayon-sy">\</span><span class="crayon-v">App</span><span class="crayon-sy">\</span><span class="crayon-v">ObjectManager</span><span class="crayon-o">::</span><span class="crayon-e">getInstance</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227652368748903-3"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-s">'Magento\Catalog\Api\ProductRepositoryInterface'</span><span class="crayon-sy">)</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>方法 - 2：</span><span>当您需要产品信息时，Magento 强烈推荐使用此方法。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321b9227654818005108" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-16">16</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-18">18</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321b9227654818005108-20">20</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-1"><span class="crayon-o">&lt;</span><span class="crayon-sy">?</span><span class="crayon-e">php </span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-2"><span class="crayon-t">namespace</span><span class="crayon-h"> </span><span class="crayon-v">Vendor</span><span class="crayon-sy">\</span><span class="crayon-v">Extension</span><span class="crayon-sy">\</span><span class="crayon-v">Block</span><span class="crayon-sy">;</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-3">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-4"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Product</span><span class="crayon-h"> </span><span class="crayon-r">extends</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-e">Magento</span><span class="crayon-sy">\</span><span class="crayon-e">Framework</span><span class="crayon-sy">\</span><span class="crayon-e">View</span><span class="crayon-sy">\</span><span class="crayon-e">Element</span><span class="crayon-sy">\</span><span class="crayon-e">Template</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-5"><span class="crayon-sy">{</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-6"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">protected</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-7">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-8"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">__construct</span><span class="crayon-sy">(</span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Catalog</span><span class="crayon-sy">\</span><span class="crayon-v">Api</span><span class="crayon-sy">\</span><span class="crayon-i">ProductRepositoryInterface</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-9"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-10"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-11">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-12"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">getProductDataUsingSku</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-14"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-15"><span class="crayon-sy">}</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-16">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-17">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-18"><span class="crayon-e">PHTML </span><span class="crayon-e">file </span><span class="crayon-v">code</span><span class="crayon-sy">,</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321b9227654818005108-19"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">block</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getProductDataUsingSku</span><span class="crayon-sy">(</span>&ldquo;<span class="crayon-i">productsku</span>&rdquo;<span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321b9227654818005108-20"><span class="crayon-i">echo</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getName</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span><span>所以，现在就这样了。</span><span>使用这些代码，您将能够按 ID 或 SKU 加载产品信息。</span><span><br /></span></span></p>]]></description>
      <pubDate>Wed, 01 Nov 2023 07:44:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何删除 Magento 2 中不必要的客户帐户链接]]></title>
      <link>https://www.360magento.com/blog/remove-customer-account-navigation-links-magento-2/</link>
      <description><![CDATA[<h2><span id="How_to_remove_unnecessary_customer_account_links_in_Magento_2">如何删除 Magento 2 中不必要的客户帐户链接</span></h2>
<p>Magento 默认情况下会在客户帐户页面上显示大量客户帐户链接列表。如果您的业务与其他业务不同，并且不支持新闻通讯订阅，那么在客户帐户页面显示的链接列表中就没有必要。而且很多时候需要自定义所有默认链接，因为对于客户帐户页面上显示的所有链接没有具体要求。有一些要求可以删除一些对客户来说不必要的链接。</p>
<p><span>在下面的客户帐户屏幕上显示 Magento 2 默认提供的链接列表：&nbsp;</span></p>
<ul>
<li><span>My Orders</span></li>
<li><span>My Downloadable Products</span></li>
<li><span>Account Dashboard</span></li>
<li><span>Newsletter Subscriptions</span></li>
<li><span>Stored Payment Methods</span></li>
<li><span>Address Book</span></li>
<li><span>Account Information</span></li>
<li><span>Billing Agreements</span></li>
<li><span>My Wish List</span></li>
<li><span>My Product Reviews<br /><br /></span></li>
</ul>
<h2><span id="Steps_to_How_to_remove_navigational_links">如何删除导航链接的步骤</span></h2>
<p><span>第 1 步：首先，创建自定义扩展或主题并覆盖客户布局文件</span></p>
<p><span>创建扩展并覆盖布局 XML 文件</span></p>
<p><span><span>app/design/frontend/</span>[命名空间]/[主题]/Magento_Customer/layout/customer_account.xml</span></p>
<p><span>第 2 步：使用标签从我的帐户中删除任何额外的链接。</span></p>
<p>&nbsp; &nbsp;&lt;!-- Remove unwanted account navigation links --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Put this file in: app/design/frontend/[Namespace]/[Theme]/Magento_Customer/layout/customer_account.xml --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Store credit --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-customer-balance-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Downloadable product link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-downloadable-products-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Subscription link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-newsletter-subscriptions-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Billing agreement link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-billing-agreements-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Product review link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-product-reviews-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- My credit card link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-my-credit-cards-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Account link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-account-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Account edit link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-account-edit-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Address link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-address-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Orders link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-orders-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Wish list link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-wish-list-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Gift card link --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-gift-card-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Order by SKU --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-checkout-sku-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Gift registry --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-giftregistry-link" remove="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;!-- Reward points --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="customer-account-navigation-reward-link" remove="true"/&gt;</p>
<p></p>
<p><span>第 3 步：现在，只需清除缓存并验证&ldquo;我的帐户&rdquo;页面上的链接将被删除。</span></p>]]></description>
      <pubDate>Tue, 31 Oct 2023 07:45:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中安装主题]]></title>
      <link>https://www.360magento.com/blog/install-theme-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Install_Theme_In_Magento_2">在 Magento 2 中配置安装主题的步骤：</span></h2>
<h3><span id="Download_the_Theme">下载主题</span></h3>
<p><span><span><span>下载您选择的 Magento 2 主题，该主题将以压缩形式提供。</span><span>下载主题后，请解压下载的主题，您将得到两个文件夹，即 App 和 Pub。</span></span></span></p>
<h3><span id="Upload_the_Theme">上传主题</span></h3>
<p><span>完成上述步骤后，只需导航到您的商店并将 App 和 Pub 文件夹上传到 Magento 2 商店的根目录。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/image_2020_04_14T13_13_05_540Z.png" /></span></p>
<p><span><span><span></span></span></span></p>
<p><span><span><span></span></span></span></p>
<h3><span id="Run_Commands">运行命令</span></h3>
<p><span>现在，使用 SSH 连接您的 Magento 2 商店并导航到 Magento 2 商店的根目录。</span></p>
<p><span>然后运行以下给出的升级命令：</span></p>
<p><span>php bin/magento setup:upgrade</span></p>
<p><span>执行上述步骤后，运行以下给出的命令来部署静态内容：</span></p>
<p><span><span>php bin/magento setup:static-content:deploy</span><br /></span></p>
<h3><span id="Apply_the_Theme">应用主题</span></h3>
<p><span>现在，转到管理面板并导航到<span>Content &rarr; Configuration&nbsp;</span>，如下面的屏幕截图所示。</span></p>
<p><span>现在单击编辑按钮，如下面的屏幕截图所示</span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/Apply-theme-to-magento-2.png" /></span></span></span></p>
<p><span><span><span><span>从下拉列表中选择您上传的主题，然后单击保存配置，如下面的屏幕截图所示。</span></span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/click-to-edit-for-install-theme-in-magento-2.png" />&nbsp;</span></span></span></p>
<p><span><span><span><span>从下拉列表中选择您上传的主题，然后单击保存配置，如下面的屏幕截图所示。</span></span></span></span></p>
<p></p>
<p><img src="https://www.360magento.com/media/wysiwyg/save-configuration-to-install-theme-in-magento-2.png" /></p>
<p><span>执行完上述简单步骤后，您可以访问应用主题的网站。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Mon, 30 Oct 2023 07:38:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何解决Magento 2 索引过程中的问题]]></title>
      <link>https://www.360magento.com/blog/unlock-reindex-process-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Unlock_Reindex_Process_in_Magento_2">在 Magento 2 中重新索引的步骤：</span></h2>
<h3><span id="Step_1_Reindex_when_Index_is_Locked">第 1 步：索引锁定时重新索引</span></h3>
<p><span>运行以下命令来重新索引：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed95a753269457" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed95a753269457-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed95a753269457-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">reindex</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>您会发现库存流程被跳过，如下所示</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed961780411970" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed961780411970-10">10</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-1"><span class="crayon-e">Design </span><span class="crayon-e">Config </span><span class="crayon-e">Grid </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">04</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-2"><span class="crayon-e">Customer </span><span class="crayon-e">Grid </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">06</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-3"><span class="crayon-e">Category </span><span class="crayon-e">Products </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">02</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-4"><span class="crayon-e">Product </span><span class="crayon-e">Categories </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-5"><span class="crayon-e">Product </span><span class="crayon-e">Price </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">01</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-6"><span class="crayon-e">Product </span><span class="crayon-e">EAV </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-7"><span class="crayon-e">Catalog </span><span class="crayon-e">Search </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">04</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-8"><span class="crayon-e">Stock </span><span class="crayon-e">index </span><span class="crayon-st">is</span><span class="crayon-h"> </span><span class="crayon-e">locked </span><span class="crayon-e">by </span><span class="crayon-e">another </span><span class="crayon-e">reindex </span><span class="crayon-v">process</span><span class="crayon-sy">.</span><span class="crayon-h"> </span><span class="crayon-v">Skipping</span><span class="crayon-sy">.</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-9"><span class="crayon-e">Catalog </span><span class="crayon-e">Rule </span><span class="crayon-e">Product </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed961780411970-10"><span class="crayon-e">Catalog </span><span class="crayon-e">Product </span><span class="crayon-e">Rule </span><span class="crayon-e">index </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-e">rebuilt </span><span class="crayon-e">successfully </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span><span class="crayon-o">:</span><span class="crayon-cn">00</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p></p>
<h3><span id="Step_2_Get_Index_Types_Info">第 2 步：获取索引类型信息</span></h3>
<p><span>首先，您必须查看 Magento 2 的索引类型列表，然后运行以下命令：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed963004878639" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed963004878639-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed963004878639-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">info</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行该命令后，您将得到以下输出：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed964735073337" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed964735073337-10">10</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-1"><span class="crayon-e">design_config_grid </span><span class="crayon-e">Design </span><span class="crayon-e">Config </span><span class="crayon-e">Grid</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-2"><span class="crayon-e">customer_grid </span><span class="crayon-e">Customer </span><span class="crayon-e">Grid</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-3"><span class="crayon-e">catalog_category_product </span><span class="crayon-e">Category </span><span class="crayon-e">Products</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-4"><span class="crayon-e">catalog_product_category </span><span class="crayon-e">Product </span><span class="crayon-e">Categories</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-5"><span class="crayon-e">catalog_product_price </span><span class="crayon-e">Product </span><span class="crayon-e">Price</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-6"><span class="crayon-e">catalog_product_attribute </span><span class="crayon-e">Product </span><span class="crayon-e">EAV</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-7"><span class="crayon-e">catalogsearch_fulltext </span><span class="crayon-e">Catalog </span><span class="crayon-e">Search</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-8"><span class="crayon-e">cataloginventory_stock </span><span class="crayon-e">Stock</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-9"><span class="crayon-e">catalogrule_rule </span><span class="crayon-e">Catalog </span><span class="crayon-e">Rule </span><span class="crayon-e">Product</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed964735073337-10"><span class="crayon-e">catalogrule_product </span><span class="crayon-e">Catalog </span><span class="crayon-e">Product </span><span class="crayon-v">Rule</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p></p>
<h3><span id="Step_3_Check_Index_Types_Status">步骤 3：检查索引类型状态</span></h3>
<p><span>现在通过运行下面给出的命令检查所有索引类型的状态：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed966830880262" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed966830880262-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed966830880262-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">status</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行该命令后，您将得到以下输出：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed967535497546" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed967535497546-15">15</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-1"><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-2"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">ID</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Title</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Status</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Update </span><span class="crayon-v">On</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Schedule </span><span class="crayon-v">Status</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Schedule </span><span class="crayon-v">Updated</span><span class="crayon-h"> </span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-3"><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-4"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogrule_product</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-e">Product </span><span class="crayon-v">Rule</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-5"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogrule_rule</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-e">Rule </span><span class="crayon-v">Product</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-6"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogsearch_fulltext</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-v">Search</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-7"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_category_product</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Category </span><span class="crayon-v">Products</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-8"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">customer_grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Customer </span><span class="crayon-v">Grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-9"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">design_config_grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Design </span><span class="crayon-e">Config </span><span class="crayon-v">Grid</span><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-10"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">inventory</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Inventory</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-11"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_category</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">Categories</span><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-12"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_attribute</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">EAV</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-13"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_price</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">Price</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-14"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">cataloginventory_stock</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Stock</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-v">Processing</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed967535497546-15"><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p></p>
<h3><span id="Step_4_Reset_Index_Types"><span><span><span>步骤 4：</span></span></span>&nbsp;<span><span><span>重置索引类型</span></span></span></span></h3>
<p><span>为了解决这个问题，您必须重置在给定命令下运行的锁定索引类型：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed969938848984" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed969938848984-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed969938848984-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">reset</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>要重置多个索引类型，请运行以下命令：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed96a275154305" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96a275154305-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96a275154305-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-e">reset </span><span class="crayon-e">IndexType1 </span><span class="crayon-e">IndexType2 </span><span class="crayon-v">IndexType3</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>这里只有一种索引类型被锁定，因此我们将运行以下给出的命令：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed96b028755039" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96b028755039-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96b028755039-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-e">reset </span><span class="crayon-v">cataloginventory_stock</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行上述命令后的输出将类似于：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed96c955371675" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96c955371675-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96c955371675-1"><span class="crayon-e">Stock </span><span class="crayon-e">indexer </span><span class="crayon-e">has </span><span class="crayon-e">been </span><span class="crayon-v">invalidated</span><span class="crayon-sy">.</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p></p>
<h3><span id="Step_5_Reindex_Index_Types">第 5 步：重新索引索引类型&nbsp;</span></h3>
<p><span>您必须再次检查索引器状态，因此再次运行以下命令：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed96e485479010" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96e485479010-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96e485479010-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">status</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行上述命令后的输出将是：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321f96ed96f850343336" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-65321f96ed96f850343336-15">15</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-1"><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-2"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">ID</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Title</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Status</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Update </span><span class="crayon-v">On</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Schedule </span><span class="crayon-v">Status</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Schedule </span><span class="crayon-v">Updated</span><span class="crayon-h"> </span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-3"><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">--</span><span class="crayon-o">+</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-4"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogrule_product</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-e">Product </span><span class="crayon-v">Rule</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-5"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogrule_rule</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-e">Rule </span><span class="crayon-v">Product</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-6"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalogsearch_fulltext</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Catalog </span><span class="crayon-v">Search</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-7"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_category_product</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Category </span><span class="crayon-v">Products</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-8"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">customer_grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Customer </span><span class="crayon-v">Grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-9"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">design_config_grid</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Design </span><span class="crayon-e">Config </span><span class="crayon-v">Grid</span><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-10"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">inventory</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Inventory</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-11"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_category</span><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">Categories</span><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-12"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_attribute</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">EAV</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-13"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">catalog_product_price</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Product </span><span class="crayon-v">Price</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Ready</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">|</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321f96ed96f850343336-14"><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">cataloginventory_stock</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Stock</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-e">Reindex </span><span class="crayon-v">required</span><span class="crayon-h"> </span><span class="crayon-o">|</span><span class="crayon-h"> </span><span class="crayon-v">Save</span><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">|</span><span cla]]></description>
      <pubDate>Sun, 29 Oct 2023 07:32:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中 SEO 设置的最佳配置指南[2023]]]></title>
      <link>https://www.360magento.com/blog/seo-configuration-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure">配置步骤：</span></h2>
<p><span>设置 SEO 的Homepage&nbsp; 主页标题</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Setup-Homepage-title-for-SEO.png" /></span></p>
<p></p>
<h2><span id="Metadata_SEO_optimization">元数据SEO优化：</span></h2>
<p><span>类别设置的元数据</span></p>
<p><span><span><span>导航到<span>Catalog&gt;Categories&gt;Search Engine Optimization.&nbsp;</span>。在</span><span>这里，您可以根据您的要求轻松添加所有元标题、元描述和元关键字。</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/Metadata-SEO-optimization.png" />&nbsp;</span></span></span></p>
<p><span>元标题</span></p>
<p><span><span><span>元标题显示为产品页面的标​​题。</span><span>元标题的字符数限制为 70 个，因此您必须明智地创建它，并利用最丰富的关键字。</span></span></span></p>
<p><span>元描述</span></p>
<p><span><span><span>元描述的默认限制为 255 个字符，所有首选数字都在 150-160 个字符之间。</span><span>点击的机会更多，您可以通过在元描述中添加中等数量的字符来吸引用户</span></span></span></p>
<p><span>元关键词</span></p>
<p><span><span><span>基本上，元关键字没有限制，但您应该确保不要完全填写关键字。</span><span>人们应该添加与其在商店中提供的产品和服务相关的关键字。</span></span></span></p>
<p><span>产品设置的元数据</span></p>
<p><span>如果存在这种情况，您想要为产品的元数据设置模板，请导航到<span>Stores&gt;Configuration&gt;Catalog&gt;Catalog&gt;Product Fields Auto-Generation&nbsp;</span>，然后轻松为在线商店中的所有产品进行设置</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/pasted-image-0-5.png" /></span></p>
<p><span>设置Robots.txt</span></p>
<p><span><span><span>Magento 2 所做的最佳和高级改进之一是编辑 robots.txt 文件的功能，导航到<span>Stores&gt;Configuration&gt;Catalog&gt;Design&gt; Search Engine Robots.</span>。</span><span>有时，许多 Magento 2 店主都会忽略这一点，并且许多人无法以正确的方式做到这一点。</span><span>如果您的页面不需要索引，请将设置设置为&ldquo;noindex，nofollow&rdquo;，默认设置将为&ldquo;index，follow&rdquo;。</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/pasted-image-0-3.png" /></span></span></span></p>
<p></p>
<p><span>SEO XML 站点地图生成</span></p>
<p><span><span><span>SEO 中非常重要的任务是站点地图，因为站点地图可以帮助您在搜索引擎索引期间将您的网站放置在 SERP 中。</span><span>为此，导航至<span>Store &gt; Configuration &gt; Catalog &gt; XML Sitemap</span>。</span><span>如果您想直接将站点地图发送到 robots.txt，则只需启用&ldquo;启用提交到 robots.txt&rdquo;即可。</span></span></span></p>
<p><span>SEO 图像的 Alt 标签</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/pasted-image-0-1.png" /></span></p>
<p></p>
<p><span>SEO 图像的 Alt 标签</span></p>
<p><span>当涉及到 SEO 时，所有图像的 Alt 标签非常重要，因此导航至<span>Stores&gt;Configuration&gt;General&gt; Design&gt;HTML Head&gt;Header.</span></span></p>]]></description>
      <pubDate>Sat, 28 Oct 2023 07:19:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[从 Magento 2 中的 URL 中删除 Index.php]]></title>
      <link>https://www.360magento.com/blog/remove-index--url-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_remove_indexphp_from_your_URL">从 URL 中删除 index.php 的步骤。</span></h2>
<p><span>第 1 步：</span><span>导航到 Magento 2 站点的管理面板。</span></p>
<p><span>第 2 步：</span><span>现在，转到&nbsp;<span>Stores &gt; Configuration &gt; General &gt; Web</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/remove-index.php-from-your-URL.png" /></span></span></p>
<p></p>
<p><span>第 3 步：</span><span>之后您需要探索搜索引擎优化部分。</span></p>
<p><span>第 4 步：</span><span>现在您需要在&ldquo;使用 Web 服务器重写&rdquo;中设置&ldquo;YES&rdquo;。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Set-YES-in-Use-Web-Server-Rewrites.png" /></span></p>
<p><span>第 5 步：</span><span>现在您需要探索&ldquo;基本 URL（安全）&rdquo;选项。</span></p>
<p><span>第 6 步：</span><span>将&ldquo;在店面中使用安全 URL&rdquo;设置为&ldquo;YES&rdquo;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Turn-the-Use-Secure-URLs-on-Storefront.png" /></span></p>
<p></p>
<p><span>第 7 步：</span><span>完成上述步骤后保存配置。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Fri, 27 Oct 2023 07:14:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中所有页面的前端添加 JS 文件]]></title>
      <link>https://www.360magento.com/blog/add-js-file-frontend-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_JS_File_in_Frontend_for_All_Pages_in_Magento_2">在 Magento 2 中所有页面的前端添加 JS 文件的步骤：</span></h2>
<p><span><span><span><span>步骤1：</span></span></span><span><span>首先你需要在app\code\[Vendor]\[Module]\view\frontend\layout\default.xml创建default.xml</span></span></span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-1"><span class="crayon-ta">&lt;?</span><span class="crayon-e">xml </span><span class="crayon-i">version</span><span class="crayon-o">=</span><span class="crayon-s">"1.0"</span><span class="crayon-ta">?&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-2">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-3"><span class="crayon-o">&lt;</span><span class="crayon-e">page </span><span class="crayon-v">xmlns</span><span class="crayon-o">:</span><span class="crayon-v">xsi</span><span class="crayon-o">=</span><span class="crayon-s">"http://www.w3.org/2001/XMLSchema-instance"</span><span class="crayon-h"> </span><span class="crayon-v">xsi</span><span class="crayon-o">:</span><span class="crayon-v">noNamespaceSchemaLocation</span><span class="crayon-o">=</span><span class="crayon-s">"urn:magento:framework:View/Layout/etc/page_configuration.xsd"</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-4">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-5">&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-o">&lt;</span><span class="crayon-v">head</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-6">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-7">&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-o">&lt;</span><span class="crayon-e">link </span><span class="crayon-v">src</span><span class="crayon-o">=</span><span class="crayon-s">"[Vendor]_[Module]::js/js_fileName.js"</span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-8">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-9">&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">head</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-10">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-65321bcaa7f2c413984403-11"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">page</span><span class="crayon-o">&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span><span><span><span>步骤2：</span></span></span><span><span>现在，在 app\code\[Vendor]\[Module]\view\frontend\web\js\js_fileName.js 创建 JS 文件</span></span></span></p>
<p><span><span><span><span>步骤 3：</span></span></span><span><span>执行 setup Upgrade 命令和 setup:static-content:deploy 命令，刷新页面即可。</span></span></span></p>
<div id="gtx-trans" style="position: absolute; left: 602px; top: 331.875px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 26 Oct 2023 07:07:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取商店信息（商店 ID、代码、名称）]]></title>
      <link>https://www.360magento.com/blog/how-get-store-information-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong><span style="font-size: 1.5em;">在 Magento 2 中获取商店信息概述</span></strong></p>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：获取<code>phtml</code>文件中的商店信息</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">第 1 步：声明<code>Example_HelloWorld</code></h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类，然后可能在模块的块类的构造函数中<code>Example_HelloWorld</code>注入 的对象。<code>StoreManagerInterface</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_storeManager;    
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Store\Model\StoreManagerInterface $storeManager,        
        array $data = []
    )
    {        
        $this-&gt;_storeManager = $storeManager;        
        parent::__construct($context, $data);
    }
    
    /**
     * Get store identifier
     *
     * @return  int
     */
    public function getStoreId()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getId();
    }
    
    /**
     * Get website identifier
     *
     * @return string|int|null
     */
    public function getWebsiteId()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getWebsiteId();
    }
    
    /**
     * Get Store code
     *
     * @return string
     */
    public function getStoreCode()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getCode();
    }
    
    /**
     * Get Store name
     *
     * @return string
     */
    public function getStoreName()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getName();
    }
    
    /**
     * Get current url for store
     *
     * @param bool|string $fromStore Include/Exclude from_store parameter from URL
     * @return string     
     */
    public function getStoreUrl($fromStore = true)
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getCurrentUrl($fromStore);
    }
    
    /**
     * Check if store is active
     *
     * @return boolean
     */
    public function isStoreActive()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;isActive();
    }
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-get-store-information-in-phtml-file">步骤2：获取<code>.phtml</code>文件中的商店信息</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在文件中使用以下脚本<code>.phtml</code>并打印商店信息。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>echo $block-&gt;getStoreId() . '&lt;br /&gt;';
echo $block-&gt;getStoreCode() . '&lt;br /&gt;';
echo $block-&gt;getWebsiteId() . '&lt;br /&gt;';
echo $block-&gt;getStoreName() . '&lt;br /&gt;';
echo $block-&gt;getStoreUrl() . '&lt;br /&gt;';
echo $block-&gt;isStoreActive() . '&lt;br /&gt;';</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -51px; top: -13.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 25 Oct 2023 07:20:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取相关、追加销售和交叉销售产品]]></title>
      <link>https://www.360magento.com/blog/how-get-related-upsell-crosssell-products-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>Magento 2 中的相关产品、追加销售产品和交叉销售产品</strong>是可用于营销活动以促进在线发展的产品类型。对于观看产品来说，相关产品是具有相似功能的产品，追加销售产品是比该产品更高版本的产品。交叉销售产品怎么样？它们是完美使用的配套产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-of-magento-2-related-up-sell-cross-sell-products">Magento 2 相关、追加销售、交叉销售产品概述</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><strong>相关产品</strong>是除了客户正在查看的商品之外还向客户展示的产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>追加销售产品</strong>是指价格或质量高于他们正在查看的商品的产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>交叉销售产品</strong>是客户正在关注的商品的相关或互补产品，目的是增加现有产品的价值。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>每种类型的产品都</strong>可以放置在 Magento 2 商店中的不同位置。它们通常用于有效促进销售。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在让我们详细了解如何在 Magento 2 中获取这些产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在 Magento 2 中获取相关产品、追加销售和交叉销售产品的 4 个步骤：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：获取相关产品</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：获取追加销售产品</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 4 步：获取交叉销售产品</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld-block">步骤一：在<code>Mageplaza_HelloWorld</code>区块中声明</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类，然后可能在模块的块类的构造函数中<code>Example_HelloWorld</code>注入 的对象。<code>\Magento\Framework\Registry</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_registry;
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Framework\Registry $registry,
        array $data = []
    )
    {        
        $this-&gt;_registry = $registry;
        parent::__construct($context, $data);
    }
    
    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }
    
    public function getCurrentProduct()
    {        
        return $this-&gt;_registry-&gt;registry('current_product');
    }    
    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-get-related-products">第二步：获取相关产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在第2步中，您将申请<code>Object Manager</code>定制班级<code>HelloWorld</code>。通过这种方式，允许调用当前产品信息，则可以一一获取当前产品的相关产品、追加销售产品和交叉销售产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$myBlock = \Magento\Framework\App\ObjectManager::getInstance()-&gt;get('Example\HelloWorld\Block\HelloWorld');
 
$currentProduct = $myBlock-&gt;getCurrentProduct();
 
if ($currentProduct = $myBlock-&gt;getCurrentProduct()) {
    $relatedProducts = $currentProduct-&gt;getRelatedProducts();
    
    if (!empty($relatedProducts)) {
        echo 'Related Products &lt;br /&gt;';    
        foreach ($relatedProducts as $relatedProduct) {
            echo $relatedProduct-&gt;getSku() . '&lt;br /&gt;';  
            echo $relatedProduct-&gt;getName(); //get name
            echo $relatedProduct-&gt;getPrice(); //get price
            echo $relatedProduct-&gt;getData(); //Show all attributes      
        }
    }    
   
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-get-upsell-products">第 3 步：获取追加销售产品</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$myBlock = \Magento\Framework\App\ObjectManager::getInstance()-&gt;get('Example\HelloWorld\Block\HelloWorld');
$currentProduct = $myBlock-&gt;getCurrentProduct();
 
if ($currentProduct = $myBlock-&gt;getCurrentProduct()) {
    $upSellProducts = $currentProduct-&gt;getUpSellProducts();

    if (!empty($upSellProducts)) {
        echo '&lt;h3&gt;UpSell Products&lt;/h3&gt;';
        foreach ($upSellProducts as $upSellProduct) {
            echo $upSellProduct-&gt;getSku() . '&lt;br /&gt;';        
        }
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-4-get-crosssell-products">第 4 步：获取交叉销售产品</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$myBlock = \Magento\Framework\App\ObjectManager::getInstance()-&gt;get('Example\HelloWorld\Block\HelloWorld');
$currentProduct = $myBlock-&gt;getCurrentProduct();
 
if ($currentProduct = $myBlock-&gt;getCurrentProduct()) {
    $crossSellProducts = $currentProduct-&gt;getCrossSellProducts();

    if (!empty($crossSellProduct)) {
        echo 'CrossSell Products &lt;br /&gt;';
        foreach ($crossSellProducts as $crossSellProduct) {
            echo $crossSellProduct-&gt;getSku() . '&lt;br /&gt;';        
        }
    }
}
</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Tue, 24 Oct 2023 07:13:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中获取产品库存信息？]]></title>
      <link>https://www.360magento.com/blog/how-get-product-stock-information-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>获取产品库存信息</strong>意味着您可以获取一些详细信息，例如最小数量（min_qty），最小销售数量（min_sale_qty），最大销售数量（max_sale_qty），检查产品是否有库存（is_in_stock），缺货等在Magento 2中，在线商店需要获取库存变化数据进行定期跟踪，这可以帮助他们做出未来的业务决策。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="2-steps-to-get-product-stock-information-in-magento-2">在 Magento 2 中获取产品库存信息的 2 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明获取产品库存信息的命令</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：在模板文件中加载产品 id 和 sku</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">步骤1：声明获取产品库存信息的命令</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>首先，您将使用 module 的块类<code>Example_HelloWorld</code>，然后可能将类的对象注入<code>\Magento\CatalogInventory\Model\Stock\StockItemRepository</code>到模块的块类的构造函数中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{    
    protected $_stockItemRepository;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository,
        array $data = []
    )
    {
        $this-&gt;_stockItemRepository = $stockItemRepository;
        parent::__construct($context, $data);
    }
    
    public function getStockItem($productId)
    {
        return $this-&gt;_stockItemRepository-&gt;get($productId);
    }
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">第 2 步：在模板文件中加载产品 id 和 sku</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>接下来，请使用以下脚本通过模板文件中的id 和 sku 加载产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$id = 123;
$_productStock = $block-&gt;getStockItem($id);
//print_r($_productStock-&gt;getData()); 
echo $_productStock-&gt;getQty(); echo '&lt;br /&gt;';
echo $_productStock-&gt;getMinQty(); echo '&lt;br /&gt;';
echo $_productStock-&gt;getMinSaleQty(); echo '&lt;br /&gt;';
echo $_productStock-&gt;getMaxSaleQty(); echo '&lt;br /&gt;';
echo $_productStock-&gt;getIsInStock(); echo '&lt;br /&gt;';</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Mon, 23 Oct 2023 06:59:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取产品集合]]></title>
      <link>https://www.360magento.com/blog/how-get-product-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-of-getting-product-collection-in-magento-2">在 Magento 2 中获取产品集合</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>虽然在 Magento 2 中获取特定产品集合有不同的操作，但它们是加载、过滤（例如按属性）和排序。在本文中，我将仅介绍帮助您开始使用产品集合的基本步骤。以下是两个初始步骤：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>步骤一：在<code>Example_HelloWorld</code>区块中声明</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 2：显示<code>phtml</code>文件中的产品集合</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld-block">步骤一：在<code>Example_HelloWorld</code>区块中声明</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类，然后可能在模块的块类的构造函数中<code>Example_HelloWorld</code>注入 的对象。<code>\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{    
    protected $_productCollectionFactory;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,        
        array $data = []
    )
    {    
        $this-&gt;_productCollectionFactory = $productCollectionFactory;    
        parent::__construct($context, $data);
    }
    
    public function getProductCollection()
    {
        $collection = $this-&gt;_productCollectionFactory-&gt;create();
        $collection-&gt;addAttributeToSelect('*');
        $collection-&gt;setPageSize(3); // fetching only 3 products
        return $collection;
    }
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>注：您可以请求产品集合的数量，数量是有限的或无限的。在实现该功能时，您需要根据需求扩展代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2-display-product-collection-in-phtml-file">步骤 2：显示<code>phtml</code>文件中的产品集合</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>phtml</code>使用以下代码打印文件中的产品集合：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$productCollection = $block-&gt;getProductCollection();
foreach ($productCollection as $product) {
    print_r($product-&gt;getData());     
    echo "&lt;br&gt;";
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>现在，您可以获取请求的集合中每个产品的数据。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -60px; top: -10.5625px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 22 Oct 2023 07:54:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取徽标 url、图像 URL、替代文本、徽标大小]]></title>
      <link>https://www.360magento.com/blog/how-get-logo-url-alt-text-logo-size-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>徽标 URL</strong>、<strong>ALT 文本</strong>、<strong>图像 URL</strong>和<strong>徽标尺寸</strong>（包括高度和宽度）是徽标应用到您的商店时您完全获得的基本信息。具体来说，徽标 URL 是只要有人单击徽标就会显示该页面的直接链接。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>这些元素在提高您的品牌形象和确保 SEO 排名中获得良好分数方面发挥着重要作用。这就是为什么您需要完美的徽标尺寸、相关的 ALT 文本和优化的徽标 URL。在此之前，您需要获取所有现有的标志信息，以便以后轻松进行比较、优化、更新。<a href="https://www.mageplaza.com/kb/magento-2-demo.html"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>主要内容</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 2：在模板 (.phtml) 文件中声明函数</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">第 1 步：声明<code>Example_HelloWorld</code></h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类<code>Example_HelloWorld</code>，然后可能将类的对象注入<code>Logo</code>到模块的块类的构造函数中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_logo;    
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Theme\Block\Html\Header\Logo $logo,
        array $data = []
    )
    {        
        $this-&gt;_logo = $logo;
        parent::__construct($context, $data);
    }
    
    /**
     * Get logo image URL
     *
     * @return string
     */
    public function getLogoSrc()
    {    
        return $this-&gt;_logo-&gt;getLogoSrc();
    }
    
    /**
     * Get logo text
     *
     * @return string
     */
    public function getLogoAlt()
    {    
        return $this-&gt;_logo-&gt;getLogoAlt();
    }
    
    /**
     * Get logo width
     *
     * @return int
     */
    public function getLogoWidth()
    {    
        return $this-&gt;_logo-&gt;getLogoWidth();
    }
    
    /**
     * Get logo height
     *
     * @return int
     */
    public function getLogoHeight()
    {    
        return $this-&gt;_logo-&gt;getLogoHeight();
    }    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以在 中看到更多功能<code>vendor/magento/module-theme/Block/Html/Header/Logo.php</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-declare-function-in-template-phtml-file">步骤 2：在模板 (.phtml) 文件中声明函数</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在模板 (.phtml) 文件中运行以下函数</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>echo $block-&gt;getLogoSrc() . '&lt;br /&gt;';
echo $block-&gt;getLogoAlt() . '&lt;br /&gt;';
echo $block-&gt;getLogoWidth() . '&lt;br /&gt;';
echo $block-&gt;getLogoHeight() . '&lt;br /&gt;';
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以在 中看到更多功能<code>vendor/magento/module-theme/Block/Html/Header/Logo.php</code>。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -58px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 21 Oct 2023 07:46:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取购物车商品、小计、总计、账单和送货地址的数据]]></title>
      <link>https://www.360magento.com/blog/how-get-data-shopping-cart-items-subtotal-grand-total-billing/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 2 平台上运行您的商店时，可以获得<strong>购物车商品、小计、总计、账单和送货地址的数据</strong>。本指南将应用于​​许多与购物车信息相关的功能开发流程，例如共享购物车或保存购物车。因此，在本文中，我们将向您展示如何使用代码获取数据。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-of-retrieving-the-data-of-shopping-cart-items-subtotal-grand-total-billing--shipping-address-in-magento-2">Magento 2 中检索购物车商品、小计、总计、账单和送货地址数据的概述</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您可以获取购物车商品的整体或单独信息，例如小计、总计以及账单和送货地址。这里有四种方法：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在您的购物车中获取所有需要的信息。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取购物车中的商品数量和购物车中的总数量。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取购物车中商品的基本总价和总价。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取选定的帐单和送货地址。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-all-needed-information-in-your-cart">在您的购物车中获取所有需要的信息。</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager-&gt;get('\Magento\Checkout\Model\Cart'); 
 
// get quote items collection
$itemsCollection = $cart-&gt;getQuote()-&gt;getItemsCollection();
 
// get array of all items what can be display directly
$itemsVisible = $cart-&gt;getQuote()-&gt;getAllVisibleItems();
 
// get quote items array
$items = $cart-&gt;getQuote()-&gt;getAllItems();
 
foreach($items as $item) {
    echo 'ID: '.$item-&gt;getProductId().'&lt;br /&gt;';
    echo 'Name: '.$item-&gt;getName().'&lt;br /&gt;';
    echo 'Sku: '.$item-&gt;getSku().'&lt;br /&gt;';
    echo 'Quantity: '.$item-&gt;getQty().'&lt;br /&gt;';
    echo 'Price: '.$item-&gt;getPrice().'&lt;br /&gt;';
    echo "&lt;br /&gt;";            
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-the-number-of-items-in-cart-and-total-quantity-in-cart">获取购物车中的商品数量和购物车中的总数量。</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager-&gt;get('\Magento\Checkout\Model\Cart'); 
 
$totalItems = $cart-&gt;getQuote()-&gt;getItemsCount();
$totalQuantity = $cart-&gt;getQuote()-&gt;getItemsQty();
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-base-total-price-and-grand-total-price-of-items-in-cart">获取购物车中商品的基本总价和总价。</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager-&gt;get('\Magento\Checkout\Model\Cart'); 
 
$subTotal = $cart-&gt;getQuote()-&gt;getSubtotal();
$grandTotal = $cart-&gt;getQuote()-&gt;getGrandTotal();
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-chosen-billing-and-shipping-addresses">获取选定的帐单和送货地址。</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager-&gt;get('\Magento\Checkout\Model\Cart'); 
 
$billingAddress = $cart-&gt;getQuote()-&gt;getBillingAddress();
echo '&lt;pre&gt;'; print_r($billingAddress-&gt;getData()); echo '&lt;/pre&gt;';
 
$shippingAddress = $cart-&gt;getQuote()-&gt;getShippingAddress();
echo '&lt;pre&gt;'; print_r($shippingAddress-&gt;getData()); echo '&lt;/pre&gt;';</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Fri, 20 Oct 2023 07:42:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中将订单电子邮件发送到自定义电子邮件地址]]></title>
      <link>https://www.360magento.com/blog/how-send-order-email-custom-email-address-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在这篇博文中，向您介绍如何使用自定义代码将订单电子邮件发送到Magento 2中的<strong>自定义电子邮件地址。</strong>本主题将通过以下两个步骤涵盖所有必要的操作。<a href="https://www.mageplaza.com/magento-2-extensions/"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="2-steps-to-send-order-email-to-a-custom-email-address-in-magento-2">将订单电子邮件发送到 Magento 2 中的自定义电子邮件地址的 2 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第一步：设置邮件格式</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第二步：设置控制器文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-set-a-form-of-the-email">第一步：设置邮件格式</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>使用输入字段行设置电子邮件的格式如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;form id="send-order-email" action="&lt;?php $block-&gt;getUrl('helloworld/order/sendemail'); ?&gt;"&gt;
    &lt;label&gt;Email Address&lt;/label&gt;
    &lt;input type="text" class="input-text" id="email"&gt;
&lt;/form&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-set-a-controller-file">第2步：设置控制器文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>文件路径：<code>app\code\Example\HelloWorld\Controller\Order\Email</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app\code\<code>Example</code>\HelloWorld\Controller\Order\Email</code>添加基于 class 的文件<code>\Magento\Framework\App\Action\Action</code>。该文件将从上面的表单中执行提交操作，但首先，请插入以下操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>public function execute()
    {
        $email = $this-&gt;getRequest()-&gt;getParam('email');
        $order = $this-&gt;_objectManager-&gt;create('Magento\Sales\Model\Order')-&gt;load(1); // this is entity id
        $order-&gt;setCustomerEmail($email);
        if ($order) {
            try {
                $this-&gt;_objectManager-&gt;create('\Magento\Sales\Model\OrderNotifier')
                    -&gt;notify($order);
                $this-&gt;messageManager-&gt;addSuccess(__('You sent the order email.'));
            } catch (\Magento\Framework\Exception\LocalizedException $e) {
                $this-&gt;messageManager-&gt;addError($e-&gt;getMessage());
            } catch (\Exception $e) {
                $this-&gt;messageManager-&gt;addError(__('We can\'t send the email order right now.'));
                $this-&gt;_objectManager-&gt;create('Magento\Sales\Model\OrderNotifier')-&gt;critical($e);
            }
        }
    }</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Fri, 20 Oct 2023 03:25:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取客户组]]></title>
      <link>https://www.360magento.com/blog/how-get-customer-groups-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>如果您经营的 Magento 2 商店拥有大量产品和庞大的客户群，则必须将客户分组。客户群体帮助您更好地管理客户。您可以通过更相关和个性化的优惠更好地了解和服务他们。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>Magento 2 支持三个默认客户组：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>一般的</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>未登录</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>批发的</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>然而，在 Magento 2 中创建额外的客户群体也很容易、快捷。这通常取决于每个店主的需求。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在这篇文章中，我将为您带来在 Magento 2 中顺利获取客户群的最简单方法。为此，请复制以下代码并将其添加到您的块类中。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-customer-groups-in-magento-2">在 Magento 2 中获取客户组</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>/**
 * Customer Group
 *
 * @var \Magento\Customer\Model\ResourceModel\Group\Collection
 */
protected $_customerGroup;
    
/**
 * @param \Magento\Backend\Block\Template\Context $context
 * @param \Magento\Customer\Model\ResourceModel\Group\Collection $customerGroup
 * @param array $data
 */
public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Customer\Model\ResourceModel\Group\Collection $customerGroup,        
    array $data = []
) {
    $this-&gt;_customerGroup = $customerGroup;        
    parent::__construct($context, $data);
}
/**
 * Get customer groups
 * 
 * @return array
 */ 
public function getCustomerGroups() {
    $customerGroups = $this-&gt;_customerGroup-&gt;toOptionArray();
    array_unshift($customerGroups, array('value'=&gt;'', 'label'=&gt;'Any'));
    return $customerGroups;
}</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -145px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 19 Oct 2023 07:39:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置、取消Session]]></title>
      <link>https://www.360magento.com/blog/how-set-unset-session-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>今天，我们将讨论如何通过运行代码快速设置和取消session。随着Magento 2的定制化开发和定制，有时候获取Session信息是非常有必要的。对于 Magento 2 商店管理员来说，了解session并随时调整它们以在一定时间内获取重要信息是必要的。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="magento-2-session-types">Magento 2 session类型</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>那么 Magento 2 中的session是什么？</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>session是一种在 Magento 2 商店的每个页面上排序和存储变量的方法。它允许您的用户在您的商店中临时存储一些值，例如购物车中的商品、个人信息等。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>当用户在您的商店中注册帐户时，session允许您存储他们的信息，例如名字、姓氏或 ID。然后，通过在 Magento 2 中设置自定义session变量，您可以存储更多附加信息。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，让我们看一下 Magento 2 中的session类型列表：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>vendor/magento/module-catalog/Model/Session.php
 
vendor/magento/module-newsletter/Model/Session.php
 
vendor/magento/module-persistent/Model/Session.php
 
vendor/magento/framework/Message/Session.php
 
vendor/magento/module-customer/Model/Session.php
 
vendor/magento/module-backend/Model/Session.php
 
vendor/magento/module-checkout/Model/Session.php
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>查看以下方法，可以随时轻松快速地在 Magento 2 中设置或取消session。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="set-sessions-in-magento-2">在 Magento 2 中设置session</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在，您将开始通过以下代码调用 Catalog、Customer 和 Checkout session。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{    
    protected $_catalogSession;
    protected $_customerSession;
    protected $_checkoutSession;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Catalog\Model\Session $catalogSession,
        \Magento\Customer\Model\Session $customerSession,
        \Magento\Checkout\Model\Session $checkoutSession,
        array $data = []
    )
    {        
        $this-&gt;_catalogSession = $catalogSession;
        $this-&gt;_checkoutSession = $checkoutSession;
        $this-&gt;_customerSession = $customerSession;
        parent::__construct($context, $data);
    }
    
    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }
        
    public function getCatalogSession() 
    {
        return $this-&gt;_catalogSession;
    }
    
    public function getCustomerSession() 
    {
        return $this-&gt;_customerSession;
    }
    
    public function getCheckoutSession() 
    {
        return $this-&gt;_checkoutSession;
    }    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>然后，通过 Catalog、Customer 和 Checkout session，可以从<code>.phtml</code>文件中设置它们。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$block-&gt;getCatalogSession()-&gt;setMyName('Mageplaza');
echo $block-&gt;getCatalogSession()-&gt;getMyName() . '&lt;br /&gt;'; // output: Mageplaza
 
$block-&gt;getCheckoutSession()-&gt;setTestData('Hello World');
echo $block-&gt;getCheckoutSession()-&gt;getTestData() . '&lt;br /&gt;'; // output: Hello World
 
$block-&gt;getCheckoutSession()-&gt;setTestHello('Test Hello Value');
echo $block-&gt;getCheckoutSession()-&gt;getTestHello() . '&lt;br /&gt;'; // output: Test Hello Value
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="unset-sessions-in-magento-2">在 Magento 2 中取消Session</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果您想取消设置这些session，请按以下步骤操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$block-&gt;getCatalogSession()-&gt;unsMyName();
$block-&gt;getCheckoutSession()-&gt;unsTestData();
$block-&gt;getCustomerSession()-&gt;unsTestHello();
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>具体来说，客户session允许收集客户信息，例如客户姓名和电子邮件。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>// get customer data
if ($block-&gt;getCustomerSession()-&gt;isLoggedIn()) {
    $customerId = $block-&gt;getCustomerSession()-&gt;getCustomerId();
    $customerData = $block-&gt;getCustomerSession()-&gt;getCustomer();
    echo $customerId . '&lt;br /&gt;';
    echo $customerData-&gt;getFirstname() . ' ' . $customerData-&gt;getLastname() . '&lt;br /&gt;';
    echo $customerData-&gt;getEmail() . '&lt;br /&gt;';
    print_r($block-&gt;getCustomerSession()-&gt;getCustomer()-&gt;getData());
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>结帐session将显示报价信息。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>// get checkout session data
echo $block-&gt;getCheckoutSession()-&gt;getQuoteId();
print_r($block-&gt;getCheckoutSession()-&gt;getQuote()-&gt;getData());</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -154px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 19 Oct 2023 03:20:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取当前产品和当前类别]]></title>
      <link>https://www.360magento.com/blog/how-get-current-product-category-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>产品名称、产品 ID、产品价格或类别 URL 等信息对于任何 Magento 2 在线商家都至关重要，因为它使他们能够更好地访问足够的信息来实施合适的业务策略。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="3-steps-to-get-current-product--current-category-in-magento-2">在 Magento 2 中获取当前产品和当前类别的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第二步：打印出模板<code>phtml</code>文件中当前的产品</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第三步：打印出模板<code>phtml</code>文件中当前的类别</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">步骤1：在Mageplaza_HelloWorld中声明</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用模块 Example_HelloWorld的块类，然后可能<code>\Magento\Framework\Registry</code>在模块块类的构造函数中注入 的对象。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
        protected $_registry;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Framework\Registry $registry,
        array $data = []
    )
    {        
        $this-&gt;_registry = $registry;
        parent::__construct($context, $data);
    }
    
    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }
    
    public function getCurrentCategory()
    {        
        return $this-&gt;_registry-&gt;registry('current_category');
    }
    
    public function getCurrentProduct()
    {        
        return $this-&gt;_registry-&gt;registry('current_product');
    }    
    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-get-current-product-in-the-template-phtml-file">步骤2：在模板<code>phtml</code>文件中获取当前产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>当前产品包括以下信息：名称、SKU、最终价格、URL 和关联的类别 ID。当前类别带有名称和网址等信息。现在请运行命令打印出当前产品和当前类别。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$myBlock = \Magento\Framework\App\ObjectManager::getInstance()-&gt;get('Example\HelloWorld\Block\HelloWorld');
 

// print current product data
if ($currentProduct = $myBlock-&gt;getCurrentProduct()) {
    echo $currentProduct-&gt;getName() . '&lt;br /&gt;';
    echo $currentProduct-&gt;getSku() . '&lt;br /&gt;';
    echo $currentProduct-&gt;getFinalPrice() . '&lt;br /&gt;';
    echo $currentProduct-&gt;getProductUrl() . '&lt;br /&gt;';
    print_r ($currentProduct-&gt;getCategoryIds()) . '&lt;br /&gt;';    
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-get-current-category-in-the-template-phtml-file">步骤3：获取模板<code>phtml</code>文件中当前的类别</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$myBlock = \Magento\Framework\App\ObjectManager::getInstance()-&gt;get('Example\HelloWorld\Block\HelloWorld');
 
// print current category data
if ($currentCategory = $myBlock-&gt;getCurrentCategory()) {    
    echo $currentCategory-&gt;getName() . '&lt;br /&gt;';
    echo $currentCategory-&gt;getUrl() . '&lt;br /&gt;';        
}
 </code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -191px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 18 Oct 2023 07:25:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示模板 phtml 文件中的 cms 静态块]]></title>
      <link>https://www.360magento.com/blog/how-show-cms-static-block-template-phtml-file-magento-2/</link>
      <description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-show-cms-static-block-from-template-phtml-file-in-magento-2">如何在 Magento 2 中从模板 PHTML 文件显示 CMS 静态块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 2 为用户提供了 CMS Static Block，这对于在网页上显示文本、照片、视频和其他材料非常有用。动态内容也可以通过静态块中的小部件添加。使用<strong>Magento 2 CMS 静态块</strong>使您可以轻松编辑和设计这些内容。当您创建了块并希望从 phtml 文件中显示它时，本教程适合您。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您想在 Magento 2 中的<strong>模板<code>phtml</code>文件中显示 CMS 静态块，请使用以下代码片段：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>echo $this-&gt;getLayout()
          -&gt;createBlock('Magento\Cms\Block\Block')
          -&gt;setBlockId('your_block_identifier')
          -&gt;toHtml();
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p><strong>在 CMS 内容中显示 CMS 静态块</strong>：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code></code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p><strong>在 XML 中显示 CMS 静态块</strong>：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;referenceContainer name="content"&gt; 
    &lt;block class="Magento\Cms\Block\Block" name="block_identifier"&gt; 
        &lt;arguments&gt; 
            &lt;argument name="block_id" xsi:type="string"&gt;block_identifier&lt;/argument&gt; 
        &lt;/arguments&gt; 
    &lt;/block&gt; 
&lt;/referenceContainer&gt;</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -111px; top: 28.375px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 18 Oct 2023 03:18:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何获取货币数据：Magento 2 中的代码、汇率、符号]]></title>
      <link>https://www.360magento.com/blog/how-get-currency-data-code-rate-symbol-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>当您使用Magento 2平台建立您的电子商店时，您可以接受多种货币，这取决于目标客户。通过本指南，我们将清楚地获取所有基础、默认和当前货币代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-magento-2-get-currency-data">概述 Magento 2 获取货币数据</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>phtml</code>步骤2：获取文件中货币数据的输出</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">第 1 步：声明<code>Example_HelloWorld</code></h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类<code>Example_HelloWorld</code>，然后可能将类的对象注入<code>StoreManagerInterface &amp; Currency</code>到模块的块类的构造函数中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_storeManager;
    protected $_currency;
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Directory\Model\Currency $currency,        
        array $data = []
    )
    {        
        $this-&gt;_storeManager = $storeManager;
        $this-&gt;_currency = $currency;        
        parent::__construct($context, $data);
    }
    
        
    /**
     * Get store base currency code
     *
     * @return string
     */
    public function getBaseCurrencyCode()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getBaseCurrencyCode();
    }
    
     /**
     * Get current store currency code
     *
     * @return string
     */
    public function getCurrentCurrencyCode()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getCurrentCurrencyCode();
    }    
    
    /**
     * Get default store currency code
     *
     * @return string
     */
    public function getDefaultCurrencyCode()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getDefaultCurrencyCode();
    }
    
    /**
     * Get allowed store currency codes
     *
     * If base currency is not allowed in current website config scope,
     * then it can be disabled with $skipBaseNotAllowed
     *
     * @param bool $skipBaseNotAllowed
     * @return array
     */
    public function getAvailableCurrencyCodes($skipBaseNotAllowed = false)
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getAvailableCurrencyCodes($skipBaseNotAllowed);
    }
    
    /**
     * Get array of installed currencies for the scope
     *
     * @return array
     */
    public function getAllowedCurrencies()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getAllowedCurrencies();
    }
    
    /**
     * Get current currency rate
     *
     * @return float
     */
    public function getCurrentCurrencyRate()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;getCurrentCurrencyRate();
    }
    
    /**
     * Get currency symbol for current locale and currency code
     *
     * @return string
     */    
    public function getCurrentCurrencySymbol()
    {
        return $this-&gt;_currency-&gt;getCurrencySymbol();
    }    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p><code>vendor/magento/module-store/Model/Store.php</code>您可以在和中看到更多功能<code>vendor/magento/module-directory/Model/Currency.php</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-get-the-output-of-the-currency-data-in-phtml-file"><code>phtml</code>步骤2：获取文件中货币数据的输出</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>当您在模板文件中运行以下命令时，允许获取并打印<strong>货币汇率</strong>、<strong>货币代码</strong>和<strong>货币符号</strong><code>phtml</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>echo $block-&gt;getCurrentCurrencySymbol() . '&lt;br /&gt;';
echo $block-&gt;getCurrentCurrencyCode() . '&lt;br /&gt;';
echo $block-&gt;getBaseCurrencyCode() . '&lt;br /&gt;';
echo $block-&gt;getDefaultCurrencyCode() . '&lt;br /&gt;';
echo $block-&gt;getCurrentCurrencyRate() . '&lt;br /&gt;';
 
print_r($block-&gt;getAvailableCurrencyCodes()) . '&lt;br /&gt;';
print_r($block-&gt;getAllowedCurrencies()) . '&lt;br /&gt;';
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>到这里就结束了，希望对你有帮助。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -169px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 17 Oct 2023 07:53:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加顶部链接]]></title>
      <link>https://www.360magento.com/blog/how-add-top-link-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>在 Magento 2 中添加顶部链接</strong>意味着在页面顶部显示一些有用的链接。我们将在本教程中了解如何完成。这是CMS 块，包括客户的一些个人信息，如我的帐户、我的愿望清单、登录名或您需要的任何信息。单击顶部链接并将用户重定向到包含更多特定信息的CMS 页面。创建顶部链接还可以推动他们的愿望，鼓励客户购买越来越多的东西。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，在顶部菜单上，&ldquo;我的愿望清单&rdquo;链接将保存并直接引导他们到他们之前感兴趣的产品列表，而无需结账。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-of-adding-top-link-in-magento-2">在 Magento 2 中添加顶部链接的概述</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：添加/修改<code>default.xml</code>文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：添加<code>Link.php</code>文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存并测试</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-add-modify-defaultxml-file">第1步：添加/修改<code>default.xml</code>文件</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>找到路径<code>app/code/Example/HelloWorld/view/frontend/layout</code>，然后通过以下方式添加/修改<code>default.xml</code>文件：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
&lt;body&gt;
     &lt;referenceBlock name="header.links"&gt;
         &lt;block class="Example\HelloWorld\Block\Link" name="add-new-header-link"&gt;
             &lt;arguments&gt;
     &lt;argument name="label" xsi:type="string" translate="true"&gt;New Link&lt;/argument&gt;
     &lt;argument name="path" xsi:type="string" translate="true"&gt;new-link&lt;/argument&gt;
     &lt;/arguments&gt;
         &lt;/block&gt;
     &lt;/referenceBlock&gt;
&lt;/body&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2-add-linkphp-file">第 2 步：添加<code>Link.php</code>文件</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>继续输入路径<code>app/code/Example/HelloWorld/Block</code>，您将添加<code>link.php</code>文件：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
 
namespace Example\HelloWorld\Block;
 
class Link extends \Magento\Framework\View\Element\Html\Link
{
/**
* Render block HTML.
*
* @return string
*/
protected function _toHtml()
    {
     if (false != $this-&gt;getTemplate()) {
     return parent::_toHtml();
     }
     return '&lt;li&gt;&lt;a ' . $this-&gt;getLinkAttributes() . ' &gt;' . $this-&gt;escapeHtml($this-&gt;getLabel()) . '&lt;/a&gt;&lt;/li&gt;';
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-3-flush-cache-and-test-your-top-link-result">第 3 步：刷新缓存并测试</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>清理缓存</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Tue, 17 Oct 2023 03:26:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何从 Magento 2 中的特定产品获取类别]]></title>
      <link>https://www.360magento.com/blog/how-get-categories-specific-product-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>有时您可能需要从您看到的特定产品中收集整个产品列表或产品类别。可以使用快速解决方案来获取产品类别，而无需在您的网站内来回切换。您将以省时且准确的方式从任何您想要的产品中获得类别。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在让我们看看如何<strong>从 Magento 2 中的特定产品获取类别</strong>。此方法使您能够根据需要从当前或任何产品中获取列表。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>首先，您需要打开我的自定义模块（<code>Example_HelloWorld</code>）的块类，然后在该块类的构造函数中注入<code>\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory</code>,<code>\Magento\Catalog\Model\ProductRepository</code>和类的对象。<code>\Magento\Framework\Registry</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{    
    protected $_categoryCollectionFactory;
    protected $_productRepository;
    protected $_registry;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
        \Magento\Catalog\Model\ProductRepository $productRepository,
        \Magento\Framework\Registry $registry,
        array $data = []
        )
        {
            $this-&gt;_categoryCollectionFactory = $categoryCollectionFactory;
            $this-&gt;_productRepository = $productRepository;
            $this-&gt;_registry = $registry;
            parent::__construct($context, $data);
    }
    
    /**
     * Get category collection
     *
     * @param bool $isActive
     * @param bool|int $level
     * @param bool|string $sortBy
     * @param bool|int $pageSize
     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection or array
     */
    public function getCategoryCollection($isActive = true, $level = false, $sortBy = false, $pageSize = false)
    {
        $collection = $this-&gt;_categoryCollectionFactory-&gt;create();
        $collection-&gt;addAttributeToSelect('*');        
        
        // select only active categories
        if ($isActive) {
            $collection-&gt;addIsActiveFilter();
        }
                
        // select categories of certain level
        if ($level) {
            $collection-&gt;addLevelFilter($level);
        }
        
        // sort categories by some value
        if ($sortBy) {
            $collection-&gt;addOrderField($sortBy);
        }
        
        // select certain number of categories
        if ($pageSize) {
            $collection-&gt;setPageSize($pageSize); 
        }    
        
        return $collection;
    }
    
    public function getProductById($id)
    {        
        return $this-&gt;_productRepository-&gt;getById($id);
    }
    
    public function getCurrentProduct()
    {        
        return $this-&gt;_registry-&gt;registry('current_product');
    }
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>如果您想使用当前产品，则该<code>getCurrentProduct()</code>功能处于活动状态。如果来自任何特定项目，请启用<code>getProductById($id)</code>该功能。之后，您可以从链接到该产品的类别 ID 中检索类别的集合。在该<code>.phtml</code>文件中，您需要添加以下代码片段：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$productId = 1; // YOUR PRODUCT ID
$product = $block-&gt;getProductById($productId);
 
// for current product
// $product = $block-&gt;getCurrentProduct();
 
$categoryIds = $product-&gt;getCategoryIds();
 
$categories = $block-&gt;getCategoryCollection()
                    -&gt;addAttributeToFilter('entity_id', $categoryIds);
                    
foreach ($categories as $category) {
    echo $category-&gt;getName() . '&lt;br&gt;';
}</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Mon, 16 Oct 2023 07:48:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 的 InstallSchema 中创建自动更新时间属性]]></title>
      <link>https://www.360magento.com/blog/how-to-create-auto-update-time-attributes-in-installschema-of-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>本主题的目的是帮助您使用 MYSQL<strong>在 Magento 2 的 InstallSchema 中创建自动更新时间属性。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-create-auto-update-time-attributes-in-installschema-of-magento-2">如何在 Magento 2 的 InstallSchema 中创建自动更新时间属性</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>MYSQL 将直接使用 TIMESTAMP 和 DATETIME，允许自动初始化、更新和显示网站上的当前日期和时间，而不必手动将正确的日期和时间值插入到 PHP 代码中，具体如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>自动初始化时间属性意味着自动加载当前时间戳和日期时间。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>自动更新时间属性意味着自动更新到当前时间戳和日期时间。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>为了在Magento 2商店中完美构建自动更新时间属性，您可以参考以下脚本代码。需要将代码添加到 InstallSchema 文件中。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>app/code/Example/HelloWorld/Setup/InstallSchema.php</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>这里有两列<code>created_at</code>并<code>update_at</code>包含在您的表格中。当您向数据表中设置新行时，created_at 列将进行自动初始化，如果您继续更新数据表中的一行，updated_at 将发生更改。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>...
-&gt;addColumn(
    'created_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    ['nullable' =&gt; false, 'default' =&gt; \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT],
    'Created At'
)-&gt;addColumn(
    'updated_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    ['nullable' =&gt; false, 'default' =&gt; \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
    'Updated At'
)
-&gt;addColumn(
    'created_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    ['nullable' =&gt; false, 'default' =&gt; \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT],
    'Created At'
)-&gt;addColumn(
    'updated_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    ['nullable' =&gt; false, 'default' =&gt; \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
    'Updated At'
)
...
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>最后，您需要<code>php bin/magento setup:upgrade</code>在控制台中运行该命令，之后，<code>created_at</code>和<code>updated_at</code>字段将在 MYSQL 中建立。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -113px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 16 Oct 2023 03:26:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何从 Magento 2 的模板文件 phtml 中获取区块]]></title>
      <link>https://www.360magento.com/blog/how-get-block-from-template-file-phtml-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>块是内容的模块化单元，可以放置在页面上的任何位置。块通常用于显示来自小部件、视频或文本的动态内容。以块的方式显示元素可以让商店管理员更轻松地随时管理和编辑。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>通常将内容块视为静态块或 CMS 块，用作促销横幅、图像或信息文本。您可以通过调用 PHTML 文件中的块来在 Magento 2 网站的每个页面上显示这些块，而无需花费大量时间进行配置。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>phtml</code>使用 PHTML 文件是在 Magento 2 中调用块的最佳方法之一。在这篇文章中，我将向您展示如何通过 PHP 代码从Magento 2 中的模板文件获取块。我将给出两个示例你在这里。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="example-1-to-get-block-in-phtml">示例 1 在 phtml 中获取块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果需要调用 的模板块<code>helloworld.phtml</code>，<code>Example_HelloWorld</code>请使用以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>echo $this-&gt;getLayout()
          -&gt;createBlock('Example\HelloWorld\Block\HelloWorld')
          -&gt;setTemplate('Example_HelloWorld::helloworld.phtml')
          -&gt;toHtml();
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="example-2-to-call-block-in-phtml">示例2在phtml中调用块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果您需要在Magento 2中的CMS静态块或CMS页面中调用模板块，请使用以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>
block class="Example\HelloWorld\Block\HelloWorld" name="your_block_name" template="Example_HelloWorld::helloworld.phtml"

</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>希望这是从模板文件中获取块的有用文章<code>phtml</code>。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sun, 15 Oct 2023 07:26:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何从 Magento 2 中的目录规则条件获取列表产品]]></title>
      <link>https://www.360magento.com/blog/how-to-get-list-product-from-catalog-rule-condition-in-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>从 Magento 2 中的目录规则条件获取列表产品</strong>是帮助您创建和观察所有促销活动的方法。在Magento 2商店中，您可以设置两种类型的促销规则：目录规则和购物车规则，但是我们都引用目录规则。根据您的需要，您可以<strong>生成多个目录促销规则</strong>并为每个规则应用多种条件。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-list-products-from-catalog-rule-condition-in-magento-2">从 Magento 2 中的目录规则条件获取列表产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>以下是如何通过在目录中创建类来从目录规则条件中获取列表产品的详细指南<code>\Magento\Rule\Model\AbstractModel</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
 
namespace Example\HelloWorld\Model;
class Rule extends \Magento\Rule\Model\AbstractModel
{
   protected $_productIds;
/**
* Get array of product ids which are matched by rule
*
* @return array
*/
public function getListProductIdsInRule()
{
     $productCollection = \Magento\Framework\App\ObjectManager::getInstance()-&gt;create(
         '\Magento\Catalog\Model\ResourceModel\Product\Collection'
     );
     $productFactory = \Magento\Framework\App\ObjectManager::getInstance()-&gt;create(
         '\Magento\Catalog\Model\ProductFactory'
     );
     $this-&gt;_productIds = [];
     $this-&gt;setCollectedAttributes([]);
     $this-&gt;getConditions()-&gt;collectValidatedAttributes($productCollection);
     \Magento\Framework\App\ObjectManager::getInstance()-&gt;create(
         '\Magento\Framework\Model\ResourceModel\Iterator'
     )-&gt;walk(
         $this-&gt;_productCollection-&gt;getSelect(),
         [[$this, 'callbackValidateProduct']],
         [
             'attributes' =&gt; $this-&gt;getCollectedAttributes(),
             'product' =&gt; $productFactory-&gt;create()
         ]
     );
     return $this-&gt;_productIds;
}
/**
* Callback function for product matching
*
* @param array $args
* @return void
*/
public function callbackValidateProduct($args)
{
     $product = clone $args['product'];
     $product-&gt;setData($args['row']);
     $websites = $this-&gt;_getWebsitesMap();
     foreach ($websites as $websiteId =&gt; $defaultStoreId) {
         $product-&gt;setStoreId($defaultStoreId);
         if ($this-&gt;getConditions()-&gt;validate($product)) {
             $this-&gt;_productIds[] = $product-&gt;getId();
         }
     }
}
/**
* Prepare website map
*
* @return array
*/
protected function _getWebsitesMap()
{
     $map = [];
     $websites = \Magento\Framework\App\ObjectManager::getInstance()-&gt;create(
         '\Magento\Store\Model\StoreManagerInterface'
     )-&gt;getWebsites();
     foreach ($websites as $website) {
         // Continue if website has no store to be able to create catalog rule for website without store
         if ($website-&gt;getDefaultStore() === null) {
             continue;
         }
         $map[$website-&gt;getId()] = $website-&gt;getDefaultStore()-&gt;getId();
     }
     return $map;
}
}</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -110px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 15 Oct 2023 03:18:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[系统配置中的 Magento 2 文件上传]]></title>
      <link>https://www.360magento.com/blog/how-file-upload-sytem-configuration-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>当您使用 Magento 2 管理界面时，完全可以<strong>在 Magento 2 系统配置中上传文件。</strong>在Magento 2中，管理界面接受各种输入类型，例如文本文件、单选按钮、下拉列表和多选，这些输入类型是纯文本、加密或序列化的，然后以不同的方式显示，例如网格、表单、简单字段和图像。支持多种文件类型，例如 XML、PHP、JPG、CSV、DOCS、XLS。特别是，Magento 还允许您扩展默认接口，然后您可以自由添加字段。现在让我们阅读这篇文章并获取详细说明。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-to-upload-the-file-in-magento-2-store-configuration">Magento 2商店配置中上传文件的方法</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>步骤1：创建system.xml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤2：刷新缓存并检查结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-create-systemxml-file">步骤1：创建system.xml文件。</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>按照路径<code>Store &gt; Configuration</code>，在<code>Sales</code>部分下，您可以创建一个新部分<code>custom_section</code>，创建一组新字段<code>custom_group</code>，并<code>custom_file_upload</code>通过<code>system.xml</code>在模块中添加文件来创建文件上传</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>应用以下代码片段。文件路径：<code>app/code/Example/HelloWorld/etc/adminhtml/system.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;section id="<span>example</span>_helloworld_section" translate="label" type="text" sortOrder="301" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
    &lt;label&gt;Sales&lt;/label&gt;
    &lt;tab&gt;sales&lt;/tab&gt;
    &lt;resource&gt;Magento_Sales::config_sales&lt;/resource&gt;
    &lt;group id="custom_group" translate="label" type="text" sortOrder="6" showInDefault="1" showInWebsite="1" &gt;
        &lt;label&gt;Custom group&lt;/label&gt;
        &lt;field id="custom_file_upload" translate="label" type="Magento\Config\Block\System\Config\Form\Field\File" sortOrder="6" showInDefault="1" showInWebsite="1" &gt;
            &lt;label&gt;Upload custom file&lt;/label&gt;
        &lt;/field&gt;
    &lt;/group&gt;
&lt;/section&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在上面的脚本中，有一些点您需要知道它们是什么。首先，<code>Section</code>字段是不言自明的，而<strong>选项卡</strong>是该部分的确切位置，<strong>销售</strong>选项卡是从 中设置的<code>Magento_Sales::etc/adminhtml/system.xml file</code>，<strong>资源</strong>将应用于ACL。但是，请记住，只有管理员才能<code>Magento_Sales::config_sales</code>访问此部分。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>接下来，<code>Group</code>在脚本代码中需要包含允许您根据需要上传文件的字段。该组包含<strong>id</strong>和<strong>type</strong>属性。<strong>id</strong>指向某些自定义文件上传，但它对于每个组来说肯定是唯一的。并且<strong>类型</strong>设置为<code>Magento\Config\Block\System\Config\Form\Field\File</code>，但是如果要上传图片，请记住类型<code>Magento\Config\Block\System\Config\Form\Field\Image</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>最后虽然得到了上传文件，但是还是不行。为您建议以下两件事。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在此后端模块中，您应该设置上传目录，检查允许的扩展名，验证文件大小并将文件路径保存到数据库。文件上传的默认后端模型是<code>Magento\Config\Model\Config\Backend\File</code>.&nbsp;然后我们添加<code>&lt;upload_dir&gt;</code>-上传目录来运行文件。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;backend_model&gt;Magento\Config\Model\Config\Backend\File&lt;/backend_model&gt;
&lt;upload_dir&gt;upload&lt;/upload_dir&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>从应用程序根目录，上传的文件将放在<code>magento_root/upload/</code>.&nbsp;但是，当您在上传目录中插入scope_info=&rdquo;1&rdquo;时，上传的文件将保存到基于范围的位置。如果您应用默认范围，文件将位于<code>magento_root/upload/default</code>.&nbsp;网站 1 会给我们<code>magento_root/upload/websites/1/</code>等。运行配置以清除所有内容：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;section id="<span>example</span>_helloworld_section" translate="label" type="text" sortOrder="301" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
    &lt;label&gt;Sales&lt;/label&gt;
    &lt;tab&gt;sales&lt;/tab&gt;
    &lt;resource&gt;Magento_Sales::config_sales&lt;/resource&gt;
    &lt;group id="custom_group" translate="label" type="text" sortOrder="6" showInDefault="1" showInWebsite="1" &gt;
        &lt;label&gt;Security&lt;/label&gt;
        &lt;field id="custom_file_upload" translate="label" type="Magento\Config\Block\System\Config\Form\Field\File" sortOrder="6" showInDefault="1" showInWebsite="1" &gt;
            &lt;label&gt;Upload custom file&lt;/label&gt;
            &lt;backend_model&gt;Magento\Config\Model\Config\Backend\File&lt;/backend_model&gt;
            &lt;upload_dir config="system" scope_info="1"&gt;test&lt;/upload_dir&gt;
        &lt;/field&gt;
    &lt;/group&gt;
&lt;/section&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>除了后端模型之外，您还可以参考其他选项，例如 frontend_model （例如，用于自定义&ldquo;拖放&rdquo;文件上传）、注释、工具提示、提示、验证等。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>在 Magento 2 商店配置中上传文件时，许多类型的文件都会被接受。但如果你想限制的话，这是不允许的。为此，请在<code>system.xml</code>文件 中<code>\<span>Example</span>\HelloWorld\Model\Config\Backend\CustomFileType</code>查看以下仅包含<code>csv</code>并<code>xls</code>感谢函数的示例<code>getAllowedExtensions()</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
 
namespace <span>Example</span>\HelloWorld\Model\Config\Backend;
 
class CustomFileType extends \Magento\Config\Model\Config\Backend\File
{
    /**
     * @return string[]
     */
    public function getAllowedExtensions() {
        return ['csv', 'xls'];
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-flush-cache-and-check-result">步骤2：刷新缓存并检查结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>刷新 Magento 缓存并检查结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -50px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 14 Oct 2023 07:29:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中将订单电子邮件发送到自定义电子邮件地址]]></title>
      <link>https://www.360magento.com/blog/how-to-crete-update-delete-cookie-in-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在这篇博文中，向您介绍如何使用自定义代码将订单电子邮件发送到Magento 2中的<strong>自定义电子邮件地址。</strong>本主题将通过以下两个步骤涵盖所有必要的操作。<a href="https://www.mageplaza.com/magento-2-extensions/"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="2-steps-to-send-order-email-to-a-custom-email-address-in-magento-2">将订单电子邮件发送到 Magento 2 中的自定义电子邮件地址的 2 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第一步：设置邮件格式</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第二步：设置控制器文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-set-a-form-of-the-email">第一步：设置邮件格式</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>使用输入字段行设置电子邮件的格式如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;form id="send-order-email" action="&lt;?php $block-&gt;getUrl('helloworld/order/sendemail'); ?&gt;"&gt;
    &lt;label&gt;Email Address&lt;/label&gt;
    &lt;input type="text" class="input-text" id="email"&gt;
&lt;/form&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-set-a-controller-file">第2步：设置控制器文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>文件路径：<code>app\code\Example\HelloWorld\Controller\Order\Email</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app\code\<code>Example</code>\HelloWorld\Controller\Order\Email</code>添加基于 class 的文件<code>\Magento\Framework\App\Action\Action</code>。该文件将从上面的表单中执行提交操作，但首先，请插入以下操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>public function execute()
    {
        $email = $this-&gt;getRequest()-&gt;getParam('email');
        $order = $this-&gt;_objectManager-&gt;create('Magento\Sales\Model\Order')-&gt;load(1); // this is entity id
        $order-&gt;setCustomerEmail($email);
        if ($order) {
            try {
                $this-&gt;_objectManager-&gt;create('\Magento\Sales\Model\OrderNotifier')
                    -&gt;notify($order);
                $this-&gt;messageManager-&gt;addSuccess(__('You sent the order email.'));
            } catch (\Magento\Framework\Exception\LocalizedException $e) {
                $this-&gt;messageManager-&gt;addError($e-&gt;getMessage());
            } catch (\Exception $e) {
                $this-&gt;messageManager-&gt;addError(__('We can\'t send the email order right now.'));
                $this-&gt;_objectManager-&gt;create('Magento\Sales\Model\OrderNotifier')-&gt;critical($e);
            }
        }
    }</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Sat, 14 Oct 2023 03:04:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中检查网址是否已通过 https、SSL 加密]]></title>
      <link>https://www.360magento.com/blog/how-check-url-secured-https-ssl-magento-2/</link>
      <description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="2-steps-to-check-if-the-url-is-secured-https-ssl-in-magento-2">在 Magento 2 中检查 url 是否安全 https、ssl 的 2 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>.phtml</code>步骤2：在模板文件中声明函数</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">第 1 步：声明<code>Mageplaza_HelloWorld</code></h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类，然后可能在模块的块类的构造函数中<code>Example_HelloWorld</code>注入 的对象。<code>StoreManagerInterface</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Mageplaza/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_storeManager;    
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Store\Model\StoreManagerInterface $storeManager,        
        array $data = []
    )
    {        
        $this-&gt;_storeManager = $storeManager;        
        parent::__construct($context, $data);
    }
    
    /**
     * Check if frontend URL is secure
     *
     * @return boolean
     */
    public function isFrontUrlSecure()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;isFrontUrlSecure();
    }
    
    /**
     * Check if current requested URL is secure
     *
     * @return boolean
     */    
    public function isCurrentlySecure()
    {
        return $this-&gt;_storeManager-&gt;getStore()-&gt;isCurrentlySecure();
    }    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以在 中看到更多功能<code>vendor/magento/module-store/Model/Store.php</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-declare-function-in-template-phtml-file"><code>.phtml</code>步骤2：在模板文件中声明函数</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>.phtml</code>在模板文件中运行以下函数</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>var_dump($block-&gt;isFrontUrlSecure()) . '&lt;br /&gt;';
var_dump($block-&gt;isCurrentlySecure()) . '&lt;br /&gt;';</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -64px; top: -10.5625px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 13 Oct 2023 07:11:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 部署命令行]]></title>
      <link>https://www.360magento.com/blog/magento-2-deploy-command-line/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在本教程中，我们将讨论如何在命令行系列中<strong>部署命令</strong>行来执行 Magento 2 功能。如您所知，从 Magento 2 开始，他们在.&nbsp;Magento 开发人员对命令行太熟悉了，但如果您是这个领域的新手。本文将带您更深入地了解 Magento 2 命令行以及如何以易于理解的方式在 Magento 2 中部署它们。<a href="https://www.mageplaza.com/devdocs/magento-2-command-line-interface-cli.html"></a><code>bin/magento</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>让我们开始吧！</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="deploy-command-line">部署命令行</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>命令语法：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento setup:static-content:deploy &lt;lang&gt; ... &lt;lang&gt; [--dry-run] </code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="how-to-run-deploy-static-content">如何运行部署静态内容</h4>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento setup:static-content:deploy</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>它将显示如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$ php bin/magento setup:static-content:deploy

Requested languages: en_US
=== frontend -&gt; Magento/blank -&gt; en_US ===
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>默认情况下，它将运行默认语言的部署静态内容：<code>en_EN</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您想部署其他语言的静态内容，例如：<code>pt_BR</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento setup:static-content:deploy pt_BR</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>然后得到结果：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>Requested languages: pt_BR
=== frontend -&gt; Magento/luma -&gt; pt_BR ===
... progress indicator ...
Successful: 1613 files; errors: 0

=== frontend -&gt; Magento/blank -&gt; pt_BR ===
... progress indicator ...
Successful: 1620 files; errors: 0

=== adminhtml -&gt; Magento/backend -&gt; pt_BR ===
... progress indicator ...
Successful: 1626 files; errors: 0

=== Minify templates ===
... progress indicator ...
Successful: 858 files modified
---</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -229px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 13 Oct 2023 03:14:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何检查当前网址是否是 Magento 2 中的主页]]></title>
      <link>https://www.360magento.com/blog/how-check-current-url-homepage-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>如何检查当前URL是否为首页URL？</strong>您也想知道这个问题，并为您的Magento 2 商店寻找完美的方式。如果您曾经不确定某个页面是否是主页，这篇文章将指导您使用 PHP 代码来澄清它。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>开始吧！</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="3-steps-to-check-if-current-url-is-homepage-in-magento-2">检查当前 url 是否为 Magento 2 主页的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：声明<code>Example_HelloWorld</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>.phtml</code>步骤2：在模板文件中声明函数</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 3：获取<code>index.php</code>文件中的输出</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-declare-in-mageplaza_helloworld">第 1 步：声明<code>Example_HelloWorld</code></h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类<code>Example_HelloWorld</code>，然后可能将类的对象注入<code>Logo</code>到模块的块类的构造函数中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
	protected $_logo;	
	
	public function __construct(
		\Magento\Backend\Block\Template\Context $context,
		\Magento\Theme\Block\Html\Header\Logo $logo,
		array $data = []
	)
	{		
		$this-&gt;_logo = $logo;
		parent::__construct($context, $data);
	}
	
	/**
     * Check if current url is url for home page
     *
     * @return bool
     */
    public function isHomePage()
    {	
		return $this-&gt;_logo-&gt;isHomePage();
	}
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以在 中看到更多功能<code>vendor/magento/module-theme/Block/Html/Header/Logo.php</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-declare-function-in-template-phtml-file"><code>.phtml</code>步骤2：在模板文件中声明函数</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>.phtml</code>在模板文件中运行以下函数</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>if ($block-&gt;isHomePage()) {
    // do something
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-get-output-in-indexphp-file">步骤 3：获取<code>index.php</code>文件中的输出</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获取当前页面（主页或其他页面）底部的输出，可以在文件中编写以下脚本<code>index.php</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$helloWorldBlock = $objectManager-&gt;get('Example\HelloWorld\Block\HelloWorld');
var_dump($helloWorldBlock-&gt;isHomePage());
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>请按照三个步骤即可查看当前网址。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -122px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 12 Oct 2023 08:08:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中按产品 ID 和 SKU 加载产品？]]></title>
      <link>https://www.360magento.com/blog/load-products-by-id-and-sku-in-magento-2/</link>
      <description><![CDATA[<p><span>如何通过产品 ID 和 SKU 加载 Magento 2 产品。加载产品是获取产品信息的一件重要事，也是很多商家最追捧的事情。这样做的目的是获取准确的产品信息，以便借助分配给特定产品的产品 ID 或 SKU 进行更改或执行其他操作。</span></p>
<p><span>让我们首先看看如何从产品 ID 加载产品。</span></p>
<p><span>方法 &ndash; 1：</span><span>&nbsp;Magento 不推荐使用这种简短的方法，因此我们也不使用。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-6513ed0a54d6d155848304" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d6d155848304-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d6d155848304-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d6d155848304-3">3</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d6d155848304-1"><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d6d155848304-2"><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Framework</span><span class="crayon-sy">\</span><span class="crayon-v">App</span><span class="crayon-sy">\</span><span class="crayon-v">ObjectManager</span><span class="crayon-o">::</span><span class="crayon-e">getInstance</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d6d155848304-3"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-s">'Magento\Catalog\Api\ProductRepositoryInterface'</span><span class="crayon-sy">)</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getById</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>方法 - 2：</span><span>当您需要产品信息时，Magento 强烈推荐使用此方法。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-6513ed0a54d75265849036" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-16">16</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-18">18</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d75265849036-19">19</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-1"><span class="crayon-o">&lt;</span><span class="crayon-sy">?</span><span class="crayon-e">php</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-2"><span class="crayon-t">namespace</span><span class="crayon-h"> </span><span class="crayon-v">Vendor</span><span class="crayon-sy">\</span><span class="crayon-v">Extension</span><span class="crayon-sy">\</span><span class="crayon-v">Block</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-3">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-4"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Product</span><span class="crayon-h"> </span><span class="crayon-r">extends</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-e">Magento</span><span class="crayon-sy">\</span><span class="crayon-e">Framework</span><span class="crayon-sy">\</span><span class="crayon-e">View</span><span class="crayon-sy">\</span><span class="crayon-e">Element</span><span class="crayon-sy">\</span><span class="crayon-e">Template</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-5"><span class="crayon-sy">{</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-6"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">protected</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span><span class="crayon-h">&nbsp;&nbsp;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-7">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-8"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">__construct</span><span class="crayon-sy">(</span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Catalog</span><span class="crayon-sy">\</span><span class="crayon-v">Api</span><span class="crayon-sy">\</span><span class="crayon-i">ProductRepositoryInterface</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-9"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-10"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-11">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-12"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">getProductDataUsingId</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getById</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productid</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-14"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-15"><span class="crayon-sy">}</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-16">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-17"><span class="crayon-e">PHTML </span><span class="crayon-e">file </span><span class="crayon-v">code</span><span class="crayon-sy">,</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-18"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">block</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getProductDataUsingId</span><span class="crayon-sy">(</span><span class="crayon-cn">32</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d75265849036-19"><span class="crayon-i">echo</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getName</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>现在，我们来看看如何按产品SKU加载产品。</span></p>
<p><span>方法 &ndash; 1：</span><span>&nbsp;Magento 不推荐使用这种简短的方法，因此我们也不使用。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-6513ed0a54d77046485380" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d77046485380-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d77046485380-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d77046485380-3">3</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d77046485380-1"><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">"productsku"</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d77046485380-2"><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Framework</span><span class="crayon-sy">\</span><span class="crayon-v">App</span><span class="crayon-sy">\</span><span class="crayon-v">ObjectManager</span><span class="crayon-o">::</span><span class="crayon-e">getInstance</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d77046485380-3"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">objectManager</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-s">'Magento\Catalog\Api\ProductRepositoryInterface'</span><span class="crayon-sy">)</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>方法 - 2：</span><span>当您需要产品信息时，Magento 强烈推荐使用此方法。</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-pc print-yes notranslate" id="urvanov-syntax-highlighter-6513ed0a54d79404353581" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-2">2</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-4">4</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-6">6</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-8">8</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-10">10</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-12">12</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-14">14</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-16">16</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-18">18</div>
<div class="crayon-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="urvanov-syntax-highlighter-6513ed0a54d79404353581-20">20</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-1"><span class="crayon-o">&lt;</span><span class="crayon-sy">?</span><span class="crayon-e">php </span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-2"><span class="crayon-t">namespace</span><span class="crayon-h"> </span><span class="crayon-v">Vendor</span><span class="crayon-sy">\</span><span class="crayon-v">Extension</span><span class="crayon-sy">\</span><span class="crayon-v">Block</span><span class="crayon-sy">;</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-3">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-4"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">Product</span><span class="crayon-h"> </span><span class="crayon-r">extends</span><span class="crayon-h"> </span><span class="crayon-sy">\</span><span class="crayon-e">Magento</span><span class="crayon-sy">\</span><span class="crayon-e">Framework</span><span class="crayon-sy">\</span><span class="crayon-e">View</span><span class="crayon-sy">\</span><span class="crayon-e">Element</span><span class="crayon-sy">\</span><span class="crayon-e">Template</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-5"><span class="crayon-sy">{</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-6"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">protected</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-7">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-8"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">__construct</span><span class="crayon-sy">(</span><span class="crayon-sy">\</span><span class="crayon-v">Magento</span><span class="crayon-sy">\</span><span class="crayon-v">Catalog</span><span class="crayon-sy">\</span><span class="crayon-v">Api</span><span class="crayon-sy">\</span><span class="crayon-i">ProductRepositoryInterface</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-9"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">productrepository</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-10"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-11">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-12"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-m">public</span><span class="crayon-h"> </span><span class="crayon-t">function</span><span class="crayon-h"> </span><span class="crayon-e">getProductDataUsingSku</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-r">this</span><span class="crayon-o">-&gt;</span><span class="crayon-v">productrepository</span><span class="crayon-o">-&gt;</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">$</span><span class="crayon-v">productsku</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-14"><span class="crayon-h">&nbsp;&nbsp;</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-15"><span class="crayon-sy">}</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-16">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-17">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-18"><span class="crayon-e">PHTML </span><span class="crayon-e">file </span><span class="crayon-v">code</span><span class="crayon-sy">,</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-19"><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">block</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getProductDataUsingSku</span><span class="crayon-sy">(</span>&ldquo;<span class="crayon-i">productsku</span>&rdquo;<span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6513ed0a54d79404353581-20"><span class="crayon-i">echo</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-v">product</span><span class="crayon-o">-&gt;</span><span class="crayon-e">getName</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span><span>所以，现在就这样了。</span><span>使用这些代码，您将能够按 ID 或 SKU 加载产品信息（无论您喜欢哪种）。</span></span></p>]]></description>
      <pubDate>Thu, 12 Oct 2023 03:06:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中调整产品图像大小]]></title>
      <link>https://www.360magento.com/blog/how-change-product-image-size-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>产品图片尺寸</strong>是一个很好的属性，可以通过产品细节让您的商品更贴近消费者。因为在网上购物时，顾客无法真正触摸到你的商品，他们都是通过你发布的描述和你上传的产品图片来感受的。形象越美丽，他们的欲望就越多。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>而尺寸的标准是你需要学习的主要特征之一。那么如何更改产品图片尺寸以适合您的页面尺寸。<strong>关于Magento 2 图像调整大小</strong>的本主题将通过详细说明向您展示如何执行此操作。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="simple-methods-to-change-the-product-image-size-in-magento-2">在 Magento 2 中更改产品图像尺寸的简单方法</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法1：更改HelloWorld块中的产品图片大小</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法2：更改模板文件中的产品图片尺寸</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-1-change-product-image-in-helloworld-block"><code>HelloWorld</code>方法一：批量更改产品图片</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在 Magento 2 中调整图像大小的第一种方法是通过<strong>HelloWorld 块</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>您将使用 module 的块类，然后可能在模块的块类的构造函数中注入和类<code>Example_HelloWorld</code>的对象。<code>\Magento\Catalog\Model\ProductRepository\Magento\Catalog\Helper\Image</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>app/code/Example/HelloWorld/Block/HelloWorld.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{    
    protected $_productRepository;
    protected $_productImageHelper;
        
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Catalog\Model\ProductRepository $productRepository,
        \Magento\Catalog\Helper\Image $productImageHelper,
        array $data = []
    )
    {
        $this-&gt;_productRepository = $productRepository;
        $this-&gt;_productImageHelper = $productImageHelper;
        parent::__construct($context, $data);
    }
    
    public function getProductById($id)
    {
        return $this-&gt;_productRepository-&gt;getById($id);
    }
    
    public function getProductBySku($sku)
    {
        return $this-&gt;_productRepository-&gt;get($sku);
    }
    
    /**
     * Schedule resize of the image
     * $width *or* $height can be null - in this case, lacking dimension will be calculated.
     *
     * @see \Magento\Catalog\Model\Product\Image
     * @param int $width
     * @param int $height
     * @return $this
     */
    public function resizeImage($product, $imageId, $width, $height = null)
    {
        $resizedImage = $this-&gt;_productImageHelper
                           -&gt;init($product, $imageId)
                           -&gt;constrainOnly(TRUE)
                           -&gt;keepAspectRatio(TRUE)
                           -&gt;keepTransparency(TRUE)
                           -&gt;keepFrame(FALSE)
                           -&gt;resize($width, $height);
        return $resizedImage;
    }    
}
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>当您将产品基础图像的大小调整为精确的高度和宽度时，请记住约束、长宽比和透明度需要正确。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，您可以按照以下示例加载产品，然后更改产品的图像并显示它。这里，<code>produt_base_image</code>使用 来作为图像 ID。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
//Get product object by ID
$id = 'PRODUCT_ID';
$_product = $block-&gt;getProductById($id);

//Get product object by SKU
// $sku = 'PRODUCT_SKU';
// $_product = $block-&gt;getProductBySku($sku);
 
$imageId = 'product_base_image';
$width = 200;
$height = 300;
 
$resizedImageUrl = $block-&gt;resizeImage($product, 'product_base_image', $width, $height)-&gt;getUrl();
?&gt;
&lt;img src="&lt;?php echo $resizedImageUrl;?&gt;" alt="&lt;?php echo $_product-&gt;getTitle();?&gt;" /&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-2-change-product-image-in-the-template-file">方法二：更改模板文件中的产品图片</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>除了自定义 HelloWorld 块之外，您还可以更改模板 (.phtml) 文件中的产品图像。使用下面的代码片段并在模板文件中运行它。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
//Get product object by ID
$id = 'PRODUCT_ID';
$_product = $block-&gt;getProductById($id);

//Get product object by SKU
// $sku = 'PRODUCT_SKU';
// $_product = $block-&gt;getProductBySku($sku);
 
$imageId = 'product_base_image';
$width = 200;
$height = 300;
 
$resizedImageUrl = $_imageHelper
                        -&gt;init($product, $imageId)
                        -&gt;constrainOnly(true)
                        -&gt;keepAspectRatio(true)
                        -&gt;keepTransparency(true)
                        -&gt;keepFrame(false)
                        -&gt;resize($width, $height)
                        -&gt;getUrl();
?&gt;
&lt;img src="&lt;?php echo $resizedImageUrl;?&gt;" alt="&lt;?php echo $_product-&gt;getTitle();?&gt;" /&gt;
</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Wed, 11 Oct 2023 07:58:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[获取父产品：Magento 2 中的捆绑产品、分组产品]]></title>
      <link>https://www.360magento.com/blog/get-parent-product-bundle-grouped-products-in-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Magento 2 支持两种类型的父产品，包括捆绑产品和分组产品。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>今天我将引导您以简单的方式获取<strong>父产品：Magento 2 中的捆绑产品和分组产品。</strong>捆绑产品和分组产品是您可以从Magento 2 商店后端创建的两种产品类型，它们包括一些子产品。您想知道如果您持有子产品的 id，是否可以获得父产品的 id。这里是指导您应该做什么的正确地方。让我们来看看每种产品类型的代码片段。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="bundle-product">捆绑产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>进入类<code>Magento\Bundle\Model\Product\Type</code>，有两个函数：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>/**
* Retrieve Required children ids
* Return grouped array, ex array(
*   group =&gt; array(ids)
* )
*
* @param int $parentId
* @param bool $required
* @return array
*/
public function getChildrenIds($parentId, $required = true)
{
   return $this-&gt;_bundleSelection-&gt;getChildrenIds($parentId, $required);
}
 
/**
* Retrieve parent ids array by required child
*
* @param int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this-&gt;_bundleSelection-&gt;getParentIdsByChild($childId);
}
 
Configurable product: You can see the class Magento\ConfigurableProduct\Model\Product\Type\Configurable, it also has two functions:
 
/**
* Retrieve Required children ids
* Return grouped array, ex array(
*   group =&gt; array(ids)
* )
*
* @param  array|int $parentId
* @param  bool $required
* @return array
*/
public function getChildrenIds($parentId, $required = true)
{
   return $this-&gt;_catalogProductTypeConfigurable-&gt;getChildrenIds($parentId, $required);
}
 
/**
* Retrieve parent ids array by required child
*
* @param  int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this-&gt;_catalogProductTypeConfigurable-&gt;getParentIdsByChild($childId);
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="grouped-product">分组产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento\GroupedProduct\Model\Product\Type\Grouped 类：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>/**
* Retrieve Required children ids
* Return grouped array, ex array(
*   group =&gt; array(ids)
* )
*
* @param int $parentId
* @param bool $required
* @return array
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function getChildrenIds($parentId, $required = true)
{
   return $this-&gt;productLinks-&gt;getChildrenIds(
       $parentId,
       \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
   );
}
 
/**
* Retrieve parent ids array by requested child
*
* @param int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this-&gt;productLinks-&gt;getParentIdsByChild(
       $childId,
       \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
   );
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您要在上面的类中引用的两个函数是<code>getChildrenIds</code>和<code>getParentIdsByChild</code>。这样，定义产品类型是前提，所以当然可以加载产品并声明函数，<code>getTypeInstance</code>如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$product-&gt;getTypeInstance()-&gt;getParentIdsByChild($child-&gt;getId());</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -174px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 10 Oct 2023 07:20:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中 Rest API 中的常见错误 HTTP 代码]]></title>
      <link>https://www.360magento.com/blog/common-error-http-codes-magento-rest-api/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>今天我将向您介绍<strong>Magento 2 Rest API 中的常见错误 HTTP 代码</strong>。首先你还需要知道什么是HTTP？HTTP代表超文本传输​​协议，是网站上的默认协议。在使用该协议的过程中，可能会出现一些常见的错误，这些错误称为HTTP错误代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>下面包含Magento 2 Rest API中的代码列表以及每个常见错误 HTTP 代码的含义，以便更好地理解。为了避免遇到这些错误，您需要首先充分理解每个错误。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-400">HTTP 错误 400</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>持续的：<code>Magento\Framework\Webapi\Exception::HTTP_BAD_REQUEST</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>信息含义： 请求数据无效。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-401">HTTP 错误 401</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_UNAUTHORIZED</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：授权失败。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-403">HTTP 错误 403</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_FORBIDDEN</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：访问被拒绝。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-404">HTTP 错误 404</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_NOT_FOUND</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：找不到资源。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-405">HTTP 错误 405</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_METHOD_NOT_ALLOWED</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：资源不支持方法。/ 资源方法尚未实现。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-406">HTTP 错误 406</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_NOT_ACCEPTABLE</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：所请求的资源不接受该请求。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="http-error-500">HTTP 错误 500</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>常量：Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述：资源内部错误。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>接下来，我将给您提供获取一些错误 HTTP 代码的示例。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您在 API 方法中运行异常：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>if (!$productId) {
 
throw new \Magento\Framework\Exception\NoSuchEntityException(__('Requested product doesn\'t exist'));
 
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>此时，响应中将显示 HTTP 错误 404。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>或者你可以使用Magento中提供的异常类<code>Magento\Framework\Exception</code>，或者使用通用异常类\Exception：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>if (!$productId) {
 
throw new \Exception(__('Requested product doesn\'t exist'));
 
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>确保错误代码始终为 500 (Magento\Framework\Webapi\Exception::HTTP_INTERNAL_ERROR)。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>您可能会收到此错误消息：出于安全原因，默认情况下禁用异常打印</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Mon, 09 Oct 2023 07:14:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更改 Magento 2 中的Block参数]]></title>
      <link>https://www.360magento.com/blog/change-block-arguments-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在这篇文章中，我将指导您如何<strong>更改 Magento 2 中的Block参数</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-change-block-arguments">如何更改块参数</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>首先，您需要修改要更改的目标块参数。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>对于要修改的块参数，<code>&lt;referenceBlock&gt;</code>使用该指令。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>下面是如何更改现有块参数值并添加新参数的示例。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>初始块声明：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;block class="Namespace_Module_Block_Type" name="block.example"&gt;
  &lt;arguments&gt;
    &lt;argument name="label" xsi:type="string"&gt;Block Label&lt;/argument&gt;
  &lt;/arguments&gt;
&lt;/block&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>扩展布局：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;referenceBlock name="block.example"&gt;
  &lt;arguments&gt;
    &lt;!-- Modified block argument --&gt;
    &lt;argument name="label" xsi:type="string"&gt;New Block Label&lt;/argument&gt;
    &lt;!- Newly added block argument --&gt;
    &lt;argument name="custom_label" xsi:type="string"&gt;Custom Block Label&lt;/argument&gt;
  &lt;/arguments&gt;
&lt;/referenceBlock&gt;</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -195px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 08 Oct 2023 07:09:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 布局中创建/引用容器]]></title>
      <link>https://www.360magento.com/blog/create-reference-container-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 中，布局、容器和块是页面设计的基本组成部分。或者 Magento 2 使用容器和块来构建页面布局。在这篇文章中，我将演示如何在 Magento 2 中创建/引用容器。为了帮助您更深入地理解，首先，我将说明和定义一些重要术语：</p>
<p><!-- /wp:paragraph --> <!-- wp:image {"id":4093,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-4093" src="http://kb.360magento.net/wp-content/uploads/2023/09/jL5gcLR.png" /><img src="https://www.360magento.com/media/wysiwyg/jL5gcLR.png" /> <!-- /wp:image --> <!-- wp:paragraph --></p>
<p>(1) 网页的结构由布局来表示。更具体地说，使用标识构成页面的所有容器和块的XML文件，提供网页的结构。稍后将描述布局 XML 文件的详细信息。(2) 网页结构中的占位符由容器表示。通过使用布局 XML 文件中的块标签将内容结构分配给页面。除了包含元素的内容外，没有额外的内容。<br />(3) 容器占位符内的 UI 控件或组件由块表示。通过在布局 XML 文件中使用块标签，可以呈现页面上的 UI 元素。块使用模板来生成 HTML 以插入其父结构块中。块的示例中包含类别列表、迷你购物车、产品列表和产品标签。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，我将向您展示<strong>在 Magento 2 中创建/引用容器的最简单方法。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>创建/引用容器</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>如何创建容器</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如何引用容器</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-create-a-container">如何创建容器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>为了创建容器，您可以使用以下示例：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;container name="some.container" as="someContainer" label="Some Container" htmlTag="div" htmlClass="some-container" /&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-reference-a-container">如何引用容器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>对于要更新的​​容器，请使用<code>&lt;referenceContainer&gt;</code>说明。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>以下是向页面监听器面板添加链接的示例：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;referenceContainer name="header.panel"&gt;
  &lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;
    &lt;arguments&gt;
      &lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;
    &lt;/arguments&gt;
  &lt;/block&gt;
&lt;/referenceContainer&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>如果您想使用容器来包装 div 或 block，请按以下步骤操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;container name="some.container" as="someContainer" label="Some Container" htmlTag="div" htmlClass="some-container"&gt;
  &lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;
    &lt;arguments&gt;
      &lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;
    &lt;/arguments&gt;
  &lt;/block&gt;
&lt;/container&gt;</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -20px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 07 Oct 2023 08:10:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加/删除静态文件 JS、CSS、字体]]></title>
      <link>https://www.360magento.com/blog/add-remove-static-files-js-css-fonts-magento/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在今天的文章中，我将指导您如何在 Magento 2 中<strong>添加和删除静态文件，包括 JS、CSS 和字体。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>通过这个易于理解的教程，添加或删除静态文件 JS、CSS、字体将变得很容易。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>让我们现在开始！</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>添加静态文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>删除静态文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="add">添加静态文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>通常，如果您想在 Magento 2 中使用外部库自定义页面，则需要添加 JavaScript 和 CSS 文件。JavaScript、CSS 和其他静态文件将添加到页面配置文件的 &lt;head&gt; 部分。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在页面配置文件中，该<code>&lt;head&gt;</code>部分包括各种静态资源，例如JavaScript、CSS。该文件定义了Magento 商店页面中<code>app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml</code>该部分的原始外观。<code>&lt;head&gt;</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>要添加 CSS 和 JavaScript，建议您在自定义主题中扩展该文件，然后在其中添加文件。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>以下是必须添加的文件示例：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;head&gt;
    &lt;!-- Add local resources --&gt;
    &lt;css src="css/my-styles.css"/&gt;
    &lt;!-- The following two ways to add local JavaScript files are equal --&gt;
    &lt;script src="Magento_Catalog::js/sample1.js"/&gt;
    &lt;link src="js/sample.js"/&gt;
    &lt;!-- Add external resources --&gt;
    &lt;css src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" src_type="url" /&gt;
    &lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" /&gt;
    &lt;link rel="stylesheet" type="text/css" src="http://fonts.googleapis.com/css?family=Montserrat" src_type="url" /&gt;
  &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>添加外部资源时，您必须指定<code>src_type="url"</code>参数值。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>或<code>&lt;link src="js/sample.js"/&gt;</code>指令<code>&lt;script src="js/sample.js"/&gt;</code>可用于将本地存储的 JavaScript 文件添加到您的主题中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>以下位置之一相对指定资产的路径：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><code>&lt;theme_dir&gt;/web-</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web-</code></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="add-conditional-comments">添加条件注释</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>条件注释用于为 Internet Explorer 提供特殊指令。在添加文件方面，可以为您添加 CSS 文件，以将其包含在 Internet Explorer 的特定版本中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>这是一个例子：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;head&gt;
    &lt;css src="css/ie-9.css" ie_condition="IE 9" /&gt;
  &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>这里，在生成的HTML中添加了一条IE条件注释，请查看以下示例：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;!--[if IE 9]&gt;
&lt;link rel="stylesheet" type="text/css" media="all" href="&lt;your_store_web_address&gt;/pub/static/frontend/OrangeCo/orange/en_US/css/ie-9.css" /&gt;
&lt;![endif]--&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在上面的示例中，<code>orange</code>是 OrangeCo 供应商创建的自定义主题。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="remove">删除静态文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>对于要删除的页面中链接的静态资源<code>&lt;head&gt;</code>，您可以在主题扩展中进行更改，<code>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml</code>如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;head&gt;
    &lt;!-- Remove local resources --&gt;
    &lt;remove src="css/styles-m.css" /&gt;
    &lt;remove src="my-js.js"/&gt;
    &lt;remove src="Magento_Catalog::js/compare.js" /&gt;
    &lt;!-- Remove external resources --&gt;
    &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"/&gt;
    &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"/&gt;
    &lt;remove src="http://fonts.googleapis.com/css?family=Montserrat" /&gt;
   &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您需要记住，如果在初始布局中添加或删除具有模块路径的静态资源，则需要指定模块路径，例如<code>Magento_Catalog::js/sample.js</code>.</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Fri, 06 Oct 2023 02:56:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中将元标签添加到head]]></title>
      <link>https://www.360magento.com/blog/add-meta-tags-header-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>您可能已经知道，页面的 HTML<code>&lt;head&gt;</code>部分包括不同的元标记、CSS、JS 文件定义、JS 代码片段等。通常，不需要复杂的逻辑来添加一些适当的内容。然而，在各种情况下，我们需要将几个取决于系统配置的元素插入到头部。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您一直使用Magento 1，您会发现使用head部分的内容很容易操作。然而，在最新的 Magento 版本中，<strong>向标头添加元标记</strong>对您来说可能有点棘手。因此，在今天的文章中，我将指导您如何添加块和模板，更具体地说，如何将<strong>元标签添加</strong>到 Magento 2 的头部部分。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="add-meta-tags-to-header">将元标签添加到标题</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>为了<code>&lt;meta&gt;</code>向布局<code>&lt;head&gt;</code>元素添加标签，您需要创建一个类似于以下内容的主题扩展文件：<code>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>默认情况下，是呈现标签<code>\Magento\Framework\View\Page\Config\Renderer</code>的类。<code>&lt;meta&gt;</code>有五种类型的元，并且此类呈现包罗万象的（默认）：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>og</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>charset</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>content_type</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>x_ua_compatible</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>media_type</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>&ldquo;default&rdquo; case</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>您可以使用以下内容作为示例来包含在布局主题中：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;head&gt;
    &lt;!-- This will create a tag like '&lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"&gt;' --&gt;
    &lt;meta name="x_ua_compatible" content="IE=edge,chrome=1"/&gt;
    &lt;!-- This will create a tag like '&lt;meta property="og:type" content="article"/&gt;'' --&gt;
    &lt;meta name="og:type" content="article"/&gt;
    &lt;!-- This will create a tag like '&lt;meta charset="UTF-8"&gt;' --&gt;
    &lt;meta name="charset" content="UTF-8"/&gt;
    &lt;!-- This will create a tag like '&lt;meta http-equiv="Content-Type" content="content-type-value"/&gt;' --&gt;
    &lt;meta name="content_type" content="content-type-value"/&gt;
    &lt;!-- This tag will not render (see \Magento\Framework\View\Page\Config\Renderer for details) --&gt;
    &lt;meta name="media_type" content="any-value"/&gt;
    &lt;!-- This will create a tag like '&lt;meta name="my_custom_type" content="my_custom_value"/&gt;' --&gt;
    &lt;meta name="my_custom_type" content="my_custom_value"/&gt;
   &lt;/head&gt;
&lt;/page&gt;</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -13px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 05 Oct 2023 07:49:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 重写布局文件]]></title>
      <link>https://www.360magento.com/blog/overriding-native-layout-file-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>布局可以被视为核心组件之一，因为它使用 XML 文件来表示网页设计的结构，其中适当地显示了用户界面控件。当您想使用自定义扩展调整网页而不弄乱 Magento 核心文件中的内容时，在这种情况下覆盖本机布局文件将是您的最佳选择。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>此外，在Magento 2中，并非所有布局自定义都可以通过扩展布局来执行。如果定制量太大，最好使用覆盖。覆盖布局意味着将使用您在主题中创建的新文件，而不是基本布局文件的父主题布局文件中的布局文件。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在让我们详细了解如何在 Magento 2 中<strong>覆盖本机布局文件</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="magento-2-overriding-native-layout-file">Magento 2 覆盖本机布局文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>特别是，要覆盖 Magento 基本布局文件，您需要在下面提到的位置创建一个布局文件。<code>.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;theme_dir&gt;
  |__/&lt;Namespace_Module&gt;
    |__/layout
      |__/override
         |__/base
           |--&lt;layout1&gt;.xml
           |--&lt;layout2&gt;.xml
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>找到文件后，以下布局将被该文件覆盖：&nbsp;<code>&lt;module_dir&gt;/view/frontend/layout/&lt;layout1&gt;.xml</code>&nbsp;<code>&lt;module_dir&gt;/view/frontend/layout/&lt;layout2&gt;.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="magento-2-override-theme-layouts">Magento 2 覆盖主题布局</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>另一方面，要覆盖主题布局，您可以重复上述步骤。但是，这次您的新布局文件必须位于另一个位置，即：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;theme_dir&gt;
  |__/&lt;Namespace_Module&gt;
    |__/layout
      |__/override
         |__/theme
            |__/&lt;Parent_Vendor&gt;
               |__/&lt;parent_theme&gt;
                  |--&lt;layout1&gt;.xml
                  |--&lt;layout2&gt;.xml
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>以下文件将被覆盖：&nbsp;<code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout1&gt;.xml</code>&nbsp;<code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout2&gt;.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>请记住，您的新布局文件的名称需要与您要覆盖的文件的名称相同。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -86px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 04 Oct 2023 07:46:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 API：创建客户]]></title>
      <link>https://www.360magento.com/blog/create-customer-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>客户可以通过三种方式进行购买：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>购买前请先登录</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>下订单时登录或创建帐户</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>购买时不创建帐户</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>虽然顾客可以通过自己喜欢的方式进行购买，但很方便。如果客户没有在您的商店中创建帐户，您可能很难获取信息来建立客户群。但是，您可以代表他们创建客户帐户。通过这个易于理解的教程，这比您想象的要容易。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在本教程中，订单是由已登录的用户创建的。对于来宾用户，将提供额外的 REST 端点来处理它们。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>但在此之前，让我们按照以下步骤调用API<strong>创建客户。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>使用 Magento 2 API 分 3 个步骤创建客户：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建客户帐户</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：获取客户的访问令牌</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：验证此步骤</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-create-a-customer-account">第 1 步：创建客户帐户</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要创建客户帐户，需要管理员权限。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>注意</strong>：在此示例中，将显示创建客户帐户的简化方法。此处将指定不带密码参数的有效负载，而不是使用纯文本定义客户密码。在默认设置中，当呼叫成功时，将向客户发送一封<em>欢迎电子邮件，其中包含设置密码的请求。</em>此外，通过致电<code>PUT /V1/customers/password</code>，您可以发起密码重置电子邮件。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>POST &lt;host&gt;/rest/&lt;store_code&gt;/V1/customers</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="headers">Headers</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>Content-Type application/json</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>Authorization Bearer &lt;admin token&gt;</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>您应该用真实的电子邮件地址替换电子邮件参数的值。如果您这样做，您就可以收到所有通知。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>代码示例</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
    "customer": {
        "email": "jdoe@example.com",
        "firstname": "Jane",
        "lastname": "Doe",
        "addresses": [{
            "defaultShipping": true,
            "defaultBilling": true,
            "firstname": "Jane",
            "lastname": "Doe",
            "region": {
                "regionCode": "NY",
                "region": "New York",
        "regionId":43
            },
            "postcode": "10755",
            "street": ["123 Oak Ave"],
            "city": "Purchase",
            "telephone": "512-555-1111",
            "countryId": "US"
        }]
    },
  "password": "Password1"
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="response">Response</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>这个用户 ID 值 2 是由 Magento 分配的。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>代码示例</strong>'</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
  "id": 2,
  "group_id": 1,
  "default_billing": "2",
  "default_shipping": "2",
  "created_at": "2017-01-31 01:18:13",
  "updated_at": "2017-01-31 01:18:13",
  "created_in": "Default Store View",
  "email": "jdoe@example.com",
  "firstname": "Jane",
  "lastname": "Doe",
  "store_id": 1,
  "website_id": 1,
  "addresses": [
    {
      "id": 2,
      "customer_id": 2,
      "region": {
        "region_code": "NY",
        "region": "New York",
        "region_id": 43
      },
      "region_id": 43,
      "country_id": "US",
      "street": [
        "123 Oak Ave"
      ],
      "telephone": "512-555-1111",
      "postcode": "10755",
      "city": "Purchase",
      "firstname": "Jane",
      "lastname": "Doe",
      "default_shipping": true,
      "default_billing": true
    }
  ],
  "disable_auto_group_change": 0
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以使用用户名<code>jdoe@example.com</code>和密码<code>Password1</code>登录Luma商店</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-get-the-customers-access-token">第 2 步：获取客户的访问令牌</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>为了获取客户的访问令牌，必须在有效负载中指定客户的用户名和密码。不需要指定管理员授权令牌。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>默认情况下，客户令牌的有效时间为1小时。如果您想更改此值，请登录您的管理面板，然后转至<code>Stores &gt; Settings &gt; Configuration &gt; Services &gt; OAuth &gt; Access Token Expiration</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>POST &lt;host&gt;/rest/&lt;store_code&gt;/V1/integration/customer/token</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="headers-1">Headers</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>Content-Type application/json</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="payload-1">Payload</h3>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
"username": "jdoe@example.com",
"password": "Password1"
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="response-1">Response</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 返回客户的访问令牌。必须在客户代表自己进行的每次调用的授权标头中指定它。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>q0u66k8h42yaevtchv09uyy3y9gaj2ap</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-verify-this-step">第三步：验证此步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>使用邮箱<code>jdoe@example.com</code>和密码<code>Password1</code>登录Luma网站。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击右上角的帐户名称并选择<code>My Account</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要查看帐单和送货地址，请单击<code>Address Book</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Tue, 03 Oct 2023 07:51:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 API 获取所有产品、订单、类别]]></title>
      <link>https://www.360magento.com/blog/get-all-products-orders-categories-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在Magento 2中，您可以调用API轻松获取所有产品。多个 REST 调用会返回数千甚至数百个参数。解析所有这些数据有时可能很麻烦。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>此外，移动应用程序开发人员可能会发现处理不合理的请求需要带宽。为了处理这些问题，为 REST 请求提供了基于查询参数的语法，该语法返回部分响应。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>&lt;host&gt;/rest/&lt;store_code&gt;</code>可以替换为您的网站。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>查询<code>searchCriteria</code>参数使您能够搜索集合中的多个对象。fields 查询参数可以与 结合使用来<code>searchCriteria</code>限制输出。本文档中所有示例中字段前面的问号 (?) 将替换为与号 (&amp;)。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>获取所有产品、订单、类别</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>获取所有产品</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取具有类别的产品</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取所有订单</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>获取类别</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-all-products">获取所有产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>以下查询仅返回category_gear 属性包含值 86 的产品项目的 sku 和名称参数。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>GET &lt;host&gt;/rest/&lt;store_code&gt;/V1/products/?searchCriteria[filter_groups][0][filters][0][field]=category_gear&amp;searchCriteria[filter_groups][0][filters][0][value]=86&amp;searchCriteria[filter_groups][0][filters][0][condition_type]=finset&amp;fields=items[sku,name]</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
"items":
  {
    "sku": "24-MG04"
    "name": "Aim Analog Watch"
  }
  {
    "sku": "24-MG01"
    "name": "Endurance Watch"
  }
  {
    "sku": "24-MG03"
    "name": "Summit Watch"
  }
  {
    "sku": "24-MG05"
    "name": "Cruise Dual Analog Watch"
  }
  {
    "sku": "24-MG02"
    "name": "Dash Digital Watch"
  }
  {
    "sku": "24-WG09"
    "name": "Luma Analog Watch"
  }
  {
    "sku": "24-WG01"
    "name": "Bolo Sport Watch"
  }
  {
    "sku": "24-WG03"
      "name": "Clamber Watch"
  }
  {
    "sku": "24-WG02"
    "name": "Didi Sport Watch"
  }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>每页限制 20 项：<code>/V1/products?searchCriteria[pageSize]=20</code><a href="https://devdocs.magento.com/guides/v2.4/rest/modules/catalog.html"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-products-categories">获取具有类别的产品</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>GET &lt;host&gt;/rest/&lt;store_code&gt;/V1/products/MT12?fields=name,sku,extension_attributes[category_links,stock_item[item_id,qty]]</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
  "sku": "MT12"
  "name": "Cassius Sparring Tank"
  "extension_attributes": {
    "category_links": {
      "position": 1
      "category_id": "18"
    }
    "stock_item": {
      "item_id": 732
      "qty": 0
      }
  }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>上面的示例返回以下结果：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>产品<code>sku</code>的和<code>name</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>整个<code>category_links</code>物体。这是定义在<code>extension_attributes</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>对象<code>stock_item</code>和<code>item_id</code>字段<code>qty</code>。这些也定义在<code>extension_attributes</code></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-all-orders">获取所有订单</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>GET &lt;host&gt;/rest/&lt;store_code&gt;/V1/orders/2?fields=billing_address,customer_firstname,customer_lastname</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
  "customer_firstname": "Veronica"
  "customer_lastname": "Costello"
  "billing_address": {
    "address_type": "billing"
    "city": "Calder"
    "country_id": "US"
    "customer_address_id": 1
    "email": "roni_cost@example.com"
    "entity_id": 4
    "firstname": "Veronica"
    "lastname": "Costello"
    "parent_id": 2
    "postcode": "49628-7978"
    "region": "Michigan"
    "region_code": "MI"
    "region_id": 33
    "street": "6146 Honey Bluff Parkway"
    "telephone": "(555) 229-3326"
    }
  }
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>上面的示例返回客户的名字和姓氏以及<code>billing_address</code>指定订单的整个对象。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>当您希望返回对象的所有内容时，请勿在对象名称后添加括号[]。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-categories">获取类别</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>POST &lt;host&gt;/rest/&lt;store_code&gt;/V1/categories?fields=id,parent_id,name</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>Payload</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
  "category": {
    "name": "New Category",
    "is_active": true
  }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p><strong>Response</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{
  "id": 43,
  "parent_id": 2,
  "name": "New Category"
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>上述 POST 操作和有效负载用于创建名为 的目录类别<code>New Category</code>。这里仅返回<code>id</code>、<code>parent_id</code>和属性。<code>name</code></p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -133px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 02 Oct 2023 07:44:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 自定义产品价格添加购物车]]></title>
      <link>https://www.360magento.com/blog/add-product-to-cart-with-custom-price-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>通常，即使消费者从前端为所有或某些特定产品选择各种选项/附加产品，店主也准备设置固定的产品定价。我们不需要手动更改所有商店产品，而是需要手动编码以使用您首选的自定义价格覆盖所有商店产品价格。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在本文中，我将指导您在使用 Observe<strong>将产品添加到购物车时设置产品的自定义价格。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>让我们探讨下面两个简单的步骤！</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 Events/xml 文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：创建 CustomPrice.php 文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建 Events/xml 文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>首先，您需要<code>events/xml</code>在文件夹中创建<code>Webkul/Hello/etc/frontend</code>并使用事件<code>checkout_cart_product_add_after</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"&gt;
    &lt;event name="checkout_cart_product_add_after"&gt;
        &lt;observer name="customprice" instance="Webkul\Hello\Observer\CustomPrice" /&gt;
    &lt;/event&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">第 2 步：创建 CustomPrice.php 文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在，您必须创建<code>CustomPrice.php</code>覆盖文件夹中价格的文件<code>Observer</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

    namespace Webkul\Hello\Observer;
 
    use Magento\Framework\Event\ObserverInterface;
    use Magento\Framework\App\RequestInterface;
 
    class CustomPrice implements ObserverInterface
    {
        public function execute(\Magento\Framework\Event\Observer $observer) {
            $item = $observer-&gt;getEvent()-&gt;getData('quote_item');         
            $item = ( $item-&gt;getParentItem() ? $item-&gt;getParentItem() : $item );
            $price = 100; //set your price here
            $item-&gt;setCustomPrice($price);
            $item-&gt;setOriginalCustomPrice($price);
            $item-&gt;getProduct()-&gt;setIsSuperMode(true);
        }
 
    }
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>注意：根据您为一种或多种产品设置自定义价格的需要，您可以通过添加条件来操作。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sun, 01 Oct 2023 08:35:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 以编程方式获取最近查看的产品集合]]></title>
      <link>https://www.360magento.com/blog/get-recent-viewed-products-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 2 中显示最近查看的产品是在 Magento 2 商店中吸引客户购买您想要的产品的有效方法。它可以让顾客关注他们最近访问过的所有产品，这将有助于增强顾客的购物体验。对于他们来说，这可能是一个很好的建议，鼓励他们购买他们可能感兴趣的东西。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>为了在 Magento 2 站点上显示<strong>最近查看的产品集合</strong>，商店管理员将需要有关最近查看的产品集合的数据。然而，获取集合有时可能很复杂。因此，在今天的帖子中，我将向您提供<strong>在 Magento 2 中获取最近查看的产品集合的</strong>三个步骤。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-get-recent-viewed-products-collection-in-magento-2">如何在 Magento 2 中获取最近查看的产品集合</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>步骤1：创建RecentProducts区块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤2：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤3：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1">步骤1：创建RecentProducts区块</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获取最近查看的产品集合，首先，您需要创建一个<code>RecentProducts</code>块。为此，请按照路径&nbsp;<code>Example/Productslider/Block/RecentProducts.php</code>添加以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace Example\Productslider\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\App\Http\Context as HttpContext;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Reports\Block\Product\Viewed as ReportProductViewed;
use Example\Productslider\Helper\Data;
/**
 * Class RecentProducts
 * @package Example\Productslider\Block
 */
class RecentProducts extends AbstractSlider
{
    /**
     * @var ReportProductViewed
     */
    protected $reportProductViewed;
    /**
     * RecentProducts constructor.
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     * @param Visibility $catalogProductVisibility
     * @param DateTime $dateTime
     * @param Data $helperData
     * @param HttpContext $httpContext
     * @param ReportProductViewed $reportProductViewed
     * @param array $data
     */
    public function __construct(
        Context $context,
        CollectionFactory $productCollectionFactory,
        Visibility $catalogProductVisibility,
        DateTime $dateTime,
        Data $helperData,
        HttpContext $httpContext,
        ReportProductViewed $reportProductViewed,
        array $data = []
    ) {
        $this-&gt;reportProductViewed = $reportProductViewed;
        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);
    }
    /**
     * Get Collection Recently Viewed product
     * @return mixed
     */
    public function getProductCollection()
    {
        return $this-&gt;reportProductViewed-&gt;getItemsCollection()-&gt;setPageSize($this-&gt;getProductsCount());
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2">步骤2：插入phtml文件</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>将集合放入区块后，现在您可以按照此代码片段从区块中获取产品集合<code>Example/HelloWorld/view/frontend/templates/list.phtml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然后，请在 phtml 文件中插入以下代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -80px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 30 Sep 2023 08:28:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何获取愿望清单产品集合]]></title>
      <link>https://www.360magento.com/blog/get-wishlist-products-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>显示<strong>心愿单产品</strong>对鼓励客户从您的商店购买商品有积极的影响，因为它提醒客户他们有想要订购的首选产品。愿望清单也是您可以了解客户的购买兴趣和购物倾向的地方。因此，在 Magento 2 商店中处理此功能非常重要。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>为了在网站上显示<strong>愿望清单产品集合，商店管理员将需要有关愿望清单产品集合的数据。</strong>然而，获取集合并不是一项简单的任务，尽管有几篇文章写了有关此问题的解决方案，但没有一篇真正有效。因此，在今天的帖子中，我将为您提供在 Magento 2 中<strong>获取愿望清单产品集合的</strong>三个步骤。所有步骤都很容易遵循，我相信您将能够解决您商店的愿望清单产品集合当前的问题。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>3步获取心愿单产品系列</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 WishlistProducts 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建 WishlistProducts 块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获得愿望清单产品集合，首先，您需要创建一个<code>WishlistProducts</code>块。为此，请按照路径<code><span>Example</span>/Productslider/Block/WishlistProducts.php</code>添加以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\Productslider\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\App\Http\Context as HttpContext;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory as WishlistCollectionFactory;
use <span>Example</span>\Productslider\Helper\Data;
/**
 * Class FeaturedProducts
 * @package <span>Example</span>\Productslider\Block
 */
class WishlistProducts extends AbstractSlider
{
    /**
     * @var WishlistCollectionFactory
     */
    protected $_wishlistCollectionFactory;
    /**
     * WishlistProducts constructor.
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     * @param Visibility $catalogProductVisibility
     * @param DateTime $dateTime
     * @param Data $helperData
     * @param HttpContext $httpContext
     * @param WishlistCollectionFactory $wishlistCollectionFactory
     * @param array $data
     */
    public function __construct(
        Context $context,
        CollectionFactory $productCollectionFactory,
        Visibility $catalogProductVisibility,
        DateTime $dateTime,
        Data $helperData,
        HttpContext $httpContext,
        WishlistCollectionFactory $wishlistCollectionFactory,
        array $data = []
    ) {
        $this-&gt;_wishlistCollectionFactory = $wishlistCollectionFactory;
        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);
    }
    /**
     * @inheritdoc
     */
    public function getProductCollection()
    {
        $collection = [];
        if ($this-&gt;_customer-&gt;isLoggedIn()) {
            $wishlist = $this-&gt;_wishlistCollectionFactory-&gt;create()
                -&gt;addCustomerIdFilter($this-&gt;_customer-&gt;getCustomerId());
            $productIds = null;
            foreach ($wishlist as $product) {
                $productIds[] = $product-&gt;getProductId();
            }
            $collection = $this-&gt;_productCollectionFactory-&gt;create()-&gt;addIdFilter($productIds);
            $collection = $this-&gt;_addProductAttributesAndPrices($collection)-&gt;addStoreFilter($this-&gt;getStoreId())-&gt;setPageSize($this-&gt;getProductsCount());
        }
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">步骤2：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>将集合放入区块后，现在您可以按照此代码片段从区块中获取产品集合<code><code>Example</code>/HelloWorld/view/frontend/templates/list.phtml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然后，请在 phtml 文件中插入以下代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -57px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 29 Sep 2023 08:31:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2如何获取特价产品集合]]></title>
      <link>https://www.360magento.com/blog/get-on-sale-products-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>为了在网站上显示<strong>促销产品系列，商店管理员将需要有关促销产品系列的数据。</strong>然而，获取集合并不是一件简单的任务，并且也没有太多文章来写这方面的解决方案。因此，在今天的帖子中，我将指导您如何在 Magento 2 中<strong>获得特价产品系列</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>3步获取特价产品系列</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 OnSaleProduct 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-create-onsaleproduct-block-">第 1 步：创建 OnSaleProduct 块 {}</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获得特价产品集合，首先，您需要创建一个<code>OnSaleProduct</code>块。为此，请按照路径&nbsp;<code>Mageplaza/Productslider/Block/OnSaleProduct.php</code>添加以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\Productslider\Block;
use Zend_Db_Expr;
/**
 * Class OnSaleProduct
 * @package <span>Example</span>\Productslider\Block
 */
class OnSaleProduct extends AbstractSlider
{
    /**
     * @inheritdoc
     */
    public function getProductCollection()
    {
        $visibleProducts = $this-&gt;_catalogProductVisibility-&gt;getVisibleInCatalogIds();
        $collection = $this-&gt;_productCollectionFactory-&gt;create()-&gt;setVisibility($visibleProducts);
        $collection = $this-&gt;_addProductAttributesAndPrices($collection)
            -&gt;addAttributeToFilter(
                'special_from_date',
                ['date' =&gt; true, 'to' =&gt; $this-&gt;getEndOfDayDate()],
                'left'
            )-&gt;addAttributeToFilter(
                'special_to_date',
                ['or' =&gt; [0 =&gt; ['date' =&gt; true,
                                                   'from' =&gt; $this-&gt;getStartOfDayDate()],
                                             1 =&gt; ['is' =&gt; new Zend_Db_Expr(
                                                 'null'
                                             )],]],
                'left'
            )-&gt;addAttributeToSort(
                'news_from_date',
                'desc'
            )-&gt;addStoreFilter($this-&gt;getStoreId())-&gt;setPageSize(
                $this-&gt;getProductsCount()
            );
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-insert-in-phtml-file-">第2步：插入phtml文件{}</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>将集合放入区块后，现在您可以按照此代码片段从区块中获取产品集合<code><code>Example</code>/HelloWorld/view/frontend/templates/list.phtml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然后，请在 phtml 文件中插入以下代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}

</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-flush-cache--test-result-">第 3 步：刷新缓存和测试结果{}</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -331px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 28 Sep 2023 07:59:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何获取浏览量最高的产品]]></title>
      <link>https://www.360magento.com/blog/get-most-viewed-product-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>展示浏览次数最多的产品通常用于吸引客户使用该产品，也可以作为对他们的推荐。这个浏览次数最多的产品系列对于对商店中销售的产品不太了解的首次访问用户特别有帮助。它可以帮助他们更轻松地选择最好的商品。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>浏览次数最多的产品</strong>在帮助您的商店提高销量方面发挥着重要作用。这是因为在您的网站上展示这些产品可以引导客户收集最有趣的产品，而不是让他们毫无方向地闲逛。但是，要显示浏览次数最多的产品，您需要获取浏览次数最多的产品集合。因此，在今天的文章中，我将指导您如何在 Magento 2 中<strong>获得浏览次数最多的产品集合</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>获取浏览次数最多的产品系列的 3 个步骤</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 MostViewedProducts 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建 MostViewedProducts 块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获得浏览次数最多的产品集合，首先，您需要创建一个<code>MostViewedProducts</code>块。为此，请按照路径<code>Example/Productslider/Block/MostViewedProducts.php</code>添加以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace Example\Productslider\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\App\Http\Context as HttpContext;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Mageplaza\Productslider\Helper\Data;
use Example\Productslider\Model\ResourceModel\Report\Product\CollectionFactory as MostViewedCollectionFactory;
/**
 * Class MostViewedProducts
 * @package Mageplaza\Productslider\Block
 */
class MostViewedProducts extends AbstractSlider
{
    /**
     * @var MostViewedCollectionFactory
     */
    protected $_mostViewedProductsFactory;
    /**
     * MostViewedProducts constructor.
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     * @param Visibility $catalogProductVisibility
     * @param DateTime $dateTime
     * @param Data $helperData
     * @param HttpContext $httpContext
     * @param MostViewedCollectionFactory $mostViewedProductsFactory
     * @param array $data
     */
    public function __construct(
        Context $context,
        CollectionFactory $productCollectionFactory,
        Visibility $catalogProductVisibility,
        DateTime $dateTime,
        Data $helperData,
        HttpContext $httpContext,
        MostViewedCollectionFactory $mostViewedProductsFactory,
        array $data = []
    ) {
        $this-&gt;_mostViewedProductsFactory = $mostViewedProductsFactory;
        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);
    }
    /**
     * Get Product Collection of MostViewed Products
     * @return mixed
     */
    public function getProductCollection()
    {
        $collection = $this-&gt;_mostViewedProductsFactory-&gt;create()
            -&gt;addAttributeToSelect('*')
            -&gt;setStoreId($this-&gt;getStoreId())-&gt;addViewsCount()
            -&gt;addStoreFilter($this-&gt;getStoreId())
            -&gt;setPageSize($this-&gt;getProductsCount());
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">第 2 步：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在块中拥有集合后，现在您可以按照此代码片段从块中获取产品集合<code>Example/HelloWorld/view/frontend/templates/list.phtml</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>接下来，请在phtml文件中插入以下代码</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Wed, 27 Sep 2023 07:20:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2编程方式获取特色产品]]></title>
      <link>https://www.360magento.com/blog/get-featured-product-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 商店中展示<strong>特色产品</strong>是交叉销售和追加销售产品的有效方式。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然而，为了展示特色产品，商店管理员需要获取特色产品集合，这对于新开发人员或非技术商店管理员来说可能并不容易。因此，在今天的文章中，我将向您展示在 Magento 2 中<strong>获取特色产品集合的</strong>三个步骤。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>在 Magento 2 中获取特色产品系列的 3 个步骤</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建特色产品块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建特色产品块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获取特征产品集合，首先需要创建一个<code>FeaturedProducts</code>块。为此，请按照路径<code>Example/Productslider/Block/FeaturedProducts.php</code>添加以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\Productslider\Block;
/**
 * Class FeaturedProducts
 * @package Example\Productslider\Block
 */
class FeaturedProducts extends AbstractSlider
{
    /**
     * get collection of feature products
     * @return mixed
     */
    public function getProductCollection()
    {
        $visibleProducts = $this-&gt;_catalogProductVisibility-&gt;getVisibleInCatalogIds();
        $collection = $this-&gt;_productCollectionFactory-&gt;create()-&gt;setVisibility($visibleProducts);
        $collection-&gt;addMinimalPrice()
            -&gt;addFinalPrice()
            -&gt;addTaxPercents()
            -&gt;addAttributeToSelect('*')
            -&gt;addStoreFilter($this-&gt;getStoreId())
            -&gt;setPageSize($this-&gt;getProductsCount())
            -&gt;addAttributeToFilter('is_featured', '1');
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">步骤2：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在块中拥有集合后，现在您可以按照此代码片段从块中获取产品集合<code><code>Example</code>/HelloWorld/view/frontend/templates/list.phtml</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>接下来，请将以下代码插入<code>phtml file</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，为了完成获取特色产品集合，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -135px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 26 Sep 2023 08:15:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 获得畅销产品集合]]></title>
      <link>https://www.360magento.com/blog/get-best-sellers-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在网上商店中，每种产品都会有不同的销售数量。有必要了解商店中所有产品的销售情况，看看哪种产品卖得最好，哪种产品卖得不好。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>当谈到畅销产品时，它通常被用作对客户，尤其是初次购买的客户的良好推荐。在商店中展示畅销产品以在购物旺季获得更多销售额也是一个明智的策略。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>要显示畅销产品，您将需要有关<strong>畅销产品集合的</strong>数据。因此，在今天的帖子中，我将为您提供三个阶段来帮助您<strong>获得 Magento 2 的畅销书收藏</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过三步获得畅销书系列</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 BestSellerProducts 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建 BestSellerProducts 块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获得畅销书系列，您要做的第一件事就是创建 BestSellerProducts 块。沿着这条路走<code>Example/Productslider/Block/BestSellerProducts.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\Productslider\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\Product\Visibility;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\App\Http\Context as HttpContext;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory as BestSellersCollectionFactory;
use <span>Example</span>\Productslider\Helper\Data;
/**
 * Class BestSellerProducts
 * @package <span>Example</span>\Productslider\Block
 */
class BestSellerProducts extends AbstractSlider
{
    /**
     * @var BestSellersCollectionFactory
     */
    protected $_bestSellersCollectionFactory;
    /**
     * BestSellerProducts constructor.
     * @param Context $context
     * @param CollectionFactory $productCollectionFactory
     * @param Visibility $catalogProductVisibility
     * @param DateTime $dateTime
     * @param Data $helperData
     * @param HttpContext $httpContext
     * @param BestSellersCollectionFactory $bestSellersCollectionFactory
     * @param array $data
     */
    public function __construct(
        Context $context,
        CollectionFactory $productCollectionFactory,
        Visibility $catalogProductVisibility,
        DateTime $dateTime,
        Data $helperData,
        HttpContext $httpContext,
        BestSellersCollectionFactory $bestSellersCollectionFactory,
        array $data = []
    ) {
        $this-&gt;_bestSellersCollectionFactory = $bestSellersCollectionFactory;
        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);
    }
    /**
     * get collection of best-seller products
     * @return mixed
     */
    public function getProductCollection()
    {
        $productIds = [];
        $bestSellers = $this-&gt;_bestSellersCollectionFactory-&gt;create()
            -&gt;setPeriod('month');
        foreach ($bestSellers as $product) {
            $productIds[] = $product-&gt;getProductId();
        }
        $collection = $this-&gt;_productCollectionFactory-&gt;create()-&gt;addIdFilter($productIds);
        $collection-&gt;addMinimalPrice()
            -&gt;addFinalPrice()
            -&gt;addTaxPercents()
            -&gt;addAttributeToSelect('*')
            -&gt;addStoreFilter($this-&gt;getStoreId())-&gt;setPageSize($this-&gt;getProductsCount());
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">步骤2：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在块中拥有集合后，现在您可以按照上面的代码片段从块中获取产品集合<code><span>Example</span>/HelloWorld/view/frontend/templates/list.phtml</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然后，在 phtml 文件中插入以下代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
$collection = $block-&gt;getProductCollection();
foreach ($collection as $_product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Mon, 25 Sep 2023 07:39:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2以编程方式 获取评论、评级的集合]]></title>
      <link>https://www.360magento.com/blog/get-review-rating-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>您可能已经知道，<strong>评论和评级</strong>在每个在线业务中都发挥着重要作用，尤其是在 Magento 2 平台上运行的业务，因为它直接关系到商店的声誉以及客户的购买决策。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>因此，在今天的帖子中，我将为您提供在 Magento 2 中<strong>获取评论和评级集合</strong>的最简单方法。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-get-review-rating-collection">如何获取评论、评分集合</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获得产品评论、评级集合，您需要创建一个<code>ProductReviews.php</code>文件。遵循这条路径<code>Example/HelloWorld/Model/ProductReviews.php</code>，以下是您将如何做到的。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\HelloWorld\Model;
use Magento\Framework\Model\AbstractModel;
class ProductReviews extends AbstractModel{

    protected $_ratingFactory;
    protected $_productFactory;
    protected $_ratingFactory;
    protected $_reviewFactory;

    public function __construct(
            \Magento\Store\Model\StoreManagerInterface $storeManager,
            \Magento\Catalog\Model\ProductFactory $productFactory,
            \Magento\Review\Model\RatingFactory $ratingFactory,
            \Magento\Review\Model\ResourceModel\Review\CollectionFactory $reviewFactory,
        ) {
            $this-&gt;_storeManager = $storeManager;
            $this-&gt;_productFactory = $productFactory;
            $this-&gt;_ratingFactory = $ratingFactory;
            $this-&gt;_reviewFactory = $reviewFactory;
        }

    public function getReviewCollection($productId){
        $collection = $this-&gt;_reviewFactory-&gt;create()
        -&gt;addStatusFilter(
            \Magento\Review\Model\Review::STATUS_APPROVED
        )-&gt;addEntityFilter(
            'product',
            $productId
        )-&gt;setDateOrder();

    }

    public function getRatingCollection(){
        $ratingCollection = $this-&gt;_ratingFactory-&gt;create()
        -&gt;getResourceCollection()
        -&gt;addEntityFilter(
            'product' 
        )-&gt;setPositionOrder()-&gt;setStoreFilter(
            $this-&gt;_storeManager-&gt;getStore()-&gt;getId()
        )-&gt;addRatingPerStoreName(
            $this-&gt;_storeManager-&gt;getStore()-&gt;getId()
        )-&gt;load();

        return $ratingCollection-&gt;getData();
    }

}</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -74px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 24 Sep 2023 07:52:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2根据产品可见性获取集合]]></title>
      <link>https://www.360magento.com/blog/get-product-collection-filter-visibility-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在今天的文章中，我将指导您如何在 Magento 2 中<strong>按可见性获取产品集合过滤器。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>可见性是产品属性，而不是类别属性。有时，店主会希望将产品的可见性限制在特定的客户群中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在本教程中，您将学习如何通过可见性通过 3 个步骤获取产品集合过滤器：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过可见性获取产品集合过滤器</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 Products.php 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建 Products.php 块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要按可见性获取产品集合过滤器，首先，您需要创建一个<code>Products.php</code>块。为了创建它，请遵循以下路径<code>Example/HelloWorld/Block/Products.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace <span>Example</span>\HelloWorld\Block;
class Products extends \Magento\Framework\View\Element\Template
{    
  
    protected $productCollectionFactory;
    protected $productVisibility;
    protected $productStatus;
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,        
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
        \Magento\Catalog\Model\Product\Visibility $productVisibility,
        array $data = []
    )
    {
        $this-&gt;productCollectionFactory = $productCollectionFactory;
        $this-&gt;productStatus = $productStatus;
        $this-&gt;productVisibility = $productVisibility;
        parent::__construct($context, $data);
    }
    public function getProductCollection()
    {
        $collection = $this-&gt;productCollectionFactory-&gt;create();
        $collection-&gt;addAttributeToFilter('status', ['in' =&gt; $this-&gt;productStatus-&gt;getVisibleStatusIds()]);
        $collection-&gt;setVisibility($this-&gt;productVisibility-&gt;getVisibleInSiteIds());
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">步骤2：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在您的块中已有集合后，现在按照以下代码片段从块中获取产品集合：<code><code>Example</code>/HelloWorld/view/frontend/templates/product-list.phtml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$collection = $block-&gt;getProductCollection;
foreach ($collectionas $_product) {
    echo $_product-&gt;getName() . ' - ' . $_product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，为了完成通过可见性获取产品集合过滤器，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sat, 23 Sep 2023 07:50:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 使用筛选获取所有订单集合]]></title>
      <link>https://www.360magento.com/blog/get-all-order-collection-filters-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在业务管理过程中，Magento 2商店可能需要过滤所有订单集合以进行进一步分析。在今天的文章中，我想向您展示如何通过按客户、日期、状态和付款方式<strong>进行筛选来获取所有订单集合</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何获取所有订单集合</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法1：通过过滤器获取所有订单集合</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法2：按客户ID获取所有订单集合</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法3：按日期获取订单集合</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法4：按状态获取订单集合</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法5：按付款方式获取订单集合</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-1-get-all-order-collection-with-filters">方法一：通过过滤器获取所有订单集合</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要获取带有过滤器的所有订单集合，请转到以下路径<code>Example/HelloWorld/Block/Orders.php</code>并创建一个<code>Orders.php</code>文件。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class Products extends \Magento\Framework\View\Element\Template
{    
  
     protected $_orderCollectionFactory;

    public function __construct(
        Magento\Framework\App\Action\Context $context,
        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory 
    ) {
        $this-&gt;_orderCollectionFactory = $orderCollectionFactory;
        parent::__construct($context);

    }


   public function getOrderCollection()
   {
       $collection = $this-&gt;_orderCollectionFactory-&gt;create()
         -&gt;addAttributeToSelect('*')
         -&gt;addFieldToFilter($field, $condition); //Add condition if you wish
     
     return $collection;
     
    }


   public function getOrderCollectionByCustomerId($customerId)
   {
       $collection = $this-&gt;_orderCollectionFactory()-&gt;create($customerId)
         -&gt;addFieldToSelect('*')
         -&gt;addFieldToFilter('status',
                ['in' =&gt; $this-&gt;_orderConfig-&gt;getVisibleOnFrontStatuses()]
            )
         -&gt;setOrder(
                'created_at',
                'desc'
            );
 
     return $collection;

    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-2-get-all-order-collection-filter-by-customer">方法2：按客户获取所有订单集合过滤器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在前端开发 Magento 2 扩展（例如&ldquo;我的帐户&rdquo;）时，您可能需要在后端的网格中显示现有的客户订单。以下是我们如何按客户获取所有订单过滤器：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>   public function getOrderCollectionByCustomerId($customerId)
   {
       $collection = $this-&gt;_orderCollectionFactory()-&gt;create($customerId)
         -&gt;addFieldToSelect('*')
         -&gt;addFieldToFilter('status',
                ['in' =&gt; $this-&gt;_orderConfig-&gt;getVisibleOnFrontStatuses()]
            )
         -&gt;setOrder(
                'created_at',
                'desc'
            );
 
     return $collection;

    }

</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-3-get-order-collection-filter-by-date">方法3：按日期获取订单集合过滤器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>除了按客户获取订单收集过滤器之外，您还可以按日期获取订单收集过滤器。我们是这样做的：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code> public function getOrderCollectionByDate($from, $to)
   {
       $collection = $this-&gt;_orderCollectionFactory()-&gt;create($customerId)
         -&gt;addFieldToSelect('*')
         -&gt;addFieldToFilter('status',
                ['in' =&gt; $this-&gt;_orderConfig-&gt;getVisibleOnFrontStatuses()]
            )
         -&gt;setOrder(
                'created_at',
                'desc'
            );
 
     return $collection;

    }
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-4-get-order-collection-filter-by-status">方法4：按状态获取订单集合过滤器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>获取订单收集过滤器的第四种方法是按状态。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>public function getOrderCollectionByStatus($statuses = [])
   {
       $collection = $this-&gt;_orderCollectionFactory()-&gt;create($customerId)
         -&gt;addFieldToSelect('*')
         -&gt;addFieldToFilter('status',
                ['in' =&gt; $statuses]
            )
         ;
 
     return $collection;

    }
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-5-get-order-collection-filter-by-payment-method">方法5：按付款方式获取订单收集过滤器</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>除了上述解决方案可以帮助您获得订单收集过滤器之外，还有另一种方法。以下指南将向您展示如何按付款方式获取订单收集过滤器。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>public function getOrderCollectionPaymentMethod($paymentMethod)
   {
       $collection = $this-&gt;_orderCollectionFactory()-&gt;create($customerId)
         -&gt;addFieldToSelect('*')
         -&gt;addFieldToFilter('created_at',
                ['gteq' =&gt; $from]
            )
         -&gt;addFieldToFilter('created_at',
                ['lteq' =&gt; $to]
            );
 

     /* join with payment table */
    $collection-&gt;getSelect()
    -&gt;join(
        ["sop" =&gt; "sales_order_payment"],
        'main_table.entity_id = sop.parent_id',
        array('method')
    )
    -&gt;where('sop.method = ?',$paymentMethod); //E.g: ccsave

    $collection-&gt;setOrder(
        'created_at',
        'desc'
    );

     return $collection;

    }</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -189px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 22 Sep 2023 07:59:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中如何根据类别 ID 获取产品集合]]></title>
      <link>https://www.360magento.com/blog/get-product-collection-category-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>今天我们将介绍一个简短但有用的教程，介绍如何在 Magento 2 中通过类别 ID 获取产品集合。这是一种获取产品集合的快速方法，可以为商店管理员和客户节省大量配置时间。这就是为什么您可能会看到在线商店中的客户需要它。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>随着Magento的快速发展，产品集合变得越来越重要。这是因为，在不同的项目中，不同的过滤器和需求通常需要产品集合。现在让我们了解一下产品集合以及如何在 Magento 2 中通过类别 ID 获取它。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>**如何通过类别 ID 分 3 步获取产品集合：**</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建 Products.php 块</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：插入phtml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：刷新缓存和测试结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>现在请按照以下步骤及时完成工作。您不需要更改核心代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-create-productsphp-block">第 1 步：创建 Products.php 块</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>为了按类别 ID 获取产品集合，您要做的第一件事就是创建<code>Products.php</code>块。遵循以下路径：<code>Example/HelloWorld/Block/Products.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace <span>Example</span>\HelloWorld\Block;
class Products extends \Magento\Framework\View\Element\Template
{    
  
     /**
     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
     */
    protected $_productCollectionFactory;
  
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,        
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
    )
    {    
        $this-&gt;_productCollectionFactory = $productCollectionFactory;
        parent::__construct($context);
    }
    
    
    public function getProductCollectionByCategories($ids)
    {
        $collection = $this-&gt;_productCollectionFactory-&gt;create();
        $collection-&gt;addAttributeToSelect('*');
        $collection-&gt;addCategoriesFilter(['in' =&gt; ids]);
        return $collection;
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>这里，<code>$ids</code>是一个数组，其中包含类别 id。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>$_productCollectionFactory</code>是产品集合工厂的对象，用于获取产品模型的集合。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>addCategoriesFilter</code>应用类别过滤器的功能。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>$collection</code>返回分配给给定类别的产品集合。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-insert-in-phtml-file">步骤2：插入phtml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>完成上述步骤后，您的块中将有一个集合，现在要获取块中的 Product 集合，请按照以下代码片段操作：<code><span>Example</span>/HelloWorld/view/frontend/templates/list.phtml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$ids = [1,2,3];
$categoryProducts = $block-&gt;getProductCollectionByCategories($ids);
foreach ($categoryProducts as $product) {
    echo $product-&gt;getName() . ' - ' . $product-&gt;getProductUrl() . '&lt;br /&gt;';
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-flush-cache--test-result">第 3 步：刷新缓存和测试结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在，让我们刷新缓存并测试结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -15px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Thu, 21 Sep 2023 07:45:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中禁用付款方式]]></title>
      <link>https://www.360magento.com/blog/disable-payment-method-programmatically-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>支付系统管理可以被认为是 Magento 2 商店系统的核心之一，因为一个好的处理系统可以帮助您优化您的销售、利润以及您的努力。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>有时，您会希望根据客户组、产品/订单属性、运输参数等限制特定的<strong>付款方式</strong>。换句话说，您可以通过 Magento 2 后端配置以编程方式禁用付款方式。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在今天的文章中，我将向您展示<strong>在 Magento 2 中以编程方式禁用付款方式的</strong>2 个简单阶段。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>在 Magento 2 中以编程方式禁用付款方式的 2 个步骤：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>步骤1：编辑config.xml文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤2：编辑Observer.php文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">步骤1：编辑config.xml文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要以编程方式禁用付款方式，首先，您需要打开该<code>config.xml</code>文件，然后将以下代码添加到该文件中：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;global&gt;
&nbsp; &nbsp; ...
&nbsp; &nbsp; &lt;events&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;payment_method_is_active&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;observers&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;disable_paymentmethod&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;class&gt;Vendor_Extension_Model_Observer&lt;/class&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;method&gt;paymentMethodIsActive&lt;/method&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/disable_paymentmethod&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/observers&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/payment_method_is_active&gt;
&nbsp; &nbsp; &lt;/events&gt;
&nbsp; &nbsp; ...
&lt;/global&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">步骤2：编辑Observer.php文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>Observer.php</code>在此步骤中，应在文件中添加以下代码</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
class Vendor_Extension_Model_Observer {
&nbsp; &nbsp; public function paymentMethodIsActive(Varien_Event_Observer $observer) {
&nbsp; &nbsp; &nbsp; &nbsp; $method = $observer-&gt;getMethodInstance();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; if ($method-&gt;getCode() == 'payment_method_code') {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (condition) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result = $observer-&gt;getResult();
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result-&gt;isAvailable = false;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; }
}</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Wed, 20 Sep 2023 07:44:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 的客户帐户中添加自定义选项卡]]></title>
      <link>https://www.360magento.com/blog/add-custom-tab-customer-account-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>关于 Magento 2 的默认设置，客户在注册或登录后将自动重定向到其<strong>帐户仪表板。在此仪表板中，有各种选项卡，例如&ldquo;我的帐户&rdquo;、&ldquo;我的订单&rdquo;、&ldquo;我的愿望清单&rdquo;。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>然而，在某些特定情况下，为了增强客户购物体验，需要在客户帐户仪表板中添加一些功能，例如检查演示产品、请求退款或其他<strong>自定义要求。</strong>遗憾的是，默认的 Magento 2 中并未提供这些功能。因此，在今天的帖子中，我将向您展示<strong>在客户帐户中添加自定义选项卡的 4 个简单阶段</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过 4 个步骤在客户帐户中添加自定义选项卡</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建客户帐户布局</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：创建索引布局</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：创建索引页</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第四步：创建模板文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：创建客户帐户布局</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>首先，您需要<code>customer_account.xml</code>在路径中创建文件<code><code>Example</code>/Module/view/frontend/layout</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
&lt;body&gt;
&lt;referenceBlock name="customer_account_navigation"&gt;
&lt;block class="Magento\Framework\View\Element\Html\Link\Current" name="customer-account-navigation-custom"&gt;
&lt;arguments&gt;
&lt;argument name="path" xsi:type="string"&gt;routename/customer/index&lt;/argument&gt;
&lt;argument name="label" xsi:type="string"&gt;My Custom Tab&lt;/argument&gt;
&lt;/arguments&gt;
&lt;/block&gt;
&lt;/referenceBlock&gt;
&lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">第 2 步：创建索引布局</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>创建上述文件后，也在路径中<code><code>Example</code>/Module/view/frontend/layout</code>创建，<code>routename_customer_index.xml</code>其中包含以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"&gt; 
&lt;update handle="customer_account"/&gt; 
&lt;body&gt; 
&lt;referenceBlock name="page.main.title"&gt; 
&lt;action method="setPageTitle"&gt; 
&lt;argument translate="true" name="title" xsi:type="string"&gt;My Custom Tab&lt;/argument&gt; 
&lt;/action&gt; 
&lt;/referenceBlock&gt; 
&lt;referenceContainer name="content"&gt; 
&lt;block class="Magento\Framework\View\Element\Template" name="my_tab" template="Vendor_Module::mytab.phtml"&gt; 
&lt;/block&gt; 
&lt;/referenceContainer&gt; 
&lt;/body&gt; 
&lt;/page&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3">第 3 步：创建索引页</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>然后转到<code><code>Example</code>/Module/Controller/Customer</code>并创建<code>Index.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php 
namespace Example/Module\Controller\Customer;  
class Index extends \Magento\Framework\App\Action\Action { 
public function execute() { 
$this-&gt;_view-&gt;loadLayout(); 
$this-&gt;_view-&gt;renderLayout(); 
} 
} 
?&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-4">第四步：创建模板文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后，在客户帐户仪表板中添加自定义选项卡很容易，您只需遵循路径<code><code>Example</code>/Module/view/frontend/templates</code>并创建<code>mytab.phtml</code>.</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php 
// Add Some Code Here for design
?&gt;
&lt;span&gt; My Custom Tab.. &lt;/span&gt;</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Tue, 19 Sep 2023 08:28:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中编程方式获取客户集合]]></title>
      <link>https://www.360magento.com/blog/get-customer-collection-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>客户收集</strong>是为商店管理员提供了各种好处。但最显着的优点是它允许您按属性过滤商店的所有客户。因此，在本教程中，我将指导您<strong>如何在 Magento 2 中编程方式获取客户集合</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过两步获取客户集合：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：获取客户对象</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：获取客户详细信息</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-object">步骤1：获取客户对象</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 提供了各种方法来帮助您获取对象，例如从工厂、存储库、通过对象管理器获取或直接注入它。您可以使用任何您喜欢的方法，但是在使用对象管理器之前您应该仔细考虑，虽然它很简单，但它不是最好的方法。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>下面是可用于注入客户工厂和客户对象的行代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>class MyClass 
{
    protected $_customer;
    protected $_customerFactory;

    public function __construct(...
                                \Magento\Customer\Model\CustomerFactory $customerFactory,
                                \Magento\Customer\Model\Customer $customers
    )
    {
        ...
        $this-&gt;_customerFactory = $customerFactory;
        $this-&gt;_customer = $customers;
    }

    public function getCustomerCollection() {
        return $this-&gt;_customer-&gt;getCollection()
               -&gt;addAttributeToSelect("*")
               -&gt;load();
    }

    public function getFilteredCustomerCollection() {
        return $this-&gt;_customerFactory-&gt;create()-&gt;getCollection()
                -&gt;addAttributeToSelect("*")
                -&gt;addAttributeToFilter("firstname", array("eq" =&gt; "Max"))
                -load();
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>尽管同时注入客户对象和客户工厂可能毫无意义，但这将是一个很好的演示，供您在注入其他对象时参考。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>使用第一种方法<code>getCustomerCollection()</code>，返回所有客户的加载集合，包括所有属性。但是，如果由于内存限制而具有太多属性，则使用此方法并不是一个好主意。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>要从给定的客户工厂获取对象，<code>getFilteredCustomerCollection()</code>请应用第二种方法。使用这种方法，您只需要添加<code>create()</code>，您还可以添加过滤器来过滤您的集合。此时，您将收到所有具有名字的客户的集合，例如 Max。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="get-detail">第 2 步：获取客户详细信息</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>为了获取客户的详细信息，您将需要他们的 ID，因为客户集合需要按客户 ID 加载。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>为了更容易理解，假设客户 ID 为 10。您将通过运行以下命令获取客户详细信息：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$customerID = 10;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager-&gt;create('Magento\Customer\Model\Customer')
-&gt;load($customerID);
$customerEmail = $customerObj-&gt;getEmail();</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -125px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 18 Sep 2023 07:49:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 编程方式获取所有付款方式]]></title>
      <link>https://www.360magento.com/blog/get-all-payment-methods-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在今天的帖子中，我将向您展示如何获取Magento 2 中的<strong>所有付款方式</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过两种方法检索Magento 2中的所有付款方式</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法 一：使用依赖注入</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法 二：使用对象管理器</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-1">方法一：使用依赖注入</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>使用该方法时，需要在<code>Block</code>类中编写以下代码。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>/**
 * Order Payment
 *
 * @var \Magento\Sales\Model\ResourceModel\Order\Payment\Collection
 */
protected $_orderPayment;
 
/**
 * Payment Helper Data
 *
 * @var \Magento\Payment\Helper\Data
 */
protected $_paymentHelper;
 
/**
 * Payment Model Config
 *
 * @var \Magento\Payment\Model\Config
 */
protected $_paymentConfig;
 
/**
 * @param \Magento\Backend\Block\Template\Context $context
 * @param \Magento\Sales\Model\ResourceModel\Order\Payment\Collection $orderPayment
 * @param \Magento\Payment\Helper\Data $paymentHelper
 * @param \Magento\Payment\Model\Config $paymentConfig
 * @param array $data
 */
public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Sales\Model\ResourceModel\Order\Payment\Collection $orderPayment,
    \Magento\Payment\Helper\Data $paymentHelper,
    \Magento\Payment\Model\Config $paymentConfig,
    array $data = []
) {
    $this-&gt;_orderPayment = $orderPayment;
    $this-&gt;_paymentHelper = $paymentHelper;
    $this-&gt;_paymentConfig = $paymentConfig;
    parent::__construct($context, $data);
}
 
/**
 * Get all payment methods
 * 
 * @return array
 */ 
public function getAllPaymentMethods() 
{
    return $this-&gt;_paymentHelper-&gt;getPaymentMethods();
}
 
/**
 * Get key-value pair of all payment methods
 * key = method code &amp; value = method name
 * 
 * @return array
 */ 
public function getAllPaymentMethodsList() 
{
    return $this-&gt;_paymentHelper-&gt;getPaymentMethodList();
}
 
/**
 * Get active/enabled payment methods
 * 
 * @return array
 */ 
public function getActivePaymentMethods() 
{
    return $this-&gt;_paymentConfig-&gt;getActiveMethods();
}
 
/**
 * Get payment methods that have been used for orders
 * 
 * @return array
 */ 
public function getUsedPaymentMethods() 
{
    $collection = $this-&gt;_orderPayment;
    $collection-&gt;getSelect()-&gt;group('method');
    $paymentMethods[] = array('value' =&gt; '', 'label' =&gt; 'Any');
    foreach ($collection as $col) { 
        $paymentMethods[] = array('value' =&gt; $col-&gt;getMethod(), 'label' =&gt; $col-&gt;getAdditionalInformation()['method_title']);            
    }        
    return $paymentMethods;
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-2">方法 二：使用对象管理器</h2>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>$objectManager =  \Magento\Framework\App\ObjectManager::getInstance();        
 
$paymentHelper = $objectManager-&gt;get('Magento\Payment\Helper\Data');
$allPaymentMethods = $paymentHelper-&gt;getPaymentMethods();
$allPaymentMethodsArray = $paymentHelper-&gt;getPaymentMethodList();
 
var_dump($allPaymentMethodsArray);
var_dump($allPaymentMethods);
 
$paymentConfig = $objectManager-&gt;get('Magento\Payment\Model\Config');
$activePaymentMethods = $paymentConfig-&gt;getActiveMethods();
 
var_dump(array_keys($activePaymentMethods));
 
$orderPaymentCollection = $objectManager-&gt;get('\Magento\Sales\Model\ResourceModel\Order\Payment\Collection');
$orderPaymentCollection-&gt;getSelect()-&gt;group('method');
$paymentMethods[] = array('value' =&gt; '', 'label' =&gt; 'Any');
foreach ($orderPaymentCollection as $col) { 
    $paymentMethods[] = array('value' =&gt; $col-&gt;getMethod(), 'label' =&gt; $col-&gt;getAdditionalInformation()['method_title']);            
}        
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>这是<strong>getAllPaymentMethods()</strong>的 stample 输出</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>Array
(
    [free] =&gt; Array
        (
            [active] =&gt; 1
            [model] =&gt; Magento\Payment\Model\Method\Free
            [order_status] =&gt; pending
            [title] =&gt; No Payment Information Required
            [allowspecific] =&gt; 0
            [sort_order] =&gt; 1
            [group] =&gt; offline
        )
 
    [substitution] =&gt; Array
        (
            [active] =&gt; 0
            [model] =&gt; Magento\Payment\Model\Method\Substitution
            [allowspecific] =&gt; 0
        )
 
    [vault] =&gt; Array
        (
            [debug] =&gt; 1
            [model] =&gt; Magento\Vault\Model\VaultPaymentInterface
        )
 
    [checkmo] =&gt; Array
        (
            [active] =&gt; 1
            [model] =&gt; Magento\OfflinePayments\Model\Checkmo
            [order_status] =&gt; pending
            [title] =&gt; Check / Money order
            [allowspecific] =&gt; 0
            [group] =&gt; offline
        )
 
    [purchaseorder] =&gt; Array
        (
            [active] =&gt; 0
            [model] =&gt; Magento\OfflinePayments\Model\Purchaseorder
            [order_status] =&gt; pending
            [title] =&gt; Purchase Order
            [allowspecific] =&gt; 0
            [group] =&gt; offline
        )
 
    [banktransfer] =&gt; Array
        (
            [active] =&gt; 0
            [model] =&gt; Magento\OfflinePayments\Model\Banktransfer
            [order_status] =&gt; pending
            [title] =&gt; Bank Transfer Payment
            [allowspecific] =&gt; 0
            [group] =&gt; offline
        )
 
    [cashondelivery] =&gt; Array
        (
            [active] =&gt; 0
            [model] =&gt; Magento\OfflinePayments\Model\Cashondelivery
            [order_status] =&gt; pending
            [title] =&gt; Cash On Delivery
            [allowspecific] =&gt; 0
            [group] =&gt; offline
        )
 
    [paypal_express] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Express
            [title] =&gt; PayPal Express Checkout
            [payment_action] =&gt; Authorization
            [solution_type] =&gt; Mark
            [line_items_enabled] =&gt; 1
            [visible_on_cart] =&gt; 1
            [visible_on_product] =&gt; 1
            [allow_ba_signup] =&gt; never
            [group] =&gt; paypal
            [authorization_honor_period] =&gt; 3
            [order_valid_period] =&gt; 29
            [child_authorization_number] =&gt; 1
            [verify_peer] =&gt; 1
            [skip_order_review_step] =&gt; 1
        )
 
    [paypal_express_bml] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Bml
            [title] =&gt; PayPal Credit
            [group] =&gt; paypal
        )
 
    [payflow_express] =&gt; Array
        (
            [title] =&gt; PayPal Express Checkout Payflow Edition
            [payment_action] =&gt; Authorization
            [line_items_enabled] =&gt; 1
            [visible_on_cart] =&gt; 1
            [visible_on_product] =&gt; 1
            [group] =&gt; paypal
            [verify_peer] =&gt; 1
            [model] =&gt; Magento\Paypal\Model\PayflowExpress
        )
 
    [payflow_express_bml] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Payflow\Bml
            [title] =&gt; PayPal Credit
            [group] =&gt; paypal
        )
 
    [payflowpro] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Payflow\Transparent
            [title] =&gt; Credit Card
            [payment_action] =&gt; Authorization
            [cctypes] =&gt; AE,VI
            [useccv] =&gt; 1
            [tender] =&gt; C
            [verbosity] =&gt; MEDIUM
            [user] =&gt; 
            [pwd] =&gt; 
            [group] =&gt; paypal
            [verify_peer] =&gt; 1
            [date_delim] =&gt; 
            [ccfields] =&gt; csc,expdate,acct
            [place_order_url] =&gt; paypal/transparent/requestSecureToken
            [cgi_url_test_mode] =&gt; https://pilot-payflowlink.paypal.com
            [cgi_url] =&gt; https://payflowlink.paypal.com
            [transaction_url_test_mode] =&gt; https://pilot-payflowpro.paypal.com
            [transaction_url] =&gt; https://payflowpro.paypal.com
            [avs_street] =&gt; 0
            [avs_zip] =&gt; 0
            [avs_international] =&gt; 0
            [avs_security_code] =&gt; 1
            [cc_year_length] =&gt; 2
            [can_authorize_vault] =&gt; 1
            [can_capture_vault] =&gt; 1
        )
 
    [payflowpro_cc_vault] =&gt; Array
        (
            [model] =&gt; PayflowProCreditCardVaultFacade
            [title] =&gt; Stored Cards (Payflow Pro)
        )
 
    [paypal_billing_agreement] =&gt; Array
        (
            [active] =&gt; 1
            [allow_billing_agreement_wizard] =&gt; 1
            [model] =&gt; Magento\Paypal\Model\Method\Agreement
            [title] =&gt; PayPal Billing Agreement
            [group] =&gt; paypal
            [verify_peer] =&gt; 1
        )
 
    [payflow_link] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Payflowlink
            [payment_action] =&gt; Authorization
            [verbosity] =&gt; HIGH
            [user] =&gt; 
            [pwd] =&gt; 
            [group] =&gt; paypal
            [title] =&gt; Credit Card
            [partner] =&gt; PayPal
            [csc_required] =&gt; 1
            [csc_editable] =&gt; 1
            [url_method] =&gt; GET
            [email_confirmation] =&gt; 0
            [verify_peer] =&gt; 1
            [transaction_url_test_mode] =&gt; https://pilot-payflowpro.paypal.com
            [transaction_url] =&gt; https://payflowpro.paypal.com
            [cgi_url_test_mode] =&gt; https://pilot-payflowlink.paypal.com
            [cgi_url] =&gt; https://payflowlink.paypal.com
        )
 
    [payflow_advanced] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Payflowadvanced
            [payment_action] =&gt; Authorization
            [verbosity] =&gt; HIGH
            [user] =&gt; PayPal
            [pwd] =&gt; 
            [group] =&gt; paypal
            [title] =&gt; Credit Card
            [partner] =&gt; PayPal
            [vendor] =&gt; PayPal
            [csc_required] =&gt; 1
            [csc_editable] =&gt; 1
            [url_method] =&gt; GET
            [email_confirmation] =&gt; 0
            [verify_peer] =&gt; 1
            [transaction_url_test_mode] =&gt; https://pilot-payflowpro.paypal.com
            [transaction_url] =&gt; https://payflowpro.paypal.com
            [cgi_url_test_mode] =&gt; https://pilot-payflowlink.paypal.com
            [cgi_url] =&gt; https://payflowlink.paypal.com
        )
 
    [hosted_pro] =&gt; Array
        (
            [model] =&gt; Magento\Paypal\Model\Hostedpro
            [title] =&gt; Payment by cards or by PayPal account
            [payment_action] =&gt; Authorization
            [group] =&gt; paypal
            [display_ec] =&gt; 0
            [verify_peer] =&gt; 1
        )
 
    [authorizenet_directpost] =&gt; Array
        (
            [active] =&gt; 0
            [cctypes] =&gt; AE,VI,MC,DI
            [debug] =&gt; 0
            [email_customer] =&gt; 0
            [login] =&gt; 
            [merchant_email] =&gt; 
            [model] =&gt; Magento\Authorizenet\Model\Directpost
            [order_status] =&gt; processing
            [payment_action] =&gt; authorize
            [test] =&gt; 1
            [title] =&gt; Credit Card Direct Post (Authorize.net)
            [trans_key] =&gt; 
            [trans_md5] =&gt; 
            [allowspecific] =&gt; 0
            [currency] =&gt; USD
            [create_order_before] =&gt; 1
            [date_delim] =&gt; /
            [ccfields] =&gt; x_card_code,x_exp_date,x_card_num
            [place_order_url] =&gt; authorizenet/directpost_payment/place
            [cgi_url_test_mode] =&gt; https://test.authorize.net/gateway/transact.dll
            [cgi_url] =&gt; https://secure.authorize.net/gateway/transact.dll
            [cgi_url_td_test_mode] =&gt; https://apitest.authorize.net/xml/v1/request.api
            [cgi_url_td] =&gt; https://api2.authorize.net/xml/v1/request.api
        )
 
    [braintree] =&gt; Array
        (
            [model] =&gt; BraintreeFacade
            [title] =&gt; Credit Card (Braintree)
            [payment_action] =&gt; authorize
            [active] =&gt; 0
            [is_gateway] =&gt; 1
            [can_use_checkout] =&gt; 1
            [can_authorize] =&gt; 1
            [can_capture] =&gt; 1
            [can_capture_partial] =&gt; 1
            [can_authorize_vault] =&gt; 1
            [can_capture_vault] =&gt; 1
            [can_use_internal] =&gt; 1
            [can_refund_partial_per_invoice] =&gt; 1
            [can_refund] =&gt; 1
            [can_void] =&gt; 1
            [can_cancel] =&gt; 1
            [cctypes] =&gt; AE,VI,MC,DI,JCB,CUP,DN,MI
            [useccv] =&gt; 1
            [cctypes_braintree_mapper] =&gt; {"american-express":"AE","discover":"DI","jcb":"JCB","mastercard":"MC","master-card":"MC","visa":"VI","maestro":"MI","diners-club":"DN","unionpay":"CUP"}
            [order_status] =&gt; processing
            [environment] =&gt; sandbox
            [allowspecific] =&gt; 0
            [sdk_url] =&gt; https://js.braintreegateway.com/js/braintree-2.17.6.min.js
            [public_key] =&gt; 
            [private_key] =&gt; 
            [masked_fields] =&gt; cvv,number
            [privateInfoKeys] =&gt; avsPostalCodeResponseCode,avsStreetAddressResponseCode,cvvResponseCode,processorAuthorizationCode,processorResponseCode,processorResponseText,liabilityShifted,liabilityShiftPossible,riskDataId,riskDataDecision
            [paymentInfoKeys] =&gt; cc_type,cc_number,avsPostalCodeResponseCode,avsStreetAddressResponseCode,cvvResponseCode,processorAuthorizationCode,processorResponseCode,processorResponseText,liabilityShifted,liabilityShiftPossible,riskDataId,riskDataDecision
        )
 
    [braintree_paypal] =&gt; Array
        (
            [model] =&gt; BraintreePayPalFacade
            [title] =&gt; PayPal (Braintree)
            [active] =&gt; 0
            [payment_action] =&gt; authorize
            [allowspecific] =&gt; 0
            [require_billing_address] =&gt; 0
            [allow_shipping_address_override] =&gt; 1
            [display_on_shopping_cart] =&gt; 1
            [order_status] =&gt; processing
            [is_gateway] =&gt; 1
            [can_use_checkout] =&gt; 1
            [can_authorize] =&gt; 1
            [can_capture] =&gt; 1
            [can_capture_partial] =&gt; 1
            [can_refund] =&gt; 1
            [can_refund_partial_per_invoice] =&gt; 1
            [can_void] =&gt; 1
            [can_cancel] =&gt; 1
            [privateInfoKeys] =&gt; processorResponseCode,processorResponseText,paymentId
            [paymentInfoKeys] =&gt; processorResponseCode,processorResponseText,paymentId,payerEmail
        )
 
    [braintree_cc_vault] =&gt; Array
        (
            [model] =&gt; BraintreeCreditCardVaultFacade
            [title] =&gt; Stored Cards (Braintree)
        )</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -54px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 17 Sep 2023 07:25:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 如何在页面启用错误报告]]></title>
      <link>https://www.360magento.com/blog/display-error-enable-error-reporting-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 2 中，有时您会遇到这样的问题：出现黑色页面或纯白色页面，并显示错误号，例如错误日志记录号：568837792838 或任何损坏的内容错误。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在 Magento 2 的默认设置中，允许在前端显示错误的功能是禁用的。因此，在今天的帖子中，我将指导您如何在 Magento 2 上显示错误消息或启用错误报告。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何显示错误：启用错误报告</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法 1：重命名 pub/errors/local.xml.sample 文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法2：编辑.htaccess文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法3：编辑app/bootstrap.php文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-1">方法 1：重命名 pub/errors/local.xml.sample 文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要在浏览器上显示错误，您只需重命名一个 XML 文件即可。但是，如果您在生产环境中，则不建议使用此方法，因此您应该只考虑在开发环境中使用此方法。操作方法如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>首先，转到您的 Magento2 根目录。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>然后，打开<code>pub/errors</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开后，您将看到一个名为 的文件<code>local.xml.sample</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将其从<code>local.xml.sample</code>重命名为<code>local.xml</code>。换句话说，您<code>sample</code>从文件名中删除了 。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>最后，<code>System &gt; Tools &gt; Cache Management</code>从 Magento 管理员转到刷新缓存。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-2">方法2：编辑.htaccess文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>显示错误的第二种方法是编辑<code>.htaccess file</code>Magento 2 站点的 。编辑该文件时，您将能够启用 Magento 的开发模式以及 PHP 的错误显示设置。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>首先，打开文件<code>.htaccess</code>并在文件末尾写入以下代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php_value display_errors on ## enable PHP's error display settings
php_value error_reporting -1 ## set error display to E_ALL
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>添加代码后，打开终端/命令提示符并访问 Magento 的根目录。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>cd /path/to/your/magento/directory
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>现在，运行以下命令来激活开发者模式。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento deploy:mode:set developer
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>可以使用以下命令检查当前的部署模式：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento deploy:mode:show
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>最后，使用以下命令清除缓存：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento cache:clean
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>正确执行上述所有步骤后，当您浏览 Magento 网站时，您将看到浏览器本身显示错误。然而，就像第一种方法一样，这仅对开发环境有好处。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-3">方法3：编辑app/bootstrap.php文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>除了编辑<code>.htaccess file</code>（这是在 Magento 站点上启用错误显示的首选方式）之外，您还可以编辑 PHP 文件。要编辑该文件，请按照以下步骤操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>首先，访问 Magento 的根目录。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>然后，打开该文件<code>app/bootstrap.php</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在文件的开头，您将看到以下行代码：<code>#ini_set('display_errors', 1); </code>看到后，请将代码更新为：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>error_reporting(E_ALL); # Set Error Reporting as E_ALL (Report all PHP errors)
ini_set('display_errors', 1); # Un-commenting this line to enable PHP error display
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>更新代码后，打开终端/命令提示符，然后转到 Magento 的根目录。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>cd /path/to/your/magento/directory
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>然后，要启用开发者模式，需要运行以下命令</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento deploy:mode:set developer
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>如果您想检查当前的部署模式，可以使用以下行：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento deploy:mode:show
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>最后，清除缓存：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento cache:clean
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>就是这样。正确执行上述所有步骤后，您将能够在浏览器上看到错误显示。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sat, 16 Sep 2023 08:21:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 上的我的帐户中添加导航链接]]></title>
      <link>https://www.360magento.com/blog/add-navigation-link-my-account-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>我的帐户是一个重要的地方，可以帮助店主轻松管理客户、他们的信息、订单相关详细信息，甚至新闻通讯订阅。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在今天的帖子中，我将指导您如何向客户的帐户仪表板<strong>添加导航。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>如何通过两步在我的帐户中添加导航链接：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：在主题中创建一个文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：添加自定义链接</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1">第 1 步：在主题中创建一个文件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在进行任何自定义之前，您要做的第一件事就是<code>customer_account.xml</code>在主题中创建一个。请按照以下步骤操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>app/design/frontend/<span>Example</span>/_YOUR_THEME_/Magento_Customer/layout/customer_account.xml
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2">第 2 步：添加自定义链接</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在此步骤中，您唯一需要做的就是将此代码添加到您的布局 xml 文件中：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;referenceBlock name="customer_account_navigation"&gt;
    &lt;block class="Magento\Framework\View\Element\Html\Link\Current" name="customer-account-navigation-custom-link" after="-" &gt;
         &lt;arguments&gt;
             &lt;argument name="label" xsi:type="string" translate="true"&gt;Custom Link Label&lt;/argument&gt;
             &lt;argument name="path" xsi:type="string"&gt;custom-path&lt;/argument&gt;
         &lt;/arguments&gt;
    &lt;/block&gt;
&lt;/referenceBlock&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>这是关于在 Magento 2 的&ldquo;我的帐户&rdquo;中添加导航链接的说明。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Fri, 15 Sep 2023 07:29:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[启用/禁用 Magento 2 开发者模式]]></title>
      <link>https://www.360magento.com/blog/enable-disable-developer-mode-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Magento 2平台为用户提供了三种模式：默认模式、<strong>开发者模式</strong>和生产模式。根据具体情况，商店管理员可以为其 Magento 商店应用不同的模式。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-enable-disable-developer-mode-in-magento-2">如何在 Magento 2 中启用/禁用开发者模式？</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>什么是开发者模式</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>Magento 2 检查开发者模式</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>启用 Magento 2 开发者模式</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>禁用 Magento 2 开发者模式</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="what-developer-mode">什么是开发者模式</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 的开发人员模式是当您需要自定义 Magento 2 或要安装扩展时将使用的模式。更具体地说，它将用于以下情况：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>将每个所需文件的符号链接发布到 pub/static 目录</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在浏览器中看到未捕获的异常</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>var/report 中的系统记录是口头的。将异常放入错误处理程序中</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如果无法强制执行事件订阅者，则生成异常。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>Magento 2 提供了 4 种不同的模式，包括 Default、Developer、Maintenance和 Production。其中，开发者模式是Magento 2开发者的最佳解决方案，因为它涵盖了Magento 2中开发者可用的所有类型的开发选项，包括：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>不缓存静态文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>自动编译代码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在屏幕上显示详细的错误日志</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>启用高级代码调试</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>慢慢地工作</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="check-current-mode">Magento 2 检查开发者模式</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要检查当前模式，需要以 Magento 文件系统所有者身份运行以下命令：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>bin/magento deploy:mode:show
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>如果您有共享托管，这将是您的提供商为您提供登录服务器的用户。相反，如果您的服务器是私有的，则它是 Magento 服务器上的本地用户帐户。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>运行上述命令后，将显示类似以下的消息：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>Current application mode: {mode}. 
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p><strong>注意</strong>：环境变量可能会覆盖该值。可以<code>{mode}</code>是<code>default</code>、<code>developer</code>、 或<code>production</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="enable-developer-mode">启用 Magento 2 开发者模式</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在启用开发者模式之前，您需要确保生成的类和对象管理器实体（例如代理）已经清晰。否则，可能会出现意外错误。清除它们后，您可以按照以下步骤开始将模式从生产模式更改为开发人员模式：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><strong>第 1 步</strong>：在第一步中，删除 generated/code 和 generated/metadata 目录的内容：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>rm -rf &lt;your Magento install dir&gt;/generated/metadata/* &lt;your Magento install dir&gt;/generated/code/*
</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><strong>第 2 步</strong>：接下来，您可以设置模式：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>bin/magento deploy:mode:set developer
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>设置模式后，您将看到以下消息：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>Enabled developer mode.
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="disable-developer-mode">禁用 Magento 2 开发者模式</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>上面我刚刚向您展示了启用开发者模式的方法。但是，在各种情况下，您需要将模式从开发人员更改回生产。这就是你如何做到的：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>将模式设置为生产。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>bin/magento deploy:mode:set production</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Thu, 14 Sep 2023 07:36:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[以编程方式清除缓存 Magento 2]]></title>
      <link>https://www.360magento.com/blog/clear-cache-programmically-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在开发的情况下，开发人员或商家的请求，他/她需要以编程方式清除/刷新缓存。如果您在 Magentoe 中以编程方式清除缓存时遇到问题，本文适合您。今天，我们将向您展示<strong>如何以编程方式清除缓存</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在开始说明之前，让我提醒您一些有关 Magento 2 缓存清除的基本知识。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="why-should-clear-cache-in-magento-2">为什么要清除 Magento 2 中的缓存？</h2>
<p><!-- /wp:heading --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="magento-2-cache-clean--cache-flush-the-differences">Magento 2 缓存清理和缓存刷新：差异</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 2 缓存清理/清除和 Magento 2 缓存刷新不一样。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>关于缓存清理/清除：</strong>&nbsp;Magento 2 缓存清理/清除是删除所有启用的 Magento 相关缓存的操作。它不会清除服务器中与 Magento 无关的其他部分。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>关于缓存刷新：</strong>&nbsp;Magento 2 缓存刷新是清理所有缓存存储的操作。与缓存清理/清除不同，此操​​作会对属于同一存储的其他存储部分产生影响。当新后端配置后缓存清理未反映前端的更改时，您可以刷新 Magento 2 中的缓存。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>区分这两个动作很简单。另外，记住这一点很重要，因为如果您错误执行这两个操作，可能会导致您的商店发生意外的变化。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在我们将了解如何在 Magento 2 中以编程方式清除/清理缓存。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-clear-cache-programmatically-in-magento-2">如何在 Magento 2 中以编程方式清除缓存</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在Helper中实现这几行代码：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
use Magento\Framework\App\PageCache\Version;
use Magento\Framework\App\Cache\TypeListInterface;
use Magento\Framework\App\Cache\Frontend\Pool;
protected $cacheTypeList;
protected $cacheFrontendPool;
 
public function __construct(
    TypeListInterface $cacheTypeList, 
    Pool $cacheFrontendPool
){
    
    $this-&gt;cacheTypeList = $cacheTypeList;
    $this-&gt;cacheFrontendPool = $cacheFrontendPool;
 
}
 
public function flushCache(Version $subject)
{
  $_types = [
            'config',
            'layout',
            'block_html',
            'collections',
            'reflection',
            'db_ddl',
            'eav',
            'config_integration',
            'config_integration_api',
            'full_page',
            'translate',
            'config_webservice'
            ];
 
    foreach ($_types as $type) {
        $this-&gt;cacheTypeList-&gt;cleanType($type);
    }
    foreach ($this-&gt;cacheFrontendPool as $cacheFrontend) {
        $cacheFrontend-&gt;getBackend()-&gt;clean();
    }
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>现在调用控制器或模型<code>flushCache()</code>中的函数。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Wed, 13 Sep 2023 08:07:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 结帐页面添加自定义邮政编码验证器]]></title>
      <link>https://www.360magento.com/blog/add-custom-zipcode-validator-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在 Magento 2 中，自定义邮政编码验证和/或在结帐页面上添加自定义邮政编码验证器并不困难。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>Magento 使用正则表达式 (&nbsp;<code>re</code>) 检查输入的邮政编码是否正确。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在这篇文章中，我们将<code>add our own expression to validate the zipcode</code>.</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在 Magento 默认情况下，所有模式都在此文件中定义：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><code>vendor/magento/module-directory/etc/zip_codes.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>要添加您的模式，或在结帐页面上自定义邮政编码验证以适合特定国家/地区，请在您自己的模块<code>zip_codes.xml</code>中创建一个新模式<a href="https://www.mageplaza.com/magento-2-module-development/"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>这是一个例子：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>我选择 NL（荷兰语）并将其添加<code>zip_codes.xml</code>到<code>Example\HelloWorld\etc</code>文件夹</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Directory:etc/zip_codes.xsd"&gt;
    &lt;zip countryCode="NL"&gt;
            &lt;codes&gt;
                &lt;code id="pattern_1" active="true" example="1234 AB"&gt;^[0-9]{4}\s[a-zA-Z]{2}$&lt;/code&gt;
                &lt;code id="pattern_2" active="true" example="1234AB"&gt;^[0-9]{4}\s?[a-zA-Z]{2}$&lt;/code&gt;
            &lt;/codes&gt;
        &lt;/zip&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>Pattern_2与第一个非常相似，只是<strong>它</strong>允许用户输入空格字符。<br />我在那里留下了 2 个图案，以便您可以看到差异，当应用到您的商店时，您可以删除第一个图案，pattern_2 仍然覆盖 pattern_1 的情况。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在是时候刷新缓存并测试结果了</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -98px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 12 Sep 2023 08:05:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 工厂对象]]></title>
      <link>https://www.360magento.com/blog/factory-object-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在这一部分中，我们将讨论<strong>Magento 2 中模型的工厂对象</strong>。正如您在 OOP 中所知，工厂方法将用于实例化对象。在 Magento 2 中，<strong>Magento 2 工厂对象</strong>执行相同的操作。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>Factory<strong>类的名称</strong>是 Model 类的名称并附加单词<code>Factory</code>。因此，对于我们的示例，我们将有 TopicFactory 类。您不得创建此类。Magento 将为您创建它。每当 Magento 的对象管理器遇到以&ldquo;Factory&rdquo;结尾的类名时，如果该类尚不存在，它将自动在 var/ Generation 文件夹中生成 Factory 类。你会看到工厂类</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>var/generation/&lt;vendor_name&gt;/&lt;module_name&gt;/Model/ClassFactory.php
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>为了实例化模型对象，我们将使用自动构造函数依赖注入来注入工厂对象，然后使用工厂对象实例化模型对象。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，我们将调用模型来获取Block 中的数据。我们将创建一个主题块：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>Example\HelloWorld\Block\Topic.php
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>该文件的内容：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace Example\HelloWorld\Block;
class Topic extends \Magento\Framework\View\Element\Template
{
	protected $_topicFactory;
	public function _construct(
		\Magento\Framework\View\Element\Template\Context $context,
		\Example\HelloWorld\Model\TopicFactory $topicFactory
	){
		$this-&gt;_topicFactory = $topicFactory;
		parent::_construct($context);
	}

	public function _prepareLayout()
	{
		$topic = $this-&gt;_topicFactory-&gt;create();
		$collection = $topic-&gt;getCollection();
		foreach($collection as $item){
			var_dump($item-&gt;getData());
		}
		exit;
	}
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>正如您在此块中看到的，将在函数中创建 TopicFactory 对象<code>_construct()</code>。在<code>_prepareLayout()</code>函数中，我们用来<code>$topic = $this-&gt;_topicFactory-&gt;create();</code>创建模型对象。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -96px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 11 Sep 2023 07:44:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何创建和配置 Magento 2 Cron？]]></title>
      <link>https://www.360magento.com/blog/magento-2-create-cron-job/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>Magento 2 Create Cron Job</strong>正在按时设置自动计划，这在您运行Magento 2 商店时非常方便。为什么它是一个如此有用的功能？例如，网站统计或内容管理系统等软件可能需要在特定时间进行活动，但您无法手动处理。这就是在您的 Web 服务器上创建 Cron Job 变得很方便的时候。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>不用担心复杂的教程，因为我在这里是为了让您简单易懂。即使您不懂技术，您仍然可以轻松学习。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>Magento 2 以编程方式创建 Cron 作业</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>什么是 Cron 作业？</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如何在 Magento 2 中创建 Cron 作业<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>创建 crontab.xml</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>创建测试.php</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>Magento 2 中 Cron Job 的应用</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="what-is-a-cron-job">什么是 Cron 作业？</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><strong>Cron Job</strong>是 Linux（用户免费的操作系统）的一个很棒的功能。<strong>cron 作业</strong>将创建适合您想要执行的任务的命令或脚本。<strong>Cron Job 允许在准确的时间和日期自动运行</strong>，而不是手动工作。由于其自动化，<strong>Cron Jobs 是</strong>每天或每周重复项目的完美选择。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>笔记</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>Cron 配置在 Magento 中非常重要，它可以为许多系统活动设置时间表，例如重新索引、自动更新汇率、Magento 电子邮件等。只有当配置正确时，cron 作业才会激活。如果出现错误，这意味着 Magento 将无法按预期运行。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-create-cron-job-in-magento-2">如何在 Magento 2 中创建 Cron 作业</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>请按照指南按照您的意愿启动<strong>cron 作业程序：</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在&ldquo;Cron&rdquo;文件夹中创建一个类</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>使用 PHP 手动设置 cron 计划：<code>bin/magento cron:run</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>var/log/system.log</code>在 cron 作业运行后查找日志。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>登录到 Magento 2 管理面板，按照路径执行：<code>Stores &gt; Configuration &gt; Advanced &gt; System</code>，然后更改每个 cron 组的调度程序设置。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>最后，从命令行运行 cron：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p><code>magento cron:run [--group="&lt;cron group name&gt;"]</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，我们将在HelloWorld 模块中添加一个自定义 cron&nbsp;。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-crontabxml">创造<code>crontab.xml</code></h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/Example/HelloWorld/etc/crontab.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>内容将是</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" ?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"&gt;
	&lt;group id="default"&gt;
		&lt;job instance="Example\HelloWorld\Cron\Test" method="execute" name="example_helloworld_cron"&gt;
			&lt;schedule&gt;* * * * *&lt;/schedule&gt;
		&lt;/job&gt;
	&lt;/group&gt;
&lt;/config&gt;

</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><code>group id</code>是你的 cron 组名称。您一次只能为单个组运行 cron。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>job instance</code>是要实例化的类（类路径）。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>job method</code>是要调用的方法<code>job instance</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>job name</code>是此 cron 作业的唯一 ID。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>schedule</code>是 cron 格式的计划。下图显示了它的组成部分：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>* * * * * command to be executed
| | | | |
| | | | +----- Day of week (0 - 7) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在 中<code>crontab.xml</code>，我们定义<code>job instance</code>为<code>Example\HelloWorld\Cron\Test</code>。现在应该已经创建了。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-testphp">创建测试.php</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/Cron/Test.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>内容将是：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>
&lt;?php

namespace <span>Example</span>\HelloWorld\Cron;

class Test
{

	public function execute()
	{

		$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/cron.log');
		$logger = new \Zend\Log\Logger();
		$logger-&gt;addWriter($writer);
		$logger-&gt;info(__METHOD__);

		return $this;

	}
}

</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>全部完成，现在请刷新缓存并<code>magento cron:run --group="default"</code>从命令行运行。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>要检查 Cron 是否正常工作，请访问您的商店，您将看到其中的<code>var/log/cron.log</code>文本。<code><code>Example</code>\HelloWorld\Cron\Test::execute</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="applications-of-cron-job-for-magento-2">Magento 2 中 Cron Job 的应用</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 的多项功能至少需要一项 Cron Job，它安排未来发生的活动。这些活动的部分列表如下：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>目录价格规则</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>时事通讯</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>生成 Google 站点地图</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>客户警报/通知（产品价格变化、产品有货）</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>重新索引</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>私人销售（仅限 Magento Commerce）</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>自动更新货币汇率</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>所有 Magento 电子邮件（包括订单确认和交易电子邮件）</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<div id="gtx-trans" style="position: absolute; left: -165px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sun, 10 Sep 2023 07:25:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 使用示例创建 API - 代码片段]]></title>
      <link>https://www.360magento.com/blog/magento-2-create-api/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>Magento 2 创建 API</strong>意味着帮助在线零售商生成供自己使用的应用程序编程接口。API 是一组用于设计软件应用程序的例程、协议和其他工具。因此，如果您从其他网站请求任何程序或服务，API 是连接数据的必需元素。通过在 Magento 2 中创建 API，您可以轻松获得成功启动程序的所有构建块。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="what-is-api-in-magento-2">Magento 2 中的 API 是什么？</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>API 代表应用程序编程接口，允许您从应用程序访问数据。API可以作为程序员和应用程序之间的中间人来调用。当程序员通过中间人发出请求时，如果请求被批准，正确的数据就会被返回。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>作为基于 Magento 2 平台的电子商务商店，您应该关注两种架构类型的 Web API：<strong>REST</strong>（表述性状态传输）和<strong>SOAP</strong>（简单对象访问协议）。然而，在官方文档中，它们只附带原始的curl请求，没有任何示例。为了有效地连接和使用<strong>Magento 2 API</strong>，本主题将向您具体展示 PHP 示例。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="snippet-api">片段API</h2>
<p><!-- /wp:heading --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="file-etcwebapixml">文件：<code>etc/webapi.xml</code></h4>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" ?&gt;
&lt;routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd"&gt;
	&lt;route method="GET" url="/V1/example-helloworld/post"&gt;
		&lt;service class="Example\HelloWorld\Api\PostManagementInterface" method="getPost"/&gt;
		&lt;resources&gt;
			&lt;resource ref="anonymous"/&gt;
		&lt;/resources&gt;
	&lt;/route&gt;
&lt;/routes&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="file-etcdixml">文件：<code>etc/di.xml</code></h4>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" ?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"&gt;
	&lt;preference for="Example\HelloWorld\Api\PostManagementInterface" type="Example\HelloWorld\Model\PostManagement"/&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="file-modelpostmanagementphp">文件：<code>Model/PostManagement.php</code></h4>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php 
namespace Example\HelloWorld\Model;
 
 
class PostManagement {

	/**
	 * {@inheritdoc}
	 */
	public function getPost($param)
	{
		return 'api GET return the $param ' . $param;
	}
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="file-apipostmanagementinterfacephp">文件：<code>Api/PostManagementInterface.php</code></h4>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php 
namespace Example\HelloWorld\Api;
 
 
interface PostManagementInterface {


	/**
	 * GET for Post api
	 * @param string $param
	 * @return string
	 */
	
	public function getPost($param);
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>如果您想确保该过程顺利且成功，最好考虑 Magento API 集成服务。您将节省大量时间和精力，同时专注于其他重要的业务方面。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>通过使用 我们 的 Magento API 集成服务，您可以：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>将您的商店与其他第三方平台连接以简化流程</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>通过一个仪表板执行各种任务并共享数据</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>消除手动和繁琐的任务</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>改善客户体验</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<div id="gtx-trans" style="position: absolute; left: -61px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 09 Sep 2023 06:20:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 以编程方式添加类别属性]]></title>
      <link>https://www.360magento.com/blog/magento-2-category-attributes-programmatically/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>默认的 Magento 2 类别属性很好，但有时有必要添加新的属性。今天我们将向您展示如何以编程方式向 Magento 2 添加类别属性。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-add-category-attribute-programmatically-in-magento-2">如何在 Magento 2 中以编程方式添加类别属性</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>步骤1：创建文件InstallData.php</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 2：定义 install() 方法</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 3：创建类别属性</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第四步：显示类别属性</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-file-installdataphp">创建文件InstallData.php</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>我们将从位于<code>app/code/<code>Example</code>/HelloWorld/Setup/InstallData.php</code>.&nbsp;该文件的内容：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace <span>Example</span>\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
	private $eavSetupFactory;

	public function __construct(EavSetupFactory $eavSetupFactory)
	{
		$this-&gt;eavSetupFactory = $eavSetupFactory;
	}
	
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="define-the-install-method">定义 install() 方法</h3>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
	
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
	
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-category-attribute-programmatically">以编程方式创建类别属性</h3>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace <span>Example</span>\HelloWorld\Setup;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Setup\EavSetupFactory;

class InstallData implements InstallDataInterface
{

	private $eavSetupFactory;

	public function __construct(EavSetupFactory $eavSetupFactory)
	{
		$this-&gt;eavSetupFactory = $eavSetupFactory;
	}

	public function install(
		ModuleDataSetupInterface $setup,
		ModuleContextInterface $context
	)
	{
		$eavSetup = $this-&gt;eavSetupFactory-&gt;create(['setup' =&gt; $setup]);

		$eavSetup-&gt;addAttribute(
			\Magento\Catalog\Model\Category::ENTITY,
			'mp_new_attribute',
			[
				'type'         =&gt; 'varchar',
				'label'        =&gt; '<span>Example</span> Attribute',
				'input'        =&gt; 'text',
				'sort_order'   =&gt; 100,
				'source'       =&gt; '',
				'global'       =&gt; 1,
				'visible'      =&gt; true,
				'required'     =&gt; false,
				'user_defined' =&gt; false,
				'default'      =&gt; null,
				'group'        =&gt; '',
				'backend'      =&gt; ''
			]
		);
	}
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="display-the-category-attribute">显示类别属性</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>类别 UI 组件是使用<code>category_form.xml</code>文件中的配置呈现的。所有具有该名称的文件都会合并在一起。因此，我们将通过<code>category_form.xml</code>在<code>app/code/<code><code>Example</code></code>/HelloWorld/view/adminhtml/ui_component/</code>目录中创建文件来添加字段。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>这是在&ldquo;常规&rdquo;组下添加字段的完整示例。请务必注意，它<code>mp_new_attribute</code>应与您在安装脚本中创建的属性的 ID 相匹配。</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" ?&gt;
&lt;form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"&gt;
    &lt;fieldset name="general"&gt;
        &lt;field name="mp_new_attribute"&gt;
            &lt;argument name="data" xsi:type="array"&gt;
                &lt;item name="config" xsi:type="array"&gt;
                    &lt;item name="required" xsi:type="boolean"&gt;false&lt;/item&gt;
                    &lt;item name="validation" xsi:type="array"&gt;
                        &lt;item name="required-entry" xsi:type="boolean"&gt;false&lt;/item&gt;
                    &lt;/item&gt;
                    &lt;item name="sortOrder" xsi:type="number"&gt;333&lt;/item&gt;
                    &lt;item name="dataType" xsi:type="string"&gt;string&lt;/item&gt;
                    &lt;item name="formElement" xsi:type="string"&gt;input&lt;/item&gt;
                    &lt;item name="label" translate="true" xsi:type="string"&gt;<span>Example</span> new attribute&lt;/item&gt;
                &lt;/item&gt;
            &lt;/argument&gt;
        &lt;/field&gt;
    &lt;/fieldset&gt;
&lt;/form&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>全部完成，请运行升级，刷新缓存，并检查结果。</p>
<p><!-- /wp:paragraph --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>刷新缓存 在此处运行刷新缓存</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>运行升级命令行：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>然后去<code>Product &gt; Categories</code>管理员那里查看结果。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -113px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 08 Sep 2023 08:47:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 创建事件 - Magento 2 中的观察者]]></title>
      <link>https://www.360magento.com/blog/magento-2-create-events/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在此示例中，我们将向您展示<strong>如何在 Magento 2 中创建事件</strong><code>Example</code><code>&nbsp;- Event</code>，我们仅捕获该事件以在前端显示，因此我们应该<code>events.xml</code>在文件夹中创建一个文件<code>etc/frontend</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="overview-of-creating-events-in-magento-2">在 Magento 2 中创建事件的概述</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：调度事件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：创建事件文件：events.xml</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：创建观察者类</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 4 步：刷新缓存并检查结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="understand-catching-and-handling-a-event">了解捕获和处理事件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>Magento 使用区域定义来管理商店。我们将有一个前端区域和管理区域。通过配置文件，它们可以放在3个地方：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>文件夹下<code>etc/</code>是可在管理和前端中使用的配置。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>etc/frontend</code>文件夹将用于前端区域。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>etc/adminhtml</code>文件夹将用于管理区域。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>与事件配置文件相同。您可以为每个区域创建事件配置文件，如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>管理区域：<code>app/code/<code>Example</code>/HelloWorld/etc/adminhtml/events.xml</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>前端区域：<code>app/code/<code>Example</code>/HelloWorld/etc/frontend/events.xml</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>全局区域：<code>app/code/<code>Example</code>/HelloWorld/etc/events.xml</code></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-1-dispatch-event">第 1 步：调度事件</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在我们想要调度一个magento 2 事件列表，它允许其他模块可以更改显示的单词。我们将像这样更改控制器：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/Controller/Index/Test.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>内容将是：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\HelloWorld\Controller\Index;

class Test extends \Magento\Framework\App\Action\Action
{

	public function execute()
	{
		$textDisplay = new \Magento\Framework\DataObject(array('text' =&gt; '<span>Example</span>'));
		$this-&gt;_eventManager-&gt;dispatch('example_helloworld_display_text', ['mp_text' =&gt; $textDisplay]);
		echo $textDisplay-&gt;getText();
		exit;
	}
}

</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>调度方法将接收 2 个参数：一个唯一的事件名称和一个数组数据。在此示例中，我们将数据对象添加到事件中并回调它以显示文本。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-2-create-a-event-file-eventsxml">步骤2：创建事件文件：events.xml</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/etc/frontend/events.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"&gt;
    &lt;event name="example_helloworld_display_text"&gt;
        &lt;observer name="mp_display_text" instance="<span>Example</span>\HelloWorld\Observer\ChangeDisplayText" /&gt;
    &lt;/event&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在此文件中的 config 元素下，我们定义一个事件元素，其名称是上面调度的事件名称。将执行此事件的类将通过实例属性在观察者元素中定义。观察者的名称用于与该事件的其他观察者进行识别。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>使用此文件，只要在前端区域调用此事件的调度方法，<code>events.xml</code>Magento 就会执行类。<code><code>Example</code>\HelloWorld\Observer\ChangeDisplayText</code>请注意，我们放置<code>events.xml</code>在前端区域，因此如果您在管理区域（如管理控制器）调度该事件，它将不会运行。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-3-create-observer-class">第三步：创建观察者类</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在我们将创建一个类来执行上述事件。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/Observer/ChangeDisplayText.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php

namespace <span>Example</span>\HelloWorld\Observer;

class ChangeDisplayText implements \Magento\Framework\Event\ObserverInterface
{
	public function execute(\Magento\Framework\Event\Observer $observer)
	{
		$displayText = $observer-&gt;getData('mp_text');
		echo $displayText-&gt;getText() . " - Event &lt;/br&gt;";
		$displayText-&gt;setText('Execute event successfully.');

		return $this;
	}
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>该类将实现<code>ObserverInterface</code>并声明执行方法。您可以看看这个简单的方法来了解它是如何工作的。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="step-4-flush-cache-and-check-the-result">步骤 4：刷新缓存并检查结果</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>最后刷新缓存并查看结果。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Thu, 07 Sep 2023 08:36:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 缓存和页面缓存概述]]></title>
      <link>https://www.360magento.com/blog/cache-overview-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>除了Magento\Cache库之外，Magento 还使用Zend_Cache与缓存存储交互。在今天的文章中，让我们一起探讨 Magento 2 中的缓存和页面缓存。我希望您在以下信息中找到有用的信息。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="cache-overview">缓存概述</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>当您首次安装 Magento 商店时，默认情况下会启用文件系统缓存。<br />要更改它，您可以编辑<code>env.php</code>在<code>app/etc</code>文件夹。找到<code>cache_types</code>并更改 array_key 值（1 或 0）。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>设置应该如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>'cache_types' =&gt;
    array (
        'config' =&gt; 1,
        'layout' =&gt; 1,
        'block_html' =&gt; 1,
        'collections' =&gt; 1,
        'db_ddl' =&gt; 1,
        'eav' =&gt; 1,
        'full_page' =&gt; 0,
        'translate' =&gt; 1,
        'config_integration' =&gt; 1,
        'config_webservice' =&gt; 1,
        'config_integration_api' =&gt; 1,
    ),
); 
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="page-cache-overview">页面缓存概述</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在 Magento 中，&ldquo;页面缓存&rdquo;意味着缓存整个页面。<br />您可以使用<code>Default Cache</code>将缓存文件存储在<code>File system</code>、<code>Database</code>或 上<code>Redis</code>。<br />另一种选择是使用Magento 推荐的Varnish 。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="cacheable-and-uncacheable-pages">可缓存和不可缓存的页面</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>默认情况下，所有页面都是可缓存的。<br />如果您不希望缓存页面。您可以将其添加<code>cacheable="false"</code>到布局中的任何块中。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -99px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 06 Sep 2023 08:22:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 索引和重新索引]]></title>
      <link>https://www.360magento.com/blog/magento-2-indexing/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>如何<strong>在 Magento 2 中创建索引器重新索引</strong>。<strong>索引器是Magento 2 索引</strong>中的一个重要功能。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>我们将使用示例模块 Example_HelloWorld 进行此练习。请查看我们之前的文章，了解如何在 Magento 2 中创建示例模块。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>索引是 Magento 转换产品、类别等数据以提高店面性能的方式。当数据发生变化时，必须更新转换后的数据或重新索引。Magento 具有非常复杂的架构，在许多数据库表中存储大量商家数据（包括目录数据、价格、用户、商店等）。为了优化店面性能，Magento 使用索引器将数据累积到特殊表中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，假设您将商品的价格从 8.99 美元更改为 6.99 美元。Magento<strong>必须重新索引</strong>价格变化才能将其显示在您的店面上。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果没有索引，Magento 就必须动态计算每种产品的价格&mdash;&mdash;考虑到购物车价格规则、捆绑定价、折扣、分级定价等。加载产品价格需要很长时间，可能会导致购物车放弃。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>创建索引器概述</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="lets-start-to-create-a-custom-indexer">让我们开始创建一个自定义索引器：</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：创建索引器配置文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：创建Mview配置文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：创建索引器类</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 4 步：运行测试</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-indexer-configuration-file">创建索引器配置文件</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>该配置文件将定义索引器。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件<code>app/code/Example/HelloWorld/etc/indexer.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd"&gt;
    &lt;indexer id="example_helloworld_indexer" view_id="example_helloworld_indexer" class="<span>Example</span>\HelloWorld\Model\Indexer\Test"&gt;
        &lt;title translate="true"&gt;<span>Example</span> HelloWorld Indexer&lt;/title&gt;
        &lt;description translate="true"&gt;HelloWorld of custom indexer&lt;/description&gt;
    &lt;/indexer&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在此文件中，我们使用以下属性声明一个新的索引器进程：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>id 属性用于标识该索引器。当您想通过命令行检查状态、模式或重新索引该索引器时，可以调用它。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>这<code>view_id</code>是将在配置文件中定义的视图元素的 id&nbsp;<code>mview</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>class 属性是我们处理索引器方法的类的名称。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>简单的<strong>Magento 2 索引</strong>将有一些子元素：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>title 元素用于定义在索引器网格中显示时的标题。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>描述元素用于定义在索引器网格中显示时的描述。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-mview-configuration-file">创建Mview配置文件</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>该<code>mview.xml</code>文件用于跟踪某个实体的数据库更改并运行更改句柄（execute() 方法）。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/etc/mview.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd"&gt;
    &lt;view id="example_helloworld_indexer" class="<span>Example</span>\HelloWorld\Model\Indexer\Test" group="indexer"&gt;
        &lt;subscriptions&gt;
            &lt;table name="catalog_product_entity" entity_column="entity_id" /&gt;
        &lt;/subscriptions&gt;
    &lt;/view&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在此文件中，我们定义一个视图元素，该元素具有要从索引器调用的 id 属性和包含该方法的类<code>execute()</code>。当订阅中的表发生更改时，将运行此方法。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>为了声明表，我们使用表名和该表的列，它们将被发送到该<code>execute()</code>方法。在此示例中，我们声明了 table&nbsp;<code>catalog_product_entity</code>。因此，每当保存一个或多个产品时，类中的execute()方法<code><code>Example</code>\HelloWorld\Model\Indexer\Test</code>就会被调用。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="create-indexer-class">创建索引器类</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>按照上面的内容<code>indexer.xml</code>，<code>mview.xml</code>我们将为它们定义一个 Indexer 类：<code><code>Example</code>\HelloWorld\Model\Indexer\Test</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/Model/Indexer/Test.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?php
namespace <span>Example</span>\HelloWorld\Model\Indexer;

class Test implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
	/*
	 * Used by mview, allows process indexer in the "Update on schedule" mode
	 */
	public function execute($ids){

		//code here!
	}

	/*
	 * Will take all of the data and reindex
	 * Will run when reindex via command line
	 */
	public function executeFull(){
		//code here!
	}
   
   
	/*
	 * Works with a set of entity changed (may be massaction)
	 */
	public function executeList(array $ids){
		//code here!
	}
   
   
	/*
	 * Works in runtime for a single entity using plugins
	 */
	public function executeRow($id){
		//code here!
	}
}
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>您可以在 Indexer 类的方法中编写代码以将数据添加到索引器表中。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>之后，请刷新缓存并<code>System &gt; Index Management</code>从后端查看结果。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="run-reindex-by-command">通过命令运行重建索引</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>通过命令行运行重新索引<a href="https://www.mageplaza.com/devdocs/magento-2-command-line-interface-cli.html"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento indexer:reindex
</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Tue, 05 Sep 2023 07:21:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 路由开发]]></title>
      <link>https://www.360magento.com/blog/magento-2-routings/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在这篇文章中，我们将讨论<strong>Magento 2 路由</strong>中的一个重要部分。路由将定义模块的名称，我们可以在 url 中使用该名称来查找模块并执行控制器操作<strong>。</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p><strong>目录</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>Magento 2 请求流程</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在前端/管理上创建自定义路由<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>前端路线<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>routes.xml</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>管理路线</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>使用route重写controller</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="magento-2-request-flow">Magento 2 请求流程</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在Magento 2中，请求 url 将如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>http://example.com/index.php/front_name/controller/action
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>在该 url 中，您将看到<code>front_name</code>用于查找模块的 。<strong>路由器</strong>通过在<strong>routes.xml</strong>中定义为每个模块定义这个名称，我们将在下面看到更多细节。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>当您在 Magento 2 中发出请求时，它将按照以下流程查找<code>controller/action</code>：&nbsp;<code>index.php &rarr; HTTP app &rarr; FrontController &rarr; Routing &rarr; Controller processing &rarr; etc</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>将<code>FrontController</code>在 Http 类中调用来路由将找到<code>controller/action</code>匹配项的请求。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>vendor/magento/framework/App/FrontController.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>public function dispatch(RequestInterface $request)
{
   \Magento\Framework\Profiler::start('routers_match');
   $routingCycleCounter = 0;
   $result = null;
   while (!$request-&gt;isDispatched() &amp;&amp; $routingCycleCounter++ &lt; 100) {
       /** @var \Magento\Framework\App\RouterInterface $router */
       foreach ($this-&gt;_routerList as $router) {
           try {
               $actionInstance = $router-&gt;match($request);
               if ($actionInstance) {
                   $request-&gt;setDispatched(true);
                   $this-&gt;response-&gt;setNoCacheHeaders();
                   if ($actionInstance instanceof \Magento\Framework\App\Action\AbstractAction) {
                       $result = $actionInstance-&gt;dispatch($request);
                   } else {
                       $result = $actionInstance-&gt;execute();
                   }
                   break;
               }
           } catch (\Magento\Framework\Exception\NotFoundException $e) {
               $request-&gt;initForward();
               $request-&gt;setActionName('noroute');
               $request-&gt;setDispatched(false);
               break;
           }
       }
   }
   \Magento\Framework\Profiler::stop('routers_match');
   if ($routingCycleCounter &gt; 100) {
       throw new \LogicException('Front controller reached 100 router match iterations');
   }
   return $result;
}

</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>正如您在此方法中看到的<code>dispatch()</code>，路由器列表将循环查找与此请求匹配的路由器。如果它找到此请求的控制器操作，则将调用并执行该操作。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="create-custom-route-on-frontendadmin">在前端/管理上创建自定义路由</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>我们将了解如何创建前端路由、管理路由以及如何使用路由重写控制器。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="frontend-route">前端路线</h3>
<p><!-- /wp:heading --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="routesxml">路由.xml</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>要注册前端路由，我们必须创建一个<strong>routes.xml</strong>文件：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/Example/HelloWorld/etc/frontend/routes.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0" ?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
    &lt;!--Use router 'standard' for frontend route--&gt;
    &lt;router id="standard"&gt;
        &lt;!--Define a custom route with id and frontName--&gt;
        &lt;route frontName="helloworld" id="helloworld"&gt;
            &lt;!--The module which this route match to--&gt;
            &lt;module name="<span>Example</span>_HelloWorld"/&gt;
        &lt;/route&gt;
    &lt;/router&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>请看一下代码，你会发现注册<strong>路由</strong>非常简单。您必须使用标准路由器作为前端。该路由将有一个为其定义模块的子路由和 2 个属性：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>id 属性是一个唯一的字符串，用于标识该路由。您将使用此字符串来声明此模块操作的布局句柄</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>frontName 属性也是一个唯一的字符串，将显示在 url 请求上。例如，如果您声明这样的路线：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code> &lt;route frontName="helloworld" id="helloworld"&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>该模块的 url 应该是：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>http://example.com/index.php/helloworld/controller/action
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>此操作的布局句柄为：<code>helloworld_controller_action.xml</code>&nbsp;因此，对于此示例路径，您必须在此文件夹中创建操作类：<code>{namespace}/{module}/Controller/{Controller}/{Action}.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="admin-route">管理路线</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>该路由与前端路由相同，但您必须在 adminhtml 文件夹中声明它，路由器 id 为<code>admin</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/<code>Example</code>/HelloWorld/etc/adminhtml/routes.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
    &lt;!--Use router 'admin' for admin route --&gt;
    &lt;router id="admin"&gt;
        &lt;!--Define a custom route with id and frontName --&gt;
        &lt;route id="<span>example</span>_helloworld" frontName="<span>example</span>_helloworld"&gt;
            &lt;!--The module which this route match to--&gt;
            &lt;module name="<span>Example</span>_HelloWorld"/&gt;
        &lt;/route&gt;
    &lt;/router&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>管理页面的 url 与前端页面的结构相同，但<code>admin_area</code>前面会添加名称<code>route_frontName</code>以识别这是管理路由器。例如，管理 cms 页面的 url ：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>http://example.com/index.php/admin/<span>example</span>_helloworld/controller/action
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>管理页面的控制器操作将添加到文件夹内<code>Controller/Adminhtml</code>。例如上面的网址：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>{namespace}/{module}/Controller/Adminhtml/{Controller}/{Action}.php
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="use-route-to-rewrite-controller">使用route重写controller</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在此路径中，我们将看到如何使用路由器重写控制器。如上路径，可以看到每条路由都会有一个id属性来标识。那么如果我们定义 2 个具有相同 id 属性的路由会发生什么呢？</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>答案是控制器操作将在这两个模块中找到。Magento 系统提供before/after 属性来配置模块排序顺序，定义首先找到哪个模块控制器。这是控制器重写的逻辑。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，如果我们想重写控制器<code>customer/account/login</code>，我们将在<strong>route.xml</strong>中定义更多路由，如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>文件：<code>app/code/Example/HelloWorld/etc/frontend/routes.xml</code></p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
   &lt;!--Use router 'standard' for frontend route--&gt;
   &lt;router id="standard"&gt;
        &lt;!--Define a custom route with id and frontName--&gt;
        &lt;route frontName="helloworld" id="helloworld"&gt;
            &lt;!--The module which this route match to--&gt;
            &lt;module name="<span>Example</span>_HelloWorld"/&gt;
        &lt;/route&gt;
       &lt;route id="customer"&gt;
           &lt;module name="<span>Example</span>_HelloWorld" before="Magento_Customer" /&gt;
       &lt;/route&gt;
   &lt;/router&gt;
&lt;/config&gt;
</code></pre>
<p><!-- /wp:code --> <!-- wp:paragraph --></p>
<p>和控制器文件：<code>app/code/<code>Example</code>/HelloWorld/Controller/Account/Login.php</code></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>所以 frontController 会首先在我们的模块中查找Login 操作，如果找到，它将运行，而 Login 操作<code>Magento_Customer</code>将不会运行。我们成功重写了控制器。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>您还可以使用它来拥有与另一个模块具有相同路由器的第二个模块。例如，通过上述声明，您可以将路由&ldquo;customer&rdquo;用于控制器操作。如果您有控制器&ldquo;Blog&rdquo;和操作&ldquo;Index.php&rdquo;，您可以使用以下网址：</p>
<p><!-- /wp:paragraph --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>http://example.com/customer/blog/index</code></pre>
<p><!-- /wp:code --></p>
<div id="gtx-trans" style="position: absolute; left: -37px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 04 Sep 2023 03:29:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中的订单状态工作流程]]></title>
      <link>https://www.360magento.com/blog/order-status-workflow-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>遵循<strong>订单状态工作流程</strong>将帮助您了解客户下订单时的订购流程。否则，订单状态工作流程将向商店管理员显示每个订单状态都对应于一个 state。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，新订单的第一阶段未付款和交付，Magento 2系统会自动将其设置为&ldquo;待处理&rdquo;。完成发票或更新发货后，状态将更改为&ldquo;处理中&rdquo;，当您生成发票并发货订单时，状态将更改为&ldquo;完成&rdquo;。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>让我们通过下图详细了解订单状态工作流程。</p>
<p><!-- /wp:paragraph --> <!-- wp:image {"id":3894,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3894" src="http://kb.360magento.net/wp-content/uploads/2023/08/order-status-workflow-magento-2.png" /><img src="https://www.360magento.com/media/wysiwyg/order-status-workflow-magento-2.png" /> <!-- /wp:image --> <!-- wp:paragraph --></p>
<p>Magento 2 创建预定义状态，例如：新建、待付款、处理、完成、关闭、取消、暂停、付款审核。一些预定义状态包括正在处理、待付款、待付款 Paypal、暂停、涉嫌欺诈、待处理、完成、已关闭、已取消、付款审核。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>下面我们就为大家解释一下工作流程中的术语：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><strong>新：</strong>当客户刚刚创建订单且尚未付款时</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>待处理：</strong>当发票和发货尚未创建时</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>处理中：</strong>订单已开票或已交付</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>完成：</strong>当订单已开具发票并发货时</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>暂停：</strong>管理员可以手动分配暂停状态</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>已取消：</strong>当订单尚未支付时，商店管理员或支付网关将决定放置此状态。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>已关闭：</strong>已包含贷项凭证且已退款。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Sun, 03 Sep 2023 07:47:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ 如何在 Magento 2 中配置运输策略]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-shipping-policy-magento-2/</link>
      <description><![CDATA[<p><span><span>店主应在结帐时向顾客阐明运输政策。</span><span>每个商店的运输政策都会有所不同，因此店主有必要核实客户是否准确了解您的运输政策。</span></span></p>
<p>Magento 2<span>支持您配置显示或不显示的运输政策，您可以通过在配置中完成运输政策参数来轻松编辑您的运输政策。</span></p>
<p><span>按照下面给出的指南在 Magento 2 中配置运输政策</span></p>
<h2 id="configure-your-shipping-policy-in-magento-2"><span>在 Magento 2 中配置您的运输政策</span></h2>
<ul>
<li><span>在管理面板上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>在&ldquo;&nbsp;</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>&rdquo;部分中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span><span>在左侧面板中</span><span>选择</span></span><code class="language-plaintext highlighter-rouge">Shipping Settings</code><span>下</span><code class="language-plaintext highlighter-rouge">Sales</code><span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Shipping Policy Parameters</code><span>部分，然后继续执行以下操作：</span>
<ul>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Apply Custom Shipping Policy</code><span>字段中，选择</span><code class="language-plaintext highlighter-rouge">Yes</code><span>启用应用</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Shipping Policy</code><span>字段的文本框中输入您的运输政策。</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。<br /><img src="https://www.360magento.com/media/wysiwyg/xcfI7eX.png" /><br /></span></li>
</ul>]]></description>
      <pubDate>Sat, 02 Sep 2023 07:40:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置多个地址运送]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-multiple-addresses-shipping-magento-2/</link>
      <description><![CDATA[<p><span><span>在本主题中，我将介绍一种最简单的方法来帮助您配置多个地址运送，从而允许客户在结帐页面将其订单运送到多个地址。</span><span>在某些情况下，当客户想要订购多种产品并将其运送到多个送货地址时，此功能是必要的。</span></span></p>
<p><span><span>商店所有者无需集成更多 Multiple Shipping Magento 扩展</span><span>即可</span></span>让客户满意。<span><span>跳出率将会降低，销量也会相应提高。</span><span>请按照下面给出的简单指南来配置多地址运送。</span></span></p>
<h2 class="active" id="4-steps-to-configure-multiple-address-shipping-in-magento-2"><span>在 Magento 2 中配置多个地址运送的 4 个步骤</span></h2>
<ol>
<li><span>在管理面板上，单击</span>&ldquo;商店&rdquo;<span><span>。</span><span>在</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>&ldquo;部分&rdquo;中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code></li>
<li><span><span>在左侧面板中</span><span>选择</span></span><code class="language-plaintext highlighter-rouge">Multishipping Settings</code><span>下</span><code class="language-plaintext highlighter-rouge">Sales</code><span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Options</code><span>部分，然后继续执行以下操作：<br /><img src="https://www.360magento.com/media/wysiwyg/I6CWSs3.png" /><br /></span></li>
</ol><ol>
<li>
<ul>
<li><span>在&ldquo;允许运送到</span>多个地址&rdquo;<span>字段中，选择</span><code class="language-plaintext highlighter-rouge">Yes</code><span>是否允许</span></li>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Maximum Qty Allowed for Shipping to Multiple Addresses</code><span>字段中输入您允许的最大送货地址数量</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。</span></li>
</ol>
<h2 class="active" id="benefits-of-multiple-addresses-shipping-in-magento-2"><span>Magento 2 中多个地址运送的好处</span></h2>
<p><span>Magento 2 中的多个地址运输可以为您带来惊人的好处，例如：</span></p>
<ul>
<li><span>鼓励赠送节日礼物：</span><span><span>在节日期间，顾客往往会购买礼物并同时发送给不同地址的很多人。</span><span>此功能使送礼变得比以往更容易。</span></span></li>
<li><span>支持企业礼品：</span><span>现在很容易获得想要为员工或商业伙伴购买礼品的公司的大订单。</span></li>
<li><span>降低跳出率：</span><span><span>通常，由于地址不同，购物者必须一次订购一份订单。</span><span>每当顾客完成结账时，商店就不得不面临可能推迟下次购买的风险。</span><span>不过，现在客户只需下单一次，因此跳出率将大大降低。</span></span></li>
<li></li>
</ul>]]></description>
      <pubDate>Fri, 01 Sep 2023 07:17:08 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置免费送货方式]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-free-shipping-method-magento-2/</link>
      <description><![CDATA[<h2 class="active" id="configure-free-shipping-method-in-magento-2"><span>在 Magento 2 中配置免费送货方式</span></h2>
<ul>
<li>配置免费送货方式设置</li>
<li>在承运商配置中显示免费送货</li>
</ul>
<h3 id="complete-free-shipping-method-settings"><span>在 Magento 2 中配置免费送货方法的步骤</span></h3>
<ul>
<li><span>在管理面板上，</span><code class="language-plaintext highlighter-rouge">Stores &gt; Settings &gt; Configuration</code><span>.</span></li>
<li><span>在左侧面板的 下</span><code class="language-plaintext highlighter-rouge">Sales</code><span>，选择 选项</span><code class="language-plaintext highlighter-rouge">Shipping Methods</code><span>卡。</span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Free Shipping</code><span>部分，</span>
<ul>
<li><code class="language-plaintext highlighter-rouge">Enable</code><span></span><span>选择是的</span><span><span>运输方式</span><span>。</span></span></li>
<li><span>在结账页面设置</span><code class="language-plaintext highlighter-rouge">Title</code><span>免运费。</span></li>
<li><span>在字段中创建有关运输方式的描述</span><code class="language-plaintext highlighter-rouge">Method Name</code><span>。</span></li>
<li><span>提供</span><code class="language-plaintext highlighter-rouge">Minimum Order Amount</code><span>运费。</span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Displayed Error Message</code><span><span>如果免费送货不可用，</span><span>请在出现的框中输入错误消息。</span></span></li>
<li><span>设置</span><code class="language-plaintext highlighter-rouge">Ship to Applicable Countries</code><span>为两个选项之一：</span>
<ul>
<li><span>所有允许的国家/地区：每个国家/地区均支持免费送货。</span></li>
<li><span>特定国家/地区：仅特定国家/地区支持免费送货。</span></li>
</ul>
</li>
<li><span></span><code class="language-plaintext highlighter-rouge">Show Method if Not Applicable</code><span><span>如果您想始终显示免费送货，</span><span>请设置为&ldquo;是&rdquo;。</span></span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Sort Order</code><span><span>在结帐页面的运输方式上</span><span>设置。</span></span></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">Save Config</code><span>完成。</span></li>
</ul>
<h3 id="display-free-shipping-in-carrier-configuration"><span>在运营商配置中激活免费送货</span></h3>
<ul>
<li><span>从运输方式配置中，打开该</span><code class="language-plaintext highlighter-rouge">UPS</code><span>部分。</span></li>
<li><span>将&ldquo;自由方法&rdquo;设置为&ldquo;接地&rdquo;。</span></li>
<li><span>启用</span><code class="language-plaintext highlighter-rouge">Free Shipping with Minimum Order Amount</code><span>并设置现场应用免费送货的最小订单数量</span><code class="language-plaintext highlighter-rouge">Minimum Order Amount for Free Shipping</code><span>。</span></li>
<li><code class="language-plaintext highlighter-rouge">Save Config</code><span>完成。</span></li>
</ul>]]></description>
      <pubDate>Thu, 31 Aug 2023 07:11:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置统一费率运送方式]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-flat-rate-shipping-method-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>统一费率送货方式是在您的商店配置送货方式的简单解决方案。对于不同尺寸或重量或任何送货地址的任何订单，它收取固定的运费。由于统一费率运输易于配置和应用，因此受到许多运营商的欢迎。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>掌握在 Magento 2 中配置统一费率、免费和表费率运输方式的艺术，以有效地应用不同的费用。立即增强您的运输流程，实现最大程度的优化！</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="4-steps-to-configure-flat-rate-shipping-method-in-magento-2">在 Magento 2 中配置统一费率运送方式的 4 个步骤：</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Settings &gt; Configuration</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板的 下<code>Sales</code>，选择<code>Shipping Methods</code>选项卡。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Flat Rate</code>部分，
<ul>
<li><code>Enable</code><strong>选择是的</strong>运输方式。届时，购物车的&ldquo;预估运费和税费&rdquo;部分以及结账时的&ldquo;运费&rdquo;部分中均提供统一费率。</li>
<li>在结帐页面上设置<code>Title</code>统一运费。</li>
<li><code>Method Name</code>在购物车中显示计算运费的字段中描述方法。方法名称默认为&ldquo;Fixed&rdquo;。</li>
<li>要阐明应用统一费率送货方式的条款，请将 设为<code>Type</code>以下选项之一：</li>
</ul>
<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>无：此类型的运费为零，类似于免费送货方式。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>每个订单：设置整个订单的统一运费</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>每件商品：设置每件商品的统一运费。费率乘以购物车中的商品数量，无论是否有多个相同或不同的商品。* 提供<code>Price</code>您想要收取统一运费的费用。* 如果您要求收取额外的手续费，请设置<code>Calculate Handling Fee</code>为&ldquo;固定&rdquo;或&ldquo;百分比&rdquo;，然后在字段中输入您要设置的数字<code>Handling Fee</code>。<code>Displayed Error Message</code>*如果无法使用统一费率送货，请输入简短的文本。* 设置<code>Ship to Applicable Countries</code>为以下两个选项之一：</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>所有允许的国家/地区：每个国家/地区均支持免费送货。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>特定国家/地区：仅特定国家/地区支持统一费率运送。*<code>Sort Order</code>在结账页面的运输方式上设置。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Config</code>去完成。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3873,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3873" src="http://kb.360magento.net/wp-content/uploads/2023/08/how-to-configure-flat-rate-shipping-method-magento-2-flat-rate-shipping-configuration-1-1.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-configure-flat-rate-shipping-method-magento-2-flat-rate-shipping-configuration_1_.png" /> <!-- /wp:image --></p>]]></description>
      <pubDate>Wed, 30 Aug 2023 07:36:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用或禁用重新排序]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-disable-reorders-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>在 Magento 2 中启用重新订购</strong>可帮助客户在完成购买后重新订购。如果每个细节保持不变，客户不再需要再次填写所有信息，此功能简化了流程。借助它，您可以增强客户体验并快速提高销售额。客户可以立即从他们的帐户重新订购或要求管理员在后端重新订购。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您不想允许客户重新订购，您应该考虑这一点，因为默认情况下启用重新订购功能。现在，让我们跳转到在 Magento 2 中启用或禁用重新排序的步骤：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="steps-to-enable-or-disable-customer-reorder-in-magento-2">在 Magento 2 中启用或禁用客户重新订购的步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Sales</code>下<code>Sales</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Reorder</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3870,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3870" src="http://kb.360magento.net/wp-content/uploads/2023/08/QsQomlu-1024x477.png" /><img src="https://www.360magento.com/media/wysiwyg/QsQomlu.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Allow Reorder</code>字段中，选择<code>Yes</code>允许重新订购并选择<code>No</code>禁用重新订购。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>完成后，单击<code>Save</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Tue, 29 Aug 2023 07:29:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加、管理、导出订阅者]]></title>
      <link>https://www.360magento.com/blog/how-to-add-manage-export-subscribers-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在Magento 2中，您可以有效地管理订阅列表。您可以查看所有订阅者，采取更改状态以取消订阅的操作，甚至在必要时删除标记的订阅者。每当客户要求取消订阅您的电子邮件时，您应该在短时间内采取行动来满足他们，否则可能会让您的客户不高兴并对您的网站产生负面看法。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="to-add-manage-export-subscribers-in-magento-2">在 Magento 2 中添加、管理、导出订阅者</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>如何取消订阅</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如何导出订阅者列表</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="how-to-cancel-a-subscription">如何取消订阅</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，单击<code>Marketing</code>。在&ldquo;&nbsp;<code>Communications</code>&rdquo;部分中，选择<code>Newsletter Subscribers</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Status</code>列中，找到<code>subscriber</code>列表中的 。之后，标记第一列中的复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将<code>Action</code>控件更改为<code>Unsubscribe</code>.&nbsp;然后，单击<code>Submit</code>。标记记录的状态将更改为<code>Unsubscribed</code>。</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/G8SCRPP.png" /><!-- /wp:list --> <!-- wp:image {"id":3866,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3866" src="http://kb.360magento.net/wp-content/uploads/2023/08/G8SCRPP.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="how-export-list-subcribers">导出订阅者列表</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在该<code>Status</code>列中，使用筛选器控件筛选适合相应网站、商店或商店视图的所有已订阅状态。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择您想要导出到的文件，<code>CSV</code>或者<code>XML</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>然后，单击<code>Export</code>并保存文件</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/TaJPtjN.png" /><!-- /wp:list --> <!-- wp:image {"id":3867,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3867" src="http://kb.360magento.net/wp-content/uploads/2023/08/TaJPtjN.png" /> <!-- /wp:image --></p>]]></description>
      <pubDate>Mon, 28 Aug 2023 07:11:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改 PDF 发票徽标、发货徽标]]></title>
      <link>https://www.360magento.com/blog/how-to-change-pdf-invoice-logo-shippment-logo-magento-2/</link>
      <description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-change-pdf-invoice-logo-shippment-logo-in-magento-2">如何在 Magento 2 中更改 PDF 发票徽标、发货徽标</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>设置发票和装箱单</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>替换图像</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>请按照简单的方法来执行此操作：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="setup-invoices-packing-slips">设置发票和装箱单的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理侧栏上，单击<code>Stores &gt; Settings &gt; Configuration</code>。然后，查看左侧面板的 下<code>Sales</code>，单击<code>Sales</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开发票和装箱单设计部分。然后，执行以下操作：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3863,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3863" src="http://kb.360magento.net/wp-content/uploads/2023/08/qc54tz8.png" /><img src="https://www.360magento.com/media/wysiwyg/qc54tz8.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>要上传<code>Logo for PDF Print-outs</code>，请单击<code>Choose File</code>。选择徽标，然后单击<code>Open</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要上传<code>Logo for HTML Print View</code>，请单击<code>Choose File</code>。选择徽标，然后单击<code>Open</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>填写您的地址以显示在发票和装箱单上。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。注意：即使缩略图出现扭曲，发票上的徽标比例也是正确的。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="replace-image">替换图像的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>单击<code>Choose File</code>并根据需要选择其他徽标文件。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>标记<code>Delete Image</code>您要替换的图像的复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Sun, 27 Aug 2023 07:09:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改发票、发货、贷项凭证 PDF 中的客户地址模板]]></title>
      <link>https://www.360magento.com/blog/how-change-customer-address-template-in-invoices-shipments-credit-memo-pdf-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>按照这篇文章了解<strong>如何在 Magento 2 中更改发票、发货、贷项凭证 PDF 中的客户地址模板</strong>。地址模板将确定客户地址的格式，包括客户帐户中显示的帐单地址、送货地址和客户地址信息。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>这里给大家介绍一下简单的方法：</p>
<p><!-- /wp:paragraph --> <!-- wp:image {"id":3854,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3854" src="http://kb.360magento.net/wp-content/uploads/2023/08/JAMNc9H-1024x645.png" /><img src="https://www.360magento.com/media/wysiwyg/JAMNc9H.png" /> <!-- /wp:image --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-change-customer-address-template-in-invoices-shipments-credit-memo-pdf-in-magento-2">如何在 Magento 2 中更改发票、发货、贷项凭证 PDF 中的客户地址模板</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>示例 1：文本模板 用于文本、一行文本、HTML 和 PDF 地址模板</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>
{{depend address attribute code}} a space, a character, or UI label
{{/depend}};
{{if address attribute code}}{{var address attribute code}} a space,
a character, or UI label
{{/if}}

</code></pre>
<p><!-- /wp:code --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>示例 2：JavaScript 模板 对于 JavaScript 地址模板</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>
#{address attribute code} or User Interface label #{address
attribute code}
</code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Sat, 26 Aug 2023 08:30:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中的电子邮件模板列表]]></title>
      <link>https://www.360magento.com/blog/email-template-list-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>电子邮件模板列表</strong>包括各种可自定义的模板，每个模板对应于不同的活动，例如客户帐户、客户活动、新闻通讯、促销等。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>电子邮件模板可用作系统对客户在您网站上的活动的响应，同时支持正文内容的默认模板，并将其与已完成电子邮件的页眉和页脚模板相关联。最值得注意的是，由于内容的格式是 HTML 和 CSS，因此可以灵活地自定义电子邮件模板以适合每个网站或每个商店视图。为了确保它发送到收件箱，您应该启用SMTP。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>按照下面的模板列表了解您可以自由编辑的电子邮件模板是什么：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><strong>客户账户</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>新账户</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>新帐户确认密钥</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>新账户已确认</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>新账户无密码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>忘记密码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>提醒密码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>重设密码</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>客户活动</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>联系表</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>发送产品链接给朋友</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>愿望清单分享</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>时事通讯</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>订阅确认</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>订阅成功</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>退订成功</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>产品提醒</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>克朗错误警告</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>价格提醒</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>库存提醒</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>促销活动</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>促销通知/提醒</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>管理员活动</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>忘记管理员密码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>重设密码</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>电子邮件模板</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>电子邮件 - 页脚</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>电子邮件 - 标题</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>导出失败</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>导入失败</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如何在 Magento 2 中自定义电子邮件模板</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>产品提醒</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>产品警报Cron 错误</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>产品价格提醒</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>产品库存提醒</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>命令</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>新订单/宾客新订单</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>订单更新/宾客订单更新</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>支付失败</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>发票</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>新发票/客人新发票</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>发票更新/客人发票更新</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>运输</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>新货/宾客新货</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>货件更新/访客货​​件更新</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>贷项凭证</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>贷项凭证更新</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>宾客贷项凭证更新</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>新贷项凭证</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>宾客新贷项凭证</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>系统通知</strong><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>站点地图生成警告</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>货币更新警告</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Fri, 25 Aug 2023 07:42:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置付款失败电子邮件]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-payment-failed-email-magento-2/</link>
      <description><![CDATA[<h2 class="active" id="configure-the-payment-failed-email"><span>配置支付失败邮件</span></h2>
<ul>
<li>刷新电子邮件模板</li>
<li>配置支付失败邮件</li>
</ul>
<h3 id="refresh-email-template"><span>刷新电子邮件模板</span></h3>
<p><span>确保您已更新每个电子邮件模板以反映</span>您的品牌<span>。</span></p>
<h3 id="configure-payment-failed-emails"><span>配置付款失败电子邮件的步骤</span></h3>
<ol>
<li><span>在管理面板上，</span><code class="language-plaintext highlighter-rouge">Stores &gt; Settings &gt; Configurations</code><span>.</span></li>
<li><span>在左侧面板的</span><code class="language-plaintext highlighter-rouge">Sales</code><span>选项卡下，单击</span><code class="language-plaintext highlighter-rouge">Checkout</code><span>子选项卡。</span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Payment Failed Emails</code><span>部分</span>
<ul>
<li><span>在字段中选择电子邮件的商店联系人作为消息的接收者</span><code class="language-plaintext highlighter-rouge">Payment Failed Email Receiver</code><span>。</span></li>
<li><span>在字段中选择电子邮件的商店联系人作为消息的发件人</span><code class="language-plaintext highlighter-rouge">Payment Failed Email Sender</code><span>。</span></li>
<li><span>选择发送给现场注册客户的所需电子邮件模板</span><code class="language-plaintext highlighter-rouge">Payment Failed Template</code><span>。</span></li>
<li><span>要同时向多人发送付款失败电子邮件，请在字段中输入电子邮件地址</span><code class="language-plaintext highlighter-rouge">Send Payment Failed Email Copy To&nbsp;</code><span>，每个电子邮件地址均以逗号分隔。</span></li>
<li><span>在以下选项中选择一种发送电子邮件的方法</span><code class="language-plaintext highlighter-rouge">Payment Failed Copy Method</code><span>：</span></li>
</ul>
<ul>
<li><span><span>密件抄送：通过将收件人包含在发送给客户的同一电子邮件的标题中来发送&ldquo;密送副本&rdquo;。</span><span>客户看不到密件抄送收件人，并且他/她不知道副本已发送到多个地址。</span></span></li>
<li><span>单独的电子邮件：将电子邮件副本作为单独的电子邮件发送。</span></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">Save Config</code><span>完成支付失败邮件配置。</span></li>
</ol>]]></description>
      <pubDate>Thu, 24 Aug 2023 07:01:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改电子邮件徽标]]></title>
      <link>https://www.360magento.com/blog/how-to-change-email-logo-magento-2/</link>
      <description><![CDATA[<h2 class="active" id="3-steps-to-change-email-logo-in-magento-2"><span>在 Magento 2 中更改电子邮件徽标的 3 个步骤</span></h2>
<p><span>以下步骤将帮助您了解如何更改 Magento 2 中的电子邮件徽标：</span></p>
<ul>
<li>第 1 步：上传您的徽标</li>
<li>第 2 步：选择页眉和页脚模板</li>
<li>第 3 步：保存配置和设计</li>
</ul>
<h3 id="upload-logo"><span>第 1 步：上传您的徽标</span></h3>
<p><span><span>首先，您必须选择您的徽标并将其上传到 Magento 平台。</span><span>我将向您展示如何在 MAgento 2.0 和 2.1 或更高版本中执行此操作：</span></span></p>
<h4 id="change-email-logo-in-magento-20"><span>在 Magento 2.0 中更改电子邮件徽标</span></h4>
<ul>
<li><span>在管理侧栏上，</span><code class="language-plaintext highlighter-rouge">Stores &gt; Settings &gt; Configuration</code><span>.</span></li>
</ul>
<h4 id="change-email-logo-in-magento-21-or-above"><span>在 Magento 2.1 或更高版本中更改电子邮件徽标</span></h4>
<ul>
<li>
<p><span>在管理侧栏上，</span><code class="language-plaintext highlighter-rouge">Content &gt; Design &gt; Configuration &gt; Select your current theme &gt;&nbsp;</code><span>.</span></p>
</li>
<li><span>您可以在管理表中看到现有的设计配置，然后单击</span><code class="language-plaintext highlighter-rouge">Edit</code><span>下的</span><code class="language-plaintext highlighter-rouge">Action</code><span>。</span></li>
<li><span>在工作场所，请向下滚动到</span><span>其他设置</span><span>，打开</span><code class="language-plaintext highlighter-rouge">Transactional Email</code><span>选项，</span>
<ul>
<li><span>要更改您的徽标电子邮件，请单击</span><code class="language-plaintext highlighter-rouge">Upload</code><span>选择您想要用于徽标的图像文件之一。</span></li>
<li><span>输入标识 的替代文本</span><code class="language-plaintext highlighter-rouge">Logo Image Alt</code><span>。</span></li>
<li><span>要求</span><code class="language-plaintext highlighter-rouge">Logo Width</code><span>和</span><code class="language-plaintext highlighter-rouge">Logo Height</code><span><span>以像素为单位。</span><span>只需输入不包含&ldquo;px&rdquo;符号的数字即可。</span><span>标题中电子邮件徽标的外观取决于提供的值大小，而不是徽标的实际大小。</span></span></li>
</ul>
</li>
</ul>
<h3 id="select-header-footer-templates"><span>第 2 步：选择页眉和页脚模板</span></h3>
<p><span>如果您想要修改页眉和页脚模板，或者如果您经营多个商店，您可以为每个商店分配一个特定的模板，该模板将显示在交易电子邮件中。</span></p>
<ul>
<li><span><span>根据需要从可用列表中</span><span>选择 和</span></span><code class="language-plaintext highlighter-rouge">Header Template</code><span>。</span><code class="language-plaintext highlighter-rouge">Footer Template</code><span></span></li>
</ul>
<h3 id="save-config-design"><span>第 3 步：保存配置和设计</span></h3>
<p><code class="language-plaintext highlighter-rouge">Save Config</code><span>完成并且电子邮件的设计处于活动状态。</span></p>]]></description>
      <pubDate>Wed, 23 Aug 2023 07:58:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用管理员登录验证码]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-admin-login-captcha-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>将验证码要求添加到管理员登录和忘记密码页面有助于将您的商店安全性提高到一个新的水平。当用户点击该图标时，验证码将可以无限地重新加载<code>Reload</code>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="4-steps-to-enable-an-admin-captcha-in-magento-2">在 Magento 2 中启用管理员验证码的 4 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Admin</code>下<code>Advanced</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>CAPTCHA</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ol>
<p><img src="https://www.360magento.com/media/wysiwyg/Zir5S5l_1.png" /><!-- /wp:list --> <!-- wp:image {"id":3821,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3821" src="http://kb.360magento.net/wp-content/uploads/2023/08/Zir5S5l.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Enable CAPTCHA on Frontend</code>字段中，选择&ldquo;是&rdquo;以在前端启用验证码</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Font</code>字段中，选择用于验证码的字体名称。默认为 LinLibertine。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Forms</code>字段中，选择以下要使用 CAPTCHA 的表单之一<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>管理员登录</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>管理员忘记密码</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 中<code>Displaying Mode</code>，选择以下选项之一<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>总是</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>尝试登录次数后</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Number of Unsuccessful Attempts to Login</code>字段中，输入验证码出现之前尝试登录失败的次数。如果您输入零，验证码将始终可用</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>CAPTCHA Timeout (minutes)</code>字段中输入验证码到期前的分钟数。当验证码过期时，用户必须重新加载页面以生成新的验证码。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Number of Symbols</code>字段中输入验证码将更改的符号范围数，例如：3-7。符号的最大数量为八个。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在该<code>Symbols Used in CAPTCHA</code>字段中，指定可在验证码中使用的符号。仅在框中输入字母（az 和 AZ）或数字 (0-9)。不允许使用空格或其他字符，并且默认情况下不使用类似的符号。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Case Sensitive</code>字段中，选择<code>Yes</code>是否要求用户完全按照所示输入大写和小写字符<!-- wp:list {"ordered":true} --><ol><!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code></li>
<!-- /wp:list-item --></ol><!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Tue, 22 Aug 2023 07:40:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何配置 Magento 2 管理操作日志？]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-action-log-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>Magento 2 支持您<strong>配置管理操作日志</strong>，它将帮助您管理和跟踪管理员的所有活动。您可以在网格上查看日志历史记录，了解商店管理面板中执行的操作以及执行者。此外，您还可以在操作日志上查看 IP 和日期。该功能对于帮助您有效管理系统非常重要，特别是当您的商店有多个管理员时。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在请按照下面给出的简单指南来配置操作日志：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-configure-the-action-log-in-magento-2">如何在 Magento 2 中配置操作日志</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击Store。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Admin</code>下<code>Advanced</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Admin Actions Logging</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3818,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3818" src="http://kb.360magento.net/wp-content/uploads/2023/08/8xmQ5tx.png" /><img src="https://www.360magento.com/media/wysiwyg/8xmQ5tx_1.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>要启用管理日志记录，请选中该复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要禁用管理日志记录，请清除该复选框。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<div id="gtx-trans" style="position: absolute; left: -112px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 21 Aug 2023 07:02:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用模板路径提示]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-template-path-hints-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>您是否正在寻找<strong>如何在 Magento 2 教程中启用模板路径提示</strong>？所以你来对地方了。在这篇文章中，我们将帮助您从 Magento 管理面板启用前端和管理的模板路径提示。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>例如，Magento 2 中的模板路径提示可帮助您定义与商店的特定页面区域之一相对应的 .php 块类。由于每个路径模板中添加了符号，您还可以更轻松地找到 .phtml 文件，当然也可以更快地编辑它们。该代码可以在 Magento 文件结构的前端和后端找到。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="to-enable-template-path-hints-in-magento-2">在 Magento 2 中启用模板路径提示</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>我们将教程分为两个主要部分，如下所示：</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理配置中启用模板路径提示</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>启用模板路径提示命令行</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="enable-template-path-hints-in-admin-configuration">在管理配置中启用模板路径提示</h3>
<p><!-- /wp:heading --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="to-enable-template-path-hints-for-storefront">为店面启用模板路径提示</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><em>在 Magento 2 中启用模板路径提示的 3 个步骤</em></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第1步：进入管理面板</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：选择<code>Store &gt; Configuration &gt; Advanced &gt; Developer &gt; Debug &gt; Enabled Template Path Hints for Storefront</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：单击<code>Yes</code>启用模板路径提示</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3814,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3814" src="http://kb.360magento.net/wp-content/uploads/2023/08/IxPjmbA.png" /><img src="https://www.360magento.com/media/wysiwyg/IxPjmbA.png" /> <!-- /wp:image --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="enabled-template-path-hints-for-admin">为管理员启用模板路径提示</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>进入管理面板：Store &gt; Configuration &gt; Advanced &gt; Developer &gt; Debug &gt; Enabled Template Path Hints for Admin &gt; Yes</p>
<h3 class="wp-block-heading" id="enable-template-path-hints-command-line">启用模板路径提示命令行</h3>
<p><!-- /wp:heading --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="82016">8/2016</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>此时，可能没有命令行可以通过命令行（默认 Magento 2 命令行）启用或禁用模板路径提示。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>让我们等待下一次 Magento 更新或外部模块。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="updated-12018">2018 年 1 月更新</h4>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在您可以<strong>通过命令行启用或禁用模板路径提示</strong>&nbsp;转到 Magento 2 根文件夹并运行以下命令：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":5} --></p>
<h5 class="wp-block-heading" id="enable">使能够</h5>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento dev:template-hints:enable 
</code></pre>
<p><!-- /wp:code --> <!-- wp:heading {"level":5} --></p>
<h5 class="wp-block-heading" id="disable">禁用</h5>
<p><!-- /wp:heading --> <!-- wp:code --></p>
<pre class="wp-block-code"><code>php bin/magento dev:template-hints:disable </code></pre>
<p><!-- /wp:code --></p>]]></description>
      <pubDate>Sun, 20 Aug 2023 07:06:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中导入所有带有图像的产品]]></title>
      <link>https://www.360magento.com/blog/how-to-import-all-products-with-images-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在主题<strong>如何在 Magento 2 中导入带有图像的所有产品中</strong>，有指向产品图像文件的路径的&ldquo;图像文件目录&rdquo;字段。为了解释图像文件目录字段的存在，Magento 有自己的产品图像目录结构，该结构按字母顺序组织，并且特定图像的路径包含在导入产品文件中。实际上，您可以在使用具有管理服务器上 Magento 文件夹权限的正确凭据登录后，将图像文件上传到 Magento 服务器或外部服务器上。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>导入产品图片是管理员的常见任务；然而，如果你逐一手动进行，那就会浪费时间和精力。这就是为什么您需要有关如何批量导入图像的指南。很容易看出，<strong>导入所有带有图像的产品</strong>有两个步骤，我还将向您演示两种导入产品图像的方法：使用<strong>本地服务器</strong>和使用<strong>外部服务器</strong>。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="2-steps-to-import-all-products-with-images-in-magento-2">在 Magento 2 中导入所有带有图像的产品的 2 个步骤：</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第1步：将产品图片文件上传到本地服务器</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>步骤 2：使用 CSV 文件导入产品图像</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p><strong>2 上传产品图片的方法</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法一：从本地服务器导入产品图片</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法二：从外部服务器导入产品图片</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-1-import-image-from-local-server">方法一：从本地服务器导入图片</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>在此方法中，您将使用本地服务器批量上传 Magento 2 产品图像。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="upload-the-images-file-on-server">第一步：将图片文件上传到服务器</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在 Magento 服务器上，将图像文件上传到用于导入产品图像的默认文件夹：<code>pub/media/import</code>。您也可以在 Magento 服务器上使用不同的文件夹，只要在导入过程中指定该文件夹的路径即可。}</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="import-product-images-with-csv-file">步骤 2：使用 CSV 文件导入产品图像</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在 CSV 数据中，根据图像类型 (&nbsp;<code>base_image, small_image, thumbnail_image, or additional_images</code>) 在正确的行、按 SKU 和正确的列中输入要导入的每个图像文件的名称。确保每个文件名之前都包含导入目录的相对路径。例如：<code>/pub/media/import/image.jpg</code>.&nbsp;CSV 文件只需包含 SKU 列和相关图像列。如果要为单个 SKU 导入多个图像，请在 SKU 下方插入一个空白行，然后在相应的列中输入其他图像文件名。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>按照导入产品中的说明进行操作，直至填写<strong>&ldquo;图像文件目录&rdquo;</strong>字段。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>在图像文件目录</strong>字段中输入您最初上传图像的文件夹路径，然后继续导入产品。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3811,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3811" src="http://kb.360magento.net/wp-content/uploads/2023/08/Oxi0HyZ.png" /><img src="https://www.360magento.com/media/wysiwyg/Oxi0HyZ.png" /> <!-- /wp:image --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="method-2-import-images-from-external-server">方法二：从外部服务器导入图片</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果您想使用远程服务器为您的 Magento 2 商店导入图像，您可以使用此方法。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-upload-the-image-files-on-external-server">第 1 步：将图像文件上传到外部服务器</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>将要导入的图像上传到外部服务器上选定的文件夹。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 CSV 数据中，按图像类型 ( ) 在正确的列中输入每个图像文件的完整 URL&nbsp;<code>base_image, small_image, thumbnail_image, or additional_images</code>。例如：<code>http://example.com/images/image.jpg</code>.</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2-import-bulk-product-images">第2步：导入批量产品图片</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>过程与第一种方法的步骤2相同。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sat, 19 Aug 2023 07:52:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中导出产品所有数据、过滤和排除属性]]></title>
      <link>https://www.360magento.com/blog/export-products-all-data-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>如果您还没有习惯 Magento 的数据库，我建议您导出<strong>产品</strong>并打开 CSV 文件来熟悉结构。显然，当您熟悉数据库的结构时，您可以有效地管理您的信息。此外，导出产品数据不仅是为了帮助您熟悉数据库，它还可以用作备份您的产品数据或保存数据以用于其他目的（例如在其他站点上导入数据）的另一种工具。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>此外，如果您想在 Magento 2 中过滤和排除属性，您完全可以这样做。在今天的教程中，我将向您展示如何批量导出所有或筛选的产品数据。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="export-products-all-data-filter-and-exclude-attributes-in-magento-2">在 Magento 2 中导出产品所有数据、筛选和排除属性</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：开始导出产品数据</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：配置导出数据的类型</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：导出数据并打开 CSV 文件进行查看</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-start-export-product-data">第1步：开始导出产品数据</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理侧栏上，单击<code>System &gt; Data Transfer &gt; Export</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在&ldquo;<strong>导出设置&rdquo;</strong>部分中，将&ldquo;<strong>实体类型</strong>&rdquo;字段设置为&ldquo;<strong>产品</strong>&rdquo;以开始导出产品数据。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>保留默认的<strong>导出文件格式</strong>&ldquo;&nbsp;<strong>CSV</strong>&nbsp;&rdquo;。<br /><img src="https://www.360magento.com/media/wysiwyg/qFVyjlg.png" /></li>
</ul>
<h3 class="wp-block-heading" id="step-2-configure-type-of-export-data">第 2 步：配置导出数据的类型</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>现在，您可以过滤和排除某些属性。如果您只想批量导出部分数据，此设置很有用。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在步骤 1 中选择实体类型后，将出现&ldquo;实体属性&rdquo;部分，其中按字母顺序列出了所有可用属性。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要根据产品标签或产品代码搜索产品，请在<strong>属性标签</strong>/<strong>属性代码</strong>中输入标签/代码，然后单击<code>Search</code>按钮。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>要仅导出具有特定属性值的记录，请在&ldquo;过滤器</strong>&rdquo;列中输入所需的值。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要从导出中省略属性，请标记行开头的&nbsp;<strong>排除复选框。</strong></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3806,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3806" src="http://kb.360magento.net/wp-content/uploads/2023/08/goi350q-1024x296.png" /><img src="https://www.360magento.com/media/wysiwyg/goi350q.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-3-export-your-data-and-open-csv-file-to-view">第 3 步：导出数据并打开 CSV 文件进行查看</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>向下滚动并单击<code>Continue</code>页面右下角以启动导出操作。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>出现提示时，单击<code>Save</code>保存导出文件。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开 CSV 文件以查看或编辑导入的数据。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Fri, 18 Aug 2023 08:03:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建用户角色]]></title>
      <link>https://www.360magento.com/blog/how-to-create-user-role-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>在本主题中，我们将向您展示<strong>如何在 Magento 2 中创建用户角色</strong>。我们将指导您如何添加新的用户规则并将现有用户帐户分配给上述角色。让我们检查以下步骤：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="to-define-a-role-in-magento-2">在 Magento 2 中定义角色</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，单击<code>System</code>。在&ldquo;&nbsp;<code>Permissions</code>&rdquo;部分中，选择<code>User Roles</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在右上角，单击<code>Add New Role</code>按钮</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/l9jB1KK.png" /><!-- /wp:list --> <!-- wp:image {"id":3762,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3762" src="http://kb.360magento.net/wp-content/uploads/2023/08/l9jB1KK.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Role Information</code>字段中，输入描述性角色名称。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中，选择<code>Role Resources</code>。</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/KLOieO7.png" /><!-- /wp:list --> <!-- wp:image {"id":3763,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3763" src="http://kb.360magento.net/wp-content/uploads/2023/08/KLOieO7.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Resource Access</code>现场，执行以下操作<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>设置为<code>Custom</code>，然后勾选该角色有权访问的每个网站和视图的复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>All</code>如果要标记所有复选框，请设置为</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>完成后，单击<code>Save Role</code>。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Thu, 17 Aug 2023 08:04:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何备份 Magento 2 商店]]></title>
      <link>https://www.360magento.com/blog/how-to-create-backups-magento/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>目录</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>创建 Magento 2 备份<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>系统备份</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>数据库和媒体备份</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>数据库备份</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p><strong>为您的 Magento 2 创建备份</strong>是如此紧迫和必要，如果网站上有任何更改或中断，您可以通过备份管理保护所有数据免遭丢失。特别是，这些数据库将自动恢复到需要的正确位置。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>备份管理归档的系统部分还有文件系统、数据库、媒体文件等。同时，数据库备份文件采用.gz格式压缩。对于系统备份以及数据库和媒体备份，使用 .tgz 格式。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，我们将更深入地挖掘该指令，为像您这样的 Magento 2 网站创建完美的备份。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="create-magento-2-backup">创建 Magento 2 备份</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，单击<code>System</code>。在&ldquo;&nbsp;<code>Tools</code>&rdquo;部分中，选择<code>Backups</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在右上角，点击您要创建的备份类型的按钮：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3758,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3758" src="http://kb.360magento.net/wp-content/uploads/2023/08/ZZbkuUH.png" /><img src="https://www.360magento.com/media/wysiwyg/ZZbkuUH.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="system-backup">系统备份</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>创建数据库和文件系统的完整备份。<code>Include Media folder to System Backup</code>在此过程中，您可以通过标记复选框来选择将媒体文件夹包含在备份中</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="datebase-and-media-backup">数据库和媒体备份</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>创建数据库和媒体文件夹的备份。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="database-backup">数据库备份</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>创建数据库的备份。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/qhvxLFu.png" /><!-- /wp:paragraph --> <!-- wp:image {"id":3759,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3759" src="http://kb.360magento.net/wp-content/uploads/2023/08/qhvxLFu.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>完成后，单击<code>OK</code>按钮</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Wed, 16 Aug 2023 08:01:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建新税率]]></title>
      <link>https://www.360magento.com/blog/how-to-create-a-new-tax-rate-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>使用 Magento 2，您可以根据不同的地理区域（州或国家）<strong>创建许多新的税率。</strong>添加税率是在&ldquo;税区和税率&rdquo;工具的控制下，将多种税收定向到特定区域。所有订单信息填写完毕后，系统会根据门店的税费设置，正确计算客户订单的税费。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>税率是制定税收规则的重要要素之一。让我们根据我们的指南尽力而为。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="create-a-new-tax-rate-in-magento-2">在 Magento 2 中创建新税率</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在 Magento 2 中设置新的税率</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>更改 Magento 2 中的现有税率</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="setup-new-tax-rate">在 Magento 2 中设置新税率</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Taxes &gt; Tax Zones and Rates</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击右上角<code>Add New Tax Rate</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>设置<code>Tax Identifier</code>为新税率。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>插入<code>Zip/Post Code</code>来指定新的税率。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>星号通配符 (&nbsp;<em>) 可用于匹配代码中最多十个字符。例如，90</em>代表从 90000 到 90999 的所有邮政编码。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要将税率分配给邮政编码范围，需要执行以下操作：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>勾选<code>Zip/Post is Range</code>复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>输入该范围内的第一个邮政编码。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>输入该范围内的最后一个邮政编码。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择税率适用的地方<code>State</code>。<code>Country</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>设置<code>Rate Percent</code>计算税率。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Save Rate</code>完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3755,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3755" src="http://kb.360magento.net/wp-content/uploads/2023/08/how-to-create-a-new-tax-rate-magento-2-add-new-tax-rate-1024x589.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-create-a-new-tax-rate-magento-2-add-new-tax-rate.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="change-existing-rate">更改 Magento 2 中的现有税率</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，转到<code>Stores &gt; Taxes &gt; Tax Zones and Rates</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在税区和税率网格中查找需要编辑的税率。如果网格中有很多费率，则使用过滤器查找。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>根据需要修改任何信息，然后单击<code>Save Rate</code>完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Tue, 15 Aug 2023 07:29:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置增值税 (VAT)]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-value-added-tax-vat-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>从 Magento 2 后端配置增值税 (VAT)</strong>是一个很好的解决方案，可以解决不同增值税计算的冲突，即商店位于不同的地区，您提供的商品类型是产品、材料或服务。通过增值税功能，您可以创建包含您所在国家/地区、增值税税率、客户类型等的数据管理表。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在 Magento 2 中配置增值税可以让您遵守现有规则、更好地管理成本并变得更加专业。因此，今天，我想向您展示在 Magento 2 商店上快速配置和应用增值税的所有步骤。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="configure-value-added-tax-vat-in-magento-2">在 Magento 2 中配置增值税 (VAT)：</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>配置客户税级</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>配置产品税级</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>配置税区和税率</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>配置税务规则</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>加上产品的税级</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-configure-customer-tax-classes">配置客户税级</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Taxes &gt; Tax Zones and Rates</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>确保客户税级可用于增值税，例如零售客户。如果您尚未创建，请点击<code>Add New</code>添加它。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2-configure-product-tax-classes">在 Magento 2 中配置产品税级</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Tax &gt; Product Tax Classes</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Add New</code>按钮并创建三个新类：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>增值税标准</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>增值税减免</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>增值税零</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Save Class</code>您添加的每个新课程的按钮。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-3-configure-tax-zones-rates">设置税区和税率</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理菜单上，<code>Stores &gt; Tax &gt; Manage Tax Zones &amp; Rates</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Add New Tax Rate</code>按钮并根据需要填写所有必要的信息。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Rate</code>应用新的费率。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-4-configure-tax-rules">配置税务规则</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>税收规则是客户税级、产品税级和税率的组合。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Tax &gt; Manage Tax Rules</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>根据新税务规则的需要，填写所有必填信息。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Rule</code>应用新规则。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-5-plus-tax-classes-to-products">加上产品的税级</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Products &gt; Products &gt; Catalog</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在产品列表中找到所需的产品并以编辑模式打开。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板的 下<code>General</code>，选择<code>General</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将增值税类别设置<code>Tax Class</code>为适用于产品的增值税类别。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Save</code>完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>增值税是开展任何类型业务时的重要组成部分，并且可能因地点或产品类型而异。但是，您可以按照上述指南轻松在 Magento 2 中配置增值税。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Mon, 14 Aug 2023 07:23:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中将产品翻译成其他语言]]></title>
      <link>https://www.360magento.com/blog/how-to-translate-products-into-other-language-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>在全球业务中，将产品信息翻译成其他语言</strong>是必须的。Magento 2 支持多商店和多语言，这使您的商店对来自不同国家的任何受众更加友好。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>现在，在每个商店视图上，产品信息都已准备好相关语言。您可以维护一些产品数据，例如 SKU、价格，而您只需根据每种语言的需要翻译产品名称、描述字段和元数据。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="translate-products-into-other-language-in-magento-2">在 Magento 2 中将产品翻译成其他语言</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：翻译产品字段</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：翻译字段标签</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：翻译所有类别</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-1-translate-product-fields">第 1 步：翻译产品字段</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Products &gt; Inventory &gt; Catalog</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>找到需要翻译的产品，并以编辑模式打开它。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左上角选择<code>Store View</code>翻译显示</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>OK</code>确认。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在编辑模式下，您需要：
<ul>
<li>取消选中<code>Use Default Value</code>该字段右侧的复选框。在字段中输入翻译后的文本。</li>
</ul>
确保所有必要的文本字段都得到良好翻译，包括图像标签和替代文本、搜索引擎优化字段和任何自定义选项信息。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Save</code>完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-2-translate-field-labels">第 2 步：翻译字段标签</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Attributes &gt; Product</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>找到需要翻译的属性，并在编辑模式下打开它。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板上，选择<code>Manage Labels</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 下<code>Manage Title</code>，为每个商店视图设置翻译标签。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3743,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3743" src="http://kb.360magento.net/wp-content/uploads/2023/08/how-to-transalte-products-into-other-language-magento-2-enter-translated-labels-1024x284.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-transalte-products-into-other-language-magento-2-enter-translated-labels.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>单击<code>Save Attribute</code>完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="step-3-translate-all-categories">第 3 步：翻译所有类别</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，转到<code>Product &gt; Inventory &gt; Categories</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左上角选择<code>Store View</code>翻译显示</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>OK</code>确认。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在类别树中找到需要翻译的类别，并以编辑模式打开。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在该<code>General Information</code>部分中，将必填字段翻译为名称、描述、页面标题、元关键字和元描述。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>允许翻译<code>URL Key</code>如下：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>取消选中<code>Use Default Value</code>该字段右侧的复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>输入翻译后的文本。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选中<code>Create Permanent Redirect for old URL</code>复选框。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Save Category</code>完成。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如果您想翻译其他内容，请逐步按照指南进行操作。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3744,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3744" src="http://kb.360magento.net/wp-content/uploads/2023/08/how-to-transalte-products-into-other-language-magento-2-translate-url-key.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-transalte-products-into-other-language-magento-2-translate-url-key.png" /> <!-- /wp:image --></p>]]></description>
      <pubDate>Sun, 13 Aug 2023 07:20:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中翻译 CMS 页面]]></title>
      <link>https://www.360magento.com/blog/how-to-translate-cms-pages-magento-2/</link>
      <description><![CDATA[<p><span>翻译 CMS 页面</span><span><span>是在全球范围内发展业务的支持方式之一。</span><span>这意味着您可以创建翻译后的网站，然后将其显示在</span><span>客户的</span></span>特定商店视图中。<span>要设置翻译的内容页面，您必须</span>创建一个具有相同 URL 的新页面<span><span>以将其分配给商店。</span><span>配置后，您将使用翻译后的文本更新特定视图的 CMS 页面。</span></span></p>
<h2 class="active" id="6-steps-to-translate-cms-page-in-magento-2"><span>在 Magento 2 中翻译 CMS 页面的 6 个步骤：</span></h2>
<ol>
<li><span>在管理面板上，</span><code class="language-plaintext highlighter-rouge">Content &gt; Elements &gt; Pages</code><span>.</span></li>
<li><span>找到需要翻译的页面，并以编辑模式打开它。</span></li>
<li><span>将其复制</span><code class="language-plaintext highlighter-rouge">URL Key</code><span><span>到剪贴板。</span><span>然后，点击</span></span><code class="language-plaintext highlighter-rouge">Back</code><span>按钮返回页面网格。</span></li>
<li><span>点击</span><code class="language-plaintext highlighter-rouge">Add New Page</code><span>，您需要：</span>
<ul>
<li><span>翻译</span><code class="language-plaintext highlighter-rouge">Page Title</code><span>.</span></li>
<li><span>粘贴</span><code class="language-plaintext highlighter-rouge">URL Key</code><span>之前复制的内容</span></li>
<li><span>在左上角选择</span><code class="language-plaintext highlighter-rouge">Store View</code><span>翻译显示</span></li>
<li><span>在左侧面板的 下</span><code class="language-plaintext highlighter-rouge">Page Information</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Content</code><span>，然后插入页面的翻译文本。</span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Layout</code><span><span>为选项卡中的页面</span><span>创建</span></span><code class="language-plaintext highlighter-rouge">Design</code><span>。</span></li>
<li><span><span>完成选项卡</span><span>中</span></span><code class="language-plaintext highlighter-rouge">Keywords</code><span><span>和 的</span><span>翻译</span></span><code class="language-plaintext highlighter-rouge">Description</code><span></span><code class="language-plaintext highlighter-rouge">Meta Data</code><span></span></li>
</ul>
</li>
<li><span>单击</span><code class="language-plaintext highlighter-rouge">Save Page</code><span>以完成，并在出现提示时</span>刷新缓存<span>。</span></li>
<li><span>前往店面并使用</span>语言选择器在<span></span>商店视图<span><span>中检查翻译</span><span>。</span><span>公司页脚链接块和</span></span>欢迎消息<span>等一些元素也需要翻译。</span></li>
</ol>]]></description>
      <pubDate>Sat, 12 Aug 2023 08:23:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中为客户设置密码选项]]></title>
      <link>https://www.360magento.com/blog/how-to-set-password-options-for-customers-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>密码是客户访问其商店</strong>帐户时必须使用的唯一密钥，但他们可能会忘记注册密码。通过Magento 2 平台，您可以为这些客户设置密码选项，以帮助他们轻松找回密码。这种策略简化了问题解决过程，可以改善他们的体验并降低跳出率。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>从后端，您将设置电子邮件模板，包括忘记的电子邮件和带有密码恢复链接的提醒电子邮件。您还可以配置管理员或客户可以重置密码。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>请按照以下说明了解您需要做什么。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="steps-to-set-password-options-for-customers-in-magento-2">在 Magento 2 中为客户设置密码选项的步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在 Magento 管理面板上，<code>Stores &gt; Settings &gt; Configuration</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板的<code>Customers</code>选项卡下，选择<code>Customer Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开<strong>密码选项</strong>部分，<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>选择<code>Forgot Email Template</code>在客户忘记密码时发送给客户的信息。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择包含要发送给客户的密码提示的提醒电子邮件模板。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择<code>Reset Password Template</code>发送给客户的，并附有重置密码的链接。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择密码电子邮件发件人，其名称将显示在忘记和提醒电子邮件通知上。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在字段中设置密码恢复链接的到期时间<code>Recovery Link Expiration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><strong>选择&ldquo;是&rdquo;</strong>选项时，仅允许商店管理员更改客户密码<code>Require admin user to change user password</code>。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Config</code>去完成。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3702,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3702" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-set-password-options-for-customers-password-options.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-set-password-options-for-customers-password-options.png" /> <!-- /wp:image --></p>]]></description>
      <pubDate>Fri, 11 Aug 2023 07:14:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[登录 Magento 2 后如何重定向到客户仪表板]]></title>
      <link>https://www.360magento.com/blog/how-to-rediect-to-customer-dashboard-after-loggin-in-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>使用Magento 2，您可以启用或禁用在客户登录后将客户重定向到客户仪表板。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>事实上，吸引客户访问您的网站是一回事，但让他们在您的网站停留更长时间则是另一回事。因此，此功能是利用当前流量并获得更高转化率的好方法。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>如果您想让客户留在当前页面或继续购物，您应该考虑禁用该功能，因为默认情况下会启用重定向功能。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="steps-to-configure-redirect-customer-after-login-in-magento-2">在 Magento 2 中登录后配置重定向客户的步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Customer Configuration</code>下<code>Customers</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Login Options</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3699,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3699" src="http://kb.360magento.net/wp-content/uploads/2023/07/BbOaGmk.png" /><img src="https://www.360magento.com/media/wysiwyg/BbOaGmk.png" /> <!-- /wp:image --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在<code>Set Redirect Customer to Account Dashboard after Logging in</code>字段中，选择以下选项之一：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>选择<code>Yes</code>：允许在客户登录其帐户时显示客户帐户仪表板。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择<code>No</code>：当客户登录其帐户时，不重定向到客户帐户仪表板。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Thu, 10 Aug 2023 07:10:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中插入图像]]></title>
      <link>https://www.360magento.com/blog/how-to-insert-images-in-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>除了了解如何优化图像之外，在商店中创建新页面时<strong>插入图像也是一项重要任务。</strong>它使您能够美化您的页面并更轻松地展示您的产品。当客户能够更清晰地想象时，他们往往会停留更长时间来探索。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>Magento 2 提供了所见即所得编辑器工具，它允许您在&ldquo;所见即所得&rdquo;的内容视图中工作。在所见即所得栏上，您可以看到<strong>&ldquo;插入图片&rdquo;图标，只需点击它即可在</strong>CMS 页面上添加您需要的任何图片。此外，您可以使用的另一种方式是媒体存储提供的。所以在本教程中，我们将指导您如何通过两种方式插入图像。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-insert-images-in-magento-2">如何在 Magento 2 中插入图像</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>方法 1：插入媒体存储中的图像</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>方法 2：插入来自另一台服务器的图像</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="insert-image-from-media-storage">方法 1：插入媒体存储中的图像</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果您在媒体存储中准备好了图像，则此方法适用：</p>
<p><!-- /wp:paragraph --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li><code>Show/Hide Editor</code>如果您想直接使用代码，请单击该按钮。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将光标置于要插入图像的位置。然后，单击&nbsp;&ldquo;插入图像&rdquo;。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>从弹出框中显示的文件列表中，选择要使用的项目并单击按钮<code>Insert File</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>要以所见即所得模式查看图像，请&nbsp;<code>Show / Hide Editor</code>&nbsp;再次点击。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="insert-image-from-another-server">方法 2：插入来自另一台服务器的图像</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>如果图像在线并且包含在另一台服务器中，则可以使用此方法。插入图像时需要提供图像的完整 URL。</p>
<p><!-- /wp:paragraph --> <!-- wp:image {"id":3690,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3690" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-insert-images-in-magento-2-WYSIWYG-editor.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-insert-images-in-magento-2-WYSIWYG-editor.png" /> <!-- /wp:image --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li><code>Show/Hide Editor</code>如果您想直接使用代码，请单击按钮。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将光标置于要插入图像的位置。然后，单击&nbsp;插入图像图标。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>从弹出框中显示的文件列表中，选择要使用的项目并单击按钮<code>Insert File</code>。<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>在字段中输入图像的完整 URL&nbsp;<code>Image URL</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>输入该<code>Image Description</code>字段的一些描述。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>输入字段的标题<code>Image Title</code>。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Insert</code>以完成插入过程。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Wed, 09 Aug 2023 07:14:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用合并 CSS、JavaScript]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-merge-css-javascript-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>所有分离的<strong>CSS 文件以及 CSS 文件和 JavaScript 文件</strong>都可以合并为一个或压缩文件，这有助于优化您的网站并减少页面加载时间。合并后，合并后的CSS文件或脚本文件将显示无换行符，并且不允许编辑该文件。要在 Magento 2 中启用合并 CSS、JavaScript，您可以按照下面给出的一些简单步骤操作。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-enable-merge-css-javascript-in-magento-2">如何在 Magento 2 中启用合并 CSS、JavaScript</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>您需要了解的页面加载速度事实</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 Magento 2 中合并 CSS 文件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 Magento 2 中合并 JavaScript 文件</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="facts-of-page-loading-speed-that-you-need-to-know">您需要了解的页面加载速度事实</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>如果超过 45% 的访问者遇到电子商务网站加载速度比预期慢 (&nbsp;Unbounce&nbsp;)，他们将不会购买该产品。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>53% 的移动网站访问者倾向于在等待超过三秒时离开页面 (&nbsp;Akamai&nbsp;)。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>页面加载时间减少 0.1 秒可以将零售客户参与度提高 5.2%（Unbounce&nbsp;Google、55-5 和 Deloitte）。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>因此，您的页面以最佳速度运行至关重要。在 Magento 2 中启用合并 CSS、JavaScript 可以是此网站优化过程的第一步。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="merge-css-file-magento-2">在 Magento 2 中合并 CSS 文件</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Developer</code>下<code>Advanced</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>CSS Settings</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3686,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3686" src="http://kb.360magento.net/wp-content/uploads/2023/07/a4uXRkg.png" /><img src="https://www.360magento.com/media/wysiwyg/a4uXRkg.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Merge CSS&nbsp;Files</code>字段中，选择<code>Yes</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="merge-javascript-files-magento-2">在 Magento 2 中合并 JavaScript 文件</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。在&ldquo;&nbsp;<code>Settings</code>&rdquo;部分中，选择<code>Configuration</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板中选择<code>Developer</code>下<code>Advanced</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>JavaScript Settings</code>部分，然后继续执行以下操作：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3687,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3687" src="http://kb.360magento.net/wp-content/uploads/2023/07/85fMSFG.png" /><img src="https://www.360magento.com/media/wysiwyg/85fMSFG.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<code>Merge JavaScript Files</code>字段中，选择<code>Yes</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>提高网站加载速度是提高转化率和促进销售的第一步，可以通过<strong>在 Magento 2 中启用合并 CSS、JavaScript</strong>来完成。</p>
<p><!-- /wp:paragraph --></p>
<div id="gtx-trans" style="position: absolute; left: -126px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Tue, 08 Aug 2023 07:09:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加新的 CMS 块]]></title>
      <link>https://www.360magento.com/blog/how-to-add-new-cms-blocks-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>从<strong>Magento 管理面板</strong>可以轻松地<strong>在 Magento 2 中添加新的 CMS 块</strong>。您可以设置显示块的位置，可以是一页、一组页面或任何页面。创建块标题和标识符以确定块并易于管理。块的内容将使用编辑器方便地创建，该编辑器允许您设置文本格式、创建链接和表格、图像、视频和音频。此外，如果您更喜欢使用 HTML 代码，只需单击&ldquo;显示/隐藏编辑器&rdquo;按钮即可。<strong><a href="https://www.mageplaza.com/magento-2-module-development/create-admin-menu-magento-2.html"></a></strong><a href="https://www.mageplaza.com/kb/how-to-insert-images-in-magento-2.html"></a><a href="https://www.mageplaza.com/kb/how-to-upload-product-videos-in-magento-2.html"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>CMS 块将您的网站变成一个有吸引力且引人入胜的页面，以吸引更多流量。要在 Magento 2 中添加新的 CMS 块，您可以按照下面给出的简单步骤操作。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="8-steps-to-add-new-cms-blocks-in-magento-2">在 Magento 2 中添加新 CMS 块的 步骤</h2>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><strong><em>通过以下步骤在 Magento 2 中添加新的 CMS 块：</em></strong></p>
<p><!-- /wp:paragraph --></p>
<p><img src="https://www.360magento.com/media/wysiwyg/b6tJiNX.png" /></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击内容。在&ldquo;&nbsp;<code>Elements</code>&rdquo;部分中，选择<code>Blocks</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Add New Block</code>右上角的按钮并继续。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Block Title</code>字段中输入新块的名称标题</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><img src="https://www.360magento.com/media/wysiwyg/sK750OU.png" /></p>
<p><!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在<code>Identifier</code>字段中，选择块的唯一标识符。请记住，使用全部小写字符并使用下划线而不是空格。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在&ldquo;商店视图&rdquo;字段中，选择块可用的商店视图</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Status</code>字段中设置为<code>Enable</code>以使该块在商店中可见</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Content</code>字段中，填写块的内容</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>完成后，单击<code>Save Block</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Mon, 07 Aug 2023 07:07:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置默认​​页面]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-the-default-page-magento-2/</link>
      <description><![CDATA[<p><span>在本主题中，我将介绍</span><span>如何配置默认CMS页面</span><span><span>。</span><span>默认页面是当您单击基本 URL 时将出现的页面。</span><span>通常主页被配置为默认页面。</span><span>此外，当发生&ldquo;找不到页面&rdquo;错误时，将显示默认页面。</span></span></p>
<h2 class="active" id="configure-the-default-pages-in-magento-2"><span>在 Magento 2 中配置默认​​页面</span></h2>
<p><em>按照简单指南在 Magento 2 中配置默认​​页面：</em></p>
<ul>
<li><span>在管理面板上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>在&ldquo;&nbsp;</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>&rdquo;部分中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span><span>在左侧面板中</span><span>选择</span></span><code class="language-plaintext highlighter-rouge">Web</code><span>下</span><code class="language-plaintext highlighter-rouge">General</code><span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Default Pages</code><span>部分，然后继续执行以下操作：</span>
<ul>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Default Web URL</code><span>字段中，默认值</span><code class="language-plaintext highlighter-rouge">cms</code><span>或根据需要输入其他值</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">CMS Home Page</code><span>字段中，选择您想要成为主页的页面，您应该选择&ldquo;主页&rdquo;</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Default No-route URL</code><span><span>字段中，默认值为&ldquo;cms/index/noRoute&rdquo;。</span><span>或根据需要输入其他值</span></span></li>
<li><span>在</span><code class="language-plaintext highlighter-rouge">CMS No Route Page</code><span><span>字段中，选择</span><span>出现</span><span>404 Not Found</span></span><code class="language-plaintext highlighter-rouge">404 Page Not Found</code><span>错误时显示 CMS 页面的值</span><a href="https://www.mageplaza.com/kb/magento-2-404-page-not-found.html"><span></span></a><span></span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">CMS No Cookies Page</code><span>字段中，选择</span><code class="language-plaintext highlighter-rouge">Enable Cookies</code><span>当浏览器中禁用 cookie 时显示 CMS 页面的值</span></li>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Show Breadcrumbs for CMS Pages</code><span>字段中，设置</span><code class="language-plaintext highlighter-rouge">Yes</code><span>是否要在所有 CMS 页面的顶部显示面包屑路径</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。<br /><img src="https://www.360magento.com/media/wysiwyg/f1llfjO.png" /><br /></span></li>
</ul>]]></description>
      <pubDate>Sun, 06 Aug 2023 07:41:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置 Robots.txt]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-robots-txt-magento-2/</link>
      <description><![CDATA[<p></p>
<h2 class="active" id="what-is-robotstxt-in-magento-2">Magento 2 中的 Robots.txt 是什么？</h2>
<p>robots.txt 文件指示网络爬虫了解在何处为您的网站建立索引以及在何处跳过。定义网站机器人与网站爬虫的关系将帮助您优化网站的排名。有时您需要它来识别并避免对特定部分建立索引，这可以通过配置来完成。您可以决定使用默认设置还是为每个搜索引擎设置自定义说明。</p>
<h2 class="active" id="steps-to-configure-magento-2-robotstxt-file">配置 Magento 2 robots.txt 文件的步骤</h2>
<p>请按照此分步指南在 Magento 2 中配置 robots.txt 文件：</p>
<ul>
<li>在管理面板上，单击<code class="language-plaintext highlighter-rouge">Stores</code>。在&ldquo;&nbsp;<code class="language-plaintext highlighter-rouge">Settings</code>&rdquo;部分中，选择<code class="language-plaintext highlighter-rouge">Configuration</code>。</li>
<li>在左侧面板中选择<code class="language-plaintext highlighter-rouge">Design</code>下<code class="language-plaintext highlighter-rouge">General</code></li>
<li>打开该<code class="language-plaintext highlighter-rouge">Search Engine Robots</code>部分，然后继续执行以下操作：
<ul>
<li>在 中<code class="language-plaintext highlighter-rouge">Default Robots</code>，选择以下选项之一：
<ul>
<li>索引、关注</li>
<li>NOINDEX，关注</li>
<li>索引、不关注</li>
<li>NOINDEX、NOFOLLOW</li>
</ul>
</li>
<li>如果需要，请在<code class="language-plaintext highlighter-rouge">Edit Custom instruction of robots.txt File</code>字段中输入自定义说明。</li>
<li>如果您需要恢复默认说明，请在该<code class="language-plaintext highlighter-rouge">Reset to Defaults</code>字段中单击按钮。<code class="language-plaintext highlighter-rouge">Reset to Default</code></li>
</ul>
</li>
<li>完成后，单击<code class="language-plaintext highlighter-rouge">Save Config</code>。</li>
</ul>
<h2 class="active"><span><img src="https://www.360magento.com/media/wysiwyg/orT3LMl.png" /></span></h2>
<h2 class="active" id="magento-2-robotstxt-examples"><span>Magento 2 Robots.txt 示例</span></h2>
<p><span>您还可以通过设置自定义说明来隐藏您的页面，使其不被网站抓取工具发现，如下所示：</span></p>
<ul>
<li><span>允许完全访问</span></li>
</ul>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent:*<span></span>
Disallow:<span></span>
</code></pre>
</div>
</div>
<ul>
<li><span>禁止访问所有文件夹</span></li>
</ul>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent:*<span></span>
Disallow: /<span></span>
</code></pre>
</div>
</div>
<h2 class="active" id="magento-2-default-robotstxt"><span>Magento 2 默认 Robots.txt</span></h2>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>Disallow: /lib/<span></span>
Disallow: /*.php$<span></span>
Disallow: /pkginfo/<span></span>
Disallow: /report/<span></span>
Disallow: /var/<span></span>
Disallow: /catalog/<span></span>
Disallow: /customer/<span></span>
Disallow: /sendfriend/<span></span>
Disallow: /review/<span></span>
Disallow: /*SID=<span></span>
Disallow: /*?<span></span>
<span></span>
# Disable checkout &amp; customer account<span></span>
Disallow: /checkout/<span></span>
Disallow: /onestepcheckout/<span></span>
Disallow: /customer/<span></span>
Disallow: /customer/account/<span></span>
Disallow: /customer/account/login/<span></span>
<span></span>
# Disable Search pages<span></span>
Disallow: /catalogsearch/<span></span>
Disallow: /catalog/product_compare/<span></span>
Disallow: /catalog/category/view/<span></span>
Disallow: /catalog/product/view/<span></span>
<span></span>
# Disable common folders<span></span>
Disallow: /app/<span></span>
Disallow: /bin/<span></span>
Disallow: /dev/<span></span>
Disallow: /lib/<span></span>
Disallow: /phpserver/<span></span>
Disallow: /pub/<span></span>
<span></span>
# Disable Tag &amp; Review (Avoid duplicate content)<span></span>
<span></span>
Disallow: /tag/<span></span>
Disallow: /review/<span></span>
<span></span>
# Common files<span></span>
Disallow: /composer.json<span></span>
Disallow: /composer.lock<span></span>
Disallow: /CONTRIBUTING.md<span></span>
Disallow: /CONTRIBUTOR_LICENSE_AGREEMENT.html<span></span>
Disallow: /COPYING.txt<span></span>
Disallow: /Gruntfile.js<span></span>
Disallow: /LICENSE.txt<span></span>
Disallow: /LICENSE_AFL.txt<span></span>
Disallow: /nginx.conf.sample<span></span>
Disallow: /package.json<span></span>
Disallow: /php.ini.sample<span></span>
Disallow: /RELEASE_NOTES.txt<span></span>
<span></span>
# Disable sorting (Avoid duplicate content)<span></span>
Disallow: /*?*product_list_mode=<span></span>
Disallow: /*?*product_list_order=<span></span>
Disallow: /*?*product_list_limit=<span></span>
Disallow: /*?*product_list_dir=<span></span>
<span></span>
# Disable version control folders and others<span></span>
Disallow: /*.git<span></span>
Disallow: /*.CVS<span></span>
Disallow: /*.Zip$<span></span>
Disallow: /*.Svn$<span></span>
Disallow: /*.Idea$<span></span>
Disallow: /*.Sql$<span></span>
Disallow: /*.Tgz$<span></span>
<span></span>
</code></pre>
</div>
</div>
<h2 class="active" id="more-robotstxt-examples"><span>更多 Robots.txt 示例</span></h2>
<h3 id="block-google-bot-from-a-folder"><span>阻止 Google 机器人访问文件夹</span></h3>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot <span></span>
Disallow: /subfolder/<span></span>
</code></pre>
</div>
</div>
<h3 id="block-google-bot-from-a-page"><span>阻止 Google 机器人访问某个页面</span></h3>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot <span></span>
Disallow: /subfolder/page-url.html<span></span>
</code></pre>
</div>
</div>
<h2 class="active" id="common-web-crawlers-bots"><span>常见的网络爬虫（Bot）</span></h2>
<p><span>以下是互联网上一些常见的机器人。</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot<span></span>
User-agent: Googlebot-Image/1.0<span></span>
User-agent: Googlebot-Video/1.0<span></span>
User-agent: Bingbot<span></span>
User-agent: Slurp		# Yahoo<span></span>
User-agent: DuckDuckBot<span></span>
User-agent: Baiduspider<span></span>
User-agent: YandexBot<span></span>
User-agent: facebot		# Facebook<span></span>
User-agent: ia_archiver		# Alexa</code></pre>
</div>
</div>]]></description>
      <pubDate>Sat, 05 Aug 2023 07:35:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用站点地图并将其提交到搜索引擎]]></title>
      <link>https://www.360magento.com/blog/how-to-enable-submit-sitemap-to-search-engines-magento-2/</link>
      <description><![CDATA[<h2 id="enable-and-submit-sitemap-to-search-engines-in-magento-2"><span>在 Magento 2 中启用站点地图并将其提交到搜索引擎</span></h2>
<ul>
<li>第 1 步：设置并启用站点地图</li>
<li>第 2 步：设置并启用robots.txt</li>
<li>第 3 步：向搜索引擎提交站点地图</li>
<li>第 4 步：恢复之前的机器人指令（可选）</li>
</ul>
<h3 id="setting-enable-sitemap"><span>第 1 步：设置并启用站点地图</span></h3>
<p><span>启用并完成所有</span>XML 站点地图<span>配置，以确定站点地图文件的限制以及站点地图的更新频率。</span></p>
<h3 id="setting-enable-robot-txt"><span>第 2 步：设置并启用 robots.txt（可选）</span></h3>
<p><span><span>启用并完成搜索引擎机器人配置，并使用指导搜索引擎抓取您希望将其编入索引的网站部分的说明。</span><span>此任务是可选的。</span></span></p>
<h3 id="submit-sitemap-search-engines"><span>第 3 步：向搜索引擎提交站点地图</span></h3>
<p><span>您可以通过向不同的搜索引擎发送指向 Magento 安装根目录中的 sitemap.xml 文件的链接来将站点地图提交到不同的搜索引擎。</span></p>
<h3 id="restore-previous-robot-instructions"><span>第 4 步：恢复之前的机器人指令</span></h3>
<p><span>如果需要，您可以恢复到原始或默认限制。</span></p>]]></description>
      <pubDate>Fri, 04 Aug 2023 07:24:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建产品 URL 重写]]></title>
      <link>https://www.360magento.com/blog/how-to-create-product-url-rewrites-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>创建产品 URL 重写</strong>意味着您可以更改产品链接以实现更好的 SEO并使您的网站对访问者更加友好。但是，在重写过程中，您应该知道Target Path和Request Path是什么。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>目标<strong>路径</strong>包含系统使用的内部 URL 以及产品 ID。它会自动输入，并呈灰色显示。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>尽管<strong>请求路径</strong>最初显示当前 URL，但它是您正在请求的路径。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>由于性能优化，Magento 2 删除了 URL 重写自动重新生成的功能。因此，您必须按照以下 3 个步骤自行创建它：</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="3-steps-to-create-product-url-rewrite-in-magento-2">在 Magento 2 中创建产品 URL 重写的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：添加产品 URL 重写</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：更新 URL 索引</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：测试产品 URL 重写结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="add-rewrite">第 1 步：添加重写</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Marketing &gt; SEO &amp; Search &gt; URL Rewrites</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击右上角的按钮<code>Add URL Rewrites</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>从创建 URL 重写的下拉列表中，选择&ldquo;针对产品&rdquo;选项。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在立即出现的产品列表中，点击需要重定向编辑的产品。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Skip Category Selection</code>按钮，然后导航至该<code>URL Rewrite Information</code>部分。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>此处，当前产品 URL 包含在 中，<code>Request Path</code>并且<code>Target Path</code>显示系统使用的内部 URL。它呈灰色且不可编辑。</p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>如有必要，请设置<code>Store</code>以应用重写。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Request Path</code>字段中，插入产品的新 URL 键和后缀。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>转换<code>Redirect</code>为<strong>临时 (302)</strong>或<strong>永久 (301)</strong>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>留下一些重写的​​描述。</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/how-to-create-product-url-rewrites-magento-2-url-rewrite-information.png" /><!-- /wp:list --> <!-- wp:image {"id":3663,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3663" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-create-product-url-rewrites-magento-2-url-rewrite-information-1024x589.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li><code>Save</code>去完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>现在，您可以在列表顶部看到新产品重写。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="update-index">第 2 步：更新索引</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>System &gt; Tools &gt; Index Management</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>标记<code>Catalog URL Rewrites</code>复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择为<strong>重新索引数据</strong><code>Action</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Submit</code>更新索引。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="test-results">第 3 步：检查结果</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>仔细检查重写以确保其完美运行。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Thu, 03 Aug 2023 07:38:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建 CMS 页面重写]]></title>
      <link>https://www.360magento.com/blog/how-to-create-cms-page-rewrites-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>除了&ldquo;产品&rdquo;和&ldquo;类别&rdquo;之外，CMS 页面是三个元素之一，如果 CMS 页面上有任何更改，商店管理员可以将访问者重定向到另一个链接。使用 Magento 2 的 URL Rewrtie 工具，可以设置内容页面或其他页面的 URL 进行重写。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>在本主题中，我们将学习如何在 Magento 配置中创建 CMS 页面重写。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="3-steps-to-create-cms-page-rewrites-in-magento-2">在 Magento 2 中创建 CMS 页面重写的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：添加 CMS 页面重写</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：更新 CMS 页面索引</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：测试 CMS 页面结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="add-rewrite">第 1 步：添加重写</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Marketing &gt; SEO &amp; Search &gt; URL Rewrites</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在右上角，单击<code>Add URL Rewrites</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>从下拉列表中<code>Create URL Rewrites</code>，选择&ldquo;对于类别&rdquo;选项。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在立即出现的页面列表中，点击需要重定向的页面进行编辑。</li>
<!-- /wp:list-item --></ul>
<p><img src="https://www.360magento.com/media/wysiwyg/how-to-create-cms-page-rewrites-magento-2-cms-page-rewrites.png" /><!-- /wp:list --> <!-- wp:image {"id":3659,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3659" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-create-cms-page-rewrites-magento-2-cms-page-rewrites-1024x574.png" /> <!-- /wp:image --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在<strong>URL 重写信息</strong>页面上，<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>如有必要，请设置<code>Store</code>以应用重写。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Request Path</code>字段中，插入 CMS 页面的新 URL 键 和 。<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>如果您想要重定向到站点中的另一个 CMS 页面，请插入不带前导斜杠的相关补丁。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如果您想要重定向到不同站点上的另一个 CMS 页面，请输入目标的完全限定 URL。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>转换<code>Redirect</code>为<strong>临时 (302)</strong>或<strong>永久 (301)</strong>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>留下一些重写的​​描述。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3660,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3660" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-create-cms-page-rewrites-magento-2-url-information-rewrites-1024x576.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-create-cms-page-rewrites-magento-2-url-information-rewrites.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="update-index">第 2 步：更新索引</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>System &gt; Tools &gt; Index Management</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>标记<code>Catalog URL Rewrites</code>复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>选择为<strong>重新索引数据</strong><code>Action</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Submit</code>更新索引。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="test-results">第 3 步：检查结果</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p>仔细检查重写以确保其完美运行。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Wed, 02 Aug 2023 07:34:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中自动产品重定向]]></title>
      <link>https://www.360magento.com/blog/how-to-automatic-product-redirects-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>每当产品的 URL 键发生更改时，商店管理员都可以从 Magento 2 后端自动生成永久产品重定向。要应用 URL 重定向，请标记&ldquo;搜索引擎优化&rdquo;部分下方显示<strong>的&ldquo;为旧 URL 创建永久重定向&rdquo;</strong>复选框。届时，您的商店已准备好设置自动产品重定向并更新 URL 键。<a href="https://www.mageplaza.com/blog/what-seo.html"></a></p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="how-to-automatic-product-redirects-in-magento-2">如何在 Magento 2 中自动产品重定向</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>配置自动重定向</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>自动重定向目录 URL</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="configure-automatic-redirects">配置自动重定向</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Stores &gt; Settings &gt; Configurations</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在左侧面板的 下<code>Catalog</code>，选择<code>Catalog</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Search Engine Optimzation</code>部分。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>为字段选择<strong>是。</strong><code>Create Permanent Redirect for URLs if URL Key Changed</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Config</code>去完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3643,"sizeSlug":"full","linkDestination":"none"} --> <img alt="" class="wp-image-3643" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-automatic-product-redirects-magento-2-search-engine-optimization.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-automatic-product-redirects-magento-2-search-engine-optimization.png" /> <!-- /wp:image --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="auto-redirect-catalog-urls">自动重定向目录 URL</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理面板上，<code>Products &gt; Inventory &gt; Catalog</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开库存列表中所需产品的编辑模式。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>URL key</code>现场，执行以下后续步骤：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>确保您标记了该<code>Create Permanent Redirect for old URL</code>复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>根据需要编辑<code>URL Key</code>所有小写字符和连字符（空格除外）。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save</code>去完成。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>按照<code>Cache Management</code>系统消息中的链接刷新缓存和索引。之后，将为产品和任何关联的类别 URL 启用永久重定向。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Tue, 01 Aug 2023 07:19:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加搜索词]]></title>
      <link>https://www.360magento.com/blog/how-to-add-search-terms-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p><strong>目录</strong></p>
<p><!-- /wp:paragraph --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>如何在 Magento 2 中添加搜索词</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>修改搜索词信息</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>删除 Magento 2 中的搜索词</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="add-new-search-term">如何在 Magento 2 中添加搜索词</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，<code>Marketing &gt; SEO &amp; Search &gt; Search Terms</code>.</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Add New Search Term</code>按钮，设置常规信息：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>在<code>Search Query</code>字段中输入新搜索词。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Store</code>如果您支持多个商店，请从字段的下拉列表中选择商店视图。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Synonym For</code>如果该术语是另一个搜索术语的同义词，请提供该字段。您可以填写其他术语，任何对同义词的搜索都会自动导航到该搜索术语的页面。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Redirect URL</code>字段中插入所需页面的 URL，以将搜索结果重定向到该页面。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>将此搜索词作为任何没有结果的搜索的建议，请在字段中选择<strong>是</strong><code>Display in Suggested Terms</code>。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Search</code>去完成。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --> <!-- wp:image {"id":3639,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3639" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-add-search-terms-magento-2-general-information-1024x579.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-add-search-terms-magento-2-general-information.png" /> <!-- /wp:image --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="modify-search-term-information">修改搜索词信息</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>从包含所有现有搜索词的管理网格中，单击所需术语的行以打开编辑模式。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>根据需要对搜索词进行任何更改。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li><code>Save Search</code>去完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="remove-search-term">删除 Magento 2 中的搜索词</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在搜索词的管理网格上，勾选要删除的词的复选框。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Action</code>框中，选择<strong>删除</strong>选项。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>点击<code>Submit</code>即可完成。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:image {"id":3640,"sizeSlug":"large","linkDestination":"none"} --> <img alt="" class="wp-image-3640" src="http://kb.360magento.net/wp-content/uploads/2023/07/how-to-add-search-terms-magento-2-remove-search-terms-1024x515.png" /><img src="https://www.360magento.com/media/wysiwyg/how-to-add-search-terms-magento-2-remove-search-terms.png" /> <!-- /wp:image --></p>]]></description>
      <pubDate>Mon, 31 Jul 2023 07:37:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置分页控件]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-the-pagination-controls-magento-2/</link>
      <description><![CDATA[<p><!-- wp:paragraph --></p>
<p>分页控件提供了另一种显示产品列表的方式。您可以设置控件中显示的链接数量，并配置&ldquo;下一个&rdquo;和&ldquo;上一个&rdquo;链接。当需要显示的产品数量大于产品列表设置中允许的数量时，需要显示分页链接。</p>
<p><!-- /wp:paragraph --> <!-- wp:paragraph --></p>
<p>设置分页控件后，您的客户可以在产品列表的顶部和底部获得该控件。因此，<strong>配置分页控件</strong>是使站点性能更加专业的明智方法之一。此外，如果客户不想继续滚动浏览商品，这肯定会改善他们的体验。</p>
<p><!-- /wp:paragraph --></p>
<p><img src="https://www.360magento.com/media/wysiwyg/how-to-configure-the-pagination-controls-magento-2-pagination-controls.png" /></p>
<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="3-steps-to-set-up-the-pagination-controls-in-magento-2">在 Magento 2 中设置分页控件的 3 个步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>第 1 步：登录您的 Magento 2 后端</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 2 步：设置分页控件</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>第 3 步：保存配置并在店面查看结果</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="login-magento-2-backend">第 1 步：登录您的 Magento 2 后端</h3>
<p><!-- /wp:heading --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="magento-20">Magento 2.0</h4>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理侧栏上，&nbsp;Stores&nbsp;&gt; Settings &gt; Configuration.</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":4} --></p>
<h4 class="wp-block-heading" id="magento-21-or-above">Magento 2.1 或更高版本</h4>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在管理侧栏上，<code>Content &gt; Design &gt; Configuration &gt; Select your current theme &gt;&nbsp;</code>.</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="setup-pagination-controls">第 2 步：设置分页控件</h3>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在左侧面板的 下<code>General</code>，选择<code>Design</code>。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Pagination</code>部分，然后执行以下操作：</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --></p>
<p><img src="https://www.360magento.com/media/wysiwyg/how-to-configure-the-pagination-controls-magento-2-pagination-configurations.png" /></p>
<p><!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>在字段中，输入将在分页控件<code>Pagination Frame</code>中显示的链接数。<a href="https://www.mageplaza.com/kb/how-to-configure-the-pagination-controls-magento-2.html"></a></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Pagination Frame Skip</code>字段中，输入在分页控件中显示下一组链接之前向前跳过的链接数。例如，在此字段中插入数字 4，则上一组链接的最后一个链接是下一组链接的第一个链接。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Anchor Text for Previous</code>字段中，写入将与上一个链接一起显示的文本。如果该字段为空，则应用默认箭头。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在&ldquo;下一个锚文本&rdquo;字段中，写入将与&ldquo;下一个&rdquo;链接一起显示的文本。如果该字段为空，则应用默认箭头。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:heading {"level":3} --></p>
<h3 class="wp-block-heading" id="save-configurations-check-storefront">第三步：保存配置并在店面查看结果</h3>
<p><!-- /wp:heading --> <!-- wp:paragraph --></p>
<p><code>Save Config</code>去完成。</p>
<p><!-- /wp:paragraph --> <!-- wp:heading --></p>
<h2 class="wp-block-heading" id="benefits-of-pagination-controls">分页控件的好处</h2>
<p><!-- /wp:heading --> <!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>清晰的定位：顾客可以轻松记住他们找到的物品的位置，因此他们更有可能在需要时返回该物品。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>良好的转化：他们可以轻松跳转到合适的结果，因此往往会停留更长时间。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>减少挫败感：无限滚动对于访问者来说可能看起来太多了，因为他们会觉得有些长的项目列表永远都是这样。</li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:paragraph --></p>
<p>由于这些惊人的好处，客户可以更好地估计他们需要花费多长时间来滚动整个列表。此外，在线商店能够有效地创建搜索结果列表，为购物者提供更清晰的指导。</p>
<p><!-- /wp:paragraph --></p>]]></description>
      <pubDate>Sun, 30 Jul 2023 07:42:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置搜索目录搜索]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-search-catalog-search-magento-2/</link>
      <description><![CDATA[<h2 id="5-steps-to-configure-catalog-search-in-magento-2"><span>在 Magento 2 中配置目录搜索的 5 个步骤</span></h2>
<p><span>要在 Magento 2 中配置目录搜索，请按照以下步骤操作：*</span></p>
<ol>
<li><span>在管理面板上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>在&ldquo;&nbsp;</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>&rdquo;部分中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span><span>在左侧面板中</span><span>选择</span></span><code class="language-plaintext highlighter-rouge">Catalog</code><span>下</span><code class="language-plaintext highlighter-rouge">Catalog</code><span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Catalog Search</code><span>部分，然后继续执行以下操作：</span>
<ul>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Minimal Query Length</code><span>字段中输入数字以设置可以在查询中提交的最少字符</span></li>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Maximum Query Length</code><span>字段中输入数字以设置可在查询中提交的最大字符数</span></li>
</ul>
</li>
<li><span>要限制搜索查询文本的长度和字数，请执行以下操作：</span>
<ul>
<li><span>将最小查询长度设置为查询中可以提交的最小字符数。</span></li>
<li><span>将最大查询长度设置为查询中可以提交的最大字符数。</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><img src="https://www.360magento.com/media/wysiwyg/bwdIUVa.png" /></li>
</ol>]]></description>
      <pubDate>Sat, 29 Jul 2023 08:01:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置产品列表]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-product-listings-magento-2/</link>
      <description><![CDATA[<p><!-- wp:heading --></p>
<h2 class="wp-block-heading" id="steps-to-configure-product-listings-in-magento-2">在 Magento 2 中配置产品列表的步骤</h2>
<p><!-- /wp:heading --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>在管理面板上，单击<code>Stores</code>。<code>Configuration</code>在该<code>Settings</code>部分下选择</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>单击<code>Catalog</code>lept 面板中的 ，然后选择<code>Catalog</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>打开该<code>Storefront</code>部分，然后执行以下步骤：</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>
<p><img src="https://www.360magento.com/media/wysiwyg/NA1qfyb.png" /></p>
<p><!-- wp:list --></p>
<ul><!-- wp:list-item -->
<li>通过选择以下列表之一来选择默认列表模式<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>仅网格</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>仅列出</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>网格（默认）/列表</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>列表（默认/网格</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Products per page on Grid Allowed Values</code>字段中，根据需要输入网格上每页显示的产品数量。如果您想设置值列表，请用逗号分隔每个数字。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Products per Page on Grid Default Value</code>字段中，输入您要为网格上每页显示的产品设置默认值的数字。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Products per Page on List Allowed Values</code>字段中，根据需要输入列表中每页显示的产品数量。如果您想设置值列表，请用逗号分隔每个数字。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Products per page on List Default Value</code>字段中，输入您要为列表中每页显示的产品设置默认值的编号。</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Allow All Products on Page</code>字段中，选择<code>Yes</code>允许客户显示所有产品的列表</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在<code>Product Listing Sort by</code>字段中，设置默认属性以对产品进行排序，以下列表之一：<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>位置</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>姓名</li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>价格</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如果您使用平面目录，请执行以下操作<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>在 中<code>Use Flat Catalog Category</code>，选择<code>Yes</code></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>在 中<code>Use Flat Catalog Product</code>，设置为<code>Yes</code></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --> <!-- wp:list-item -->
<li>如果您希望允许动态引用类别和产品 URL 中的媒体资产，请在<code>Allow Dynamic Media URLs in Products and Categories</code>字段中设置为<code>Yes</code></li>
<!-- /wp:list-item --></ul>
<p><!-- /wp:list --> <!-- wp:list {"ordered":true} --></p>
<ol><!-- wp:list-item -->
<li>完成后，单击<code>Save Config</code>。</li>
<!-- /wp:list-item --></ol>
<p><!-- /wp:list --></p>]]></description>
      <pubDate>Fri, 28 Jul 2023 07:28:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中设置订单确认电子邮件]]></title>
      <link>https://www.360magento.com/blog/configure-sales-email-order-confirmation-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Set_up_Order_Confirmation_Email_in_Magento_2">在 Magento 2 中设置订单确认电子邮件的步骤</span></h2>
<ul>
<li><span>转到</span><span>Magento 2 后端面板中的<span>Stores &gt; Configuration &gt; Sales &gt; Sales Email</span></span><span>。</span><span><span></span></span></li>
<li><span><span>从给定的选项中探索订单部分。<br /><img src="https://www.360magento.com/media/wysiwyg/order-confirmationemail-magento-2.png" /></span></span>
<p><span>已启用</span><span>：设置&ldquo;是&rdquo;以启用销售电子邮件选项。</span></p>
<p><span>新订单确认电子邮件发件人：</span><span>选择要发送电子邮件的商店代表，该代表将被表示为电子邮件的发件人。</span></p>
<p><span><span><span>新</span></span><span><span>订单确认模板</span></span><span><span>：</span></span></span><span>选择发送电子邮件的模板。</span></p>
<p><span>访客新订单确认模板</span><span>：选择访客用户的模板。</span></p>
<p><span>发送订单电子邮件副本至</span><span>此处添加您的测试电子邮件 ID。</span></p>
<p><span>发送订单电子邮件副本方法</span><span>：在此处添加发送电子邮件副本的方法。</span></p>
<ul>
<li><span>然后，浏览订单评论、发票、发货和贷项凭证部分，并根据订单填写所有适当的详细信息。</span></li>
<li><span>单击</span><span>保存配置</span><span>以完成销售电子邮件配置过程。</span></li>
</ul>
<p><span>完成上述步骤后，您将可以轻松地向客户发送有关客户或用户执行的任何特定操作的电子邮件。</span></p>
</li>
</ul>
<p><a href="https://magecomp.com/blog/wp-content/uploads/2020/05/order-confirmationemail-magento-2.png" data-wpel-link="internal"></a></p>]]></description>
      <pubDate>Thu, 27 Jul 2023 07:20:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：如何在主页上插入产品]]></title>
      <link>https://www.360magento.com/blog/how-to-insert-products-on-homepage-magento-2/</link>
      <description><![CDATA[<p><span><span><span>登陆页面可以被认为是每个网站最重要的部分。</span><span>客户在选择购物之前会首先看到您的着陆页，因此您的责任是使着陆页真正吸引客户。</span><span>如果没有，他们会立即离开您的网站。</span><span>也许吸引客户的最理想方法是将项目嵌入到您的目标网页上。</span><span>因为当他们访问您的网站时，他们会更轻松地看到吸引他们的商品，并有动力购买它们。</span><span>您还可以在登陆页面上嵌入标记/标记，请阅读本指南。</span></span></span></p>
<h2><span id="How_to_Insert_Products_on_Homepage_in_Magento_2">如何在 Magento 2 主页上插入产品：</span></h2>
<p><span>第 1 步</span><span>&ndash; 选择内容菜单和其中的页面</span></p>
<p><span><span>首先，您需要打开 Magento 2 管理面板，然后通过菜单单击内容菜单。</span><span>此处将显示页面，您将看到商店的所有页面。</span><span>您将看到以下屏幕。</span></span></p>
<p><span><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/2.1-1.png" /></span></span></p>
<p><span><span><span>第 2 步</span><span>&ndash; 选择&ldquo;操作&rdquo;菜单下的&ldquo;编辑&rdquo;</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/2.3.png" /></span></span></span></p>
<p><span>现在单击内容部分并继续插入小部件选项。</span></p>
<p><span>步骤 3 &ndash;</span><span>从选项中选择目录产品列表</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/2.4.png" /></span></p>
<p><span><span>现在您将看到&ldquo;插入小部件&rdquo;页面，现在为小部件类型选择&ldquo;目录产品列表&rdquo;选项。</span><span>MageComp可以帮助您轻松在首页列出特色商品、畅销商品、新品、每日优惠等，让我们看看它是如何做到的。</span></span></p>
<p><span><span>&nbsp;</span></span><span>第 4 步 &ndash;</span><span>选择分类并单击&ldquo;插入小部件&rdquo;按钮</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/vishal-bc.png" /></span></p>
<p><span>紧接着，在下一页上，您将看到有一个&ldquo;条件&rdquo;属性。因此，现在从选项中选择&ldquo;类别&rdquo;，然后选择您想要在商店主页上展示的类别。</span><span>现在轻松单击&ldquo;插入小部件&rdquo;。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/4th-edit.png" /></span></p>
<p><span>最后，返回&ldquo;内容&rdquo;选项卡，您将在内容框中看到&ldquo;产品&rdquo;符号。</span><span>单击&ldquo;保存页面&rdquo;按钮即可完成页面的更改。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/a.png" /></span></p>]]></description>
      <pubDate>Wed, 26 Jul 2023 07:15:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中所有页面的前端添加 JS 文件]]></title>
      <link>https://www.360magento.com/blog/add-js-file-frontend-pages-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_JS_File_in_Frontend_for_All_Pages_in_Magento_2">在 Magento 2 中所有页面的前端添加 JS 文件的步骤：</span></h2>
<p><span><span>第一步：创建一个文件 default.xml 在此路径下 app\code\[Vendor]\[Module]\view\frontend\layout\default.xml</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/QQ20230719-141237_2x.png" /></span></span></p>
<p></p>
<p><span>第二步：在此路径下创建JS文件 app\code\[Vendor]\[Module]\view\frontend\web\js\js_fileName.js</span></p>
<p>第三步：执行 setup Upgrade 命令和 setup:static-content:deploy 命令，为 Magento 2 商店的所有页面实施 JS 文件</p>]]></description>
      <pubDate>Tue, 25 Jul 2023 07:09:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用持久购物车]]></title>
      <link>https://www.360magento.com/blog/enable-persistent-shopping-cart-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Enable_Persistent_Shopping_Cart_in_Magento_2">在 Magento 2 中配置启用持久购物车的步骤：</span></h2>
<p><span>要在 Magento 2 商店中启用持久购物车，您需要执行以下操作：</span></p>
<p><span>第 1 步</span><span>：导航到</span><span>管理</span><span>并转到商店&gt;配置&gt;客户&gt;持久购物车</span></p>
<p><span>步骤 2&nbsp;</span><span>：</span><span>禁用</span><span>&ldquo;使用系统值&rdquo;复选框并设置</span><span>&ldquo;是&rdquo;</span><span>选项。</span></p>
<p><span>步骤 3&nbsp;</span><span>：根据您的选择设置时间，默认值为</span><span>31,536,000</span><span>秒。</span></p>
<p><span>步骤4&nbsp;</span><span>：</span><span>启用</span><span>记住我保存购物车信息的选项。</span></p>
<p><span>步骤 5&nbsp;</span><span>：设置</span><span>&ldquo;否&rdquo;&nbsp;</span><span>，以便在用户退出时保存购物车信息。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Enable-Persistent-Shopping-Cart-in-Magento-2.png" /></span></p>
<p><span>步骤 6：最后，</span><span>保存配置</span><span>以应用持久购物车。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Mon, 24 Jul 2023 08:16:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置操作日志]]></title>
      <link>https://www.360magento.com/blog/configure-action-log-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Action_Log_in_Magento_2">在 Magento 2 中配置操作日志的步骤：</span></h2>
<p><span>步骤1：</span></p>
<p><span>导航到</span><span>商店&gt;设置&gt;配置&gt;高级&gt;管理操作日志记录部分</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Admin.png" /></span></p>
<p><span>用于启用管理日志记录以标记复选框&nbsp;</span></p>
<p><span>要禁用管理日志记录，请取消选中该复选框&nbsp;</span></p>
<p><span>步骤 2：保存配置</span></p>
<p><span>最后的话：</span></p>
<p><span><span><span>希望通过上述解决方案，所有人都能够在 Magento 2 中配置操作日志。如果您在上述解决方案中发现任何困难，那么我会在下面的评论部分中倾听。</span><span>另外，通过社交媒体与您的 Magento 朋友分享本文，并帮助他们在 Magento 2 中配置操作日志。直到保持安全。</span></span></span></p>]]></description>
      <pubDate>Sun, 23 Jul 2023 08:09:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加新的 CMS 页面]]></title>
      <link>https://www.360magento.com/blog/add-new-cms-page-magento/</link>
      <description><![CDATA[<h2><span id="How_to_add_a_New_CMS_Page_in_Magento_2">如何在 Magento 2 中添加新的 CMS 页面：</span></h2>
<h3><span id="Step_1_Firstly_you_need_to_Add_a_New_Page"><span><span>第1步：首先您需要</span></span><span><span><span>添加一个新页面</span></span></span></span></h3>
<p><span>导航到</span><span>内容 &gt; 元素 &gt; 页面</span><span>，然后点击</span><span>添加新页面</span><span>：</span></p>
<p><span>页面标题：</span><span>根据您的要求添加适当的页面标题。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add-a-New-CMS-Page-in-Magento-2.png" /></span></p>
<p><span><span>探索</span><span>搜索引擎优化</span><span>选项</span></span></p>
<p></p>
<p><img src="https://www.360magento.com/media/wysiwyg/Search-Engine-Optimization-option.png" /></p>
<p><span>URL 键：</span><span>添加页面在线地址的 URL。</span></p>
<p><span>元标题：</span><span>在此处添加您的元标题。</span></p>
<p><span>元关键字：</span><span>在此处添加元关键字。</span></p>
<p><span>元描述：</span><span>添加适当的元描述</span></p>
<p><span><span>浏览网站</span><span>选项</span></span><span>中的页面</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Page-in-Website-option.png" /></span></p>
<p><span>商店视图：</span><span>选择显示页面的商店视图。</span></p>
<p><span>探索</span><span>设计</span><span>选项</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Explore-Design-Option.png" /></span></p>
<p><span>布局：</span><span>从下拉列表中选择您想要的布局</span></p>
<p><span>探索</span><span>自定义设计更新</span><span>选项</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Custom-Design-Update-option.png" /></span></p>
<p><span>用于自定义页面的设计和主题。</span></p>
<p><span>探索</span><span>内容</span><span>选项</span></p>
<p><span>内容标题：</span><span>管理员需要添加显示在页面顶部的主标题。</span></p>
<p><span>显示/隐藏编辑器：</span><span>用于探索所见即所得编辑器。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/exploring-WYSIWYG-editor.png" /></span></p>]]></description>
      <pubDate>Sat, 22 Jul 2023 07:39:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示/删除 CMS 页面的面包屑]]></title>
      <link>https://www.360magento.com/blog/show-remove-breadcrumbs-cms-pages-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Show_Remove_Breadcrumbs_to_CMS_Pages_in_Magento_2">在 Magento 2 中显示/删除 CMS 页面面包屑的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至</span><span>&ldquo;商店&rdquo;&gt;&ldquo;配置&rdquo;&gt;&ldquo;常规&rdquo;&gt;&ldquo;Web&rdquo;</span></p>
<p><span>并探索</span><span>&ldquo;默认页面&rdquo;选项</span><span>。</span></p>
<p><span><span></span></span><span>如果想在 Magento 2 中显示面包屑，请将</span><span>CMS 页面的显示面包屑</span><span>更改</span><span>为&ldquo;</span><span>是&rdquo;</span><span><span></span></span></p>
<p><span><span></span></span><span>如果要在 Magento 2 中删除面包屑，请将</span><span>CMS 页面的显示面包屑</span><span>更改</span><span>为&ldquo;</span><span>否&rdquo;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Show-Remove-Breadcrumbs-to-CMS-Pages-in-Magento-2-1.png" /></span></p>]]></description>
      <pubDate>Fri, 21 Jul 2023 07:47:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置分页控件]]></title>
      <link>https://www.360magento.com/blog/configure-pagination-controls-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_the_Pagination_Controls_in_Magento_2">在 Magento 2 中配置分页控件的步骤：</span></h2>
<p><span>第1步：</span><span>导航到</span><span>内容&gt;设计&gt;配置&gt;选择当前主题&gt;&nbsp;</span><span>。</span></p>
<p><span>向下滚动并浏览</span><span>分页</span><span>部分。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/How-to-Configure-the-Pagination-Controls-in-Magento-2-1.png" /></p>
<p><span>分页框架：</span><span>输入您想要在分页控件中显示的链接数量。</span></p>
<p><span>分页帧跳过：</span><span>添加在分页控件中显示下一个链接时跳过的所需数量。</span></p>
<p><span>上一个锚文本：</span><span>添加所需的文本以与上一个链接一起显示。</span></p>
<p><span>下一个锚文本：</span><span>添加将与下一个链接一起显示的所需文本。</span></p>
<p><span>第 2 步：</span><span>保存配置</span></p>
<p><span>就是这样。</span></p>]]></description>
      <pubDate>Thu, 20 Jul 2023 08:43:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建新的商店视图]]></title>
      <link>https://www.360magento.com/blog/create-new-store-view-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_a_New_Store_View_in_Magento_2">在 Magento 2 中创建新商店视图的步骤</span></h2>
<p><span>第 1 步：</span><span>登录管理并从仪表板导航至</span><span>商店 &gt; 设置 &gt; 所有商店</span></p>
<p><span>第 2 步：</span><span>现在，单击</span><span>&ldquo;创建商店视图&rdquo;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/New-Store-View-in-Magento-2.png" /></span></p>
<p><span>第三步：</span><span>输入店铺查看信息</span></p>
<p><span>商店：</span><span>选择该商店视图的主要商店。</span></p>
<p><span>名称：</span><span>插入该商店视图的名称。</span></p>
<p><span>代码：</span><span>输入您正在创建的商店视图的代码。</span></p>
<p><span>状态：</span><span><span>选择启用以配置商店视图。</span><span>稍后，如果有需要，您可以通过选择状态为禁用来禁用商店视图。</span></span></p>
<p><span>排序顺序：</span><span>输入商店视图的序列号，该序列号将按照该顺序与其他商店视图一起显示。</span></p>
<p><span>第四步：</span><span>输入所有信息后，点击</span><span>&ldquo;保存商店视图&rdquo;</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Save-Store-View..png" /></span></p>
<p><span><span>就是这样。</span><span>在 Magento 2 中配置新的商店视图后，您可以在前端商店中找到它。</span></span></p>]]></description>
      <pubDate>Wed, 19 Jul 2023 08:39:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中取消发货]]></title>
      <link>https://www.360magento.com/blog/cancel-shipment-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Cancel_A_Shipment_In_Magento_2">在 Magento 2 中取消发货的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至&ldquo;销售&rdquo;&gt;&ldquo;订单&rdquo;</span></p>
<p><span></span><span>步骤2：</span><span>选择您需要取消的订单</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Choose-the-order-you-require-to-cancel.png" /></span></p>
<p><span>第三步：</span><span>查看已取消订单的发货情况</span></p>
<p><span>如果没有显示取消按钮，则无法取消该货件。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/The-Shipments-Of-Canceled-Order.png" /></span></p>
<p><span>第 4 步：</span><span>很可能会显示取消按钮，因此单击取消按钮即可取消该订单。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Click-on-the-Cancel-Button.png" /></span></p>]]></description>
      <pubDate>Tue, 18 Jul 2023 07:33:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置重新排序]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-reorder-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_enable_or_disable_reorder_in_Magento_2">在 Magento 2 中启用或禁用重新排序的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至</span><span>商店&gt;配置&gt;销售&gt;销售</span><span>并探索</span><span>重新订购</span><span>选项</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Configure-Reorder-in-Magento-2.png" /></span></p>
<p><span>允许重新排序：</span><span>设置&ldquo;&nbsp;</span><span>YES&nbsp;</span><span>&rdquo;允许重新排序，设置&ldquo;&nbsp;</span><span>NO&nbsp;</span><span>&rdquo;则禁用重新排序。</span></p>
<p><span>步骤 2：</span><span>保存</span><span>配置</span></p>
<p><span>就这样，您已经在 Magento 2 商店中成功实施了重新排序配置。</span></p>]]></description>
      <pubDate>Mon, 17 Jul 2023 08:31:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加条款和条件复选框]]></title>
      <link>https://www.360magento.com/blog/add-terms-and-conditions-checkbox-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Terms_And_Conditions_Checkbox_in_Magento_2">在 Magento 2 中添加条款和条件复选框☑️的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至商店 &gt; 配置 &gt; 销售 &gt; 结帐并浏览结帐选项。</span></p>
<p><span>启用单页结帐：</span><span>选择</span><span>&ldquo;是&rdquo;</span><span>选项以启用一步结帐。</span></p>
<p><span>启用条款和条件：</span><span>选择</span><span>&ldquo;是&rdquo;</span><span>选项以启用条款和条件。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add-Terms-And-Conditions-Checkbox.png" /></span></p>
<p><span>第 2 步：</span><span>现在，导航至</span><span>&ldquo;商店&rdquo;&gt;&ldquo;条款和条件&rdquo;</span></p>
<p><span>然后点击</span><span>&ldquo;添加新条件&rdquo;</span><span>选项。</span></p>
<p><span>填写以下所有信息：</span></p>
<p><span>条件名称：</span><span>添加条件名称以供您个人参考。</span></p>
<p><span>状态：</span><span>将状态更改为&ldquo;已启用&rdquo;</span></p>
<p><span>将内容显示为：</span><span>选择所需的选项（文本或 HTML）以在前端显示内容。</span></p>
<p><span>应用：</span><span>自动或手动选择您所需的选项来应用条款和条件。</span></p>
<p><span>商店视图：</span><span>选择您的商店视图以了解将使用的条款和条件。</span></p>
<p><span>复选框文本：</span><span>添加将在条款和条件链接中显示的所需文本</span></p>
<p><span>内容：</span><span>添加商店的全部条款和条件。</span></p>
<p><span>内容高度 (CSS)：</span><span>添加内容高度，以决定结账时显示条款和条件的文本框的高度（以像素为单位）。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add-New-Condition.png" /></span></p>
<p><span>第三步：</span><span>保存</span><span>配置。</span></p>
<p><span>第 4 步：</span><span>执行上述步骤后，您将能够在商店的结账页面（前端）查看条款和条件</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Save-the-Config.png" /></span></p>]]></description>
      <pubDate>Sun, 16 Jul 2023 07:28:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置免费送货]]></title>
      <link>https://www.360magento.com/blog/setup-free-shipping-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Setup_Free_Shipping_in_Magento_2">在 Magento 2 中设置免费送货的步骤：</span></h2>
<p><span>步骤 1：</span><span>登录 Admin Dashboard 并导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span>从左侧面板导航至</span><span>&ldquo;销售&rdquo;&gt;&ldquo;送货方式&rdquo;&nbsp;</span><span>，然后展开</span><span>&ldquo;免费送货&rdquo;</span><span>部分。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/free-shipping-configuration.png" /></span></p>
<p><span>已启用：</span><span>选择&ldquo;是&rdquo;以启用免费送货。</span><br /><span>标题：</span><span>在结账页面提及免运费的标题。</span><br /><span>方法名称：</span><span>添加方法名称，以消除运输方面的混乱。</span><br /><span>最低订单金额：</span><span>添加最低订单金额以获得免费送货服务。</span><br /><span>显示的错误消息：</span><span>如果不提供免费送货，请添加所需的错误消息。</span><br /><span>运送到适用的国家/地区：</span><span>根据您的要求选择所有国家/地区或特定国家/地区以启用免费送货。</span><br /><span>运送到特定国家/地区：</span><span>如果您只想运送到特定国家/地区，请选择国家/地区。</span><br /><span>如果不适用则显示方法：</span><span>根据您的要求选择。</span><br /><span>排序：</span><span>在结账页面设置运送方式的排序顺序。</span></p>
<p><span>第 3 步：</span><span>现在，展开</span><span>UPS</span><span>部分以激活免费送货</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/free-shipping-activate.png" /></span></p>
<p><span>自由方法：</span><span>将此字段设置为 UPS 接地。</span><br /><span>启用免费送货阈值：</span><span>将此选项设置为启用。</span><br /><span>免费送货金额阈值：</span><span>根据您的要求添加提供免费送货的最低金额阈值。</span></p>
<p><span>步骤 4：</span><span>单击</span><span>&ldquo;保存配置&rdquo;。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Sat, 15 Jul 2023 07:25:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更改 Magento 2 中的默认语言]]></title>
      <link>https://www.360magento.com/blog/change-default-language-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_Default_Language_in_Magento_2">更改 Magento 2 中默认语言的步骤：</span></h2>
<p><span>&nbsp;</span><span>第一步：</span><span><span>后台</span><span>登录店铺</span></span><span>管理员账号</span><span></span></p>
<p><span>第2步：</span><span>导航到以下路径</span></p>
<p><span>商店 -&gt; 配置</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Change-Default-Language-in-Magento-2.png" /></span></p>
<p><span>步骤 3：</span><span>选择以下选项</span></p>
<p><span>常规 -&gt; 区域设置选项</span></p>
<p><span></span><span>并从区域</span><span><span>设置字段下拉菜单中选择所需的语言</span><span>。</span></span></p>
<p><span>注意</span><span><span>&ndash;</span><span>如果您有多个商店视图，请选择要更改语言的</span></span><span>商店视图。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Store-View.png" /></span></p>
<p><span><span>步骤 4：</span><span>按</span><span>&ldquo;保存配置&rdquo;</span><span>按钮。</span></span></p>]]></description>
      <pubDate>Fri, 14 Jul 2023 07:19:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置高级定价]]></title>
      <link>https://www.360magento.com/blog/setup-advanced-pricing-in-magento/</link>
      <description><![CDATA[<h1><span id="Steps_to_Setup_Advanced_Pricing_in_Magento_2">在 Magento 2 中设置高级定价的步骤：</span></h1>
<p><span>第 1 步：</span><span>导航至</span><span>目录 &gt; 产品</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Setup-Advanced-Pricing-in-Magento-2.png" /></span></p>
<p><span>步骤 2：</span><span>然后选择您需要应用高级定价设置的产品</span></p>
<p><span>步骤 3：</span><span>然后，选择</span><span>高级定价</span><span>选项。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/special-price-tier-price.png" /></span></p>
<p><span><span>第 4 步：现在填写</span><span><span><span>特价</span></span><span><span>和</span></span><span><span>客户团体价格</span></span></span><span>的详细信息</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/advanced-pricing-1.png" /></span></span></p>]]></description>
      <pubDate>Thu, 13 Jul 2023 07:17:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中翻译 CMS 页面]]></title>
      <link>https://www.360magento.com/blog/translate-cms-pages-in-magento/</link>
      <description><![CDATA[<p>如何在 Magento 2 中翻译 CMS 页面：<br />第 1 步：首先导航到内容&gt;元素&gt;页面</p>
<p>选择您需要翻译的页面并通过单击编辑模式进行探索：</p>
<p>只需复制 URL 密钥并返回按钮到页面网格，然后点击添加新页面按钮：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/Translate-CMS-Pages-in-Magento-2.png" /></p>
<p><span>第二步：填写相应信息。</span></p>
<p><span>启用页面为&ldquo;是&rdquo;</span></p>
<p><span>页面标题：</span><span>在此处添加翻译后的标题。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add-the-translated-title.png" /></span></p>
<p><span>URL 键：</span><span>添加您之前复制的 URL。</span></p>
<p><span>元标题：</span><span>添加翻译页面的标题</span></p>
<p><span>元关键字：</span><span>为翻译页面添加关键字。</span></p>
<p><span>元描述：</span><span>添加翻译页面的元描述。</span></p>
<p><span><span>商店视图：</span><span>相应地选择以显示翻译。</span></span></p>
<p></p>
<p><img src="https://www.360magento.com/media/wysiwyg/Select-store-view-for-CMS-page-in-Magento-2.png" /></p>
<p><span>内容</span><span>：浏览内容部分并添加翻译的内容。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/CMS-page-in-Magento-2.png" /></span></p>]]></description>
      <pubDate>Wed, 12 Jul 2023 07:59:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中禁用或允许访客结帐]]></title>
      <link>https://www.360magento.com/blog/disable-or-allow-guest-checkout-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Disable_or_Allow_Guest_Checkout_in_Magento_2">在 Magento 2 中禁用或允许访客结账的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理员帐户转到</span><span>商店 &gt; 设置 &gt; 配置</span></p>
<p><span>步骤 2：</span><span>从左侧面板中，展开</span><span>&ldquo;销售&rdquo;</span><span>并选择</span><span>&ldquo;结帐&rdquo;</span></p>
<p><span>步骤 3：</span><span>放大</span><span>&ldquo;结帐选项&rdquo;选项</span><span><span><span>卡。</span><span>要限制访客结帐，请取消选中&ldquo;使用系统值&rdquo;复选框，然后</span></span></span><span><span><span>在</span></span><span><span>&ldquo;允许访客结帐&rdquo;字段中选择</span></span></span><span>&ldquo;否&rdquo;选项</span><span>。</span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/QQ20230629-151238_2x.png" /></span></p>
<p><span>如果您希望在 Magento 2 中进行访客结帐，请将&ldquo;允许访客结帐&rdquo;字段</span><span>设置</span><span>为</span><span>&ldquo;是&rdquo;</span><span>或选中&ldquo;使用系统值&rdquo;复选框。</span></p>
<p><span>步骤 4：</span><span>单击</span><span>&ldquo;保存配置&rdquo;</span><span>按钮。</span></p>]]></description>
      <pubDate>Tue, 11 Jul 2023 07:11:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建 301 重定向]]></title>
      <link>https://www.360magento.com/blog/create-301-redirect-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_301_Redirect_in_Magento_2">在 Magento 2 中创建 301 重定向的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至</span><span>管理面板 &gt; 营销 &gt; SEO 和搜索 &gt; URL 重写</span></p>
<p><span>第 2 步：</span><span>现在按</span><span>以下屏幕截图中的</span><span>&ldquo;添加 URL 重写&rdquo;选项。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_1_1.png" /></span></p>
<p><span>步骤 3：</span><span>在相应字段中输入信息。</span></p>
<p><span>创建 URL 重定向：</span><span>从下拉列表中选择自定义选项。</span></p>
<p><span>商店：</span><span>选择您需要实现 URL 重写的商店视图</span></p>
<p><span>请求路径：</span><span>输入您需要重定向的路径</span></p>
<p><span>目标路径：</span><span>输入您需要将过去的 URL 重定向到的路径。</span></p>
<p><span>重定向类型：</span><span>从下拉列表中选择永久 (301)。</span></p>
<p><span>描述：</span><span>添加此 301 重定向的描述或原因。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_2.png" /></span></p>]]></description>
      <pubDate>Mon, 10 Jul 2023 07:00:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何通过命令行安装 Magento 2.4]]></title>
      <link>https://www.360magento.com/blog/install-magento-2-4-via-command-line/</link>
      <description><![CDATA[<p>通过命令行安装 Magento 2.4 并受益于最新 Magento 2.4 版本的增强功能，例如：</p>
<p>通过店内提货为购物者带来新的满足感<br />通过卖家辅助购物以客户为导向的服务<br />性能提高 10 倍并简化资产管理<br />Magento 2 管理面板的 2FA 安全性<br />使用审批工作流程的 B2B 采购<br />简单的无头商务和 PWA 开发。<br />升级的平台安全性、质量和性能。<br />我想现在我们已经迫不及待地想安装 Magento 2.4 了。如果您想安装 Magento 2.4，请按照以下步骤操作：</p>
<p>要通过命令行安装 Magento 2.4，有一个命令行界面可以执行安装和配置任务：&lt;magento_root&gt;/bin/magento</p>
<h2><span id="Steps_to_Install_Magento_24_via_Command_Line">通过命令行安装 Magento 2.4 的步骤：</span></h2>
<p><span>在命令行中运行以下命令：</span></p>
<pre>php bin/magento setup:install --base-url="http://127.0.0.1/m240/" --db-host="localhost" --db-name="m240" --db-user="root" --db-password="root@123" --admin-firstname="admin" --admin-lastname="admin" --admin-email="admin@admin.com" --admin-user="admin" --admin-password="admin@123" --language="en_US" --currency="USD" --timezone="America/Chicago" --use-rewrites="1" --backend-frontname="admin"
</pre>]]></description>
      <pubDate>Sun, 09 Jul 2023 07:49:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更改 Magento 2 中的版权声明]]></title>
      <link>https://www.360magento.com/blog/change-copyright-notice-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_change_copyright_notice_in_Magento_2">在 Magento 2 中更改版权声明的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航到内容&gt;配置，</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_1-3.png" /></span></p>
<p><span><span>步骤 2：</span><span>点击 编辑您需要更改版权声明的位置</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/Config_2-3.png" /></span></span></p>
<p><span>第 3 步：</span><span>现在，探索页脚部分，</span></p>
<p><span>版权所有：</span><span>根据您的要求更新文本。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_3-1.png" /></span></p>
<p><span><span>保存配置。</span></span></p>]]></description>
      <pubDate>Fri, 07 Jul 2023 21:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中批量更新产品属性]]></title>
      <link>https://www.360magento.com/blog/update-product-attributes-in-bulk-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Update_Product_Attribute_in_Bulk_in_Magento_2">在 Magento 2 中批量更新产品属性的步骤：</span></h2>
<p><span>转到</span><span>目录&gt;产品</span><span>并选择多个产品来赋予您想要更新的值。</span></p>
<p><span><span></span></span><span><span><span>现在，从批量操作选项中</span></span><span><span>选择</span></span></span><span>&ldquo;更新属性&rdquo; 。</span><span><span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/QQ20230628-143955_2x.png" /></span></p>
<p><span>&nbsp;</span><span>向下滚动并点击</span><span>&ldquo;更改&rdquo;</span><span>以更改产品属性的值。</span></p>
<p><span><span>保存</span><span>配置。</span></span></p>]]></description>
      <pubDate>Fri, 07 Jul 2023 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建新的 CMS 块]]></title>
      <link>https://www.360magento.com/blog/create-new-cms-block-in/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_New_CMS_Block_in_Magento_2">在 Magento 2 中创建新 CMS 块的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航到</span><span>内容&gt;元素&gt;块</span></p>
<p><span>点击添加新块，如下图所示。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add_new_block_1.png" /></span></p>
<p><span>步骤2：</span><span>按照以下说明进行配置。</span></p>
<p><span>块标题：</span><span>根据您的需要添加新块的标题。&nbsp;</span></p>
<p><span>标识符：</span><span>选择一个唯一的标识符，并确保使用小写字符和下划线而不是空格。</span></p>
<p><span>商店视图：</span><span>选择您需要显示块的商店视图。</span></p>
<p><span>状态：</span><span>启用该按钮以在 Magento 2 商店中显示该块。</span></p>
<p><span>内容：</span><span>根据您的愿望和要求添加内容。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_1.png" /></span></p>]]></description>
      <pubDate>Thu, 06 Jul 2023 02:35:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置产品列表]]></title>
      <link>https://www.360magento.com/blog/how-to-configure-product-listings-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Product_Listings_in_Magento_2">在 Magento 2 中配置产品列表的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航至</span><span>&ldquo;商店&rdquo;&gt;&ldquo;配置&rdquo;&gt;&ldquo;目录&rdquo;&gt;&ldquo;目录&rdquo;</span><span>并探索</span><span>&ldquo;店面&rdquo;</span><span>选项</span></p>
<p><span>步骤 2：</span><span>现在根据您的要求进行以下配置。</span></p>
<p><span>列表模式：</span><span>根据您的要求从下面的下拉列表中选择&nbsp;</span></p>
<p><span>仅网格</span><br /><span>网格（默认）/列表</span><br /><span>仅</span><br /><span>列表 列表（默认/网格</span></p>
<p><span>网格上每页的产品允许值：</span><span><span><span>根据您的要求添加将在网格上显示的产品数量。</span><span>如果您想设置值列表，请使用逗号添加数字。</span></span></span></p>
<p><span>网格上每页的产品默认值：</span><span>添加您需要设置为网格上每页产品显示默认值的数量。</span></p>
<p><span>列表中每页的产品允许值：</span><span><span><span>根据您的需要添加每页显示的数量。</span><span>如果您想设置值列表，请使用逗号添加数字。</span></span></span></p>
<p><span>列表中每页的产品默认值：</span><span>添加您想要设置为列表中每页显示的产品的默认数量。</span></p>
<p><span>产品列表排序方式：</span><span>根据您的需要进行选择，根据位置、产品名称和价格对产品进行排序。</span></p>
<p><span>允许每页显示所有产品：</span><span>选择&ldquo;是&rdquo;可向用户显示所有产品的列表。</span></p>
<p><span>记住类别分页：</span><span>设置&ldquo;是&rdquo;以保留基于客户搜索和目录列表的分页设置。</span></p>
<p><span>使用平面目录类别：</span><span>要使用平面目录类别，请</span><span>在此选项中设置</span><span>&ldquo;是&rdquo; 。</span><span><span></span></span></p>
<p><span>使用平面目录产品：</span><span>要使用平面目录产品，请</span><span>在此选项中设置</span><span>&ldquo;是&rdquo; 。</span><span><span></span></span></p>
<p><span>每个产品的色板：</span><span>根据您的要求添加数字以显示每个产品的色板。</span></p>
<p><span>在产品列表中显示色板：</span><span>如果您希望在产品列表中显示色板，</span><span>请设置</span><span>&ldquo;是&rdquo; 。</span><span><span></span></span></p>
<p><span>显示样本工具提示：</span><span>如果您希望在产品列表中显示样本工具提示，</span><span>请设置</span><span>&ldquo;是&rdquo; 。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_storefront.png" /></span></p>]]></description>
      <pubDate>Wed, 05 Jul 2023 06:33:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加订单和退货小部件]]></title>
      <link>https://www.360magento.com/blog/how-to-add-orders-and-returns-widget-in-magento/</link>
      <description><![CDATA[<h2><span id="Step_to_add_the_orders_and_returns_widget_in_Magento_2">在 Magento 2 中添加订单和退货小部件的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航到</span><span>内容&gt;元素&gt;小部件&nbsp;</span></p>
<p><span>点击</span><span>小工具按钮</span></p>
<p><span>第 2 步：</span><span>现在，在</span><span>店面属性中</span><span>进行如下配置。</span></p>
<p><span>类型：</span><span>管理员必须选择订单和退货选项。</span></p>
<p><span>设计包/主题：</span><span>选择商店内使用的主题。</span></p>
<p><span>小部件标题：</span><span>用于描述您的小部件，仅管理员可见。</span></p>
<p><span>分配到商店视图：</span><span>相应地选择您的商店视图。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add_widget.png" /></span></p>
<p><span>第 3 步：</span><span>现在，点击&ldquo;布局更新&rdquo;并进行相应配置。</span></p>
<p><span>显示于：</span><span>选择需要显示小部件的页面类型。</span></p>
<p><span>完成布局更新中的更多详细信息以在页面上显示小部件。</span></p>
<p><span></span></p>
<p><span>第四步：</span><span>保存配置</span></p>
<p><span>要在 Magento 2 中使用订单和退货小部件，您必须在订单 ID、帐单姓氏、电子邮件地址或邮政编码字段中添加详细信息，然后点击搜索按钮来搜索您的订单。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Tue, 04 Jul 2023 06:30:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何删除 Magento 2 中的货币切换器]]></title>
      <link>https://www.360magento.com/blog/remove-currency-switcher-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Remove_Currency_Switcher_in_Magento_2">在 Magento 2 中删除货币切换器的步骤：</span></h2>
<p><span>第1步：</span><span>转到以下路径</span></p>
<p><span>app/design/frontend/Themes/Yourtheme/Magento_Theme/layout/default.xml</span></p>
<p><span><span>并添加以下代码：</span></span></p>
<p>&lt;?xml version="1.0"?&gt;</p>
<p>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="currency" remove="true" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;referenceBlock name="store.settings.currency" remove="true" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;/body&gt;</p>
<p>&lt;/page&gt;</p>
<p></p>
<p><span>注意：</span><span>如果您已经有名为&ldquo;default.xml&rdquo;的文件，您只需在 &lt;/body&gt; 标记结束前添加以下两行。</span></p>
<p><span></span></p>
<p><span><span>第 2 步：</span><span>运行以下命令刷新缓存。</span></span></p>
<p><span>php bin/magento cache:flush</span></p>]]></description>
      <pubDate>Mon, 03 Jul 2023 08:36:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中向类别页面添加静态块的指南]]></title>
      <link>https://www.360magento.com/blog/add-static-block-to-category-page-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Static_Block_to_Category_Page_in_Magento_2">在 Magento 2 中将静态块添加到类别页面的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理仪表板导航到</span><span>内容 &gt; 类别</span></p>
<p><span>第 2 步：</span><span>选择</span><span>要添加静态块的</span><span>类别。</span><span><span></span></span></p>
<p><span>第 3 步：</span><span>放大</span><span>内容部分，并从下拉列表中选择您要在</span><span><span>添加 CMS 块字段</span></span><span>中添加的块</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_1-2_1_.png" /></span></p>
<p><span><span>第 4 步：</span><span>现在，展开</span><span>显示设置</span><span>部分并将</span><span>显示模式设置</span><span>为静态块和产品。</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/Config_2-2_1_.png" /></span></span></p>
<p></p>
<p><span>第 5 步：</span><span>点击</span><span>保存</span><span>，在店面勾选分类。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_3.jpg" /></span></p>]]></description>
      <pubDate>Sun, 02 Jul 2023 08:30:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置默认​​页面]]></title>
      <link>https://www.360magento.com/blog/configure-default-page-in-magento-2/</link>
      <description><![CDATA[<p>基本上，每个在线商店的默认页面都可以在商店的基本 URL 的帮助下访问。当任何用户访问您的商店时，将直接显示默认页面，而不是您网站上的任何其他页面。主要是，当出现诸如&ldquo;找不到页面&rdquo;之类的错误时，将显示默认页面。也可以将主页保留为默认页面。</p>
<p>在 Magento 2 中配置默认​​页面的步骤：<br />第 1 步：导航至Stores&gt;Configuration并选择General选项下方的WEB 。</p>
<p>探索默认页面选项卡并继续进行以下配置：</p>
<p>默认 Web URL：添加默认值 cms 或根据您的要求添加其他值。</p>
<p>CMS主页：管理员必须选择您需要的页面成为您的主页，您应该选择&ldquo;主页&rdquo;</p>
<p>默认无路由 URL：管理员可以设置默认值，即&ldquo;cms/index/noRoute&rdquo;，或者您可以根据需要添加。</p>
<p>CMS No Route Page：选择 404 Page Not Found 值，在显示 404 pages not found 错误时显示 CMS 页面。</p>
<p>CMS 无 Cookie 页面：当浏览器中未启用 cookie 时，管理员需要从下拉列表中选择启用 Cookie 以显示 CMS 页面。</p>
<p>显示 CMS 页面的面包屑：如果管理员需要在所有 CMS 页面的顶部显示面包屑，则需要选择&ldquo;是&rdquo;。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/Default_pages.png" /></p>
<p></p>]]></description>
      <pubDate>Sat, 01 Jul 2023 08:26:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建新的 CMS 块]]></title>
      <link>https://www.360magento.com/blog/create-new-cms-block-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_New_CMS_Block_in_Magento_2">在 Magento 2 中创建新 CMS 块的步骤：</span></h2>
<p><span>第 1 步：</span><span>导航到</span><span>内容&gt;元素&gt;块</span></p>
<p><span>按照下面的屏幕截图点击添加新块。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add_new_block.png" /></span></p>
<p><span>第 2 步：</span><span>根据以下说明进行配置。</span></p>
<p><span>块标题：</span><span>根据需要为新块添加标题。&nbsp;</span></p>
<p><span>标识符：</span><span>选择一个唯一的标识符，并确保使用小写字符和下划线而不是空格。</span></p>
<p><span>Store View：</span><span>选择您需要显示的区块所在的Store View。</span></p>
<p><span>状态：</span><span>启用按钮以在您的 Magento 2 商店中显示块。</span></p>
<p><span>内容：</span><span>根据您的愿望和要求添加内容。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config.png" /></span></p>]]></description>
      <pubDate>Fri, 30 Jun 2023 08:21:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中将产品属性添加到销售规则条件]]></title>
      <link>https://www.360magento.com/blog/how-to-add-product-attribute-to-sales-rules-conditions-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Product_Attribute_to_Sales_Rules_Conditions_in_Magento_2">在 Magento 2 中将产品属性添加到销售规则条件的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录管理面板并转到</span><span>Stores &gt; Attributes &gt; Product</span></p>
<p><span>第 2 步：</span><span>选择您想要的产品属性。</span><span><span><span>然后，从左侧面板</span></span><span><span>转到</span></span></span><span>Storefront Properties并将</span><span><span><span>Yes设置</span></span><span><span>为</span></span><span><span>Use for Promo Rule Conditions&nbsp;</span></span><span><span>。</span></span><span><span>最后，</span></span><span><span>保存属性</span></span><span><span>。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span><span><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/Config_1-2.png" /></span></span></span></p>
<p><span>第 3 步：</span><span>现在，导航至</span><span>&ldquo;营销&rdquo;&gt;&ldquo;促销&rdquo;&gt;&ldquo;购物车价格规则&rdquo;</span></p>
<p><span>第 4 步：</span><span><span><span>选择您想要的购物车价格规则。</span><span>展开</span></span></span><span>条件</span><span><span><span>选项。</span><span>现在，根据要求添加条件并单击保存。</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/Config_2-2.png" /></span></span></span></p>]]></description>
      <pubDate>Thu, 29 Jun 2023 08:18:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中上传产品图片占位符]]></title>
      <link>https://www.360magento.com/blog/how-to-upload-product-image-placeholder-in-magento/</link>
      <description><![CDATA[<p><span><span><span>Magento 2 中的产品图片占位符是实际图片的临时图片。</span><span>它用于短时间显示产品图像，直到显示该产品的实际图像。</span></span></span></p>
<p><span><span><span>默认情况下，Magento 会显示其徽标，但我们也可以上传自定义产品图片占位符。</span><span>Magento 占位符图像显示如下：</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_image.png" /></span></p>
<p><span>要在 Magento 2 中上传产品图片占位符，请按照以下步骤操作。</span></p>
<h2><span id="Steps_to_Upload_Product_Image_Placeholder_in_Magento_2">在 Magento 2 中上传产品图片占位符的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理面板转到</span><span>商店 &gt; 设置 &gt; 配置</span></p>
<p><span>第 2 步：</span><span>现在，从左侧面板中选择</span><span>目录 &gt; 目录</span><span>。</span></p>
<p><span>第 3 步：</span><span>然后，展开</span><span>产品图片占位符</span><span><span><span>部分。</span><span>单击</span></span></span><span>选择文件</span><span>为每个图像角色上传产品图像占位符 - 基本、小、色板和缩略图。</span></p>
<p><span>&nbsp;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Frontend_page.png" /></span></p>]]></description>
      <pubDate>Wed, 28 Jun 2023 08:15:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中为产品图片添加水印]]></title>
      <link>https://www.360magento.com/blog/add-watermarks-to-product-images-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Watermarks_to_Product_Images_in_Magento_2">在 Magento 2 中为产品图片添加水印的步骤：</span></h2>
<p><span>第 1 步：</span><span>从</span><span>Admin Dashboard</span><span>导航到</span><span>Content &gt; Design &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：选择您想要的主题并在</span><span><span>编辑模式</span></span><span>下打开它</span><span>。</span><span><span></span></span><span><span></span></span></p>
<p><span>第 3 步：</span><span>展开</span><span>产品图片水印</span><span>选项。</span></p>
<p><span>第 4 步：</span><span>完成基本图像的以下选项</span></p>
<ul>
<li><span>图像</span><span>&ndash; 上传要显示为水印的图像。</span></li>
<li><span>图像不透明度</span><span>&ndash; 以百分比形式设置图像的不透明度。</span></li>
<li><span>图像大小</span><span>&ndash; 以像素为单位设置图像的大小。</span></li>
<li><span>图像位置</span><span>&ndash; 从可用选项中选择水印图像的位置。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/watermark_base_magento_2.png" /></span></p>
<p></p>
<p><span>完成缩略图图像的配置。</span></p>
<p><span></span></p>
<p><span><span>第 5 步：</span><span>完成后，点击</span><span>保存配置</span><span><span><span>。</span><span>转到缓存管理并</span></span></span><span>刷新缓存</span><span>。</span></span></p>]]></description>
      <pubDate>Tue, 27 Jun 2023 08:10:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中将自定义通知添加到页面顶部]]></title>
      <link>https://www.360magento.com/blog/add-custom-notice-to-page-top-in-magento/</link>
      <description><![CDATA[<p><span><span><span>Magento 店主一直在寻找吸引顾客注意力的方法。</span><span>最好的方法之一是在您网站的每个页面的顶部显示一个通知栏。</span><span>商店商家用它来显示优惠、折扣、新产品发布等。顶部的通知栏可以轻松吸引访问您商店的任何人的注意力。</span></span></span></p>
<p><span><span><span>Magento 提供在网站页面顶部显示自定义通知栏的功能。</span><span>店主可以完全控制自定义通知的外观。</span><span>这有助于在不影响用户体验的情况下提高商店收入。</span><span>让我们看看如何在 Magento 2 中将自定义通知添加到页面顶部的步骤。&nbsp;</span></span></span></p>
<h2><span id="Steps_to_Add_Custom_Notice_to_Page_Top_in_Magento_2">在 Magento 2 中将自定义通知添加到页面顶部的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录 Admin Dashboard 并导航至</span><span>Content &gt; Elements &gt; Blocks&nbsp;</span><span>，然后单击</span><span>Add New Block&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span>填写新区块的信息</span></p>
<p><span>块标题</span><span>- 输入块的标题。</span><br /><span>标识符</span><span>&mdash;&mdash;输入用于识别块的值。</span><br /><span>商店视图</span><span>&mdash;&mdash;选择块的商店视图。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/add_new_block_magento_2.png" /></span></p>
<p><span>在编辑器中输入下面提到的代码，以在 Magento 2 的页面顶部显示自定义通知。但是，您可以根据需要更改代码。</span></p>
<p>&lt;div class="main"&gt;</p>
<p>&lt;div class="demonotice" style="text-align: center; background: orange; padding: 10px; font-size: 20px; font-family: forte;"&gt;&amp;nbsp;New Year Sale Live Now! Get upto 60% Discount&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p></p>
<p><span>最后，点击</span><span>保存</span><span>。</span></p>
<p><span>第 3 步：</span><span>导航到</span><span>&ldquo;内容&rdquo;&gt;&ldquo;元素&rdquo;&gt;&ldquo;小部件&rdquo;&nbsp;</span><span>，然后单击</span><span>&ldquo;添加小部件&rdquo;&nbsp;</span><span>。</span></p>
<p><span>第 4 步：</span><span><span><span>在</span></span><span><span>类型字段中</span></span></span><span>选择</span><span>CMS 静态块</span><span><span><span>。</span></span><span><span>选择</span></span><span><span>设计主题</span></span><span><span>为</span></span><span><span>Magento Luma&nbsp;</span></span><span><span>。</span></span><span><span>然后点击</span></span><span><span>继续</span></span><span><span>。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/add_widget_magento_2.png" /></span></p>
<p><span>第 5 步：</span><span>填写店面属性部分中的信息</span></p>
<p><span>小部件标题</span><span>- 输入小部件的标题。</span><br /><span>分配给商店视图</span><span>&ndash; 选择商店视图以显示小部件。</span><br /><span>排序顺序</span><span>&ndash; 输入小部件的排序顺序值。</span></p>
<p><span>&nbsp;</span><img src="https://www.360magento.com/media/wysiwyg/widget_settings_magento_2.png" /></p>
<p><span>第 6 步：</span><span>然后在 Layout Updates 部分中，选择</span><span>Add Layout Update&nbsp;</span><span>。</span><span><span><span>在</span></span><span><span>Display On字段中</span></span><span><span>选择</span></span></span><span>All Pages</span><span><span><span>和</span></span><span><span>Page Top&nbsp;</span></span><span><span>as&nbsp;</span></span><span><span>Container&nbsp;</span></span><span><span>。</span></span><span><span>然后点击</span></span><span><span>保存</span></span><span><span>。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/layout_update_magento_2.png" /></span></p>
<p><span>第 7 步：</span><span>在 Widget Options 中，选择</span><span><span>您创建的</span></span><span>Block ，然后单击</span><span><span><span>Save&nbsp;</span></span><span><span>。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/widget_options_magento_2.png" /></span></p>
<p><span>就是这样！</span><span>在 Magento 2 Frontend 中检查结果。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/cutom_notice_frontend_magento_2.png" /></span></p>]]></description>
      <pubDate>Mon, 26 Jun 2023 08:03:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 的登录页面添加自定义消息]]></title>
      <link>https://www.360magento.com/blog/add-custom-message-to-login-page-in-magento/</link>
      <description><![CDATA[<p><span>在 Magento 2 中将自定义消息添加到登录页面的步骤：</span></p>
<p><span>第 1 步：</span><span>从 Admin Dashboard 转到</span><span>Content &gt; Elements &gt; Blocks&nbsp;</span><span><span><span>。</span><span>单击</span></span></span><span>添加新块</span><span>。</span></p>
<p><span>第 2 步：</span><span>填写详细信息</span></p>
<p><span>块标题</span><span>- 输入块的标题&nbsp;</span></p>
<p><span>标识符</span><span>&mdash;&mdash;提及块的标识符</span></p>
<p><span>商店视图</span><span>&mdash;&mdash;选择商店视图以显示块</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Custom-Message-to-Login-Page-in-Magento-2.png" /></span></p>
<p></p>
<p><span>输入以下代码。</span><span>您可以根据需要更改代码。</span></p>
<p><span><span class="crayon-o">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"message info"</span><span class="crayon-o">&gt;</span></span></p>
<p><span><span class="crayon-o"></span></span><span class="crayon-o">&lt;</span><span class="crayon-v">p</span><span class="crayon-o">&gt;</span><span class="crayon-o">&lt;</span><span class="crayon-v">strong</span><span class="crayon-o">&gt;</span><span class="crayon-e">Welcome </span><span class="crayon-st">to</span><span class="crayon-h"> </span><span class="crayon-v">MageComp</span><span class="crayon-o">!</span><span class="crayon-h"> </span><span class="crayon-e">Please </span><span class="crayon-e">login </span><span class="crayon-st">to</span><span class="crayon-h"> </span><span class="crayon-st">continue</span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">strong</span><span class="crayon-o">&gt;</span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">p</span><span class="crayon-o">&gt;</span></p>
<div class="crayon-line" id="urvanov-syntax-highlighter-6484c5c196370065414572-5"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line"><span class="crayon-o"></span></div>
<div class="crayon-line">
<p><span>最后，点击</span><span>保存</span><span>。</span></p>
<p><span>第 3 步：</span><span>现在，导航至</span><span>Content &gt; Elements &gt; Widgets&nbsp;</span><span><span><span>。</span><span>单击</span></span></span><span>添加小部件</span><span>。</span></p>
<p><span>第 4 步：</span><span>&nbsp;填写详细信息</span></p>
<p><span>类型</span><span>&mdash;&mdash;选择 CMS 静态块</span></p>
<p><span>设计主题</span><span>&mdash;&mdash;选择Magento Luma</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Select-Magento-Luma.png" /></span></p>
<p></p>
<p><span>然后点击</span><span>继续</span></p>
<p><span>第 5 步：</span><span>在店面属性部分下填写详细信息</span></p>
<p><span>小部件标题</span><span>- 给出小部件的标题</span></p>
<p><span>分配给商店视图</span><span>&mdash;&mdash;选择商店视图</span></p>
<p><span>排序顺序</span><span>&mdash;&mdash;设置小部件的顺序</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Set-the-order-of-the-widget.png" /></span></p>
<p></p>
<p><span>第 6 步：</span>&nbsp;<span>填写布局更新部分下的详细信息，</span><span>&nbsp;</span><span><span></span></span></p>
<p><span>显示在</span><span>&ndash; 选择指定页面选项</span></p>
<p><span>页面</span><span>- 选择自定义帐户登录表单</span></p>
<p><span>容器</span><span>&ndash; 根据您的要求设置</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Set-as-per-your-requirement.png" /></span></p>
<p></p>
<p><span>第 7 步：</span><span>从 Widget Options 选项卡中，选择</span><span>您之前创建的</span><span>Block 。</span><span><span></span></span></p>
<p><span>最后，点击</span><span>保存</span><span>。</span></p>
<p><span><span><span>就是这样！</span><span>开始了 -</span></span></span><span>&nbsp;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Output.png" /></span></p>
</div>]]></description>
      <pubDate>Sun, 25 Jun 2023 08:58:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用/禁用演示商店通知]]></title>
      <link>https://www.360magento.com/blog/enable-disable-demo-store-notice-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_EnableDisable_Demo_Store_Notice_in_Magento_2">在 Magento 2 中启用/禁用演示商店通知的步骤：</span></h2>
<p><span>第 1 步：</span><span>从</span><span>Admin Dashboard</span><span>转到</span><span>Content &gt; Configuration &gt; Design&nbsp;</span><span>。</span></p>
<p><span>第二步：找到要配置的store view，在</span><span><span>Edit模式</span></span><span>下打开</span><span>。</span><span><span></span></span><span><span></span></span></p>
<p><span>第 3 步：在</span><span><span>Other Settings选项</span></span><span>下</span><span><span><span>，展开</span></span><span><span>HTML Head&nbsp;</span></span><span><span>。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第 4 步：</span><span>找到</span><span>Display Demo Store Notice</span><span>字段并将其设置为</span><span>Yes&nbsp;</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/demo-store-notice-config.png" /></span></p>
<p></p>
<p><span>然后单击</span><span>保存配置</span><span><span><span>并清除 Magento 缓存。</span><span>现在，检查商店前端，演示通知将显示如下：</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/demo-store-notice-1.png" /></span></p>]]></description>
      <pubDate>Sat, 24 Jun 2023 07:56:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中为客户设置密码选项]]></title>
      <link>https://www.360magento.com/blog/set-password-options-for-customers-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Set_Password_Options_for_Customers_in_Magento_2">在 Magento 2 中为客户设置密码选项的步骤：</span></h2>
<p><span>导航到</span><span>Stores &gt; Settings &gt; Configuration ，然后在</span><span><span>Customers 选项</span></span><span>下</span><span><span><span>选择</span></span><span><span>Customer Configuration</span></span><span><span>选项。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>探索</span><span>密码选项选项</span><span>卡，</span></p>
<p><span>忘记电子邮件模板：</span><span>根据您希望发送给客户的模板选择模板，以防他们忘记帐户密码。</span></p>
<p><span>提醒电子邮件模板：</span><span>选择用于将其帐户密码的密码提示共享给您的客户的模板。</span></p>
<p><span>重置密码模板：</span><span>根据您向商店客户发送的愿望选择模板，其中包含重置密码的链接。</span></p>
<p><span>密码模板 电子邮件发件人：</span><span>选择发送忘记和提醒电子邮件通知时将显示的电子邮件发件人姓名。</span></p>
<p><span>恢复链接有效期（小时）：</span><span>管理员可以从这里轻松设置密码恢复/重置链接的有效期。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Config_reset_password.png" /></span></p>]]></description>
      <pubDate>Fri, 23 Jun 2023 07:54:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加搜索词]]></title>
      <link>https://www.360magento.com/blog/add-search-terms-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Search_Terms_in_Magento_2">在 Magento 2 中添加搜索词的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到管理员帐户，然后导航至</span><span>营销 &gt; 搜索引擎优化和搜索 &gt; 搜索词</span><span>。</span></p>
<p><span>第 2 步：</span><span>现在，单击</span><span>&ldquo;添加新搜索词&rdquo;</span><span>并添加详细信息</span></p>
<ul>
<li><span>搜索查询</span><span>&ndash; 输入要添加到列表中的搜索查询词。</span></li>
<li><span>商店</span><span>&ndash; 如果您有多家商店，请选择商店以添加搜索词。</span></li>
<li><span>重定向 URL&nbsp;</span><span>&ndash; 当用户输入搜索查询时，输入 URL 以将客户重定向到登陆页面或产品页面，或任何类别页面。</span></li>
<li><span>在建议的术语中显示</span><span>- 当任何搜索未返回结果时，选择是将其设置为建议的术语。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/search-term.png" /></span></p>
<p></p>
<p><span>第 3 步：</span><span>最后，点击</span><span>保存搜索</span><span>。</span></p>
<h2><span id="How_to_Edit_Search_Term_in_Magento_2">如何在 Magento 2 中编辑搜索词？</span></h2>
<ul>
<li><span>从搜索词网格中，选择您要修改的词并在</span><span>编辑</span><span>模式下将其打开。</span></li>
<li><span>进行适当的更改。</span></li>
<li><span>最后，</span><span>保存搜索</span><span>。</span></li>
</ul>
<h2><span id="How_to_Delete_Search_Term_in_Magento_2">如何删除 Magento 2 中的搜索词？</span></h2>
<ul>
<li><span>从搜索词网格中，选择要删除的词。</span></li>
<li><span>从</span><span>&ldquo;操作&rdquo;</span><span>选项卡中选择</span><span>&ldquo;删除&rdquo;&nbsp;</span><span>。</span></li>
<li><span>最后，</span><span>提交</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/delete-search-term.png" /></span></p>]]></description>
      <pubDate>Thu, 22 Jun 2023 07:52:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[加速您的 Magento 2 商店的 7 个行之有效的步骤]]></title>
      <link>https://www.360magento.com/blog/speed-up-your-magento-2-store/</link>
      <description><![CDATA[<h2><span id="7_Proven_Steps_to_Speed_up_Your_Magento_2_Store">加速您的 Magento 2 商店的 7 个行之有效的步骤</span></h2>
<h3><span id="1_Install_CDN_Content_Delivery_Network"><span><span><span>1.安装CDN（内容分发网络）</span></span></span><span></span></span></h3>
<p><span><span><span>内容交付网络是一种允许存储文件和页面的程序。</span><span>使用CDN，可以大大提高页面加载速度。</span><span>通过为您的 Magento 2 商店设置 CDN，CSS 文件、图像、Javascripts 文件可以更快地交付给用户。</span></span></span></p>
<p><span><span><span>由于 Magento 默认支持 CDN，因此您无需为其安装任何第三方扩展。</span><span>以下是为 Magento 2 商店设置 CDN 的步骤。</span></span></span></p>
<ul>
<li><span>从 Magento 管理面板，转到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>接下来，展开</span><span>General</span><span>选项卡并选择</span><span>Web&nbsp;</span><span>。</span></li>
<li><span>现在，扩大</span><span>Base URLs (Secure)</span><span>选项并配置 URL 详细信息。</span></li>
</ul>
<h3><span id="2_Enable_Varnish_Cache"><span><span><span>2.启用Varnish&nbsp;缓存</span></span></span><span></span></span></h3>
<p><span><span><span>最小化服务器负载有助于提高网站速度。</span><span>缓存可以帮助您实现这一点。</span><span>启用清漆缓存可以使您的 Magento 2 存储速度更快。</span></span></span></p>
<p><span>以下是为 Magento 2 商店启用 Varnish Cache 的步骤。</span></p>
<ul>
<li><span>从 Magento 管理面板，转到</span><span>System &gt; Tools &gt; Cache Management&nbsp;</span><span>。</span></li>
<li><span>选择所有</span><span>字段并</span><span>提交</span><span>。</span></li>
</ul>
<h3><span id="3_Merge_and_Minify_JSCSS"><span><span><span>3. 合并和缩小 JS/CSS</span></span></span><span></span></span></h3>
<p><span><span><span>JavaScript 和 CSS 文件是导致 Magento 2 商店加载速度慢的另一个原因。</span><span>Magento 2 提供合并和缩小 JS 和 CSS 文件以增强您的 Magento 商店性能。</span></span></span></p>
<p><span>合并和缩小 JS：</span></p>
<ul>
<li><span>在管理面板中，转到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>展开</span><span>高级</span><span>并选择</span><span>开发人员</span><span>。</span></li>
<li><span>现在，扩大</span><span>JavaScript 设置</span><span>选项。</span></li>
<li><span>启用</span><span>合并 JavaScript 文件</span><span>和</span><span>缩小 JavaScript 文件</span><span>。</span></li>
</ul>
<p><span>合并和缩小 CSS：</span></p>
<ul>
<li><span>在管理面板中，转到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>展开</span><span>高级</span><span>并选择</span><span>开发人员</span><span>。</span></li>
<li><span>现在，扩大</span><span>CSS 设置</span><span>选项。</span></li>
<li><span>启用</span><span>合并 CSS 文件</span><span>和</span><span>缩小 CSS 文件</span><span>。</span></li>
</ul>
<p></p>
<p>4.升级到最新版本的Magento 2<br />不可忽视的方法之一是优化您的 Magento 2 存储速度，即更新到最新版本。高级功能和增强的安全性可以加快 Magento 2 商店的性能。强烈建议升级到最新的 Magento 2 版本以提高商店的速度。利用Magento 年度升级服务，让您的 Magento 2 商店升级过程毫无压力。</p>
<p></p>
<p>5.启用平面类别和产品<br />您的商店中有大量产品，数据库需要很长时间才能读取。这会减慢您的 Magento 2 存储速度。要解决此问题，您可以启用 Flat Category and Product 选项。</p>
<p>以下是启用平面类别和产品的步骤</p>
<p>在管理面板中，转到Stores &gt; Settings &gt; Configuration 。<br />展开目录并选择目录。<br />放大店面选项。<br />启用使用平面目录类别和使用平面目录产品字段。</p>
<p>6. 禁用 JavaScript 捆绑<br />如果启用了 HTTP/2，JavaScript 捆绑就没有用了。JS 捆绑的规模很大，可能会对您的 Magento 2 商店的速度产生不利影响。以下是禁用 JavaScript 捆绑的步骤。</p>
<p>在管理面板中，转到Stores &gt; Settings &gt; Configuration 。<br />展开高级并选择开发人员。<br />现在，扩大JavaScript 设置选项。<br />将Enable JavaScript Bundling字段设置为No 。</p>
<p></p>
<p>7.优化图片<br />很明显，您的网站上有很多产品图片。大尺寸图像需要更长的时间来加载，从而降低网站性能。因此，有必要对图像进行适当的优化。压缩图像将有助于提高 Magento 2 商店的速度。在将图像上传到您的站点之前，使用优化工具压缩图像。</p>]]></description>
      <pubDate>Wed, 21 Jun 2023 06:42:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 HTML 标签中添加自定义代码]]></title>
      <link>https://www.360magento.com/blog/add-custom-code-in-magento-2-head-html/</link>
      <description><![CDATA[<p><span><span><span>在 Magento 2 &lt;head&gt; HTML 标签中添加自定义代码的</span></span><span><span>步骤：</span></span></span><span><span></span></span></p>
<p><span>第 1 步：</span><span>转到 Magento 管理面板并导航到内容 &gt; 设计 &gt; 配置。</span></p>
<p><span>第 2 步：</span><span>选择商店视图以更改标题标签或选择全局以更改每个商店视图的标题标签。</span></p>
<p><span>第 3 步：</span><span>放大</span><span>HTML 标题</span><span><span><span>部分。</span><span>将您的自定义代码添加到</span></span></span><span>脚本和样式表</span><span>字段。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Add-Code-in-Head-Tag.png" /></span></p>
<p><span><span>第 4 步：</span><span>最后，</span><span>保存配置</span><span><span><span>。</span><span>转到缓存管理和</span></span></span><span>刷新 Magento 缓存</span><span>。</span></span></p>]]></description>
      <pubDate>Tue, 20 Jun 2023 08:39:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中以编程方式创建可配置产品]]></title>
      <link>https://www.360magento.com/blog/create-configurable-product-programmatically-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_create_configurable_product_programmatically_in_Magento_2">在 Magento 2 中以编程方式创建可配置产品的步骤：</span></h2>
<p><span><span><span><span>第一步：</span></span></span><span><span>首先在Magento根目录下创建一个</span></span><span><span><span>configurable_product.php</span></span></span><span><span>文件，添加如下代码</span></span></span></p>
<p></p>
<pre>&lt;?php
use Magento\Framework\AppInterface;
try {
    require_once __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
    echo 'Autoload error: ' . $e-&gt;getMessage();
    exit(1);
}
try {
    $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
    $objectManager = $bootstrap-&gt;getObjectManager();
    $appState = $objectManager-&gt;get('Magento\Framework\App\State');
    $appState-&gt;setAreaCode('frontend');

    $configurableproduct = $objectManager-&gt;create('Magento\Catalog\Model\Product');
    $configurableproduct-&gt;setSku("configurable_sku"); // set Your SKU
    $configurableproduct-&gt;setName("Configurable Name"); // set Your Configurable Name
    $configurableproduct-&gt;setAttributeSetId(4); // set attribute id
    $configurableproduct-&gt;setStatus(1); // status enabled/disabled 1/0
    $configurableproduct-&gt;setTypeId('configurable'); // type of product (simple/virtual/downloadable/configurable)
    $configurableproduct-&gt;setVisibility(4);  // visibility of product (Not Visible Individually (1) / Catalog (2)/ Search (3)/ Catalog, Search(4))
    $configurableproduct-&gt;setPrice(0);
    $configurableproduct-&gt;setTaxClassId(0); // Tax class ID
    $configurableproduct-&gt;setWebsiteIds(array(1)); // set website Id
    $category_id = array(2, 3);
    $configurableproduct-&gt;setCategoryIds($category_id);
    $configurableproduct-&gt;setStockData(array(
            'use_config_manage_stock' =&gt; 0,
            'manage_stock' =&gt; 1,
            'is_in_stock' =&gt; 1,
        )
    );
    $configurableattributesdata = $configurableproduct-&gt;getTypeInstance()-&gt;getConfigurableAttributesAsArray($configurableproduct);
    $configurableproduct-&gt;setCanSaveConfigurableAttributes(true);
    $configurableproduct-&gt;setConfigurableAttributesData($configurableattributesdata);
    $configurableproductsdata = array();
    $configurableproduct-&gt;setConfigurableProductsData($configurableproductsdata);
    try {
        $configurableproduct-&gt;save();
    } catch (Exception $ex) {
        echo '</pre>
<pre>';
        print_r($ex-&gt;getMessage());
        exit(1);
    }
    $product_id = $configurableproduct-&gt;getId();
    $associatedproductids = array(1,9);
    try {
        $configurableproduct_load = $objectManager-&gt;create('Magento\Catalog\Model\Product')-&gt;load($product_id);
        $configurableproduct_load-&gt;setAssociatedProductIds($associatedproductids);
        $configurableproduct_load-&gt;setCanSaveConfigurableAttributes(true);
        $configurableproduct_load-&gt;save();
        echo "configurable product save successfully";
    } catch (Exception $e) {
        echo "</pre>
<pre>";
        print_r($e-&gt;getMessage());
        exit(1);
    }
}catch (Exception $e) {
    echo "</pre>
<pre>";
    print_r($e-&gt;getMessage());
    exit(1);
}
</pre>
<pre><span>第 2 步：</span><span>完成上述步骤后，您需要运行下面给出的 URL 来创建可配置的产品。</span><br />https://yourdomain.com/configurable_product.php</pre>]]></description>
      <pubDate>Mon, 19 Jun 2023 07:36:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中以编程方式创建简单产品]]></title>
      <link>https://www.360magento.com/blog/create-simple-product-programmatically-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_Simple_Product_Programmatically_in_Magento_2">在 Magento 2 中以编程方式创建简单产品的步骤：</span></h2>
<p><span>第 1 步：首先，</span><span>在 Magento 根目录中</span><span>创建一个</span><span>simple_product.php文件并添加以下给定代码。</span></p>
<pre>&lt;?php

use Magento\Framework\AppInterface;

try {

&nbsp;&nbsp;&nbsp;&nbsp;require_once __DIR__ . '/app/bootstrap.php';

} catch (\Exception $e) {

&nbsp;&nbsp;&nbsp;&nbsp;echo 'Autoload error: ' . $e-&gt;getMessage();

&nbsp;&nbsp;&nbsp;&nbsp;exit(1);

}

try{

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);

$objectManager = $bootstrap-&gt;getObjectManager();


$appState = $objectManager-&gt;get('Magento\Framework\App\State');

$appState-&gt;setAreaCode('frontend');


$product = $objectManager-&gt;create('Magento\Catalog\Model\Product');

$sku = 'your_sku';&nbsp; // set your sku

$product-&gt;setSku($sku);

$product-&gt;setName('Simple Product Name'); // set your Product Name of Product

$product-&gt;setAttributeSetId(4); // set attribute id

$product-&gt;setStatus(1); // status enabled/disabled 1/0

$product-&gt;setWeight(1); // set weight of product

$product-&gt;setVisibility(4); // visibility of product (Not Visible Individually (1) / Catalog (2)/ Search (3)/ Catalog, Search(4))

$product-&gt;setWebsiteIds(array(1));

$product-&gt;setTaxClassId(0); // Tax class ID

$product-&gt;setTypeId('simple'); // type of product (simple/virtual/downloadable/configurable)

$product-&gt;setPrice(100); // set price of product

$product-&gt;setStockData(

      array(

      'use_config_manage_stock' =&gt; 0,

      'manage_stock' =&gt; 1,

      'is_in_stock' =&gt; 1,

      'qty' =&gt; 100
      )
    );

$product-&gt;save();

$categoryIds = array('2','3'); // assign your product to category using Category Id

&nbsp;&nbsp;&nbsp;&nbsp;$category = $objectManager-&gt;get('Magento\Catalog\Api\CategoryLinkManagementInterface');

$category-&gt;assignProductToCategories($sku, $categoryIds);

echo "$sku Product Created Successfully ";

}

catch(\Exception $e){

print_r($e-&gt;getMessage());

}<br /><br /><br /></pre>
<p>第 2 步：完成上述步骤后，您需要运行下面给出的 URL 来创建一个简单的产品。</p>
<p>https://yourdomain.com/simple_product.php</p>]]></description>
      <pubDate>Sun, 18 Jun 2023 07:32:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中导入和导出客户]]></title>
      <link>https://www.360magento.com/blog/how-to-import-and-export-customers-in-magento/</link>
      <description><![CDATA[<p><span>大多数情况下，对于所有在线商店所有者而言，客户详细信息管理是管理所有订单和改进其商店营销策略的最关键任务之一。&nbsp;</span></p>
<p><span><span><span>如果您正在在线转变您的业务，那么您将需要将所有常规客户的数据导入您的商店。</span><span>为此，Magento 提供了通过将 CSV 文件上传到您的商店来导入数据的选项。&nbsp;</span></span></span></p>
<p><span><span><span>同样，如果您需要检查商店列表或需要新客户列表，那么您只需将其以 excel 文件的形式从您的 Magento 2 商店中导出即可。</span><span>为此，让我们学习如何在 Magento 2 中导入和导出客户</span></span></span></p>
<h2><span id="Steps_to_Import_and_Export_Customers_in_Magento_2">在 Magento 2 中导入和导出客户的步骤：</span></h2>
<h3><span id="Export_Customers_in_Magento_2">在 Magento 2 中导出客户：</span></h3>
<p><span>转到</span><span>系统 &gt; 数据传输 &gt; 导出</span><span>并在</span><span>导出设置下方</span><span>选择</span><span>实体类型中的</span><span>客户主文件</span><span><span></span></span></p>
<p><span>默认情况下，</span><span>导出文件的格式</span><span>为</span><span>CSV&nbsp;</span><span>。</span></p>
<p><span>在</span><span>实体属性中，单击选择您希望从要</span><span><span>导出的</span></span><span>CSV 文件中删除的属性</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/export.png" /></span></p>
<p><span>然后点击</span><span>继续</span><span>按钮。</span></p>
<p><span>您将获得</span><span>包含所有客户信息的</span><span>CSV 文件。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/csv-file.png" /></span></p>
<p></p>
<h3><span id="Import_Customers_in_Magento_2">在 Magento 2 中导入客户：</span></h3>
<p><span><span></span></span><span><span><span>首先，从管理面板侧栏</span></span><span><span>转到</span></span></span><span>系统 &gt; 数据传输 &gt; 导入，然后在实体类型下方选择</span><span><span>客户主文件。</span></span><span><span></span></span><span><span></span></span></p>
<p><span>在行为中选择</span><span>添加/更新复杂数据</span><span>选项&nbsp;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/import.png" /></span></p>
<p><span><span>导航至</span><span>选择要导入的文件</span><span>并上传您的文件。</span></span></p>]]></description>
      <pubDate>Sat, 17 Jun 2023 06:30:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中扩展布局]]></title>
      <link>https://www.360magento.com/blog/extend-a-layout-in-magento/</link>
      <description><![CDATA[<p><span>在这个 Magento 教程中，我将解释如何在 Magento 2 中扩展布局。</span></p>
<p><span><span><span>布局表示网页的结构。</span><span>建议不要更改 Magento 模块和主题布局，以确保稳定性和保护您的自定义设置，以免它们在升级过程中被删除。</span><span>要进行更改，您可以在 Magento 2 的自定义主题中扩展布局文件。与其复制大量页面布局或页面配置代码而不是进行更改，扩展布局文件是一个不错的选择。</span></span></span></p>
<p><span></span></p>
<h2><span id="Steps_to_Extend_a_Layout_in_Magento_2">在 Magento 2 中扩展布局的步骤：</span></h2>
<p><span>第一步：</span><span>创建主题扩展文件&nbsp;</span></p>
<p><span>app/design/frontend/Themes/Yourtheme/Magento_Catalog/layout/catalog_product_view.xml</span></p>
<p><span>到&nbsp;</span></p>
<p><span><span>vendor</span>/magento/module-catalog/view/frontend/layout/catalog_product_view.xml</span></p>
<p><span><span>Example :</span></span></p>
<p></p>
<p><img src="https://www.360magento.com/media/wysiwyg/as42826_2x.png" /></p>]]></description>
      <pubDate>Fri, 16 Jun 2023 06:27:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：如何从命令行刷新缓存和重新索引]]></title>
      <link>https://www.360magento.com/blog/magento-2-flush-cache-and-reindex-from-command-line/</link>
      <description><![CDATA[<h2><span id="How_to_Flush_the_Cache_and_Reindex_from_Command_Line_in_Magento_2">如何从 Magento 2 中的命令行刷新缓存和重新索引？</span></h2>
<p><span>运行以下命令刷新 Magento 缓存存储：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate" id="urvanov-syntax-highlighter-64865e806160c870635293" data-settings=" minimize scroll-mouseover">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay">
<div class="crayon-tools">
<div class="crayon-button urvanov-syntax-highlighter-popup-button" title="Open Code In New Window">
<div class="urvanov-syntax-highlighter-button-icon"></div>
</div>
</div>
</div>
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-64865e806160c870635293-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-64865e806160c870635293-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">cache</span><span class="crayon-o">:</span><span class="crayon-v">clean</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行以下命令刷新 Magento 缓存：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate" id="urvanov-syntax-highlighter-64865e8061614311524119" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-64865e8061614311524119-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-64865e8061614311524119-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">cache</span><span class="crayon-o">:</span><span class="crayon-v">flush</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行以下命令重新索引 Magento 站点：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate" id="urvanov-syntax-highlighter-64865e8061616313747032" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-64865e8061616313747032-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-64865e8061616313747032-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-v">reindex</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>运行以下命令以重新索引特定 ID：</span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate" id="urvanov-syntax-highlighter-64865e8061617231190475" data-settings=" minimize scroll-mouseover">
<div class="urvanov-syntax-highlighter-plain-wrap"></div>
<div class="urvanov-syntax-highlighter-main">
<table class="crayon-table">
<tbody>
<tr class="urvanov-syntax-highlighter-row">
<td class="crayon-nums " data-settings="show">
<div class="urvanov-syntax-highlighter-nums-content">
<div class="crayon-num" data-line="urvanov-syntax-highlighter-64865e8061617231190475-1">1</div>
</div>
</td>
<td class="urvanov-syntax-highlighter-code">
<div class="crayon-pre">
<div class="crayon-line" id="urvanov-syntax-highlighter-64865e8061617231190475-1"><span class="crayon-e">php </span><span class="crayon-v">bin</span><span class="crayon-o">/</span><span class="crayon-e">magento </span><span class="crayon-v">indexer</span><span class="crayon-o">:</span><span class="crayon-e">reindex </span><span class="crayon-v">catalog_category_product</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>]]></description>
      <pubDate>Thu, 15 Jun 2023 06:24:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加顶部链接]]></title>
      <link>https://www.360magento.com/blog/add-top-link-in-magento/</link>
      <description><![CDATA[<p><span>今天的学习模块将学习如何在 Magento 2 中显示模板 phtml 文件中的 Cms 静态块。所以，不浪费时间，让我们开始吧。</span></p>
<p><span><span><span>您网站的页眉可能是显示重要链接和页面的最佳位置。</span><span>一些链接已经存储在 Magento 2 中，但在您的 Magento 2 网站的首页添加顶部链接会显示一些有用的链接。</span><span>标题链接和顶部链接之间的主要区别在于，</span></span></span></p>
<p><span><span><span>&nbsp;Magento 2 标题链接显示访客和登录客户。</span><span>但顶部链接仅显示已登录的客户。</span></span></span></p>
<p><span>建立顶级链接还有助于鼓励客户购买越来越多的愿望。</span></p>
<p></p>
<h2><span id="How_to_Add_Top_Link_in_Magento_2">如何在 Magento 2 中添加顶部链接</span></h2>
<p><span>第一步：</span><span>在路径下&nbsp;</span><span>创建</span><span>default.xml文件。</span><span><span></span></span></p>
<p><span>app\code\Vendor\Extension\view\frontend\layout\default.xml</span></p>
<p><span>并粘贴下面的代码&nbsp;&nbsp;</span></p>
<p>&lt;?xml version="1.0"?&gt;<br />&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;<br />&lt;body&gt;<br />&lt;referenceBlock name="header.links"&gt;<br />&lt;block class="Magento\Framework\View\Element\Html\Link" name="custom-top-link"&gt;<br /> &lt;arguments&gt;<br /> &lt;argument name="label" xsi:type="string" translate="true"&gt;Custom Top Link Label&lt;/argument&gt;<br /> &lt;argument name="path" xsi:type="string" translate="true"&gt;custom_path&lt;/argument&gt;<br /> &lt;/arguments&gt;<br /> &lt;/block&gt;<br /> &lt;/referenceBlock&gt;<br />&lt;/body&gt;<br />&lt;/page&gt;</p>
<p></p>]]></description>
      <pubDate>Wed, 14 Jun 2023 07:23:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示来自模板 phtml 文件的 Cms 静态块]]></title>
      <link>https://www.360magento.com/blog/cms-static-block-from-template-phtml-file-in-magento/</link>
      <description><![CDATA[<p><span><span><span>CMS 静态块是向消费者显示各种信息的绝佳方式。</span><span>CMS 静态块有助于吸引更多消费者对特定产品的关注，并使您的 Magento 2 商店或网站更具吸引力。</span><span>您几乎可以在 Magento 2 网站和 Magento 2 商店的每个页面上显示 CMS 静态块。</span></span></span></p>
<p><span><span><span>如果您不想在配置 CMS 静态块上花费太多时间，那么您可以在 phtml 中或使用 XML 文件布局调用 CMS 静态块。</span><span>让我们一步一步来</span></span></span><span>。</span></p>
<h2><span id="Steps_to_Show_Cms_Static_Block_From_Template_phtml_File_in_Magento_2"><span><span><span>在 Magento 2 中从模板 phtml 文件显示 Cms 静态块的</span></span><span><span>步骤</span></span></span><span><span></span></span></span></h2>
<p><span><span><span><span>第 1 步：</span></span></span><span><span>在显示静态块时在 phtml 文件中添加以下代码</span></span></span></p>
<pre>        
 echo $this---&gt;getLayout()
        -&gt;createBlock(\Magento\Cms\Block\Block::class)
        -&gt;setBlockId('block_identifier_here')
	-&gt;toHtml();
	//change  block_identifier_here with Your CMS Block Identifier</pre>
<pre><br /><br /><span>第 2 步</span><span>：在您的 CMS 页面中添加以下代码 CMS 静态块。</span><br /><br /></pre>]]></description>
      <pubDate>Tue, 13 Jun 2023 07:20:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用 Canonical 元标记]]></title>
      <link>https://www.360magento.com/blog/enable-canonical-meta-tag-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Enable_Canonical_Meta_Tag_in_Magento_2">在 Magento 2 中启用规范元标记的步骤</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>管理面板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航到</span><span>商店 &gt;</span>&nbsp;<span>设置 &gt; 配置。</span></p>
<p><span>第 3 步：</span><span>单击</span><span><span><span>位于左侧面板中</span></span><span><span>目录部分</span></span><span><span>下的</span></span></span><span>目录。</span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第 4 步：</span><span>展开</span><span>搜索引擎优化</span><span>部分并执行以下操作。</span></p>
<p><a href="https://magecomp.com/blog/wp-content/uploads/2021/06/canonical-tag-configuration-1.png" data-wpel-link="internal"></a></p>
<p><img src="https://www.360magento.com/media/wysiwyg/canonical-tag-configuration-1.png" /></p>
<p></p>
<p><span>现在，看一下最后 2 个字段并根据您的要求从下面提到的执行操作。</span></p>
<ul>
<li><span><span></span></span><span><span><span>如果您希望搜索引擎只记录类别页面而不记录产品页面，请在类别下拉菜单</span></span><span><span>中</span></span><span><span>选择</span></span><span><span>是</span></span><span><span>选项，在</span></span><span><span>产品</span></span><span><span>下拉</span></span></span><span>菜单</span><span>中选择否。</span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></li>
<li><span><span></span></span><span>如果您希望搜索引擎只记录产品页面而不记录类别页面，请在类别下拉菜单中选择否选项并</span><span>在</span><span>产品</span><span>下拉</span><span>菜单</span><span><span><span>中</span></span><span><span>选择</span></span><span><span>是</span></span></span><span>。</span><span><span></span></span><span><span></span></span><span><span></span></span></li>
<li><span>如果您希望类别和产品页面都记录在搜索引擎中，请</span><span>在两个字段中选择</span><span>是。</span><span><span></span></span></li>
</ul>
<p><span>第 5 步：</span><span>完成所需的选择后，单击</span><span>&ldquo;保存配置&rdquo;&nbsp;</span><span>。</span></p>]]></description>
      <pubDate>Mon, 12 Jun 2023 08:10:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 优惠券代码生成指南]]></title>
      <link>https://www.360magento.com/blog/create-coupon-codes-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Methods_to_Create_Coupon_Codes_in_Magento_2">在 Magento 2 中创建优惠券代码的方法：</span></h2>
<h3><span id="Method_1_Create_a_Specific_Coupon">方法 1：创建特定优惠券</span></h3>
<ul>
<li>创建购物车价格规则</li>
<li><span>接下来，转到</span><span>营销 &gt; 促销 &gt; 购物车价格规则</span></li>
<li><span><span></span></span><span>在Rule Information</span><span>下</span><span>，您将看到</span><span>Coupon</span><span>字段，将其设置为</span><span>Specific Coupon&nbsp;</span><span>。</span></li>
<li><span>输入</span><span>优惠券代码</span><span>。</span></li>
<li><span>要设置优惠券使用次数限制，请将其输入</span><span>Uses Per Coupon</span><span>和</span><span>Uses Per Customer&nbsp;</span><span><span><span>。</span><span>为了不受限制地使用，请将这些字段留空。</span></span></span></li>
<li><span><span></span></span><span>在从</span><span>和</span><span>到字段</span><span>中输入优惠券的使用期限</span><span>。</span></li>
<li><span>单击</span><span>保存</span><span>并在前端检查优惠券的工作情况。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/specific-coupon.png" /></span></p>
<p></p>
<h3><span id="Method_2_Create_Bulk_Coupons">方法 2：创建批量优惠券</span></h3>
<ul>
<li>创建购物车价格规则</li>
<li><span>接下来，转到</span><span>营销 &gt; 促销 &gt; 购物车价格规则</span></li>
<li><span>在</span><span>Rule Information下</span><span>，滚动到</span><span>Coupon Code</span><span>字段并勾选</span><span>Use Auto Generation</span><span>复选框。</span></li>
<li><span>要设置优惠券使用次数限制，请将其输入</span><span>Uses Per Customer&nbsp;</span><span><span><span>。</span><span>要无限使用，请将此字段留空。<br /><img src="https://www.360magento.com/media/wysiwyg/auto-generation.png" /><br /></span></span></span></li>
</ul>
<ul>
<li><span>现在，放大</span><span>&ldquo;管理优惠券代码&rdquo;</span><span>选项卡。</span></li>
<li><span>在</span><span>优惠券数量</span><span>字段中，输入要生成的优惠券总数。</span></li>
<li><span>输入</span><span>代码长度</span><span><span><span>。</span><span>它不包括前缀、后缀和分隔符。</span></span></span></li>
<li><span><span></span></span><span>将代码格式</span><span>设置</span><span>为字母数字、字母或数字。</span></li>
<li><span>输入</span><span>添加在代码开头的</span><span>代码前缀。</span><span>该字段是可选的。</span></li>
<li><span>输入</span><span>添加在代码末尾的代码</span><span>后缀。</span><span>该字段是可选的。</span></li>
<li><span>在</span><span>Dash Every X Characters</span><span><span><span>字段中，输入破折号将作为分隔符出现在代码中的数字。</span><span>它使代码更易于阅读。</span><span>例如，如果设置为 4，代码可能看起来像 XXXX-XXXX-XXXX。&nbsp;</span></span></span></li>
<li><span>最后点击</span><span>生成</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/manage-coupon-codes-1_1_.png" /></span></p>]]></description>
      <pubDate>Sun, 11 Jun 2023 08:06:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改域名 ]]></title>
      <link>https://www.360magento.com/blog/change-domain-name-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_Domain_Name_in_Magento_2">在 Magento 2 中更改域名的步骤&nbsp;</span></h2>
<p><span>第 1 步：</span><span><span><span><span>登录</span></span></span><span><span>到您的 Magento 2 网站的管理面板。</span></span></span></p>
<p><span>第 2 步：</span><span>单击</span><span>管理侧栏中的</span><span>Stores &gt; Configuration 。</span></p>
<p><span>第 3 步：</span><span>然后，从导航菜单中转到</span><span>&ldquo;常规&rdquo;&gt;&ldquo;Web&rdquo;</span><span>选项卡。</span></p>
<p><span>第 4 步：</span><span>扩展</span><span>基本 URL</span><span>部分。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Base-URL-2.png" /></span></p>
<p><span>第 5 步：</span><span><span><span>在</span></span><span><span><span>基本 URL</span></span></span><span><span>字段中，将您的新 URL 替换为当前 URL。</span><span>例如，如果您当前的 Magento 2 商店域是 auroracreation.com，并且您希望将其更改为 xyz.com，那么您可以从此处进行更改。</span></span></span></p>
<p><span>第 6 步：</span><span>以同样的方式，扩展</span><span>Base URLs (Secure)部分并更改</span><span><span>Secure Base URL字段</span></span><span>中的域名</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Base-URL-Secure-1-1.png" /></span></p>]]></description>
      <pubDate>Sat, 10 Jun 2023 08:04:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何禁用 Magento 2 的比较产品]]></title>
      <link>https://www.360magento.com/blog/how-to-disable-compare-products-for-magento/</link>
      <description><![CDATA[<h2><span id="What_are_Compare_Products">什么是比较产品？</span></h2>
<p><span><span><span>比较产品功能使我们能够向用户显示类别和特性相似的两种或多种产品的详细信息。</span><span>两个或多个产品彼此相邻放置，以向最终用户展示它们之间的明确隔离。</span><span>这种比较产品的功能是内置的。&nbsp;</span></span></span></p>
<p><span><span><span>因此，如果您有一家销售电器、软件或机器的商店，那么这可能非常适合您的业务，因为客户需要比较两种产品的功能和价格范围。</span><span>另一方面，如果您的商店经营服装和配饰，那么您可能不需要此功能，因为购买主要取决于个人的喜好和尺码的可用性。</span></span></span></p>
<p><span>让我们进入在 Magento 2 中禁用比较产品的方法</span></p>
<h2><span id="Method_to_Disable_Compare_Products_for_Magento_2">禁用 Magento 2 比较产品的方法</span></h2>
<p><span><span></span></span><span><span><span>在下面给定的路径中</span></span><span><span>创建一个</span></span></span><span>default.xml文件：</span><span><span></span></span></p>
<p><span>app\design\frontend\Themes\Yourtheme\Magento_Catalog\layout\</span></p>
<p><span>现在，添加下面给出的代码：</span></p>
<p>&lt;referenceBlock name="catalog.compare.link" remove="true" /&gt;</p>
<p>&lt;referenceBlock name="catalog.compare.sidebar" remove="true"/&gt;</p>
<p>&lt;referenceBlock name="catalogsearch.product.addto.compare" remove="true"/&gt;</p>
<p>&lt;referenceBlock name="category.product.addto.compare" remove="true"/&gt;</p>
<p>&lt;referenceBlock name="crosssell.product.addto.compare" remove="true" /&gt;</p>
<p>&lt;referenceBlock name="related.product.addto.compare" remove="true" /&gt;</p>
<p>&lt;referenceBlock name="upsell.product.addto.compare" remove="true" /&gt;</p>
<p>&lt;referenceBlock name="view.addto.compare" remove="true" /&gt;</p>]]></description>
      <pubDate>Fri, 09 Jun 2023 09:01:08 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何检查 Magento 2 中是否存在具有 SKU 的产品]]></title>
      <link>https://www.360magento.com/blog/check-if-product-with-sku-exists-magento/</link>
      <description><![CDATA[<p>第 1 步：在下面给定的路径中创建一个名为Data.php的文件。</p>
<p><span>app\code\Vendor\Extension\Helper\</span></p>
<pre>&lt;?php

namespace Vendor\Extension\Helper;

use Magento\Framework\App\Helper\Context;

use Magento\Catalog\Model\Product;

use Magento\Framework\App\Helper\AbstractHelper;

class Data extends AbstractHelper

{

&nbsp;&nbsp;&nbsp;&nbsp;protected $product;

&nbsp;&nbsp;&nbsp;&nbsp;public function __construct(Context $context,Product $product)

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;product = $product;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct($context);

&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;public function Checkproductexist($product_sku)

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($this-&gt;product-&gt;getIdBySku($product_sku))

&nbsp; &nbsp; &nbsp; $this-&gt;_logger-&gt;info('Product is Exist');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp; $this-&gt;_logger-&gt;info('Product is not Exist');

&nbsp;&nbsp;&nbsp;&nbsp;}

}
</pre>
<p>第 2 步：接下来，在模块 phtml文件中添加以下代码：</p>
<p>&lt;?php</p>
<p>$helper = $this-&gt;helper('Vendor\Extension\Helper\Data');</p>
<p>$product_sku = "product_sku"; // add your sku here</p>
<p>$helper-&gt;Checkproductexist($product_sku);</p>
<p>?&gt;<br /><span>添加以上代码后，在system.log（var/log/system.log）文件</span><span><span>中查看产品是否存在</span></span><span>。</span></p>]]></description>
      <pubDate>Thu, 08 Jun 2023 07:58:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置分级价格]]></title>
      <link>https://www.360magento.com/blog/setup-tier-price-magento-2/</link>
      <description><![CDATA[<p><span><span><span>分级价格意味着它允许您以最优惠的价格以折扣价提供所有或特定产品。</span><span>可以在目录或产品页面上将此折扣视为一条短消息。</span><span>例如，&ldquo;以每件 5.00 美元的价格购买 20 件并节省 29%&rdquo;。</span></span></span></p>
<p><span><span><span>Magento 2 中的层级价格基本上是根据购买产品的数量设置的折扣价。</span><span>达到每个级别后，买家可以使用新的更好的价格。</span></span></span></p>
<p><span><span><span>设置分级价格是一种非常有效的促销策略，可以逐步推动您商店中的更多购买。</span><span>根据您的商店计划，在特定商店视图、客户组或共享目录上设置等级价格条件，让客户在结账时获得折扣。</span></span></span></p>
<h2><span id="Steps_to_Setup_Tier_Price_in_Magento_2"><span><span><span>在 Magento 2 中设置分级价格的步骤</span></span></span><span></span></span></h2>
<ul>
<li><span>登录到 Magento 管理面板并转到</span><span>目录 &gt; 产品。<br /></span>在这里，从产品列表中选择要添加等级价格的所需产品，然后单击编辑。</li>
<li>在价格字段中，单击&ldquo;高级定价&rdquo;按钮。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/setup-tier-price-3.png" /></p>
<ul>
<li><span>在高级定价窗口中，单击&ldquo;客户组价格&rdquo;字段中的</span><span>&ldquo;添加&rdquo;</span><span>以添加分级价格并设置价格条件。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/setup-tier-price-4.png" /><br /></span></p>
<p><span>网站：</span><span>选择您希望为其开放层级价格的网站。</span></p>
<p><span>客户组：</span><span><span><span>选择您希望折扣价适用的一组客户。</span><span>您也可以选择所有组。</span></span></span></p>
<p><span>数量：</span><span>在此字段中，输入申请折扣的产品数量。</span></p>
<p><span>价格：</span><span>在此字段中，输入降低后的产品价格。</span></p>
<p><span><span><span>您可以根据需要为所有产品自由设置任意数量的分级价格条件。</span><span>例如，购买 2 件商品的一个折扣价和购买 3 件商品的另一个分级价格。</span></span></span></p>
<ul>
<li><span>设置所有配置后，按</span><span>完成</span><span>并</span><span>保存</span><span>更改。</span></li>
<li><span>清除缓存并重新索引 Magento 数据</span></li>
</ul>]]></description>
      <pubDate>Wed, 07 Jun 2023 07:55:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置 Robots.txt？]]></title>
      <link>https://www.360magento.com/blog/configure-robots-txt/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Robotstxt_in_Magento_2">在 Magento 2 中配置 Robots.txt 的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理面板转到</span><span>内容 &gt; 设计配置</span><span>，然后选择您想要的</span><span>商店</span><span>。</span></p>
<p><span>第 2 步：</span><span>展开</span><span>搜索引擎机器人</span><span>部分。&nbsp;</span></p>
<p><span>&nbsp;</span><img src="https://www.360magento.com/media/wysiwyg/robots-configuration.png" /></p>
<p></p>
<ul>
<li><span>选择默认机器人字段</span><span>的选项</span><span><span><span>。</span><span>有几个选项可用，</span></span></span></li>
<li><span><span><span><span>INDEX, FOLLOW</span></span></span><span><span>&nbsp;&ndash; 网络爬虫索引页面并跟随页面上的链接。</span></span><br /><span><span><span>NOINDEX, FOLLOW</span></span></span><span><span>&nbsp;&ndash; 网络爬虫不索引页面但跟随页面上的链接。</span></span><br /><span><span><span>INDEX, NOFOLLOW</span></span></span><span><span>&nbsp;&ndash; 网络爬虫索引页面但不跟踪链接。</span></span><br /><span><span><span>NOINDEX, NOFOLLOW</span></span></span><span><span>&nbsp;&ndash; 网络爬虫既不索引页面也不跟随页面上的链接。</span></span><br /></span></li>
<li><span>在</span><span>编辑 robots.txt 文件的自定义指令</span><span>字段中，输入网络爬虫的自定义指令（如果有）。</span></li>
<li><span>重置为默认值</span><span>按钮会清除您所有的 robots.txt 设置并重置为默认值。</span></li>
</ul>
<p><span>单击</span><span>保存配置</span><span>并刷新缓存以反映更改。</span></p>
<p></p>]]></description>
      <pubDate>Mon, 05 Jun 2023 19:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中生成订单报告的分步指南]]></title>
      <link>https://www.360magento.com/blog/generate-order-report-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Generate_Order_Report_in_Magento_2">在 Magento 2 中生成订单报告的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录管理面板并导航至</span><span>&ldquo;报告&rdquo;&gt;&ldquo;销售&rdquo;&gt;&ldquo;订单&rdquo;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/order-report-configuration.png" /></span></p>
<p></p>
<p><span>第二步：</span><span>进行如下配置设置：</span></p>
<ul>
<li><span>使用日期</span><span>&mdash;&mdash;您在这里有两个选项，订单创建或订单更新。</span></li>
<li><span>期间</span><span>&ndash; 根据您需要的报告类型将其设置为日、月或年。</span></li>
<li><span>发件人</span><span>&ndash; 在创建订单时设置此字段。</span></li>
<li><span>To&nbsp;</span><span>&ndash; 将此字段设置为直到订单有效。</span></li>
<li><span>Order Status&nbsp;</span><span><span><span>&ndash; 它定义要生成的订单状态的报告。</span><span>Option Any 包括所有类型的订单，不包括已取消的订单。</span><span>选择指定选项可提供更多选项以从列表中选择特定订单状态。</span></span></span></li>
<li><span>空行</span><span>&mdash;&mdash;将其设置为否将排除报告中的空行。</span></li>
<li><span>显示实际值</span><span>&mdash;&mdash;将其设置为否将不会在报告中提及产品的实际值。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/order-report-filter.png" /></span></p>]]></description>
      <pubDate>Mon, 05 Jun 2023 06:03:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中创建管理菜单的步骤]]></title>
      <link>https://www.360magento.com/blog/create-admin-menu-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Create_Admin_Menu_in_Magento_2">在 Magento 2 中创建管理菜单的步骤：</span></h2>
<p><span>第一步：</span><span><span><span>在以下路径创建一个名为</span></span><span><span>menu.xml</span></span></span><span>文件的管理菜单文件</span><span><span></span></span><span><span></span></span></p>
<p><span>app\code\Vendor\Extension\etc\adminhtml\menu.xml</span></p>
<p><span>现在添加以下代码</span></p>
<p><span></span></p>
<p>&lt;?xml version="1.0"?&gt;<br />&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd"&gt;<br /> &lt;menu&gt;<br /> &lt;add id="Vendor_Extension::custom_menu" title="Custom Menu" module="Vendor_Extension" sortOrder="50" resource="Vendor_Extension::custom_menu"/&gt;<br /> &lt;add id="Vendor_Extension::notifications" title="Notifications" module="Vendor_Extension" sortOrder="10" action="vendorextension/notifications" resource="Vendor_Extension::notifications" parent="Vendor_Extension::custom_menu"/&gt;<br /> &lt;add id="Vendor_Extension::configuration" title="Configurations" module="Vendor_Extension" sortOrder="100" parent="Vendor_Extension::custom_menu" action="adminhtml/system_config/edit/section/custom_menu" resource="Vendor_Extension::configuration"/&gt;<br /> &lt;/menu&gt;<br />&lt;/config&gt;</p>
<p><span>从您的 Magento 管理员处结帐。</span><span>将创建一个自定义菜单，如下图所示。</span></p>
<p><span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/admin-menu.png" /></span></p>
<p></p>]]></description>
      <pubDate>Sun, 04 Jun 2023 07:59:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中自定义联系我们表单]]></title>
      <link>https://www.360magento.com/blog/customize-contact-us-form-magento2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Customize_Contact_Us_Form_in_Magento_2">在 Magento 2 中自定义联系我们表单的步骤：</span></h2>
<p><span>您必须覆盖 Magento 联系表单文件。</span></p>
<p><span>从路径</span><br /><span>vendor/magento/module-contact/view/frontend/templates复制 form.phtml</span></p>
<p><span>并将其粘贴到</span><br /><span>app/code/Vendor/Extension/view/frontend/templates</span></p>
<p><span>第 1 步：</span><span>文件路径：</span><span>app\code\Vendor\Extension\view\frontend\templates\form.phtml</span></p>
<p><span class="crayon-o">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"field custom required"</span><span class="crayon-o">&gt;</span></p>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-2"><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-e">label </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"label"</span><span class="crayon-h"> </span><span class="crayon-st">for</span><span class="crayon-o">=</span><span class="crayon-s">"custom"</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-3"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">&lt;</span><span class="crayon-e">span</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-4"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-ta">&lt;?php</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-k ">echo</span><span class="crayon-h"> </span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Custom Field'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-5"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">span</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-6"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">label</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-7">&nbsp;</div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-8"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"control"</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-9"><span class="crayon-h"> &nbsp;&nbsp; </span><span class="crayon-o">&lt;</span><span class="crayon-e">input </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"custom"</span><span class="crayon-h"> </span><span class="crayon-v">id</span><span class="crayon-o">=</span><span class="crayon-s">"custom"</span><span class="crayon-h"> </span><span class="crayon-v">title</span><span class="crayon-o">=</span><span class="crayon-s">"</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-10"><span class="crayon-s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-ta">&lt;?php</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-sy">@</span><span class="crayon-i">escapeNotVerified</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-k ">echo</span><span class="crayon-h"> </span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Custom Field'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span><span class="crayon-h"> </span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-11"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-v">value</span><span class="crayon-o">=</span><span class="crayon-s">""</span><span class="crayon-h"> </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"input-text"</span><span class="crayon-h"> </span><span class="crayon-v">type</span><span class="crayon-o">=</span><span class="crayon-s">"text"</span><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">-</span><span class="crayon-v">validate</span><span class="crayon-o">=</span><span class="crayon-s">"{required:true}"</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-12"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line" id="urvanov-syntax-highlighter-6479aec5dd8ae539189198-13"><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">div</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line"></div>
<div class="crayon-line"></div>
<div class="crayon-line"><span>第二步：</span><span>在以下文件路径中添加以下代码：</span><span>app\code\Vendor\Extension\view\frontend\layout\contact_index_index.xml</span></div>
<div class="crayon-line"></div>
<div class="crayon-line"></div>
<div class="crayon-line"></div>
<div class="crayon-line">
<p>&lt;?xml version="1.0"?&gt;</p>
<p>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;referenceBlock name="contactForm" remove="true"/&gt;</p>
<p>&lt;referenceContainer name="content"&gt;</p>
<p>&lt;block class="Magento\Contact\Block\ContactForm" name="customContactForm" template="Vendor_Extension::form.phtml" /&gt;</p>
<p>&lt;/referenceContainer&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/page&gt;</p>
</div>]]></description>
      <pubDate>Sat, 03 Jun 2023 02:55:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中应用默认主题的简单方法]]></title>
      <link>https://www.360magento.com/blog/apply-default-theme-magento/</link>
      <description><![CDATA[<h2><span id="How_to_Filter_the_Theme_Grid_in_Magento_2">如何过滤 Magento 2 中的主题网格？</span></h2>
<ul>
<li><span>从 Magento 管理面板，导航到</span><span>Content &gt; Design &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>现在，点击</span><span>过滤器</span><span>。</span></li>
<li><span>输入网站、商店、商店视图或主题名称。</span></li>
<li><span>然后点击</span><span>应用过滤器</span><span>。</span></li>
<li><span>主题列表将被更新。&nbsp;</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/filter-theme-grid.png" /></span></p>
<p></p>
<h2><span id="How_to_View_Current_Themes_in_Magento_2">如何在 Magento 2 中查看当前主题？</span></h2>
<ul>
<li><span>从 Magento 管理面板，导航到</span><span>Content &gt; Design &gt; Themes&nbsp;</span><span>。</span></li>
<li><span>您将获得所有主题的列表。</span></li>
</ul>
<p><span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/view-theme.png" /></span></p>
<p></p>
<ul>
<li><span>单击主题设置的视图。</span></li>
<li><span>您可以预览主题的示例页面。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/theme-settings.png" /></span></p>
<p></p>
<p></p>
<h2><span id="How_to_Apply_The_Default_Theme_In_Magento_2">如何在 Magento 2 中应用默认主题？</span></h2>
<ul>
<li><span>从 Magento 管理面板，导航到</span><span>Content &gt; Design &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>确定要为其更新主题的商店视图，然后单击</span><span>操作列中的</span><span>编辑。</span><span><span></span></span></li>
<li><span>在 Default Theme 选项卡下，</span><span>根据您的选择设置</span><span>Applied Theme 。</span><span><span></span></span></li>
<li><span>最后点击</span><span>保存配置</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/applied-theme.png" /></span></p>
<p></p>
<h2><span id="How_to_Add_User_Agent_Rule_for_Themes_in_Magento_2">如何在 Magento 2 中为主题添加用户代理规则？</span></h2>
<p><span>用户代理规则用于根据设备更改主题。&nbsp;</span></p>
<ul>
<li><span>从 Magento 管理面板，导航到</span><span>Content &gt; Design &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>确定要为其更新主题的商店视图，然后单击</span><span>操作列中的</span><span>编辑。</span><span><span></span></span></li>
<li><span>在 Design Rule 选项卡下，单击</span><span>Add New User Agent Rule&nbsp;</span><span>。</span></li>
<li><span><span></span></span><span>在搜索字符串</span><span>中输入特定设备的浏览器 ID&nbsp;</span><span>，然后选择</span><span>该设备的</span><span>主题名称。</span><span><span></span></span></li>
<li><span>重复相同的过程以添加其他设备。</span></li>
<li><span>您还可以从操作列中删除用户代理规则。</span></li>
<li><span>最后点击</span><span>保存配置</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/user-agent-rule.png" /></span></p>]]></description>
      <pubDate>Sat, 27 May 2023 06:45:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中禁用 AJAX 添加到购物车]]></title>
      <link>https://www.360magento.com/blog/disable-ajax-add-to-cart-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Disable_AJAX_Add_to_Cart_in_Magento_2">在 Magento 2 中禁用 AJAX 添加到购物车的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理面板导航到</span><span>商店 &gt; 设置 &gt; 配置</span></p>
<p><span>第 2 步：</span><span>在左侧窗格中，展开</span><span>销售</span><span>并选择</span><span>结帐</span></p>
<p><span>第 3 步：</span><span>放大</span><span>购物车</span><span>选项</span></p>
<p><span>第 4 步：将</span><span><span>添加产品后重定向到购物车选项</span></span><span>设置</span><span><span><span>为是，以便在产品添加到购物车后将客户重定向到购物车。</span></span><span><span>这意味着 AJAX 被禁用。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/disable-ajax.png" /></span></p>]]></description>
      <pubDate>Fri, 26 May 2023 08:49:49 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用管理员帐户共享？]]></title>
      <link>https://www.360magento.com/blog/magento-2-admin-account-sharing/</link>
      <description><![CDATA[<h2><span id="Steps_to_Enable_Admin_Account_Sharing_in_Magento_2">在 Magento 2 中启用管理员帐户共享的步骤</span></h2>
<ul>
<li><span>登录到 Magento 2 商店后端。</span></li>
<li><span>导航到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>在左侧面板中，导航至</span><span>Advanced &gt; Admin&nbsp;</span><span>。</span></li>
<li><span>展开</span><span>安全</span><span>部分</span></li>
<li><span><span></span></span><span><span><span>根据您的选择</span></span><span><span>启用或禁用</span></span></span><span>管理员帐户共享为是或否。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/enable-admin-account-sharing-in-magento-2-2.png" /></span></p>]]></description>
      <pubDate>Wed, 24 May 2023 20:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中为特定国家/地区添加新区域]]></title>
      <link>https://www.360magento.com/blog/magento-2-add-new-region-for-specific-country/</link>
      <description><![CDATA[<h2><span id="How_to_Add_New_Region_For_Specific_Country_in_Magento_2">如何在 Magento 2 中为特定国家/地区添加新区域：</span></h2>
<p><span>您需要运行以下</span><span>SQL 查询：</span></p>
<p><span>句法：</span></p>
<p>INSERT INTO &lsquo;directory_country_region&rsquo; (&lsquo;country_id&rsquo;, &lsquo;code&rsquo;, &lsquo;default_name&rsquo;, &lsquo;state_code&rsquo;) VALUES ('country id', 'region code', 'region name&rsquo;, 'state code&rsquo;);<br /><br /></p>
<p><span>示例 1：</span></p>
<p>INSERT INTO `directory_country_region` (`country_id`, `code`, `default_name`, `state_code`) VALUES ('IN', 'IS', 'Indian State', '46');</p>
<p><img src="https://www.360magento.com/media/wysiwyg/indian-state.png" /></p>
<div id="gtx-trans" style="position: absolute; left: -33px; top: 166.375px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Wed, 24 May 2023 07:40:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中自定义联系我们表单]]></title>
      <link>https://www.360magento.com/blog/customize-contact-us-form-magento/</link>
      <description><![CDATA[<p>联系我们表格通常包括姓名、图像和消息。但是，您可以根据您的业务需要自定义&ldquo;联系我们&rdquo;表单。查看Magento 2 的快速联系表单扩展，它有助于在您网站的所有页面上嵌入联系按钮。</p>
<h2><span id="Steps_to_Customize_Contact_Us_Form_in_Magento_2">在 Magento 2 中自定义联系我们表单的步骤：</span></h2>
<p><span>您必须覆盖 Magento 联系表单文件。</span></p>
<p><span>从路径</span><br /><span>vendor/magento/module-contact/view/frontend/templates复制 form.phtml</span></p>
<p><span>并将其粘贴到</span><br /><span>app/code/Vendor/Extension/view/frontend/templates</span></p>
<p><span>第 1 步：</span><span>文件路径：</span><span>app\code\Vendor\Extension\view\frontend\templates\form.phtml</span></p>
<p>&lt;div class="field custom required"&gt;<br /> &lt;label class="label" for="custom"&gt;<br /> &lt;span&gt;<br /> &lt;?php /* @escapeNotVerified */ echo __('Custom Field') ?&gt;<br /> &lt;/span&gt;<br /> &lt;/label&gt;</p>
<p>&lt;div class="control"&gt;<br /> &lt;input name="custom" id="custom" title="<br /> &lt;?php / @escapeNotVerified */ echo __('Custom Field') ?&gt;" <br /> value="" class="input-text" type="text" data-validate="{required:true}"<br /> &lt;/div&gt;<br />&lt;/div&gt;</p>
<p></p>
<p><span>第二步：</span><span>在以下文件路径中添加以下代码：</span><span>app\code\Vendor\Extension\view\frontend\layout\contact_index_index.xml</span></p>
<p><span></span></p>
<p><span><span class="crayon-o">&lt;</span><span class="crayon-e">referenceBlock </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"contactForm"</span><span class="crayon-h"> </span><span class="crayon-v">remove</span><span class="crayon-o">=</span><span class="crayon-s">"true"</span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span><span class="crayon-h">&nbsp;&nbsp;</span></span></p>
<p><span><span class="crayon-h"></span></span><span class="crayon-h">&nbsp; &nbsp; &nbsp; &nbsp;</span><span class="crayon-o">&lt;</span><span class="crayon-e">referenceContainer </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"content"</span><span class="crayon-o">&gt;</span>&nbsp;</p>
<div class="crayon-line" id="urvanov-syntax-highlighter-64667c7ccfec1193072053-11"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">&lt;</span><span class="crayon-e">block </span><span class="crayon-t">class</span><span class="crayon-o">=</span><span class="crayon-s">"Magento\Contact\Block\ContactForm"</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-o">=</span><span class="crayon-s">"customContactForm"</span><span class="crayon-h"> </span><span class="crayon-v">template</span><span class="crayon-o">=</span><span class="crayon-s">"Vendor_Extension::form.phtml"</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-o">&gt;</span></div>
<div class="crayon-line crayon-striped-line" id="urvanov-syntax-highlighter-64667c7ccfec1193072053-12">&nbsp;</div>
<div class="crayon-line" id="urvanov-syntax-highlighter-64667c7ccfec1193072053-13"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-v">referenceContainer</span><span class="crayon-o">&gt;</span></div>
<p></p>]]></description>
      <pubDate>Tue, 23 May 2023 06:34:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更改 Magento 2 中的管理员启动页面]]></title>
      <link>https://www.360magento.com/blog/change-admin-startup-page-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_the_Admin_Startup_Page_in_Magento_2">在 Magento 2 中更改管理员启动页面的步骤</span></h2>
<p><span>第 1 步：</span><span>登录到您的 Magento 商店管理后端并导航到</span><span>商店 &gt; 配置</span><span>部分。</span></p>
<p><span>第 2 步：</span><span>在左侧面板中，转到</span><span>&ldquo;高级&rdquo;</span><span>选项并选择</span><span>&ldquo;管理&rdquo;</span><span><span><span>选项。</span><span>在 Advance 菜单中展开</span></span></span><span>Startup Page</span><span>选项。</span></p>
<p><span>第 3 步：取消选中</span><span><span><span>Startup Page</span></span></span><span><span><span>字段的 Use System Value 框</span><span>，然后从下拉菜单中选择要在启动页显示的页面。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/admin-startup-page-setup.png" /></span></p>]]></description>
      <pubDate>Mon, 22 May 2023 08:51:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置密码重置请求之间的最短时间？]]></title>
      <link>https://www.360magento.com/blog/set-min-time-between-password-reset-requests-in-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_set_Min_Time_Between_Password_Reset_Requests_in_Magento_2_store_for_Admin"><span>在 Magento 2 商店中为管理员设置密码重置请求之间的最短时间的步骤</span></span></h2>
<p><span>第 1 步：</span><span>登录到 Magento 管理面板并导航到</span><span>Store &gt; Settings &gt; Configuration</span></p>
<p><span>从侧边栏。</span></p>
<p><span>第 2 步：</span><span>在配置中，展开</span><span>Advance</span><span>选项并选择</span><span>Admin</span><span>菜单。</span></p>
<p><span>第 3 步：</span><span>现在展开</span><span>&ldquo;安全&rdquo;</span><span>菜单并进一步处理。</span><br /><br /><img src="https://www.360magento.com/media/wysiwyg/admin-side_1_.png" /></p>
<p><span>密码重置请求之间的最短时间：</span><span>取消选中该框并在&ldquo;密码重置请求之间的最短时间&rdquo;字段中输入密码重置请求之间必须经过的最短分钟数。</span></p>
<p><span>第 3 步：</span><span>要应用您的更改，请点击</span><span>保存配置</span><span>按钮。</span></p>
<h2><span id="Steps_To_Set_Min_Time_Between_Password_Reset_Requests_In_Magento_2_Store_For_Customer"><span>在 Magento 2 Store 中为客户设置密码重置请求之间的最短时间的步骤</span></span></h2>
<p><span>第 1 步：</span><span>导航到</span><span>管理主页，然后</span><span>从边栏中</span><span>选择</span><span>商店。</span><span>然后，在&ldquo;设置&rdquo;下，选择</span><span>&ldquo;配置&rdquo;&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span><span><span>从</span></span><span><span>左侧的</span></span><span><span>客户面板中</span></span></span><span>选择</span><span>客户配置。</span><span><span><span>之后，展开</span></span><span><span>密码选项</span></span><span><span>部分。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/customer-side.png" /></span></p>
<p><span>密码重置请求之间的最短时间：</span><span>取消选中该复选框并在&ldquo;密码重置请求之间的最短时间&rdquo;字段中添加密码重置请求之间必须经过的分钟数。</span></p>
<p><span>第 3 步：</span><span>单击</span><span>右上角的</span><span>&ldquo;保存配置&rdquo;按钮以保存您的更改。</span></p>
<p><span></span></p>]]></description>
      <pubDate>Sun, 21 May 2023 07:58:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中隐藏或删除 Minicart]]></title>
      <link>https://www.360magento.com/blog/hide-or-remove-minicart-magento/</link>
      <description><![CDATA[<h2><span id="How_To_Remove_Minicart_In_Magento_2">如何删除 Magento 2 中的 Minicart？</span></h2>
<p><span><img src="https://www.360magento.com/media/wysiwyg/How-to-Hide-or-Remove-Minicart-in-Magento-2.png" /></span></p>
<ol>
<li><span><span><span>从 Magento 管理面板</span></span><span><span>导航到</span></span></span><span>Stores &gt; Settings &gt; Configuration 。</span><span><span></span></span></li>
<li><span><span></span></span><span><span><span>从</span></span><span><span>左侧的</span></span><span><span>销售标题中</span></span><span><span>选择</span></span></span><span>结帐选项。</span><span><span></span></span><span><span></span></span><span><span></span></span></li>
<li><span>放大</span><span>Mini Cart</span><span>标题。</span></li>
<li><span>取消选中 Display Mini Cart 字段中的 Use System Value 选项。</span></li>
<li><span>将</span><span>Display Mini Cart</span><span>字段设置为</span><span>No&nbsp;</span><span>。</span></li>
<li><span>保存配置</span><span>。</span></li>
</ol>]]></description>
      <pubDate>Sat, 20 May 2023 07:56:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置零小计结帐]]></title>
      <link>https://www.360magento.com/blog/configure-zero-subtotal-checkout-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Zero_Subtotal_Checkout_in_Magento_2">在 Magento 2 中配置零小计结帐的步骤</span></h2>
<p><span><span><span><span>第 1 步：</span></span></span><span><span>从 Magento 管理面板转到</span></span></span><span>Stores -&gt; Configuration&nbsp;</span><span>。</span></p>
<p><span><span><span><span>第 2 步：</span></span></span><span></span></span><span>在&ldquo;销售&rdquo;部分</span><span>下</span><span>，选择</span><span>&ldquo;付款方式&rdquo;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/configuration_2.png" /></span></p>
<p><span><span><span><span>第 3 步：</span></span></span><span><span>从各个选项卡展开</span></span></span><span>零小计结帐</span><span>选项卡。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/zero-subtotal-checkout.png" /></p>
<p><span>已启用：</span><span>将此字段设置为是以启动零小计结帐。</span></p>
<p><span>标题：</span><span>在这里设置标题，显示给客户。&nbsp;</span></p>
<p><span>新订单状态：</span><span>从下拉菜单的 3 个选项中，根据您的要求选择任何一个。</span></p>
<ul>
<li><span>待定：</span><span>如果订单等待批准，请选择此选项。</span></li>
<li><span>处理：</span><span>如果交易正在处理，请设置此选项。</span></li>
<li><span>涉嫌欺诈：</span><span>如果订单涉嫌欺诈，请设置此选项。</span></li>
</ul>
<p><span>来自适用国家/地区的付款：</span><span>如果您希望向所有国家/地区提供零小计结账，请从下拉菜单中选择所有允许的国家/地区，如果您希望仅向指定国家/地区提供该功能，请选择特定国家/地区选项。</span></p>
<p><span>来自特定国家/地区的付款：</span><span>在此字段中，选择您希望允许付款的国家/地区。&nbsp;</span></p>
<p><span>排序顺序：</span><span>输入您希望定义零小计结帐位置的顺序。</span></p>
<p><span><span><span><span>第 4 步：</span></span></span><span><span>最后，</span></span></span><span>保存配置</span><span>。</span></p>]]></description>
      <pubDate>Fri, 19 May 2023 07:54:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置结帐总计排序顺序]]></title>
      <link>https://www.360magento.com/blog/configure-checkout-totals-sort-order-magento/</link>
      <description><![CDATA[<h2><span id="How_To_Configure_Checkout_Totals_Sort_Order_In_Magento_2">如何在 Magento 2 中配置结帐总计排序顺序</span></h2>
<p><img src="https://www.360magento.com/media/wysiwyg/checkout-totals-sort-order.png" /></p>
<p><span>第 1 步 &ndash;</span><span>在 Magento 管理员中，前往</span><span>Stores &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步 &ndash;</span><span>之后，选择</span><span>销售 &gt; 销售</span><span>。</span></p>
<p><span>第 3 步 &ndash;</span><span>放大</span><span>Checkout Totals Sort Order</span><span>部分。</span></p>
<p><span>第 4 步 &ndash;</span><span><span><span>为每个字段分配值。</span><span>订单金额将按从低到高的顺序显示。</span><span>编号最低的字段将被评为较高的位置。&nbsp;</span></span></span></p>
<p><span>第 5 步 &ndash;</span><span>完成后，点击</span><span>保存配置</span><span>！</span></p>]]></description>
      <pubDate>Thu, 18 May 2023 07:50:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何打印 Magento 2的日志]]></title>
      <link>https://www.360magento.com/blog/print-log-in-magento-2/</link>
      <description><![CDATA[<p><span><span><span>日志是系统信息的记录，可以在将来检查。</span><span>错误日志是此类事件的重要实例之一。&nbsp;</span></span></span></p>
<p><span><span><span>开发人员熟悉错误带来的痛苦以及交付功能解决方案所涉及的步骤。</span><span>自定义日志可以使他们更容易调试。</span><span>它使识别错误和问题原因变得简单。</span><span>日志有助于深入了解 Magento 2 系统进程。</span></span></span></p>
<p><span><span><span>&nbsp;</span></span></span></p>
<h2><span id="Steps_To_Print_Log_In_Magento_2"><span><span><span>打印登录 Magento 2 的步骤</span></span></span><span>&nbsp;</span></span></h2>
<p>在我们执行这些方法之前，请确保您的 Magento 商店处于开发人员模式。检查您的商店是否处于生产模式，然后执行此命令。</p>
<p><span>php bin/magento config:set dev/debug/debug_logging 1</span></p>
<p><span>可以通过三种方式打印您在 Magento 商店中的日志。</span></p>
<h3><span id="Method_1_To_print_temporary_logs_with_a_new_file">方法 1：使用新文件打印临时日志</span></h3>
<p><span>将此代码添加到任何文件夹或 sun 目录中的任何新 PHP 文件。</span></p>
<pre>    $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/mylogfile.log');
    $logger = new \Zend\Log\Logger();
    $logger---&gt;addWriter($writer);
    $logger-&gt;info('This Is Simple Text Log'); //To print simple text log
    $logger-&gt;info(print_r($myarray, true)); //To print array log

</pre>
<p>方法二：使用Logger接口 在以下路径创建一个文件 app\code\Vendor\Extension\Block\Printlog.php 现在，添加以下代码。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/php-log.png" /></p>
<pre>方法 3：使用 ObjectManager
将此代码添加到任何文件夹或 sun 目录中的任何新 PHP 文件。</pre>
<pre>    $objectmanager = \Magento\Framework\App\ObjectManager::getInstance();
    $objectmanager---&gt;get('Psr\Log\LoggerInterface')-&gt;info('Testing Log'); //Print log in var/log/system.log
    $objectmanager-&gt;get('Psr\Log\LoggerInterface')-&gt;debug('Testing Log'); //Print log in var/log/debug.log

</pre>]]></description>
      <pubDate>Wed, 17 May 2023 07:00:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中为新客户帐户设置默认组]]></title>
      <link>https://www.360magento.com/blog/set-default-group-for-new-customer-magento/</link>
      <description><![CDATA[<h2><span id="What_are_customer_groups_in_Magento_2">Magento 2 中的客户群是什么？</span></h2>
<p><span><span><span>默认的 Magento 提供自定义商店和改善用户体验的功能。</span><span>在线零售商有能力根据他们拥有的类别将他们的客户分成不同的组。</span></span></span></p>
<p><span>当您想要区分 B2C 和 B2B 客户时，可以使用此功能。</span></p>
<h2><span id="How_to_Set_Default_Group_for_New_Customer_Account_in_Magento_2">如何在 Magento 2 中为新客户帐户设置默认组</span></h2>
<p><span>Magento 2 中可以有四种不同的客户群：</span></p>
<ul>
<li><span>一般的</span></li>
<li><span>未登录</span></li>
<li><span>零售商</span></li>
<li><span>批发的</span></li>
</ul>
<p><span><span><span>在这 4 个中，一个新帐户自动归入常规类别。</span><span>要更改新注册的默认类别，请从 Magento 2 管理员帐户执行以下操作。</span></span></span></p>
<ul>
<li><span>转到</span><span>商店 &rarr; 配置 &rarr; 客户 &rarr; 客户配置</span><span>。</span></li>
<li><span>展开</span><span>创建新帐户选项选项</span><span>卡。</span></li>
<li><span>将启用</span><span>自动分配给客户组分配</span><span>为是。</span></li>
<li><span>更改</span><span>默认组</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/customer-group-configuration.png" /><br /></span></p>
<p><span><span>此外，您还可以创建自己的自定义组，这非常容易配置。</span><span>让我们看看如何！</span></span></p>
<p></p>
<p><img src="https://www.360magento.com/media/wysiwyg/add-new-customer-group-1.png" /></p>
<p></p>
<ul>
<li><span>转到</span><span>客户 &rarr; 客户组</span><span>。</span></li>
</ul>
<p><span>在那里您将看到四种可编辑或可删除的客户组变体。&nbsp;</span></p>
<ul>
<li><span>单击</span><span>添加新客户组</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/new-customer-group-configuration-1_1_.png" /></span></p>
<p></p>
<ul>
<li><span>输入</span><span>组名称</span><span>并</span><span>为其分配</span><span>税级。</span><span><span></span></span></li>
<li><span>并</span><span>保存客户群</span><span>。</span></li>
</ul>]]></description>
      <pubDate>Tue, 16 May 2023 08:31:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中禁用管理员密码过期]]></title>
      <link>https://www.360magento.com/blog/disable-admin-password-expiration-magento/</link>
      <description><![CDATA[<h2><span id="How_to_Disable_Admin_Password_Expiration_in_Magento_2">如何在 Magento 2 中禁用管理员密码过期？</span></h2>
<ul>
<li><span>在 Magento 管理员中，转到</span><span>Stores &rarr; Settings &rarr; Configuration&nbsp;</span><span>。</span></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/admin-security-1.png" /></p>
<ul>
<li><span>然后，转到</span><span>高级 &rarr; 管理</span></li>
<li><span><span></span></span><span>我们将在安全部分</span><span>工作</span><span>。</span></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/password-lifetime.png" /></p>
<ul>
<li><span>请参阅</span><span>密码有效期（天）</span><span><span><span>字段。</span><span>您可以在此处输入密码保持合法的天数。</span><span>如果该值保持为空，则该功能将被禁用。&nbsp;</span></span></span></li>
<li><span>密码更改</span><span>下拉列表可以具有</span><span>推荐值</span><span>或</span><span>强制</span><span>值。&nbsp;</span></li>
<li><span>强制</span><span>值要求管理员在设置帐户后更改密码。</span></li>
<li><span>建议</span><span>值敦促管理员在设置帐户后更改密码。</span></li>
<li><span>保存配置。</span></li>
</ul>]]></description>
      <pubDate>Mon, 15 May 2023 07:29:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：允许客人写评论]]></title>
      <link>https://www.360magento.com/blog/magento-2-allow-guests-to-write-reviews/</link>
      <description><![CDATA[<h2><span id="How_to_Allow_Guests_to_Write_Reviews_in_Magento_2">如何允许客人在 Magento 2 中撰写评论？</span></h2>
<p><span>第 1 步：常规设置&nbsp;</span></p>
<ul>
<li><span>登录到 Magento 管理员帐户。</span></li>
<li><span>导航到</span><span>商店 &rarr; 配置</span><span>。</span></li>
</ul>
<p><span>第 2 步：允许客人撰写评论</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/product-reviews.png" /></span></p>
<ul>
<li><span>转到</span><span>目录 &rarr; 目录。</span></li>
<li><span><span></span></span><span>我们将在产品评论部分</span><span>工作</span><span>。</span></li>
<li><span><span></span></span><span>将Allow Guests to Write Reviews字段</span><span>设置</span><span>为</span><span>Yes&nbsp;</span><span>。</span></li>
<li><span>保存配置</span><span>。</span></li>
</ul>]]></description>
      <pubDate>Sun, 14 May 2023 06:27:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建新的属性集]]></title>
      <link>https://www.360magento.com/blog/create-new-attribute-sets-magento/</link>
      <description><![CDATA[<h2><span id="How_to_Create_New_Attribute_Sets_in_Magento_2">如何在 Magento 2 中创建新的属性集？</span></h2>
<ul>
<li><span>登录到 Magento 管理员。</span></li>
<li><span>转到</span><span>商店 &rarr; 属性 &rarr; 属性集</span><br /><br /><img src="https://www.360magento.com/media/wysiwyg/new-attribute-configuration.png" /><br /><br />
<ul>
<li><span>单击</span><span>添加属性集</span><span>。</span><img src="https://www.360magento.com/media/wysiwyg/add-attribute-set.png" /></li>
<li>
<p><span>输入询问的信息。</span></p>
<ul>
<li><span>名称：</span><span><span><span>为属性命名。</span><span>这是要求内部使用的。</span></span></span></li>
<li><span>基于：</span><span>选择将用作模板的属性集。</span></li>
<li><span>点击</span><span>保存</span><span>按钮。</span><br /><br /><img src="https://www.360magento.com/media/wysiwyg/attribute-set-information.png" /><br />
<ul>
<li><span>下一页将如下所示。</span></li>
</ul>
</li>
<li>
<ul>
<li><span>要更改属性集，只需将项目</span><span>从未分配的属性拖动</span><span>到</span><span>组</span><span>列。</span></li>
<li><span>完成后</span><span>保存<br /><img src="https://www.360magento.com/media/wysiwyg/edit-attribute-set.png" /><br /></span></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>]]></description>
      <pubDate>Fri, 12 May 2023 17:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中启用管理仪表板图表]]></title>
      <link>https://www.360magento.com/blog/enable-admin-dashboard-charts-magento/</link>
      <description><![CDATA[<h2><span id="How_To_Enable_Admin_Dashboard_Charts_In_Magento_2">如何在 Magento 2 中启用管理仪表板图表？</span></h2>
<p><span><img src="https://www.360magento.com/media/wysiwyg/admin-charts-1.png" /></span></p>
<ul>
<li><span>登录到 Magento 管理员。</span></li>
<li><span>前往</span><span>商店 &rarr; 设置 &rarr; 配置</span><span>。</span></li>
<li><span>之后，</span><span>Advanced &rarr; Admin&nbsp;</span><span>。</span></li>
<li><span><span></span></span><span>我们将在仪表板区域</span><span>工作</span><span>。</span></li>
<li><span><span></span></span><span>将启用图表选项</span><span>设置</span><span>为</span><span>是</span><span>。</span></li>
<li><span>保存配置</span><span>。</span></li>
</ul>]]></description>
      <pubDate>Fri, 12 May 2023 06:25:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置默认​​页面布局]]></title>
      <link>https://www.360magento.com/blog/configure-default-page-layout-magento/</link>
      <description><![CDATA[<h2><span id="How_To_Configure_Default_Page_Layout_In_Magento_2">如何在 Magento 2 中配置默认​​页面布局？</span></h2>
<p><img src="https://www.360magento.com/media/wysiwyg/default-layout_1_.png" /></p>
<p></p>
<ul>
<li><span>登录到 Magento 管理员。</span></li>
<li><span>前往</span><span>商店 &rarr; 设置 &rarr; 配置。</span></li>
<li><span>转到</span><span>Web &rarr; 默认布局</span></li>
<li><span>您可以在此处从下拉菜单中更改默认产品布局和类别布局。</span></li>
<li><span>选择您选择的页面布局以显示在前端。</span></li>
<li><span>保存配置。</span></li>
</ul>]]></description>
      <pubDate>Thu, 11 May 2023 07:19:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置商店信息]]></title>
      <link>https://www.360magento.com/blog/setup-store-information-magento/</link>
      <description><![CDATA[<h2><span id="How_to_Setup_Store_Information_in_Magento_2">如何在 Magento 2 中设置商店信息？</span></h2>
<ul>
<li><span>登录到 Magento 管理员。</span></li>
<li><span>前往</span><span>商店 &rarr; 设置 &rarr; 配置</span><span>。</span></li>
<li><span>之后，转到</span><span>General &rarr; Store Information&nbsp;</span><span>。<br /><img src="https://www.360magento.com/media/wysiwyg/configuration_1.png" /><br /><br /></span></li>
<li><span>放大商店信息部分。填写所有商店详细信息。<br /><img src="https://www.360magento.com/media/wysiwyg/store-information.png" /><br /></span></li>
</ul>]]></description>
      <pubDate>Wed, 10 May 2023 06:14:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改街道地址的行数]]></title>
      <link>https://www.360magento.com/blog/change-number-of-lines-in-street-address-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_Number_of_Lines_in_a_Street_Address_in_Magento_2">在 Magento 2 中更改街道地址行数的步骤：</span></h2>
<ul>
<li><span>登录到</span><span>Magento 管理仪表板</span><span>。</span></li>
<li><span>导航到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>从左侧菜单展开</span><span>CUSTOMERS</span><span>并选择</span><span>Customer Configuration&nbsp;</span><span>。</span></li>
<li><span>移动到</span><span>名称和地址选项</span><span>部分。</span></li>
<li><span><span></span></span><span>在街道地址字段中的行数</span><span>中设置数字</span><span><span><span>。</span><span>默认值为 3，范围为 1-4。<br /><img src="https://www.360magento.com/media/wysiwyg/number-of-lines-in-address-magento-2.png" /><br /></span></span></span></li>
</ul>]]></description>
      <pubDate>Tue, 09 May 2023 09:54:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 的注册表中启用中间名]]></title>
      <link>https://www.360magento.com/blog/enable-middle-name-in-registration-form-magento/</link>
      <description><![CDATA[<h2><span id="Steps_To_Enable_Middle_Name_In_Registration_Form_In_Magento_2">在 Magento 2 的注册表中启用中间名的步骤：</span></h2>
<ul>
<li><span>登录到您的</span><span>Magento 2 管理</span><span>仪表板。</span></li>
<li><span>从左侧菜单中选择</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span><span></span></span><span><span><span>从左侧面板</span></span><span><span>展开</span></span></span><span>CUSTOMERS选项。</span><span><span></span></span></li>
<li><span>选择</span><span>客户配置</span><span>。</span></li>
<li><span>现在，扩大</span><span>名称和地址选项</span><span>部分。</span></li>
<li><span>移至</span><span>Show Middle Name (initial)</span><span>字段并取消选中 Use system value 复选框。</span></li>
<li><span><span></span></span><span><span><span>从下拉列表中</span></span><span><span>选择</span></span></span><span>是。</span><span><span><span>但是，可以启用中间名字段，但永远不能将其设为必需。</span><span>它将保留为可选字段。</span></span></span><br /><img src="https://www.360magento.com/media/wysiwyg/middle-name.png" /></li>
</ul>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
<p><span>结果：</span></p>
<p><span><span><span>现在，您可以在 Magento 2 店面进行验证。</span><span>中间名字段已添加到客户帐户。</span></span></span></p>
<p><span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/middle-name-frontend.png" /></span></p>]]></description>
      <pubDate>Mon, 08 May 2023 08:51:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示传真字段]]></title>
      <link>https://www.360magento.com/blog/show-fax-field-magento-2/</link>
      <description><![CDATA[<p><span><span><span>传真是发送和接收文件的快速替代方法。</span><span>它用作冗长订单、签署文件或其他信息的通信工具。</span><span>尽管随着计算机和互联网的出现，传真已经是一种过时的通讯方式，但一些公司仍然使用传真来传递信息。</span></span></span></p>
<p><span><span><span>在 Magento 2 中，默认的客户注册表不包含传真字段，因为它在后端被禁用。</span><span>但是，如果您需要来自客户的传真信息，您可以轻松启用它</span></span></span></p>
<h2><span id="Steps_To_Show_Fax_Field_In_Magento_2">在 Magento 2 中显示传真字段的步骤：</span></h2>
<ul>
<li><span>登录到您的</span><span>Magento 2 管理</span><span>仪表板。</span></li>
<li><span>打开&nbsp;&nbsp;</span><span>Stores</span><span>菜单并选择</span><span>Settings 部分下的</span><span>Configuration 。</span><span><span></span></span></li>
<li><span>查看屏幕左侧并扩展</span><span>CUSTOMERS&nbsp;</span><span>。</span></li>
<li><span>从选项中选择</span><span>客户配置</span><span>。</span></li>
<li><span>放大</span><span>名称和地址选项选项</span><span>卡。<br /><br /></span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/fax-configuration.png" /></span></p>
<p></p>
<ul>
<li><span>移动到</span><span>显示传真</span><span>字段并取消选中使用系统值复选框。</span></li>
<li><span>选择适当的选项作为</span><span>Optional 或 Required&nbsp;</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/enable-fax.png" /></span></p>
<p></p>
<ul>
<li><span>然后</span><span>保存配置</span><span>。</span></li>
</ul>]]></description>
      <pubDate>Sun, 07 May 2023 08:48:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[修复：Magento 2 中的 PHP 致命错误“Allowed Memory Size”]]></title>
      <link>https://www.360magento.com/blog/fixed-php-fatal-error-allowed-memory-size-magento/</link>
      <description><![CDATA[<h2><span id="Steps_to_Fix_PHP_Fatal_Error_8220Allowed_Memory_Size8221_in_Magento_2">修复 Magento 2 中 PHP 致命错误&ldquo;允许的内存大小&rdquo;的步骤：</span></h2>
<p><span>第一步：</span><span><span><span>&nbsp; 首先，您需要定位到php.ini目录所在的目录。</span><span>这通常是&nbsp;&nbsp;</span></span></span></p>
<p><span>/etc/php/版本（例如 7.4）/apache2</span></p>
<p><span>第 2 步：接下来，找到</span><span><span>&ldquo;memory_limt =&rdquo;</span></span><span>这一行</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/memory-limit-find.png" /></span></p>
<p></p>
<p><span>第三步：</span><span>最后，你可以相应地调整值并保存</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/QQ20230506-150120_2x.png" /></span></p>
<p><span>第 4 步：</span><span><span><span>修改 php.ini 文件后，您需要重新启动 apache 服务器。</span><span>使用以下命令</span></span></span></p>
<div class="urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate" id="urvanov-syntax-highlighter-64534ef74f2bc756858361" data-settings=" minimize scroll-mouseover">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay"><span class="crayon-title"></span>
<div class="crayon-tools">
<div class="crayon-button urvanov-syntax-highlighter-nums-button crayon-pressed" title="Toggle Line Numbers">
<div class="urvanov-syntax-highlighter-button-icon">systemctl restart apache2</div>
</div>
</div>
</div>
</div>
<div id="gtx-trans" style="position: absolute; left: -43px; top: 1839.38px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Sat, 06 May 2023 08:53:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：如何更改订单摘要中显示的最大项目数]]></title>
      <link>https://www.360magento.com/blog/magento-2-change-maximum-number/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_Maximum_Number_Of_Items_To_Display_In_Order_Summary_in_Magento_2">更改 Magento 2 中订单摘要中显示的最大项目数的步骤：</span></h2>
<ul>
<li><span>登录到您的 Magento 2 商店</span><span>管理仪表板</span><span>。</span></li>
<li><span>在侧面菜单中，转到</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></li>
<li><span>展开</span><span>左侧菜单中的</span><span>SALES菜单并选择</span><span><span><span>Checkout&nbsp;</span></span><span><span>。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></li>
<li><span>现在，放大</span><span>Checkout Options</span><span>部分。</span></li>
<li><span><span></span></span><span>在要在订单摘要中显示的最大项目数字段</span><span>中输入您想要的值</span><span><span><span>。</span><span>默认值为 10。</span></span></span></li>
</ul>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/Maximum-Number-Of-Items-To-Display-In-Order-Summary.png" /></span></span></span></p>]]></description>
      <pubDate>Fri, 05 May 2023 09:26:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置报价生命周期]]></title>
      <link>https://www.360magento.com/blog/configure-quote-lifetime-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Quote_Lifetime_in_Magento_2">在 Magento 2 中配置报价生命周期的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>Magento 2 管理仪表板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>展开</span><span>左侧面板中的</span><span>SALES菜单并选择</span><span><span><span>Checkout&nbsp;</span></span><span><span>。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第 4 步：</span><span>现在放大</span><span>购物车</span><span>选项并在</span><span>报价生命周期</span><span><span><span>字段中设置所需天数。</span><span>默认值为 30 天。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/quote-lifetime-magento-2.png" /></span></p>]]></description>
      <pubDate>Thu, 04 May 2023 09:22:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置分层导航]]></title>
      <link>https://www.360magento.com/blog/configure-layered-navigation-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_To_Configure_Layered_Navigation_In_Magento_2">在 Magento 2 中配置分层导航的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的 Magento 2 商店的</span><span>管理面板</span><span>。</span></p>
<p><span>第 2 步：</span><span>移至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>展开</span><span>目录</span><span>并选择</span><span>目录</span><span>选项。</span></p>
<p><span>第 4 步：</span><span>现在放大</span><span>分层导航</span><span>部分。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/layered-navigation-configuration.png" /></span></p>
<p><span>显示产品数量：</span><span>如果要在分层导航中显示产品数量，请设置是。</span></p>
<p><span>价格导航步骤计算：</span><span><span><span>设置分层价格导航的方法。</span><span>它有 3 个下拉选项</span></span></span><span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/price-navigation-step-calculation.png" /></span></p>
<p><span>1. Automatic (equalize price ranges) &ndash;</span><span>根据价格范围自动计算价格导航步长</span></p>
<p><span>2. 自动（均衡产品数量）&mdash;&mdash;</span><span>根据产品数量自动计算价格导航步骤。</span></p>
<p><span>选择此选项后，它将生成新字段：</span></p>
<ul>
<li><span>Display Price Interval as One Price：</span><span>设置是否要在特定价格区间内的所有价格都相等时显示价格区间。</span></li>
<li><span>Interval Division Limit：</span><span>设置不分区间的产品个数。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Automatic-equalize-product-counts.png" /></span></p>
<p><span>3. Manual&mdash;&mdash;</span><span>手动设置分层导航价格。</span></p>
<p><span>选择此选项后，它将生成新字段：</span></p>
<ul>
<li><span>默认价格导航步骤：</span><span>指定每个步骤中包含的产品数量。</span></li>
<li><span>价格区间的最大数量：</span><span>定义价格步长的最大数量。</span></li>
<li><span></span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/manual.png" /></span></p>
<p><span> 显示类别过滤器：</span><span>如果要显示类别过滤器，请设置是。</span></p>
<p><span>第五步：</span><span>最后点击</span><span>保存配置</span><span>按钮。</span></p>
<p><span><span><span>&nbsp;</span></span></span></p>]]></description>
      <pubDate>Wed, 03 May 2023 09:18:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中为管理员设置密码重置保护类型]]></title>
      <link>https://www.360magento.com/blog/set-password-reset-protection-type-for-admin/</link>
      <description><![CDATA[<h1><span id="Steps_to_Set_Password_Reset_Protection_Type_for_Admin_in_Magento_2">在 Magento 2 中为管理员设置密码重置保护类型的步骤：</span></h1>
<p><span>第 1 步：</span><span>登录到</span><span>Magento 2 管理仪表板</span><span>。</span></p>
<p><span>第 2 步：</span><span>移至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>从左侧菜单中，展开</span><span>&ldquo;高级&rdquo;</span><span>并选择</span><span>&ldquo;管理&rdquo;&nbsp;</span><span>。</span></p>
<p><span>第 4 步：</span><span>现在展开</span><span>安全</span><span>选项。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Screenshot_1.png" /></span></p>
<p><a href="https://magecomp.com/blog/wp-content/uploads/2022/09/Screenshot_1.png" data-wpel-link="internal"></a></p>
<p><span>第 5 步：在</span><span><span>密码重置保护类型字段</span></span><span>中选择您想要的选项</span><span>。</span><span><span></span></span><span><span></span></span></p>
<ul>
<li><span>通过IP和Email：</span><span>在收到与admin账户关联的邮箱的通知响应后，可以在线重置admin密码。</span></li>
<li><span>通过IP：</span><span>无需任何确认即可在线重置管理员密码。</span></li>
<li><span>通过电子邮件：</span><span>可以通过回复与管理员帐户关联的电子邮件通知来重置管理员密码。</span></li>
<li><span>无：</span><span>只有管理员可以重置密码。</span></li>
</ul>
<p><span>第 6 步：</span><span>最后单击</span><span>Save Config</span><span>以应用更改。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Tue, 02 May 2023 08:19:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置发货起点]]></title>
      <link>https://www.360magento.com/blog/set-shipping-point-of-origin-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Set_Shipping_Point_of_Origin_in_Magento_2">在 Magento 2 中设置发货起点的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>Magento 2 管理面板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>现在从左侧窗格中展开</span><span>SALES</span><span>并选择</span><span>Shipping Settings&nbsp;</span><span>。</span></p>
<p><span>第 4 步：</span><span>展开</span><span>来源</span><span>选项并输入国家、地区/州、邮政编码、城市、街道地址和街道地址第 2 行。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/shipping-point-of-origin-configuration.png" /></span></p>]]></description>
      <pubDate>Mon, 01 May 2023 08:13:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置结帐选项]]></title>
      <link>https://www.360magento.com/blog/configure-checkout-options-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Checkout_Options_in_Magento_2">在 Magento 2 中配置结帐选项的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>Magento 2 管理</span><span>仪表板。</span></p>
<p><span>第 2 步：</span><span>转到</span><span>商店 &gt; 设置 &gt; 配置</span><span>。</span></p>
<p><span>第 3 步：</span><span>展开</span><span>SALES</span><span>并选择</span><span>Checkout&nbsp;</span><span>。</span></p>
<p><span>第 4 步：</span><span>现在放大</span><span>Checkout Options&nbsp;</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/checkout-options.png" /></span></p>
<ul>
<li><span>Enable Onepage Checkout &ndash;</span><span>设置 Yes 以允许客户快速完成结帐。</span></li>
<li><span>Allow Guest Checkout &ndash;</span><span>设置 Yes 以允许访客用户在不注册您的 Magento 2 商店帐户的情况下结账。</span><a href="https://magecomp.com/blog/guest-checkout-magento-2/" data-wpel-link="internal"><span><br /></span></a></li>
<li><span>显示帐单地址 &ndash;</span><span>选择在付款方式或付款页面上显示帐单地址的位置。</span></li>
<li><span>启用条款和条件 &ndash;</span><span>如果需要客户同意条款和条件，则设置。</span></li>
<li><span>订单摘要中要显示的最大项目数 -</span><span><span><span>输入一个数字，表示结账时要在订单摘要中显示的项目数。</span><span>默认值为 10。</span></span></span></li>
</ul>]]></description>
      <pubDate>Sun, 30 Apr 2023 09:11:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[将您的 IP 地址添加到 Magento 2 中的白名单]]></title>
      <link>https://www.360magento.com/blog/add-your-ip-address-to-whitelist-magento-2/</link>
      <description><![CDATA[<p>如何在 Magento 2 中将您的 IP 地址添加到白名单。</p>
<p>当您想要启用 Template Path Hints时，您必须将您的 IP 添加到允许列表中，以避免破坏客户的购物体验。您可以从&ldquo;开发人员客户端限制&rdquo;选项将您的 IP 地址添加到允许列表。</p>
<h2><span id="Steps_to_Add_your_IP_Address_to_Whitelist_in_Magento_2">在 Magento 2 中将您的 IP 地址添加到白名单的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到</span><span>Magento 2 管理仪表板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>在左侧面板中，放大</span><span>ADVANCED</span><span>选项并选择</span><span>Developer&nbsp;</span><span>。</span></p>
<p><span>第 4 步：</span><span>现在展开</span><span>Developer Client Restrictions</span><span>部分。</span></p>
<p><span>第 5 步：</span><span>在</span><span>允许的 IP</span><span><span><span>字段中，输入您的 IP 地址。</span><span>如果您有多个 IP，您可以添加所有 IP，并用逗号分隔。</span></span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/IP-address-allow-list.png" /></p>]]></description>
      <pubDate>Sat, 29 Apr 2023 08:08:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：在目录上显示含税和不含税的产品价格]]></title>
      <link>https://www.360magento.com/blog/magento-2-display-product-price-including/</link>
      <description><![CDATA[<h2><span id="Steps_to_Display_Product_Price_Including_Excluding_Tax_on_Catalog_in_Magento_2">在 Magento 2 的目录中显示产品价格（含税和不含税）的步骤：</span></h2>
<p><span>第 1 步：</span><span>从管理面板侧边栏移至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span>展开</span><span>左侧窗格中的</span><span>&ldquo;销售&rdquo;菜单并选择</span><span><span><span>&ldquo;税收&rdquo;</span></span><span><span>选项。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第3步：</span><span>现在放大</span><span>价格显示设置</span><span>选项</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/price-incl-excl-tax-magento-2.png" /></span></p>
<p><span>第 4 步：</span><span>为给定的字段选择合适的。</span></p>
<p><span>在目录中显示产品价格</span></p>
<ul>
<li><span>不含税 &ndash; 它将在目录中显示不含税率的产品价格。</span></li>
<li><span>含税 &ndash; 它将在目录上显示产品价格和税率。</span></li>
<li><span>含税和不含税&mdash;&mdash;它会在目录中显示含税和不含税的产品价格。</span></li>
</ul>
<p><span>显示运费</span></p>
<ul>
<li><span>不含税 - 它将显示不含税率的运费。</span></li>
<li><span>含税 - 它将显示含税率的运费。</span></li>
<li><span>含税和不含税&mdash;&mdash;它将显示含税和不含税的运费。</span></li>
</ul>
<p><span>第 5 步：</span><span>最后，单击</span><span>保存配置</span><span>按钮以应用更改。</span></p>]]></description>
      <pubDate>Fri, 28 Apr 2023 09:07:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中配置订单、发票、贷记凭证显示设置]]></title>
      <link>https://www.360magento.com/blog/rder-invoice-credit-memo-display-settings-in-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Configure_Order_Invoice_Credit_Memo_Display_Settings_in_Magento_2">在 Magento 2 中配置订单、发票、贷记凭证显示设置的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>管理仪表板</span><span>并导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：现在，</span><span>从左侧菜单面板中</span><span>放大</span><span>SALES ，然后选择</span><span><span><span>Tax</span></span><span><span>选项。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第 3 步：</span><span>展开</span><span>订单、发票、贷记凭证显示设置</span><span>选项。</span></p>
<p><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/price-display-settings-magento-2.png" /></span></p>
<p><span>第 4 步：</span><span>应用所需的设置</span></p>
<ul>
<li><span>显示价格 &ndash;</span><span>确定如何显示价格 &ndash; 不含税、含税或含税和不含税。</span></li>
<li><span>显示小计 &ndash;</span><span>确定如何显示小计 &ndash; 不含税、含税或含税和不含税。</span></li>
<li><span>显示运费 &ndash;</span><span>确定如何显示运费 &ndash; 不含税、含税或含税和不含税。</span></li>
<li><span>另外显示不含税的订单总计&mdash;&mdash;</span><span>确定订单总计是否必须显示为含税或不含税。</span></li>
<li><span>显示完整的税务摘要&mdash;&mdash;</span><span>确定是否必须显示完整的税务摘要。</span></li>
<li><span>显示零税小计 &ndash;</span><span>确定是否必须显示零税小计。</span></li>
</ul>
<p><span>第 5 步：</span><span>完成后，点击</span><span>&ldquo;保存配置&rdquo;</span><span>按钮。</span></p>
<p><span>&nbsp;</span></p>
<p><span></span></p>]]></description>
      <pubDate>Thu, 27 Apr 2023 08:04:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 中启用自动备份]]></title>
      <link>https://www.360magento.com/blog/automatic-backup-magento-2/</link>
      <description><![CDATA[<h2><span>Magento 2 在管理配置中提供了设置自动备份的选项。管理员可以备份数据库、系统文件、媒体文件等。Magento 使用 GZ 格式压缩数据库备份，使用 TGZ 格式压缩系统备份和数据库和媒体备份。</span></h2>
<h2><span id="Steps_to_Enable_Automatic_Backup_in_Magento_2">在 Magento 2 中启用自动备份的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>Magento 管理仪表板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>Stores &gt; Settings Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>放大</span><span>高级</span><span>菜单并选择</span><span>系统</span><span>。</span></p>
<p><span>第 4 步：</span><span>现在展开</span><span>备份设置</span><span>部分并将</span><span>启用备份</span><span>字段设置为是。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/automatic-backup-configuration.png" /></p>
<p>第 5 步：现在，还将启用计划备份字段设置为是。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/enable-scheduled-backup.png" /><br />第 6 步：现在在 Magento 2 中应用自动备份所需的设置。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/scheduled-backup-settings.png" /><br />计划的备份类型 -从可用的下拉选项中选择备份类型。它有 4 个选项：数据库、数据库和媒体、系统和系统（不包括媒体）。<br />开始时间 &ndash;以 hh:mm:ss 格式设置备份时间。<br />频率 &ndash;将备份频率设置为每日、每周或每月。<br />维护模式&mdash;&mdash;如果要在备份时启用维护模式，选择是；否则，将其设置为否。<br />第 7 步：最后，点击屏幕右上角的&ldquo;保存配置&rdquo;按钮。</p>]]></description>
      <pubDate>Wed, 26 Apr 2023 09:00:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中更改索引模式]]></title>
      <link>https://www.360magento.com/blog/change-index-mode-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Change_Index_Mode_in_Magento_2">在 Magento 2 中更改索引模式的步骤：</span></h2>
<p><span>第 1 步：</span><span>要更改 Magento 2 中的索引模式，请首先登录到您的 Magento 2 管理面板。</span></p>
<p><span>第 2 步：</span><span>从屏幕左侧的菜单面板中，选择</span><span>系统 &gt; 工具 &gt; 索引管理</span><span>。</span></p>
<p><span>第 3 步：</span><span>现在选择要更改模式的索引器。</span></p>
<p><span>第 4 步：</span><span>从</span><span>&ldquo;操作&rdquo;</span><span>下拉列表中选择所需的选项。</span></p>
<ul>
<li><span>保存时更新&mdash;&mdash;</span><span><span><span>这是索引的默认操作。</span><span>使用保存时更新模式，索引会在管理面板中发生任何更改后更新。</span></span></span></li>
<li><span>按计划更新 &ndash;</span><span><span><span>这是索引的推荐操作。</span><span>使用按计划更新，索引根据 cron 作业进行更新。</span></span></span></li>
</ul>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/index-management.png" /></span></span></span></p>
<p><span><span>第 5 步：</span><span>选择操作后，单击</span><span>提交</span><span>按钮应用更改。</span></span></p>]]></description>
      <pubDate>Tue, 25 Apr 2023 08:16:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[启用区分大小写的管理员登录]]></title>
      <link>https://www.360magento.com/blog/magento-2-enable-case-sensitive-admin-login/</link>
      <description><![CDATA[<h2><span id="Steps_to_Enable_Case_Sensitive_Admin_Login_in_Magento_2">在 Magento 2 中启用区分大小写的管理员登录的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的 Magento 2 管理面板。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>现在，放大</span><span>ADVANCED</span><span>选项并选择</span><span>Admin&nbsp;</span><span>。</span></p>
<p><span>第四步：</span><span>然后，展开</span><span>安全</span><span>选项。</span></p>
<p><span>第 5 步：将</span><span><span>登录区分大小写字段</span></span><span>设置</span><span>为是。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/case-sensitive-admin-login.png" /></span></p>]]></description>
      <pubDate>Mon, 24 Apr 2023 08:15:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中查看导入历史]]></title>
      <link>https://www.360magento.com/blog/import-history-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_View_the_Import_History_in_Magento_2">在 Magento 2 中查看导入历史记录的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到</span><span>Magento 2 管理面板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>系统 &gt; 数据传输 &gt; 导入历史记录</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/import-history-magento-2.png" /></span></p>
<p><span><span>第 3 步：</span><span>您可以查看有关导入历史记录的详细信息。</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/import-history-details.png" /></span></span></p>
<p></p>
<ul>
<li><span>ID &ndash;</span><span>特定导入的 ID。</span></li>
<li><span>开始日期和时间 &ndash;</span><span>导入发生的日期和时间。</span></li>
<li><span>用户 &ndash;</span><span>进行导入的用户。</span></li>
<li><span>导入的文件&mdash;&mdash;</span><span>从这里下载导入的文件。</span></li>
<li><span>错误文件 &ndash;</span><span>导入发生时的错误文件（如果有）。</span></li>
<li><span>执行时间&mdash;&mdash;</span><span>导入过程的持续时间。</span></li>
<li><span>摘要 &ndash;</span><span>创建、删除、更新或发生错误的项目数。</span></li>
</ul>
<p><span>第四步：</span><span>点击导入文件栏下的</span><span>下载</span><span>，下载导入的文件。</span></p>]]></description>
      <pubDate>Sun, 23 Apr 2023 08:06:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置全页缓存]]></title>
      <link>https://www.360magento.com/blog/configure-full-page-cache-magento-2/</link>
      <description><![CDATA[<h2><span id="What_is_Full_Page_Cache_in_Magento_2">Magento 2 中的全页缓存是什么？</span></h2>
<p><span><span><span>Magento 2 全页缓存有助于减少服务器的加载时间并提高响应时间。</span><span>全页缓存有助于快速显示类别、产品和 CMS 页面。</span><span>全页缓存还有助于改善客户体验和转化率。</span></span></span></p>
<p><span><span><span>如果没有缓存，每个页面将运行代码块并从数据库中检索数据。</span><span>使用全页缓存，加载时间减少，页面检索数据更快。&nbsp;</span></span></span></p>
<h2><span id="How_does_Magento_2_Full_Page_Cache_Work">Magento 2 全页缓存如何工作？</span></h2>
<p><span><span><span>当您打开网页时，会向服务器发送生成页面内容的请求。</span><span>这个过程需要一些时间。</span><span>服务器不存储页面内容，并且每当有人访问该页面时都必须重新生成完整的页面。</span></span></span></p>
<p><span><span><span>当您使用完整页面缓存时，Magento 会在页面首次加载时在系统中保留该页面的副本。</span><span>因此，当第二次触发该页面时，它加载速度更快，因为它在缓存中包含副本。</span></span></span></p>
<h2><span id="Steps_to_Configure_Full_Page_Cache_in_Magento_2">在 Magento 2 中配置全页缓存的步骤：</span></h2>
<p><span>第 1 步：</span><span>在管理面板中，导航至</span><span>Store &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span>展开</span><span>&ldquo;高级&rdquo;选项</span><span>卡并选择</span><span>&ldquo;系统&rdquo;&nbsp;</span><span>。</span></p>
<p><span>第 3 步：</span><span>现在放大</span><span>Full Page Cache</span><span>选项。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/Configure-Full-Page-Cache.png" /></span></p>
<ul>
<li><span>缓存应用程序</span><span>&ndash; 选择以下选项之一：</span></li>
</ul>
<ol>
<li><span>内置缓存</span><span>&mdash;&mdash;在开发模式下使用。</span></li>
<li><span>Varnish Cache&nbsp;</span><span>&ndash; 这用于生产模式，是缓存的推荐选项。</span></li>
</ol>
<ul>
<li><span>公共内容的 TTL&nbsp;</span><span><span><span>&ndash; 设置页面缓存超时。</span><span>它的默认值为 86400。</span></span></span></li>
</ul>
<p><span>第四步：如果</span><span><span><span>在</span></span><span><span>Caching Application字段中</span></span></span><span>选择了</span>&nbsp;<span><span>Varnish Cache</span></span><span>选项</span><span><span><span>，则必须进行</span></span><span><span>Varnish Configuration</span></span><span><span>设置。</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/Configure-Varnish-Cache.png" /></span></span></span></p>
<ul>
<li><span>访问列表</span><span><span><span>&mdash;&mdash;输入以逗号&ldquo;,&rdquo;分隔的IP地址，可以清除Varnish配置生成配置文件。</span><span>访问列表的默认值为 localhost。</span></span></span></li>
<li><span>后端主机</span><span><span><span>&ndash; 输入生成配置文件的后端主机的 IP 地址。</span><span>后端主机的默认值为 localhost。</span></span></span></li>
<li><span>后端端口</span><span><span><span>&mdash;&mdash;确定配置文件生成的后端端口。</span><span>默认后端端口值为 8080。</span></span></span></li>
<li><span>宽限期</span><span><span><span>- 以秒为单位指定宽限期以生成配置文件。</span><span>默认宽限期值为 300。</span></span></span></li>
<li><span>导出配置</span><span>&mdash;&mdash;根据您使用的 Varnish 版本单击适当的按钮以导出 varnish.vcl 文件中的配置。</span></li>
</ul>
<p><span>第 5 步：</span><span>完成后，单击</span><span>&ldquo;保存配置&rdquo;</span><span>按钮。</span></p>]]></description>
      <pubDate>Sat, 22 Apr 2023 08:14:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加货币符号]]></title>
      <link>https://www.360magento.com/blog/add-currency-symbol-magento-2/</link>
      <description><![CDATA[<h2><span id="Steps_to_Add_Currency_Symbol_in_Magento_2">在 Magento 2 中添加货币符号的步骤：</span></h2>
<p><span>第 1 步：</span><span>从您的 Magento 2 商店的管理面板，转到</span><span>Stores &gt; Currency &gt; Currency Symbols&nbsp;</span><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/currency-symbol-configuration.png" /></span></p>
<p><span>第 2 步：</span><span><span><span>添加到您商店的货币将显示在这里。</span><span>如果您想要自定义货币符号，请取消选中使用标准复选框并输入货币符号。</span><span>选中使用标准以使用货币的标准符号。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/add-currency-symbol.png" /></span></p>
<p><span>在这里，我为美元添加了自定义货币符号。&nbsp;</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/custom-currency-symbol.png" /></span></p>
<p><span>第 3 步：</span><span>完成更改后，单击</span><span>右上角的</span><span>保存货币符号按钮。</span><span><span></span></span></p>
<p><span>注意：</span><span>确保您刷新 Magento 缓存以在前端应用更改。</span></p>
<p><span>输出：</span></p>
<p><span><span><span>现在检查您的 Magento 2 店面。</span><span>您可以看到自定义货币符号已成功应用。</span></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/custom-currency-symbol-frontend.png" /></span></p>
<p></p>]]></description>
      <pubDate>Fri, 21 Apr 2023 08:20:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置客户帐户选项]]></title>
      <link>https://www.360magento.com/blog/customer-account-options-magento-2/</link>
      <description><![CDATA[<p><span>从注册到售后服务，客户在您的 Magento 2 商店的旅程必须得到优化。</span><span>使用客户帐户配置，商店管理员可以轻松管理客户。</span><span>Magento 2 为客户管理提供了多种客户配置选项。</span></p>
<h2><span id="Steps_to_Setup_Customer_Account_Options_in_Magento_2">在 Magento 2 中设置客户帐户选项的步骤：</span></h2>
<p><span>第 1 步：</span><span>从</span><span>管理仪表板</span><span><span><span>。</span><span>转到</span></span></span><span>Stores &gt; Settings &gt; Configuration&nbsp;</span><span>。</span></p>
<p><span>第 2 步：现在</span><span>从左侧面板</span><span>展开</span><span>CUSTOMERS选项卡并选择</span><span><span><span>Customer Configuration&nbsp;</span></span><span><span>。</span></span></span><span><span></span></span><span><span></span></span><span><span></span></span></p>
<p><span>第 3 步：</span><span>现在扩大</span><span>Create New Account Options&nbsp;</span><span>。</span><br /><img src="https://www.360magento.com/media/wysiwyg/configuration-steps-1.png" /><br /><span>第 4 步：</span><span>现在根据需要应用设置。</span><br /><img src="https://www.360magento.com/media/wysiwyg/customer-account-options-2.png" /></p>
<ul>
<li><span>启用自动分配到客户组：</span><span>确定客户是否分配到默认客户组。</span></li>
<li><span>默认组：</span><span><span><span>设置默认客户组。</span></span></span></li>
<li><span>禁用基于 VAT ID 的自动组更改的默认值：</span><span>选择是否根据 VAT ID 自动更改客户组。</span></li>
<li><span>在店面显示增值税号：</span><span>设置增值税号是否对前面的客户可见。</span></li>
<li><span>Email is required field for Admin order creation：</span><span>确定在为新客户创建管理订单时是否需要电子邮件。</span></li>
<li><span>默认电子邮件域：</span><span>设置默认电子邮件域。</span></li>
<li><span>默认欢迎电子邮件：</span><span>用于默认欢迎电子邮件的电子邮件模板。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/customer-account-options-1.png" /></span></p>
<ul>
<li><span>Default Welcome Email Without Password：</span><span>默认的欢迎电子邮件模板，用于创建没有密码的客户。</span></li>
<li><span>电子邮件发件人：</span><span>从此处选择发件人电子邮件。</span></li>
<li><span>需要电子邮件确认：</span><span>确定是否需要确认才能创建帐户。</span></li>
<li><span>确认链接电子邮件：</span><span>用于确认电子邮件的电子邮件模板。</span></li>
<li><span>欢迎电子邮件：</span><span>帐户确认后，用于欢迎消息的电子邮件模板。</span></li>
<li><span>生成人性化的客户 ID：</span><span>用于输入和存储增值税 ID 的字段是否从店面可见。</span></li>
</ul>
<p><span>最后点击</span><span>保存配置</span><span>。</span></p>]]></description>
      <pubDate>Thu, 20 Apr 2023 08:25:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：更新客户资料]]></title>
      <link>https://www.360magento.com/blog/updating-customer-magento2/</link>
      <description><![CDATA[<p>有时管理员需要更新客户信息。管理员可以从管理面板管理所有客户资料。让我们了解更多。</p>
<p>客户资料包含个人详细信息、电子邮件、出生日期、地址、订单和其他信息。在 Magento 2 中，客户可以从&ldquo;我的帐户&rdquo;部分更新他们的信息。允许客户在您的 Magento 2 网站上添加个人资料图片，以提供个性化的用户体验。</p>
<h2><span id="Steps_to_Update_a_Customer_Profile_in_Magento_2">在 Magento 2 中更新客户资料的步骤：</span></h2>
<p><span>第 1 步：</span><span>登录到您的</span><span>Magento 2 管理面板</span><span>。</span></p>
<p><span>第 2 步：</span><span>导航至</span><span>客户 &gt; 所有客户</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/customer-steps.png" /></span></p>
<p><span><span>第3步：</span><span>从网格中找到客户，点击</span><span><span>操作栏中的</span></span><span>编辑。</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/customer-edit.png" /></span></span></p>
<p><span>第 4 步：</span><span>从左侧面板中选择您要编辑的信息类型并进行必要的更改。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/customer-details.png" /></span></p>
<p><span>客户信息</span></p>
<ul>
<li><span>客户视图</span><span>&mdash;&mdash;显示客户的个人信息。</span></li>
<li><span>帐户信息</span><span>&mdash;&mdash;它提供有关客户的详细信息，管理员可以在其中编辑个人详细信息、出生日期、电子邮件并将客户关联到网站。</span></li>
<li><span>地址</span><span>&mdash;&mdash;它允许编辑默认的账单地址和送货地址，甚至可以添加新地址。</span></li>
<li><span>订单</span><span>- 它包含客户订单的详细信息。</span></li>
<li><span>购物车</span><span><span><span>&mdash;&mdash;显示客户的购物车。</span><span>这意味着产品当前在购物车中并且尚未购买。</span></span></span></li>
<li><span>时事通讯</span><span>- 它显示发送给客户的所有电子邮件。</span></li>
<li><span>账单协议</span><span>&ndash; 包含客户与商店之间的所有 PayPal 账单协议。&nbsp;</span></li>
<li><span>产品评论</span><span>&ndash; 它显示客户提交的产品评论。</span></li>
<li><span>愿望清单</span><span>&mdash;&mdash;它显示了客户希望购买并可以稍后添加到购物车的产品列表。</span></li>
</ul>
<p><span>第 5 步：</span><span>完成后，单击</span><span>&ldquo;保存客户&rdquo;</span><span>按钮。</span></p>
<p><span>&nbsp;</span></p>]]></description>
      <pubDate>Wed, 19 Apr 2023 08:21:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何刷新 Magento 2 中的产品图片缓存]]></title>
      <link>https://www.360magento.com/blog/flush-cache-magento-2/</link>
      <description><![CDATA[<p>Magento 2 中的缓存管理有助于提高网站的性能。Magento 缓存有多种类型。其中之一是图像缓存。每当用户上传产品图片、为产品图片添加水印或调整其大小时，更改都不会反映在前端。那时，管理员需要刷新目录图像缓存。</p>
<h2><span id="Steps_to_Flush_the_Product_Image_Cache_in_Magento_2">在 Magento 2 中刷新产品图像缓存的步骤：</span></h2>
<p><span>第 1 步：</span><span>从</span><span>Admin Dashboard</span><span>导航至</span><span>System &gt; Tools &gt; Cache Management&nbsp;</span><span>。</span></p>
<p><span>第 2 步：</span><span>在</span><span>附加缓存管理</span><span>部分下，单击</span><span>刷新目录图像缓存</span><span>按钮。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/flush-catalog-images-cache.png" /></span></p>
<p><span><span>第 3 步：</span><span>您将在页面顶部收到图像缓存清理成功的消息。</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/image-cache-clean-success-message.png" /></span></span></p>
<p></p>
<p><span>这将清除预生成的产品图像文件。</span><span>它还将清除存储在 media/catalog/product/cache 中已自动调整大小和水印的目录图像。&nbsp;</span></p>]]></description>
      <pubDate>Tue, 18 Apr 2023 08:24:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何通过管理仪表板更改 Magento 2 加密密钥]]></title>
      <link>https://www.360magento.com/blog/magento-2-encryption-key/</link>
      <description><![CDATA[<p>你好 Magento 朋友们，</p>
<p>在此博客中，我们将了解如何通过管理仪表板更改 Magento 2 加密密钥。</p>
<p>加密密钥保护 Magento 2 中的密码和其他敏感数据。您可以允许 Magento 2 生成自己的加密密钥或自己创建一个。您可以从 Magento 2 管理仪表板中的加密密钥工具更改加密密钥。出于安全原因，最好定期更改加密密钥。</p>
<p></p>
<p>通过管理仪表板更改 Magento 2 加密密钥的步骤：<br />第 1 步：登录到您的Magento 2 管理面板。</p>
<p>第 2 步：从侧边栏菜单导航至&ldquo;系统&rdquo;&gt;&ldquo;其他设置&rdquo;&gt;&ldquo;管理加密密钥&rdquo; 。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/encryption-key-path.png" /></p>
<p><span>第 3 步：</span><span>执行以下设置</span></p>
<ul>
<li><span><span></span></span><span>将自动生成密钥</span><span>设置</span><span>为</span><span>是以</span><span>生成新密钥。</span></li>
<li><span><span></span></span><span>将自动生成密钥</span><span>设置</span><span>为</span><span>否</span><span>以使用不同的密钥。</span><span>然后在新密钥字段</span><span>中输入您要使用的密钥</span><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/encryption-key-configuration.png" /></span></p>
<p><span><span>第 4 步：</span><span>现在单击</span><span>&ldquo;更改加密密钥&rdquo;</span><span>按钮。</span></span></p>]]></description>
      <pubDate>Mon, 17 Apr 2023 08:15:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何翻译 Magento 2 中的产品字段标签]]></title>
      <link>https://www.360magento.com/blog/translate-product-field-magento-2/</link>
      <description><![CDATA[<p><span>Magento 2 提供了根据商店视图翻译产品字段标签的功能。</span><span>让我们看看如何在 Magento 2 中翻译产品字段标签。</span></p>
<p>在 Magento 2 中翻译产品字段标签的步骤：<br />第 1 步：从您的管理仪表板，导航至Stores &gt; Attributes &gt; Product 。</p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/configuration.png" /></span></p>
<p><span>第 2 步：</span><span>从列表中找到要翻译的属性，然后以编辑模式打开它。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/product-attributes.png" /><br /><span>第 3 步：</span><span>在&ldquo;属性信息&rdquo;下，选择</span><span>&ldquo;管理标签&rdquo;</span><span>并为每个商店视图输入翻译后的标签。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/manage-labels.png" /><br /><span>第 4 步：</span><span>最后，单击</span><span>&ldquo;保存属性&rdquo;</span><span>按钮。</span></p>]]></description>
      <pubDate>Sun, 16 Apr 2023 08:11:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中将产品翻译成其他语言]]></title>
      <link>https://www.360magento.com/blog/translate-products-language-magento-2/</link>
      <description><![CDATA[<p><span>将产品翻译成各种语言有助于改善商店的用户体验。</span><span>最好的部分是在 Magento 2 中，您不需要创建新产品来显示不同语言的产品。</span><span>Magento 提供后端功能，可以轻松地将产品翻译成其他语言。</span></p>
<p>在 Magento 2 中将产品翻译成其他语言的步骤：<br />第 1 步：从管理仪表板导航到目录 &gt; 产品。</p>
<p>第 2 步：选择您想要的产品并在编辑模式下打开它。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/product-edit.png" /></p>
<p><span>第 3 步：</span><span>选择要翻译产品的商店视图。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/store-view.png" /></span></p>
<p></p>
<p><span>第 4 步：</span><span>更改产品名称。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/product-name.png" /></span></p>
<p><span>另外，更改产品说明。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/product-description.png" /></span></p>
<p><span>最后，点击</span><span>保存</span><span>。</span></p>
<p><span><span><span>保存产品后，请检查商店的前端。</span><span>选择商店视图并打开产品。</span><span>您会看到产品已翻译成所选语言。</span></span></span></p>
<p></p>]]></description>
      <pubDate>Sat, 15 Apr 2023 08:08:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何将谷歌分析添加到 Magento 2]]></title>
      <link>https://www.360magento.com/blog/add-google-analytics-to-magento-2/</link>
      <description><![CDATA[<p>Google Analytics 是电子商务企业跟踪网站流量和客户行为的有力工具。如果您在 Magento 2 上经营在线商店，那么将 Google Analytics 集成到您的业务战略中绝对是必不可少的，这样您才能获得有关客户的宝贵见解，并做出明智的、数据驱动的决策，从而改善您的在线形象。使用 Google Analytics，您可以准确了解客户的行为，例如他们正在访问哪些页面、他们在页面上停留了多长时间以及他们来自哪里。此外，您还可以跟踪转化率、销售额和其他关键绩效指标 (KPI)，以更好地了解您的客户群并制定有效的策略来推动更多流量和转化。最终，Google Analytics（分析）可为您提供数据，以便为您的电子商务业务做出最佳决策。</p>
<p>本博客将介绍将 Google Analytics 添加到 Magento 2 的步骤。</p>
<p>第 1 步：创建一个 Google Analytics 帐户<br />如果您仍然需要 Google Analytics 帐户，请转到analytics.google.com并注册。注册后，您需要为您的网站创建一个属性。</p>
<p>第 2 步：获取跟踪代码<br />接下来，您需要获取网站的跟踪代码。转到您的 Google Analytics 帐户的管理部分，然后单击&ldquo;跟踪信息&rdquo;，然后单击&ldquo;跟踪代码&rdquo;。</p>
<p>复制提供的跟踪代码。您将在下一步中需要此代码。</p>
<p>第 3 步：将跟踪代码添加到 Magento 2<br />在您的 Magento 2 管理面板中，转到&ldquo;商店&rdquo;和&ldquo;设置&rdquo;。单击&ldquo;配置&rdquo;，然后转到&ldquo;销售&rdquo;，然后转到&ldquo;Google API&rdquo;。</p>
<p>在&ldquo;Google Analytics&rdquo;下，将您从 Google Analytics 复制的跟踪代码粘贴到&ldquo;GA 代码&rdquo;字段中。然后，为&ldquo;启用&rdquo;选择&ldquo;是&rdquo;，然后单击&ldquo;保存配置&rdquo;。</p>
<p>第 4 步：验证安装<br />要验证安装是否成功，请返回您的 Google Analytics 帐户并点击&ldquo;实时&rdquo;，然后点击&ldquo;概览&rdquo;。如果跟踪代码工作正常，您应该会看到您网站上的活跃用户数。</p>
<p>第五步：开始追踪<br />就是这样！您已经成功地将 Google Analytics 集成到您的 Magento 2 网站中。现在，您可以开始跟踪网站流量和客户行为。您可以在您的 Google Analytics 帐户中查看数据，并使用它来对您的在线商店做出明智的决定。</p>
<p>总之，将 Google Analytics 集成到您的 Magento 2 网站中既快速又简单。您将获得有关您的客户和网站流量的宝贵见解，这可以帮助您做出数据驱动的决策以改善您的在线形象。</p>]]></description>
      <pubDate>Fri, 14 Apr 2023 07:21:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[优化 Magento 性能：增加商店销售额的 10 种方法]]></title>
      <link>https://www.360magento.com/blog/magento-performance-10-ways/</link>
      <description><![CDATA[<p>如何优化 Magento 性能<br />1.启用平面目录<br />启用平面目录以优化 Magento 性能。Magento 使用 EAV 模型以特定方式存储数据，该模型允许自我扩展。但是，这是由于需要将任何请求扩展到商店，从而导致用户产生额外费用。平面目录允许您组合数据，从而加快收集和搜索数据的过程。因此，支持 Magento 的站点可以获得最佳性能。</p>
<p>2. 托管环境<br />将您的商店托管环境更改为服务器以处理您期望的流量。它还必须提供正确数据存储和检索所需的数据使用。重点应该放在 CPU 使用率上，以确定是否需要更换服务器。如果CPU使用率达到100%，说明服务器需要升级。</p>
<p>3. 服务器和缓存<br />您应该在您的站点上启用浏览器缓存，以简化和提高下载速度。这是因为站点可以从浏览器重新加载，而不是每次都向服务器发送请求。为临时数据存储运行内容分发网络 (CDN) 也是一个好主意，让用户可以快速且无问题地使用该站点。Web 应用程序加速器对于缓存特别有用，这些加速器可以将存储数据的检索速度提高 80%。</p>
<p>4.代码优化<br />用户必须进行代码优化。Magento 中的 PHP 优化通常需要像 Zend 这样的加速器。其他方法包括检测创建时可能发生的锁定和删除任何 PHP 模块。用户通常不需要它，但它会占用空间。</p>
<p>5.数据库优化<br />Magento 用户不应使用常规数据库，而应使用查询索引和更广泛的优化方案。它帮助他们的数据库移动得更快，并允许他们更有效地检索信息。数据库管理系统有助于定期加速数据库优化。</p>
<p>6.集成Magento编译功能<br />用户必须集成 Magento 的编译功能。此功能需要正确使用编译器来加快所涉及站点的加载速度。这种 Magento 性能优化技术直接支持自动加载功能。</p>
<p>7. Magento版本维护<br />此外，维护 Magento 版本也很重要。如果更新到最新版本，Magento 优化将变得更加有效。最新版本运行更流畅、更快，因为默认情况下它有许多最新的更新和修复。</p>
<p>8.文件大小标准化<br />这是 Magento 性能优化的另一个关键因素。必须通过确保所有文件、照片、图像和视频的大小使站点和服务器能够轻松处理它们来优化内容。它提供了所有内容都以几乎相同的速度加载，并且没有任何滞后或延迟页面加载。</p>
<p>9.Magento配置<br />配置是必要的，因为平台本身可能有许多未使用的扩展。如果商店最近改变了方向并且只需要一些旧材料，这应该会发生。它是优化 Magento 性能的基本方法之一。</p>
<p>10.自动缩放<br />Magento 的性能优化包括根据需要分配服务器功率的自动缩放。自动缩放允许服务器避免瓶颈，根据需要增加或减少其使用量。当服务器有时使用过多或过少时，它会阻止恒定级别。它还允许任何 Magento 站点在高流量期间使用更多服务器空间。多亏了这一点，一切都顺利进行。</p>
<p>Magento 2 是将近十年前问世的原始 Magento 平台的一个版本。将近四分之一的电子商务网站通过 Magento 运行。因此，Magento 性能优化已成为其流程的关键。用户可以通过多种方式优化 Magento 的性能。这取决于网站。它包括使用的形式和站点的所有者，即用户的技术能力。用户可以更新 Magento 以及他们使用的扩展和模块。它还包括服务器升级、自动缩放或其他形式的优化。</p>
<p>由于 Magento 是一种流行的 CMS，因此优化性能至关重要。因此，这意味着需要优化的 Magento 站点会将客户拒之门外。客户更有可能返回加载速度快并能快速为他们提供所需信息的地方。没有这些东西的站点将把客户拒之门外，因为他们在其他地方总有其他选择。</p>]]></description>
      <pubDate>Thu, 13 Apr 2023 07:17:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2 获取订单信息输出在模板]]></title>
      <link>https://www.360magento.com/blog/get-order-info-to-tmp/</link>
      <description><![CDATA[<p><span>要在 Magento 2 中获取订单信息，您可以在自定义模块或块类中使用以下代码：</span><br /><br /></p>
<pre>&lt;?php
namespace Vendor\Module\Block;

use Magento\Framework\View\Element\Template;
use Magento\Sales\Api\OrderRepositoryInterface;

class OrderInfo extends Template
{
    protected $orderRepository;

    public function __construct(
        Template\Context $context,
        OrderRepositoryInterface $orderRepository,
        array $data = []
    ) {
        $this-&gt;orderRepository = $orderRepository;
        parent::__construct($context, $data);
    }

    public function getOrderInfo($orderId)
    {
        $order = $this-&gt;orderRepository-&gt;get($orderId);
        return $order;
    }
}
</pre>
<p><span>在上面的代码中，我们正在创建一个</span><code>OrderInfo</code><span>扩展</span><code>Template</code><span>类的块类。</span><code>OrderRepositoryInterface</code><span><span>我们正在将用于获取订单信息的构造函数中</span><span>注入。</span><span>我们还定义了一个</span></span><code>getOrderInfo</code><span>方法，该方法将订单 ID 作为参数并返回订单信息。</span></p>
<p><span>要在模板中使用此块，您可以调用该</span><code>getOrderInfo</code><span>方法并传入订单 ID，如下所示：</span><br /><br /></p>
<pre>$orderInfoBlock = $block-&gt;getLayout()-&gt;createBlock('Vendor\Module\Block\OrderInfo');
$order = $orderInfoBlock-&gt;getOrderInfo($orderId);

</pre>
<p><span><span>这里</span></span><code>$orderId</code><span><span>是您要为其检索信息的订单的 ID。</span><span>然后，您可以使用该</span></span><code>$order</code><span><span>对象访问订单的各种属性，如订单号、客户名称、账单和送货地址等。</span></span></p>]]></description>
      <pubDate>Wed, 12 Apr 2023 07:37:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 的自定义模板上使用 Knockout JS]]></title>
      <link>https://www.360magento.com/blog/magento2-Knockout-JS/</link>
      <description><![CDATA[<p><br />在 Magento 2 中，Knockout JS 是一个流行的 JavaScript 库，用于创建动态用户界面。如果您想在 Magento 2 的自定义模板上使用 Knockout JS，可以按照以下步骤操作：<br />1、首先，在您的自定义模板中，确保您已经包含了 Knockout JS 库。您可以在以下位置找到该库：<br />vendor/magento/module-ui/view/base/web/js/lib/knockout/knockout.js</p>
<p>2、接下来，在您的 HTML 文件中，使用 data-bind 属性来绑定 Knockout JS 视图模型。例如，以下代码将使用 Knockout JS 视图模型来显示一个简单的文本输入框：</p>
<p>&lt;div data-bind="scope: 'myViewModel'"&gt;<br /> &lt;input type="text" data-bind="value: myValue"&gt;<br />&lt;/div&gt;</p>
<p>3、然后，创建一个 JavaScript 文件来定义您的 Knockout JS 视图模型。您可以在 Magento 2 中使用 RequireJS 来加载此文件。例如，以下代码将定义一个名为 myViewModel 的 Knockout JS 视图模型，并将 myValue 属性绑定到文本输入框：</p>
<p>define(['knockout'], function(ko) {<br /> return function() {<br /> var self = this;<br /> self.myValue = ko.observable('Hello, World!');<br /> };<br />});</p>
<p>4、最后，在您的 JavaScript 文件中，使用 ko.applyBindings() 函数将 Knockout JS 视图模型绑定到 HTML 元素。例如，以下代码将 myViewModel 绑定到之前定义的 HTML 元素：</p>
<p>define(['knockout', 'Magento_Ui/js/core/app'], function(ko, app) {<br /> return function() {<br /> var self = this;<br /> self.myValue = ko.observable('Hello, World!');<br /> app().applyBindings(self, 'my-custom-template');<br /> };<br />});</p>
<p>在这个例子中，my-custom-template 是您的自定义模板的名称。</p>
<p><br />这些步骤应该可以帮助您在 Magento 2 的自定义模板上使用 Knockout JS。</p>]]></description>
      <pubDate>Tue, 11 Apr 2023 07:05:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何使用API获取magento2的分类数据]]></title>
      <link>https://www.360magento.com/blog/get-magento2-category-example/</link>
      <description><![CDATA[<p>当然！ 以下是如何使用 Magento 2 API 获取分类数据的示例：<br /> 首先，您需要通过获取访问令牌来使用 Magento 2 API 进行身份验证。 您可以通过在请求正文中使用您的管理员用户名和密码向 /rest/V1/integration/admin/token 端点发送 POST 请求来执行此操作：</p>
<pre>POST https://your-magento2-domain.com/rest/V1/integration/admin/token 
Request body: { "username": "your-admin-username", "password": "your-admin-password" } 
</pre>
<p>这将返回一个访问令牌，您需要将其包含在对 API 的后续请求中。 接下来，您可以使用 /rest/V1/products/{sku} 端点获取特定产品的分类数据。 将 {sku} 替换为您感兴趣的产品的 SKU。fields 参数允许您指定要检索的属性：</p>
<pre>GET https://your-magento2-domain.com/rest/V1/products/{sku}?fields=category_ids,custom_attributes

Request headers:
Authorization: Bearer {access-token}
</pre>
<p>这将返回具有产品指定属性的 JSON 对象。 category_ids 属性将包含产品分配到的类别 ID 数组。 custom_attributes 属性将包含一组已分配给产品的自定义属性，包括用于分类的任何属性。 如果需要，您可以使用此信息来检索有关类别和属性的其他信息。 例如，您可以使用 /rest/V1/categories/{categoryId} 端点来获取有关特定类别的信息：</p>
<pre>GET https://your-magento2-domain.com/rest/V1/categories/{categoryId}

Request headers:
Authorization: Bearer {access-token}
</pre>
<p>您可以使用 /rest/V1/products/attributes/{attributeCode} 端点来获取有关特定属性的信息：</p>
<pre>GET https://your-magento2-domain.com/rest/V1/products/attributes/{attributeCode}

Request headers:
Authorization: Bearer {access-token}
</pre>
<p>希望对您有所帮助！</p>]]></description>
      <pubDate>Wed, 05 Apr 2023 08:07:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 API获取首页数据]]></title>
      <link>https://www.360magento.com/blog/how-to-homepage-data/</link>
      <description><![CDATA[<p>Magento 2 是一个功能强大且用途广泛的电子商务平台，它提供了一组广泛的 API 供开发人员使用。 在本文中，我们将探讨如何使用 Magento 2 API 获取首页数据，并提供完整的代码案例。</p>
<p>首先，让我们了解一下 Magento 2 API 的基础知识。 Magento 2 API 基于 REST（Representational State Transfer）架构，这意味着开发人员可以使用 GET、POST、PUT 和 DELETE 等 HTTP 方法与 Magento 2 进行交互。</p>
<p>要使用 Magento 2 API，您需要使用 OAuth 1.0a 协议验证您的 API 请求。 您可以通过导航至 Magento 2 管理面板中的系统 &gt; 集成为您的商店创建 API 凭据。</p>
<p>一旦您验证了您的 API 请求，您就可以使用 Magento 2 API 端点来检索主页数据。 检索主页数据的 API 端点是&ldquo;/V1/cmsPage/search&rdquo;。 此端点以 JSON 格式返回 CMS 页面列表，包括主页。</p>
<p>要使用 Magento 2 API 检索主页数据，您可以使用以下代码：</p>
<p></p>
<pre>$token = 'your_oauth_token_here';
$baseUrl = 'http://your_magento_base_url/rest';
$searchCriteria = [
    'searchCriteria' =--&gt; [
        'filterGroups' =&gt; [
            [
                'filters' =&gt; [
                    [
                        'field' =&gt; 'identifier',
                        'value' =&gt; 'home',
                        'condition_type' =&gt; 'eq'
                    ]
                ]
            ]
        ]
    ]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . '/V1/cmsPage/search');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: OAuth ' . $token
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($searchCriteria));
$result = curl_exec($ch);
curl_close($ch);
$data = json_decode($result, true);
if (!empty($data['items'][0]['content'])) {
    echo $data['items'][0]['content'];
}

</pre>
<p>在上面的代码中，我们首先定义了 OAuth 令牌和 Magento 2 商店 API 的基本 URL。 然后，我们定义搜索条件以使用标识符&ldquo;home&rdquo;检索主页数据。 我们使用 cURL 向&ldquo;/V1/cmsPage/search&rdquo;端点发出 POST 请求，其中包含搜索条件和请求标头中的 OAuth 令牌。 然后我们解码 JSON 响应并输出主页内容（如果存在）。</p>
<p>总之，Magento 2 API 为开发人员提供了一个强大的工具集来与平台交互和检索数据。 使用&ldquo;/V1/cmsPage/search&rdquo;端点，开发人员可以检索主页数据并在他们的自定义应用程序中使用它。 上面的代码示例提供了使用 Magento 2 API 检索主页数据的完整解决方案。</p>]]></description>
      <pubDate>Tue, 04 Apr 2023 08:01:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中的Knockout.js 简介]]></title>
      <link>https://www.360magento.com/blog/knockout-js-magento-2/</link>
      <description><![CDATA[<div class="post-main__content post-content" style="width: 100% !important;">
<p><span>Knockout 是 Magento 2 前端世界中引入的最大变化之一，虽然一开始它真的很难掌握，但最终它会成为一个非常有用的工具，使用起来很有趣。</span></p>
<p><span><span>在您必须根据用户的输入或其他一些操作更新某些内容的情况下，所讨论的库确实很出色。</span><span>它将&ldquo;可观察值&rdquo;带到表中&mdash;&mdash;可以自动更新的变量，并通知所有相关方它们已被修改。</span><span>除此之外，我们还有一种&ldquo;计算&rdquo;类型的函数，它们会在更新其中任何可观察对象时自动触发。</span><span>添加将 html 元素绑定到这些变量的选项，现在应该清楚容易获得的可能性的数量。</span></span></p>
<p><span><span>在本文中，我们将创建一个简单的模块，负责与我们的客户打乒乓球。</span><span>我将向您展示如何：</span></span><br /><span>&ndash; 创建一个简单的前端模块，</span><br /><span>&ndash; 声明并为可观察变量赋值，</span><br /><span>&ndash; 将变量从模板/块/php 传递到 JavaScript，</span><br /><span>&ndash; 在模板中使用 knockout 可观察</span><br /><span>对象， &ndash; 在可观察到的变化。</span></p>
<p><span>让我们从创建模块 Magently_TableTennis 开始，该模块将为主页提供 JavaScript、模板和布局更新。</span></p>
<p>//registration.php</p>
<pre class=" language-php" id="snippet_01"><code class=" language-php"><span class="token delimiter">&lt;?php</span>
\<span class="token scope">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Component<span class="token punctuation">\</span>ComponentRegistrar<span class="token punctuation">::</span></span><span class="token function">register</span><span class="token punctuation">(</span>
    \<span class="token scope">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Component<span class="token punctuation">\</span>ComponentRegistrar<span class="token punctuation">::</span></span><span class="token constant">MODULE</span><span class="token punctuation">,</span>
    <span class="token string">'Magently_TableTennis'</span><span class="token punctuation">,</span>
    <span class="token constant">__DIR__</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
<p>//etc/module.xml</p>
<pre class=" language-xml" id="snippet_02"><code class=" language-xml"><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>config</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span><a class="vglnk" href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow"><span>http</span><span>://</span><span>www</span><span>.</span><span>w3</span><span>.</span><span>org</span><span>/</span><span>2001</span><span>/</span><span>XMLSchema</span><span>-</span><span>instance</span></a><span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:Module/etc/module.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magently_TableTennis<span class="token punctuation">"</span></span> <span class="token attr-name">setup_version</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>0.1.0<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>sequence</span><span class="token punctuation">&gt;</span></span>
            <span class="token comment">&lt;!-- add sequence since we will update cms_index_index layout --&gt;</span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>module</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento_Cms<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>sequence</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>module</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>config</span><span class="token punctuation">&gt;</span></span></code></pre>
<p>And this is where the fun part begins:<br /> //view/frontend/web/js/view/tableTennis.js</p>
<pre class=" language-javascript" id="snippet_03"><code class=" language-javascript"><span class="token comment">//first we have to define modules we want to use in our script</span>
<span class="token function">define</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token string">'uiComponent'</span><span class="token punctuation">,</span>
    <span class="token string">'ko'</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>Component<span class="token punctuation">,</span> ko<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">//we'll make our game a Component to allow someone to easily modify it in the future</span>
    <span class="token keyword">return</span> Component<span class="token punctuation">.</span><span class="token function">extend</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
        initialize<span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token comment">//next line is basically equivalent of parent::__construct() in php </span>
            <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">_super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token comment">//let's divide our component to 2 separate elements</span>
            <span class="token comment">//one responsible for populating our game's interface</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">populateUi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token comment">//and one responsible for the gameplay itself</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">gameplay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">,</span>
        populateUi<span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token comment">//here we are creating an observable array and set its items to ping and pong</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span>userActions <span class="token operator">=</span> ko<span class="token punctuation">.</span><span class="token function">observableArray</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'ping'</span><span class="token punctuation">,</span> <span class="token string">'pong'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token comment">//this observable will be responsible for storing information about currently selected action</span>
            <span class="token comment">//initialMove will be passed from template</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span>selectedAction <span class="token operator">=</span> ko<span class="token punctuation">.</span><span class="token function">observable</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>initialMove<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token comment">//and here we will create an observable without initial value</span>
            <span class="token comment">//that will be responsible for storing computer's action</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span>aiMove <span class="token operator">=</span> ko<span class="token punctuation">.</span><span class="token function">observable</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">,</span>
        gameplay<span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token comment">//assign this to self so we can use it inside a function</span>
            <span class="token keyword">var</span> self <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">;</span>
            <span class="token comment">//handleMove will be fired every time an observable inside it changes</span>
            ko<span class="token punctuation">.</span><span class="token function">computed</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token function">handleMove</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
            <span class="token punctuation">{</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span>self<span class="token punctuation">.</span><span class="token function">selectedAction</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> self<span class="token punctuation">.</span><span class="token function">userActions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                    self<span class="token punctuation">.</span><span class="token function">aiMove</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span><span class="token function">userActions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
                <span class="token keyword">else</span> <span class="token punctuation">{</span>
                    self<span class="token punctuation">.</span><span class="token function">aiMove</span><span class="token punctuation">(</span>self<span class="token punctuation">.</span><span class="token function">userActions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
<p><br /> //view/frontend/layout/cms_index_index.xml</p>
<pre class=" language-xml" id="snippet_04"><code class=" language-xml"><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span><a class="vglnk" href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow"><span>http</span><span>://</span><span>www</span><span>.</span><span>w3</span><span>.</span><span>org</span><span>/</span><span>2001</span><span>/</span><span>XMLSchema</span><span>-</span><span>instance</span></a><span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>referenceContainer</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>top.container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>block</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>\Magento\Framework\View\Element\Template<span class="token punctuation">"</span></span>
                   <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>tabletennis<span class="token punctuation">"</span></span>
                   <span class="token attr-name">template</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magently_TableTennis::tabletennis.phtml<span class="token punctuation">"</span></span>
                   <span class="token attr-name">before</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>-<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>referenceContainer</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span></code></pre>
<p>//view/frontend/templates/tabletennis.phtml</p>
<pre class=" language-php" id="snippet_05"><code class=" language-php"><span class="token markup"><span class="token comment">&lt;!-- data-bind attribute lets us bind knockout entities to our elemets --&gt;</span></span>
<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">data-bind</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>scope: <span class="token punctuation">'</span>tableTennis<span class="token punctuation">'</span><span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
    <span class="token markup"><span class="token comment">&lt;!-- here we create select input with options fetched from userActions observable array --&gt;</span></span>
    <span class="token markup"><span class="token comment">&lt;!-- and bind the selected option to selectedAction observable --&gt;</span></span>
    <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>select</span> <span class="token attr-name">data-bind</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>options: userActions, value: selectedAction<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>select</span><span class="token punctuation">&gt;</span></span></span>
    <span class="token markup"><span class="token comment">&lt;!-- analogically we bind the text of a paragraph element to aiMove --&gt;</span></span>
    <span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span> <span class="token attr-name">data-bind</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text: aiMove<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span>
<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
<span class="token markup"><span class="token comment">&lt;!-- here we initialize our script --&gt;</span></span>
<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text/x-magento-init<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="token punctuation">{</span>
    <span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token comment">// we can specify site elements on which we want to trigger our script ?&gt;</span></span>
    <span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token comment">// * means we launch it only once - for the whole page ?&gt;</span></span>
    <span class="token string">"*"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
        <span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token comment">// this is javascript we are launching ?&gt;</span></span>
        <span class="token string">"Magento_Ui/js/core/app"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
            <span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token comment">// and here we declare components of Magento_Ui/js/core/app ?&gt;</span></span>
            <span class="token string">"components"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
                <span class="token string">"tableTennis"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
                    <span class="token string">"component"</span><span class="token punctuation">:</span> <span class="token string">"Magently_TableTennis/js/view/tableTennis"</span><span class="token punctuation">,</span>
                    <span class="token php"><span class="token delimiter">&lt;?php</span> <span class="token comment">// here we set the initial move of the player ?&gt;</span></span>
                    <span class="token string">"initialMove"</span><span class="token punctuation">:</span> <span class="token string">"ping"</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div id="gtx-trans" style="position: absolute; left: -45px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 03 Apr 2023 08:16:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中展示畅销产品？]]></title>
      <link>https://www.360magento.com/blog/best-seller-products-in-magento-2/</link>
      <description><![CDATA[<h2><span>在 MAGENTO 2 中展示畅销产品的分步过程</span></h2>
<p><span>请按照以下步骤了解如何在您的 Magento 2 商店中展示畅销产品。<br /></span></p>
<p><span>首先，我们需要获得畅销产品集合。</span></p>
<p><span><span>为此，我们需要</span><span>在</span><strong><span>MageDelight/Productslider/Block/文件夹中创建一个名为</span></strong></span><strong>BestSellerProducts.php</strong><span>的块并粘贴以下代码：</span></p>
<p><span>&nbsp;</span></p>
<pre>&lt;?php

namespace MageDelight\Productslider\Block;

use Magento\Catalog\Block\Product\Context;

use Magento\Catalog\Model\Product\Visibility;

use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;

use Magento\Framework\App\Http\Context as HttpContext;

use Magento\Framework\Stdlib\DateTime\DateTime;

use Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory as BestSellersCollectionFactory;

use MageDelight\Productslider\Helper\Data;

/**

 * Class BestSellerProducts

 * @package MageDelight\Productslider\Block

 */

class BestSellerProducts extends AbstractSlider

{

    /**

     * @var BestSellersCollectionFactory

     */

    protected $_bestSellersCollectionFactory;

    /**

     * BestSellerProducts constructor.

     * @param Context $context

     * @param CollectionFactory $productCollectionFactory

     * @param Visibility $catalogProductVisibility

     * @param DateTime $dateTime

     * @param Data $helperData

     * @param HttpContext $httpContext

     * @param BestSellersCollectionFactory $bestSellersCollectionFactory

     * @param array $data

     */

    public function __construct(

        Context $context,

        CollectionFactory $productCollectionFactory,

        Visibility $catalogProductVisibility,

        DateTime $dateTime,

        Data $helperData,

        HttpContext $httpContext,

        BestSellersCollectionFactory $bestSellersCollectionFactory,

        array $data = []

    ) {

        $this-&gt;_bestSellersCollectionFactory = $bestSellersCollectionFactory;

        parent::__construct($context, $productCollectionFactory, $catalogProductVisibility, $dateTime, $helperData, $httpContext, $data);

    }

    /**

     * get collection of best-seller products

     * @return mixed

     */

    public function getProductCollection()

    {

        $productIds = [];

        $bestSellers = $this-&gt;_bestSellersCollectionFactory-&gt;create()

            -&gt;setPeriod('month');

        foreach ($bestSellers as $product) {

            $productIds[] = $product-&gt;getProductId();

        }

        $collection = $this-&gt;_productCollectionFactory-&gt;create()-&gt;addIdFilter($productIds);

        $collection-&gt;addMinimalPrice()

            -&gt;addFinalPrice()

            -&gt;addTaxPercents()

            -&gt;addAttributeToSelect('*')

            -&gt;addStoreFilter($this-&gt;getStoreId())-&gt;setPageSize($this-&gt;getProductsCount());

        return $collection;

    }

}
</pre>
<p><span>之后，我们需要将畅销产品集合插入块中的 phtml 文件中。</span></p>
<p><span><span>为此，在</span><strong><span>MageDelight/HelloWorld/view/frontend/templates/文件夹中创建一个</span></strong></span><strong>list.phtml</strong><span><span>文件</span><span>并粘贴以下代码：</span></span></p>
<pre>
<?php

$collection = $block->getProductCollection();

foreach ($collection as $_product) {

    echo $product->getName() . ' - ' . $product->getProductUrl() . '<br />';

}
</pre>]]></description>
      <pubDate>Sat, 01 Apr 2023 20:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置统一运费运输方式？]]></title>
      <link>https://www.360magento.com/blog/flat-rate-shipping-method-in-magento-2/</link>
      <description><![CDATA[<p><span>Flat rate shipping method是一种运输方式，允许您对任何具有不同尺寸、重量和送货地址的订单收取固定金额的运费。</span></p>
<p><span>它易于配置，在全球范围内受到不同类型的电子商务企业的欢迎。</span></p>
<h2><span>在 MAGENTO 2 中配置统一运费运输方式的步骤</span></h2>
<p><span>首先，打开管理面板并导航到&nbsp;</span><em><strong>Stores &gt; Settings &gt; Configuration</strong></em><span>。</span></p>
<p><span><span>之后，&nbsp;</span><span>&nbsp;从左侧面板&nbsp;打开</span></span><em>&ldquo;销售&rdquo;选项卡，然后单击</em><span></span><em>&ldquo;运输方式&rdquo;</em><span>&nbsp;选项卡。</span></p>
<p><span>然后，单击&nbsp;</span><em>&ldquo;统一费率&rdquo;</em><span>&nbsp;部分并执行以下操作：</span></p>
<ul>
<li><span><span>首先，&nbsp;通过选择</span><em><span>&ldquo;是&rdquo;来</span></em></span><em>&ldquo;启用&rdquo;</em><span><span>&nbsp;免费送货选项&nbsp;</span><span>。</span></span><em><span></span></em><span></span></li>
<li><span><span>接下来，写下&nbsp;</span><span>&nbsp;您要在结帐页面上为免费送货选项显示的</span></span><em>&ldquo;标题&rdquo; 。</em><span></span></li>
<li><span></span><em>然后，在&ldquo;方法名称&rdquo;</em><span><span>字段中写下免费送货选项的说明&nbsp;</span><span>&nbsp;。</span></span></li>
<li><span><span>之后，您需要明确适用统一运费送货方式的条款。</span><span>为此，&nbsp;</span><span>&nbsp;从以下选项之一 设置</span></span><em>&ldquo;类型&rdquo; ：</em><span></span>
<ul>
<li><strong>无：&nbsp;</strong><span>此类型表示运费为零，类似于免费送货方式。</span></li>
<li><strong>按订单：&nbsp;</strong><span>它对整个订单收取固定运费。</span></li>
<li><strong>每件商品：&nbsp;</strong><span><span>它对每件商品收取固定运费。</span><span>最终运费乘以购物车中的商品数量。</span></span></li>
</ul>
</li>
</ul>
<p><span>现在，您需要设置一个&nbsp;</span><em>&ldquo;价格&rdquo;，</em><span>&nbsp;您希望为固定运费收取费用。</span></p>
<p><span>如果您想添加一些额外的手续费，您可以通过&nbsp;在&ldquo;手续费&rdquo;字段中将</span><em>&ldquo;计算手续费&rdquo;</em><span>设置&nbsp;为&nbsp;</span><em>&ldquo;百分比&rdquo;</em><span><span>&nbsp;或&nbsp;</span><em><span>&ldquo;</span></em></span><em>固定&rdquo;</em><span><span>&nbsp;费用&nbsp;来实现</span><span>&nbsp;。</span></span><em><span></span></em><span></span></p>
<p><span></span><em>之后，在&ldquo;显示的错误消息&rdquo;</em><span><span>字段中写一个简短的文本以显示统一运费是否不可用&nbsp;</span><span>&nbsp;。</span></span></p>
<p><span><span>&nbsp;接下来，从以下选项之一</span><span>分配&nbsp;</span></span><em>&ldquo;运送到适用国家/地区&rdquo; ：</em><span></span></p>
<ul>
<li><strong>所有国家：</strong><span>&nbsp;免费送货到世界上每个国家。</span></li>
<li><strong>特定国家：</strong><span>&nbsp;免费送货到特定国家。</span></li>
</ul>
<p><span><span>&nbsp;最后，在结帐页面的送货方式上</span><span>设置</span></span><em>&nbsp;&ldquo;排序顺序&rdquo;字段。</em><span></span></p>
<p><span>现在，单击&nbsp;</span><em>&ldquo;保存配置&rdquo;</em><span>&nbsp;以完成该过程。</span></p>]]></description>
      <pubDate>Fri, 31 Mar 2023 08:28:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置固定费率运输方式]]></title>
      <link>https://www.360magento.com/blog/flat-rate-shipping-method/</link>
      <description><![CDATA[<p>Flat Rate Shipping Method是一种在您的商店配置运输方式的简单解决方案。它对具有不同尺寸或重量或任何送货地址的任何订单收取固定运费。由于易于配置和应用，统一运费受到许多运输商的欢迎。</p>
<p>如果您需要在您的商店收取不同的运费，您可以使用Free Shipping Method和Table Rate Shipping Method来完成。现在，我们将一起学习如何在 Magento 2 中配置统一费率运输方式。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/how-to-configure-flat-rate-shipping-method-magento-2-flat-rate-shipping-configuration.png" /></p>
<p>在 Magento 2 中配置统一费率运输方式的 4 个步骤：<br />在管理面板上，Stores &gt; Settings &gt; Configuration。<br />在左侧面板的 下Sales，选择Shipping Methods选项卡。<br />打开该Flat Rate部分，<br />Enable通过选择是的运输方式。届时，购物车的&ldquo;预估运费和税费&rdquo;部分以及结帐时的&ldquo;运费&rdquo;部分都可以使用统一费率。<br />在结帐页面上设置Title统一运费。<br />Method Name在购物车中计算的运费显示的字段中描述方法。方法名称默认为&ldquo;Fixed&rdquo;。<br />要阐明应用统一运费送货方式的条款，请将 设置Type为以下选项之一：<br />无：此类型的运费为零，类似于免费送货方式。<br />按订单：为整个订单设置固定运费<br />每件商品：为每件商品设置固定运费。费率乘以购物车中的商品数量，无论是否有多个相同或不同的商品。* 提供Price您想要收取统一运费的商品。* 如果您要求收取额外的手续费，请设置Calculate Handling Fee为'固定'或'百分比'，然后在字段中输入您要设置的数字Handling Fee。Displayed Error Message*如果统一运费不可用，请键入短文本。* 设置Ship to Applicable Countries为两个选项之一：<br />所有允许的国家：每个国家都支持免费送货。<br />特定国家/地区：仅选定国家/地区支持统一运费。*Sort Order在结帐页面的送货方式上设置。<br />Save Config去完成。</p>]]></description>
      <pubDate>Wed, 29 Mar 2023 09:22:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 电子邮件模板中使用的默认变量的完整列表]]></title>
      <link>https://www.360magento.com/blog/default-variables-used-in-magento-2-email-templates/</link>
      <description><![CDATA[<p>Magento 2 具有出色的功能，可以在购物周期的每个阶段向客户发送各种电子邮件。电子邮件定制和电子邮件模板是任何在线商店的重要主题。</p>
<p>作为一名开发人员，您可能不记得 Magento 2 中电子邮件模板中使用的每个默认变量。因此，以下列表可能会有所帮助。</p>
<p><img alt="" src="https://www.360magento.com/media/wysiwyg/FireShot-Capture-022---A-Complete-List-Of-Default-Variables-Used-In-Magento-2-Email-Template_---meetanshi.com.png" /></p>]]></description>
      <pubDate>Tue, 28 Mar 2023 09:42:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2.4.6 发行说明 - 重点介绍功能]]></title>
      <link>https://www.360magento.com/blog/magento2-magento2-4-6-new/</link>
      <description><![CDATA[<p>Magento 2.4.6 是一个新的版本，它为 Magento Commerce 和 Magento Open Source 用户提供了一些重要的新功能和修复了一些问题。以下是 Magento 2.4.6 中一些重点的功能介绍：</p>
<p>安全性增强<br />Magento 2.4.6 引入了一些安全性增强功能，包括对多个漏洞的修复，如 SQL 注入、跨站脚本攻击和未经身份验证的重置密码。</p>
<p>Elasticsearch 7.10 支持<br />Magento 2.4.6 增加了对 Elasticsearch 7.10 的支持，这将带来更好的搜索性能和更好的可伸缩性。</p>
<p>支持 PHP 8.0<br />Magento 2.4.6 现在支持 PHP 8.0，这将提高站点的性能和安全性。</p>
<p>集成 Adobe Stock 图像库<br />Magento 2.4.6 现在与 Adobe Stock 图像库集成，这将使站点管理者更轻松地搜索、预览和添加高质量的图像。</p>
<p>支持 Braintree Graph QL<br />Magento 2.4.6 支持 Braintree Graph QL，这意味着你现在可以使用 GraphQL 来处理支付和订单。</p>
<p>修复问题<br />Magento 2.4.6 修复了一些已知问题，包括对 PWA Studio 的修复，提高了整体站点的稳定性和可靠性。</p>
<p>总体来说，Magento 2.4.6 的功能增强和问题修复都有助于提高站点的性能、安全性和可用性。如果你是 Magento Commerce 或 Magento Open Source 用户，升级到 Magento 2.4.6 是值得考虑的。</p>
<div id="gtx-trans" style="position: absolute; left: -66px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 27 Mar 2023 08:07:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2 PWA 的详细安装指南]]></title>
      <link>https://www.360magento.com/blog/magento-pwa-magento2-react/</link>
      <description><![CDATA[<p>好的，下面是 Magento2 PWA 的详细安装指南：</p>
<p>前提条件： Magento 2.3 或更高版本 Node.js 10.14 或更高版本 NPM 6 或更高版本 Yarn 步骤1：安装 Magento PWA Studio 在终端中运行以下命令： bash</p>
<pre>git clone https://github.com/magento/pwa-studio.git
cd pwa-studio
yarn install
</pre>
<p>步骤2：创建 Magento2 PWA 应用程序 在终端中运行以下命令：</p>
<pre>yarn create @magento/pwa</pre>
<p>接下来，您将需要输入 Magento 2 的 URL、管理员用户名和密码。完成后，PWA 应用程序将被创建在 pwa-studio/packages 文件夹下。 步骤3：连接 Magento2 和 PWA Studio 在终端中运行以下命令： bash</p>
<pre>cd packages/your-pwa-name
yarn buildpack create-env-file .env</pre>
<p>然后打开 .env 文件并将 MAGENTO_BACKEND_URL 的值设置为您的 Magento 2 后端 URL。 步骤4：启动 PWA 应用程序 在终端中运行以下命令：</p>
<pre>yarn watch</pre>
<p>此命令将启动 PWA 应用程序，并在本地主机的默认端口上运行。您可以在浏览器中访问此 URL 来查看 PWA 应用程序：http://localhost:8000/。 步骤5：部署 PWA 应用程序 在终端中运行以下命令：</p>
<pre>yarn run build</pre>
<p>此命令将生成一个部署包，可以通过 Web 服务器部署到生产环境中。 以上就是 Magento2 PWA 的详细安装指南，希望能帮助到您。</p>]]></description>
      <pubDate>Sun, 26 Mar 2023 09:38:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[创建一个Magento 2模块。我们可以通过以下命令来创建一个基本的模块骨架]]></title>
      <link>https://www.360magento.com/blog/magento2-create-model-by-code/</link>
      <description><![CDATA[<p>1、创建Magento 2模块</p>
<p>首先，我们需要创建一个Magento 2模块。我们可以通过以下命令来创建一个基本的模块骨架：</p>
<pre>php bin/magento module:create --namespace=YourNamespace --module-name=YourModule</pre>
<p><br />这将在 app/code/YourNamespace/YourModule 目录下创建一个基本的模块骨架。</p>
<p>2、定义模块的路由<br />接下来，我们需要定义一个路由，以便在前端显示产品信息。我们可以通过在我们的模块目录下创建一个路由文件来实现：</p>
<p>在 app/code/YourNamespace/YourModule/etc/frontend/routes.xml 文件中加入以下代码：</p>
<pre>&lt;?xml version="1.0"?&gt;<br />&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;<br /> &lt;router id="standard"&gt;<br /> &lt;route id="yourmodule" frontName="yourmodule"&gt;<br /> &lt;module name="YourNamespace_YourModule"/&gt;<br /> &lt;/route&gt;<br /> &lt;/router&gt;<br />&lt;/config&gt;</pre>
<p><br />3、创建控制器<br />现在我们需要创建一个控制器，用于处理路由并返回产品信息。我们可以在 app/code/YourNamespace/YourModule/Controller/Index 文件夹下创建一个名为Index的控制器，并添加以下代码：</p>
<p>&lt;?php<br />namespace YourNamespace\YourModule\Controller\Index;</p>
<pre>use Magento\Framework\App\Action\Action;<br />use Magento\Framework\App\Action\Context;<br />use Magento\Framework\View\Result\PageFactory;</pre>
<p>class Index extends Action<br />{<br /> protected $resultPageFactory;</p>
<p>public function __construct(Context $context, PageFactory $resultPageFactory)<br /> {<br /> parent::__construct($context);<br /> $this-&gt;resultPageFactory = $resultPageFactory;<br /> }</p>
<p>public function execute()<br /> {<br /> $resultPage = $this-&gt;resultPageFactory-&gt;create();<br /> $resultPage-&gt;getConfig()-&gt;getTitle()-&gt;set(__('Product Information'));</p>
<p>return $resultPage;<br /> }<br />}</p>
<p><br />4、创建布局文件<br />我们还需要创建一个布局文件，用于定义前端页面的内容。我们可以在 app/code/YourNamespace/YourModule/view/frontend/layout 文件夹下创建一个名为yourmodule_index_index.xml的文件，并添加以下代码：</p>
<pre><br />&lt;?xml version="1.0"?&gt;<br />&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;<br /> &lt;body&gt;<br /> &lt;referenceContainer name="content"&gt;<br /> &lt;block class="Magento\Catalog\Block\Product\View"<br /> name="yourmodule.product.info"<br /> template="YourNamespace_YourModule::product_info.phtml"/&gt;<br /> &lt;/referenceContainer&gt;<br /> &lt;/body&gt;<br />&lt;/page&gt;</pre>
<p>5、创建模板文件<br />最后，我们需要创建一个模板文件，用于显示产品信息。我们可以在 app/code/YourNamespace/YourModule/view/frontend/templates 文件夹下创建一个名为product_info.phtml的文件，并添加以下代码：</p>
<pre>&lt;h1&gt;&lt;?php echo $block-&gt;getProduct()-&gt;getName(); ?&gt;&lt;/h1&gt;<br />&lt;p&gt;&lt;?php echo $block-&gt;getProduct()-&gt;getDescription(); ?&gt;&lt;/p&gt;</pre>
<p>6、清除缓存</p>]]></description>
      <pubDate>Sat, 25 Mar 2023 08:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何利用magento后台去维护商城的商品]]></title>
      <link>https://www.360magento.com/blog/magento2-about-procut-edit/</link>
      <description><![CDATA[<p>当您在使用Magento 2时，您需要维护您的商品以确保您的在线商店保持最新和有吸引力。以下是一些指南，可帮助您维护您的Magento 2商品。</p>
<p>## 1. 添加新商品</p>
<p>要添加新商品，请按照以下步骤操作：</p>
<p>1. 登录Magento 2后台。<br />2. 转到&ldquo;产品&rdquo;&gt;&ldquo;目录&rdquo;。<br />3. 点击&ldquo;添加产品&rdquo;按钮。<br />4. 填写产品的名称、价格、描述、图像等信息。<br />5. 点击&ldquo;保存并继续编辑&rdquo;按钮。<br />6. 添加其他详细信息，例如库存、税收、相关产品等。<br />7. 点击&ldquo;保存产品&rdquo;按钮。</p>
<p>## 2. 编辑商品</p>
<p>要编辑现有商品，请按照以下步骤操作：</p>
<p>1. 登录Magento 2后台。<br />2. 转到&ldquo;产品&rdquo;&gt;&ldquo;目录&rdquo;。<br />3. 找到您要编辑的产品，并点击&ldquo;编辑&rdquo;按钮。<br />4. 修改您需要更改的任何信息。<br />5. 点击&ldquo;保存产品&rdquo;按钮。</p>
<p>## 3. 删除商品</p>
<p>要删除现有商品，请按照以下步骤操作：</p>
<p>1. 登录Magento 2后台。<br />2. 转到&ldquo;产品&rdquo;&gt;&ldquo;目录&rdquo;。<br />3. 找到您要删除的产品，并点击&ldquo;删除&rdquo;按钮。<br />4. 在确认对话框中，点击&ldquo;确认&rdquo;。</p>
<p>## 4. 管理商品属性</p>
<p>Magento 2允许您为商品定义属性，例如颜色、大小等。要管理商品属性，请按照以下步骤操作：</p>
<p>1. 登录Magento 2后台。<br />2. 转到&ldquo;产品&rdquo;&gt;&ldquo;属性&rdquo;&gt;&ldquo;属性&rdquo;。<br />3. 找到您要编辑的属性，并点击&ldquo;编辑&rdquo;按钮。<br />4. 修改您需要更改的任何信息。<br />5. 点击&ldquo;保存属性&rdquo;按钮。</p>
<p>## 5. 管理商品分类</p>
<p>Magento 2允许您为商品定义分类，例如衣服、鞋子等。要管理商品分类，请按照以下步骤操作：</p>
<p>1. 登录Magento 2后台。<br />2. 转到&ldquo;产品&rdquo;&gt;&ldquo;目录&rdquo;。<br />3. 找到您要编辑的产品，并点击&ldquo;编辑&rdquo;按钮。<br />4. 在&ldquo;分类&rdquo;选项卡中，选择或取消选择适当的分类。<br />5. 点击&ldquo;保存产品&rdquo;按钮。</p>
<p>以上是一些基本的Magento 2商品维护指南。如果您需要更多帮助，请联系我们的团队。</p>
<div id="gtx-trans" style="position: absolute; left: -80px; top: -14.5px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Fri, 24 Mar 2023 08:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 可定制的选项]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Customizable-Options/</link>
      <description><![CDATA[<p><span><span>向产品添加可自定义的选项是提供带有文本、选择和日期输入类型的选项选择的简单方法。</span><span>如果您的库存需求很简单，可定制的选项是一个很好的解决方案。</span><span>但是，由于它们基于单个 SKU 的变体，因此它们不能用于管理库存或作为价格规则条件的基础。</span><span>如果您有多个具有相同选项的产品，您可以设置一个产品并将选项导入到其他产品。</span></span></p>
<p><span>当客户购买带有可定制选项的产品时，每个所选选项的描述都会显示在产品描述下方，并且任何相关的加价（或降价）都会自动应用于该商品的价格。</span></p>
<p><img alt="具有可定制选项的产品详细信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-customizable-option-product-detail.png?lang=en" /></p>
<p><span><span>如果购买触发了购物车价格规则，则初始计算首先适用于产品价格，其次适用于行项目价格，并对适用的可定制选项进行任何调整。</span><span>在以下示例中，客户以 74.00 美元的价格购买了一个行李袋，外加一个可定制的字母组合选项。</span><span>14.80 美元的加价应用于基本产品价格，调整后的价格显示为 88.80 美元。</span><span>在这种情况下，购买行李袋会触发基于产品 SKU 的购物车价格规则，并对购买应用折扣，外加免费送货。</span><span>虽然购物车价格规则不是由可定制选项触发的，但它会将折扣应用于购物车内容，其中包括可定制选项的标记。</span></span></p>
<p><img alt="带有可定制选项和价格规则的购物车" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-customizable-option-cart-price-rule.png?lang=en" /></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>目录价格规则折扣不适用于固定价格可定制选项。</span></p>
</div>
</div>
<h2 id="create-customizable-options"><span>创建可定制的选项</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>可</span><em>自定义选项</em><span>部分。</span></p>
</li>
<li>
<p><span>单击</span><span>添加选项</span><span>。</span></p>
<p><img alt="可定制的选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-customizable-options.png?lang=en" /></p>
</li>
<li>
<p><span>在左上角，单击</span><span>&ldquo;新建选项&rdquo;</span><span>。</span></p>
</li>
<li>
<p><span>完成新的选项设置：</span></p>
<ul>
<li>
<p><span>对于</span><span>Option Title</span><span>，输入选项的名称。</span></p>
</li>
<li>
<p><span>设置数据输入的</span><span>选项类型</span><span>。</span></p>
</li>
<li>
<p><span>如果该选项不是购买产品所必需的，请取消选中</span><span>Required</span><span>复选框。</span></p>
</li>
</ul>
<p><img alt="新选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-customizable-options-new-option.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>添加新行</span><span>并完成以下操作：</span></p>
<p><img alt="增值" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-customizable-options-add-values.png?lang=en" /></p>
<ul>
<li>
<p><span>对于</span><span>Title</span><span>，为此选项输入一个名称。</span></p>
</li>
<li>
<p><span>对于</span><span>Price</span><span>，输入适用于此选项的基本产品价格的任何加价或减价。</span></p>
</li>
<li>
<p><span>将</span><span>价格类型</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Fixed</code><span>- 变体的价格与基础产品的价格相差一个固定的金额，例如 1 美元。</span></li>
<li><code>Percentage</code><span>- 变体的价格与基础产品的价格相差一个百分比，例如 10%。</span></li>
</ul>
</li>
<li>
<p><span>输入选项的</span><span>SKU</span><span><span>。</span><span>选项 SKU 是添加到产品 SKU 的后缀。</span></span></p>
</li>
<li>
<p><span>如果</span><em>选项类型</em><span>为</span><code>File</code><span><span>，则设置文件的参数。</span><span>对于</span></span><span>Compatible File Extensions</span><span>，输入有效的扩展名作为逗号分隔值（例如</span><code>png, jpg, gif</code><span><span>）。</span><span>对于</span></span><span>最大图像尺寸</span><span>，输入最大图像尺寸（以像素为单位）。</span></p>
</li>
<li>
<p><span>要更改选项的顺序，请单击</span><span>更改顺序</span>&nbsp;<img alt="排序顺序图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-sort-order.png?lang=en" /><span>图标并将选项拖动到列表中的新位置。</span></p>
</li>
</ul>
<p><img alt="更改选项顺序" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-customizable-options-move.png?lang=en" /></p>
<p><span>对要添加的每个选项重复此步骤。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="import-customizable-options"><span>导入可自定义的选项</span></h2>
<ol>
<li>
<p><span>在</span><em>可自定义选项</em><span>部分，单击</span><span>导入选项</span><span>。</span></p>
<p><img alt="可定制的选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-customizable-options.png?lang=en" /></p>
</li>
<li>
<p><span>具有可定制选项的所有产品都出现在网格中。</span></p>
</li>
<li>
<p><span>在列表中，选中包含您要导入的选项的产品的复选框。</span></p>
</li>
<li>
<p><span>单击</span><span>导入</span><span>。</span></p>
</li>
<li>
<p><span>完成后，您可以继续添加更多自定义选项或单击</span><span>保存并关闭</span><span>。</span></p>
</li>
</ol>
<h2 id="input-types"><span>输入类型</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>类型</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>文本</span></td>
<td><span><span>客户可以在其中输入所需信息的输入行或文本框。</span><span>选项：</span></span><br /><span>Field</span><span>&nbsp;- 文本的单行输入字段。</span><br /><span>Area</span><span><span>&nbsp;- 多行输入字段。</span><span>此类型不支持 HTML 等高级格式。</span><span>使用最大字符数来限制可以输入的文本长度，并确保在管理员中正确表示输入的文本。</span></span></td>
</tr>
<tr>
<td><span>文件</span></td>
<td><span>允许客户上传文件。</span></td>
</tr>
<tr>
<td><span>选择</span></td>
<td><span><span>允许客户根据使用的输入类型选择单个选项或多个选项。</span><span>选项：</span></span><br /><span>下拉 -</span><span>选项的下拉列表，只允许一个选择。</span><br /><span>单选按钮</span><span>- 一组只允许一个选择的选项。</span><br /><span>复选框</span><span><span>- 复选框是是/否选项的变体。</span><span>如果产品有多个复选框，则可以进行多项选择。</span></span><br /><span>多项选择</span><span><span>- 接受多项选择的选项下拉列表框。</span><span>要选择多个选项，请按住 Ctrl (PC) 或 Command (Mac) 键并单击每个选项。</span></span></td>
</tr>
<tr>
<td><span>日期</span></td>
<td><span><span>允许客户输入日期或时间或从日历中选择值。</span><span>选项：</span></span><br /><span>Date</span><span><span>&nbsp;- 日期值的输入字段。</span><span>日期可以直接输入字段或从列表或日历中选择。</span><span>输入法和格式由</span></span>日期和时间自定义选项<span>配置决定。</span><br /><span>日期和时间</span><span>- 日期和时间值的输入字段。</span><br /><span>时间</span><span>- 时间值的输入字段。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Tue, 31 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 相关产品、追加销售和交叉销售]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Related-Products-Up-Sells-and-Cross-Sells/</link>
      <description><![CDATA[<p><span>使用&ldquo;</span><em>相关产品&rdquo;、&ldquo;追加销售&rdquo;和&ldquo;交叉销售</em><span><span>&rdquo;部分设置简单的促销块，展示客户可能感兴趣的一系列附加产品。</span><span><br /></span></span></p>
<p><img alt="相关产品、追加销售和交叉销售" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-related-up-sell-cross-sell.png?lang=en" /></p>
<p><span>每个块都包含属于特定选项的产品列表。</span></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>ID</span></td>
<td><span>分配给产品实体的唯一数字标识符。</span></td>
</tr>
<tr>
<td><span>缩略图</span></td>
<td><span>产品缩略图。</span></td>
</tr>
<tr>
<td><span>姓名</span></td>
<td><span>产品名称。</span></td>
</tr>
<tr>
<td><span>状态</span></td>
<td><span><span>指示产品状态。</span><span>选项：</span></span><code>Enabled</code><span>/&nbsp;</span><code>Disabled</code><span><span>。</span><span>禁用的产品不会显示在前端的块中。</span></span></td>
</tr>
<tr>
<td><span>属性集</span></td>
<td><span>用作产品模板的属性集的名称。</span></td>
</tr>
<tr>
<td><span>存货单位</span></td>
<td><span>分配给产品的唯一库存单位。</span></td>
</tr>
<tr>
<td><span>价格</span></td>
<td><span>产品的单价。</span></td>
</tr>
<tr>
<td><span>行动</span></td>
<td><span>选项：</span><code>Remove</code><span><span>。</span><span>从块中删除产品。</span></span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="related-products"><span>相关产品</span></h2>
<p><span><span>除了客户正在查看的项目之外，还应购买相关产品。</span><span>客户只需单击复选框即可将商品放入购物车。</span></span><em>相关产品</em><span><span>块的位置</span><span>因定义的主题和页面布局而异。</span><span>在下面的示例中，</span></span><em>相关产品</em><span>块显示在</span><em>产品视图</em><span><span>页面的底部。</span><span>对于两列布局，</span></span><em>相关产品</em><span>块通常出现在右侧边栏中。</span></p>
<p><img alt="相关产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-product-related-products.png?lang=en" /></p>
<p><span>设置相关产品：</span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>相关</span><span>产品、追加销售和交叉销售</span><span>部分。</span></p>
</li>
<li>
<p><span>单击</span><span>添加相关产品</span><span>。</span></p>
<p><img alt="相关产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-related-up-sell-cross-sell.png?lang=en" /></p>
</li>
<li>
<p><span>使用</span>过滤器控件<span>查找您想要的产品。</span></p>
</li>
<li>
<p><span>在列表中，选中您想要作为相关产品的任何产品的复选框。</span></p>
<p><img alt="相关产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/products-related-add.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>添加所选产品</span><span>。</span></p>
</li>
</ol>
<h2 id="up-sells"><span>追加销售</span></h2>
<p><span><span>追加销售产品是您的客户可能更喜欢的项目，而不是当前考虑的产品。</span><span>作为追加销售提供的商品可能质量更高、更受欢迎或利润率更高。</span><span>追加销售产品出现在产品页面上的标题下，例如</span></span><em>You may also be interested in the following products</em><span>。</span></p>
<p><img alt="追加销售" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-product-upsell.png?lang=en" /></p>
<p><span>选择追加销售产品：</span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>相关</span><span>产品、追加销售和交叉销售</span><span>部分。</span></p>
</li>
<li>
<p><span>点击</span><span>添加追加销售产品</span><span>。</span></p>
<p><img alt="添加追加销售产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-related-up-sell-cross-sell.png?lang=en" /></p>
</li>
<li>
<p><span>使用</span>过滤器控件<span>查找您想要的产品。</span></p>
</li>
<li>
<p><span>在列表中，选中您想要作为追加销售产品的任何产品的复选框。</span></p>
<p><img alt="追加销售产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-up-sell-add.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>添加所选产品</span><span>。</span></p>
</li>
</ol>
<h2 id="cross-sells"><span>交叉销售</span></h2>
<p><span><span>交叉销售商品类似于在收银台旁边放置的冲动购买。</span><span>作为交叉销售提供的产品出现在购物车页面上，就在客户开始结帐流程之前。</span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>要显示或隐藏每个商店视图的交叉销售项目，请参阅</span>结帐 &gt; 购物车<span>选项，称为在购物车中</span><em>显示交叉销售项目</em><span><span>。</span><span>您可能希望在特定销售期间隐藏交叉销售或在商店视图中进行 A/B 测试。</span></span></p>
</div>
</div>
<p><img alt="购物车交叉销售" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-cart-cross-sells.png?lang=en" /></p>
<p><span>选择交叉销售产品：</span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>相关</span><span>产品、追加销售和交叉销售</span><span>部分。</span></p>
</li>
<li>
<p><span>单击</span><span>添加交叉销售产品</span><span>。</span></p>
<p><img alt="添加交叉销售产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-related-up-sell-cross-sell.png?lang=en" /></p>
</li>
<li>
<p><span>使用</span>过滤器控件<span>查找您想要的产品。</span></p>
</li>
<li>
<p><span>在列表中，选中您想要作为交叉销售产品的任何产品的复选框。</span></p>
<p><img alt="交叉销售产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-cross-sell-add.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>添加所选产品</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Mon, 30 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置-搜索引擎优化]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Search-Engine-Optimization/</link>
      <description><![CDATA[<p><em>搜索引擎优化</em>部分指定了搜索引擎用来索引产品的<a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/catalog-urls.html?lang=en">URL 键</a>和元数据字段。虽然一些搜索引擎忽略元关键字，但其他搜索引擎继续使用它们。当前的SEO 最佳做法是在元标题和元描述中加入高价值关键字。</p>
<p><span><span>每个元数据字段的默认值可以根据配置中指定的值自动生成。</span><span>每个字段都包含一个由实际值替换的占位符。</span><span><br /></span></span></p>
<p><img alt="搜索引擎优化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-search-engine-optimization.png?lang=en" /></p>
<h2 id="complete-the-seo-fields"><span>完成 SEO 字段</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>搜索</span><em>引擎优化</em><span>部分。</span></p>
</li>
<li>
<p><span>输入</span><span>URL 密钥</span><span>（可选）。</span></p>
<p><span><span>默认 URL 密钥基于产品名称。</span><span>您可以使用默认值或根据需要更改它。</span><span>有关详细信息，请参阅</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/catalog-urls.html?lang=en">目录 URL</a><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>元标题</span><span>（可选）。</span></p>
<p><span><span>元标题是出现在浏览器窗口顶部的文本。</span><span>您可以使用基于产品名称的默认值，也可以根据需要进行更改。</span></span></p>
</li>
<li>
<p><span>添加</span><span>元关键字</span><span>（可选）。</span></p>
<p><span><span>一些搜索引擎比其他搜索引擎更多地使用元关键字。</span><span>最好输入一些高价值的关键词，以帮助产品获得更多的知名度。</span></span></p>
</li>
<li>
<p><span>输入</span><span>元描述</span><span>。</span></p>
<p><span><span>元描述是出现在搜索结果列表中的文本。</span><span>为获得最佳效果，请输入长度在 150-160 个字符之间的描述。</span></span></p>
</li>
</ol>
<h2 id="field-reference"><span>现场参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th>范围</th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>网址键</span></td>
<td><span>商店视图</span></td>
<td><span><span>确定产品的在线地址。</span><span>URL 键被添加到商店的基本 URL 并出现在浏览器的地址栏中。</span><span>Commerce 最初创建一个默认的、</span></span><em>搜索引擎友好的</em><span><span>URL，该 URL 基于产品名称。</span><span>URL 密钥应全部为小写字符，这些字符之间使用非尾随连字符而不是空格。</span><span>不要</span></span><code>.html</code><span>在 URL 密钥中包含后缀，因为它在配置中进行管理。</span></td>
</tr>
<tr>
<td><span>元标题</span></td>
<td><span>商店视图</span></td>
<td><span><span>标题出现在浏览器的标题栏和选项卡中，也用作搜索引擎结果页面 (SERP) 上的标题。</span><span>元标题对于页面来说应该是唯一的，并且长度少于 70 个字符。</span><span>自动生成的值：</span></span><code>{{name}}</code></td>
</tr>
<tr>
<td><span>元关键字</span></td>
<td><span>商店视图</span></td>
<td><span><span>产品的相关关键词。</span><span>考虑使用客户可能用来查找产品的关键字。</span><span>自动生成的值：</span></span><code>{{name}}</code></td>
</tr>
<tr>
<td><span>元描述</span></td>
<td><span>商店视图</span></td>
<td><span><span>元描述提供搜索结果列表页面的简要概述。</span><span>理想的长度在 150-160 个字符之间，最多 255 个字符。</span><span>虽然对客户不可见，但一些搜索引擎会在搜索结果页面上包含元描述。</span><span>自动生成的值：</span></span><code>{{name}} {{description}}</code></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Sun, 29 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 图片和视频]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Images-and-Videos/</link>
      <description><![CDATA[<p><span>从</span><em>图像和视频</em><span><span>部分，您可以执行基本的图像管理任务，例如上传多张图像、重新排列图像以及控制每张图像的使用方式。</span><span>要对单个图像进行额外控制，您可以在</span></span><em>详细视图</em><span>中打开每个图像。</span></p>
<h2 id="upload-a-new-image"><span>上传新图片</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>图像</span><em>和视频</em><span>部分。</span></p>
<p><img alt="图片和视频" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-simple-images-videos.png?lang=en" /></p>
</li>
<li>
<p><span>如果您准备好添加产品图片，请执行以下操作之一：</span></p>
<ul>
<li>
<p><span>将图像从桌面拖放到</span><em>相机</em><span>(&nbsp;</span><img alt="相机图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-camera.png?lang=en" /><span>) 磁贴上。</span></p>
</li>
<li>
<p><span>单击</span><em>相机</em><span>(&nbsp;</span><img alt="相机图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-camera.png?lang=en" /><span>) 磁贴，选择图像文件，然后单击</span><span>打开</span><span>。</span></p>
</li>
</ul>
</li>
</ol>
<p><span><span>在</span><span>产品图像可用之前，</span></span>占位符图像会出现在目录中。<span></span></p>
<h2 id="image-detail"><span>图像细节</span></h2>
<p><span>添加产品图像时，您可以自定义图像</span><em>详细信息</em><span>窗口中的图像显示。</span></p>
<p><img alt="产品图片" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/image-video.png?lang=en" /></p>
<p><span>为产品设置图像显示选项：</span></p>
<ol>
<li>
<p><span>单击产品图像。</span></p>
</li>
<li>
<p><span>输入</span><span>替代文字</span><span>。</span></p>
</li>
<li>
<p><span>选择显示图像的</span><span>角色</span><span>（一张图像可以选择所有角色）：</span></p>
<ul>
<li><code>Swatch</code></li>
<li><code>Base</code></li>
<li><code>Small</code></li>
<li><code>Thumbnail</code></li>
</ul>
<p><span>默认情况下，为第一个添加的图像选择所有这些角色。</span></p>
<p><img alt="图片详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-image-details.png?lang=en" /></p>
</li>
</ol>
<p><span>要从产品页面隐藏产品图像，请选中</span><span>从产品页面隐藏</span><span>复选框。</span></p>]]></description>
      <pubDate>Sat, 28 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 产品评论]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Product-Reviews/</link>
      <description><![CDATA[<p><em>产品评论</em><span><span>部分列出了客户提交的关于产品的所有评论</span><span>。</span><span>只有在第一次保存新产品后，此部分才会与其他产品信息一起出现。</span></span></p>
<p><img alt="产品评论" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-review.png?lang=en" /></p>
<h2 id="field-reference"><span>现场参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>ID</span></td>
<td><span>为产品评论条目生成的唯一数字 ID</span></td>
</tr>
<tr>
<td><span>已创建</span></td>
<td><span>评价发表日期</span></td>
</tr>
<tr>
<td><span>状态</span></td>
<td><span>查看状态（</span><code>Pending</code><span>、</span><code>Approved</code><span>或</span><code>Not Approved</code><span>）</span></td>
</tr>
<tr>
<td><span>标题</span></td>
<td><span>评论标题</span></td>
</tr>
<tr>
<td><span>昵称</span></td>
<td><span>留下评论的用户的昵称</span></td>
</tr>
<tr>
<td><span>审查</span></td>
<td><span>客户对当前产品的评论</span></td>
</tr>
<tr>
<td><span>能见度</span></td>
<td><span>商店评论中的可见性</span></td>
</tr>
<tr>
<td><span>类型</span></td>
<td><span>留下评论的用户类型（</span><code>Guest</code><span>或</span><code>Customer</code><span>）</span></td>
</tr>
<tr>
<td><span>产品</span></td>
<td><span>审核的产品名称</span></td>
</tr>
<tr>
<td><span>存货单位</span></td>
<td><span>分配给产品的唯一库存单位</span></td>
</tr>
<tr>
<td><span>行动</span></td>
<td><span>在编辑模式下打开产品</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="moderate-reviews-for-a-specific-product"><span>对特定产品的适度评论</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span>找到产品并在编辑模式下将其打开。</span></p>
</li>
<li>
<p><span>滚动到</span><em>产品评论</em><span>部分。</span></p>
</li>
<li>
<p><span>单击&ldquo;</span><span>编辑</span><span>&rdquo;查看带有</span><code>Pending</code><span>状态的产品评论，以查看和编辑详细信息。</span></p>
</li>
<li>
<p><span>设置审核状态：</span></p>
<ul>
<li><span>要批准待定审核，请选择</span><code>Approved</code><span>。</span></li>
<li><span>要拒绝评论，请选择</span><code>Not Approved</code><span>。</span></li>
<li><span>您可以随时将审核状态更改回</span><code>Pending</code><span>。</span></li>
</ul>
</li>
<li>
<p><span>完成后，点击</span><span>保存评论</span><span>。</span></p>
</li>
</ol>
<p><span>具有</span><code>Pending</code><span>和</span><code>Not Approved</code><span>状态的评论不会显示在店面上。</span></p>]]></description>
      <pubDate>Fri, 27 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 配置]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Configurations/</link>
      <description><![CDATA[<p><em>配置</em><span><span>部分列出了产品的</span><span>任何现有变体，可用于生成与可配置产品类型一起使用的变体。</span></span></p>
<p><img alt="配置部分" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-create-configurations.png?lang=en" /></p>
<p><img alt="产品配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurations-hoodie.png?lang=en" /></p>
<h2 id="field-reference"><span>现场参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>图片</span></td>
<td><span>产品图片</span></td>
</tr>
<tr>
<td><span>姓名</span></td>
<td><span>产品的唯一名称</span></td>
</tr>
<tr>
<td><span>存货单位</span></td>
<td><span>基于产品名称</span></td>
</tr>
<tr>
<td><span>价格</span></td>
<td><span>产品价格</span></td>
</tr>
<tr>
<td><span>数量</span></td>
<td><span>每种产品的现有库存量</span></td>
</tr>
<tr>
<td><span>重量</span></td>
<td><span>产品重量</span></td>
</tr>
<tr>
<td><span>状态</span></td>
<td><span>产品状态</span><span>启用</span><span>/</span><span>禁用</span></td>
</tr>
<tr>
<td><span>属性</span></td>
<td><span>一组用于描述产品的属性</span></td>
</tr>
<tr>
<td><span>动作</span></td>
<td><span><span>列出可应用于选定产品的所有操作。</span><span>操作：</span></span><br /><span>选择不同的产品</span><span>- 删除当前产品并将其替换为新选择。</span><br /><span>禁用产品</span><span>/</span><span>启用产品</span><span>- 禁用或启用所选产品。</span><br /><span>删除产品</span><span>- 从当前配置中删除选定的产品。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Thu, 26 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 内容]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Content/</link>
      <description><![CDATA[<p>内容部分用于输入和编辑出现在产品页面上的主要产品描述<em>。</em>简短描述可用于大多数 RSS 提要，也可能出现在目录列表中，具体取决于主题。</p>
<h2 id="add-the-product-description-in-page-builder"><span>在 Page Builder 中添加产品描述</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>内容</span><span>部分</span><span>。</span></p>
<p><img alt="产品内容" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-content.png?lang=en" /></p>
</li>
<li>
<p><span>输入产品的</span><span>简短描述</span><span>并使用</span>编辑器工具栏<span>根据需要设置格式。</span></p>
</li>
<li>
<p><span>在</span><span>Description</span><span>标签处，单击</span><span>Edit with Page Builder</span><span>。</span></p>
</li>
<li>
<p><span>使用</span>Page Builder<span>内容工具</span>编辑现有文本<span>并添加其他内容（如果需要）。</span></p>
</li>
</ol>
<h2 id="page-builder-preview"><span>页面构建器预览</span></h2>
<p><span><span>当您展开包含</span><span>使用 Page Builder 创建的内容的现有产品的</span></span><em>内容部分时，它会显示</em><span></span><span>描述</span><span><span>内容的预览，就像它会出现在产品页面中一样。</span><span>单击内容区域以打开 Page Builder 工作区，您可以在其中进行任何需要的更新。</span></span></p>
<p><img alt="说明预览" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/pb-product-category-content-preview.png?lang=en" /></p>
<p><span><span>默认情况下，为产品和类别表单启用此内容预览。</span><span>如果性能因加载预览而受到影响，您可以在</span></span>内容管理配置<span>设置中禁用预览。</span></p>
<h2 id="add-the-product-description-in-the-editor"><span>在编辑器中添加产品描述</span></h2>
<p><span><span>如果您的商店禁用了 Page Builder，请使用文本编辑器添加产品内容。</span><span>仅在文本框中输入纯 ASCII 字符。</span><span>如果从文字处理器粘贴文本，请先将其保存为纯 .TXT 文件以删除任何不可见的控制字符。</span><span>有关详细信息，请参阅</span></span>使用编辑器<span>。</span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>内容</span><span>部分</span><span>。</span></p>
<p><img alt="简单的产品内容" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-simple-content.png?lang=en" /></p>
</li>
<li>
<p><span>根据需要输入产品和格式的</span><span>简短描述</span><span>。</span></p>
</li>
<li>
<p><span>输入主要产品</span><span>描述</span><span>并使用编辑器工具栏根据需要进行格式化。</span></p>
<p><span>您可以拖动右下角来更改文本框的高度。</span></p>
</li>
</ol>]]></description>
      <pubDate>Wed, 25 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品设置 - 来源]]></title>
      <link>https://www.360magento.com/blog/Product-settings-Sources/</link>
      <description><![CDATA[<p>产品设置的<em>来源</em>部分列出了可以分发产品的来源。它用于分配和取消分配来源以及管理产品的数量和可用性。仅当为您的商店定义了多个来源时才会显示此部分。</p>
<h2 id="assign-a-source-for-a-product"><span>为产品分配来源</span></h2>
<ol>
<li>
<p><span>单击</span><span>分配源</span><span>。</span></p>
</li>
<li>
<p><span>选中所需来源的复选框。</span></p>
</li>
<li>
<p><span>单击</span><span>完成</span><span>。</span></p>
</li>
<li>
<p><span>选择</span><span>源项目状态</span><span>并根据需要输入</span><span>数量</span><span>和</span><span>通知数量</span><span>值。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>以保存更改。</span></p>
</li>
</ol>
<p><img alt="资源视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-sources-list.png?lang=en" /></p>
<h2 id="field-reference"><span>现场参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>姓名</span></td>
<td><span>源的唯一名称。</span></td>
</tr>
<tr>
<td><span>来源状态</span></td>
<td><span>确定产品在目录中是启用还是禁用。</span></td>
</tr>
<tr>
<td><span>来源项目状态</span></td>
<td><span><span>确定产品的当前可用性。</span><span>选项：</span></span><br /><span>In Stock</span><span>&nbsp;- 使产品可供购买。</span><br /><span>缺货</span><span>- 除非激活延期交货，否则会阻止产品可供购买并从目录中删除列表。</span></td>
</tr>
<tr>
<td><span>数量</span></td>
<td><span>每个来源的现有库存量。</span></td>
</tr>
<tr>
<td><span>通知数量</span></td>
<td><span><span>如果未选择</span><span>此特定来源</span></span><em>的数量通知</em><span>金额。</span><code>Notify Quantity Use Default</code><span></span></td>
</tr>
<tr>
<td><span>通知数量使用默认值</span></td>
<td><span>指示使用产品高级库存中的</span><em>数量通知</em><span><span>的默认设置或商店配置中的全局设置。</span><span><br /></span></span></td>
</tr>
<tr>
<td><span>动作</span></td>
<td><span>对于已分配的来源，单击</span><span>取消分配</span><span><span>以使该来源对产品不可用。</span><span>对于未分配的源，单击</span></span><span>分配源</span><span><span>以使源可用于产品。</span><span><br /></span></span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Tue, 24 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2安排产品更新]]></title>
      <link>https://www.360magento.com/blog/Schedule-product-updates/</link>
      <description><![CDATA[<p>产品更新可以按计划应用并与其他内容更改组合在一起。您可以使用内容暂存根据计划的产品更改创建活动，或将更改应用到现有活动。</p>
<p><img alt="预定更改" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-scheduled-changes.png?lang=en" /></p>
<h2 id="create-a-schedule-update"><span>创建计划更新</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span>选择现有产品并点击</span><span>编辑</span><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>安排新更新</span><span>。</span></p>
</li>
<li>
<p><span>选择</span><span>另存为新更新</span><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>更新名称</span><span>，输入新内容暂存活动的名称。</span></p>
</li>
<li>
<p><span>输入更新的简短</span><span>说明</span><span>及其使用方式。</span></p>
</li>
<li>
<p><span>使用日历 (&nbsp;</span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span>) 工具选择活动的</span><span>开始日期</span><span>和</span><span>结束日期</span><span>。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>活动</span><span>开始日期</span><span>和</span><span>结束日期</span><span>必须使用</span><span><em>默认</em></span><span><span>的管理时区定义，该时区是从每个网站的本地时区转换而来的。</span><span>例如，对于位于不同时区的多个网站，您希望根据美国时区开始营销活动，您需要为每个本地时区安排单独的更新。</span><span>为每个设置</span></span><span>开始日期</span><span>和</span><span>结束日期</span><span>，并将其从本地网站时区转换为默认的管理时区。</span></p>
</div>
</div>
</li>
<li>
<p><span>向下滚动到</span><em>价格</em><span>并点击</span><span>高级定价</span><span>。</span></p>
</li>
<li>
<p><span><span>在计划的活动期间为产品</span><span>输入</span></span><span>特价，然后点击</span><span></span><span>完成</span><span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="assign-to-existing-update"><span>分配给现有更新</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span>选择现有产品并点击</span><span>编辑</span><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>安排新更新</span><span>。</span></p>
</li>
<li>
<p><span>选择</span><span>分配给现有市场活动</span><span>。</span></p>
</li>
<li>
<p><span>在列表中，选择要修改的活动。</span></p>
<p><img alt="分配给现有的活动" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/scheduled-changes-assign-to-existing-campaign.png?lang=en" /></p>
</li>
<li>
<p><span>展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" />&nbsp;<span>内容</span><span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="view-the-scheduled-change"><span>查看预定的更改</span></h2>
<p><span>计划的更改显示在产品页面的顶部，以及活动的开始和结束日期。</span></p>
<p><img alt="预定变更" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/view-product-scheduled-changes.png?lang=en" /></p>
<h2 id="edit-the-scheduled-change"><span>编辑预定更改</span></h2>
<ol>
<li>
<p><span><span>在</span><span>页面顶部的</span></span><em>Scheduled Changes框中，单击</em><span></span><span>View/Edit</span><span>。</span></p>
</li>
<li>
<p><span>对计划的更新进行任何必要的更改。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="remove-the-scheduled-change"><span>删除计划的更改</span></h2>
<ol>
<li>
<p><span><span>在</span><span>页面顶部的</span></span><em>Scheduled Changes框中，单击</em><span></span><span>View/Edit</span><span>。</span></p>
</li>
<li>
<p><span>在顶部栏中，单击</span><span>从更新中删除</span><span>。</span></p>
</li>
<li>
<p><span>在对话框中，选择</span><span>删除更新</span><span>并单击</span><span>完成</span><span>。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>该产品已从更新中删除，所有计划的更改都将丢失。</span></p>
</div>
</div>
<p><img alt="删除计划更改" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/remove-product-scheduled-changes.png?lang=en" /></p>
</li>
</ol>
<h2 id="schedule-a-design-update"><span>安排设计更新</span></h2>
<p><span></span><em>计划设计更新</em><span><span>部分使您能够对</span><span>产品页面的外观进行临时更改。</span><span>您可以为一个季节、促销安排设计更改，或者只是为了让事情变得新鲜。</span><span>设计更改可以提前安排，因此它们会按照您定义的时间表生效或</span></span><em>滴落</em><span>。</span></p>
<p><img alt="计划的设计更新" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-design-update-scheduled.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>计划更新自/至</span></td>
<td><span>确定将自定义布局应用于产品的日期范围。</span></td>
</tr>
<tr>
<td><span>新主题</span></td>
<td><span>将自定义主题应用于产品。</span></td>
</tr>
<tr>
<td><span>新版面</span></td>
<td><span><span>对产品页面应用不同的布局。</span><span>选项：</span></span><br /><span>无布局更新</span><span>- 默认情况下，布局更新不适用于产品页面。</span><br /><span>空</span><span><span>- 允许您定义自己的布局，例如 4 栏页面。</span><span>（需要了解 XML。）</span></span><br /><span>1 列</span><span>- 将单列布局应用于产品页面。</span><br /><span>带左侧栏的2 列</span><span>- 将带有左侧栏的两列布局应用于产品页面。</span><br /><span>带右侧栏的2 列</span><span>- 将带有右侧栏的两列布局应用于产品页面。</span><br /><span>3 列</span><span>- 将三列布局应用于产品页面。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Mon, 23 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2最低广告价格]]></title>
      <link>https://www.360magento.com/blog/Minimum-Advertised-Price/</link>
      <description><![CDATA[<p><span><span>商家有时会被禁止显示低于制造商建议零售价 (MSRP) 的价格。</span><span>最低广告价格 (MAP) 使您能够在满足制造商要求的同时为您的客户提供更优惠的价格。</span><span>由于每个制造商的要求不同，您可以配置您的商店以防止在不允许的页面上显示您的实际价格。</span></span></p>
<p><span><span>MAP 功能添加了专用的&ldquo;点击价格&rdquo;按钮，而不是常规产品价格。</span><span>因此，如果您商店中的价格低于该产品的最低设定价格，则该价格要么不显示，要么显示标价/市场价格并带有删除线以强调您的价格更低。</span><span>如果买家点击&ldquo;Click for Price&rdquo;按钮，那么您销售产品的实际价格才会显示出来。</span></span></p>
<p><span><span>此外，MAP 功能允许您提出一些改进建议。</span><span>例如，当客户将此类产品添加到他们的购物车时，他们不会被重定向到购物车，而是会显示允许买家执行以下操作的报价：</span></span></p>
<ul>
<li>
<p><span>从购物车中移除商品（如果买家只是想了解价格，尚未做出购买决定，则可以这样做）</span></p>
</li>
<li>
<p><span>将其留在他们的购物车中并继续购物</span></p>
</li>
<li>
<p><span>进行结算</span></p>
</li>
</ul>
<h2 id="map-logic"><span>映射逻辑</span></h2>
<p><span><span>有些产品的价格取决于所选选项，例如自定义选项或具有自己的 SKU 和库存管理的简单产品）。</span><span>对于这些产品，根据产品类型和价格设置应用以下逻辑。</span><span>订单管理、客户管理工具和报告使用实际价格。</span></span></p>
<h2 id="using-map-with-product-types"><span>将 MAP 与产品类型一起使用</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>产品类别</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td>简单<span>,</span>虚拟</td>
<td><span><span>实际价格不会自动出现在目录列表和产品页面上，而只会根据显示实际价格设置包含在内。</span><span>自定义选项价格正常显示。</span></span></td>
</tr>
<tr>
<td>分组</td>
<td><span>关联的简单产品的价格不会自动出现在目录列表和产品页面上，而是仅根据显示实际价格设置包含在内。</span></td>
</tr>
<tr>
<td>可配置</td>
<td><span><span>实际价格不会自动出现在目录列表和产品页面上，而只会根据显示实际价格设置包含在内。</span><span>期权价格正常出现。</span></span></td>
</tr>
<tr>
<td>捆绑包<span>（固定价格）</span></td>
<td><span><span>实际价格不会自动出现在目录页面上，而是仅根据显示实际价格设置包含在内。</span><span>捆绑商品的价格正常显示。</span><span>MAP 不适用于具有动态定价的捆绑产品。</span></span></td>
</tr>
<tr>
<td>可下载</td>
<td><span><span>实际价格不会自动出现在目录列表和产品页面上，而只会根据显示实际价格设置包含在内。</span><span>与每个下载链接关联的价格正常显示。</span></span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="using-map-with-price-settings"><span>将 MAP 与价格设置结合使用</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>价格设定</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>主要价格</span></td>
<td><span>当 MAP 应用于主价格时，选项、捆绑项目和关联产品的价格（从主价格增加或减少）正常显示。</span></td>
</tr>
<tr>
<td><span>关联产品价格</span></td>
<td><span>如果产品没有主价格，并且其价格源自关联产品价格（例如在分组产品中），则应用关联产品的 MAP 设置。</span></td>
</tr>
<tr>
<td>建议零售价</td>
<td><span>如果购物车中的产品指定了制造商建议零售价 (MSRP)，则价格不会被划掉。</span></td>
</tr>
<tr>
<td>分级价格</td>
<td><span><span>如果设置了分级定价，则分级定价消息不会显示在目录中。</span><span>在产品页面上，会显示一条通知，表示订购超过一定数量可以降低价格，但折扣仅以百分比显示。</span><span>对于分组产品的关联产品，折扣不会显示在产品页面上。</span><span>等级价格根据显示实际价格设置显示。</span></span></td>
</tr>
<tr>
<td>特价</td>
<td><span>如果指定特价，则根据显示实际价格设置显示特价。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="map-configuration"><span>地图配置</span></h2>
<p><span><span>默认情况下不启用最低广告价格 (MAP) 功能。</span><span>如果您想将此功能添加到您的商店，您必须启用它并为您的产品配置 MAP 设置。</span><span>MAP 设置可应用于您目录中的所有产品或针对特定产品进行配置。</span><span>当全局启用 MAP 时，店面中的所有产品价格都将隐藏起来。</span><span>您可以使用多种配置选项来遵守您与制造商的协议条款，同时仍然为您的客户提供更优惠的价格。</span></span></p>
<p><img alt="实际价格出现&ldquo;手势&rdquo;" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-msrp-on-gesture.png?lang=en" /></p>
<p><span><span>在全局级别，您可以启用或禁用 MAP，将其应用于所有产品，定义实际价格的显示方式。</span><span>您还可以编辑商店中显示的相关消息和信息提示的文本。</span></span></p>
<p><span><span>启用 MAP 后，产品级 MAP 设置可用。</span><span>您可以通过输入厂商建议零售价并选择实际价格在商店中的显示方式，将 MAP 应用于单个产品。</span><span>产品级 MAP 设置会覆盖全局 MAP 设置。</span></span></p>
<p><img alt="点击价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-price-map.png?lang=en" /></p>
<h3 id="step-1%3A-enable-map-for-the-store-view"><span>第 1 步：为商店视图启用 MAP</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span><span>如果适用，将</span><span>右上角的</span></span><span>Store View设置为应用配置的视图。</span><span></span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>Sales</span><span><span>并选择</span><span>下方的</span></span><span>Sales 。</span><span></span></p>
</li>
<li>
<p><span>展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>最低</span><em>广告价格</em><span>部分。</span></p>
</li>
<li>
<p><span>如有必要，将</span><span>启用 MAP</span><span>设置为</span><code>Yes</code><span>。</span></p>
<p><img alt="地图配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/sales-minimum-advertised-price.png?lang=en" /></p>
<p><span></span></p>
</li>
</ol>
<h3 id="step-2%3A-configure-the-map-settings"><span>第 2 步：配置 MAP 设置</span></h3>
<p><span>使用以下方法之一配置 MAP 设置：</span></p>
<h4 id="method-1%3A-configure-map-for-all-products"><span>方法一：为所有产品配置MAP</span></h4>
<ol>
<li>
<p><span>要确定您希望客户在何时何地看到实际价格，请执行以下操作：</span></p>
<ul>
<li>
<p><span>要更改默认值，请取消选择</span><span>使用系统值</span><span>复选框。</span></p>
</li>
<li>
<p><span>将</span><span>显示实际价格</span><span>设置为以下之一：</span></p>
<ul>
<li><code>In Cart</code></li>
<li><code>Before Order Confirmation</code></li>
<li><code>On Gesture (on click)</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p><span>输入您希望在</span><span>默认弹出文本消息</span><span>中显示的文本。</span></p>
</li>
<li>
<p><span>输入您希望在</span><span>默认&ldquo;这是什么&rdquo;文本消息</span><span>中显示的任何其他说明。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h4 id="method-2%3A-configure-map-for-a-single-product"><span>方法二：为单个产品配置MAP</span></h4>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>库存</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span></span><span>在编辑</span><span><span>模式下</span><span>打开产品。</span></span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>Advanced Settings</span><span>并选择</span><span>Advanced Pricing</span><span>。</span></p>
<p><img alt="厂商建议零售价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-msrp.png?lang=en" /></p>
</li>
<li>
<p><span>输入</span><span>制造商的建议零售价</span><span>(MSRP)。</span></p>
<p><span>在此示例中，产品价格为 54.00 美元，建议零售价为 59.95。</span></p>
</li>
<li>
<p><span>将</span><span>显示实际价格</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Use config</code><span><span>-（默认）应用 MAP 配置设置。</span><span>|</span></span></li>
<li><code>On Gesture</code><span></span><em>- 当客户单击&ldquo;点击价格</em><span>&rdquo;或</span><em>&ldquo;这是什么？&rdquo;</em><span><span>时，在弹出窗口中显示实际产品价格。</span><span>关联。</span></span></li>
<li><code>In Cart</code><span>- 显示购物车中的实际产品价格。</span></li>
<li><code>Before Order Confirmation</code><span>- 在结帐过程结束时显示实际产品价格，就在确认订单之前。</span></li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>制造商的建议零售价和显示实际价格字段仅</span><span>在配置中启用</span></span>最低广告价格时出现。<span></span></p>
</div>
</div>
</li>
</ol>
<h3 id="step-3%3A-save-the-configuration"><span>第三步：保存配置</span></h3>
<p><span>完成后，点击</span><span>完成</span><span>，然后点击</span><span>保存</span><span>。</span></p>]]></description>
      <pubDate>Sun, 22 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2分级价格]]></title>
      <link>https://www.360magento.com/blog/Tier-Price/</link>
      <description><![CDATA[<p><span><span>分级定价让您可以从店面的产品列表或产品页面提供数量折扣。</span><span>折扣可以应用于特定的商店视图或客户组或共享目录。</span></span></p>
<p><span><span>如果您有许多产品要更新，最有效的方法是导入层级价格更改，而不是单独输入它们。</span><span><br /></span></span></p>
<p><img alt="店面产品页面上的分级价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-tier-storefront.png?lang=en" /></p>
<p><span>产品页面计算数量折扣并显示一条消息，例如：</span></p>
<p><code>Buy 6 for $5.95 each and save 15%</code></p>
<p><span><span>店面中的价格从最高到最低数量优先。</span><span>如果您有数量等级价格和数量等级价格</span></span><code>5</code><span>，</span><code>10</code><span>并且客户将五、六、七、八或九件商品添加到购物车，客户将收到数量</span><code>5</code><span><span>等级的折扣价。</span><span>当客户添加第十个项目时，为数量</span></span><code>10</code><span>层指定的折扣价取代数量层</span><code>5</code><span>，折扣价</span><code>10</code><span>适用。</span></p>
<h2 id="add-a-price-tier-for-a-product"><span>为产品添加价格等级</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span></span><em>在价格</em><span><span>字段</span><span>下方，点击</span></span><span>高级定价</span><span>。</span></p>
</li>
<li>
<p><span>在</span><em>分级价格</em><span>部分，点击</span><span>添加</span><span>。</span></p>
<p><span>如果您要创建包含多个价格的层级，请为每个附加层级单击</span><span>添加</span><span><span>，这样您就可以同时处理所有层级。</span><span>组中的每一层都有相同的网站和客户组或共享目录分配，但数量和价格不同。</span></span></p>
</li>
</ol>
<h2 id="configure-the-price-tier"><span>配置价格层</span></h2>
<ol>
<li>
<p><span><span>如果您的商店有多个网站，请选择</span><span>分级定价适用的</span></span><span>网站。</span><span></span></p>
</li>
<li>
<p><span></span><span>如有必要，通过选择客户组</span><span>或</span><span>共享目录</span><span>（</span><img alt="Adobe Commerce 的 B2B" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/b2b.svg?lang=en" /><span>仅</span>适用于 Adob​​e Commerce 的 B2B<span><span>&nbsp;）来限制定价层的可用性</span><span>。</span></span></p>
</li>
<li>
<p><span>对于</span><span>数量</span><span>，输入享受折扣必须订购的数量。</span></p>
<ul>
<li>
<p><span>方式一：输入价格为固定金额</span></p>
<p><span>将</span><span>价格</span><span>设置为</span><code>Fixed</code><span>并输入该层的一个单位的调整后价格。</span></p>
<p><img alt="固定金额的分级价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-tier-fixed.png?lang=en" /></p>
</li>
<li>
<p><span>方法 2：以百分比形式输入价格</span></p>
<p><span>将</span><span>价格</span><span>设置为</span><code>Discount</code><span>并输入折扣价作为产品基本价格的百分比。</span></p>
<p><span>例如，对于 15% 的折扣，输入数字</span><code>15</code><span><span>。</span><span>（价格保留两位小数，如</span></span><code>15.00</code><span>.）</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span></span><em>要获得折扣价，将根据价格</em><span><span>字段中定义的值计算定义的百分比&nbsp;</span><span>&nbsp;，而不是 _Special Price** 字段。</span></span></p>
</div>
</div>
</li>
</ul>
<p><img alt="等级价格百分比" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-tier-discount.png?lang=en" /></p>
</li>
</ol>
<h2 id="complete-the-price-configuration"><span>完成价格配置</span></h2>
<ol>
<li>
<p><span>要为不同的网站或客户组添加另一组层级定价，请重复前面的步骤。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>完成</span><span>，然后点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>最终</span><span>产品价格按最低相关价格计算</span></span><span><em>，</em></span><span></span><span><em>使用</em></span><span>以下公式：</span><br /><code>Final Price=Min(Regular(Base) Price, Group(Tier) Price, Special Price, Catalog Price Rule) + Sum(Min Price per each required custom option)</code></p>
</div>
</div>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><em>固定价格</em></span><span>产品可定制选项</span><em>不受</em><span>团体价格、分级价格、特价或目录价格规则的影响。</span></p>
</div>
</div>]]></description>
      <pubDate>Sat, 21 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2特价]]></title>
      <link>https://www.360magento.com/blog/Special-Price/</link>
      <description><![CDATA[<p><span><span>可以在指定时间段内提供特价。</span><span>在指定的时间段内，将显示特价而不是正常价格，后跟显示正常价格的符号。</span></span></p>
<p><img alt="产品页面上的特价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-price-special.png?lang=en" /></p>
<h2 id="apply-special-price-to-an-individual-product"><span>对单个产品应用特价</span></h2>
<p><span>您可以轻松地为目录中的单个产品设置特价。</span></p>
<h3 id="use-a-scheduled-update"><span>使用计划更新</span></h3>
<p><span>Adobe Commerce 包括对</span>预定更新<span><span>的支持。</span><span>使用这些促销工具在指定时间段内对特定产品应用特价。</span></span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>单击</span><span>预定更新</span><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>更新名称</span><span>，输入特价促销的名称。</span></p>
</li>
<li>
<p><span>输入简短</span><span>说明</span><span>。</span></p>
</li>
<li>
<p><span>使用</span><span>日历</span><span>(&nbsp;</span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span><span>) 选择</span><span>特价促销的</span></span><span>开始日期</span><span>和</span><span>结束日期。</span><span></span></p>
<p><span>您也可以使用</span><span>小时</span><span>和</span><span>分钟</span><span><span>滑块来选择开始和结束时间。</span><span>设置开始和结束后</span><span>单击</span></span><span>关闭。</span><span></span></p>
<p><img alt="另存为新更新" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-scheduled-update.png?lang=en" /></p>
</li>
<li>
<p><span>向下滚动到</span><em>价格</em><span>字段，点击</span><span>高级定价，然后输入</span><span></span><span>特价</span><span><span>的金额</span><span>。</span></span></p>
<p><img alt="特殊定价设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>完成</span><span>，然后点击</span><span>保存</span><span>。</span></p>
<p><span>在店面中，特价应出现在目录列表和产品页面上。</span></p>
<p><span></span><em>预定更改</em><span><span>显示在</span><span>页面顶部。</span></span></p>
<p><img alt="计划变更" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-scheduled-change.png?lang=en" /></p>
</li>
</ol>
<h3 id="use-a-simple-start-and-end-date"><span>使用简单的开始和结束日期</span></h3>
<p><span>Magento Open Source 在 Advanced Pricing 选项中包含简单的开始和结束日期选项。</span></p>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>向下滚动到</span><em>价格</em><span>字段，点击</span><span>高级定价</span><span>，然后输入</span><span>特价</span><span>金额。</span></p>
</li>
<li>
<p><span>使用</span><em>日历</em><span>(&nbsp;</span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span><span>) 选择</span><span>特价促销的</span></span><span>开始日期</span><span>和</span><span>结束日期。</span><span></span></p>
<p><span>特价在开始日期开始的午夜 (00:01) 后立即生效，一直持续到结束日期前一天的午夜 (23:59) 之前。</span></p>
<p><img alt="特殊定价设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>完成</span><span>，然后点击</span><span>保存</span><span>。</span></p>
<p><span>在店面中，特价应出现在目录列表和产品页面上。</span></p>
</li>
</ol>
<h2 id="apply-a-special-price-to-multiple-products"><span>对多个产品应用特价</span></h2>
<p><span>您还可以为多个产品分配特价，例如可</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-configurable.html?lang=en">配置产品</a><span>的多个变体。</span></p>
<h3 id="set-a-special-price-for-selected-products"><span>为所选产品设置特价</span></h3>
<p><span>以下示例显示如何将相同的特价分配给 Adob​​e Commerce 中可配置产品的多个产品变体。</span></p>
<ol>
<li>
<p><span>在</span><em>产品</em><span>页面上，单击</span><span>过滤器</span><span>并输入可配置产品的</span><span>名称</span><span>。</span></p>
</li>
<li>
<p><span>将</span><span>类型</span><span>设置为</span><code>Configurable Product</code><span>并单击</span><span>应用过滤器</span><span>。</span></p>
</li>
<li>
<p><span>如果要为所有产品分配相同的特价，请将第一列标题中的控件设置为</span><code>Select All</code><span>。</span></p>
<p><span>或者，您可以选中要包含的每个产品的复选框。</span></p>
</li>
<li>
<p><span>将</span><span>动作</span><span>控件设置为</span><code>Update attributes</code><span>。</span></p>
</li>
<li>
<p><span>向下滚动到 _Special Price** 字段并选中 _Special Price** 字段下方的</span><span>Change</span><span>复选框，然后输入您要提供的特价。</span></p>
<p><img alt="特殊价格字段" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-commerce.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<p><span><span>商店中提供的特价显示在目录列表和产品页面上。</span><span>对于可配置产品，选择选项后，正常价格也会显示在产品页面上。</span></span></p>
<h3 id="set-a-special-price-and-date-range-for-selected-products"><span>为所选产品设置特价和日期范围</span></h3>
<p><span>以下示例显示如何将相同的特价分配给 Magento Open Source 中可配置产品的多个产品变体。</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>过滤器</span><span>。</span></p>
</li>
<li>
<p><span>输入可配置产品的</span><span>名称</span><span>。</span></p>
</li>
<li>
<p><span>将</span><span>类型</span><span>设置为</span><code>Simple Product</code><span>。</span></p>
<p><img alt="过滤器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-filter.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>应用过滤器</span><span>。</span></p>
<p><span>网格列出了作为可配置产品的变体关联的所有简单产品。</span></p>
<p><img alt="产品变化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-filter-grid.png?lang=en" /></p>
</li>
<li>
<p><span>如果要为所有产品分配相同的特价，请将第一列标题中的控件设置为</span><code>Select All</code><span>。</span></p>
<p><span>或者，您可以选中要包含的每个产品的复选框。</span></p>
</li>
<li>
<p><span>将</span><span>动作</span><span>控件设置为</span><code>Update attributes</code><span>。</span></p>
<p><img alt="更新属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-action-update-attributes.png?lang=en" /></p>
</li>
<li>
<p><span>向下滚动到 _Special Price** 字段并执行以下操作：</span></p>
<ul>
<li>
<p><span>选中 _Special Price** 字段下方的</span><span>Change</span><span>复选框，然后输入您要提供的特价。</span></p>
</li>
<li>
<p><span><span>选中</span><em><span>特价起始日期</span></em><span>字段下方的</span></span><span>更改</span><span><span>复选框，单击</span><em><span>日历</span></em><span>(&nbsp;</span><span>)，然后选择特价促销的第一个日期。</span></span><em><span></span></em><span></span><em><span></span></em><span></span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span></span></p>
<p><span>特价在开始日期开始的午夜 (00:01) 后立即生效，一直持续到结束日期前一天的午夜 (23:59) 之前。</span></p>
</li>
<li>
<p><span><span>选中</span><em><span>特价截止日期</span></em><span>字段下方的</span></span><span>更改</span><span><span>复选框，单击</span><em><span>日历</span></em><span>(&nbsp;</span><span>)，然后选择特价促销的最后日期。</span></span><em><span></span></em><span></span><em><span></span></em><span></span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span></span></p>
</li>
</ul>
<p><img alt="特殊价格字段" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-special-action-update-attributes-fields.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
<p><span>一条消息指示用特价更新了多少条记录。</span></p>
<p><span><span>特价在指定日期在商店中可用，并显示在目录列表和产品页面上。</span><span>对于可配置产品，选择选项后，正常价格也会显示在产品页面上。</span></span></p>
<p><img alt="可配置产品特价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-special-price-configurable-product-detail.png?lang=en" /></p>
</li>
</ol>
<h2 id="testing"><span>测试</span></h2>
<p><span>如果特价没有在目录列表和产品页面的店面中正确显示，请清除浏览器缓存：</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>系统</span><span>&gt;</span><span>缓存管理</span><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>刷新 Magento 缓存</span><span>。</span></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>最终</span><span>产品价格按最低相关价格计算</span></span><span><em>，</em></span><span></span><span><em>使用</em></span><span>以下公式：</span><br /><code>Final Price=Min(Regular(Base) Price, Group(Tier) Price, Special Price, Catalog Price Rule) + Sum(Min Price per each required custom option)</code></p>
</div>
</div>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><em>固定价格</em></span><span>产品可定制选项</span><em>不受</em><span>团体价格、分级价格、特价或目录价格规则的影响。</span></p>
</div>
</div>]]></description>
      <pubDate>Fri, 20 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2团体价]]></title>
      <link>https://www.360magento.com/blog/Group-Price/</link>
      <description><![CDATA[<p><span><span>您可以使用管理员中的配置设置，根据商店中的客户群设置打折商品的价格。</span><span>这称为</span></span><em>团体定价</em><span>。</span></p>
<p><span><span>当购物者登录到他们的帐户时，可以向特定客户群的成员提供任何产品的折扣价。</span><span>客户组价格与正常价格一起显示在产品页面上，以便购物者可以轻松比较价格并采取相应行动。</span><span>在他们将产品添加到购物车后，正常价格将被基于其客户群的团体价格所取代。</span></span></p>
<p><span>客户群体的定价是</span>分层定价<span><span>的一个组成部分，并以类​​似的方式设置。</span><span>唯一的区别是客户组价格的数量为 1。</span></span></p>
<p><img alt="客户群折扣" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-price-group.png?lang=en" /></p>
<h2 id="benefits-of-using-group-pricing"><span>使用团体定价的好处</span></h2>
<ul>
<li>
<p><span>适合批发买家</span></p>
</li>
<li>
<p><span>激励客户升级他们的客户群以利用折扣</span></p>
</li>
<li>
<p><span>有针对性的营销活动</span></p>
</li>
<li>
<p><span>通过奖励忠诚的客户建立信任和信誉</span></p>
</li>
</ul>
<h2 id="set-up-a-group-price"><span>设置团价</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span></span><em>在价格</em><span><span>字段</span><span>下方，点击</span></span><span>高级定价</span><span>。</span></p>
</li>
<li>
<p><span>在</span><em>客户组价格</em><span>部分，点击</span><span>添加</span><span>。</span></p>
<p><img alt="高级定价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-group.png?lang=en" /></p>
</li>
<li>
<p><span>配置团价：</span></p>
<ul>
<li>
<p><span><span>对于多站点安装，请选择</span><span>适用团体价格的</span></span><span>网站。</span><span></span></p>
</li>
<li>
<p><span>选择要获得折扣的</span><span>客户组</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>数量</span><span></span><code>1</code><span><span>。</span><span>_</span></span></p>
</li>
<li>
<p><span>对于</span><span>Price</span><span>，设置定价类型和金额：</span></p>
<ul>
<li>
<p><code>Fixed</code><span>- 输入折扣后的产品价格。</span></p>
</li>
<li>
<p><code>Discount</code><span>- 输入折扣价占产品价格的百分比。</span></p>
</li>
</ul>
<p><img alt="客户团体价 10% 折扣" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-price-group-discount.png?lang=en" /></p>
</li>
</ul>
</li>
<li>
<p><span>要添加另一个组价格，请单击</span><span>添加</span><span>并重复上一步。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>完成</span><span>，然后点击</span><span>保存</span><span>。</span></p>
<p><img alt="购物车中的组价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-cart-price-group-discount.png?lang=en" /></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>最终</span><span>产品价格按最低相关价格计算</span></span><span><em>，</em></span><span></span><span><em>使用</em></span><span>以下公式：</span><br /><code>Final Price=Min(Regular(Base) Price, Group(Tier) Price, Special Price, Catalog Price Rule) + Sum(Min Price per each required custom option)</code></p>
</div>
</div>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><em>固定价格</em></span><span>产品可定制选项</span><em>不受</em><span>团体价格、分级价格、特价或目录价格规则的影响。</span></p>
</div>
</div>]]></description>
      <pubDate>Thu, 19 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2高级定价]]></title>
      <link>https://www.360magento.com/blog/Advanced-Pricing/</link>
      <description><![CDATA[<p><span><span>Adobe Commerce 和 Magento Open Source 支持各种定价选项，您可以使用这些选项进行促销，或满足制造商的最低广告定价要求。</span><span>可以按计划更改产品定价，也可以根据在产品级别或购物车中应用的价格规则进行更改。</span></span></p>
<p><span>使用高级定价管理您的产品价格，为客户提供更优惠的价格，鼓励消费者花更多钱，增加您网站的流量，并清理旧库存。</span></p>
<p><span></span><em>高级定价</em><span><span>设置定义了可用于特定客户组或共享目录的特殊定价所需的条件</span><span>。</span><span>高级定价可应用于简单、虚拟、可下载和捆绑产品。</span><span>要将折扣价应用于其他产品类型，请使用</span></span>目录价格规则<span><span>。</span><span>有关详细信息，请参阅</span></span>价格范围<span>。</span></p>
<p><span><span>高级定价数据与产品页面同步。</span><span>例如，如果您更新层级价格数量，系统会更新产品页面上的值。</span></span></p>
<p><img alt="Adobe Commerce 的 B2B" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/b2b.svg?lang=en" /><span>（仅</span>适用于 Adob​​e Commerce 的 B2B<span><span>）如果您使用共享目录，高级定价数据将与产品页面和共享目录同步。</span><span>例如，如果您更新层级价格数量，系统会更新共享目录和产品页面上的值。</span><span>共享目录中指示的任何自定义定价都优先于客户组定价。</span><span>另请参阅</span><em><span>B2B for Adob​​e Commerce 指南</span></em><span>中的</span></span>设置定价和结构<span>。</span><em><span></span></em><span></span></p>
<p><img alt="高级定价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-pricing-advanced-link.png?lang=en" /></p>
<h2 id="access-the-advanced-pricing-options"><span>访问高级定价选项</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>在</span><span>价格</span><span>下，单击</span><span>高级定价</span><span>。</span></p>
</li>
<li>
<p><span>按照所需高级定价类型的说明进行操作。</span></p>
<ul>
<li>
<p>团体价</p>
</li>
<li>
<p>特价</p>
</li>
<li>
<p>分级价格</p>
</li>
<li>
<p>最低广告价格</p>
</li>
</ul>
</li>
</ol>
<h2 id="page-reference"><span>页面参考</span></h2>
<h3 id="special-price"><span>特价</span></h3>
<p><span><span>输入特价以在指定时间段或预定活动期间提供折扣价。</span><span>当有特价时，零售价会被划掉，特价会以粗体大字显示在下方。</span></span></p>
<h4 id="special-price-from-dates"><span>特价日期</span></h4>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>从</span></td>
<td><span><span>设置特价可用的第一个日期。</span><span>您可以输入日期或从日历中选择日期。</span></span></td>
</tr>
<tr>
<td><span>到</span></td>
<td><span><span>设置特价可用的最后日期。</span><span>您可以输入日期或从日历中选择日期。</span></span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="cost"><span>成本</span></h3>
<p><span>这是物品的实际成本。</span></p>
<h3 id="customer-group-price"><span>客户团价</span></h3>
<p><img alt="高级定价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-pricing-advanced.png?lang=en" /></p>
<p><span>为特定客户群设置促销和等级价格。</span></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>物品</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>网站</span></td>
<td><span><span>标识应用组价规则的网站。</span><span>仅当安装有多个网站时才会出现此选项。</span></span></td>
</tr>
<tr>
<td><span>客户群</span></td>
<td><span><span>（必需）标识有资格获得折扣价的客户组。</span><span>当更改组或目录字段中的值时，与先前设置匹配的相应自定义价格行将从共享目录中删除。</span></span><br /><span>所有组</span><span>- 将规则应用于所有客户组。</span><br /><span>NOT LOGGED IN</span><span>&nbsp;- 应用规则来宾和未登录其帐户的客户。</span></td>
</tr>
<tr>
<td><span>数量</span></td>
<td><span>指定接收分级价格所需的数量。</span></td>
</tr>
<tr>
<td><span>价格</span></td>
<td><span><span>（必需）在特定网站内为客户组成员指定固定或折扣产品价格。</span><span>选项：</span></span><br /><span>Fixed</span><span><span>&nbsp;-（默认）折扣价作为固定的小数值输入。</span><span>例如，输入</span></span><code>9.99</code><span>折扣价。</span><br /><span>折扣</span><span><span>- 折扣价以基本产品价格的百分比 (%) 形式输入。</span><span>例如，输入</span></span><code>10</code><span>10% 的折扣。</span></td>
</tr>
<tr>
<td><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan-solid.png?lang=en" /></td>
<td><span>删除当前规则。</span></td>
</tr>
<tr>
<td><span>添加</span></td>
<td><span>为新规则插入另一行。</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="catalog-and-tier-price"><span>目录和等级价格</span></h3>
<p><span>为特定的共享目录和客户组设置促销和分级价格。</span></p>
<p><img alt="分层定价" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-pricing-promotional-tiered-b2b.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>物品</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>网站</span></td>
<td><span><span>标识应用组价规则的网站。</span><span>仅当安装有多个网站时才会出现此选项。</span></span><br /><span><em>重要提示：</em></span><span><span>还要在</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/pricing/catalog-price-scope.html?lang=en"><span>目录价格范围</span></a><span>配置中选择</span></span><em>网站</em><span><span>，否则会为</span><span><span>所有</span></span><span>网站显示设置的高级价格。</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/pricing/catalog-price-scope.html?lang=en"><span></span></a><span></span><span><span></span></span><span></span></td>
</tr>
<tr>
<td><span>组或目录</span></td>
<td><span><span>（必需）标识有资格获得折扣价的客户组或共享目录。</span><span>当更改组或目录字段中的值时，与先前设置匹配的相应自定义价格行将从共享目录中删除。</span></span><br /><span>所有组</span><span><span>- 将规则应用于所有客户组。</span><span>该值不适用于共享目录，高级定价数据的更改不会与共享目录同步。</span></span><br /><span>NOT LOGGED IN</span><span>&nbsp;- 应用规则来宾和未登录其帐户的客户。</span><br /><span>共享目录</span><span>- 将规则应用于特定的共享目录。</span></td>
</tr>
<tr>
<td><span>数量</span></td>
<td><span>指定接收分级价格所需的数量。</span></td>
</tr>
<tr>
<td><span>价格</span></td>
<td><span><span>（必需）在特定网站内为客户组成员指定固定或折扣产品价格。</span><span>选项：</span></span><br /><span>Fixed</span><span><span>&nbsp;-（默认）折扣价作为固定的小数值输入。</span><span>例如，输入</span></span><code>9.99</code><span>折扣价。</span><br /><span>折扣</span><span><span>- 折扣价以基本产品价格的百分比 (%) 形式输入。</span><span>例如，输入</span></span><code>10</code><span>10% 的折扣。</span></td>
</tr>
<tr>
<td><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan-solid.png?lang=en" /></td>
<td><span>删除当前规则。</span></td>
</tr>
<tr>
<td><span>添加</span></td>
<td><span>为新规则插入另一行。</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="minimum-advertised-price"><span>最低广告价格</span></h3>
<p><span>产品的最低广告价格 (MAP)。</span></p>
<h3 id="display-actual-price"><span>显示实际价格</span></h3>
<p><span>确定客户可以在何处看到产品的实际价格。</span></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>物品</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>使用配置</span></td>
<td><span>使用价格显示的当前配置设置。</span></td>
</tr>
<tr>
<td><span>关于手势</span></td>
<td><span>在弹出窗口中显示实际产品价格，以响应</span><em>点击价格</em><span>或</span><em>这是什么？</em><span>关联。</span></td>
</tr>
<tr>
<td><span>在购物车</span></td>
<td><span>显示购物车中的实际产品价格。</span></td>
</tr>
<tr>
<td><span>订单确认前</span></td>
<td><span>在结帐过程结束时显示实际产品价格，就在提交订单之前。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Wed, 18 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2价格范围]]></title>
      <link>https://www.360magento.com/blog/Price-Scope/</link>
      <description><![CDATA[<p>用于产品价格的基础货币的范围可以配置为适用于全球或网站级别。如果应用于全球级别，则在整个商店层次结构中使用相同的价格。如果应用于网站级别，则可以从与不同网站关联的商店以不同价格购买相同的产品。默认情况下，产品定价的范围是全局的。</p>
<p><span><span>不同的因素会影响同一产品在一个地方的价格，而不会影响另一个地方的价格。</span><span>例如，产品可能有额外的分销成本，以及影响特定商店销售产品价格的其他考虑因素。</span><span>下图显示了将基础货币设置为网站级别的多站点安装。</span><span>与每个网站关联的商店和商店视图反映了在网站级别设置的产品定价。</span></span></p>
<h2 id="configure-price-scope"><span>配置价格范围</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>菜单上，转到</span><span>商店</span><span>&gt;</span><em>设置</em><span>&gt;</span><span>配置</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>向下滚动到</span><span>价格</span><span>部分并将</span><span>目录价格范围</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Global</code></li>
<li><code>Website</code></li>
</ul>
<p><span>您选择的范围设置显示在目录中的价格字段下方。</span></p>
<p><img alt="目录价格范围" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-price.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h2 id="use-scope-to-set-up-product-prices"><span>使用范围设置产品价格</span></h2>
<p><span><span>Commerce 不允许为每个商店设置产品价格。</span><span>但是您可以更改每个网站的价格：</span></span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>菜单上，转到</span><span>商店</span><span>&gt;</span><em>设置</em><span>&gt;</span><span>配置</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>在</span><span>Price</span><span>选项卡中，将 price scope 设置为</span><code>Website</code><span>而不是 global。</span></p>
</li>
<li>
<p><span>通过打开产品编辑页面设置价格，选择左上角的范围，然后输入每个网站的新价格。</span></p>
</li>
</ol>]]></description>
      <pubDate>Tue, 17 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2添加产品视频]]></title>
      <link>https://www.360magento.com/blog/Add-product-videos/</link>
      <description><![CDATA[<p><span><span>要添加产品视频，您必须先从您的 Google 帐户获取 API 密钥并将其输入到您的商店配置中。</span><span>然后，您可以链接到产品中的视频。</span></span></p>
<h2 id="step-1%3A-get-your-youtube-api-key"><span>第 1 步：获取您的 YouTube API 密钥</span></h2>
<ol>
<li>
<p><span>登录到您的 Google 帐户并访问</span>Google Developers Console<span>。</span></p>
</li>
<li>
<p><span>在顶部的搜索字段中，输入</span><code>YouTube Data API v3</code><span>并单击搜索图标。</span></p>
</li>
<li>
<p><span>当显示 API 页面时，确保它已启用。</span></p>
</li>
<li>
<p><span>在左侧面板中，选择</span><span>Credentials</span><span>。</span></p>
</li>
<li>
<p><span>根据您是否有凭据，执行以下操作之一：</span></p>
<ul>
<li>
<p><span>如果您已经拥有所需的凭据，请复制</span><em>API 密钥</em><span>表中的密钥。</span></p>
</li>
<li>
<p><span><span>如果您还没有此 API 的凭据，请单击</span><span>&nbsp;顶部的</span></span><span>创建凭据并按照提示创建所需的凭据。</span><span>在</span><em>Get your credentials</em><span>下，复制 API 密钥并单击</span><span>Done</span><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>将 API 密钥复制到剪贴板。</span></p>
</li>
<li>
<p><span>单击右侧的编辑图标并设置限制以确保 API 密钥仅限于正确的引荐来源网址。</span></p>
</li>
<li>
<p><span>生成密钥时稍等片刻，然后将密钥复制到剪贴板。</span></p>
<p><span>在下一步中，您会将密钥粘贴到商店的配置中。</span></p>
</li>
</ol>
<h2 id="step-2%3A-configure-the-key-in-commerce"><span>第 2 步：在 Commerce 中配置密钥</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><em><span>产品视频</span></em><span>部分并粘贴您的</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>YouTube&nbsp;</span><span><span>API 密钥</span></span><span>。</span></span><em><span></span></em><span></span><span><span></span></span><span></span></p>
<p><img alt="产品视频" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-product-video.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>出现提示时，刷新缓存。</span></p>
</li>
</ol>
<h2 id="step-3%3A-link-to-the-video"><span>第 3 步：链接到视频</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>在</span><em>图片和视频</em><span>部分，点击</span><span>添加视频</span><span>。</span></p>
<p><span>如果您尚未配置 YouTube API 密钥，请单击&ldquo;</span><span>确定</span><span><span>&nbsp;&rdquo;继续。</span><span>您不能链接到 YouTube 视频，但您可以完成该过程。</span></span></p>
<p><img alt="添加视频" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-video-add.png?lang=en" /></p>
</li>
<li>
<p><span>输入 YouTube 或 Vimeo 视频的</span><span>URL</span><span>&nbsp;&nbsp;。</span></p>
</li>
<li>
<p><span>在字段外单击并等待对 API 密钥或视频的反馈。</span></p>
<p><span>如果一切正常，YouTube 会提供视频的基本信息</span></p>
</li>
<li>
<p><span>输入视频的</span><span>标题</span><span>和</span><span>描述</span><span>。</span></p>
</li>
<li>
<p><span>要上传</span><span>预览图像</span><span>，请浏览至图像并选择文件。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>上传后，显示的预览图像由外部视频服务提供商自动生成。</span><span>您不能从 Adob​​e Commerce Admin 编辑图像。</span></span></p>
</div>
</div>
</li>
<li>
<p><span>如果您更喜欢使用视频元数据，请单击</span><span>获取视频信息</span><span>。</span></p>
</li>
<li>
<p><span>要确定视频在商店中的使用方式，请选中适用的每个</span><span>角色</span><span>的复选框：</span></p>
<ul>
<li><code>Base Image</code></li>
<li><code>Small Image</code></li>
<li><code>Swatch Image</code></li>
<li><code>Thumbnail</code></li>
<li><code>Hide from Product Page</code></li>
</ul>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
<p><img alt="新视频" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-video-new-with-data.png?lang=en" /></p>
</li>
</ol>
<h2 id="maintain-api-access"><span>维护 API 访问</span></h2>
<p><span>根据 Google 开发者</span>条款和条件<span><span>，YouTube 可能会禁用已闲置时间超过 90 天的帐户的 API 访问权限。</span><span>这可能会导致您的视频无法显示。</span><span>为防止出现这种情况，请使用 cron 作业定期 ping API：</span></span></p>
<div class="code-toolbar">
<pre class="language-code"><code class="language-code">30 10 1 * * curl -i -G -e https://yourdomain.com/ -d "part=snippet&amp;maxResults=1&amp;q=test&amp;key=YOUTUBEAPIKEY" https://www.googleapis.com/youtube/v3/search &gt;/dev/null 2&gt;&amp;1
</code></pre>
<div class="toolbar">
<div class="toolbar-item"><button class="copy-to-clipboard-button" type="button" data-copy-state="copy"><span>复制</span></button></div>
</div>
</div>
<h2 id="field-reference"><span>现场参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>网址</span></td>
<td><span>关联视频的 URL。</span></td>
</tr>
<tr>
<td><span>标题</span></td>
<td><span>视频标题。</span></td>
</tr>
<tr>
<td><span>描述</span></td>
<td><span>视频说明。</span></td>
</tr>
<tr>
<td><span>预览图像</span></td>
<td><span>上传的图像，用作商店中视频的预览。</span></td>
</tr>
<tr>
<td><span>获取视频信息</span></td>
<td><span><span>检索存储在主机服务器上的视频元数据。</span><span>您可以使用原始数据或根据需要更新它。</span></span></td>
</tr>
<tr>
<td><span>角色</span></td>
<td><span><span>确定预览图像在您的商店中的使用方式。</span><span>您可以选择选项的任意组合：</span></span><code>Base Image</code><span>,&nbsp;</span><code>Small Image</code><span>,&nbsp;</span><code>Thumbnail</code><span>,&nbsp;</span><code>Swatch Image</code><span>,</span><code>Hide from Product Page</code></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Mon, 16 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2管理产品图片和视频]]></title>
      <link>https://www.360magento.com/blog/Manage-product-images-and-videos/</link>
      <description><![CDATA[<p>对于每个产品，您可以上传多个图像和视频，重新排列它们的顺序，并控制每个图像和视频的使用方式。如果您要管理大量图像，您可能更愿意将它们成批导入，而不是单独上传每一个。有关详细信息，请参阅导入产品图片。</p>
<p><span>如果您计划上传大图片以在&ldquo;</span><em>产品详细信息</em><span><span>&rdquo;页面上查看，您可能需要考虑设置最大像素大小（宽度和高度）并在上传时自动调整文件大小。</span><span>我们提供了一个选项，可以在您上传时自动调整较大图像文件的大小。</span><span>有关详细信息，请参阅</span></span>调整产品图片大小<span>。</span></p>
<h2 id="update-the-product-images"><span>更新产品图片</span></h2>
<ol>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span><span>要使用特定的商店视图，请将</span><span>左上角的</span></span><span>商店视图选择器设置为适用的视图。</span><span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>新产品图片</span><span><em>始终会上传并在</em></span><span></span><span><em>所有</em></span><span><span>商店视图中可见</span><span>，即使</span></span><code>All Store Views</code><span>范围未用于上传也是如此。</span><br /><br /><span>要从特定商店视图中隐藏任何产品图像，您必须切换到该商店视图，为该图像选中</span><span>从产品页面隐藏</span><span>复选框，然后单击</span><span>保存</span><span>。</span></p>
</div>
</div>
</li>
<li>
<p><span>向下滚动并展开</span><em>图像和视频</em><span>部分。</span></p>
</li>
</ol>
<h3 id="upload-an-image"><span>上传图片</span></h3>
<p><span>为获得最佳兼容性，建议上传所有带有</span><code>sRGB</code><span><span>颜色配置文件的产品图片。</span><span>在产品图片上传期间，所有其他颜色配置文件会自动转换为</span></span><code>sRGB</code><span>颜色配置文件，这可能会导致上传图片中的颜色不一致。</span></p>
<p><span>图像文件名长度，包括扩展名，不能超过 90 个字符。</span></p>
<p><span>要上传图像，请执行以下操作之一：</span></p>
<ul>
<li>
<p><span><span>将桌面上的图像拖放到</span><em><span>图像和视频</span></em><span>框中的</span></span><em>相机</em><span>(&nbsp;&nbsp;</span><img alt="相机图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-camera.png?lang=en" /><span>) 磁贴上。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>在</span><em>图像和视频</em><span>框中，单击</span><em>相机</em><span>(&nbsp;&nbsp;</span><img alt="相机图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-camera.png?lang=en" /><span>) 磁贴，选择计算机上的图像文件，然后单击</span><span>打开</span><span>。</span></p>
<p><img alt="上传或拖放" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-images-and-video-jewel-tee.png?lang=en" /></p>
</li>
</ul>
<h3 id="rearrange-images"><span>重新排列图像</span></h3>
<p><span><span>要更改图库中图像的顺序，请单击</span><span>&nbsp;图像块底部的</span></span><em>排序</em><span><span>(&nbsp; ) 图标并将图像拖动到</span><em><span>图像和视频</span></em><span>框中的不同位置。</span></span><img alt="排序图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-icon-sort.png?lang=en" /><span></span><em><span></span></em><span></span></p>
<p><img alt="改变顺序" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-images-and-videos-drag.png?lang=en" /></p>
<h3 id="delete-an-image"><span>删除图像</span></h3>
<p><span>要从图库中删除图像，请单击图像块右上角的</span><span>删除</span><span>(&nbsp;&nbsp;</span><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan.png?lang=en" /><span>&nbsp;) 图标，然后单击</span><span>保存</span><span>。</span></p>
<h3 id="set-image-details"><span>设置图像细节</span></h3>
<p><span>单击要在详细视图中打开的图像并执行以下任一操作：</span></p>
<p><img alt="图像细节视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-image-detail-jewel-tee.png?lang=en" /></p>
<p><span>要关闭详细视图，请单击右上角的</span><em>关闭</em><span>(&nbsp;&nbsp;</span><img alt="关闭图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-close-x.png?lang=en" /><span>) 图标。</span></p>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
<h4 id="enter-alt-text"><span>输入替代文字</span></h4>
<p><span><span>图像替代文本被屏幕阅读器引用以提高网络可访问性，搜索引擎在索引站点时也引用该文本。</span><span>某些浏览器会在鼠标悬停时显示 Alt 文本。</span><span>替代文本可以是几个词长，并包括精心挑选的关键词。</span></span></p>
<p><span>在&ldquo;</span><em>替代文本</em><span>&rdquo;框中，输入图像的简短说明。</span></p>
<h4 id="assign-roles"><span>分配角色</span></h4>
<p><span><span>默认情况下，所有角色都分配给上传到产品的第一张图像。</span><span>要将角色重新分配给另一个图像，请执行以下操作：</span></span></p>
<p><span>在</span><em>角色</em><span>框中，选择要分配给图像的角色。</span></p>
<p><span>当您返回</span><em>图像和视频</em><span>部分时，当前分配的角色会出现在每个图像下方。</span></p>
<p><img alt="分配的角色" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-images-video-swatch.png?lang=en" /></p>
<h4 id="hide-an-image"><span>隐藏图片</span></h4>
<p><span>要从缩略图库中排除图像，请选中</span><span>隐藏</span><span>复选框并单击</span><span>保存</span><span>。</span></p>
<p><img alt="隐藏图像" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-images-and-videos-hidden.png?lang=en" /></p>
<h2 id="image-roles"><span>形象角色</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>形象角色</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>缩略图</span></td>
<td><span><span>缩略图图像出现在缩略图库、购物车和某些块（如相关项目）中。</span><span>示例尺寸：50 x 50 像素</span></span></td>
</tr>
<tr>
<td><span>小图</span></td>
<td><span><span>小图像用于类别和搜索结果页面列表中的产品图像，以及显示追加销售、交叉销售和新产品列表等部分所需的产品图像。</span><span>示例尺寸：470 x 470 像素</span></span></td>
</tr>
<tr>
<td><span>基本图像</span></td>
<td><span><span>基本图像是产品详细信息页面上的主要图像。</span><span>如果您上传的图像大于图像容器，则会激活图像缩放。</span><span>根据您想要实现的缩放级别，基本图像应该是容器大小的两倍或三倍。</span><span>示例尺寸：470 x 470 像素（无缩放）、1100 x 1100 像素（有缩放）</span></span></td>
</tr>
<tr>
<td><span>斯沃琪</span></td>
<td><span></span>样本<span><span>可</span><span>用于说明颜色、图案或纹理。</span><span>示例尺寸：50 x 50 像素</span></span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="watermarks"><span>水印</span></h2>
<p><span><span>如果您不惜代价创建自己的原创产品图片，那么您将无能为力地防止不法竞争者通过单击鼠标窃取它们。</span><span>但是，您可以通过在每张图像上放置水印以将它们标识为您的财产，从而使它们成为不太吸引人的目标。</span><span>水印文件可以是 JPG (JPEG)、GIF 或 PNG 图像。</span><span>GIF 和 PNG 文件类型都支持透明层，可用于为水印提供透明背景。</span></span></p>
<p><span>以下示例中用于</span><em>小</em><span>图像的水印是具有透明背景的黑色徽标，并使用以下设置保存为 PNG 文件：</span></p>
<ul>
<li><span>尺寸：50x50</span></li>
<li><span>不透明度：5</span></li>
<li><span>位置：瓷砖</span></li>
</ul>
<p><img alt="平铺水印" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-watermark-tiled.png?lang=en" /></p>
<h3 id="add-watermarks-to-product-images"><span>为产品图片添加水印</span></h3>
<ol>
<li>
<p><span>在</span><em>Admin</em><span>侧边栏上，转到</span><span>Content</span><span>&nbsp;&gt;&nbsp;</span><em>Design</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
<p><span>有关设计配置的更多信息，请参阅</span>设计配置<span>。</span></p>
</li>
<li>
<p><span><span>找到您要配置的商店视图，然后单击</span><em><span>操作</span></em><span>列</span><span>中的</span></span><span>编辑。</span><span></span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>在</span><em>其他设置</em><span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>下</span><span>，展开</span></span><span>产品图片水印</span><span>部分。</span></p>
</li>
<li>
<p><span>完成</span><span>Base</span><span>、</span><span>Thumbnail</span><span>、</span><span>Small</span><span>和</span><span>Swatch Image</span><span>图像设置，如下所示。</span></p>
<p><span>每个部分中的字段是相同的。</span></p>
<ul>
<li>
<p><span><span>以百分比形式</span><span>输入</span></span><span>图像不透明度。</span><span>例如：</span><code>40</code></p>
</li>
<li>
<p><span>输入</span><span>图像大小</span><span><span>（以像素为单位）。</span><span>例如：</span></span><code>200 x 200</code></p>
</li>
<li>
<p><span>单击</span><span>上传</span><span>并选择您要使用的图像文件。</span></p>
</li>
<li>
<p><span>设置</span><span>图像位置</span><span>以确定水印出现的位置。</span></p>
</li>
</ul>
<p><img alt="产品图片水印 - 基础" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/config-design-product-image-watermarks-base.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>当提示刷新缓存时，点击系统消息中的</span><span>缓存管理</span><span>，刷新失效的缓存。</span></p>
<p><img alt="刷新缓存" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/msg-cache-management.png?lang=en" /></p>
</li>
</ol>
<div class="extension tip">
<div><span><span>提示</span></span></div>
<div>
<p><span>您可以单击</span><span>使用默认值</span>&nbsp;<img alt="箭头返回" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-arrow-return.png?lang=en" /><span>来恢复默认值。</span></p>
</div>
</div>
<h3 id="delete-a-watermark"><span>删除水印</span></h3>
<ol>
<li>
<p><span>在图像的左下角，单击</span><span>删除</span><span>(&nbsp;&nbsp;</span><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan-solid.png?lang=en" /><span>&nbsp;) 图标。</span></p>
<p><img alt="删除水印" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-image-watermark-delete.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>当提示刷新缓存时，点击系统消息中的</span><span>缓存管理</span><span>，刷新失效的缓存。</span></p>
<p><span>如果水印图像仍然存在于店面中，请返回缓存管理并单击</span><span>Flush Magento Cache</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sun, 15 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品图片配置]]></title>
      <link>https://www.360magento.com/blog/Product-image-configuration/</link>
      <description><![CDATA[<p><span>如果您计划上传大图片以在&ldquo;</span><em>产品详细信息</em><span><span>&rdquo;页面上查看，您可能需要考虑设置最大像素大小（宽度和高度）并在上传时自动调整文件大小。</span><span>为了支持这种类型的产品图片上传，有一个选项可以在您上传时自动调整较大图片文件的大小。</span><span>对于要添加到目录但还没有要显示的图像资产的产品，您可以配置占位符图像。</span></span></p>
<h2 id="product-image-resizing"><span>产品图片调整大小</span></h2>
<p><span></span><em>上传产品图片时，您可以添加不同尺寸的较大图片，以在&ldquo;产品详细信息</em><span><span>&rdquo;页面</span><span>上提供详细、高质量的缩放。</span><span>为确保所有图像具有相似的大小和外观，我们提供了一个图像大小调整选项，以确保所有图像都匹配特定的像素大小。</span><span>此选项使用配置设置自动调整所有产品图像的大小，这有助于提高缩放性能、更快地加载图像并保持产品图像的统一外观。</span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>为获得最佳兼容性，建议上传所有带有</span><code>sRGB</code><span><span>颜色配置文件的产品图片。</span><span>在产品图片上传期间，所有其他颜色配置文件会自动转换为</span></span><code>sRGB</code><span>颜色配置文件，这可能会导致上传图片中的颜色不一致。</span></p>
</div>
</div>
<p><span><span>设置最大像素宽度和高度可按像素将图像调整为物理尺寸。</span><span>Commerce 在保持比例的同时，根据宽度或高度的较大值调整图像大小。</span><span>降低 JPG 图像的质量数量可减小文件大小。</span></span></p>
<p><span><span>例如，100% 的 3000 x 2100 像素 JPG 可能是 5mb 以上的图像文件。</span><span>调整此图像的大小会将宽度减小到 1920 像素，同时保持比例和质量为 80%，以提供更小的文件大小和更高的质量。</span></span></p>
<h3 id="enable-image-resizing"><span>启用图像大小调整</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>Advanced</span><span>并选择</span><span>System</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><em><span>图像上传配置</span></em></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><em><span></span></em><span></span></p>
<p><span>要更改默认设置，您可能需要取消选择</span><span>使用系统值</span><span>复选框。</span></p>
<p><img alt="图片上传配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/system-image-upload-configuration.png?lang=en" /></p>
<p><span><span>有关这些配置设置的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span><em>图像上传配置</em><span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>要启用，请确保</span><span>Enable Frontend Resize</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span><span>输入介于</span><span>和</span><span>%之间的</span></span><span>质量</span><span>设置。</span><code>1</code><span></span><code>100</code><span></span></p>
<p><span>我们建议将设置设置在 80-90% 之间，以减小文件大小并提高质量。</span></p>
</li>
<li>
<p><span>设置图像的</span><span>最大宽度</span><span>（以像素为单位）。</span></p>
<p><span>调整图像大小时，它不会超过此宽度并保持比例。</span></p>
</li>
<li>
<p><span>设置图像的</span><span>最大高度</span><span>（以像素为单位）。</span></p>
<p><span>调整图像大小时，它不会超过此高度并保持比例。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h3 id="field-descriptions"><span>字段说明</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th>范围</th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>质量</span></td>
<td><span>全球的</span></td>
<td><span><span>确定调整大小的图像的 JPG 质量。</span><span>较低的质量会减小文件大小。</span><span>我们建议 80-90% 以帮助减小文件大小并保持高质量。</span><span>默认值：80</span></span></td>
</tr>
<tr>
<td><span>启用前端调整大小</span></td>
<td><span>全球的</span></td>
<td><span>允许 Commerce 调整您可能为&ldquo;</span><em>产品详细信息</em><span><span>&rdquo;页面上传的大型、超大图像的大小。</span><span>Commerce 在上传文件时使用 JavaScript 调整图像文件的大小。</span><span>调整图像大小时，它会保持准确的比例，以满足且不超过最大宽度或最大高度的最大尺寸。</span><span>默认：</span></span><code>Yes</code></td>
</tr>
<tr>
<td><span>最大宽度</span></td>
<td><span>全球的</span></td>
<td><span><span>确定图像的最大像素宽度。</span><span>调整图像大小时，它不会超过此宽度。</span><span>默认：</span></span><code>1920</code></td>
</tr>
<tr>
<td><span>最大高度</span></td>
<td><span>全球的</span></td>
<td><span><span>确定图像的最大像素高度。</span><span>调整图像大小时，它不会超过此高度。</span><span>默认：</span></span><code>1200</code></td>
</tr>
</tbody>
</table>
</div>
<h2 id="image-placeholders"><span>图片占位符</span></h2>
<p><span><span>在永久产品图像可用之前，Adobe Commerce 和 Magento Open Source 使用临时图像作为占位符。</span><span>可以为每个角色上传不同的占位符。</span><span>初始占位符图像是示例徽标，您可以将其替换为您选择的图像。</span></span></p>
<p><img alt="图片占位符" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-image-placeholder.png?lang=en" /></p>
<p><span>要上传占位符图像：</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>产品图片占位符</span></span></span><img alt="扩展图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><span><span>有关这些配置设置的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span><em>产品图像占位符</em><span>。</span><em><span></span></em><span></span></p>
<p><img alt="产品图片占位符" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-product-image-placeholders.png?lang=en" /></p>
</li>
<li>
<p><span>对于每个图像角色，单击</span><span>选择文件</span><span>，在您的计算机上找到图像，然后上传文件。</span></p>
<p><span>您可以为所有三个角色使用相同的图像，也可以为每个角色上传不同的占位符图像。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sat, 14 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2礼品卡产品]]></title>
      <link>https://www.360magento.com/blog/Gift-card-product/</link>
      <description><![CDATA[<p>每张礼品卡都有一个唯一的代码，在结账时只能由一位顾客兑换。必须先建立代码池，然后才能销售礼品卡。有关如何在购物车中兑换礼品卡的信息，请参阅礼品卡工作流程。</p>
<p><img alt="礼品卡产品页面" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-giftcard-product-page.png?lang=en" /></p>
<p><span>礼品卡产品分为三种：</span></p>
<ul>
<li>
<p><span>虚拟</span><span><span>- 虚拟礼品卡会发送到收件人的电子邮件地址，这是购买礼品卡时需要的。</span><span>送货地址不是必需的。</span></span></p>
</li>
<li>
<p><span>实物</span><span>- 实物礼品卡会运送到收件人的地址，这是购买礼品卡时所必需的。</span></p>
</li>
<li>
<p><span>合并</span><span>-</span>合并后的礼品卡<span><span>将发送并通过电子邮件发送给收件人。</span><span>购买礼品卡时需要收件人的电子邮件和送货地址。</span></span></p>
</li>
</ul>
<h2 id="create-a-gift-card-product"><span>创建礼品卡产品</span></h2>
<p><span>以下说明演示了使用</span>产品模板<span><span>、必填字段和基本设置创建礼品卡的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<h3 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span></span><em>在添加产品</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span><span>) 菜单</span><span>的右上角，选择</span></span><span>礼品卡</span><span>。</span></p>
<p><img alt="添加礼品卡" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-gift-card.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h3>
<p><span>您可以使用默认</span><code>Gift Card</code><span><span>属性集或选择另一个。</span><span>要选择用作产品模板的属性集，请执行以下操作之一：</span></span></p>
<ul>
<li>
<p><span>单击&ldquo;</span><span>属性集</span><span>&rdquo;字段并输入属性集的全部或部分名称。</span></p>
</li>
<li>
<p><span>在显示的列表中，选择要使用的属性集。</span></p>
</li>
</ul>
<p><img alt="选择属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set-gift-card.png?lang=en" /></p>
<h3 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h3>
<ol>
<li>
<p><span>输入礼品卡的</span><span>产品名称</span><span>。</span></p>
<p><span><span>您还可以在名称中注明礼品卡的类型。</span><span>例如，</span></span><em>Luma 虚拟礼品卡</em><span>。</span></p>
</li>
<li>
<p><span>输入产品的</span><span>SKU</span><span>。</span></p>
<p><span>默认情况下，产品名称用作默认 SKU。</span></p>
</li>
<li>
<p><span>将</span><span>卡类型</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Virtual</code><span>- 虚拟礼品卡通过电子邮件发送给收件人。</span></li>
<li><code>Physical</code><span>- 实物礼品卡可提前量产并压印独特编码。</span></li>
<li><code>Combined</code><span>- 组合礼品卡兼具虚拟礼品卡和实体礼品卡的特点。</span></li>
</ul>
<p><img alt="礼品卡类型" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-gift-card-type.png?lang=en" /></p>
</li>
<li>
<p><span>要为客户提供固定金额的选择，请单击&ldquo;</span><span>添加金额</span><span>&rdquo;并以小数形式输入卡的第一个固定值。</span></p>
<p><span>重复此步骤输入固定金额的选择。</span></p>
<p><img alt="礼品卡金额" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-gift-card-amounts.png?lang=en" /></p>
</li>
<li>
<p><span>要让客户能够设置礼品卡的价值，请执行以下操作：</span></p>
<ul>
<li>
<p><span>将</span><span>未结金额</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>要定义最小和最大可接受值的范围，请输入未结</span><span>金额从</span><span>和</span><span>到</span><span>值。</span></p>
</li>
</ul>
<p><span>您可以创建具有固定定价、开放金额定价或两者的礼品卡。</span></p>
</li>
</ol>
<h3 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h3>
<ol>
<li>
<p><span>对于实体礼品卡或组合礼品卡，请输入库存</span><span>数量</span><span>。</span></p>
</li>
<li>
<p><span>如果是要运送的礼品卡，请输入包裹的</span><span>重量</span><span>。</span></p>
</li>
<li>
<p><span>在</span><span>类别</span><span>字段中，选择</span><code>Gift Card</code><span>。</span></p>
</li>
</ol>
<p><span><span>可能还有其他描述产品的单独属性。</span><span>选择不同的属性集，您可以稍后完成它们。</span></span></p>
<h3 id="step-5%3A-complete-the-gift-card-information"><span>第五步：填写礼品卡信息</span></h3>
<p><span>产品设置的</span><em>礼品卡信息</em><span>部分可用于覆盖确定礼品卡管理方式的</span>礼品卡配置<span>设置。</span></p>
<ol>
<li>
<p><span>向下滚动到</span><em>礼品卡信息</em><span>部分。</span></p>
<p><span>本节中的默认设置由系统配置决定。</span></p>
<p><img alt="礼品卡信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-gift-card-information.png?lang=en" /></p>
</li>
<li>
<p><span>根据您希望礼品卡的功能更改其他字段：</span></p>
<ul>
<li>
<p><span>Treat Balance as Store Credit</span><span>&nbsp;- 确定礼品卡持有人是否可以将余额兑换为商店信用。</span></p>
</li>
<li>
<p><span>有效期（天）</span><span><span>&nbsp;- 确定购买后到礼品卡过期的天数。</span><span>如果您不想为卡的使用寿命设置限制，请将此字段留空。</span></span></p>
</li>
<li>
<p><span>允许消息</span><span><span>- 确定礼品卡的购买者是否可以输入消息给收件人。</span><span>虚拟（通过电子邮件发送）和实物（运送）礼品卡都可以包含礼品留言。</span></span></p>
</li>
<li>
<p><span>电子邮件模板</span><span>- 确定用于向礼品卡收件人发送通知的电子邮件模板。</span></p>
</li>
</ul>
</li>
</ol>
<h3 id="step-6%3A-complete-the-product-information"><span>第六步：填写产品信息</span></h3>
<p><span>根据需要填写以下部分中的信息：</span></p>
<ul>
<li>内容</li>
<li>图片和视频</li>
<li>相关产品、追加销售和交叉销售</li>
<li>搜索引擎优化</li>
<li>可定制的选项</li>
<li>网站中的产品</li>
<li>设计</li>
<li>礼品选项</li>
</ul>
<h3 id="step-7%3A-publish-the-product"><span>第 7 步：发布产品</span></h3>
<ol>
<li>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>开关设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>执行以下操作之一：</span></p>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;</span><span>) 菜单上选择</span></span><span>客户视图，</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
</li>
</ul>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/admin-customer-view.png?lang=en" /></p>
<p><span>方法 2：</span><span>保存并关闭</span></p>
<p><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>) 菜单上，选择</span><span>保存并关闭</span><span>。</span></p>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
</li>
</ol>
<h2 id="things-to-remember"><span>要记住的事情</span></h2>
<ul>
<li>
<p><span>必须先生成唯一编号的</span><em>代码池</em><span>，然后才能提供礼品卡进行销售。</span></p>
</li>
<li>
<p><span>礼品卡可以设置为</span><code>Redeemable</code><span>或</span><code>Non-Redeemable</code><span>。</span></p>
</li>
<li>
<p><span></span><span><em>购买礼品卡时不对</em></span><span><span>礼品卡</span><span>征税。</span><span>仅当购买的礼品卡用于购买产品时，才会对产品征税。</span></span></p>
</li>
<li>
<p><span>礼品卡的有效期可以是无限的，也可以设置为指定的天数。</span></p>
</li>
<li>
<p><span>礼品卡的价值可以设置为固定金额，也可以设置为具有最小值和最大值的开放金额。</span></p>
</li>
<li>
<p><span>可以在下订单或开具发票时为客户创建礼品卡帐户。</span></p>
</li>
</ul>]]></description>
      <pubDate>Fri, 13 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2目录图片和视频]]></title>
      <link>https://www.360magento.com/blog/Catalog-images-and-video/</link>
      <description><![CDATA[<p><span><span>使用比例一致的高质量图像可以使您的目录具有专业的外观和商业吸引力。</span><span>如果您有一个大型目录，每个产品有多个图像，那么您可以轻松地管理数百个（如果不是数千个）产品图像。</span><span>在开始之前，为您的图像文件建立一个命名约定，并组织它们，以便您可以在需要时找到原件。</span></span></p>
<p><img alt="产品图片" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-images-videos-swatch.png?lang=en" /></p>
<p><span><span>单个产品图像在整个目录中以不同的尺寸呈现。</span><span>图像容器在页面上的显示大小在主题的样式表中定义。</span><span>但是，图像在您商店中的显示位置取决于分配给图像的角色。</span><span>主要产品图像或</span></span><em>基本</em><span><span>图像必须足够大以产生缩放所需的放大率。</span><span>除了主图片之外，同一图片的较小版本可能会出现在产品列表中，或作为缩略图出现在购物车中。</span><span>您可以上传所需的最大尺寸的图像或使用</span></span>Adob​​e Stock<span><span>图像，然后让 Commerce 呈现每次使用所需的尺寸。</span><span>可以为所有角色使用相同的图像，也可以为每个角色分配不同的图像。</span><span>默认情况下，上传的第一张图像分配给所有三个角色。</span></span></p>
<h2 id="storefront-media-browser"><span>店面媒体浏览器</span></h2>
<p><span><span>产品页面上的媒体浏览器显示与产品相关的多个图像、视频或样本。</span><span>每个缩略图都可以显示产品的不同视图或变体。</span><span>单击缩略图浏览媒体资产。</span><span>尽管媒体浏览器的位置因主题而异，但默认位置就在产品页面主图像的下方。</span><span><br /></span></span></p>
<p><img alt="店面媒体浏览器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-thumbnail-gallery.png?lang=en" /></p>
<h3 id="image-zoom"><span>图像缩放</span></h3>
<p><span>如果</span>基本图像<span><span>足够大以创建缩放效果，则客户可以在鼠标悬停时查看图像的放大部分。</span><span>启用缩放后，客户可以单击主图像并四处移动光标以放大图像的不同部分。</span><span>放大的选区出现在图像的右侧。</span></span></p>
<p><img alt="图像缩放" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-image-zoom.png?lang=en" /></p>]]></description>
      <pubDate>Thu, 12 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2可下载产品]]></title>
      <link>https://www.360magento.com/blog/Downloadable-product/</link>
      <description><![CDATA[<p><span><span>可下载产品可以是您可以作为文件提供的任何内容，例如电子书、音乐、视频、软件应用程序或更新。</span><span>您可以出售一张专辑并单独出售每首歌曲。</span><span>您还可以使用可下载产品来提供产品目录的电子版本。</span></span></p>
<p><span><span>由于购买后才能下载，因此您可以提供样本，例如书籍的摘录、音频文件的剪辑或视频的预告片。</span><span>这是客户在购买产品之前可以尝试的东西。</span><span>您提供的可供下载的文件可以上传到您的服务器，也可以从其他服务器上传。</span></span></p>
<p><img alt="可下载产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-product-downloadable.png?lang=en" /></p>
<p><span><span>可下载的产品可以配置为要求客户登录帐户以接收链接，或者可以通过电子邮件发送并与他人共享。</span><span>下载可用之前的订单状态、默认值和其他交付选项都在配置中设置。</span><span>在计划添加可下载目录时，请注意以下事项：</span></span></p>
<ul>
<li>
<p><span>可下载的产品可以上传到服务器或从互联网上的另一台服务器链接。</span></p>
</li>
<li>
<p><span>您可以确定客户可以下载产品的次数。</span></p>
</li>
<li>
<p><span>购买可下载产品的客户可能需要在结账前先登录。</span></p>
</li>
<li>
<p><span>当订单处于 a</span><code>Pending</code><span>或</span><code>Invoiced</code><span>状态时，可以交付可下载产品。</span></p>
</li>
<li>
<p><span>由于可下载产品未发货，因此当购物车仅包含可下载产品时，结帐的</span><em>发货</em><span>步骤将被跳过。</span></p>
</li>
</ul>
<h2 id="configure-the-download-options"><span>配置下载选项</span></h2>
<p><span>可下载配置设置确定可下载产品的默认值和交付选项，并指定访客是否可以购买下载。</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>可</span><em>下载产品选项</em><span>部分。</span></p>
<p><img alt="可下载的产品选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-downloadable-product-options.png?lang=en" /></p>
<p><span><span>有关这些配置选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的可</span></span><em>下载产品选项</em><span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>要在下载可用时确定订单流程的状态，请将</span><span>订单项目状态设置为启用下载</span><span>为以下之一：</span></p>
<ul>
<li><code>Pending</code></li>
<li><code>Invoiced</code></li>
</ul>
</li>
<li>
<p><span>要为单个客户可以进行的下载次数设置默认限制，请为</span><span>默认最大下载</span><span>次数输入数字。</span></p>
</li>
<li>
<p><span>将</span><span>可共享</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Yes</code><span>- 允许客户通过电子邮件将下载链接发送给他人。</span></li>
<li><code>No</code><span>- 通过要求客户登录到他们的帐户才能访问下载链接来防止客户与他人共享下载链接。</span></li>
</ul>
</li>
<li>
<p><span>对于</span><span>Default Sample Title</span><span>，输入您希望显示在样本选择上方的标题。</span></p>
<p><img alt="样本标题" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-downloadable-config-sample-title.png?lang=en" /></p>
</li>
<li>
<p><span>对于</span><span>Default Link Title</span><span>，输入要用于下载链接的默认文本。</span></p>
</li>
<li>
<p><span>如果您希望下载链接在新的浏览器窗口中打开，请将</span><span>&ldquo;在新窗口中打开链接&rdquo;</span><span>设置为</span><code>Yes</code><span>。</span></p>
<p><span>此设置用于使您商店的浏览器窗口保持打开状态。</span></p>
</li>
<li>
<p><span>要确定可下载内容的交付方式，请将</span><span>使用内容处置</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Attachment</code><span>- 通过电子邮件作为附件提供下载链接。</span></li>
<li><code>Inline</code><span>- 将下载链接作为网页上的链接提供。</span></li>
</ul>
</li>
<li>
<p><span>如果您想要要求购买者在购买下载之前注册客户帐户并登录，请将</span><span>如果购物车包含可下载项目则禁用访客结账</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h2 id="create-a-downloadable-product"><span>创建可下载的产品</span></h2>
<p><span>以下说明演示了使用</span>产品模板<span><span>、必填字段和基本设置创建可下载产品的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>可下载的文件名可以包含字母和数字。</span><span>破折号或下划线字符可用于表示单词之间的空格。</span><span>文件名中的任何无效字符都将替换为下划线。</span></span></p>
</div>
</div>
<h3 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span><span>在</span><span>右上角的</span></span><em>添加产品</em><span><span>( ) 菜单上，选择</span><span>。</span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span></span><code>Downloadable Product</code><span></span></p>
<p><img alt="添加可下载产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-downloadable.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h3>
<p><span><span>样本数据包括一个</span><span>名为</span><em><span>Downloadable的</span></em></span>属性集<span><span>，它具有用于可下载产品的特殊字段。</span><span>您可以使用现有模板或在保存产品之前创建另一个模板。</span></span><em><span></span></em><span></span></p>
<p><span>要选择用作产品模板的属性集，请执行以下操作之一：</span></p>
<ul>
<li>
<p><span>对于</span><span>Search</span><span>，输入属性集的名称。</span></p>
</li>
<li>
<p><span>在列表中，选择</span><code>Downloadable</code><span>属性集。</span></p>
</li>
</ul>
<p><span>更新表格以反映更改。</span></p>
<p><img alt="选择属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set-downloadable.png?lang=en" /></p>
<h3 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h3>
<ol>
<li>
<p><span>输入</span><span>产品名称</span><span>。</span></p>
</li>
<li>
<p><span><span>接受基于产品名称</span><span>的默认</span></span><span>SKU或输入其他名称。</span><span></span></p>
</li>
<li>
<p><span>输入产品</span><span>价格</span><span>。</span></p>
</li>
<li>
<p><span>由于产品尚未准备好发布，因此将</span><span>Enable Product</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
<p><span>保存产品后，</span>商店视图<span>选择器会出现在左上角。</span></p>
</li>
<li>
<p><span><span>选择</span><span>产品可用的</span></span><span>商店视图。</span><span></span></p>
<p><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h3>
<ol>
<li>
<p><span>将</span><span>税级</span><span>设置为以下之一：</span></p>
<ul>
<li><code>None</code></li>
<li><code>Taxable Goods</code></li>
</ul>
</li>
<li>
<p><span>输入当前库存产品的</span><span>数量</span><span>。</span></p>
<p><span>请注意以下事项：</span></p>
<ul>
<li>
<p><span>默认情况下，</span><span>库存状态</span><span>设置为</span><code>Out of Stock</code><span>。</span></p>
</li>
<li>
<p><span><span>因为可下载的产品不发货，所以</span><span>不使用</span></span><span>重量字段。</span><span>如果您启用此功能，它会变成一个</span>简单的产品<span>，并且</span><em>这个产品是可下载的吗？</em><span>选项卡不能使用。</span></p>
</li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>如果启用</span>库存管理<span><span>，单一来源商户在此部分设置数量。</span><span>多来源商家在&ldquo;来源&rdquo;部分添加来源和数量。</span><span>请参阅以下</span></span><em>分配来源和数量（库存管理）</em><span>部分。</span></p>
</div>
</div>
</li>
<li>
<p><span>接受默认的</span><span>可见性</span><span>设置</span><code>Catalog, Search</code><span>。</span></p>
</li>
<li>
<p><span>要在</span>新产品列表中展示<span>该产品，请选中</span><span>将产品设置为新</span><span>复选框。</span></p>
</li>
<li>
<p><span>要为产品分配</span><em>类别</em><span>，请单击&ldquo;</span><span>选择...</span><span>&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p><span>选择现有类别</span><span>：</span></p>
<ul>
<li>
<p><span>开始在框中键入以查找匹配项。</span></p>
</li>
<li>
<p><span>选中要分配的每个类别的复选框。</span></p>
</li>
</ul>
<p><span>创建类别</span><span>：</span></p>
<ul>
<li>
<p><span>单击</span><span>新建类别</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>并选择</span><span>父类别</span><span>以确定其在</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/categories/category-root.html?lang=en">菜单结构</a><span>中的位置。</span></p>
</li>
<li>
<p><span>单击</span><span>创建类别</span><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>将</span><span>格式</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Download</code></li>
<li><code>DVD</code></li>
</ul>
<p><span>如有必要，您可以编辑</span>属性<span>以添加更多值。</span></p>
<p><img alt="产品详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-details-downloadable.png?lang=en" /></p>
<p><span><span>可能还有其他描述产品的属性。</span><span>选择因属性集而异，您可以稍后完成它们。</span></span></p>
</li>
</ol>
<h4 id="assign-sources-and-quantities-(inventory-management)"><span>分配来源和数量（库存管理）</span></h4>
<p><span></span>对于使用库存管理<span><span>的多来源商家</span><span>，向下滚动到</span></span><span>来源</span><span>部分并分配来源和数量：</span></p>
<ol>
<li>
<p><span>要添加源，请单击</span><span>分配源</span><span>。</span></p>
</li>
<li>
<p><span>浏览或搜索来源并选中要为产品添加的来源旁边的复选框。</span></p>
<p><img alt="为产品分配来源" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-assign-sources_c1.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>完成</span><span>以添加源。</span></p>
</li>
<li>
<p><span>要管理源的数量和状态，请单击&ldquo;</span><span>高级库存</span><span>&rdquo;并将&ldquo;</span><span>管理库存</span><span>&rdquo;设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>将</span><span>源项状态</span><span>设置为</span><code>In Stock</code><span>。</span></p>
</li>
<li>
<p><span>输入数量更新现有库存的</span><span>数量</span><span>。</span></p>
</li>
<li>
<p><span>要设置库存数量通知，请执行以下操作之一：</span></p>
<ul>
<li>
<p><em>自定义通知数量</em><span>- 清除</span><span>通知数量使用默认复选框并在</span><span></span><span>通知数量</span><span><span>中输入一个数量</span><span>。</span></span></p>
</li>
<li>
<p><em>默认通知数量</em><span>- 选择</span><span>通知数量使用默认</span><span><span>复选框。</span><span>Commerce 检查并使用 Advanced Inventory 或全局商店配置中的设置。</span></span></p>
</li>
</ul>
<p><img alt="更新每个来源的产品数量" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-quantity_c1.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-5%3A-complete-the-downloadable-information"><span>第 5 步：完成可下载信息</span></h3>
<p><span>向下滚动，展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>Downloadable&nbsp;</span><em>Information</em><span>部分，然后选择</span><span>Is this downloadable product?&nbsp;</span><span>复选框。</span></p>
<p><span>启用后，可</span><em>下载信息</em><span><span>部分分为两部分。</span><span>第一部分描述了每个下载链接，第二部分描述了每个示例文件。</span><span>许多这些选项的默认值可以在</span></span>配置<span>中设置。</span></p>
<p><img alt="可下载信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-downloadable-information.png?lang=en" /></p>
<h4 id="complete-the-links"><span>完成链接</span></h4>
<ol>
<li>
<p><span>在&ldquo;</span><em>链接</em><span><span>&rdquo;部分，输入</span><span>要用作下载链接标题的标题</span></span><span>。</span><span></span></p>
</li>
<li>
<p><span>如果适用，请选中</span><span>链接可单独购买</span><span>复选框。</span></p>
</li>
<li>
<p><span>单击</span><span>添加链接</span><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>输入下载的</span><span>标题</span><span>和</span><span>价格</span><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>文件</span><span>和</span><span>示例</span><span>文件，选择以下下载分发方法之一：</span></p>
<ul>
<li><code>Upload File</code><span><span>- 选择此方式将分发文件上传到服务器。</span><span>浏览到文件并选择它进行上传。</span></span></li>
<li><code>URL</code><span><span>- 选择此方法从 URL 访问分发文件。</span><span>输入下载文件的完整 URL。</span></span></li>
</ul>
</li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>您不能将指向外部资源的链接用作可下载产品。</span><span>有效链接域在</span></span><code>env.php</code><span>文件中以编程方式预定义</span><span>。</span></p>
</div>
</div>
<ul>
<li>
<p><span>将</span><span>可共享</span><span>设置为以下之一：</span></p>
<ul>
<li>
<p><code>No</code><span>- 要求客户登录他们的帐户才能访问下载链接。</span></p>
</li>
<li>
<p><code>Yes</code><span>- 通过电子邮件发送链接，客户可以与他人分享。</span></p>
</li>
<li>
<p><code>Use Config</code><span></span>- 使用可下载产品选项<span><span>配置</span><span>中指定的方法。</span></span></p>
</li>
</ul>
</li>
<li>
<p><span>执行以下操作之一：</span></p>
<ul>
<li><span>要限制每个客户的下载，请为最大输入最大数量</span><span><span><span>。</span><span>下载</span></span></span><span>。</span></li>
<li><span>要允许无限制下载，请选中</span><span>无限制</span><span>复选框。</span></li>
</ul>
</li>
</ul>
<p><img alt="链接详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-downloadable-link-detail.png?lang=en" /></p>
</li>
<li>
<p><span>要添加另一个链接，请单击</span><span>添加链接</span><span>并重复这些步骤。</span></p>
</li>
</ol>
<h4 id="complete-the-samples"><span>完成样本</span></h4>
<ol>
<li>
<p><span>在</span><em>示例</em><span><span>部分中，输入</span><span>要用作示例标题的标题</span></span><span>。</span><span></span></p>
</li>
<li>
<p><span>要完成每个样本的信息，请点击</span><span>添加链接</span><span>。</span></p>
<p><img alt="样品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-downloadable-samples.png?lang=en" /></p>
</li>
<li>
<p><span>完成链接详细信息如下：</span></p>
<ul>
<li>
<p><span>输入单个样本的</span><span>标题</span><span>。</span></p>
</li>
<li>
<p><span>选择以下分发方式之一：</span></p>
<ul>
<li><code>Upload File</code><span><span>- 选择此方式将分发文件上传到服务器。</span><span>浏览到文件并选择它进行上传。</span></span></li>
<li><code>URL</code><span><span>- 选择此方法从 URL 访问分发文件。</span><span>输入下载文件的完整 URL。</span></span></li>
</ul>
</li>
<li>
<p><span>要添加另一个示例，请单击</span><span>添加链接</span><span>并重复这些步骤。</span></p>
</li>
<li>
<p><span>要更改示例的顺序，请抓住</span><em>更改顺序</em><span>(&nbsp;</span><img alt="位置控制器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-sort-order.png?lang=en" /><span>) 图标并将示例拖动到新位置。</span></p>
</li>
</ul>
</li>
</ol>
<h3 id="step-6%3A-complete-the-product-information"><span>第六步：填写产品信息</span></h3>
<p><span>向下滚动并根据需要完成以下部分中的信息：</span></p>
<ul>
<li>内容</li>
<li>图片和视频</li>
<li>搜索引擎优化</li>
<li>相关产品、追加销售和交叉销售</li>
<li>可定制的选项</li>
<li>网站中的产品</li>
<li>设计</li>
<li>礼品选项</li>
</ul>
<h3 id="step-7%3A-publish-the-product"><span>第 7 步：发布产品</span></h3>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>设置为</span><code>Yes</code><span>并执行以下操作之一：</span></p>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;</span><span>) 菜单上选择</span></span><span>客户视图。</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
<p><span>商店在新的浏览器选项卡中打开。</span></p>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/admin-customer-view.png?lang=en" /></p>
</li>
</ul>
<p><span>方法 2：</span><span>保存并关闭</span></p>
<p><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>) 菜单上，选择</span><span>保存并关闭</span><span>。</span></p>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
<h2 id="storefront-experience"><span>店面体验</span></h2>
<p><span>在客户帐户仪表板中，&ldquo;</span><em>我的可下载产品</em><span><span>&rdquo;页面链接到可下载产品的每个订单。</span><span>订单完成后，可以从客户的帐户下载。</span></span></p>
<p><img alt="我的可下载产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/customer-account-my-downloadable-products.png?lang=en" /></p>
<p><span>下表描述了</span><em>我的可下载产品</em><span>值：</span></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>柱子</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>命令＃</span></td>
<td><span>购买可下载产品的</span>订单<span><span>。</span><span>提供指向订单详细信息的链接。</span></span></td>
</tr>
<tr>
<td><span>日期</span></td>
<td><span>订单创建日期。</span></td>
</tr>
<tr>
<td><span>标题</span></td>
<td><span><span>随订单购买的可下载产品的名称。</span><span>提供指向可下载产品的链接。</span></span></td>
</tr>
<tr>
<td><span>状态</span></td>
<td><span>订单处理状态。</span></td>
</tr>
<tr>
<td><span>剩余下载量</span></td>
<td><span>已下载产品的可用下载次数。</span></td>
</tr>
</tbody>
</table>
</div>
<p><em><span>从帐户仪表板下载产品文件</span></em></p>
<ol>
<li>
<p><span>在他们的帐户仪表板中，客户选择</span><span>My Downloadable Products</span><span>。</span></p>
</li>
<li>
<p><span>在列表中找到订单并单击标题后面的链接。</span></p>
</li>
<li>
<p><span>在下载窗口的右下角，单击</span><em>下载</em><span>图标。</span></p>
</li>
<li>
<p><span>在其下载位置找到文件并将文件保存到所需位置。</span></p>
</li>
</ol>]]></description>
      <pubDate>Wed, 11 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2捆绑产品]]></title>
      <link>https://www.360magento.com/blog/Bundle-product/</link>
      <description><![CDATA[<p><span>捆绑包是</span><em>构建您自己的</em><span><span>、可定制的产品。</span><span>捆绑包中的每个项目都可以基于以下产品类型之一：</span></span></p>
<ul>
<li>简单产品</li>
<li>虚拟产品</li>
</ul>
<p><img alt="捆绑产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle.png?lang=en" /></p>
<p><span>当客户单击&ldquo;</span><span>自定义</span><span>&rdquo;或&ldquo;</span><span>添加到购物车</span><span><span>&rdquo;时，会出现这些选项。</span><span>由于捆绑包中包含的产品各不相同，因此可以将 SKU、价格和重量设置为动态值或固定值。</span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>最低广告价格 (MAP) 不适用于使用动态定价的捆绑产品。</span></p>
</div>
</div>
<p><span>如果</span>即时购买<span>可用，</span><em>即时购买</em><span><span>按钮会出现</span><span>在捆绑包中每个项目的</span></span><em>添加到购物车按钮下方。</em><span></span></p>
<p><img alt="自定义捆绑包" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-customize.png?lang=en" /></p>
<p><span>以下说明将引导您完成使用</span>产品模板<span><span>、必填字段和基本设置创建捆绑产品的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<h2 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span></span><em>在添加产品</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span><span>&nbsp;) 菜单</span><span>的右上角，选择</span></span><span>捆绑产品</span><span>。</span></p>
<p><img alt="添加捆绑产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-bundle.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h2>
<p><span><span>要选择</span><span>用作产品模板的</span></span>属性集，请执行以下操作之一：<span></span></p>
<ul>
<li><span>对于</span><span>Search</span><span>，输入属性集的名称，</span></li>
<li><span>在列表中，选择要使用的属性集。</span></li>
</ul>
<p><span>更新表格以反映更改。</span></p>
<p><img alt="选择模板" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set.png?lang=en" /></p>
<h2 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h2>
<ol>
<li>
<p><span>输入产品</span><span>Product Name</span><span>。</span></p>
</li>
<li>
<p><span><span>接受</span><span>基于产品名称的默认</span></span><span>SKU或输入不同的值。</span><span></span></p>
<p><span>要确定分配给每个捆绑商品的 SKU 类型，请执行以下操作：</span></p>
<ul>
<li>
<p><span>通过为默认 SKU 添加后缀，可以将</span><span>动态 SKU</span><span><span>自动分配给每个捆绑商品。</span><span>默认情况下，此项设置为</span></span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>如果您希望为每个捆绑商品分配唯一的 SKU，请将</span><span>动态 SKU</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
</ul>
<p><img alt="动态 SKU 和价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-dynamic-sku-price.png?lang=en" /></p>
</li>
<li>
<p><span>要确定捆绑包的价格，请执行以下操作之一：</span></p>
<ul>
<li>
<p><span>要让价格反映客户选择的选项，请将</span><span>动态价格</span><span>设置为</span><code>Yes</code><span>并将</span><span>价格</span><span>留空。</span></p>
</li>
<li>
<p><span>要为捆绑包收取固定价格，请将</span><span>动态价格</span><span>设置为</span><code>No</code><span><span>并输入</span><span>您要为捆绑包收取的</span></span><span>价格。</span><span></span></p>
</li>
</ul>
</li>
<li>
<p><span>由于产品尚未准备好发布，因此将</span><span>Enable Product</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
<p><span>保存产品后，</span>商店视图<span>选择器会出现在左上角。</span></p>
</li>
<li>
<p><span><span>选择</span><span>产品可用的</span></span><span>商店视图。</span><span></span></p>
<p><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h2>
<ol>
<li>
<p><span>如果捆绑包具有固定定价，请将</span><span>Tax Class</span><span>设置为以下之一：</span></p>
<ul>
<li><code>None</code></li>
<li><code>Taxable Goods</code></li>
</ul>
<p><span>如果捆绑包具有动态定价，则为</span><span><em>每个</em></span><span><span>捆绑包项目确定税费。</span><span>如果捆绑包具有固定定价，则为</span></span><span><em>整个</em></span><span>捆绑包产品确定税费。</span></p>
</li>
<li>
<p><span>请注意以下事项：</span></p>
<ul>
<li>
<p><span></span><span>数量</span><span><span>不可用，因为该值是为每个捆绑项确定的</span><span>。</span></span></p>
</li>
<li>
<p><span>默认情况下，</span><span>库存状态</span><span>设置为</span><code>In Stock</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>要确定包裹的重量，请执行以下操作之一：</span></p>
<ul>
<li>
<p><span>要使重量反映客户选择的选项，请设置</span><span>动态重量</span><span>集</span><code>Yes</code><span>并将</span><span>重量</span><span>留空。</span></p>
</li>
<li>
<p><span>要为束分配固定权重，请将</span><span>动态权重</span><span>设置为</span><code>No</code><span>并输入束的权</span><span>重</span><span>。</span></p>
</li>
</ul>
<p><img alt="动态重量" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-dynamic-weight.png?lang=en" /></p>
</li>
<li>
<p><span></span>要在新产品<span><span>列表中展示该产品</span><span>，请选中</span></span><span>将产品设置为新</span><span>复选框。</span></p>
</li>
<li>
<p><span>接受默认的</span><span>可见性</span><span>设置</span><code>Catalog, Search</code><span>。</span></p>
</li>
<li>
<p><span>要为产品分配</span><em>类别</em><span>，请单击&ldquo;</span><span>选择...</span><span>&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p><span>选择现有类别：</span></p>
<ul>
<li>
<p><span>开始在框中键入以查找匹配项。</span></p>
</li>
<li>
<p><span>选中要分配的每个类别的复选框。</span></p>
</li>
</ul>
<p><span>创建类别：</span></p>
<ul>
<li>
<p><span>单击</span><span>新建类别</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>并选择</span><span>父类别</span><span>以确定其在菜单结构中的位置。</span></p>
</li>
<li>
<p><span>单击</span><span>创建类别</span><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>选择</span><span>制造国</span><span>。</span></p>
<p><img alt="捆绑包详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-details.png?lang=en" /></p>
<p><span><span>可能还有其他描述产品的属性。</span><span>选择不同的属性集，您可以稍后完成它们。</span></span></p>
</li>
</ol>
<h2 id="step-5%3A-add-the-bundle-items"><span>第 5 步：添加捆绑商品</span></h2>
<p><span></span><em>Bundle Items</em><span><span>部分用于将项目添加到 Bundle 产品类型并编辑当前的项目选择</span><span>。</span></span></p>
<p><img alt="为产品定义的捆绑商品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-items-ball.png?lang=en" /></p>
<ol>
<li>
<p><span>向下滚动到</span><em>Bundle Items</em><span>部分并将</span><span>Ship Bundle Items</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Separately</code></li>
<li><code>Together</code></li>
</ul>
<p><img alt="捆绑物品部分" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-items.png?lang=en" /></p>
<p><span>如果您选择</span><code>Together</code><span>，则必须为所有捆绑项目分配相同的</span>来源<span>。</span></p>
</li>
<li>
<p><span>单击</span><span>添加选项</span><span>并执行以下操作：</span></p>
<p><img alt="添加捆绑选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-new-option.png?lang=en" /></p>
<ul>
<li>
<p><span><span>输入</span><span>要用作字段标签的</span></span><span>选项标题。</span><span></span></p>
</li>
<li>
<p><span>将</span><span>输入类型</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Drop-down</code></li>
<li><code>Radio buttons</code></li>
<li><code>Checkbox</code></li>
<li><code>Multiple Select</code></li>
</ul>
</li>
<li>
<p><span>要使该字段成为必填项，请选中</span><span>必填</span><span>复选框。</span></p>
</li>
<li>
<p><span>单击</span><span>将产品添加到选项</span><span>，然后选中要包含在此选项中的每个产品的复选框。</span></p>
<p><span>如果有很多产品，请使用列表过滤器和分页控件来查找您需要的产品。</span></p>
</li>
<li>
<p><span>单击</span><span>添加所选产品</span><span>。</span></p>
<p><img alt="添加所选产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-add-products-to-option.png?lang=en" /></p>
</li>
<li>
<p><span>项目出现在&ldquo;</span><em>选项</em><span>&rdquo;部分后，选择一个项目作为</span><span>默认</span><span>选择。</span></p>
</li>
<li>
<p><span>在</span><em>默认数量</em><span>列中，输入当客户选择项目时要添加到捆绑包中的每个项目的数量。</span></p>
</li>
<li>
<p><span>要允许客户更改捆绑商品的数量，请选择</span><span>用户定义</span><span>。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>数量可以是预设值或用户定义的值。</span><span>但是，不要将</span></span><em>用户定义</em><span>属性分配给复选框或多选输入类型。</span></p>
</div>
</div>
<p><span><span>默认情况下，客户无法更改捆绑商品中包含的默认数量。</span><span>但是，客户可以输入要包含在捆绑包中的项目数量。</span></span></p>
<p><span>例如，如果 Sprite 状态球的默认数量设置为</span><code>2</code><span>并且该捆绑选项的客户订单</span><code>4</code><span>，则购买的球总数为</span><code>8</code><span>。</span></p>
<p><img alt="物品详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-item-detail.png?lang=en" /></p>
</li>
</ul>
</li>
<li>
<p><span>对要添加到捆绑包中的每个项目重复这些步骤。</span></p>
</li>
<li>
<p><span>要更改捆绑包部分中项目的顺序，请单击行开头的</span><em>移动</em><span>(&nbsp;</span><img alt="移动图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-move.png?lang=en" /><span>) 图标并将项目拖动到位。</span></p>
<p><img alt="更改捆绑项目的顺序" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-items-move.png?lang=en" /></p>
<p><span><span>也可以在导出的捆绑产品的数据中更改项目的顺序，然后重新导入到目录中。</span><span>有关详细信息，请参阅</span></span>导入捆绑产品<span>。</span></p>
</li>
<li>
<p><span>要更改捆绑产品中各部分的顺序，请单击该部分标题中的</span><em>移动</em><span>(&nbsp;</span><img alt="移动图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-move.png?lang=en" /><span>) 图标并将该部分拖动到新位置。</span></p>
<p><span>要更好地查看工作区，请先折叠每个部分，然后将它们拖动到位。</span></p>
<p><img alt="更改捆绑部分的顺序" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-section-move.png?lang=en" /></p>
</li>
<li>
<p><span>要从捆绑包中删除任何项目，请单击</span><span>删除</span><span>(&nbsp;&nbsp;</span><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan.png?lang=en" /><span>&nbsp;) 图标。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="step-6%3A-complete-the-product-information"><span>第六步：填写产品信息</span></h2>
<p><span>向下滚动并根据需要完成以下部分中的信息：</span></p>
<ul>
<li>内容</li>
<li>图片和视频</li>
<li>搜索引擎优化</li>
<li>相关产品、追加销售和交叉销售</li>
<li>可定制的选项</li>
<li>网站中的产品</li>
<li>设计</li>
<li>礼品选项</li>
</ul>
<h2 id="step-7%3A-publish-the-product"><span>第 7 步：发布产品</span></h2>
<ol>
<li>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>设置为</span><code>Yes</code><span>(&nbsp;&nbsp;</span><img alt="切换是" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-yes.png?lang=en" /><span>&nbsp;)。</span></p>
</li>
<li>
<p><span>执行以下操作之一：</span></p>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;&nbsp;</span><span>&nbsp;) 菜单上选择</span></span><span>客户视图。</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
<p><span>商店在新的浏览器选项卡中打开。</span></p>
</li>
</ul>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-customer-view.png?lang=en" /></p>
<p><span>方法二：</span><span>保存关闭</span></p>
<p><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>&nbsp;) 菜单上，选择</span><span>保存并关闭</span><span>。</span></p>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
</li>
</ol>
<h2 id="input-controls"><span>输入控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th><th><span>例子</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>落下</span></td>
<td><span><span>显示带有产品名称和价格的选项下拉列表。</span><span>只能选择一项。</span></span></td>
<td><img alt="落下" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-input-type-drop-down.png?lang=en" /></td>
</tr>
<tr>
<td><span>单选按钮</span></td>
<td><span><span>为每个选项显示一个单选按钮，后跟产品名称和价格。</span><span>只能选择一项。</span></span></td>
<td><img alt="单选按钮" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-input-type-radio-buttons.png?lang=en" /></td>
</tr>
<tr>
<td><span>复选框</span></td>
<td><span><span>为每个选项显示一个复选框，后跟产品名称和价格。</span><span>可以选择多个项目。</span></span></td>
<td><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-input-type-checkbox.png?lang=en" /></td>
</tr>
<tr>
<td><span>多选</span></td>
<td><span><span>显示带有产品名称和价格的选项列表。</span><span>要选择多个项目，请按住 Ctrl 键 (PC) 或 Command 键 (Mac) 并单击每个项目。</span></span></td>
<td><img alt="多选" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-bundle-input-type-multiple-select.png?lang=en" /></td>
</tr>
</tbody>
</table>
</div>
<h2 id="field-descriptions"><span>字段说明</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>存货单位</span></td>
<td><span><span>确定是否为每件商品分配了可变或动态 SKU，或者捆绑包是否使用固定 SKU。</span><span>选项：</span></span><code>Fixed</code><span>/</span><code>Dynamic</code></td>
</tr>
<tr>
<td><span>重量</span></td>
<td><span><span>指定重量是根据所选项目计算的，还是整个捆绑包的固定重量。</span><span>选项：</span></span><code>Fixed</code><span>/</span><code>Dynamic</code></td>
</tr>
<tr>
<td><span>价格查看</span></td>
<td><span><span>确定产品价格是否显示为范围，从最便宜到最贵（价格范围）或显示最便宜的价格（低至）。</span><span>选项：</span></span><code>Price Range</code><span>/</span><code>As Low As</code></td>
</tr>
<tr>
<td><span>运送捆绑物品</span></td>
<td><span>指定单个项目是否可以单独运送。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="bundle-product-stock-status"><span>捆绑产品库存状态</span></h2>
<p><span><span>当出现以下任一情况时，</span><span>捆绑产品库存状态将</span></span><span><em>自动更改为缺货：</em></span><span></span></p>
<ul>
<li>
<p><span>所有选项都是可选的，所有相关产品都</span><em>缺货</em><span>。</span></p>
</li>
<li>
<p><span>某些选项是必需的，与任何必需选项相关联的产品都</span><em>缺货</em><span>。</span></p>
</li>
</ul>
<p><span><span>发生以下任一情况时，</span><span>捆绑产品库存状态</span></span><span><em>不会自动更改为缺货：</em></span><span></span></p>
<ul>
<li>
<p><span>所有选项都是可选的，并且至少有一种关联产品有</span><em>库存</em><span>。</span></p>
</li>
<li>
<p><span>一些选项是必需的，并且每个必需选项中至少有一个关联产品是</span><em>In Stock</em><span>。</span></p>
</li>
</ul>
<h2 id="things-to-remember"><span>要记住的事情</span></h2>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span>客户可以</span><em>构建自己的</em><span>捆绑产品。</span></p>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span>捆绑商品可以是没有自定义选项的简单或虚拟产品。</span></p>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span>价格视图可以设置为</span><code>Price Range</code><span>或</span><code>As Low As</code><span>。</span></p>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span>SKU 和重量可以是</span><code>Fixed</code><span>或</span><code>Dynamic</code><span>。</span></p>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span><span>数量可以是预设值或用户定义的值。</span><span>但是，不要将</span></span><em>用户定义</em><span>属性分配给复选框或多选输入类型。</span></p>
<p><img alt="复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox.png?lang=en" /><span>捆绑商品可以一起或分开运送。</span></p>]]></description>
      <pubDate>Tue, 10 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2虚拟产品]]></title>
      <link>https://www.360magento.com/blog/Virtual-product/</link>
      <description><![CDATA[<p><span style="color: #000000;">虚拟产品或数字商品代表无形项目，例如会员资格、服务、保证或书籍、音乐、视频或其他产品的订阅和数字下载。虚拟产品可以单独销售，也可以作为Grouped Product、Configurable Product或Bundle Product产品类型的一部分包含在内。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="box-sizing: inherit; vertical-align: inherit;">除了缺少</span><span style="color: #000000;"><em style="box-sizing: inherit;">Weight</em></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">字段外，创建虚拟产品和简单产品的过程是相同的。</span><span style="box-sizing: inherit; vertical-align: inherit;">以下说明演示了使用</span></span><span style="color: #000000;"><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/create/attribute-sets.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">产品模板</span></a></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">、必填字段和基本设置创建虚拟产品的过程。</span><span style="box-sizing: inherit; vertical-align: inherit;">当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<div class="extension note" style="box-sizing: inherit; -webkit-locale: auto; box-shadow: rgba(10, 10, 10, 0.1) 0px 0.5em 1em -0.125em, rgba(10, 10, 10, 0.02) 0px 0px 0px 1px; color: #000000; padding: 1rem; margin-bottom: 1.5rem; border-width: 1px 1px 1px 3rem; border-style: solid; border-color: var(--spectrum-semantic-informative-background-color); border-image: initial; font-family: adobe-clean, sans-serif; font-size: 16px; border-radius: 0px !important;">
<div style="box-sizing: inherit; -webkit-locale: auto; display: flex !important; align-items: center; font-weight: bold;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">笔记</span></span></div>
<div style="box-sizing: inherit; -webkit-locale: auto;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">PayPal 已弃用对通过 PayPal Express Checkout 销售数字商品的支持。</span><span style="box-sizing: inherit; vertical-align: inherit;">他们建议您使用</span></span><span style="color: #000000;"><a href="https://experienceleague.adobe.com/docs/commerce-admin/stores-sales/payments/paypal/paypal-payments-standard.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">PayPal 支付标准</span></a></span><span style="box-sizing: inherit; vertical-align: inherit;">或任何其他 PayPal 支付网关来处理任何包含虚拟产品的订单。</span></p>
</div>
</div>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;"><img alt="虚拟产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-virtual-membership.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
<h2 id="step-1%3A-choose-the-product-type" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第一步：选择产品类型</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">在</span><span style="color: #000000;"><em style="box-sizing: inherit;">管理</em></span><span style="box-sizing: inherit; vertical-align: inherit;">侧栏上，转到</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">目录</span><span style="box-sizing: inherit; vertical-align: inherit;">&gt;</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">产品</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">在</span><span style="box-sizing: inherit; vertical-align: inherit;">右上角的</span></span><span style="color: #000000;"><em style="box-sizing: inherit;">添加产品</em></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">( ) 菜单中，选择</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;"><span style="box-sizing: inherit; vertical-align: inherit;">虚拟产品</span></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></span><span style="color: #000000;"><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span><span style="box-sizing: inherit; vertical-align: inherit;"></span><span style="box-sizing: inherit; color: #000000; font-weight: bold;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></span><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;"><img alt="添加虚拟产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-virtual.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
</li>
</ol>
<h2 id="step-2%3A-choose-the-attribute-set" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第 2 步：选择属性集</span></h2>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">要选择</span><span style="box-sizing: inherit; vertical-align: inherit;">用作产品模板的</span></span><span style="color: #000000;"><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/create/attribute-sets.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">属性集，请执行以下操作之一：</span></a></span><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
<ul style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">单击&ldquo;</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">属性集</span><span style="box-sizing: inherit; vertical-align: inherit;">&rdquo;字段并输入属性集的全部或部分名称。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">在显示的列表中，选择要使用的属性集。</span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="box-sizing: inherit; vertical-align: inherit;">更新表格以反映更改。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;"><img alt="选择属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
<h2 id="step-3%3A-complete-the-required-settings" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第 3 步：完成所需的设置</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">输入</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">产品名称</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">接受基于产品名称</span><span style="box-sizing: inherit; vertical-align: inherit;">的默认</span></span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">SKU或输入其他名称。</span><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">输入产品</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">价格</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">由于产品尚未准备好发布，因此将</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">Enable Product</span><span style="box-sizing: inherit; vertical-align: inherit;">设置为</span><span style="color: #000000;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">No</code></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">单击</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">保存</span><span style="box-sizing: inherit; vertical-align: inherit;">并继续。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">保存产品后，</span><span style="color: #000000;"><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/introduction.html?lang=en#product-scope" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">商店视图</span></a></span><span style="box-sizing: inherit; vertical-align: inherit;">选择器会出现在左上角。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">选择</span><span style="box-sizing: inherit; vertical-align: inherit;">产品可用的</span></span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">商店视图。</span><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;"><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-basic-settings" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第四步：完成基本设置</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">将</span><span style="box-sizing: inherit; font-weight: bold;">税级</span><span style="box-sizing: inherit; vertical-align: inherit;">设置为以下之一：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">None</code></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Taxable Goods</code></li>
</ul>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">输入当前库存产品的</span><span style="box-sizing: inherit; font-weight: bold;">数量</span><span style="box-sizing: inherit; vertical-align: inherit;">并执行以下操作：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">接受默认的</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">Stock Status</span><span style="box-sizing: inherit; vertical-align: inherit;">设置</span><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">In Stock</code><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">由于虚拟产品未发货，因此</span><span style="box-sizing: inherit; vertical-align: inherit;">未使用</span></span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">重量字段。</span><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">接受默认的</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">可见性</span><span style="box-sizing: inherit; vertical-align: inherit;">设置</span><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Catalog, Search</code><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
</ul>
<div class="extension note" style="box-sizing: inherit; -webkit-locale: auto; box-shadow: rgba(10, 10, 10, 0.1) 0px 0.5em 1em -0.125em, rgba(10, 10, 10, 0.02) 0px 0px 0px 1px; color: #000000; padding: 1rem; border-width: 1px 1px 1px 3rem; border-style: solid; border-color: var(--spectrum-semantic-informative-background-color); border-image: initial; border-radius: 0px !important; margin-bottom: 2rem !important;">
<div style="box-sizing: inherit; -webkit-locale: auto; display: flex !important; align-items: center; font-weight: bold;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">笔记</span></span></div>
<div style="box-sizing: inherit; -webkit-locale: auto;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">如果启用</span><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">库存管理</span></span></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">，单一来源商户在此部分设置数量。</span><span style="box-sizing: inherit; vertical-align: inherit;">多来源商家在&ldquo;来源&rdquo;部分添加来源和数量。</span><span style="box-sizing: inherit; vertical-align: inherit;">请参阅以下</span></span><em style="box-sizing: inherit;">分配来源和数量（库存管理）</em><span style="box-sizing: inherit; vertical-align: inherit;">部分。</span></p>
</div>
</div>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">要为产品分配</span><span style="box-sizing: inherit; font-weight: bold;">类别</span><span style="box-sizing: inherit; vertical-align: inherit;">，请单击&ldquo;</span><span style="box-sizing: inherit; font-weight: bold;">选择...</span><span style="box-sizing: inherit; vertical-align: inherit;">&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; font-weight: bold;">选择现有类别</span><span style="box-sizing: inherit; vertical-align: inherit;">：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">开始在框中键入以查找匹配项。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">选中要分配的类别的复选框。</span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; color: #363636; font-weight: bold;">创建类别</span><span style="box-sizing: inherit; vertical-align: inherit;">：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">单击</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">新建类别</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">输入</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">类别名称</span><span style="box-sizing: inherit; vertical-align: inherit;">并选择</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">父类别</span><span style="box-sizing: inherit; vertical-align: inherit;">以确定其在菜单结构中的位置。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">单击</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">创建类别</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">可能还有其他描述产品的单独属性。</span><span style="box-sizing: inherit; vertical-align: inherit;">选择因属性集而异，您可以稍后完成它们。</span></span></p>
</li>
</ol>
<h3 id="assign-sources-and-quantities-(inventory-management)" style="box-sizing: inherit; margin: 0px; padding: 0px; font-size: 1.25rem; font-weight: 400; color: #4a4a4a; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">分配来源和数量（库存管理）</span></h3>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="box-sizing: inherit; vertical-align: inherit;"></span><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">对于使用库存管理</span></span></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">的多来源商家</span><span style="box-sizing: inherit; vertical-align: inherit;">，向下滚动到</span></span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">来源</span><span style="box-sizing: inherit; vertical-align: inherit;">部分并分配来源和数量：</span></p>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">要添加源，请单击</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">分配源</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">浏览或搜索来源并选中要为产品添加的来源旁边的复选框。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;"><img alt="为产品分配来源" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-assign-sources_c1.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">单击</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">完成</span><span style="box-sizing: inherit; vertical-align: inherit;">以添加源。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">要管理源的数量和状态，请单击&ldquo;</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">高级库存</span><span style="box-sizing: inherit; vertical-align: inherit;">&rdquo;并将&ldquo;</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">管理库存</span><span style="box-sizing: inherit; vertical-align: inherit;">&rdquo;设置为</span><span style="color: #000000;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Yes</code></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">将</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">源项状态</span><span style="box-sizing: inherit; vertical-align: inherit;">设置为</span><span style="color: #000000;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">In Stock</code></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">输入数量更新现有库存的</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">数量</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">要设置库存数量通知，请执行以下操作之一：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><em style="box-sizing: inherit;">自定义通知数量</em><span style="box-sizing: inherit; vertical-align: inherit;">- 清除</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">通知数量使用默认复选框并在</span><span style="box-sizing: inherit; vertical-align: inherit;"></span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">通知数量</span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">中输入一个数量</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><em style="box-sizing: inherit;">默认通知数量</em><span style="box-sizing: inherit; vertical-align: inherit;">- 选择</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">通知数量使用默认</span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">复选框。</span><span style="box-sizing: inherit; vertical-align: inherit;">Commerce 检查并使用 Advanced Inventory 或全局商店配置中的设置。</span></span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><img alt="更新每个来源的产品数量" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-quantity_c1.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></p>
</li>
</ol>
<h2 id="step-5%3A-complete-the-product-information" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第五步：填写产品信息</span></h2>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="box-sizing: inherit; vertical-align: inherit;">根据需要填写以下部分中的信息：</span></p>
<ul style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">内容</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">图片和视频</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">搜索引擎优化</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">相关产品、追加销售和交叉销售</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">可定制的选项</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">网站中的产品</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">设计</span></span></span></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">礼品选项</span></span></span></li>
</ul>
<div class="extension note" style="box-sizing: inherit; -webkit-locale: auto; box-shadow: rgba(10, 10, 10, 0.1) 0px 0.5em 1em -0.125em, rgba(10, 10, 10, 0.02) 0px 0px 0px 1px; color: #000000; padding: 1rem; margin-bottom: 1.5rem; border-width: 1px 1px 1px 3rem; border-style: solid; border-color: var(--spectrum-semantic-informative-background-color); border-image: initial; font-family: adobe-clean, sans-serif; font-size: 16px; border-radius: 0px !important;">
<div style="box-sizing: inherit; -webkit-locale: auto; display: flex !important; align-items: center; font-weight: bold;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">笔记</span></span></div>
<div style="box-sizing: inherit; -webkit-locale: auto;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">这</span><span style="color: #000000;"><em style="box-sizing: inherit;">是可下载的产品吗？</em></span><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">默认情况下禁用该选项。</span><span style="box-sizing: inherit; vertical-align: inherit;">为虚拟产品启用此功能使产品可</span></span><span style="color: #378ef0;"><span style="box-sizing: inherit; cursor: pointer;"><span style="color: #000000;">下载</span></span></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</div>
</div>
<h2 id="step-6%3A-publish-the-product" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">第 6 步：发布产品</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">如果您准备好在目录中发布产品，请将</span><span style="box-sizing: inherit; color: #000000; font-weight: bold;">启用产品</span><span style="box-sizing: inherit; vertical-align: inherit;">设置为</span><span style="color: #000000;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Yes</code></span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">执行以下操作之一：</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; color: #363636; font-weight: bold;">方法一：</span><span style="box-sizing: inherit; vertical-align: inherit;">保存预览</span></p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">在右上角，单击&ldquo;</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">保存</span><span style="box-sizing: inherit; vertical-align: inherit;">&rdquo; 。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">要查看商店中的产品，请</span><span style="box-sizing: inherit; vertical-align: inherit;">在</span><em style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;">管理</span></em><span style="box-sizing: inherit; vertical-align: inherit;">(&nbsp;</span><span style="box-sizing: inherit; vertical-align: inherit;">) 菜单上选择</span></span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">客户视图。</span><span style="box-sizing: inherit; vertical-align: inherit;"></span><em style="box-sizing: inherit;"><span style="box-sizing: inherit; vertical-align: inherit;"></span></em><span style="box-sizing: inherit; vertical-align: inherit;"></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /><span style="box-sizing: inherit; vertical-align: inherit;"></span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">商店在新的浏览器选项卡中打开。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-customer-view.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; color: #363636; font-weight: bold;">方法二：</span><span style="box-sizing: inherit; vertical-align: inherit;">保存关闭</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">在</span><em style="box-sizing: inherit;">保存</em><span style="box-sizing: inherit; vertical-align: inherit;">(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /><span style="box-sizing: inherit; vertical-align: inherit;">) 菜单上，选择</span><span style="box-sizing: inherit; color: #363636; font-weight: bold;">保存并关闭</span><span style="box-sizing: inherit; vertical-align: inherit;">。</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></p>
</li>
</ul>
</li>
</ol>
<h2 id="things-to-remember" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="box-sizing: inherit; vertical-align: inherit;">要记住的事情</span></h2>
<ul style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">虚拟产品用于无形产品，例如服务、订阅和保修。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">虚拟产品很像简单的产品，但没有重量。</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="box-sizing: inherit; vertical-align: inherit;">除非购物车中有有形产品，否则结账时不会出现送货选项。</span></p>
</li>
</ul>
<p></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;"><em style="box-sizing: inherit;">Weight</em>&nbsp;field, the process of creating a virtual product and a simple product is the same. The following instructions demonstrate the process of creating a virtual product using a&nbsp;<a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/create/attribute-sets.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">product template</span></a>, required fields, and basic settings. When you finish the basics, you can complete the other product settings as needed.</span></p>
<div class="extension note" style="box-sizing: inherit; -webkit-locale: auto; box-shadow: rgba(10, 10, 10, 0.1) 0px 0.5em 1em -0.125em, rgba(10, 10, 10, 0.02) 0px 0px 0px 1px; color: #000000; padding: 1rem; margin-bottom: 1.5rem; border-width: 1px 1px 1px 3rem; border-style: solid; border-color: var(--spectrum-semantic-informative-background-color); border-image: initial; font-family: adobe-clean, sans-serif; font-size: 16px; border-radius: 0px !important;">
<div style="box-sizing: inherit; -webkit-locale: auto; display: flex !important; align-items: center; font-weight: bold;"><span style="color: #000000;">NOTE</span></div>
<div style="box-sizing: inherit; -webkit-locale: auto;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">PayPal has deprecated support for the sale of digital goods through PayPal Express Checkout. They recommend that you use either&nbsp;<a href="https://experienceleague.adobe.com/docs/commerce-admin/stores-sales/payments/paypal/paypal-payments-standard.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">PayPal Payments Standard</span></a>&nbsp;or any other PayPal payment gateway to process any order that includes virtual products.</span></p>
</div>
</div>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;"><img alt="虚拟产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-virtual-membership.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
<h2 id="step-1%3A-choose-the-product-type" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="color: #000000;">Step 1: Choose the product type</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">On the&nbsp;<em style="box-sizing: inherit;">Admin</em>&nbsp;sidebar, go to&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Catalog</span>&nbsp;&gt;&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Products</span>.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">On the&nbsp;<em style="box-sizing: inherit;">Add Product</em>&nbsp;(&nbsp;<img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" />&nbsp;) menu at the upper-right corner, choose&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Virtual Product</span>.</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;"><img alt="添加虚拟产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-virtual.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
</li>
</ol>
<h2 id="step-2%3A-choose-the-attribute-set" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="color: #000000;">Step 2: Choose the attribute set</span></h2>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;">To choose the&nbsp;<a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/create/attribute-sets.html?lang=en" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">attribute set</span></a>&nbsp;that is used as a template for the product, do one of the following:</span></p>
<ul style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Click in the&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Attribute Set</span>&nbsp;field and enter all or part of the name of the attribute set.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">In the displayed list, choose the attribute set that you want to use.</span></p>
</li>
</ul>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;">The form is updated to reflect the change.</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-left: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important;"><span style="color: #000000;"><img alt="选择属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
<h2 id="step-3%3A-complete-the-required-settings" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="color: #000000;">Step 3: Complete the required settings</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Enter the&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Product Name</span>.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Accept the default&nbsp;<span style="box-sizing: inherit; font-weight: bold;">SKU</span>&nbsp;that is based on the product name or enter another.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Enter the product&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Price</span>.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Because the product is not yet ready to publish, set&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Enable Product</span>&nbsp;to&nbsp;<code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">No</code>.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">click&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Save</span>&nbsp;and continue.</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">When the product is saved, the&nbsp;<a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/introduction.html?lang=en#product-scope" style="box-sizing: inherit; color: #378ef0; cursor: pointer; text-decoration-line: none;"><span style="color: #000000;">Store View</span></a>&nbsp;chooser appears in the upper-left corner.</span></p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;">Choose the&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Store View</span>&nbsp;where the product is to be available.</span></p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;"><span style="color: #000000;"><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" style="box-sizing: inherit; height: auto; max-width: 100%;" /></span></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-basic-settings" style="box-sizing: inherit; margin: 0px 0px 1.5rem; padding: 0px; font-size: 1.5rem; word-break: break-word; color: #4a4a4a; line-height: 1.125; font-family: adobe-clean, sans-serif;"><span style="color: #000000;">Step 4: Complete the basic settings</span></h2>
<ol style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; padding: 0px; color: #4a4a4a; font-family: adobe-clean, sans-serif; font-size: 16px; margin-bottom: 1rem !important; margin-left: 2rem !important;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">Set&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Tax Class</span>&nbsp;to one of the following:</p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">None</code></li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;"><code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Taxable Goods</code></li>
</ul>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">Enter the&nbsp;<span style="box-sizing: inherit; font-weight: bold;">Quantity</span>&nbsp;of the product that is currently in stock and do the following:</p>
<ul style="box-sizing: inherit; margin-top: 1rem !important; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 2rem !important; padding: 0px; list-style: disc;">
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">Accept the default&nbsp;<span style="box-sizing: inherit; color: #363636; font-weight: bold;">Stock Status</span>&nbsp;setting of&nbsp;<code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">In Stock</code>.</p>
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">Because a virtual product is not shipped, the&nbsp;<span style="box-sizing: inherit; color: #363636; font-weight: bold;">Weight</span>&nbsp;field is not used.</p>
</li>
<li style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px; list-style: disc !important;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 1rem !important; margin-left: 0px; padding: 0px;">Accept the default&nbsp;<span style="box-sizing: inherit; color: #363636; font-weight: bold;">Visibility</span>&nbsp;setting of&nbsp;<code style="box-sizing: inherit; -webkit-font-smoothing: auto; background-color: unset; font-size: 0.875em; color: unset !important; padding: 0px !important;">Catalog, Search</code>.</p>
</li>
</ul>
<div class="extension note" style="box-sizing: inherit; -webkit-locale: auto; box-shadow: rgba(10, 10, 10, 0.1) 0px 0.5em 1em -0.125em, rgba(10, 10, 10, 0.02) 0px 0px 0px 1px; color: #000000; padding: 1rem; border-width: 1px 1px 1px 3rem; border-style: solid; border-color: var(--spectrum-semantic-informative-background-color); border-image: initial; border-radius: 0px !important; margin-bottom: 2rem !important;">
<div style="box-sizing: inherit; -webkit-locale: auto; display: flex !important; align-items: center; font-weight: bold;">NOTE</div>
<div style="box-sizing: inherit; -webkit-locale: auto;">
<p style="box-sizing: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 0px;">If you enable&nbsp;&lt;a href="https://experienceleague.adobe.com/docs/commerce-admin/inventory/introductio]]></description>
      <pubDate>Mon, 09 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2可配置产品]]></title>
      <link>https://www.360magento.com/blog/Configurable-product/</link>
      <description><![CDATA[<p><span><span>可配置的产品看起来像一个单一的产品，每个变体都有一个下拉列表。</span><span>每个列表项实际上是一个单独的简单产品，具有唯一的 SKU，这使得跟踪每个产品变体的库存成为可能。</span><span>您可以通过使用具有自定义选项的简单产品来实现类似的效果，但无法跟踪每个变体的库存。</span></span></p>
<p><span>以下说明演示了使用</span>产品模板<span><span>、必填字段和基本设置创建可配置产品的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<p><img alt="可配置产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable.png?lang=en" /></p>
<h2 id="part-1%3A-creating-a-configurable-product"><span>第 1 部分：创建可配置产品</span></h2>
<p><span><span>尽管可配置产品使用更多 SKU，并且最初可能需要更长的时间来设置，但它最终可以为您节省时间。</span><span>如果您计划发展业务，可配置的产品类型是具有多种选择的产品的不错选择。</span></span></p>
<p><span>在开始之前，准备一个</span>属性集<span><span>，其中包含一个属性，该属性设置为每个产品变体的允许输入类型之一。</span><span>例如，属性集可能包括颜色和大小的下拉属性。</span></span></p>
<p><span>用于可配置产品变体的每个属性的特性必须具有以下设置：</span></p>
<h3 id="product-variation-attribute-requirements"><span>产品变体属性要求</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>财产</span></th><th><span>环境</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>范围</span></td>
<td><code>Global</code></td>
</tr>
<tr>
<td><span>店主的目录输入类型</span></td>
<td><span>用于产品变体的任何属性的输入类型必须是以下之一：</span><code>Dropdown</code><span>、</span><code>Visual Swatch</code><span>或</span><code>Text Swatch</code><span>。</span></td>
</tr>
<tr>
<td><span>需要值</span></td>
<td><code>Yes</code></td>
</tr>
</tbody>
</table>
</div>
<h3 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到&nbsp;</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span><span>在</span><span>&nbsp;右上角的</span></span><em>添加产品</em><span><span>( ) 菜单中，选择</span><span><span>可配置产品</span></span><span>。</span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span></span><span><span></span></span><span></span></p>
<p><img alt="添加可配置产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-configurable.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h3>
<p><span></span>属性集<span><span>决定了产品中使用的字段选择</span><span>。</span><span>以下示例中使用的属性集具有颜色和大小属性。</span><span>属性集的名称显示在页面顶部，最初设置为</span></span><code>Default</code><span>。</span></p>
<ol>
<li>
<p><span>要为产品选择属性集，请单击页面顶部的字段并执行以下操作之一：</span></p>
<ul>
<li><span>对于</span><span>Search</span><span>，输入属性集的名称。</span></li>
<li><span>在列表中，选择要使用的属性集。</span></li>
</ul>
<p><span>更新表格以反映更改。</span></p>
</li>
<li>
<p><span>如果您需要将另一个属性添加到属性集中，请单击</span><span>添加属性</span><span>并按照添加属性中的说明进行</span>操作<span>。</span></p>
<p><img alt="选择模板" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h3>
<ol>
<li>
<p><span>输入产品</span><span>Product Name</span><span>。</span></p>
</li>
<li>
<p><span><span>接受基于产品名称</span><span>的默认</span></span><span>SKU或输入其他名称。</span><span></span></p>
</li>
<li>
<p><span>输入产品</span><span>价格</span><span>。</span></p>
</li>
<li>
<p><span>由于产品尚未准备好发布，因此将</span><span>Enable Product</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
<p><span>保存产品后，</span>商店视图<span>选择器会出现在左上角。</span></p>
</li>
<li>
<p><span><span>选择</span><span>产品可用的</span></span><span>商店视图。</span><span></span></p>
<p><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" /></p>
</li>
</ol>
<h3 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h3>
<ol>
<li>
<p><span>将</span><span>税级</span><span>设置为以下之一：</span></p>
<ul>
<li><code>None</code></li>
<li><code>Taxable Goods</code></li>
</ul>
</li>
<li>
<p><span></span><span>数量</span><span><span>由</span><span>产品变体决定，因此您可以将其留空。</span></span></p>
</li>
<li>
<p><span></span><span>将Stock Status</span><span><span>保留</span><span>为已设置。</span></span></p>
<p><span><span>可配置产品的库存状态由每个关联的配置决定。</span><span>因为产品是在没有输入数量的情况下保存的，所以</span></span><span>Stock Status</span><span>设置为</span><code>Out of Stock</code><span>。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>可配置产品的</span><span>库存状态</span><span>是一个</span><span><em>半手动</em></span><span><span>控制的设置。</span><span>它部分受其子产品的库存状态控制。</span><span>它是</span></span><span><em>多标准</em></span><span>库存状态计算的一部分，这在</span>配置库存状态<span>部分中有描述。</span></p>
</div>
</div>
</li>
<li>
<p><span>输入产品</span><span>重量</span><span>。</span></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>可配置产品必须始终具有权重。</span><span>如果您</span><span>从下拉列表中选择</span></span><span>此项目没有重量</span><span>，它会在保存产品后自动更改为此</span><span>项目有重量。</span><span></span></p>
</div>
</div>
<ol>
<li>
<p><span>接受默认的</span><span>可见性</span><span>设置</span><code>Catalog, Search</code><span>。</span></p>
</li>
<li>
<p><span></span>要在新产品<span><span>列表中展示该产品</span><span>，请选中</span></span><span>将产品设置为新</span><span>复选框。</span></p>
</li>
<li>
<p><span>要为产品分配类别，请单击&ldquo;</span><span>选择...</span><span>&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p><span>选择现有类别</span><span>：</span></p>
<ul>
<li>
<p><span>开始在框中键入以查找匹配项。</span></p>
</li>
<li>
<p><span>选中要分配的类别的复选框。</span></p>
</li>
</ul>
<p><span>创建类别</span><span>：</span></p>
<ul>
<li>
<p><span>单击</span><span>新建类别</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>并选择</span><span>父类别</span><span>以确定其在菜单结构中的位置。</span></p>
</li>
</ul>
<p><span>s- 单击</span><span>创建类别</span><span>。</span></p>
</li>
<li>
<p><span>选择</span><span>制造国</span><span>。</span></p>
<p><img alt="产品详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-details-configurable.png?lang=en" /></p>
<p><span><span>可能还有用于描述产品的其他属性。</span><span>选择因属性集而异，您可以稍后完成它们。</span></span></p>
</li>
</ol>
<h3 id="step-5%3A-save-and-continue"><span>第 5 步：保存并继续</span></h3>
<p><span><span>这是保存您的工作的好时机。</span><span>在右上角，点击</span></span><span>保存</span><span><span>。</span><span>在接下来的一系列步骤中，您将为产品的每个变体设置配置。</span></span></p>
<h2 id="part-2%3A-adding-configurations"><span>第 2 部分：添加配置</span></h2>
<p><span><span>以下示例显示如何为三种颜色和三种尺寸添加配置。</span><span>总共创建了九种具有独特 SKU 的简单产品，以涵盖各种可能的变体组合。</span><span>默认情况下，每个变体的产品名称和 SKU 基于属性值和父产品名称或 SKU。</span></span></p>
<p><span>页面顶部的进度条显示您在流程中的位置，并指导您完成每个步骤。</span></p>
<p><img alt="进度条" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-progress-bar-step1.png?lang=en" /></p>
<h3 id="step-1%3A-choose-the-attributes"><span>第 1 步：选择属性</span></h3>
<ol>
<li>
<p><span>从上面继续，向下滚动到</span><em>Configurations</em><span>部分并单击</span><span>Create Configurations</span><span>。</span></p>
<p><img alt="配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-create-configurations.png?lang=en" /></p>
</li>
<li>
<p><span>选中要作为配置包含的每个属性的复选框。</span></p>
<p><span>对于这个例子，我们选择</span><code>color</code><span>和</span><code>size</code><span>。</span></p>
</li>
<li>
<p><span>该列表包括可在可配置产品中使用的属性集中的所有属性。</span></p>
<p><img alt="选择属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-configurable-step1.png?lang=en" /></p>
</li>
<li>
<p><span>如果您需要添加属性，请单击</span><span>创建新属性</span><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>完成属性属性。</span></p>
</li>
<li>
<p><span>单击</span><span>保存属性</span><span>。</span></p>
</li>
<li>
<p><span>选中复选框以选择属性。</span></p>
</li>
</ul>
</li>
<li>
<p><span>在右上角，单击</span><span>&ldquo;下一步&rdquo;</span><span>。</span></p>
</li>
</ol>
<h3 id="step-2%3A-enter-the-attribute-values"><span>第 2 步：输入属性值</span></h3>
<ol>
<li>
<p><span>对于每个属性，选中适用于产品的值的复选框。</span></p>
<p><img alt="属性值" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-configurable-step2.png?lang=en" /></p>
</li>
<li>
<p><span>要重新排列属性，请抓住</span><em>更改顺序</em><span>(&nbsp;&nbsp;</span><img alt="排序顺序图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-sort-order.png?lang=en" /><span>) 图标并将该部分移动到新位置。</span></p>
<p><span>顺序决定了下拉列表在产品页面上的位置。</span></p>
</li>
<li>
<p><span>在进度条中，单击</span><span>&ldquo;下一步&rdquo;</span><span>。</span></p>
</li>
</ol>
<h3 id="step-3%3A-configure-the-images%2C-price%2C-and-quantity"><span>第 3 步：配置图片、价格和数量</span></h3>
<p><span><span>此步骤确定每个配置的图像、定价和数量。</span><span>每个选项的可用选项都相同，您只能选择一个。</span><span>您可以对所有 SKU 应用相同的设置，对每个 SKU 应用独特的设置，或者暂时跳过这些设置。</span></span></p>
<p><span>选择适用的配置选项。</span></p>
<p><span>使用以下方法之一配置</span><span>图像</span><span>：</span></p>
<p><span>方法 1：</span><span>将一组图像应用于所有 SKU</span></p>
<ol>
<li>
<p><span>选择</span><span>将单组图像应用于所有 SKU</span><span>。</span></p>
</li>
<li>
<p><span>浏览到要包含在产品库中的每个图像，或将它们拖到框中。</span></p>
</li>
</ol>
<p><img alt="对所有 SKU 使用相同的图片" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurations-images-apply-single-set.png?lang=en" /></p>
<p><span>方法 2：</span><span>为每个 SKU 应用唯一图像</span></p>
<p><span><span>因为父产品的图片已经上传，所以这个例子使用这个选项来上传每种颜色的图片。</span><span>这是当有人购买特定颜色的衬衫时出现在购物车中的图像。</span></span></p>
<ol>
<li>
<p><span>选择</span><span>Apply unique images by attribute to each SKU</span><span>。</span></p>
</li>
<li>
<p><span>选择图像说明的</span><span>属性</span><span>，例如</span><code>color</code><span>。</span></p>
</li>
<li>
<p><span>对于每个属性值，浏览到要用于该配置的图像或将它们拖到框中。</span></p>
<p><span><span>如果将图像拖到值框，它也会出现在其他值的部分中。</span><span>如果要删除图像，请单击</span></span><em>垃圾桶</em><span>(&nbsp;</span><img alt="垃圾桶图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-delete-trashcan-solid.png?lang=en" /><span>) 图标。</span></p>
<p><img alt="每个 SKU 的独特图像" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-create-configurations-add-images-unique.png?lang=en" /></p>
</li>
</ol>
<p><span>使用以下方法之一配置</span><span>价格</span><span>：</span></p>
<p><span>方法一：</span><span>对所有SKU应用相同的价格</span></p>
<ol>
<li>
<p><span>如果所有变体的价格都相同，请选择</span><span>Apply single price to all SKUs</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>价格</span><span>。</span></p>
<p><img alt="每个 SKU 价格相同" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-create-configurations-price-all-skus.png?lang=en" /></p>
</li>
</ol>
<p><span>方法 2：</span><span>为每个 SKU 应用不同的价格</span></p>
<ol>
<li>
<p><span>如果每个产品或某些变体的价格不同，请选择</span><span>Apply unique prices by attribute to each SKU</span><span>。</span></p>
</li>
<li>
<p><span><span>选择作为</span><span>价格差异基础的</span></span><span>属性。</span><span></span></p>
</li>
<li>
<p><span>输入每个属性值的</span><span>价格</span><span>。</span></p>
<p><span>在此示例中，XL 码的价格更高。</span></p>
<p><img alt="每个 SKU 的唯一价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurable-create-configurations-price-unique.png?lang=en" /></p>
</li>
</ol>
<p><span>使用以下方法之一配置</span><span>Quantity</span><span>：</span></p>
<p><span>方法 1：</span><span>对所有 SKU 应用相同的数量</span></p>
<ol>
<li>
<p><span>如果所有 SKU 的数量都相同，请选择</span><span>Apply single quantity to each SKU</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>数量</span><span>。</span></p>
<p><img alt="所有 SKU 的数量相同" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurations-quantity-same-all-skus.png?lang=en" /></p>
</li>
<li>
<p><span>如果需要，将相同数量应用于所有 SKU（库存管理）。</span></p>
<p><span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/inventory/introduction.html?lang=en">对于使用库存管理</a><span><span>的多源商家</span><span>，为所有生成的产品变体分配来源并添加数量：</span></span></p>
<ul>
<li>
<p><span>选择</span><span>将单个数量应用到每个 SKU</span><span>选项。</span></p>
</li>
<li>
<p><span>要添加源，请单击</span><span>分配源</span><span>。</span></p>
</li>
<li>
<p><span><span>浏览或搜索您要添加的来源。</span><span>选中要为产品添加的来源旁边的复选框。</span></span></p>
</li>
<li>
<p><span>输入每个来源的现有库存量。</span></p>
</li>
</ul>
<p><img alt="所有 SKU 的数量相同" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-configure-product-quantity.png?lang=en" /></p>
</li>
</ol>
<ul>
<li><span>方法二：</span><span>按属性应用不同的数量</span></li>
</ul>
<ol>
<li>
<p><span>如果每个 SKU 的数量不同，请选择</span><span>Apply unique quantity by attribute to each SKU</span><span>。</span></p>
</li>
<li>
<p><span>输入每个的</span><span>数量</span><span>。</span></p>
<p><img alt="每个属性的数量不同" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-configurations-quantity-different.png?lang=en" /></p>
</li>
</ol>
<p><span>图片、价格、数量配置完成后，点击右上角的</span><span>下一步</span><span>。</span></p>
<h3 id="step-4%3A-generate-the-product-configurations"><span>第 4 步：生成产品配置</span></h3>
<p><span>等待产品列表出现，然后执行以下操作之一：</span></p>
<ul>
<li>
<p><span>如果您对配置感到满意，请单击</span><span>&ldquo;下一步&rdquo;</span><span>。</span></p>
</li>
<li>
<p><span>要进行更正，请单击</span><span>&ldquo;返回&rdquo;</span><span>。</span></p>
</li>
</ul>
<p><span></span><em>当前产品变体显示在&ldquo;配置</em><span><span>&rdquo;部分的底部</span><span>。</span></span></p>
<p><img alt="当前配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-configurable-summary.png?lang=en" /></p>
<h3 id="step-5%3A-add-a-product-image"><span>第 5 步：添加产品图片</span></h3>
<ol>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>图像</span><em>和视频</em><span>部分。</span></p>
</li>
<li>
<p><span>单击&ldquo;</span><em>相机</em><span>&rdquo;磁贴并浏览到要用于可配置产品的主图像。</span></p>
</li>
</ol>
<p><span>有关详细信息，请参阅</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/settings/product-images-and-video.html?lang=en">图像和视频</a><span>。</span></p>
<h3 id="step-6%3A-complete-the-product-information"><span>第六步：填写产品信息</span></h3>
<p><span>向下滚动并根据需要完成以下部分中的信息：</span></p>
<ul>
<li>
<p>内容</p>
</li>
<li>
<p>相关产品、追加销售和交叉销售</p>
</li>
<li>
<p>搜索引擎优化</p>
</li>
<li>
<p>可定制的选项</p>
</li>
<li>
<p>网站中的产品</p>
</li>
<li>
<p>设计</p>
</li>
<li>
<p>礼品选项</p>
</li>
</ul>
<h3 id="step-7%3A-publish-the-product"><span>第 7 步：发布产品</span></h3>
<ol>
<li>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>设置为</span><code>Yes</code><span>并执行以下操作之一：</span></p>
<ul>
<li>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;&nbsp;</span><span>&nbsp;) 菜单上选择</span></span><span>客户视图。</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
</li>
</ul>
<p><span>商店在新的浏览器选项卡中打开。</span></p>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-customer-view.png?lang=en" /></p>
</li>
<li>
<p><span>方法二：</span><span>保存关闭</span></p>
<p><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>) 菜单上，选择</span><span>保存并关闭</span><span>。</span></p>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
</li>
</ul>
</li>
</ol>
<h3 id="step-8%3A-configure-the-cart-thumbnails"><span>第 8 步：配置购物车缩略图</span></h3>
<p><span>如果每个变体都有不同的图像，则可以将配置设置为使用正确的图像作为购物车缩略图。</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>Sales</span><span><span>并选择</span><span>下方的</span></span><span>Checkout 。</span><span></span></p>
</li>
<li>
<p><span><span>展开</span><em><span>购物车</span></em></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>将</span><span>可配置产品图片</span><span>设置为</span><code>Product Thumbnail Itself</code><span>.</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
<p><img alt="购物车 - 可配置的产品图片" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/configurable-product.png?lang=en" /></p>
</li>
</ol>
<h2 id="configure-the-stock-status"><span>配置库存状态</span></h2>
<p><span><span>可配置产品库存状态不同于简单产品的库存状态，后者直接表示产品可用性。</span><span>对于可配置产品，库存状态是</span></span><span><em>多标准</em></span><span>库存状态计算的一部分。</span></p>
<h3 id="overview"><span>概述</span></h3>
<p><span>库存状态关系的主要原则如下：</span></p>
<ul>
<li>
<p><span><span>当您将</span><span>可配置产品的</span></span><span>库存状态</span><span></span><code>Out of Stock</code><span>更改为并单击</span><span>保存</span><span>时，它</span><span><em>不受</em></span><span><span>其子产品库存状态的控制。</span><span>它始终显示</span></span><code>Out of Stock</code><span>在管理员和店面中。</span></p>
</li>
<li>
<p><span><span>当您将</span><span>可配置产品的</span></span><span>Stock Status</span><span></span><code>In Stock</code><span>设置为并单击</span><span>Save</span><span>时，它</span><span><em>​​仅部分</em></span><span>受其子产品的库存状态控制，这些状态反映在 Admin 和 Storefront 中。</span></p>
</li>
</ul>
<h3 id="detailed-description"><span>详细说明</span></h3>
<p><span>可配置产品的</span><em>库存</em><span>状态部分受其子产品的库存状态控制，并根据以下</span><span><em>多标准</em></span><span>库存状态计算：</span></p>
<h4 id="with-default-source%2Fstock-only%3A"><span>仅使用默认来源/库存：</span></h4>
<ul>
<li>
<p><span><span>如果可配置产品库存状态</span><span>由管理员用户、文件导入或 API 调用</span></span><span><em>手动</em></span><span><span>设置为，它将</span><span>在</span><span><em><span>管理员</span></em></span><span>和</span><span><em><span>店面</span></em></span><span>中保持不变，直到它被&nbsp;</span><span>管理员用户、文件导入或 API 调用</span><span><em><span>手动</span></em></span><span>更改为。</span><span>它不能通过其子产品的库存状态来控制。</span></span><code>Out of Stock</code><span></span><code>Out of Stock</code><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><code>In stock</code><span></span></p>
</li>
<li>
<p><span><span>如果可配置产品库存状态</span><span>由管理员用户、文件导入或 API 调用</span></span><span><em>手动</em></span><span><span>设置为，则其库存状态由</span><span><em><span>Admin</span></em></span><span>和</span><span><em><span>Storefront</span></em></span><span>上的子产品的库存状态</span><span><em><span>自动控制</span></em></span><span>。</span></span><code>In Stock</code><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span></p>
</li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>库存和来源是</span>库存管理<span>工具的一部分。</span></p>
</div>
</div>
<h4 id="with-at-least-one-custom-source%2Fstock%3A"><span>至少有一个自定义来源/库存：</span></h4>
<ul>
<li>
<p><span><span>如果可配置产品库存状态值</span><span>由管理员用户、文件导入或 API 调用</span></span><span><em>手动</em></span><span><span>设置为，它将</span><span>在</span><span><em><span>管理员</span></em></span><span>和</span><span><em><span>店面</span></em></span><span>中保持不变，直到它被</span><span>管理员用户、文件导入或 API 调用</span><span><em><span>手动</span></em></span><span>更改为。</span><span>它</span><span><em><span>不能通过</span></em></span><span>其子产品的库存状态来控制。</span></span><code>Out of Stock</code><span></span><code>Out of Stock</code><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><code>In Stock</code><span></span><span><em><span></span></em></span><span></span></p>
</li>
<li>
<p><span><span>如果可配置产品库存状态值</span><span>由管理员用户、文件导入或 API 调用</span></span><span><em>手动</em></span><span><span>设置，则其库存状态仅由</span><span><em><span>店面</span></em></span><span>中其子产品的库存状态</span><span><em><span>自动控制</span></em></span><span>。</span></span><code>In Stock</code><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span></p>
</li>
<li>
<p><span><span>如果可配置产品库存状态值</span><span>由管理员用户、文件导入或 API 调用</span></span><span><em>手动</em></span><span><span>设置为，它将保持</span><span>在</span><span><em><span>管理员</span></em></span><span>中，直到它被管理员用户、文件导入或 API 调用</span><span><em><span>手动</span></em></span><span>更改为</span><span>。</span><span>它</span><span><em><span>不能通过</span></em></span><span>其子产品的库存状态来控制。</span></span><code>In Stock</code><span></span><code>In Stock</code><span></span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span><code>Out of Stock</code><span></span><span><em><span></span></em></span><span></span></p>
</li>
</ul>
<h2 id="things-to-remember"><span>要记住的事情</span></h2>
<ul>
<li>
<p><span><span>可配置的产品允许购物者从下拉菜单、多选、视觉样本和文本样本输入类型中选择选项。</span><span>每个选项都是一个单独的简单产品。</span></span></p>
</li>
<li>
<p>可配置产品的库存状态<span><span>是一种半手动控制的设置。</span><span>这与简单产品的库存状态不同，后者直接表示产品可用性。</span><span>对于可配置产品，库存状态是多标准库存状态计算的一部分。</span></span></p>
</li>
<li>
<p><span>可配置的子产品可以是</span><span>没有自定义选项</span><span><span>的简单产品或虚拟产品。</span><span>要使自定义子产品虚拟化，您必须为每个子产品选择</span></span><code>Тhis item has no weight</code><span>权</span><span>重</span><span>设置。</span></p>
</li>
<li>
<p><span><span>用于产品变体的属性必须具有全局范围，并且必须要求客户选择一个值。</span><span>产品变体属性必须包含在用作可配置产品模板的属性集中。</span></span></p>
</li>
<li>
<p><span>用作可配置产品模板的属性集必须包括包含每个产品变体所需值的属性。</span></p>
</li>
<li>
<p><span>购物车中的缩略图可以设置为显示来自可配置产品记录或来自产品变体的图像。</span></p>
</li>
<li>
<p><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/swatches.html?lang=en#create-swatches-for-products"><span></span></a><span>通过在管理员的属性编辑页面将</span><span>更新产品预览图像</span><span><span>选项值设置为选择样本时，可以将</span><span>样本属性</span><span>配置为不显示相应的简单产品图像。</span></span><code>No</code><span></span></p>
</li>
<li>
<p><span>当用户在产品配置之间切换时，主题控制图片库的行为方式。</span><em>空白</em><span><span>主题的默认行为</span><span>是用选定的产品变体覆盖父级可配置产品图像。</span><span>对于 Luma 主题，默认行为是将所选产品变体图像添加到父级可配置产品图像中。</span></span></p>
</li>
</ul>]]></description>
      <pubDate>Sun, 08 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2分组产品]]></title>
      <link>https://www.360magento.com/blog/Grouped-product/</link>
      <description><![CDATA[<p><span><span>分组产品由作为一组显示的简单独立产品组成。</span><span>您可以提供单一产品的变体，或按季节或主题对它们进行分组。</span><span>展示分组的产品可以激励顾客购买额外的物品。</span><span>分组产品提供了一种简单的方法来提供产品的变体并将它们全部列在同一页面上。</span></span></p>
<p><span><span>例如，您可能会出售开放库存的扁平餐具，并列出在正式场所设置中使用的每种器具。</span><span>有些人可能会订购多个沙拉叉、鱼叉、餐叉、餐刀、鱼刀、黄油刀、汤匙和甜点匙。</span><span>其他顾客可能会订购简单的叉子、刀子和勺子。</span><span>客户可以根据需要订购任意数量的每件商品。</span></span></p>
<p><span><span>虽然它们作为一个组显示，但组中的每个产品都是作为单独的项目购买的。</span><span>在购物车中，每个项目和购买的数量显示为一个单独的行项目。</span></span></p>
<p><span>以下说明演示了使用</span>产品模板<span><span>、必填字段和基本设置创建分组产品的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<p><img alt="分组产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped.png?lang=en" /></p>
<h2 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span><span>在</span><span>&nbsp;右上角的</span></span><em>添加产品</em><span><span>( ) 菜单上，选择</span><span><span>分组产品</span></span><span>。</span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span></span><span><span></span></span><span></span></p>
<p><img alt="添加分组产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-grouped.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h2>
<p><span><span>要选择</span><span>用作产品模板的</span></span>属性集，请执行以下操作之一：<span></span></p>
<ul>
<li><span>要搜索，请输入</span><span>属性集</span><span>的名称。</span></li>
<li><span>在列表中，选择要使用的属性集。</span></li>
</ul>
<p><span>更新表格以反映更改。</span></p>
<p><img alt="选择模板" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-create-choose-attribute-set.png?lang=en" /></p>
<p><span>如果所需的属性不存在，您可以在创建产品时添加新属性：</span></p>
<ul>
<li>
<p><span>在右上角，单击&ldquo;</span><span>添加属性</span><span>&rdquo; 。</span></p>
</li>
<li>
<p><span>定义新属性（请参阅</span>向产品添加属性<span>）。</span></p>
<p><img alt="新属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-attribute-add-select.png?lang=en" /></p>
</li>
</ul>
<p><span>要将现有属性添加到产品，请使用</span>过滤器控件<span>在网格中查找属性并执行以下操作：</span></p>
<ul>
<li><span>选中要添加的每个属性的第一列中的复选框。</span></li>
<li><span>单击</span><span>添加所选</span><span>。</span></li>
</ul>
<h2 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h2>
<ol>
<li>
<p><span>输入</span><span>产品名称</span><span>。</span></p>
</li>
<li>
<p><span><span>接受基于产品名称</span><span>的默认</span></span><span>SKU或输入其他名称。</span><span></span></p>
<p><span>请注意，</span><span>数量</span><span>字段不可用，因为该值是从组成该组的单个产品派生的。</span></p>
</li>
<li>
<p><span>由于产品尚未准备好发布，因此将</span><span>启用产品</span><span>设置为</span><code>No</code><span>(&nbsp;&nbsp;</span><img alt="切换否" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-no.png?lang=en" /><span>)。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
<p><span>保存产品后，产品名称会出现在页面顶部，</span>商店视图<span>选择器会出现在左上角。</span></p>
</li>
<li>
<p><span><span>选择</span><span>产品可用的</span></span><span>商店视图。</span><span></span></p>
<p><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-create-store-view-choose.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h2>
<ol>
<li>
<p><span>接受 的</span><span>Stock Status</span><span>设置</span><code>In Stock</code><span>。</span></p>
</li>
<li>
<p><span>要为产品分配</span><span>类别</span><span>，请单击&ldquo;</span><span>选择...</span><span>&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p><span>选择现有类别：</span></p>
<ul>
<li>
<p><span>开始在框中键入以查找匹配项。</span></p>
</li>
<li>
<p><span>选中要分配的类别的复选框。</span></p>
</li>
</ul>
<p><span>创建类别：</span></p>
<ul>
<li>
<p><span>单击</span><span>新建类别</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>并选择</span><span>父类别</span><span>以确定其在菜单结构中的位置。</span></p>
</li>
<li>
<p><span>单击</span><span>创建类别</span><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>接受的</span><span>可见性</span><span>设置</span><code>Catalog, Search</code><span>。</span></p>
</li>
<li>
<p><span>要在</span>新产品列表中展示<span>该产品，请在日历上选择</span><span>将产品设置为新</span>&nbsp;<span>的</span><span></span><span>开始</span><span><span>日期和结束</span><span>日期。</span></span></p>
</li>
<li>
<p><span>选择</span><span>制造国</span><span>。</span></p>
<p><span><span>可能还有其他描述产品的单独属性。</span><span>选择不同的属性集，您可以稍后完成它们。</span></span></p>
<p><img alt="分组产品详细信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-details.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-5%3A-add-products-to-the-group"><span>第 5 步：将产品添加到组中</span></h2>
<ol>
<li>
<p><span>向下滚动到</span><span>Grouped Products</span><span>部分并单击</span><span>Add Products to Group</span><span>。</span></p>
<p><img alt="分组产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-products.png?lang=en" /></p>
</li>
<li>
<p><span>如有必要，使用</span>筛选器<span>查找要包含在组中的产品。</span></p>
</li>
<li>
<p><span>在列表中，选中要包含在组中的每个项目的复选框。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>只有没有可配置选项的简单、可下载和虚拟产品才能分组为子产品。</span><span>其他产品类型不会出现在选择列表中。</span></span></p>
</div>
</div>
<p><img alt="添加所选产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-add-products.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>添加所选产品</span><span>以将它们添加到组中。</span></p>
<p><span>所选产品出现在</span><em>分组产品</em><span>部分。</span></p>
<p><span>对于具有</span>库存管理<span>的多源商家，网格包括</span><span>每个来源的数量</span><span>列以及每个分配的来源和库存库存量。</span></p>
<p><img alt="集团产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-grouped-grouped-products-section.png?lang=en" /></p>
</li>
<li>
<p><span>输入任何项目的</span><span>默认数量</span><span>。</span></p>
</li>
<li>
<p><span>要更改产品的顺序，请抓住第一列中的</span><em>更改顺序</em><span>图标 (&nbsp;&nbsp;</span><img alt="位置控制器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-sort-order.png?lang=en" /><span>) 并将产品拖动到列表中的新位置。</span></p>
</li>
<li>
<p><span>要从组中删除产品，请点击</span><span>删除</span><span>。</span></p>
</li>
</ol>
<h2 id="step-5%3A-complete-the-product-information"><span>第五步：填写产品信息</span></h2>
<p><span>根据需要填写以下部分中的信息：</span></p>
<ul>
<li>内容</li>
<li>图片和视频</li>
<li>搜索引擎优化</li>
<li>相关产品、追加销售和交叉销售</li>
<li>可定制的选项</li>
<li>网站中的产品</li>
<li>设计</li>
<li>礼品选项</li>
</ul>
<h2 id="step-6%3A-publish-the-product"><span>第 6 步：发布产品</span></h2>
<ol>
<li>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>执行以下操作之一：</span></p>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;&nbsp;</span><span>&nbsp;) 菜单上选择</span></span><span>客户视图。</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
<p><span>商店在新的浏览器选项卡中打开。</span></p>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-customer-view.png?lang=en" /></p>
</li>
</ul>
<p><span>方法 2：</span><span>保存并关闭</span></p>
<ul>
<li><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>&nbsp;) 菜单上，选择</span><span>保存并关闭</span><span>。</span></li>
</ul>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-7%3A-configure-the-cart-thumbnails-(optional)"><span>第 7 步：配置购物车缩略图（可选）</span></h2>
<p><span>如果组中的每个产品都有不同的图像，您可以设置配置以使用正确的图像作为购物车缩略图。</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>Sales</span><span>并选择</span><span>Checkout</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>购物</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>车</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="购物车" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/cart-grouped-product.png?lang=en" /></p>
<p><span><span>有关这些配置选项的信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span>购物车<span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>将</span><span>分组产品图片</span><span>设置为</span><code>Product Thumbnail Itself</code><span>。</span></p>
<p><span>如有必要，取消选中</span><span>使用系统值</span><span>复选框以设置此选项。</span></p>
</li>
<li>
<p><span>单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h2 id="things-to-remember"><span>要记住的事情</span></h2>
<ul>
<li>
<p><span>分组产品本质上是简单关联产品的集合。</span></p>
</li>
<li>
<p><span>分组的子产品可以是简单的、可下载的或</span><span>没有自定义选项</span><span>的虚拟产品。</span></p>
</li>
<li>
<p><span>购买的每件商品单独出现在购物车中，而不是作为组的一部分。</span></p>
</li>
<li>
<p><span>购物车中的缩略图可以设置为显示分组父产品或关联产品的图像。</span></p>
</li>
</ul>]]></description>
      <pubDate>Sat, 07 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2简单的产品]]></title>
      <link>https://www.360magento.com/blog/Simple-product/</link>
      <description><![CDATA[<p><span><span>利用产品类型的力量的关键之一是学习何时使用简单、独立的产品。</span><span>简单的产品可以单独销售，也可以作为组合、可配置或捆绑产品的一部分销售。</span><span>具有自定义选项的简单产品有时称为</span></span><em>复合产品</em><span>。</span></p>
<p><span>以下说明演示了使用</span>产品模板<span><span>、必填字段和基本设置创建简单产品的过程。</span><span>每个必填字段都标有红色星号 (&nbsp;</span></span><code>*</code><span><span>)。</span><span>当您完成基础设置后，您可以根据需要完成其他产品设置。</span></span></p>
<p><img alt="简单的产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-simple.png?lang=en" /></p>
<h2 id="step-1%3A-choose-the-product-type"><span>第一步：选择产品类型</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span><span>在</span><span>右上角的</span></span><em>添加产品</em><span><span>( ) 菜单中，选择</span><span><span>简单产品</span></span><span>。</span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span></span><span><span></span></span><span></span></p>
<p><img alt="添加简单产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-add-simple.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-2%3A-choose-the-attribute-set"><span>第 2 步：选择属性集</span></h2>
<p><span><span>要选择</span><span>用作产品模板的</span></span>属性集：<span></span></p>
<ul>
<li>
<p><span>单击&ldquo;</span><span>属性集</span><span>&rdquo;字段并输入属性集的全部或部分名称。</span></p>
</li>
<li>
<p><span>在显示的列表中，选择要使用的属性集。</span></p>
</li>
</ul>
<p><span>更新表格以反映更改。</span></p>
<p><img alt="选择属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-choose-attribute-set.png?lang=en" /></p>
<h2 id="step-3%3A-complete-the-required-settings"><span>第 3 步：完成所需的设置</span></h2>
<ol>
<li>
<p><span>输入</span><span>产品名称</span><span>。</span></p>
</li>
<li>
<p><span><span>接受基于产品名称</span><span>的默认</span></span><span>SKU或输入其他名称。</span><span></span></p>
</li>
<li>
<p><span>输入产品</span><span>价格</span><span>。</span></p>
</li>
<li>
<p><span>因为产品还没有准备好发布，所以将</span><span>Enable Product</span><span>选项设置为</span><code>No</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
<p><span>保存产品后，</span>商店视图<span>选择器会出现在左上角。</span></p>
</li>
<li>
<p><span><span>选择</span><span>产品可用的</span></span><span>商店视图。</span><span></span></p>
<p><img alt="选择商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-create-store-view-choose.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-basic-settings"><span>第四步：完成基本设置</span></h2>
<ol>
<li>
<p><span>将</span><span>税级</span><span>设置为以下之一：</span></p>
<ul>
<li><code>None</code></li>
<li><code>Taxable Goods</code></li>
<li><code>Refund Adjustments</code></li>
<li><code>Gift Options</code></li>
<li><code>Order Gift Wrapping</code></li>
<li><code>Item Gift Wrapping</code></li>
<li><code>Printed Gift Card</code></li>
<li><code>Reward Points</code></li>
<li><code>VAT Reduced</code></li>
<li><code>VAT Standard</code></li>
</ul>
</li>
<li>
<p><span>输入当前库存产品的</span><span>数量</span><span>。</span></p>
<p><span>默认情况下，</span><span>库存状态</span><span>设置为</span><code>In Stock</code><span>。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>如果启用</span>库存管理<span><span>，单一来源商户在此部分设置数量。</span><span>多来源商家在&ldquo;来源&rdquo;部分添加来源和数量。</span><span>请参阅以下</span></span><em>分配来源和数量（库存管理）</em><span>部分。</span></p>
</div>
</div>
</li>
<li>
<p><span>输入产品的</span><span>重量</span><span>。</span></p>
</li>
<li>
<p><span>接受默认的</span><span>可见性</span><span>设置</span><code>Catalog, Search</code><span>。</span></p>
</li>
<li>
<p><span>要为产品分配</span><em>类别</em><span>，请单击&ldquo;</span><span>选择...</span><span>&nbsp;&rdquo;框并执行以下任一操作：</span></p>
<p><span>选择现有类别</span><span>：</span></p>
<ul>
<li>
<p><span>开始在框中键入以查找匹配项。</span></p>
</li>
<li>
<p><span>选中要分配的每个类别的复选框。</span></p>
</li>
</ul>
<p><span>创建类别</span><span>：</span></p>
<ul>
<li>
<p><span>单击</span><span>新建类别</span><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>并选择</span><span>父类别</span><span>以确定其在菜单结构中的位置。</span></p>
</li>
<li>
<p><span>单击</span><span>创建类别</span><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span></span>要在新产品<span><span>列表中展示该产品</span><span>，请选中</span></span><span>将产品设置为新</span><span>复选框。</span></p>
</li>
<li>
<p><span>选择</span><span>制造国</span><span>。</span></p>
<p><img alt="产品详情" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-details-simple.png?lang=en" /></p>
</li>
</ol>
<p><span><span>可能还有其他描述产品的单独属性。</span><span>选择因属性集而异，您可以稍后完成它们。</span></span></p>
<h3 id="assign-sources-and-quantities-(inventory-management)"><span>分配来源和数量（库存管理）</span></h3>
<p><span></span>对于使用库存管理<span><span>的多来源商家</span><span>，向下滚动到</span></span><span>来源</span><span>部分并分配来源和数量：</span></p>
<ol>
<li>
<p><span>要添加源，请单击</span><span>分配源</span><span>。</span></p>
</li>
<li>
<p><span>浏览或搜索来源并选中要为产品添加的来源旁边的复选框。</span></p>
<p><img alt="为产品分配来源" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-assign-sources_c1.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>完成</span><span>以添加源。</span></p>
</li>
<li>
<p><span>要管理源的数量和状态，请单击&ldquo;</span><span>高级库存</span><span>&rdquo;并将&ldquo;</span><span>管理库存</span><span>&rdquo;设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>将</span><span>源项状态</span><span>设置为</span><code>In Stock</code><span>。</span></p>
</li>
<li>
<p><span>输入数量更新现有库存的</span><span>数量</span><span>。</span></p>
</li>
<li>
<p><span>要设置库存数量通知，请执行以下操作之一：</span></p>
<ul>
<li>
<p><em>自定义通知数量</em><span>- 清除</span><span>通知数量使用默认复选框并在</span><span></span><span>通知数量</span><span><span>中输入一个数量</span><span>。</span></span></p>
</li>
<li>
<p><em>默认通知数量</em><span>- 选择</span><span>通知数量使用默认</span><span><span>复选框。</span><span>Commerce 检查并使用 Advanced Inventory 或全局商店配置中的设置。</span></span></p>
</li>
</ul>
<p><img alt="更新每个来源的产品数量" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/inventory-product-quantity_c1.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-5%3A-complete-the-product-information"><span>第五步：填写产品信息</span></h2>
<p><span>向下滚动并根据需要完成以下部分中的信息：</span></p>
<ul>
<li>内容</li>
<li>图片和视频</li>
<li>相关产品、追加销售和交叉销售</li>
<li>搜索引擎优化</li>
<li>可定制的选项</li>
<li>网站中的产品</li>
<li>设计</li>
<li>礼品选项</li>
</ul>
<h2 id="step-6%3A-publish-the-product"><span>第 6 步：发布产品</span></h2>
<ol>
<li>
<p><span>如果您准备好在目录中发布产品，请将</span><span>启用产品</span><span>开关设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>执行以下操作之一：</span></p>
<ul>
<li>
<p><span>方法一：</span><span>保存预览</span></p>
<ul>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span><span>要查看商店中的产品，请</span><span>在</span><em><span>管理</span></em><span>(&nbsp;</span><span>) 菜单上选择</span></span><span>客户视图。</span><span></span><em><span></span></em><span></span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-black.png?lang=en" /><span></span></p>
</li>
</ul>
<p><span>商店在新的浏览器选项卡中打开。</span></p>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-customer-view.png?lang=en" /></p>
</li>
<li>
<p><span>方法 2：</span><span>保存并关闭</span></p>
<p><span>在</span><em>保存</em><span>(&nbsp;</span><img alt="菜单箭头" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-menu-down-arrow-red.png?lang=en" /><span>) 菜单上，选择</span><span>保存并关闭</span><span>。</span></p>
<p><img alt="保存并关闭" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-edit-save-close.png?lang=en" /></p>
</li>
</ul>
</li>
</ol>
<h2 id="things-to-remember"><span>要记住的事情</span></h2>
<ul>
<li>
<p><span>简单产品可以包含在可配置、捆绑和分组产品类型中。</span></p>
</li>
<li>
<p><span>简单产品配置会覆盖特定产品的可配置产品配置。</span></p>
</li>
<li>
<p><span>一个简单的产品可以有各种输入类型的自定义选项，这使得从一个 SKU 销售许多产品变体成为可能。</span></p>
</li>
</ul>]]></description>
      <pubDate>Fri, 06 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2创建产品]]></title>
      <link>https://www.360magento.com/blog/Create-a-product/</link>
      <description><![CDATA[<p><span><span>选择产品类型是创建产品必须做的首要事情之一。</span><span>如果您刚刚开始构建产品目录，则可以创建一些样本产品来试验每种产品类型。</span><span>除了基本产品类型外，术语</span></span><em>复杂产品</em><span>有时用于指代具有多种选择的产品，例如具有多种颜色和尺寸的可配置产品。</span></p>
<p><img alt="店面的产品页面" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-product-page.png?lang=en" /></p>
<h2 id="product-types"><span>产品类型</span></h2>
<p><span>简单产品</span><span><span>- 简单产品是具有单个 SKU 的物理项目。</span><span>简单的产品有不同的定价和输入控制，这使得销售产品的变体成为可能。</span><span>简单产品可以与分组、捆绑和可配置产品结合使用。</span></span></p>
<p><span>可配置产品</span><span><span>- 可配置产品看起来是一个单一的产品，每个变体都有选项列表。</span><span>但是，每个选项代表一个单独的、简单的产品，具有不同的 SKU，这使得跟踪每个变体的库存成为可能。</span></span></p>
<p><span>分组产品</span><span><span>- 分组产品将多个独立产品呈现为一个组。</span><span>您可以提供单个产品的变体，或将它们分组进行促销。</span><span>产品可以单独购买，也可以成组购买。</span></span></p>
<p><span>虚拟产品</span><span><span>&mdash;&mdash;虚拟产品不是有形产品，通常用于服务、会员资格、保修和订阅等产品。</span><span>虚拟产品可以与分组产品和捆绑产品结合使用。</span></span></p>
<p><span>捆绑产品</span><span><span>&nbsp;&mdash;&mdash;捆绑产品允许客户从各种选项中&ldquo;构建自己的&rdquo;。</span><span>捆绑包可以是礼品篮、电脑或任何其他可以定制的东西。</span><span>捆绑包中的每个项目都是单独的独立产品。</span></span></p>
<p><span>可下载产品</span><span><span>- 数字可下载产品由一个或多个下载的文件组成。</span><span>这些文件可以驻留在您的服务器上，也可以作为 URL 提供给任何其他服务器。</span></span></p>
<p><span>礼品卡</span><span>-（</span>仅限Adob​​e Commerce<span>）礼品卡分为三种。</span><em>虚拟</em><span>礼品卡通过电子邮件发送。</span><em>实物</em><span>礼品卡会运送给收件人。</span><em>结合</em><span><span>了虚拟和实体的组合礼品卡。</span><span>每个都有一个唯一的代码，在结账时兑换。</span><span>礼品卡也可以包含在分组产品中。</span></span></p>
<h2 id="product-settings"><span>产品设置</span></h2>
<p><span><span>最常用的产品设置和属性位于页面顶部，其次是自定义属性。</span><span>任何其他产品设置都在页面底部的可扩展部分中。</span></span></p>
<p><img alt="产品设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-settings-include-sources.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>环境</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td>来源</td>
<td><span>列出可以分发产品的来源。</span></td>
</tr>
<tr>
<td>内容</td>
<td><span>用于输入和编辑出现在店面产品页面上的主要产品描述。</span></td>
</tr>
<tr>
<td>配置</td>
<td><span>列出产品的任何现有变体，并可用于生成与可配置产品类型一起使用的变体。</span></td>
</tr>
<tr>
<td>产品评论</td>
<td><span>列出客户为产品提交的所有评论。</span></td>
</tr>
<tr>
<td>搜索引擎优化</td>
<td><span>指定搜索引擎用来索引产品的 URL 键和元数据字段。</span></td>
</tr>
<tr>
<td>相关产品、追加销售和交叉销售</td>
<td><span>用于在店面上设置简单的促销块，展示客户可能感兴趣的一系列附加产品。</span></td>
</tr>
<tr>
<td>可定制的选项</td>
<td><span>向产品添加可定制的选项。</span></td>
</tr>
<tr>
<td>网站中的产品</td>
<td><span>根据商店层次结构标识提供产品的每个网站。</span></td>
</tr>
<tr>
<td>设计</td>
<td><span>用于将不同的主题应用到产品页面、更改列布局、确定产品选项出现的位置以及输入自定义 XML 代码。</span></td>
</tr>
<tr>
<td>礼品选择</td>
<td><span>用于在产品级别的结帐期间启用或禁用礼品消息选项。</span></td>
</tr>
<tr>
<td>共享目录中的产品</td>
<td><img alt="Adobe Commerce 的 B2B" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/b2b.svg?lang=en" /><span>（仅</span>适用于 Adob​​e Commerce 的 B2B<span>）支持使用不同公司的自定义定价维护共享目录，并访问使用不同定价结构的两种类型的共享目录。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="advanced-pricing-and-inventory"><span>高级定价和库存</span></h2>
<p><span></span><span>要访问高级定价和库存设置，请单击价格</span><span>和</span><span>数量</span><span><span>下方的链接</span><span>。</span><span>有关详细信息，请参阅</span></span>管理定价<span>和</span>库存管理<span>。</span></p>
<p><img alt="价格和数量选项链接" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-details-simple.png?lang=en" /></p>]]></description>
      <pubDate>Thu, 05 Jan 2023 08:29:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品工作区]]></title>
      <link>https://www.360magento.com/blog/Product-workspace/</link>
      <description><![CDATA[<p><em>Store View</em>&nbsp;chooser appears at the upper left of the form.</p>
<p><img alt="产品工作区" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-workspace-ee.png?lang=en" /></p>
<h2 id="enable-product-setting">Enable Product setting</h2>
<p>The online status of the product is indicated by the switch at the top of the form. To change the online status, set the&nbsp;<span>Enable Product</span>&nbsp;switch to&nbsp;<code>Yes</code>&nbsp;or&nbsp;<code>No</code>.</p>
<div class="table-container">
<table>
<thead>
<tr><th>Control</th><th>Description</th></tr>
</thead>
<tbody>
<tr>
<td><img alt="切换是" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-yes.png?lang=en" /></td>
<td>Indicates that the product is online.</td>
</tr>
<tr>
<td><img alt="切换否" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-no.png?lang=en" /></td>
<td>Indicates that the product is offline.</td>
</tr>
</tbody>
</table>
</div>
<h2 id="attribute-set">Attribute set</h2>
<p>The name of the&nbsp;attribute set&nbsp;appears in the upper-left corner and determines the fields that appear in the product record. To choose a different attribute set, click the down arrow next to the default attribute set name.</p>
<p><img alt="属性集" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-attribute-set.png?lang=en" /></p>
<h2 id="expand%2Fcollapse">Expand/collapse</h2>
<p>To expand or collapse a section, click either the expand&nbsp;<img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" />&nbsp;or collapse&nbsp;<img alt="折叠选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-collapse.png?lang=en" />&nbsp;icon.</p>
<h2 id="save-menu">Save menu</h2>
<p>The&nbsp;<em>Save</em>&nbsp;menu includes several options that let you save and continue, save and create a product, save and duplicate the product, or save and close.</p>
<p><img alt="保存菜单" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-save-menu.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th>Command</th><th>Description</th></tr>
</thead>
<tbody>
<tr>
<td>Save</td>
<td>Save the current product and continue working.</td>
</tr>
<tr>
<td>Save &amp; New</td>
<td>Save and close the current product, and begin a new product based on the same product type and template.</td>
</tr>
<tr>
<td>Save &amp; Duplicate</td>
<td>Save and close the current product, and open a new duplicate copy.</td>
</tr>
<tr>
<td>Save &amp; Close</td>
<td>Save the current product and return to the&nbsp;<em>Products</em>&nbsp;workspace.</td>
</tr>
</tbody>
</table>
</div>
<h2 id="default-field-values">Default field values</h2>
<p>To save time when creating products, the default value of several product fields references values from another field. You can either accept the default value or enter another. The following fields have automatically generated default values:</p>
<div class="table-container">
<table>
<thead>
<tr><th>Field</th><th>Default</th></tr>
</thead>
<tbody>
<tr>
<td>SKU</td>
<td>Based on product name.</td>
</tr>
<tr>
<td>Meta Title</td>
<td>Based on product name.</td>
</tr>
<tr>
<td>Meta Keywords</td>
<td>Based on product name.</td>
</tr>
<tr>
<td>Meta Description</td>
<td>Based on product name and description.</td>
</tr>
</tbody>
</table>
</div>
<p><span>表示另一个字段值的占位符包含在双花括号中。</span>产品属性集中<span><span>包含的任何属性代码</span><span>都可以用作占位符。</span></span></p>
<p><img alt="产品字段自动生成" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-product-fields-auto-generation.png?lang=en" /></p>
<p><span><span>有关这些设置的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span>产品字段自动生成<span>。</span><em><span></span></em><span></span></p>
<h3 id="edit-the-placeholder-value"><span>编辑占位符值</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>产品字段自动生成</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分并对</span><span>占位符值进行任何必要的更改。</span></span><span><span></span></span><span></span></p>
<p><span>例如，如果您希望为每个产品包含一个特定关键字，或者您希望在每个元描述中包含一个短语，请将值直接输入到相应的字段中。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>如果要保留现有的占位符值，请保留包含每个标记标签的双花括号。</span></p>
</div>
</div>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h3 id="common-placeholders"><span>常见占位符</span></h3>
<ul>
<li><code>{{color}}</code></li>
<li><code>{{country_of_manufacture}}</code></li>
<li><code>{{description}}</code></li>
<li><code>{{gender}}</code></li>
<li><code>{{material}}</code></li>
<li><code>{{name}}</code></li>
<li><code>{{short_description}}</code></li>
<li><code>{{size}}</code></li>
<li><code>{{sku}}</code></li>
</ul>]]></description>
      <pubDate>Wed, 04 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品列表]]></title>
      <link>https://www.360magento.com/blog/products-lists/</link>
      <description><![CDATA[<p><span>目录中的所有产品都可以从管理员的</span><em>产品</em><span><span>页面访问，您可以在其中创建产品和编辑现有产品。</span><span>对于多站点安装，每个网站都可以从同一目录中提供不同的待售产品选择。</span></span></p>
<p><span></span><em>产品</em><span><span>列表包括目录中的</span><span>所有产品，指示它们可用的网站，以及它们当前是否可以销售。</span></span>在启用了共享目录<span><span>的 Adob​​e Commerce B2B 安装中</span><span>，网格包含一个列，指示哪些产品在共享目录中具有替代折扣定价。</span></span></p>
<p><span><span>您可以逐页浏览列表，或搜索特定产品。</span><span>使用标准</span></span>控件<span><span>对列表进行排序和过滤，并对</span><span>选定产品应用</span></span>操作。<span></span></p>
<p><img alt="产品网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/products-grid.png?lang=en" /></p>
<h2 id="page-controls"><span>页面控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>添加产品</span></td>
<td><span><span>启动创建新的简单产品的流程。</span><span>要选择特定的产品类型，请单击向下箭头。</span><span>选项：</span></span>简单产品<span>/</span>可配置产品<span>/</span>分组产品<span>/</span>虚拟产品<span>/</span>捆绑产品<span>/</span>可下载产品<span>/</span>礼品卡</td>
</tr>
<tr>
<td><span>导出完整目录</span></td>
<td><span>（需要</span>MCOM 连接器<span>）手动请求从 Adob​​e Commerce</span>导出完整目录<span><span>。</span><span>外发消息批量导出到 .csv 文件。</span></span></td>
</tr>
<tr>
<td><span>动作</span></td>
<td><span><span>列出可应用于列表中选定产品的所有操作。</span><span>要对一个产品或一组产品应用操作，请选中每个产品第一列中的复选框。</span><span>选项：</span></span><code>Delete</code><span>/&nbsp;</span><code>Change Status</code><span>/&nbsp;</span><code>Update Attributes</code><span>/&nbsp;</span><code>Assign Inventory Source</code><span>/&nbsp;</span><code>Unassign Inventory Source</code><span>/</span><code>Transfer Inventory To Source</code></td>
</tr>
<tr>
<td><span>过滤器</span></td>
<td><span>根据当前过滤器启动目录搜索。</span></td>
</tr>
<tr>
<td><span>默认视图</span></td>
<td><span><span>指示当前网格列布局。</span><span>如果有保存的网格列视图，您可以选择另一个。</span></span></td>
</tr>
<tr>
<td><span>列</span></td>
<td><span><span>列出可应用于列表中选定产品的所有操作。</span><span>要对一个产品或一组产品应用操作，请选中每个产品第一列中的复选框。</span></span></td>
</tr>
<tr>
<td><span>按关键字搜索</span></td>
<td><span>左上角的搜索框用于按关键字查找产品。</span></td>
</tr>
<tr>
<td><span>编辑</span></td>
<td><span><span>在编辑模式下打开产品。</span><span>您可以通过单击行中的任意位置来完成相同的操作。</span></span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="default-columns"><span>默认列</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>柱子</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>（复选框）</span></td>
<td><span><span>选择要执行操作的多个记录。</span><span>每个选定记录的第一列中的复选框被标记。</span><span>选项：</span></span><br /><span>全选</span><span>- 选择找到的与当前过滤器设置匹配的所有记录。</span><br /><span>全选此页</span><span>- 仅选择在当前页面上找到的与过滤器设置匹配的记录。</span></td>
</tr>
<tr>
<td><span>ID</span></td>
<td><span>首次保存新产品时分配的唯一序列号。</span></td>
</tr>
<tr>
<td><span>缩略图</span></td>
<td><span>显示主要产品图像的缩略图。</span></td>
</tr>
<tr>
<td><span>姓名</span></td>
<td><span>产品名称。</span></td>
</tr>
<tr>
<td><span>类型</span></td>
<td><span>产品类型。</span></td>
</tr>
<tr>
<td><span>属性集</span></td>
<td><span>用作产品模板的属性集的名称。</span></td>
</tr>
<tr>
<td><span>存货单位</span></td>
<td><span>分配给产品的唯一库存单位。</span></td>
</tr>
<tr>
<td><span>价格</span></td>
<td><span>产品的单价。</span></td>
</tr>
<tr>
<td><span>数量</span></td>
<td><span>当前库存的数量。</span></td>
</tr>
<tr>
<td><span>可售数量</span></td>
<td><span>该产品所有可用单位的总和。</span></td>
</tr>
<tr>
<td><span>能见度</span></td>
<td><span><span>指示产品在目录中的可见位置。</span><span>选项：</span></span><code>Not Visible Individually</code><span>/&nbsp;</span><code>Catalog</code><span>/&nbsp;</span><code>Search</code><span>/</span><code>Catalog, Search</code></td>
</tr>
<tr>
<td><span>状态</span></td>
<td><span><span>指示产品的状态。</span><span>选项：</span></span><code>Enabled</code><span>和</span><code>Disabled</code></td>
</tr>
<tr>
<td><span>网站</span></td>
<td><span>表示提供产品的网站。</span></td>
</tr>
<tr>
<td><span>行动</span></td>
<td><span>在编辑模式下打开产品。</span></td>
</tr>
<tr>
<td><span>共享目录</span></td>
<td><img alt="Adobe Commerce 的 B2B" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/b2b.svg?lang=en" /><span>（仅</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/introduction.html?lang=en">适用于 Adob​​e Commerce 的 B2B</a><span>）表示包含产品自定义定价的共享目录。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="other-columns"><span>其他专栏</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>柱子</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>简短的介绍</span></td>
<td><span>产品的简短描述。</span></td>
</tr>
<tr>
<td><span>特价日期</span></td>
<td><span>特价促销的第一天。</span></td>
</tr>
<tr>
<td><span>迄今为止的特价</span></td>
<td><span>特价促销的最后日期。</span></td>
</tr>
<tr>
<td><span>成本</span></td>
<td><span>项目的实际成本。</span></td>
</tr>
<tr>
<td><span>制造商</span></td>
<td><span>产品的制造商。</span></td>
</tr>
<tr>
<td><span>元关键字</span></td>
<td><span>产品的元关键字。</span></td>
</tr>
<tr>
<td><span>颜色</span></td>
<td><span>产品颜色。</span></td>
</tr>
<tr>
<td><span>将产品设置为新日期</span></td>
<td><span>设置产品的第一个日期为新促销。</span></td>
</tr>
<tr>
<td><span>将产品设置为最新</span></td>
<td><span>将产品设置为新促销的最后日期。</span></td>
</tr>
<tr>
<td><span>活动自/至</span></td>
<td><span>产品开始和结束日期。</span></td>
</tr>
<tr>
<td><span>布局</span></td>
<td><span>产品布局。</span></td>
</tr>
<tr>
<td><span>最低广告价格</span></td>
<td><span>产品的最低广告价格。</span></td>
</tr>
<tr>
<td><span>允许礼物消息</span></td>
<td><span>给购买礼品卡的客户的礼品信息。</span></td>
</tr>
<tr>
<td><span>特价</span></td>
<td><span>产品特价。</span></td>
</tr>
<tr>
<td><span>重量</span></td>
<td><span>产品重量。</span></td>
</tr>
<tr>
<td><span>元标题</span></td>
<td><span>产品的元标题。</span></td>
</tr>
<tr>
<td><span>元描述</span></td>
<td><span>产品元数据描述。</span></td>
</tr>
<tr>
<td><span>制造国</span></td>
<td><span>制造国。</span></td>
</tr>
<tr>
<td><span>新主题</span></td>
<td><span>将自定义主题应用于产品。</span></td>
</tr>
<tr>
<td><span>网址键</span></td>
<td><span>产品的 URL 密钥。</span></td>
</tr>
<tr>
<td><span>税级</span></td>
<td><span>产品税级。</span></td>
</tr>
<tr>
<td><span>允许礼物消息</span></td>
<td><span>显示产品的礼品消息选项的可用性。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Tue, 03 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2分类权限]]></title>
      <link>https://www.360magento.com/blog/Category-permissions/</link>
      <description><![CDATA[<p><span>类别访问可以仅限于特定的客户组，也可以完全限制。</span><span>您可以控制产品价格的显示，并确定哪些客户群可以将产品添加到购物车，并指定登陆页面。</span></p>
<p><span><span>例如，如果您只销售给批发客户，您可以允许任何人浏览目录，但显示价格并只允许批发客户组中的人购买。</span><span>在以下示例中，只有登录用户才能访问&ldquo;收藏&rdquo;类别。</span><span>对于来宾，&ldquo;收藏&rdquo;选项不会出现在主菜单中。</span></span></p>
<p><img alt="登录用户查看&ldquo;收藏&rdquo;类别" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-category-permissions-logged-in.png?lang=en" /></p>
<p><span>启用后，新的</span><em>类别权限</em><span><span>部分会出现在类别页面上，允许您为每个类别应用所需的访问权限。</span><span>您可以为不同的网站和客户群体为每个类别添加多个权限规则。</span></span></p>
<h2 id="step-1%3A-configure-category-permissions"><span>第 1 步：配置类别权限</span></h2>
<div class="extension important">
<div><span><span>重要的</span></span></div>
<div>
<p><span><span><em><span>启用共享目录</span></em></span><span>功能后，目录中的</span><span><em><span>所有</span></em></span><span>类别都会</span><span>忽略</span><span>所有现有</span></span>组权限设置。<span>共享目录在启用时完全控制目录中的所有类别权限。</span><span><em><span></span></em></span><span></span><span><em><span></span></em></span><span></span></p>
</div>
</div>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>类别权限</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="类别权限" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-category-permissions.png?lang=en" /></p>
<p><span><span>有关这些选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span>类别权限<span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>将</span><span>启用</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>根据您希望在商店中允许或限制的内容完成其他选项（请参阅以下部分）。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>当提示更新缓存时，单击系统消息中的</span><span>缓存管理</span><span>链接并按照说明刷新缓存。</span></p>
</li>
</ol>
<h3 id="allow-browsing-category"><span>允许浏览类别</span></h3>
<p><span>此选项适用于</span>网站<span>中的所有类别。</span></p>
<p><span>要允许</span><span><em>特定客户组</em></span><span>的成员浏览类别产品，请执行以下操作：</span></p>
<ol>
<li>
<p><span>将</span><span>允许浏览类别</span><span>设置为</span><code>Specified Customer Groups</code><span>。</span></p>
</li>
<li>
<p><span>在&ldquo;</span><span>客户组</span><span>&rdquo;框中，选择允许浏览类别中产品的每个组。</span></p>
<p><span>要选择多个组，请在单击每个组时按住 Ctrl 键 (PC) 或 Command 键 (Mac)。</span></p>
<p><img alt="允许批发客户组浏览" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-allow-browsing-customer-groups.png?lang=en" /></p>
</li>
</ol>
<p><span>要</span><span><em>限制访问并重定向到登录页面</em></span><span>，请执行以下操作：</span></p>
<ol>
<li>
<p><span>将</span><span>允许浏览类别</span><span>设置为</span><code>No, Redirect to Landing Page</code><span>。</span></p>
</li>
<li>
<p><span><span>选择</span><span>重定向访问者的</span></span><span>着陆页。</span><span></span></p>
<p><img alt="重定向到主页" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-browse-category-landing-page.png?lang=en" /></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>虽然</span><em>允许浏览类别</em><span>设置适用于网站中的所有类别，但您可以为每个商店视图配置不同的登录页面。</span></p>
</div>
</div>
</li>
</ol>
<h3 id="display-product-prices"><span>显示产品价格</span></h3>
<p><span>此选项适用于</span>网站<span>中的所有类别。</span></p>
<p><span>要仅允许</span><span><em>特定客户组</em></span><span>的成员查看类别中产品的价格，请执行以下操作：</span></p>
<ol>
<li>
<p><span>将</span><span>显示产品价格</span><span>设置为</span><code>Yes, for Specified Customer Groups</code><span>。</span></p>
</li>
<li>
<p><span>在&ldquo;</span><span>客户组</span><span>&rdquo;框中，选择允许查看类别中产品价格的每个组。</span></p>
<p><span>要选择多个组，请在单击每个组时按住 Ctrl 键 (PC) 或 Command 键 (Mac)。）</span></p>
<p><img alt="只有批发客户组可以看到价格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-price-customer-groups.png?lang=en" /></p>
</li>
</ol>
<h3 id="allow-adding-to-cart"><span>允许加入购物车</span></h3>
<p><span>此选项适用于</span>网站<span>中的所有类别。</span></p>
<p><span>要仅允许</span><span><em>特定客户组</em></span><span>的成员将类别产品放入购物车，请执行以下操作：</span></p>
<ol>
<li>
<p><span>将</span><span>允许添加到购物车</span><span>设置为</span><code>Yes, for Specified Customer Groups</code><span>。</span></p>
</li>
<li>
<p><span>在&ldquo;</span><span>客户组</span><span>&rdquo;框中，选择允许将类别中的产品添加到购物车的每个组。</span></p>
<p><span>要选择多个组，请在单击每个组时按住 Ctrl 键 (PC) 或 Command 键 (Mac)。</span></p>
<p><img alt="只有批发客户群才能将产品放入购物车" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-cart-customer-groups.png?lang=en" /></p>
</li>
</ol>
<h3 id="disallow-catalog-search"><span>禁止目录搜索</span></h3>
<p><span><span>设置此选项可防止特定客户组的成员使用目录搜索。</span><span>它适用于</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/start/setup/websites-stores-views.html?lang=en">网站</a><span>中的所有类别。</span></p>
<ul>
<li>
<p><span>要</span><span><em>仅允许登录的客户</em></span><span>使用目录搜索，请选择</span><code>NOT LOGGED IN</code><span>。</span></p>
</li>
<li>
<p><span>要</span><span><em>仅允许特定客户组</em></span><span>使用目录搜索，请选择要排除在使用类别搜索之外的每个组。</span></p>
<p><span>要选择多个组，请在单击每个组时按住 Ctrl 键 (PC) 或 Command 键 (Mac)。</span></p>
<p><img alt="一般客户组不允许目录搜索" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-disallow-category-search.png?lang=en" /></p>
</li>
</ul>
<h2 id="step-2%3A-apply-category-permissions"><span>第 2 步：应用类别权限</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在类别树中，选择目标类别。</span></p>
</li>
<li>
<p><span>展开页面上的</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" />&nbsp;<span>类别权限</span><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>要创建权限规则，请单击</span><span>新建权限</span><span>。</span></p>
<p><img alt="类别权限部分" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-permissions-section-admin.png?lang=en" /></p>
</li>
<li>
<p><span>选择适用的</span><span>网站</span><span>和</span><span>客户组</span><span>。</span></p>
</li>
<li>
<p><span>根据需要设置个人权限。</span></p>
</li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>当为任何父分类设置</span><code>Browsing Category</code><span>=</span><code>Deny</code><span><span>权限时，它不会显示在</span><span>子分类页面的</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/navigation/navigation-breadcrumb-trail.html?lang=en">Breadcrumb Trail中。</a><span></span></p>
</div>
</div>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Mon, 02 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别的预定更改]]></title>
      <link>https://www.360magento.com/blog/Scheduled-changes-for-categories/</link>
      <description><![CDATA[<p><span>类别更新可以按计划应用，并与其他内容更改组合在一起。</span><span>您可以根据对类别的预定更改创建广告系列，或将更改应用到现有广告系列。</span></p>
<p><img alt="预定更改" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-scheduled-changes.png?lang=en" /></p>
<h2 id="schedule-an-update-to-a-category"><span>安排更新类别</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左侧分类树中，选择需要修改的分类。</span></p>
</li>
<li>
<p><span><span>在</span><span>页面顶部的</span></span><em>计划更改框中，单击</em><span></span><span>计划新更新</span><span>。</span></p>
</li>
<li>
<p><span>选择&ldquo;</span><span>另存为新更新&rdquo;</span><span>选项后，设置更新的基本参数：</span></p>
<ul>
<li>
<p><span>对于</span><span>更新名称</span><span>，输入新内容暂存活动的名称。</span></p>
</li>
<li>
<p><span>输入更新的简短</span><span>说明</span><span>及其使用方式。</span></p>
</li>
<li>
<p><span>使用日历 (&nbsp;</span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span>) 工具选择活动的</span><span>开始日期</span><span>和</span><span>结束日期</span><span>。</span></p>
</li>
</ul>
</li>
</ol>
<div class="extension important">
<div><span><span>重要的</span></span></div>
<div>
<p><span>活动</span><span>开始日期</span><span>和</span><span>结束日期</span><span>必须使用</span><span><em>默认</em></span><span><span>的管理时区定义，该时区是从每个网站的本地时区转换而来的。</span><span>例如，对于位于不同时区的多个网站，您希望根据美国时区开始营销活动，您需要为每个本地时区安排单独的更新。</span><span>您为每个设置</span></span><span>开始日期</span><span>和</span><span>结束日期</span><span>，这是从本地网站时区转换为默认的管理时区。</span></p>
</div>
</div>
<ol>
<li>
<p><span>对计划的更新进行任何必要的更改。</span></p>
</li>
<li>
<p><span><span>单击</span><span>右上角按钮栏中的预览以预览更改</span></span><span>。</span><span></span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="assign-to-an-existing-update"><span>分配给现有更新</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左侧分类树中，选择需要修改的分类。</span></p>
</li>
<li>
<p><span><span>在</span><span>页面顶部的</span></span><em>计划更改框中，单击</em><span></span><span>计划新更新</span><span>。</span></p>
</li>
<li>
<p><span>选择</span><span>分配给现有市场活动</span><span>。</span></p>
</li>
<li>
<p><span>在列表中，找到所需的营销活动并点击</span><span>选择</span><span>。</span></p>
</li>
<li>
<p><span>对计划的更新进行必要的更改。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sun, 01 Jan 2023 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2添加和删​​除类别产品]]></title>
      <link>https://www.360magento.com/blog/Add-and-remove-category-products/</link>
      <description><![CDATA[<p>从&ldquo;类别中的产品&rdquo;部分，商店管理员可以将产品添加到类别中。此部分列出分配给该类别的所有产品，并在按规则匹配产品设置为时显示添加产品。</p>
<p><img alt="类别部分的产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-product.png?lang=en" /></p>
<h2 id="search-for-products-to-add"><span>搜索要添加的产品</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左侧的类别树中，选择要添加产品的类别。</span></p>
</li>
<li>
<p><span><span>展开</span><em><span>类别</span></em><span>部分中</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>的产品。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>单击</span><span>添加产品</span><span>。</span></p>
</li>
<li>
<p><span>使用</span><em>按关键字</em><span>或过滤器搜索来查找您要添加的产品。</span></p>
<p><img alt="搜索所有产品选项卡" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-all-product.png?lang=en" /></p>
</li>
<li>
<p><span>在&ldquo;</span><em>分配</em><span>&rdquo;列中，将选项切换</span><code>Yes</code><span>为您要添加的每个产品。</span></p>
<p><span>如果您想包括所有显示的产品，您可以单击列标题中的菜单箭头并选择</span><span>全选</span><span>。</span></p>
</li>
<li>
<p><span>要应用您的更改，请点击</span><span>保存并关闭</span><span>。</span></p>
</li>
</ol>
<h3 id="actions"><span>动作</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>行动</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>全选</span></td>
<td><span>选中列表中所有记录的复选框。</span></td>
</tr>
<tr>
<td><span>全部取消选择</span></td>
<td><span>清除列表中所有记录的复选框。</span></td>
</tr>
<tr>
<td><span>全选本页</span></td>
<td><span>选中当前页面上记录的复选框。</span></td>
</tr>
<tr>
<td><span>取消选择此页面上的所有内容</span></td>
<td><span>清除当前页面上记录的复选框。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="add-products-by-sku"><span>按 SKU 添加产品</span></h2>
<ol>
<li>
<p><span>单击</span><span>添加产品</span></p>
</li>
<li>
<p><span>选择</span><span>按 SKU 添加产品</span><span>选项卡。</span></p>
</li>
<li>
<p><span>输入 SKU（每行一个）并点击</span><span>分配</span><span>。</span></p>
<p><span>要放弃更改，请单击</span><span>删除</span><span>。</span></p>
<p><img alt="按 SKU 选项卡添加产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/add-product-by-sku.png?lang=en" /></p>
</li>
<li>
<p><span>要应用您的更改，请点击</span><span>保存并关闭</span><span>。</span></p>
</li>
</ol>
<h2 id="remove-products-from-a-category"><span>从类别中删除产品</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左侧的类别树中，选择要编辑的类别。</span></p>
</li>
<li>
<p><span><span>展开</span><em><span>类别</span></em><span>部分中</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>的产品。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>找到要删除的产品。</span></p>
</li>
<li>
<p><span>在</span><em>操作</em><span>列中，单击</span><span>取消分配</span><span>。</span></p>
</li>
<li>
<p><span>要应用您的更改，请点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sat, 31 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2排序类别产品]]></title>
      <link>https://www.360magento.com/blog/Sort-category-products/</link>
      <description><![CDATA[<p>可以通过将产品拖放到某个位置或应用预定义的排序顺序来手动指定产品在类别中的位置。默认情况下，产品可以按库存水平、年龄、颜色、名称、SKU 和价格排序。自动排序会覆盖当前排序顺序并重置手动设置的任何拖放位置。颜色的排序顺序和要包含在列表中的产品可能需要的最低库存水平在Visual Merchandiser配置中设置。</p>
<p>您可以为每个商店<span><span>单独设置类别选项，</span><span>以确定产品的选择、它们在列表中的相对位置以及可用于类别规则的属性。</span><span>但是，只能将一个排序顺序分配给任何商店的</span></span>商店视图<span>级别。</span></p>
<h2 id="step-1%3A-set-the-scope-of-the-configuration"><span>第一步：设置配置范围</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>如有必要，选择应用设置的</span><span>商店视图</span><span>。</span></p>
<p><span>对于多商店安装，</span><em>Store View</em><span>设置将排序顺序应用于商店内的所有可用视图。</span></p>
</li>
<li>
<p><span>在左侧的类别树中，选择要编辑的类别。</span></p>
<p><img alt="类别树" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-selected.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-2%3A-sort-the-products"><span>第 2 步：对产品进行排序</span></h2>
<p><span></span><em>在类别</em><span><span>部分的产品中</span><span>，单击图块 (&nbsp;</span></span><img alt="查看磁贴" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-view-tiles.png?lang=en" /><span><span>) 图标以在网格中显示产品图块。</span><span>使用手动或自动方法对产品进行分类。</span></span></p>
<p><img alt="产品板块" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-products-tiles.png?lang=en" /></p>
<h3 id="method-1%3A-manual-sort"><span>方法一：手动排序</span></h3>
<ol>
<li>
<p><span><span>根据您的喜好</span><span>设置</span></span><span>排序顺序。</span><span></span></p>
</li>
<li>
<p><span>单击</span><span>排序</span><span>以应用新的排序顺序。</span></p>
<p><img alt="排序" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-edit-sort-order.png?lang=en" /></p>
</li>
<li>
<p><span>要保存排序顺序，请单击&ldquo;</span><span>保存类别</span><span>&rdquo; 。</span></p>
</li>
<li>
<p><span>出现提示时，更新任何无效的索引器。</span></p>
</li>
</ol>
<h3 id="method-2%3A-automatic-sort"><span>方法二：自动排序</span></h3>
<ol>
<li>
<p><span></span><span>将按规则匹配产品</span><span>(&nbsp;</span><img alt="切换是" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-yes.png?lang=en" /><span><span>)</span><span>设置为</span></span><code>Yes</code><span>。</span></p>
<p><img alt="按规则匹配产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-edit-automatic-sorting.png?lang=en" /></p>
</li>
<li>
<p><span><span>根据您的喜好</span><span>设置</span></span><span>自动排序。</span><span></span></p>
</li>
<li>
<p><span>按照下一步中的说明创建类别规则。</span></p>
</li>
</ol>
<h2 id="step-3%3A-create-a-category-rule"><span>第 3 步：创建类别规则</span></h2>
<ol>
<li>
<p><span></span><span>将按规则匹配产品</span><span>(&nbsp;</span><img alt="切换是" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-yes.png?lang=en" /><span><span>)</span><span>设置为</span></span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>添加条件</span><span>。</span></p>
<p><img alt="分类条件" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-edit-condition.png?lang=en" /></p>
</li>
<li>
<p><span><span>选择作为</span><span>条件基础的</span></span><span>属性。</span><span></span></p>
</li>
<li>
<p><span>将</span><span>运算符</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Equal</code></li>
<li><code>Not equal</code></li>
<li><code>Greater than</code></li>
<li><code>Greater than or equal to</code></li>
<li><code>Less than</code></li>
<li><code>Less than or equal to</code></li>
<li><code>Contains</code></li>
</ul>
</li>
<li>
<p><span>输入适当的</span><span>值</span><span>。</span></p>
</li>
<li>
<p><span>要添加另一个条件，请单击</span><span>添加条件</span><span>并重复该过程。</span></p>
</li>
</ol>
<h2 id="step-4%3A-save%2C-refresh%2C-and-verify"><span>第 4 步：保存、刷新和验证</span></h2>
<ol>
<li>
<p><span>完成后，点击</span><span>保存类别</span><span>。</span></p>
</li>
<li>
<p><span>当提示刷新缓存时，单击</span><span>缓存管理</span><span>并刷新每个无效缓存。</span></p>
</li>
<li>
<p><span>在店面中，验证产品选择、排序和类别规则是否正常工作。</span></p>
<p><span>如果您需要进行调整，请更改设置并重试。</span></p>
</li>
</ol>]]></description>
      <pubDate>Fri, 30 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别产品分配]]></title>
      <link>https://www.360magento.com/blog/Category-product-assignments/</link>
      <description><![CDATA[<p>对于类别，使用&ldquo;类别中的<em>产品&rdquo;</em>部分查看当前分配给该类别的产品。每列顶部的搜索过滤器用于在类别中添加和删除产品。您还可以使用类别规则（<img alt="Adobe 商务" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/adobe-logo.svg?lang=en" />仅限 Adob​​e Commerce）在满足一组条件时动态更改产品选择。</p>
<p><img alt="分类产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-products-in-category.png?lang=en" /></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>在类别页面上，</span><code>Out of stock</code><span>产品始终显示</span><span><em>在</em></span>&nbsp;<code>In Stock</code><span>所有排序类型的产品列表中的产品之后。</span></p>
</div>
</div>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span></span><em>库存列仅显示</em><span></span><em><span>选定类别范围内</span></em><span><span>的</span><span>可销售产品数量</span><span>。</span><span>当为产品管理多个库存时，您应该在相应范围之间切换以在</span><em><span>类别产品</span></em><span>网格中显示其他</span></span><em>库存</em><span>列值。</span><em><span></span></em><span></span></p>
</div>
</div>
<h2 id="apply-a-category-rule"><span>应用类别规则</span></h2>
<ol>
<li>
<p><span></span><span>将按规则匹配产品</span><span><span>设置</span><span>为</span></span><code>Yes</code><span>。</span></p>
<p><span>出现自动排序和条件选项。</span></p>
<p><img alt="按规则匹配产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-match-products-by-rule.png?lang=en" /></p>
</li>
<li>
<p><span>设置</span><span>自动排序</span><span>顺序。</span></p>
<p><span>此自动排序基于当前条件。</span></p>
<ul>
<li><code>Stock level</code><span>- 移动到顶部或底部。</span></li>
<li><code>Special price</code><span>- 移动到顶部或底部。</span></li>
<li><code>New Products</code><span>- 首先列出最新产品。</span></li>
<li><code>Color</code><span>- 按颜色字母顺序排序。</span></li>
<li><code>Name</code><span>- 按名称升序或降序排序。</span></li>
<li><code>SKU</code><span>- 按SKU升序或降序排序</span></li>
<li><code>Price</code><span>- 按价格升序或降序排序。</span></li>
</ul>
</li>
<li>
<p><span>单击</span><span>添加条件</span><span>并执行以下操作：</span></p>
<ul>
<li><span><span>选择作为</span><span>条件基础的</span></span><span>属性。</span><span></span></li>
<li><span><span>选择</span><span>形成表达式所需的</span></span><span>运算符。</span><span></span></li>
<li><span><span>输入</span><span>要匹配的</span></span><span>值。</span><span></span></li>
</ul>
<p><img alt="将条件添加到类别规则" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-rule-create.png?lang=en" /></p>
<p><span><span>对描述要满足的条件所需的每个属性重复此过程。</span><span>例如，要匹配 7 到 30 天前创建的产品，请执行以下操作：</span></span></p>
<ul>
<li><span>将</span><span>创建日期</span><span>设置为</span><code>Less than 30</code><span>。</span></li>
<li><span>将</span><span>逻辑</span><span>设置为</span><code>AND</code><span>。</span></li>
<li><span>将</span><span>修改日期</span><span>设置为</span><code>Greater than 7</code><span>。</span></li>
</ul>
</li>
<li>
<p><span>完成后，点击</span><span>保存类别</span><span>。</span></p>
</li>
</ol>
<h3 id="page-options"><span>页面选项</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>选项</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>按规则匹配产品</span></td>
<td><span><span>确定类别中的产品列表是否由类别规则动态生成。</span><span>选项：</span></span><code>Yes</code><span>/</span><code>No</code></td>
</tr>
<tr>
<td><span>自动分拣</span></td>
<td><span><span>自动将排序顺序应用于类别产品列表。</span><span>选项：</span></span><br /><code>None</code><br /><code>Move low stock to top</code><br /><code>Move low stock to bottom</code><br /><code>Special price to top</code><br /><code>Special price to bottom</code><br /><code>Newest products first</code><br /><code>Sort by color</code><br /><code>Name: A - Z</code><br /><code>Name: Z - A</code><br /><code>SKU: Ascending</code><br /><code>SKU: Descending</code><br /><code>Price: High to Low</code><br /><code>Price: Low to High</code></td>
</tr>
<tr>
<td><span>添加条件</span></td>
<td><span>向规则添加另一个条件。</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="page-conditions"><span>页面条件</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>选项</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>属性</span></td>
<td><span><span>确定用作条件基础的属性。</span><span>选项：</span></span><br /><span>Clone Category ID(s)</span><span>&nbsp;- 根据类别 ID 从多个类别动态克隆产品，不带排序和顺序。</span><br /><span>颜色</span><span>- 包括基于颜色的产品。</span><br /><span>创建日期（天前）</span><span>&nbsp;- 根据产品添加到目录后的天数包括产品。</span><br /><span>修改日期（天前）</span><span>&nbsp;- 根据产品上次修改后的天数包括产品。</span><br /><span>名称</span><span>- 包括基于产品名称的产品。</span><br /><span>价格</span><span>- 包括基于价格的产品。</span><br /><span>数量</span><span>- 包括基于库存数量的产品。</span><br /><span>存货单位</span><span>- 包括基于 SKU 的产品。</span></td>
</tr>
<tr>
<td><span>操作员</span></td>
<td><span><span>指定应用于属性值以满足条件的运算符。</span><span>除非指定运算符，否则</span></span><code>Equal</code><span><span>默认使用。</span><span>选项：</span></span><code>Equal</code><span>/&nbsp;</span><code>Not equal</code><span>/&nbsp;</span><code>Greater than</code><span>/&nbsp;</span><code>Greater than or equal to</code><span>/&nbsp;</span><code>Less than</code><span>/&nbsp;</span><code>Less than or equal to</code><span>/</span><code>Contains</code></td>
</tr>
<tr>
<td><span>价值</span></td>
<td><span>指定属性必须满足条件的值。</span></td>
</tr>
<tr>
<td><span>逻辑</span></td>
<td><span><span>用于定义多个条件，仅在添加另一个条件时出现。</span><span>选项：</span></span><code>OR</code><span>/</span><code>AND</code></td>
</tr>
</tbody>
</table>
</div>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>具有子选项的可配置产品的数量是通过合并所有可销售的子产品数量来计算的。</span><span>例如，如果您的可配置产品</span></span><em>Endurance Fitness Tank</em><span>有紫色、红色和黄色选项，每种颜色的数量不同，则父产品数量是紫色、红色和黄色子产品的总可售数量。</span></p>
</div>
</div>
<h2 id="controls"><span>控件</span></h2>
<h2 id="page-controls"><span>页面控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><img alt="查看列表" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-view-list.png?lang=en" /></td>
<td><span>查看列表</span></td>
</tr>
<tr>
<td><img alt="以图块形式查看" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-view-tiles.png?lang=en" /></td>
<td><span>查看为瓷砖</span></td>
</tr>
<tr>
<td><img alt="切换否" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-no.png?lang=en" /></td>
<td><span>按规则匹配 - 否</span></td>
</tr>
<tr>
<td><img alt="切换是" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/toggle-yes.png?lang=en" /></td>
<td><span>按规则匹配 - 是</span></td>
</tr>
<tr>
<td><img alt="移动控制器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-move.png?lang=en" /></td>
<td><span><span>拖放控件允许您抓取产品并将其移动到网格当前页面中的另一个位置。</span><span><br /></span></span></td>
</tr>
<tr>
<td><img alt="位置控制器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/control-position.png?lang=en" /></td>
<td><span>确定产品在列表中的位置。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="page-controls-1"><span>页面控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><img alt="选中的复选框" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/checkbox-selected.png?lang=en" /></td>
<td><span><span>使用第一列标题中的复选框选择所有产品或清除所有选择。</span><span>第一行中的控件确定搜索类型，可以设置为包含任何记录，或仅包含已分配或未分配给该类别的记录。</span><span>每行第一列中的复选框标识要添加到类别中的产品。</span><span>选项：</span></span><code>Yes</code><span>/&nbsp;</span><code>No</code><span>/</span><code>Any</code></td>
</tr>
<tr>
<td><span>搜索过滤器</span></td>
<td><span>每列顶部的过滤器控件可用于输入您要包含或从列表中忽略的特定值，具体取决于&ldquo;全选&rdquo;设置。</span></td>
</tr>
<tr>
<td><span>重置过滤器</span></td>
<td><span>清除所有搜索过滤器。</span></td>
</tr>
<tr>
<td><span>搜索</span></td>
<td><span>根据过滤条件搜索目录并显示结果。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Thu, 29 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2修改类别]]></title>
      <link>https://www.360magento.com/blog/Modify-a-category/</link>
      <description><![CDATA[<p><span><span>类别建立后，可以对其进行编辑、移动到类别树中的其他位置或从目录中删除。</span><span>如果您的目录是实时的，请首先考虑更改可能如何影响该类别中任何现有产品的链接。</span><span>例如，如果您的产品 URL 包含类别路径，并且类别名称已更改，则指向该类别中产品的任何现有链接都将被破坏。</span><span>为避免此问题，您可以将目录配置为在 URL 键更改时自动创建永久重定向。</span><span>您还可以使用 URL 重写工具将流量从旧 URL 重定向到新 URL。</span></span></p>
<h2 id="move-a-category"><span>移动类别</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>要移动类别，请将该类别拖放到树中的新位置。</span></p>
<p><span>对类别结构的更改会自动保存。</span></p>
</li>
</ol>
<h2 id="delete-a-category"><span>删除类别</span></h2>
<ol>
<li>
<p><span>在类别树中，选择要删除的类别。</span></p>
<p><span>已删除的类别无法恢复，因此请确保在继续之前选择了正确的类别。</span></p>
</li>
<li>
<p><span>单击</span><span>删除类别</span><span>。</span></p>
</li>
<li>
<p><span>当提示确认时，单击</span><span>确定</span><span>。</span></p>
</li>
</ol>
<p><span><span>您还可以从&ldquo;</span><span><span>事件</span></span><span>&rdquo;页面或&ldquo;</span><span><span>类别&rdquo;页面</span></span></span>更新<span><span>与类别关联的事件</span><span>。</span></span></p>]]></description>
      <pubDate>Wed, 28 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别 - 设计设置]]></title>
      <link>https://www.360magento.com/blog/Categories-Design-settings/</link>
      <description><![CDATA[<p><em>设计</em><span><span>部分使您可以控制类别、所有相关产品页面和页面布局的</span><span>外观。</span><span>您可以自定义类别页面及其关联产品以进行促销，或区分类别。</span><span>例如，您可能会为某个品牌或特殊系列产品开发独特的设计，或者针对特定时间段应用更新。</span></span></p>
<p><img alt="类别的设计设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-design.png?lang=en" /></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>当同一产品被分配到多个类别且每个类别的设计设置不同时，建议</span><span>在</span><a href="https://docs.magento.com/user-guide/configuration/catalog/catalog.html#search-engine-optimization"><span>搜索引擎优化配置选项中设置</span></a></span><span>Use Categories Path for Product URLs</span><span><span>&nbsp;=&nbsp;</span><span>。</span><span>要访问此设置，请转到</span><span><span>Stores</span></span><span>&nbsp;&gt;&nbsp;</span><em><span>Settings</span></em><span>&nbsp;&gt;&nbsp;</span><span><span>Configuration</span></span><span>，展开</span><span><span>Catalog</span></span><span>并选择左侧面板下方的</span><span><span>Catalog</span></span><span>，然后展开页面上的</span><span><span>Search Engine Optimization</span></span><span>部分。</span></span><code>Yes</code><span></span><a href="https://docs.magento.com/user-guide/configuration/catalog/catalog.html#search-engine-optimization"><span></span></a><span></span><span><span></span></span><span></span><em><span></span></em><span></span><span><span></span></span><span></span><span><span></span></span><span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
</div>
</div>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>使用父类别设置</span></td>
<td><span><span>允许当前类别继承父类别的设计设置。</span><span>如果使用，设计部分中的所有其他字段将变得不可用。</span><span>选项：</span></span><code>Yes</code><span>/</span><code>&nbsp;No</code></td>
</tr>
<tr>
<td><span>主题</span></td>
<td><span>将自定义主题应用于类别。</span></td>
</tr>
<tr>
<td><span>布局</span></td>
<td><span><span>将不同的布局应用于类别页面。</span><span>选项：</span></span><br /><span>无布局更新</span><span>- 默认情况下，布局更新不适用于类别页面。</span><br /><span>空</span><span><span>- 用于定义您自己的页面布局。</span><span>（需要了解 XML。）</span></span><br /><span>1 列</span><span>- 将单列布局应用于类别页面。</span><br /><span>带左侧栏的2 列</span><span>- 将带有左侧栏的两列布局应用于类别页面。</span><br /><span>带右侧栏的2 列</span><span>- 将带有右侧栏的两列布局应用于类别页面。</span><br /><span>3 列</span><span>- 将三列布局应用于类别页面。</span><br /><span>页面 - 全宽</span><span>- （需要</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/page-builder/introduction.html?lang=en">页面生成器</a><span>) 将 CMS 页面的全角布局应用于类别页面。</span><br /><span>类别 - 全宽</span><span>-（需要页面构建器）将类别页面的全宽布局应用于类别页面。</span><br /><span>产品 - 全宽</span><span>-（需要页面构建器）将产品页面的全宽布局应用于类别页面。</span></td>
</tr>
<tr>
<td><span>自定义布局更新</span></td>
<td><span><span>列出服务器上可用的自定义布局更新文件。</span><span>选择要应用到类别的自定义布局更新。</span></span></td>
</tr>
<tr>
<td><span>将设计应用于产品</span></td>
<td><span>选择后，将自定义设置应用于类别中的所有产品。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="scheduled-design-update"><span>计划的设计更新</span></h2>
<div class="table-container">
<table>
<tbody>
<tr>
<td><img alt="Magento 开源功能" height="20" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/open-source.svg?lang=en" width="20" /><span>Magento 开源所需的替代方法（</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/user-guides/home.html?lang=en#product-editions">了解更多</a><span>）</span></td>
</tr>
</tbody>
</table>
</div>
<p><span>计划的</span><em>设计更新</em><span>部分确定将自定义设计应用于类别页面的日期范围。</span></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>计划更新自/至</span></td>
<td><span>确定将自定义布局应用于类别时的日期范围。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Tue, 27 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别 - 搜索引擎优化设置]]></title>
      <link>https://www.360magento.com/blog/Categories-Search-Engine-Optimization-settings/</link>
      <description><![CDATA[<p><em>搜索引擎优化</em>部分指定搜索引擎用来索引类别的URL 键和元数据字段。尽管一些搜索引擎忽略元关键字，但其他搜索引擎继续使用它们。当前的 SEO 最佳做法是在元标题和元描述中加入高价值关键字。</p>
<p>&nbsp;</p>
<p><img alt="搜索引擎优化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/categories-search-engine-optimization.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th>范围</th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>网址键</span></td>
<td><span>商店视图</span></td>
<td><span><span>确定类别页面的在线地址。</span><span>URL 键被添加到商店的基本 URL，并出现在浏览器的地址栏中。</span><span>在配置中，您可以在产品 URL 中包含或排除类别 URL 键。</span><span>URL 密钥应全部为小写字符，这些字符之间使用非尾随连字符而不是空格。</span><span>不要包含 .html 等后缀，因为它在配置中进行管理。</span></span></td>
</tr>
<tr>
<td><span>元标题</span></td>
<td><span>商店视图</span></td>
<td><span><span>标题出现在浏览器的标题栏和选项卡中，也是搜索引擎结果页面 (SERP) 上的标题。</span><span>元标题对于页面应该是唯一的并且长度为 s。</span></span></td>
</tr>
<tr>
<td><span>元关键字</span></td>
<td><span>商店视图</span></td>
<td><span><span>该类别的相关关键字。</span><span>考虑使用客户可能用来在类别中查找产品的关键字。</span></span></td>
</tr>
<tr>
<td><span>元描述</span></td>
<td><span>商店视图</span></td>
<td><span><span>元描述提供搜索结果列表页面的简要概述。</span><span>理想的长度在 150-160 个字符之间，最多 255 个字符。</span><span>虽然对客户不可见，但一些搜索引擎会在搜索结果页面上包含元描述。</span></span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Mon, 26 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别 - 显示设置]]></title>
      <link>https://www.360magento.com/blog/Categories-Display-settings/</link>
      <description><![CDATA[<p><span><span>显示设置确定哪些内容元素出现在类别页面上以及产品出现的顺序。</span><span>您可以启用 CMS 块，设置类别的锚点状态，并从&ldquo;</span></span><em>显示设置&rdquo;</em><span><span>选项卡管理排序选项。</span><span>有关类别如何反映在店面中的示例，请参阅</span></span>目录导航<span>。</span></p>
<p><img alt="类别的显示设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-display-settings.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>显示模式</span></td>
<td><span><span>确定类别页面上显示的内容元素。</span><span>选项：</span></span><code>Products Only</code><span>/&nbsp;</span><code>Static Block Only</code><span>/</span><code>Static Block and Products</code></td>
</tr>
<tr>
<td><span>锚</span></td>
<td><span><span>设置为 时，</span><span>在分层导航中</span></span><code>Yes</code><span>包括</span><em>按属性筛选部分。</em><span>选项：</span><code>Yes</code><span>/</span><code>No</code></td>
</tr>
<tr>
<td><span>可用产品列表排序依据</span></td>
<td><span>（必需）默认值为</span><code>Position</code><span>、</span><code>Name</code><span>和</span><code>Price</code><span><span>。</span><span>要自定义排序选项，请取消选择&ldquo;</span></span><span>使用所有可用属性</span><span><span>&rdquo;复选框并选择要使用的属性。</span><span>您可以根据需要定义和添加属性。</span></span></td>
</tr>
<tr>
<td><span>默认产品列表排序依据</span></td>
<td><span>（必需）要定义默认</span><em>排序</em><span>方式选项，请取消选择</span><span>使用配置设置</span><span>复选框并选择一个属性。</span></td>
</tr>
<tr>
<td><span>分层导航价格步骤</span></td>
<td><span><span>默认情况下，Commerce 以 10、100 和 1000 的增量显示价格范围，具体取决于列表中的产品。</span><span>要更改价格步长范围，请取消选择</span></span><span>使用配置设置</span><span>复选框。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Sun, 25 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别 - 内容设置]]></title>
      <link>https://www.360magento.com/blog/Categories-Content-settings/</link>
      <description><![CDATA[<p><em>内容</em>设置确定类别页面上显示的任何其他内容。除了类别产品列表之外，页面还可以包含图像、描述和 CMS 块。您可以使用页面构建器内容工具来定义类别描述。</p>
<ol>
<li>
<p><span>在编辑模式下打开类别。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>内容</span><span>部分</span><span>。</span></p>
<p><img alt="分类内容" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-content.png?lang=en" /></p>
</li>
<li>
<p><span>在</span><span>描述</span><span>区域的右上角，单击</span><span>使用页面构建器编辑</span><span>。</span></p>
</li>
<li>
<p><span>使用</span>页面构建器<span>&nbsp;内容工具</span>编辑任何现有文本<span>并添加其他内容（如果需要）。</span></p>
</li>
</ol>
<h2 id="page-builder-preview"><span>页面构建器预览</span></h2>
<p><span><span>当您展开</span><span>现有类别​​的</span></span><em>内容部分（其中包含使用页面构建器创建的内容）时，它会显示</em><span></span><span>描述</span><span><span>内容的预览，就像它会出现在类别页面中一样。</span><span>单击内容区域以打开 Page Builder 工作区，您可以在其中进行任何需要的更新。</span></span></p>
<p><img alt="说明预览" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/pb-product-category-content-preview.png?lang=en" /></p>
<p><span><span>默认情况下，为产品和类别表单启用此内容预览。</span><span>如果性能因加载预览而受到影响，您可以在</span></span>内容管理配置<span>设置中禁用预览。</span></p>
<h2 id="add-the-category-description-in-the-editor"><span>在编辑器中添加类别描述</span></h2>
<p><span><span>仅在文本框中输入纯 ASCII 字符。</span><span>如果从文字处理器粘贴文本，请先将其保存为纯 .TXT 文件以删除任何不可见的控制字符。</span></span></p>
<p><span>有关详细信息，请参阅</span>使用编辑器<span>。</span></p>
<ol>
<li>
<p><span>在编辑模式下打开类别。</span></p>
</li>
<li>
<p><span>向下滚动并展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>内容</span><span>部分</span><span>。</span></p>
<p><img alt="分类内容" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-content-ce.png?lang=en" /></p>
</li>
<li>
<p><span>输入类别</span><span>描述</span><span>并使用</span>编辑器工具栏<span>根据需要设置格式。</span></p>
<p><span>您可以拖动右下角来更改文本框的高度。</span></p>
</li>
</ol>
<h2 id="add-a-cms-block-to-the-category-page"><span>将 CMS 块添加到类别页面</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在类别树中，选择要编辑的类别。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>内容</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
</li>
<li>
<p><span>对于</span><span>添加 CMS 块</span><span>，选择要添加的块。</span></p>
</li>
<li>
<p><span>展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>显示</span><span>设置</span><span>部分。</span></p>
</li>
<li>
<p><span>将</span><span>显示模式</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Static block only</code></li>
<li><code>Static block and products</code></li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存</span><span>并查看店面上的块显示（需要刷新缓存）。</span></p>
</li>
</ol>
<h2 id="content-settings-reference"><span>内容设置参考</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>环境</span></th><th>范围</th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>分类图片</span></td>
<td><span>商店视图</span></td>
<td><span><span>指定类别页面顶部的图像。</span><span>方法：</span></span><br /><br /><span>上传</span><span>- 将图像文件从您的本地计算机上传到图库并将其用作类别图像。</span><br /><br /><span>从图库中选择</span><span>- 提示您从图库中选择现有图像。</span><br /><br /><img alt="页面生成器相机图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-camera.png?lang=en" /><span>- 将图像文件拖到相机图块或浏览到图像并从本地文件系统中选择它。</span></td>
</tr>
<tr>
<td><span>描述</span></td>
<td><span>商店视图</span></td>
<td><span>指定出现在类别页面上的描述。</span><br /><br /><span>使用页面构建器编辑</span><span>- 打开</span>页面构建器工作区<span>，您可以在其中编辑描述。</span><br /><br /><span>显示/隐藏编辑器</span><span>- 在所见即所得编辑器和 HTML 模式之间切换显示。</span></td>
</tr>
<tr>
<td><span>添加 CMS 块</span></td>
<td><span>商店视图</span></td>
<td><span>将现有的</span>CMS 块<span>添加到类别页面。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Sat, 24 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2创建类别]]></title>
      <link>https://www.360magento.com/blog/Create-categories/</link>
      <description><![CDATA[<p>目录的类别结构就像一棵倒置的树，根在顶部。树的每个部分都可以展开和折叠。任何禁用或隐藏的类别都显示为灰色。第一级（根以下）的类别通常作为选项出现在主菜单中。根据配置中设置的最大菜单深度，您可以根据需要创建任意数量的附加子类别。可以将类别拖放到树中的其他位置。类别 ID 号显示在页面顶部类别名称后的括号中。</p>
<p><span>对于有多个</span>商店<span>的网站，您可以为每个商店创建不同的根类别，定义用于</span>顶部导航<span>的类别集。</span></p>
<p><img alt="类别树" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-selected.png?lang=en" /></p>
<h2 id="best-practices"><span>最佳实践</span></h2>
<p><span>在规划和创建类别时使用这些最佳实践。</span></p>
<h3 id="category-structure"><span>类别结构</span></h3>
<p><span><span>主菜单中类别的结构会影响客户体验和性能。</span><span>作为最佳实践，您应该确定一个包罗万象的顶级类别，并避免使用相同名称的其他类别。</span><span>例如，而不是在不同部门下组织多个&ldquo;儿童&rdquo;类别，例如</span></span><code>Clothing/Kids</code><span>,&nbsp;</span><code>Shoes/Kids</code><span>,&nbsp;</span><code>Accessories/Kids</code><span><span>.&nbsp;</span><span>做顶层的父分类</span></span><code>Kids</code><span><span>，然后根据需要在下面创建子分类会更高效。</span><span>与类别结构保持一致，并对目录中的所有产品类型使用相同的方法。</span></span></p>
<h3 id="business-rules-and-automation"><span>业务规则和自动化</span></h3>
<p><span><span>在使用业务逻辑在目录页面上显示类似项目或设置个性化促销、自动化流程或搜索条件时，请考虑类别结构和可用属性值。</span><span>例如，如果您将&ldquo;polo&rdquo;指定为父类别，则结果可能包括混合的性别和不适合年龄的产品。</span><span>但是，如果您匹配 Polo 衫的特定子类别，则结果范围更窄并且可能会吸引特定客户。</span><span>当与针对特定客户的其他属性值结合使用时，结果可能会更加具体。</span><span>考虑引用特定类别路径时必须过滤和检索的产品数量。</span><span>结果的差异可能是巨大的。</span><span>考虑以下类别路径返回的不同结果：</span></span></p>
<ul>
<li><code>[Category: All Products/Shirts/Father's Day/Polos/Sale]</code></li>
<li><code>[Category Path: Men/Shirts/Polos]</code></li>
<li><code>[Child Category: Polos]</code></li>
</ul>
<p><span>明确定义分类关系很重要，例如：</span></p>
<ul>
<li><span>父类</span></li>
<li><span>子类别</span></li>
<li><span>类别路径</span></li>
</ul>
<p><span>还要定义任何关联的关键字和属性，例如：</span></p>
<ul>
<li><span>可用性</span></li>
<li><span>销售价格</span></li>
<li><span>品牌</span></li>
<li><span>尺寸</span></li>
<li><span>颜色</span></li>
</ul>
<h2 id="step-1%3A-create-a-category"><span>第 1 步：创建类别</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>设置</span><span>商店视图</span><span>以确定新类别的可用位置。</span></p>
</li>
<li>
<p><span>在类别树中，选择新类别的父类别。</span></p>
<p><span>父级比新类别高一级。</span></p>
<p><span>如果您从头开始，没有任何数据，则列表中可能只有两个类别：</span><em>默认类别</em><span>（根类别）和</span><em>示例类别</em></p>
</li>
<li>
<p><span>单击</span><span>添加子类别</span><span>。</span></p>
</li>
</ol>
<h2 id="step-2%3A-complete-the-basic-information"><span>第二步：填写基本信息</span></h2>
<ol>
<li>
<p><span>如果您希望该类别在商店中立即可用，请将</span><span>启用类别</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span></span>要在顶部导航<span><span>中包含该类别</span><span>，请将</span></span><span>Include in Menu</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>输入</span><span>类别名称</span><span>。</span></p>
<p><img alt="基本品类信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-categories-currently-active.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
</li>
</ol>
<h2 id="step-3%3A-complete-the-category-content"><span>第三步：完成分类内容</span></h2>
<ol>
<li>
<p><span><span>展开</span><span><span>内容</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="分类内容" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-content.png?lang=en" /></p>
</li>
<li>
<p><span>要在页面顶部显示</span><span>类别图像</span><span>，您可以上传自己的图像或使用</span>媒体存储<span>中存在的图像。</span></p>
<ul>
<li>
<p><span>要上传您自己的图片，请单击</span><span>上传</span><span>并选择您想要代表该类别的图片。</span></p>
</li>
<li>
<p><span>要使用媒体存储中的图像，请单击</span><span>从图库</span><span>中选择并选择您要代表该类别的图像。</span></p>
</li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>在媒体库中，您还可以使用</span>Adob​​e Stock 集成<span>通过单击</span><span>搜索 Adob​​e Stock</span><span>来查找合适的图像。</span></p>
</div>
</div>
</li>
<li>
<p><span>对于</span><span>Description</span><span>，输入您希望在类别登陆页面上显示的文本或其他内容。</span></p>
</li>
<li>
<p><span><span>要在类别登陆页面上包含内容块，请选择</span><span>要显示的</span></span><span>CMS 块。</span><span></span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
</li>
</ol>
<h2 id="step-4%3A-complete-the-display-settings"><span>第四步：完成显示设置</span></h2>
<ol>
<li>
<p><span>展开</span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>显示</span><span>设置</span><span>部分。</span></p>
<p><img alt="显示设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-display-settings.png?lang=en" /></p>
</li>
<li>
<p><span>将</span><span>显示模式</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Products Only</code></li>
<li><code>Static Block Only</code></li>
<li><code>Static Block and Products</code></li>
</ul>
</li>
<li>
<p><span>如果希望分类页面包含</span><em><code>Filter by Attribute</code></em><span>分层导航部分，请将</span><span>Anchor</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>可用产品列表排序</span><span>依据选项，选择一个或多个可用值以供客户对列表进行排序。</span></p>
<p><span><span>默认情况下，包括所有可用值。</span><span>取消选中</span></span><span>全部使用</span><span><span>复选框以更改选择。</span><span>例如，这些值可能包括：</span></span></p>
<ul>
<li><code>Position</code></li>
<li><code>Product Name</code></li>
<li><code>Price</code></li>
</ul>
</li>
<li>
<p><span>要设置类别的默认排序顺序，请选择</span><span>默认产品列表排序</span><span>依据值。</span></p>
</li>
<li>
<p><span>要更改默认的分层导航</span>价格步长<span>设置，请执行以下操作：</span></p>
<ul>
<li>
<p><span>取消选中</span><span>使用配置设置</span><span>复选框。</span></p>
</li>
<li>
<p><span>输入要用作分层导航的增量价格步骤的值。</span></p>
</li>
</ul>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
</li>
</ol>
<h2 id="step-5%3A-complete-the-search-engine-optimization-settings"><span>第五步：完成搜索引擎优化设置</span></h2>
<ol>
<li>
<p><span><span>展开</span><span><span>搜索引擎优化设置</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="搜索引擎优化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-categories-search-engine-optimization.png?lang=en" /></p>
<p><span>有关这些选项的更多信息，请参阅</span>搜索引擎优化<span>。</span></p>
</li>
<li>
<p><span><span>完成类别</span><span>的以下</span></span>元数据：<span></span></p>
<ul>
<li><span>元标题</span></li>
<li><span>元关键字</span></li>
<li><span>元描述</span></li>
</ul>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
</li>
</ol>
<h2 id="step-6%3A-choose-the-products-in-category"><span>第6步：选择类别中的产品</span></h2>
<ol>
<li>
<p><span><span>展开</span><span><span>类别</span></span><span>部分中</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>的产品。</span><span><span></span></span><span></span></p>
<p><img alt="产品类别" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-categories-products-in-category.png?lang=en" /></p>
</li>
<li>
<p><span>根据需要使用</span>过滤器<span>来查找产品。</span></p>
<p><span>要显示尚未包含在该类别中的所有记录，请将第一列中的记录选择器设置为</span><code>No</code><span>，然后单击</span><span>Search</span><span>。</span></p>
</li>
<li>
<p><span>在第一列中，选中要包含在类别中的每个产品的复选框。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>并继续。</span></p>
</li>
</ol>
<h2 id="step-7%3A-set-the-category-permissions"><span>第七步：设置分类权限</span></h2>
<ol>
<li>
<p><span><span>展开</span><span><span>类别权限</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
</li>
<li>
<p><span><span>对于多站点安装，请选择</span><span>类别权限适用的</span></span><span>网站。</span><span></span></p>
</li>
<li>
<p><span><span>选择</span><span>类别权限适用的</span></span><span>客户组。</span><span></span></p>
<p><img alt="Adobe Commerce 的 B2B" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/b2b.svg?lang=en" /><span>（仅限</span>Adob​​e Commerce 的 B2B<span>）如果需要，您可以选择</span><span>共享目录</span><span>。</span></p>
</li>
<li>
<p><span>根据需要设置以下权限：</span></p>
<ul>
<li><span>浏览类别</span></li>
<li><span>显示产品价格</span></li>
<li><span>添加到购物车</span></li>
</ul>
</li>
<li>
<p><span>要添加另一个权限规则，请单击</span><span>&ldquo;新建权限&rdquo;</span><span>并重复该过程。</span></p>
<p><img alt="分类权限" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-create-permissions.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-8%3A-complete-the-design-settings"><span>第八步：完成设计设置</span></h2>
<ol>
<li>
<p><span><span>展开</span><span><span>设计</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
</li>
<li>
<p><span>根据需要设置设计设置：</span></p>
<ul>
<li>
<p><span>（仅限</span>Adob​​e Commerce 的 B2B<span>）要将父类别设计设置应用于此类别，请将</span><span>&ldquo;使用父类别设置&rdquo;设置</span><span>为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span><span>要更改类别页面的设计，请选择</span><span>您要应用的</span></span><span>主题。</span><span></span></p>
</li>
<li>
<p><span><span>要更改类别页面的列布局，请选择</span><span>您要应用的</span></span><span>布局。</span><span></span></p>
</li>
<li>
<p><span>要输入自定义代码，请在</span><span>布局更新 XML</span><span>框中输入有效的 XML 代码。</span></p>
</li>
<li>
<p><span>要对产品页面使用相同的设计，请将</span><span>Apply Design to Products</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
<p><img alt="设计设定" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-design.png?lang=en" /></p>
</li>
<li>
<p><img alt="Magento 开源" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/open-source.svg?lang=en" /><span>（仅限 Magento Open Source）要安排特定时间段的设计更新，请执行以下操作：</span></p>
<ul>
<li>
<p><span>展开</span><em>计划设计更新</em><span>部分。</span></p>
</li>
<li>
<p><span>使用日历 (&nbsp;</span><img alt="日历图标" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-calendar.png?lang=en" /><span><span>) 选择计划更新</span><span><span>的</span></span></span><span>起止</span><span><span>日期</span><span>。</span></span><span><span></span></span><span></span></p>
</li>
</ul>
<p><img alt="计划的设计更新" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-scheduled-design-update.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Fri, 23 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2隐藏类别]]></title>
      <link>https://www.360magento.com/blog/Hidden-categories/</link>
      <description><![CDATA[<p><span><span>有很多方法可以使用隐藏类别。</span><span>您可能希望为自己的内部目的创建额外的类别级别，但只向您的客户显示更高级别的类别。</span><span>或者，您可能希望链接到导航菜单中未包含的类别。</span></span></p>
<h2 id="create-hidden-categories"><span>创建隐藏类别</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在类别树中，选择要隐藏的类别并执行以下操作：</span></p>
<ul>
<li><span><span>设置</span><span>为</span></span><span>活动</span><span></span><code>Yes</code><span>。</span></li>
<li><span>将</span><span>&ldquo;包含在菜单</span><span>中&rdquo;设置为</span><code>No</code><span>。</span></li>
</ul>
</li>
<li>
<p><span>在</span><span>Display Settings</span><span>部分，将</span><span>Anchor</span><span>设置为</span><code>No</code><span>。</span></p>
<p><img alt="隐藏分类" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/hidden-categories.png?lang=en" /></p>
<p><span>隐藏类别处于活动状态，但不会出现在顶部菜单或分层导航中。</span></p>
</li>
<li>
<p><span>为每个隐藏的子类别完成以下设置以创建子类别：</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>虽然该类别是隐藏的，但您可以在其下创建子类别并激活它们。</span></p>
</div>
</div>
<ul>
<li><span>将</span><span>启用类别</span><span>设置为</span><code>Yes</code><span>。</span></li>
<li><span>在</span><span>Display Settings</span><span>部分，将</span><span>Anchor</span><span>设置为</span><code>Yes</code><span>。</span></li>
</ul>
<p><span>作为活动类别，您现在可以从商店的其他地方链接到它们，但它们不会出现在菜单中。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Thu, 22 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2根类别和层次结构]]></title>
      <link>https://www.360magento.com/blog/Root-category-and-hierarchy/</link>
      <description><![CDATA[<p>主菜单中的产品由分配给商店的根目录决定。根类别基本上是类别树中主菜单的容器。您可以创建包含一组全新产品的根目录或从现有根目录复制产品。根类别可以分配给当前商店或同一网站中的任何其他商店。</p>
<h2 id="step-1%3A-create-a-root-category"><span>第 1 步：创建根类别</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左侧，单击</span><span>添加根类别</span><span>。</span></p>
<p><img alt="新的根类别" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-root-ee.png?lang=en" /></p>
</li>
<li>
<p><span>分配</span><span>类别名称</span><span>。</span></p>
<p><span>您选择的名称最初分配给所有商店视图。</span></p>
</li>
<li>
<p><span>如果要将产品从当前目录添加到目录，请执行以下操作：</span></p>
<ul>
<li>
<p><span><span>展开</span><em><span>类别</span></em><span>部分中</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>的产品。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>使用</span>搜索过滤器<span>查找您想要的产品，然后选中您要复制到新目录中的每个产品的复选框。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h2 id="step-2%3A-build-out-the-main-menu"><span>第 2 步：构建主菜单</span></h2>
<ol>
<li>
<p><span>在左侧，选择您在上一步中创建的新根类别。</span></p>
</li>
<li>
<p><span>单击</span><span>添加子类别</span><span>并按照说明为主菜单创建</span>类别结构<span>。</span></p>
</li>
</ol>
<h2 id="step-3%3A-assign-the-root-category-to-the-store"><span>第 3 步：将根类别分配给商店</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>商店</span><span>&gt;</span><em>设置</em><span>&gt;</span><span>所有商店</span><span>。</span></p>
</li>
<li>
<p><span>在网格的</span><em>Stores</em><span>列中，单击要分配新目录的商店。</span></p>
</li>
<li>
<p><span>将</span><span>根类别</span><span>设置为您创建的新根类别。</span></p>
</li>
<li>
<p><span><span>确保商店已</span><span>分配</span></span><span>默认商店视图。</span><span></span></p>
<p><span>该商店必须至少有一个</span>商店视图<span>。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存商店</span><span>。</span></p>
</li>
<li>
<p><span>要验证商店是否有新目录，请执行以下操作：</span></p>
<ul>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
<p><span>任何复制到新目录的产品都会出现在网格中。</span></p>
</li>
<li>
<p><span>访问店面以验证新目录和主菜单是否正常工作。</span></p>
</li>
</ul>
</li>
</ol>]]></description>
      <pubDate>Wed, 21 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2管理搜索词]]></title>
      <link>https://www.360magento.com/blog/Manage-search-terms/</link>
      <description><![CDATA[<p>搜索词的登陆页面可以是内容页面、类别页面、产品详细信息页面，甚至是不同站点上的页面。</p>
<p>使用搜索词来捕获常见的拼写错误并将它们重定向到适当的页面。例如，如果您销售锻铁庭院家具，您就会知道很多人将术语拼错为<em>rod iron</em>，甚至是<em>rot iron</em>。您可以输入每个拼写错误的单词作为搜索词，并使它们成为<em>锻铁的</em>同义词。即使单词拼写错误，搜索也会定向到锻铁页面。</p>
<p><span><span>您还可以通过检查客户用于在您的商店中查找产品的搜索词来了解他们正在寻找什么。</span><span>如果有足够多的人寻找不在您的目录中的产品，则可能表明存在销售机会。</span><span>同时，您可以将他们重定向到目录中的其他产品，而不是让他们空手而归。</span></span></p>
<h2 id="add-search-terms"><span>添加搜索词</span></h2>
<p><span>当您学习人们用来在您的商店中搜索的新词时，您可以将它们添加到您的搜索词列表中，以将人们引导至您的目录中最匹配的产品。</span></p>
<p><img alt="搜索词网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-terms.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>柱子</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>搜索查询</span></td>
<td><span>用于执行搜索的查询。</span></td>
</tr>
<tr>
<td><span>店铺</span></td>
<td><span>应用搜索查询的商店。</span></td>
</tr>
<tr>
<td><span>结果</span></td>
<td><span>查询找到的结果数。</span></td>
</tr>
<tr>
<td><span>用途</span></td>
<td><span>使用次数。</span></td>
</tr>
<tr>
<td><span>重定向网址</span></td>
<td><span>执行搜索后用户被重定向到的目标页面的 URL。</span></td>
</tr>
<tr>
<td><span>建议条款</span></td>
<td><span>确定查询结果是否显示建议的术语。</span></td>
</tr>
<tr>
<td><span>动作</span></td>
<td><span>在编辑模式下打开产品。</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="add-a-search-term"><span>添加搜索词</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>营销</span><span>&gt;</span><em>搜索引擎优化和搜索</em><span>&gt;</span><span>搜索词</span><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>添加新搜索词</span><span>并执行以下操作：</span></p>
<p><img alt="搜索词一般信息" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-terms-information.png?lang=en" /></p>
<ul>
<li>
<p><span><span>在</span><span>&ldquo;</span><span><span>搜索查询&rdquo;框中的&ldquo;</span></span></span><em>一般信息</em><span>&rdquo;下，输入要添加为新搜索词的词或短语。</span><span><span></span></span><span></span></p>
</li>
<li>
<p><span>如果您的商店提供多种语言，请选择适用的</span><span>商店</span><span>视图。</span></p>
</li>
<li>
<p><span>要将搜索结果重定向到您商店中的另一个页面或另一个网站，请在</span><span>重定向 URL</span><span>字段中输入目标页面的完整 URL。</span></p>
</li>
<li>
<p><span>如果您希望在搜索未返回任何结果时将该词用作建议，请将</span><span>&ldquo;在建议词中显示&rdquo;</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，点击</span><span>保存搜索</span><span>。</span></p>
</li>
</ol>
<h2 id="edit-a-search-term"><span>编辑搜索词</span></h2>
<ol>
<li>
<p><span>在</span><em>搜索</em><span>词网格中，单击任何记录的行以在编辑模式下打开搜索词。</span></p>
</li>
<li>
<p><span>进行必要的更改。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存搜索</span><span>。</span></p>
</li>
</ol>
<h2 id="delete-a-search-term"><span>删除搜索词</span></h2>
<p><span>有两种删除搜索词的方法&mdash;&mdash;从网格中和在编辑页面上。</span></p>
<p><span>方法 1：</span><span>在</span><em>搜索词</em><span>网格中</span></p>
<ol>
<li>
<p><span>在列表中，选中要删除的术语的复选框。</span></p>
</li>
<li>
<p><span>在列表的左上角，将</span><span>Actions</span><span>设置为</span><code>Delete</code><span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>提交</span><span>。</span></p>
</li>
</ol>
<p><span>方法 2：</span><span>在&ldquo;</span><em>编辑搜索词</em><span>&rdquo;页面上</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>营销</span><span>&gt;</span><em>搜索引擎优化和搜索</em><span>&gt;</span><span>搜索词</span><span>。</span></p>
</li>
<li>
<p><span>找到要删除的搜索词并在编辑模式下打开它。</span></p>
</li>
<li>
<p><span>单击</span><span>删除搜索</span><span>。</span></p>
</li>
<li>
<p><span>要确认该操作，请单击</span><span>确定</span><span>。</span></p>
</li>
</ol>
<h2 id="popular-search-terms"><span>热门搜索词</span></h2>
<p><span>商店页脚中的</span><em>搜索</em><span><span>词链接显示您商店的访问者使用的搜索词，按受欢迎程度排名。</span><span>搜索词以</span></span><em>标签云</em><span>格式出现，其中文本的大小表示该词的流行程度。</span></p>
<p><span><span>默认情况下，Popular Search Terms 作为搜索引擎优化工具启用，但与目录搜索过程没有直接联系。</span><span>由于&ldquo;搜索词&rdquo;页面由搜索引擎编入索引，因此页面上的任何词都有助于提高您的搜索引擎排名和商店的知名度。</span><span>热门搜索词页面的 URL 是：</span></span><code>mystore.com/search/term/popular/</code></p>
<p><img alt="示例店面 - 热门搜索词" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/store-front-search-terms-yoga-pants.png?lang=en" /></p>
<p><span>配置热门搜索词：</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>搜索引擎优化</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="目录配置-搜索引擎优化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-search-engine-optimization_c1.png?lang=en" /></p>
<p><span><span>有关这些选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span><a href="https://docs.magento.com/user-guide/configuration/catalog/catalog.html#search-engine-optimization">搜索引擎优化</a><span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>根据需要设置</span><span>热门搜索</span><span>词。</span></p>
<p><span>如果需要，清除</span><span>使用系统值</span><span>复选框以更改此设置。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/search/search-configuration.html?lang=en">您可以进一步配置流行目录搜索</a><span><span>的缓存</span><span>。</span></span></p>
</div>
</div>
<h2 id="search-synonyms"><span>搜索同义词</span></h2>
<p><span>提高</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/search/search-configuration.html?lang=en">目录搜索</a><span><span>效率的一种方法是包括人们可能用来描述同一项目的不同术语。</span><span>您不想因为有人在寻找</span></span><em>沙发</em><span>而失去销售机会，而您的产品被列为</span><em>沙发</em><span>。</span><em>您可以通过输入sofa</em><span>、</span><em>davenport</em><span>和</span><em>loveseat</em><span>作为</span><em>couch</em><span><span>的同义词来捕获更广泛的搜索词</span><span>，并将它们引导至同一登陆页面。</span></span></p>
<p><span>Adobe Commerce 支持两种不同的同义词管理解决方案：</span></p>
<ul>
<li><span>Live Search&nbsp;</span><a href="https://experienceleague.adobe.com/docs/commerce-merchant-services/live-search/live-search-admin/synonyms/synonyms.html?lang=en">Synonyms</a><span>功能适用于安装了 Live Search 的 Adob​​e Commerce 安装。</span></li>
<li><span>标准搜索同义词功能（如本页所述）对于所有 Adob​​e Commerce 安装都是开箱即用的。</span></li>
</ul>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span><em><span>标准搜索同义词仅</span></em></span><span>具有开箱即用的支持</span></span><code>name</code><span>和</span><code>sku</code><span><span>产品属性</span><span>。</span></span><span><em><span></span></em></span><span></span></p>
</div>
</div>
<p><img alt="示例店面 - 具有同义词的搜索结果" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-results-synonyms.png?lang=en" /></p>
<h3 id="create-a-synonym-group"><span>创建同义词组</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>营销</span><span>&gt;</span><em>搜索引擎优化和搜索</em><span>&gt;</span><span>搜索同义词</span><span>。</span></p>
<p><span>出现</span><em>搜索同义词</em><span><span>网格。</span><span>如果这是您第一次使用搜索同义词，则网格是空的。</span></span></p>
<p><img alt="搜索同义词网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-synonyms-grid-empty.png?lang=en" /></p>
</li>
<li>
<p><span>单击</span><span>新建同义词组</span><span>并执行以下操作：</span></p>
<p><img alt="新搜索同义词组" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-synonym-group-new.png?lang=en" /></p>
<ul>
<li>
<p><span>将</span><span>范围</span><span>设置为应用同义词的商店视图。</span></p>
</li>
<li>
<p><span><span>输入组中的每个同义词，以逗号分隔。</span><span>选择人们可能用作搜索条件的词。</span><span>例如：</span></span></p>
<ul>
<li><code>sweatshirt, sweat shirt, hoodie, fleece</code></li>
<li><code>cell phone, mobile phone, smart phone</code></li>
<li><code>couch, sofa, davenport</code></li>
<li><code>wrought iron, rot iron, rod iron</code></li>
</ul>
</li>
<li>
<p><span>要将这些同义词与具有相同范围的其他同义词合并到一个组中，请选中</span><span>合并现有同义词</span><span>复选框。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存同义词组</span><span>。</span></p>
<p><img alt="搜索同义词组网格 - 已保存的组" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-synonym-group-grid.png?lang=en" /></p>
</li>
</ol>
<h3 id="edit-a-synonym-group"><span>编辑同义词组</span></h3>
<ol>
<li>
<p><span>在</span><em>搜索同义词</em><span>网格中，单击任何记录的行以在编辑模式下打开同义词组。</span></p>
</li>
<li>
<p><span>进行必要的更改。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存同义词组</span><span>。</span></p>
</li>
</ol>
<h3 id="delete-a-synonym-group"><span>删除同义词组</span></h3>
<p><span>有两种删除同义词组的方法&mdash;&mdash;从网格中和在编辑页面上。</span></p>
<p><span>方法 1：</span><span>在搜索同义词网格中</span></p>
<ol>
<li>
<p><span>在&ldquo;</span><em>搜索同义词</em><span>&rdquo;网格中，选中要删除的组的复选框。</span></p>
</li>
<li>
<p><span>在列表的左上角，将</span><span>Actions</span><span>设置为</span><code>Delete</code><span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>提交</span><span>。</span></p>
</li>
</ol>
<p><span>方法 2：</span><span>在&ldquo;编辑同义词组&rdquo;页面上</span></p>
<ol>
<li>
<p><span>在搜索同义词网格中，单击任何记录的行以在编辑模式下打开同义词组。</span></p>
</li>
<li>
<p><span>单击</span><span>删除同义词组</span><span>。</span></p>
</li>
<li>
<p><span>出现提示时，确认删除组。</span></p>
</li>
</ol>
<h2 id="search-terms-report"><span>搜索字词报告</span></h2>
<p><span><span>搜索词报告显示每个词的结果数，以及该词被使用的次数（点击）。</span><span>报告数据可以按术语、商店、结果和命中率进行过滤，并导出以供进一步分析。</span></span></p>
<h3 id="view-the-report"><span>查看报告</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>报告</span><span>&gt;</span><em>营销</em><span>&gt;</span><span>搜索词</span><span>。</span></p>
</li>
<li>
<p><span>根据需要使用控件过滤报告。</span></p>
<p><img alt="搜索字词报告" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-terms-report.png?lang=en" /></p>
</li>
</ol>]]></description>
      <pubDate>Tue, 20 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2配置目录搜索]]></title>
      <link>https://www.360magento.com/blog/Configure-catalog-search/</link>
      <description><![CDATA[<p>目录搜索配置有两种变体。第一种方法描述了安装Live Search时的可用设置。第二种方法描述了原生 Adob​​e Commerce 与Elasticsearch的配置设置。</p>
<p>有关每个目录搜索配置选项的信息，请参阅<em>配置参考</em>中的<em>Elasticsearch 建议和推荐设置</em>。</p>
<h2 id="method-1%3A-adobe-commerce-with-live-search"><span>方法 1：带有实时搜索的 Adob​​e Commerce</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>目录搜索</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="用于实时搜索的目录搜索" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-search-live-search.png?lang=en" /></p>
<p><span>有关这些选项的更多信息，请参阅</span>实时搜索的目录搜索<span>。</span></p>
</li>
<li>
<p><span>要限制搜索查询文本的长度和字数，请为</span><span>Minimum Query Length</span><span>和</span><span>Maximum Query Length</span><span>设置一个值。</span></p>
</li>
<li>
<p><span>要限制要缓存的热门搜索结果数量以加快响应速度，请为</span><span>Number of top search results to cache</span><span>设置数量。</span></p>
<p><span>默认值为</span><code>100</code><span><span>。</span><span>输入值</span></span><code>0</code><span>第二次输入时缓存所有搜索词和结果。</span></p>
</li>
<li>
<p><span></span>要更改可用于店面弹出窗口<span><span>中返回结果的最大行数，请</span><span>输入不同的</span></span><span>自动完成限制</span><span>值。</span></p>
<p><span><span>限制行数可提高搜索性能并减小返回列表的大小。</span><span>默认值为</span></span><code>8</code><span>行。</span></p>
</li>
</ol>
<h2 id="method-2%3A-commerce-with-elasticsearch"><span>方法 2：使用 Elasticsearch 进行商务</span></h2>
<h3 id="step-1%3A-configure-general-search-options"><span>第 1 步：配置常规搜索选项</span></h3>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>在 ElasticSearch 中，没有对后缀搜索的开箱即用支持。</span><span>例如，如果关键字仅包含 SKU 的末尾部分，则按 SKU 搜索可能不会返回预期的结果。</span></span></p>
</div>
</div>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>目录搜索</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="弹性搜索设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/elasticsearch-1.png?lang=en" /></p>
<p><span><span>有关这些选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span>Adob​​e Commerce with Elasticsearch<span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>要限制搜索查询文本的长度和字数，请为</span><span>Minimum Query Length</span><span>和</span><span>Maximum Query Length</span><span>设置一个值。</span></p>
<div class="extension important">
<div><span><span>重要的</span></span></div>
<div>
<p><span><span>为这个最小和最大范围设置的值必须与 Elasticsearch 搜索引擎配置中设置的相应范围兼容。</span><span>例如，如果您在 Commerce 中设置这些值</span></span><code>2</code><span>，</span><code>300</code><span>请更新搜索引擎中的相应值。</span></p>
</div>
</div>
</li>
<li>
<p><span>要限制要缓存的热门搜索结果数量以加快响应速度，请为</span><span>Number of top search results to cache</span><span>设置数量。</span></p>
<p><span>默认值为</span><code>100</code><span><span>。</span><span>输入值</span></span><code>0</code><span>第二次输入时缓存所有搜索词和结果。</span></p>
</li>
<li>
<p><span>如果要启用或禁用产品 EAV 索引器，请设置</span><span>启用 EAV 索引器</span><span>。</span></p>
<p><span>此功能可提高索引编制速度并限制索引器被第三方扩展使用。</span></p>
</li>
<li>
<p><span>要限制为搜索自动完成显示的搜索结果的最大数量，请为</span><span>Autocomplete Limit</span><span>设置一个数量。</span></p>
<p><span><span>限制此数量可提高搜索性能并减小显示的列表大小。</span><span>默认值为</span></span><code>8</code><span>。</span></p>
</li>
</ol>
<h3 id="step-2%3A-configure-the-elasticsearch-connection"><span>第 2 步：配置 Elasticsearch 连接</span></h3>
<div class="extension important">
<div><span><span>重要的</span></span></div>
<div>
<p><span>安装或升级 Commerce 时配置了</span><span>Search Engine</span><span>、</span><span>Elasticsearch Server Hostname</span><span>、</span><span>Elasticsearch Server Port</span><span>、</span><span>Elasticsearch Index Prefix</span><span>、</span><span>Enable Elasticsearch HTTP Auth</span><span>和</span><span>Elasticsearch Server Timeout</span><span><span>字段。</span><span>只有在升级或修改 Elasticsearch 时才应更改这些值。</span></span></p>
</div>
</div>
<p><img alt="弹性搜索连接设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/elasticsearch-2.png?lang=en" /></p>
<ol>
<li>
<p><span>对于</span><span>搜索引擎</span><span>，接受默认值</span><code>Elasticsearch 7</code><span>。</span></p>
<p><span>所有 Commerce 安装都需要 Elasticsearch 7.6.x。</span></p>
</li>
<li>
<p><span>对于</span><span>Elasticsearch Server Hostname</span><span>，接受安装 Commerce 时配置的默认值。</span></p>
<p><span>在此示例中，默认值为</span><code>elasticsearch.internal</code><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>Elasticsearch Server Port</span><span>，接受安装 Commerce 时配置的默认值。</span></p>
<p><span>在此示例中，默认值为</span><code>9200</code><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>Elasticsearch Index Prefix</span><span>，输入前缀以标识 Elasticsearch 索引。</span></p>
<p><span>默认值为</span><code>magento2</code><span>。</span></p>
</li>
<li>
<p><span>要使用 HTTP 身份验证提示输入用户名和密码以访问 Elasticsearch Server，请将</span><span>启用 Elasticsearch HTTP</span><span>身份验证设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>Elasticsearch Server Timeout</span><span>，输入系统超时前的秒数。</span></p>
<p><span>默认值为</span><code>15</code><span>。</span></p>
</li>
<li>
<p><span>要验证配置，请单击</span><span>测试连接</span><span>。</span></p>
</li>
</ol>
<h3 id="step-3%3A-configure-suggestions-and-recommendations"><span>第三步：配置建议和建议</span></h3>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>搜索建议和建议会影响服务器性能。</span></p>
</div>
</div>
<ol>
<li>
<p><span>要提供建议，请将</span><span>启用搜索建议</span><span>设置为</span><code>Yes</code><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>对于</span><span>Search Recommendation Count</span><span>，输入要提供的推荐数量。</span></p>
</li>
<li>
<p><span>要显示为每个建议找到的结果数，请将每个建议的</span><span>显示结果计数</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>将</span><span>启用搜索建议</span><span>设置为</span><code>Yes</code><span>并执行以下操作：</span></p>
<p><img alt="Elasticsearch 建议和推荐设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/elasticsearch-3.png?lang=en" /></p>
<ul>
<li>
<p><span>对于</span><span>Search Suggestions Count</span><span>，输入要提供的搜索建议的数量。</span></p>
</li>
<li>
<p><span>要显示为每个建议找到的结果数，请将</span><span>显示每个建议</span><span>的结果设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
</li>
</ol>
<h3 id="step-4%3A-configure-minimum-terms-to-match"><span>第 4 步：配置要匹配的最少条款</span></h3>
<p><span>要控制搜索结果应匹配以便返回的查询中的最少字词数，请为</span><span>Minimum Terms to Match</span><span><span>指定一个值。</span><span>这确保了购物者的最佳结果相关性。</span><span>有关可接受值的列表，请参阅Elasticsearch 文档中的</span></span><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html">minimum_should_match 参数</a><span>。</span></p>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>]]></description>
      <pubDate>Mon, 19 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2搜索结果]]></title>
      <link>https://www.360magento.com/blog/Search-results/</link>
      <description><![CDATA[<p><em>搜索结果</em>列表包括与在快速搜索框或高级搜索表单中输入的搜索条件相匹配的所有产品。目录中的每个产品列表都具有基本相同的控件。唯一的区别是，一个是搜索查询的结果，另一个是导航的结果。</p>
<p>结果可以格式化为网格或列表，并按选择的属性排序。如果页面上容纳的产品多，则会出现分页控件。使用这些控件从一页移动到下一页。每页的记录数由目录前端配置决定。有关详细信息，请参阅产品列表。</p>
<p><span>使用</span><span>弹性搜索</span><span>：</span></p>
<ul>
<li><span><span>没有对后缀搜索的开箱即用支持。</span><span>例如，如果关键字仅包含 SKU 的末尾部分，则按 SKU 搜索可能不会返回预期的结果。</span></span></li>
<li><span></span><code>name</code><span>仅对产品</span><code>sku</code><span><span>属性</span><span>的前缀搜索（部分关键字搜索）提供开箱即用的支持。</span><span>所有其他产品属性均按整个关键字搜索，完全匹配。</span></span></li>
<li><span></span><code>name</code><span><span>和产品属性的</span><span>搜索结果</span></span><code>sku</code><span><span>基于相关性，而不是完全匹配。</span><span>首先列出</span><span>最相关的匹配项，例如完全匹配的</span></span><em>Product Name</em><span>或</span><em>SKU 。</em><span><span>要搜索完全匹配，客户可以在搜索查询中使用双引号。</span><span>例如，</span></span><code>WSH12-32-Red</code><span><span>搜索查询可能返回多个产品，按相关性排序。</span><span>但是</span></span><code>"WSH12-32-Red"</code><span>搜索查询只返回一个与</span><span><em>完全</em></span><span>匹配的产品</span><code>sku</code><span>。</span></li>
</ul>
<p><img alt="带有分页控件的搜索结果" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-results-shorts.png?lang=en" /></p>
<h2 id="keyword-mapping-to-extend-search-results"><span>用于扩展搜索结果的关键字映射</span></h2>
<p><span><span>此技术使用属性在两个产品之间创建基于关键字的关联，以便对任一产品的搜索返回两个产品的结果。</span><span>您可以使用关键字映射在搜索结果中推广产品，否则该产品不会出现。</span></span></p>
<p><img alt="使用关键字映射的搜索结果" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-results-extended.png?lang=en" /></p>
<p><span><span>以下示例使用基于 SKU 的关键字映射。</span><span>在搜索框中输入任一 SKU 时，两种产品都会出现在结果中。</span><span>映射了以下可配置产品的 SKU，而不是产品变体的 SKU：</span></span></p>
<ul>
<li><span>蒙大拿风衣 (MJ03)</span></li>
<li><span>Chaz 袋鼠连帽衫 (MH01)</span></li>
</ul>
<h3 id="step-1%3A-create-an-attribute"><span>第 1 步：创建属性</span></h3>
<ol>
<li>
<p><span>在</span><em>产品</em><span>列表中，以编辑模式打开</span><code>Montana Wind Jacket</code><span>(MJ03)。</span></p>
</li>
<li>
<p><span>在右上角，单击&ldquo;</span><span>添加属性</span><span>&rdquo; 。</span></p>
</li>
<li>
<p><span>在&ldquo;</span><em>选择属性</em><span>&rdquo;页面上，单击</span><span>&ldquo;创建新属性&rdquo;</span><span>。</span></p>
</li>
<li>
<p><span>完成属性属性如下：</span></p>
<p><span>属性属性</span></p>
<ul>
<li><span>属性标签 -</span><code>Search Keywords</code></li>
<li><span>店主的目录输入类型 -</span><code>Text Field</code></li>
</ul>
<p><span>高级属性</span></p>
<ul>
<li><span>添加到列选项 -&nbsp;</span><code>Yes</code><span>（默认）</span></li>
<li><span>在过滤器选项中使用 -&nbsp;</span><code>Yes</code><span>（默认）</span></li>
</ul>
<p><span>店面属性</span></p>
<ul>
<li><span>在搜索中使用 -</span><code>Yes</code></li>
<li><span>在店面的目录页面上可见 -</span><code>No</code></li>
<li><span>用于产品清单 -</span><code>No</code></li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存属性</span><span>。</span></p>
<p><span>该属性已添加到产品的属性集中。</span></p>
</li>
</ol>
<h3 id="step-2%3A-map-the-first-product"><span>第 2 步：映射第一个产品</span></h3>
<ol>
<li>
<p><span>在产品设置页面上，向下滚动并展开</span><em>属性</em><span>部分。</span></p>
</li>
<li>
<p><span>在</span><span>搜索关键字</span><span></span><code>MH01</code><span><span>字段中，输入要映射到该产品</span><span>的 SKU 。</span></span></p>
<p><span><span>您可以在搜索关键字字段中输入多个 SKU，以空格分隔。</span><span>在这个例子中，只输入了一个。</span></span></p>
<p><img alt="带有搜索关键字的属性部分" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-keywords-attribute.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span>转到</span><span>System</span><span>&nbsp;&gt;&nbsp;</span><em>Tools</em><span>&nbsp;&gt;&nbsp;</span><span>Cache Management</span><span>并刷新</span><span>Page Cache</span><span>。</span></p>
</li>
</ol>
<h3 id="step-3%3A-map-the-second-product"><span>第 3 步：映射第二个产品</span></h3>
<ol>
<li><span>在</span><em>产品</em><span>列表中，以编辑模式打开</span><code>Chaz Kangaroo Hoodie</code><span>(MH01)。</span></li>
<li><span>向下滚动并展开</span><span>属性</span><span>部分。</span></li>
<li><span>在</span><span>搜索关键字</span><span>字段中，输入其他产品的 SKU&nbsp;</span><code>MJ03</code><span>。</span></li>
<li><span>单击</span><span>保存</span><span>。</span></li>
<li><span>转到</span><span>System</span><span>&nbsp;&gt;&nbsp;</span><em>Tools</em><span>&nbsp;&gt;&nbsp;</span><span>Cache Management</span><span>并刷新</span><span>Page Cache</span><span>。</span></li>
</ol>
<h3 id="step-4%3A-test-it-in-the-storefront"><span>第 4 步：在店面进行测试</span></h3>
<ol>
<li><span>转到店面并</span><code>MJ03</code><span>在&ldquo;</span><em>快速搜索</em><span>&rdquo;框中输入。</span></li>
<li><span>确认这两种产品都在搜索结果列表中返回。</span></li>
</ol>
<h2 id="weighted-search"><span>加权搜索</span></h2>
<p><span><span>可以为目录搜索启用的产品属性分配权重，以便在搜索结果中赋予它们更高的价值。</span><span>权重较大的属性在权重较低的属性之前返回。</span><span>例如，如果系统中有两个属性，搜索权重为 3 的</span></span><em>颜色</em><span>和搜索权重为 1 的</span><em>描述</em><span>。搜索单词</span><em>red</em><span>返回颜色属性值为 的产品列表</span><code>red</code><span>，但不返回描述中包含单词</span><em>red</em><span><span>的产品。</span><span>在此示例中，</span></span><code>color</code><span>属性具有比</span><code>description</code><span>属性更大的定义权重。</span></p>
<p><img alt="搜索权重" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/search-weight.png?lang=en" /></p>
<p><span>要设置属性的搜索权重属性：</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Attributes</em><span>&nbsp;&gt;&nbsp;</span><span>Product</span><span>。</span></p>
</li>
<li>
<p><span>在列表中找到属性并以编辑模式打开。</span></p>
</li>
<li>
<p><span>在左侧面板中，选择</span><span>Storefront Properties</span><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>要在搜索查询中包含该属性，请将</span><span>Use in Search</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>要建立属性的搜索值，请将</span><span>搜索</span><span>权重设置为 1 到 10 之间的一个数字，其中</span><code>10</code><span><span>的优先级最高。</span><span>如果未输入任何值，则所有属性默认为搜索权重</span></span><code>1</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存属性</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sun, 18 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2分层导航]]></title>
      <link>https://www.360magento.com/blog/Layered-navigation/</link>
      <description><![CDATA[<p><span><span>分层导航使您可以根据类别、价格范围或任何其他可用属性轻松查找产品。</span><span>分层导航通常出现在搜索结果和分类页面的左栏，有时也出现在首页。</span><span>标准导航包括类别和价格范围的</span></span><em>购物</em><span><span>清单。</span><span>您可以配置分层导航的显示，包括产品数量和价格范围。</span></span></p>
<p><img alt="按类别和价格分层导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/navigation-layered-basic.png?lang=en" /></p>
<h2 id="filterable-attributes"><span>可过滤的属性</span></h2>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>本主题中描述的可过滤属性要求与</span>Live Search<span><span>不同。</span><span>要了解更多信息，请参阅</span></span>构面<span>。</span></p>
</div>
</div>
<p><span><span>分层导航可用于按类别或按属性搜索产品。</span><span>例如，当购物者从顶部导航中选择男装/短裤类别时，初始结果包括该类别中的所有产品。</span><span>可以通过选择特定样式、气候、颜色、材料、图案或价格或值的组合来进一步过滤列表。</span><span>可过滤的属性出现在列出每个属性值的扩展部分中。</span><span>作为一个选项，可以将具有匹配结果的产品列表配置为包含匹配或不匹配的产品。</span></span></p>
<p><span><span>属性特性与产品输入类型相结合，决定了哪些属性可用于分层导航。</span><span>分层导航仅适用于</span></span><em>锚</em><span><span>类别，但也可以添加到搜索结果页面。</span><span>每个属性的商店所有者属性的</span></span><span>目录输入类型</span><span>必须设置为</span><code>Yes/No</code><span>、</span><code>Dropdown</code><span>、</span><code>Multiple Select</code><span>或</span><code>Price</code><span><span>。</span><span>要使属性可过滤，</span><span>必须将每个属性的&ldquo;</span></span><span>在分层导航中使用</span><span></span><code>Filterable (with results)</code><span>&rdquo;属性设置为或</span><code>Filterable (no results)</code><span>。</span></p>
<p><img alt="分层导航中的可过滤属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-layered-navigation-filtered.png?lang=en" /></p>
<p><img alt="没有结果的可过滤样本值" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-product-attribute-filter-no-results.png?lang=en" /></p>
<p><span><span>以下说明显示如何设置具有可过滤属性的基本分层导航。</span><span>有关带有价格步骤的高级分层导航，请参阅</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/navigation/navigation-layered.html?lang=en#configure-price-navigation">价格导航</a><span>。</span></p>
<h2 id="step-1%3A-set-up-the-attribute-properties"><span>第 1 步：设置属性属性</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Attributes</em><span>&nbsp;&gt;&nbsp;</span><span>Product</span><span>。</span></p>
</li>
<li>
<p><span>浏览或使用过滤搜索在列表中查找属性并在编辑模式下打开它。</span></p>
<p><img alt="每列输入搜索词以使用过滤搜索" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/attribute-search.png?lang=en" /></p>
</li>
<li>
<p><span>在左侧面板中，选择</span><span>Storefront Properties</span><span>并将</span><span>在 Layered Navigation</span><span>中使用设置为以下选项之一：</span></p>
<ul>
<li>
<p><code>Filterable (with results)</code><span><span>- 分层导航仅包括那些可以找到匹配产品的过滤器。</span><span>已应用于列表中显示的所有产品的任何属性值仍应显示为可用过滤器。</span><span>可用过滤器列表中忽略了具有零 (0) 个产品匹配项的属性值。</span><span>过滤后的产品列表仅包含与过滤器匹配的产品。</span><span>仅当所选过滤器更改显示的内容时，产品列表才会更新。</span></span></p>
</li>
<li>
<p><code>Filterable (no results)</code><span><span>- 分层导航包括针对所有可用属性值及其产品计数的过滤器，包括具有零 (0) 个产品匹配项的过滤器。</span><span>如果属性值是样本，则该值显示为过滤器，但被划掉了。</span><span>此选项不支持价格分层过滤，并且不影响价格过滤器。</span></span></p>
</li>
</ul>
</li>
<li>
<p><span>将</span><span>在搜索结果中使用分层导航</span><span>设置为</span><code>Yes</code><span>。</span></p>
<p><img alt="店面属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/attribute-storefront-properties.png?lang=en" /></p>
</li>
<li>
<p><span>对要包含在分层导航中的每个属性重复这些步骤。</span></p>
</li>
</ol>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>默认情况下，</span><a href="https://docs.magento.com/user-guide/stores/attributes-product.html">位置字段</a><span><span>是灰色的。</span><span>您必须先保存该属性，然后才能修改此设置。</span></span></p>
</div>
</div>
<h2 id="step-2%3A-make-the-category-an-anchor"><span>第 2 步：将类别设为锚点</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在类别树中，选择要使用分层导航的类别。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>Display Settings</span></span><span>部分并将</span><span><span>Anchor</span></span><span>设置</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>为</span><span>。</span></span><span><span></span></span><span></span><span><span></span></span><span></span><code>Yes</code><span></span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>。</span></p>
<p><img alt="类别显示设置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-layered-navigation-anchor.png?lang=en" /></p>
</li>
</ol>
<h2 id="step-3%3A-test-the-results"><span>第 3 步：测试结果</span></h2>
<p><span><span>要测试设置，请访问您的商店并从主菜单导航到该类别。</span><span>可筛选属性的选择出现在类别页面的分层导航中。</span></span></p>
<p><span>搜索、过滤和查看显示的产品。</span></p>
<h2 id="remove-filterable-attribute-values-from-layered-navigation"><span>从分层导航中删除可过滤的属性值</span></h2>
<p><span>分层导航包括针对所有可用属性值及其产品计数的筛选器，包括具有零 (0) 个产品匹配项的筛选器（如下图所示）。</span></p>
<p><img alt="零过滤器显示" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/filterable-attributes-on-plp.png?lang=en" /></p>
<p><span>这使得客户很难选择喜欢的产品，也不需要在前端显示属性值为0的产品。</span></p>
<p><span>您可以使用以下步骤从分层导航中删除具有 0 个产品的可过滤属性值：</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Attributes</em><span>&nbsp;&gt;&nbsp;</span><span>Product</span><span>。</span></p>
</li>
<li>
<p><span>浏览或使用过滤搜索在列表中查找属性并在编辑模式下打开它。</span></p>
</li>
<li>
<p><span>在</span><em>属性信息</em><span>下，单击</span><span>店面属性</span><span>。</span></p>
<p><img alt="属性信息部分" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-properties-tab.png?lang=en" /></p>
</li>
<li>
<p><span>对于</span><span>分层导航</span><span>，选择</span><code>Filterable (with results)</code><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>保存属性</span><span>。</span></p>
</li>
</ol>
<h2 id="price-navigation"><span>价格导航</span></h2>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>本主题中描述的价格导航配置与</span><a href="https://experienceleague.adobe.com/docs/commerce-merchant-services/live-search/overview.html?lang=en">Live Search</a><span>不同。</span></p>
</div>
</div>
<p><span><span>价格导航可用于在分层导航中按价格范围分发产品。</span><span>您还可以按间隔拆分每个范围。</span><span>有几种计算价格导航的方法：</span></span></p>
<ul>
<li><span>自动（均衡价格范围）</span></li>
<li><span>自动（均衡产品计数）</span></li>
<li><span>手动的</span></li>
</ul>
<p><span><span>对于前两种方法，导航步骤是自动计算的。</span><span>手动方法允许您指定价格区间的划分限制。</span><span>以下示例显示了 10 和 100 的价格导航步长之间的差异。</span></span></p>
<p><span><span>迭代拆分提供了价格范围内产品的最佳分布。</span><span>通过迭代拆分，在选择 $0.00-$99 范围后，客户可以向下钻取多个价格子范围。</span><span>当产品数量达到Interval Division Limit 设置的阈值时，价格范围拆分停止。</span></span></p>
<h2 id="example%3A-price-navigation-steps"><span>示例：价格导航步骤</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>价格步进 10</span></th><th><span>价格步进 100</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>20.00 美元 - 29.99 美元 (1)</span></td>
<td><span>0.00 美元 - 99.99 美元 (4)</span></td>
</tr>
<tr>
<td><span>30.00 美元 - 39.99 美元 (2)</span></td>
<td><span>100 美元 - 199.99 美元 (5)</span></td>
</tr>
<tr>
<td><span>70.00 美元 - 79.99 美元 (1)</span></td>
<td><span>400.00 美元 - 499.99 美元 (2)</span></td>
</tr>
<tr>
<td><span>100.00 美元 - 109.99 美元 (1)</span></td>
<td><span>$700.00 及以上 (1)</span></td>
</tr>
<tr>
<td><span>120.00 美元 - 129.99 美元 (2)</span></td>
<td></td>
</tr>
<tr>
<td><span>150.00 美元 - 159.99 美元 (1)</span></td>
<td></td>
</tr>
<tr>
<td><span>180.00 美元 - 189.99 美元 (1)</span></td>
<td></td>
</tr>
<tr>
<td><span>420.00 美元 - 429.99 美元 (1)</span></td>
<td></td>
</tr>
<tr>
<td><span>440.00 美元 - 449.99 美元 (1)</span></td>
<td></td>
</tr>
<tr>
<td><span>$710.00 及以上 (1)</span></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<h2 id="configure-price-navigation"><span>配置价格导航</span></h2>
<div class="extension important">
<div><span><span>重要的</span></span></div>
<div>
<p><span></span><em>要根据分层导航中的价格过滤器</em><span><span>正确显示产品及其价格</span><span>，请确保</span></span><a href="https://docs.magento.com/user-guide/configuration/sales/tax.html">销售税配置</a><span>中的价格显示设置具有相同的值（</span><code>Excluding Tax</code>&nbsp;<span>或</span>&nbsp;<code>Including Tax</code><span><span>）。</span><span>对于</span></span><em>Calculation Settings</em><span>，检查</span><span>Catalog Prices</span><span><span>值。</span><span>对于</span></span><em>Price Display Settings</em><span>，选中</span><span>Display Product Prices in Catalog</span><span><span>值。</span><span>如果它们具有不同的值，分层导航中的价格过滤器可能无法按价格正确过滤和排序产品。</span></span></p>
</div>
</div>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><em><span>分层导航</span></em></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><em><span></span></em><span></span></p>
<p><span>默认情况下，</span><span>显示产品计数</span><span>设置为</span><code>Yes</code><span><span>。</span><span>如有必要，取消选中</span></span><span>使用系统值</span><span>复选框以更改此设置。</span></p>
<p><img alt="分层导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/layered-navigation.png?lang=en" /></p>
<p><span>有关这些配置选项的信息，请参阅</span><a href="https://docs.magento.com/user-guide/configuration/catalog/catalog.html#layered-navigation">分层导航</a></p>
</li>
<li>
<p><span>为以下部分中的其中一种方法设置</span><span>价格导航步骤计算</span><span>。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h3 id="method-1%3A-automatic-(equalize-price-ranges)"><span>方法 1：自动（均衡价格范围）</span></h3>
<p><span>将</span><span>价格导航步骤计算</span><span>设置为</span><code>Automatic (Equalize Price Ranges)</code><span><span>（默认）。</span><span>此设置使用标准算法进行价格导航。</span></span></p>
<h3 id="method-2%3A-automatic-(equalize-product-counts)"><span>方法 2：自动（均衡产品计数）</span></h3>
<div class="extension tip">
<div><span><span>提示</span></span></div>
<div>
<p><span>如有必要，请先取消选中</span><span>使用系统值</span><span>复选框以更改这些设置。</span></p>
</div>
</div>
<ol>
<li>
<p><span>将</span><span>价格导航步骤计算</span><span>设置为</span><code>Automatic (equalize product counts)</code><span>。</span></p>
</li>
<li>
<p><span>多个商品同价时显示单个价格，将</span><span>显示价格间隔设置为 一个价格</span><span>为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>对于</span><span>Interval Division Limit</span><span>，输入价格范围内产品数量的阈值。</span></p>
<p><span><span>范围不能进一步分割超出此限制。</span><span>默认值为</span></span><code>9</code><span>。</span></p>
<p><img alt="自动（均衡产品数量）" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/equalize-product-counts.png?lang=en" /></p>
</li>
</ol>
<h3 id="method-3%3A-manual"><span>方法三：手动</span></h3>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>如有必要，请先取消选中</span><span>使用系统值</span><span>复选框以更改这些设置。</span></p>
</div>
</div>
<ol>
<li>
<p><span>将</span><span>价格导航步骤计算</span><span>设置为</span><code>Manual</code><span>。</span></p>
</li>
<li>
<p><span>输入一个值以确定</span><span>默认价格导航步骤</span><span>。</span></p>
</li>
<li>
<p><span>输入允许的</span><span>最大价格区间</span><span>数，最多</span><code>100</code><span>.</span></p>
<p><img alt="手动的" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/layered-navigation-manual.png?lang=en" /></p>
</li>
</ol>
<h2 id="configure-layered-navigation"><span>配置分层导航</span></h2>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>此页面中描述的标准配置与</span><a href="https://experienceleague.adobe.com/docs/commerce-merchant-services/live-search/overview.html?lang=en">Live Search</a><span>不同。</span></p>
</div>
</div>
<p><span>分层导航配置确定产品计数是否出现在每个属性后的括号中，以及价格导航中使用的步长计算的大小。</span></p>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><em>目录</em><span>部分并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>展开</span><em>分层导航</em><span>部分。</span></p>
<p><img alt="分层导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/layered-navigation.png?lang=en" /></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>如有必要，请先取消选中</span><span>使用系统值</span><span>复选框以更改这些设置。</span></p>
</div>
</div>
</li>
<li>
<p><span>要显示为每个属性找到的产品数量，请将</span><span>Display Product Count</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>将</span><span>价格导航步骤计算</span><span>设置为</span><code>Automatic (equalize price ranges)</code><span>。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Sat, 17 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2顶部导航]]></title>
      <link>https://www.360magento.com/blog/Top-navigation/</link>
      <description><![CDATA[<p><span><span>商店的主菜单就像商店中不同部门的目录。</span><span>每个选项代表不同类别的产品。</span><span>顶部导航的位置和呈现可能因主题而异，但其工作方式基本相同。</span></span></p>
<p><img alt="顶部导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-top-navigation.png?lang=en" /></p>
<p><span><span>目录的类别结构会影响您的站点被搜索引擎编入索引的程度。</span><span>类别嵌套越深，被彻底索引的可能性就越小。</span><span>通常，使用一到三个可见级别是最有效的。</span><span>根</span></span>类别<span><span>算作第一级，尽管它没有出现在菜单中。</span><span>顶部导航中可用的最大级别数由配置决定。</span><span>此外，您的商店主题支持的菜单级别数量可能有限制。</span><span>例如，示例 Luma 主题最多支持五个级别，包括根。</span></span></p>
<h2 id="counting-menu-levels"><span>计算菜单级别</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>物品</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>1级</span></td>
<td><span><span>第一层是根类别，在样本数据中被命名为&ldquo;默认类别&rdquo;。</span><span>根目录是菜单的容器，其名称不会作为选项出现在菜单中。</span></span></td>
</tr>
<tr>
<td><span>2级</span></td>
<td><span><span>在桌面显示器上，顶部导航是出现在页面顶部的主菜单。</span><span>在移动设备上，主菜单通常显示为选项的弹出菜单。</span><span>Luma 商店的二级选项是</span></span><em>What's New</em><span>、</span><em>Women</em><span>、</span><em>Men</em><span>、</span><em>Gear</em><span>、</span><em>Training</em><span>和</span><em>Sale</em><span>。</span></td>
</tr>
<tr>
<td><span>3级</span></td>
<td><span><span>第三级显示在每个主菜单选项下方。</span><span>例如，在</span></span><em>Women</em><span>下，第三级选项是</span><em>Tops</em><span>和</span><em>Bottoms</em><span>。</span></td>
</tr>
<tr>
<td><span>4级</span></td>
<td><span><span>第四级选项是从第三级选项飞出的子类别。</span><span>例如，在</span></span><em>Tops</em><span>下，第四级菜单选项是</span><em>Jackets</em><span>、</span><em>Hoodies &amp; Sweatshirts</em><span>、</span><em>Tees</em><span>和</span><em>Bras &amp; Tanks</em><span>。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="set-the-top-navigation"><span>设置顶部导航</span></h2>
<p><span>要使类别显示在商店的顶部导航中，请完成以下步骤：</span></p>
<h3 id="step-1%3A-create-a-category"><span>第 1 步：创建类别</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>设置</span><span>商店视图</span><span>以确定新类别的可用位置。</span></p>
</li>
<li>
<p><span>在类别树中，选择新类别的父类别。</span></p>
<p><span>如果您从头开始，没有任何数据，则列表中可能只有两个类别：</span><em>默认类别</em><span>（根）和</span><em>示例类别</em><span>。</span></p>
</li>
<li>
<p><span>单击</span><span>添加子类别</span><span>。</span></p>
</li>
<li>
<p><span>使用以下设置完成基本信息：</span></p>
<ul>
<li><span>启用类别</span><span>设置为</span><code>Yes</code></li>
<li><span>包含在菜单中</span><span>设置为</span><code>Yes</code></li>
</ul>
</li>
<li>
<p><span>在 Display Setting 中将</span><span>Anchor</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>完成任何其他必需的</span>类别设置<span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<p><span><span>对于多商店安装，可以将不同的主菜单指定</span><span>为每个</span><span>商店的</span></span>根类别<span>。</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/stores-sales/site-store/stores.html?lang=en#add-stores"><span></span></a><span></span></p>
<h3 id="step-2%3A-set-the-depth-of-the-top-navigation"><span>第二步：设置顶部导航的深度</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
<p><span>有关这些配置选项的信息，请参阅</span>类别顶部导航</p>
</li>
<li>
<p><span>展开</span><span>类别顶部导航</span><span>部分。</span></p>
<p><img alt="类别顶部导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-category-top-navigation.png?lang=en" /></p>
<p><span>因为顶部导航的深度具有全局</span>配置范围<span><span>，所以该设置适用于 Commerce 安装中的所有网站、商店和商店视图。</span><span>只有在左上角的</span><em><span>Store View</span></em><span>设置为 时，</span></span><em>Category Top Navigation</em><span><span>配置部分才可用</span><span>。</span></span><em><span></span></em><span></span><code>Default Config</code><span></span></p>
<p><img alt="默认配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/configuration-store-view-default-config.png?lang=en" /></p>
</li>
<li>
<p><span>要限制出现在顶部导航中的子类别数量，请输入</span><span>Maximal Depth</span><span>的数字。</span></p>
<p><span>默认值为</span><code>0</code><span>，它不限制子类别级别的数量。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Fri, 16 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2面包屑路径]]></title>
      <link>https://www.360magento.com/blog/Breadcrumb-trails/</link>
      <description><![CDATA[<p><em>面包屑路径</em><span><span>是一</span><span>组链接，显示您相对于商店中其他页面的位置。</span><span>您可以单击面包屑路径中的任何链接以返回到上一页。</span></span></p>
<p><span><span>面包屑路径可以配置为显示在内容页面和目录页面上。</span><span>面包屑路径的格式和位置因主题而异，但通常位于标题下方。</span><span>默认情况下，面包屑路径显示在 CMS 页面上。</span></span></p>
<p><img alt="店面中显示的面包屑路径" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-breadcrumb-trail.png?lang=en" /></p>
<h2 id="general-types-of-bread-crumbs"><span>一般类型的面包屑</span></h2>
<p><span><span>面包屑可分为三种主要类型，它们的用途不同。</span><span>下面分别介绍各类型面包屑的实现本质和主要原理。</span></span></p>
<h3 id="hierarchy-based-breadcrumbs"><span>基于层次结构的面包屑</span></h3>
<p><span><span>这种类型的面包屑基于站点上设置的类别层次结构。</span><span>显示的链告诉用户它们在结构中的位置。</span><span>在这种情况下，每个文本链接都用于比前一个页面高一级的页面。</span></span></p>
<p><span>例子：</span><code>Men &gt; Tops &gt; Hoodies &amp; Sweatshirts</code></p>
<p><span>这种类型的优点是用户可以很容易地看到他们处于哪个类别级别，并且可以轻松访问目录页面之间的导航。</span></p>
<h3 id="history-based-breadcrumbs"><span>基于历史的面包屑</span></h3>
<p><span><span>基于历史（或路径）的导航类似于浏览器中的后退按钮。</span><span>这使用户可以快速返回到他们访问过的先前页面而无需更改。</span></span></p>
<p><span>这种类型的优点是，当客户在类别页面上选择多个过滤器后想要返回到上一页时，它最有帮助。</span></p>
<p><span>例子：</span><code>Home &gt; What's New &gt; Gear &gt; Bags</code></p>
<h3 id="attribute-based-breadcrumbs"><span>基于属性的面包屑</span></h3>
<p><span><span>这种类型的面包屑显示在类别页面上选择的属性。</span><span>与其他类型的主要区别在于，基于属性的面包屑表示客户在导航层中为某些产品（例如价格、质量和颜色）选择的过滤器和选项。</span></span></p>
<p><span>例子：</span><code>Home &gt; Suits &gt; All Suits &gt; Refined by &gt; Slim Fit</code></p>
<h2 id="add%2Fremove-the-breadcrumbs-from-cms-pages"><span>从 CMS 页面添加/删除面包屑</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在</span><em>General</em><span>下的左侧面板中，选择</span><span>Web</span><span>并执行以下操作：</span></p>
<ul>
<li>
<p><span>展开</span><em>默认页面</em><span>部分。</span></p>
</li>
<li>
<p><span>取消选中</span><span>使用系统值</span><span>复选框。</span></p>
</li>
<li>
<p><span>将</span><span>CMS 页面的&ldquo;显示面包屑&rdquo;</span><span>设置为</span><code>No</code><span>或</span><code>Yes</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
<p><img alt="显示 CMS 页面的面包屑" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/web-default-pages_c1.png?lang=en" /></p>
</li>
</ol>]]></description>
      <pubDate>Thu, 15 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品列表]]></title>
      <link>https://www.360magento.com/blog/Product-listings/</link>
      <description><![CDATA[<p><span><span>产品列表可以设置为默认显示为列表或网格。</span><span>您还可以确定每页显示多少产品，以及使用哪个属性对列表进行排序。</span><span>产品列表包括一组控件，可用于对产品进行排序、更改列表格式、按属性排序以及从一页前进到下一页。</span></span></p>
<p><img alt="显示为网格的产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-catalog-page.png?lang=en" /></p>
<h2 id="configure-product-listings"><span>配置产品列表</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>店面</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分</span><span>。</span></span><span><span></span></span><span></span></p>
<p><img alt="店面配置选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-storefront.png?lang=en" /></p>
<p><span><span>有关这些选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span>Storefront<span>。</span><em><span></span></em><span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span></span><em>要根据按价格排序的</em><span><span>产品正确显示产品及其价格</span><span>，请确保</span></span>销售税配置<span>中的价格显示设置具有相同的值（</span><code>Excluding Tax</code>&nbsp;<span>或</span>&nbsp;<code>Including Tax</code><span><span>）。</span><span>对于</span></span><em>Calculation Settings</em><span>，检查</span><span>Catalog Prices</span><span><span>值。</span><span>对于</span></span><em>Price Display Settings</em><span>，选中</span><span>Display Product Prices in Catalog</span><span><span>值。</span><span>如果它们具有不同的值，分层导航中的价格过滤器可能无法按价格正确过滤和排序产品。</span></span></p>
</div>
</div>
</li>
<li>
<p><span>将默认</span><span>列表模式</span><span>设置为以下之一：</span></p>
<ul>
<li><code>Grid Only</code></li>
<li><code>List Only</code></li>
<li><code>Grid (default) / List</code></li>
<li><code>List (default / Grid</code></li>
</ul>
</li>
<li>
<p><span>对于</span><span>网格允许值上</span><span>的每页产品数，输入您希望在以网格格式显示时每页显示的产品数。</span></p>
<p><span>要输入一系列值，请用逗号分隔每个数字。</span></p>
</li>
<li>
<p><span>对于每页网格产品</span><span>默认值</span><span>，输入每页网格中显示的默认产品数。</span></p>
</li>
<li>
<p><span>对于</span><span>List Allowed Values per Page 上的 Products per Page</span><span>，输入您希望在以列表格式显示时每页显示的产品数量。</span></p>
<p><span>要输入一系列值，请用逗号分隔每个数字。</span></p>
</li>
<li>
<p><span>对于</span><span>列表默认值上的每页产品数</span><span>，输入列表中每页显示的默认产品数。</span></p>
</li>
<li>
<p><span>将</span><span>产品列表排序方式</span><span>设置为最初用于对列表进行排序的默认属性。</span></p>
</li>
<li>
<p><span>要为客户提供列出所有产品的选项，请将</span><span>&ldquo;允许页面上的所有</span><span>产品&rdquo;设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>如果您想在客户浏览目录列表时保留所有分页设置，请将</span><span>记住类别分页</span><span>设置为</span><code>Yes</code><span>。</span></p>
<p><span><span>启用此设置可确保在购物者从一个类别浏览到另一个类别时保留列表或网格中显示的产品数量。</span><span>默认情况下，此字段设置为，</span></span><code>No</code><span>因为它使用更多的缓存存储空间，并且会影响页面被搜索引擎索引的方式。</span></p>
</li>
<li>
<p><span>如果使用</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/catalog/catalog-flat.html?lang=en">平面目录</a><span>（</span><span>不推荐</span><span>），请执行以下操作：</span></p>
<ul>
<li>
<p><span>要显示产品的平面类别列表，请将</span><span>使用平面目录类别</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>要显示平面产品列表，请将</span><span>Use Flat Catalog Product</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>如果要允许动态引用类别和产品 URL 中的媒体资产，请将&ldquo;</span><span>允许产品和类别中的动态媒体 URL</span><span>&nbsp;&rdquo;设置为</span><code>Yes</code><span>。</span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>
<h2 id="page-controls"><span>页面控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>查看方式</span></td>
<td><span>以网格或列表格式显示产品。</span></td>
</tr>
<tr>
<td><span>排序方式</span></td>
<td><span>更改列表的排序顺序。</span></td>
</tr>
<tr>
<td><span>每页显示</span></td>
<td><span>确定每页显示多少产品。</span></td>
</tr>
<tr>
<td><span>分页链接</span></td>
<td><span>导航链接到其他页面。</span></td>
</tr>
</tbody>
</table>
</div>
<h2 id="pagination-controls"><span>分页控件</span></h2>
<p><span><span>分页设置显示在列表的顶部和底部，并控制产品列表的分页链接的格式。</span><span>您可以设置控件中显示的链接数，并配置 Next 和 Previous 链接。</span><span>要显示分页链接，列表中的产品数量必须多于产品列表配置中每页允许的数量。</span></span></p>
<p><img alt="分页控件" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-pagination-controls.png?lang=en" /></p>
<h3 id="storefront-pagination-controls"><span>店面分页控件</span></h3>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><img alt="显示网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/controls-pagination-list-grid.png?lang=en" /></td>
<td><span>查看方式 - 以网格或列表格式显示列表。</span></td>
</tr>
<tr>
<td><img alt="排序方式" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/control-pagination-sort-by.png?lang=en" /></td>
<td><span>排序依据 - 更改列表的排序顺序。</span><em>Used for Sorting in Product Listing</em><span>店面属性确定哪些</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/product-attributes/product-attributes.html?lang=en">产品属性</a><span><span>可用于对列表进行排序</span><span>。</span></span></td>
</tr>
<tr>
<td><img alt="每页显示" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/control-pagination-show-per-page.png?lang=en" /></td>
<td><span>每页显示 - 确定每页显示多少产品。</span></td>
</tr>
<tr>
<td><img alt="分页链接" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/control-pagination.png?lang=en" /></td>
<td><span>分页链接 - 指向其他页面的导航链接。</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="configure-the-pagination-controls"><span>配置分页控件</span></h3>
<ol>
<li>
<p><span>在</span><em>Admin</em><span>侧边栏上，转到</span><span>Content</span><span>&nbsp;&gt;&nbsp;</span><em>Design</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>找到您要配置的商店视图，然后在</span><span>操作</span><span>列中单击</span><span>编辑</span><span>。</span></p>
</li>
<li>
<p><span>在</span><span>其他设置</span><span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>下</span><span>，展开</span></span><span>分页</span><span>部分。</span></p>
<p><img alt="分页" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/config-design-pagination.png?lang=en" /></p>
</li>
<li>
<p><span>对于</span><span>Pagination Frame</span><span>，输入您希望在分页控件中显示的链接数。</span></p>
</li>
<li>
<p><span>对于</span><span>Pagination Frame Skip</span><span>，输入在分页控件中显示下一组链接之前要向前跳过的链接数。</span></p>
<p><span><span>比如分页框有5个链接，你想跳转到后面5个链接，你想往前跳多少个链接？</span><span>如果将其设置为四，则上一组中的最后一个链接将成为下一组中的第一个链接。</span></span></p>
</li>
<li>
<p><span>对于</span><span>Previous 的锚文本</span><span>，输入您希望为 Previous 链接显示的文本。</span></p>
<p><span>留空以使用默认箭头。</span></p>
</li>
<li>
<p><span>对于</span><span>Next 的锚文本</span><span><span>，输入您希望为 Next 链接显示的文本。</span><span>留空以使用默认箭头。</span></span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存配置</span><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Wed, 14 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2平面目录]]></title>
      <link>https://www.360magento.com/blog/sections-nav-sections/</link>
      <description><![CDATA[<p><span><span>Commerce 通常根据实体-属性-值 (EAV) 模型将目录数据存储在多个表中。</span><span>由于产品属性存储在许多表中，因此 SQL 查询有时又长又复杂。</span></span></p>
<p><span><span>相比之下，平面目录会动态创建表格，其中每一行都包含有关产品或类别的所有必要数据。</span><span>平面目录会自动更新&mdash;&mdash;每分钟更新一次，或者根据您的 cron 作业更新一次。</span><span>平面目录索引还可以加快目录和购物车价格规则的处理。</span><span>包含多达 500,000 个 SKU 的目录可以作为平面目录快速编入索引。</span></span></p>
<h2 id="step-1%3A-enable-the-flat-catalog"><span>第 1 步：启用平面目录</span></h2>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>展开</span><em>店面</em><span>部分并执行以下操作：</span></p>
<ul>
<li>
<p><span>将</span><span>使用平面目录类别</span><span>设置为</span><code>Yes</code><span><span>。</span><span>（如有必要，取消选择</span></span><span>使用系统值</span><span>复选框。）</span></p>
</li>
<li>
<p><span>将</span><span>使用平面目录产品</span><span>设置为</span><code>Yes</code><span>。</span></p>
</li>
</ul>
<p><img alt="平面目录配置" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/use-flat-catalog.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>当提示更新缓存时，点击系统消息中的</span><span>缓存管理</span><span>，按照提示刷新缓存。</span></p>
</li>
</ol>
<h2 id="step-2%3A-verify-the-results"><span>第 2 步：验证结果</span></h2>
<p><span>您可以使用两种方法来验证结果。</span></p>
<h3 id="method-1%3A-verify-the-results-for-a-single-product"><span>方法 1：验证单个产品的结果</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧栏上，转到</span><span>目录</span><span>&gt;</span><span>产品</span><span>。</span></p>
</li>
<li>
<p><span>在编辑模式下打开产品。</span></p>
</li>
<li>
<p><span>对于</span><span>Name</span><span>，将文本添加</span><code>_TEST</code><span>到产品名称的末尾。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span>在新的浏览器选项卡上，导航到您商店的主页并执行以下操作：</span></p>
<ul>
<li>
<p><span>搜索您编辑的产品。</span></p>
</li>
<li>
<p><span>使用导航浏览到其指定类别下的产品。</span></p>
<p><span><span>如有必要，刷新页面以查看结果。</span><span>更改会在一分钟内或根据您的</span></span><a href="https://docs.magento.com/user-guide/system/cron.html">Cron</a><span>计划出现。</span></p>
</li>
</ul>
<p><img alt="带有平面目录的店面" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-flat-catalog-enabled.png?lang=en" /></p>
</li>
</ol>
<h3 id="method-2%3A-verify-the-results-for-a-category"><span>方法 2：验证类别的结果</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在左上角，确认</span><span>Store View</span><span>设置为</span><code>All Store Views</code><span>。</span></p>
<p><span>如果出现提示，请单击&ldquo;</span><span>确定</span><span>&rdquo;进行确认。</span></p>
</li>
<li>
<p><span>在类别树中，选择现有类别，单击</span><span>添加子类别</span><span>，然后执行以下操作：</span></p>
<ul>
<li>
<p><span>对于</span><span>类别名称</span><span>，输入</span><code>Test Category</code><span>。</span></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
<p><img alt="测试子类" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-flat-test-category.png?lang=en" /></p>
</li>
<li>
<p><span><span>展开</span><span><span>类别</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分的产品</span><span>并单击</span><span><span>重置过滤器</span></span><span>以显示所有产品。</span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
</li>
<li>
<p><span>选中多个产品的复选框以将它们添加到新类别。</span></p>
</li>
<li>
<p><span>单击</span><span>保存</span><span>。</span></p>
</li>
</ul>
<p><img alt="测试类产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-flat-test-category-products.png?lang=en" /></p>
</li>
<li>
<p><span>在新的浏览器选项卡上，导航到商店的主页并使用商店导航浏览到您创建的类别。</span></p>
<p><span><span>如有必要，刷新页面以查看结果。</span><span>更改会在一分钟内或根据您的 cron 计划出现。</span></span></p>
</li>
</ol>
<h2 id="step-3%3A-remove-the-test-data"><span>第三步：移除测试数据</span></h2>
<p><span>执行以下操作以删除测试数据并恢复原始产品名称和目录配置。</span></p>
<h3 id="remove-the-test-category"><span>删除测试类别</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在类别树中，选择您创建的测试子类别。</span></p>
</li>
<li>
<p><span>在右上角，单击&ldquo;</span><span>删除</span><span>&rdquo; 。</span></p>
</li>
<li>
<p><span>当提示确认时，单击</span><span>确定</span><span>。</span></p>
<p><span>这不会删除分配给该类别的产品。</span></p>
</li>
</ol>
<h3 id="restore-the-original-product-name"><span>恢复原产品名称</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Catalog</span><span>&nbsp;&gt;&nbsp;</span><span>Categories</span><span>。</span></p>
</li>
<li>
<p><span>在编辑模式下打开测试产品。</span></p>
</li>
<li>
<p><span>删除</span><code>_TEST</code><span>您添加到</span><span>Product Name</span><span>的文本。</span></p>
</li>
<li>
<p><span>在右上角，点击</span><span>保存</span><span>。</span></p>
</li>
</ol>
<h3 id="restore-the-original-catalog-configuration"><span>恢复原始目录配置</span></h3>
<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span>展开</span><em>店面</em><span>部分并执行以下操作：</span></p>
<ul>
<li>
<p><span>将</span><span>使用平面目录类别</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
<li>
<p><span>将</span><span>使用平面目录产品</span><span>设置为</span><code>No</code><span>。</span></p>
</li>
</ul>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>出现提示时，刷新缓存。</span></p>
</li>
</ol>]]></description>
      <pubDate>Tue, 13 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品属性概览]]></title>
      <link>https://www.360magento.com/blog/Product-attributes-overview/</link>
      <description><![CDATA[<p><span><span>属性是产品目录的构建块，描述了产品的特定特征。</span><span>产品属性可以组织成</span></span>属性集<span>，然后用作创建产品的模板。</span></p>
<p><span><span>属性确定用于产品选项的输入控件的类型，并为产品页面提供附加信息。</span><span>它们还用作分层导航、产品比较报告和促销的搜索参数和标准。</span><span>您可以根据需要创建尽可能多的属性和属性集来描述目录中的产品。</span><span>除了您可以创建的属性之外，价格等系统属性内置于核心 Commerce 平台中，无法更改。</span></span></p>
<p><img alt="在编辑产品时创建新属性" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/attribute-new-product.png?lang=en" /></p>
<p><span>规划和创建产品属性时，请使用以下部分中描述的最佳实践。</span></p>
<h2 id="attribute-names"><span>属性名称</span></h2>
<p><span><span>建立一致的属性命名约定，包括字母大小写和标点符号。</span><span>例如，</span></span><code>Color:Green</code><span>和</span><code>Color:green</code><span><span>可能被不同的系统视为两个不同的属性值。</span><span>数据中的此类噪音会影响业务规则、搜索结果以及将产品与规则相匹配的应用程序的数据过滤器。</span></span></p>
<h2 id="attribute-use"><span>属性使用</span></h2>
<p><span><span>考虑在分配属性和值时如何使用属性。</span><span>识别用作展示标签的属性，例如产品名称、图像、价格和描述，以及哪些属性用于数据输入。</span><span>考虑属性如何在整个站点的不同页面上表示，以及它们如何出现在类别页面、产品详细信息页面、类别网格和缩略图滑块上。</span></span></p>
<h2 id="color"><span>颜色</span></h2>
<p><span><span>从数据库操作的角度来看，临时颜色描述可能会带来挑战。</span><span>&ldquo;Azure Skies&rdquo;或&ldquo;Robin Egg Blue&rdquo;等颜色名称很有吸引力，但当用作搜索条件时，或者如果营销要求您指定 ，可能不会返回最佳结果</span></span><code>Color_Family:Blue</code><span><span>。</span><span>考虑颜色在搜索结果和分层导航中的表示方式，并为您的业务需求制定一些准则。</span><span>然后，在整个目录中分配颜色属性值时保持一致。</span></span></p>
<h2 id="variations-management"><span>变体管理</span></h2>
<p><span>使用产品</span>配置选项<span>和</span>可配置产品<span><span>来管理产品供应的变化。</span><span>这些功能使产品分类、创建购物车价格规则和动态类别规则以及提供具有各种文本、选择和日期输入类型的选项选择变得更加容易。</span></span></p>
<h2 id="weighted-search"><span>加权搜索</span></h2>
<p><span></span>可以为目录搜索<span><span>启用的产品属性</span><span>分配权重，以便在搜索结果中赋予它们更高的价值。</span><span>权重较大的属性在权重较低的属性之前返回。</span><span>例如，考虑系统中的两个属性，搜索权重为 3 的</span></span><em>颜色</em><span>和搜索权重为 1 的</span><em>描述</em><span>。搜索单词</span><em>red</em><span>会返回颜色属性值为 的产品列表</span><code>red</code><span>，但不会返回具有包含单词</span><em>red</em><span><span>的描述。</span><span>在此示例中，</span></span><code>color</code><span>属性具有比</span><code>description</code><span>属性更大的定义权重。</span></p>
<h2 id="unused-properties"><span>未使用的属性</span></h2>
<p><span>删除未使用的产品属性以获得更好的结构和更快的索引。</span></p>]]></description>
      <pubDate>Mon, 12 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2产品列表]]></title>
      <link>https://www.360magento.com/blog/Products-list/</link>
      <description><![CDATA[<p><span>目录中的所有产品都可以从管理员的</span><em>产品</em><span><span>页面访问，您可以在其中创建产品和编辑现有产品。</span><span>对于多站点安装，每个网站都可以从同一目录中提供不同的待售产品选择。</span></span></p>
<p><span></span><em>产品</em><span><span>列表包括目录中的</span><span>所有产品，指示它们可用的网站，以及它们当前是否可以销售。</span></span>在启用了共享目录<span><span>的 Adob​​e Commerce B2B 安装中</span><span>，网格包含一个列，指示哪些产品在共享目录中具有替代折扣定价。</span></span></p>
<p><span><span>您可以逐页浏览列表，或搜索特定产品。</span><span>使用标准</span></span>控件<span><span>对列表进行排序和过滤，并对</span><span>选定产品应用</span></span>操作。<span></span></p>
<p><img alt="产品网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/products-grid.png?lang=en" /></p>
<h2 id="page-controls"><span>页面控件</span></h2>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>添加产品</span></td>
<td><span><span>启动创建新的简单产品的流程。</span><span>要选择特定的产品类型，请单击向下箭头。</span><span>选项：</span></span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-simple.html?lang=en">简单产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-configurable.html?lang=en">可配置产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-grouped.html?lang=en">分组产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-virtual.html?lang=en">虚拟产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-bundle.html?lang=en">捆绑产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-create-downloadable.html?lang=en">可下载产品</a><span>/</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/types/product-gift-card-create.html?lang=en">礼品卡</a></td>
</tr>
<tr>
<td><span>导出完整目录</span></td>
<td><span>（需要</span><a href="https://docs.magento.com/user-guide/mcom.html">MCOM 连接器</a><span>）手动请求从 Adob​​e Commerce</span><a href="https://docs.magento.com/user-guide/catalog/export-full-catalog.html">导出完整目录</a><span><span>。</span><span>外发消息批量导出到 .csv 文件。</span></span></td>
</tr>
<tr>
<td><span>动作</span></td>
<td><span><span>列出可应用于列表中选定产品的所有操作。</span><span>要对一个产品或一组产品应用操作，请选中每个产品第一列中的复选框。</span><span>选项：</span></span><code>Delete</code><span>/&nbsp;</span><code>Change Status</code><span>/&nbsp;</span><code>Update Attributes</code><span>/&nbsp;</span><code>Assign Inventory Source</code><span>/&nbsp;</span><code>Unassign Inventory Source</code><span>/</span><code>Transfer Inventory To Source</code></td>
</tr>
<tr>
<td><span>过滤器</span></td>
<td><span>根据当前过滤器启动目录搜索。</span></td>
</tr>
<tr>
<td><span>默认视图</span></td>
<td><span><span>指示当前网格列布局。</span><span>如果有保存的网格列视图，您可以选择另一个。</span></span></td>
</tr>
<tr>
<td><span>列</span></td>
<td><span><span>列出可应用于列表中选定产品的所有操作。</span><span>要对一个产品或一组产品应用操作，请选中每个产品第一列中的复选框。</span></span></td>
</tr>
<tr>
<td><span>按关键字搜索</span></td>
<td><span>左上角的搜索框用于按关键字查找产品。</span></td>
</tr>
<tr>
<td><span>编辑</span></td>
<td><span><span>在编辑模式下打开产品。</span><span>您可以通过单击行中的任意位置来完成相同的操作。</span></span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Sun, 11 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2类别概览]]></title>
      <link>https://www.360magento.com/blog/Categories-overview/</link>
      <description><![CDATA[<p><span><span>在将产品添加到目录之前，您需要建立目录的基本类别结构。</span><span>产品可以分配给零个或多个类别。</span><span>通常，类别是在产品添加到目录之前预先创建的。</span><span>但是，您也可以</span><span>在创建产品时</span></span><em>即时添加类别。</em><span><span>目录的类别结构反映</span><span>在商店的主菜单或</span></span>顶部导航中。<span></span></p>
<p><img alt="类别树" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-selected.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>控制</span></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>添加根目录</span></td>
<td><span>创建根类别。</span></td>
</tr>
<tr>
<td><span>添加子类别</span></td>
<td><span>在当前类别或子类别下添加子类别。</span></td>
</tr>
<tr>
<td><span>全部折叠</span><span>/全部</span><span>展开</span></td>
<td><span>折叠或展开类别树。</span></td>
</tr>
<tr>
<td><span>删除</span></td>
<td><span>从树中删除当前类别或子类别。</span></td>
</tr>
<tr>
<td><span>救球</span></td>
<td><span>保存对类别所做的任何更改。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Sat, 10 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2目录搜索概述]]></title>
      <link>https://www.360magento.com/blog/Catalog-search-overview/</link>
      <description><![CDATA[<p><span><span>研究表明，使用搜索的人比仅依赖导航的人更有可能进行购买。</span><span>事实上，根据一些研究，使用搜索的人进行购买的可能性几乎是其他人的两倍。</span></span></p>
<p><span>以下部分介绍了客户如何在您的目录中搜索产品，以及您如何配置目录搜索。</span></p>
<h2 id="quick-search"><span>快速搜索</span></h2>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span></span>安装Live Search<span><span>后，搜索框会在弹出窗口中返回&ldquo;键入时搜索&rdquo;结果</span><span>。</span></span></p>
</div>
</div>
<p><span><span>商店标题中的搜索框可帮助访问者在您的目录中查找产品。</span><span>搜索文本可以是完整或部分产品名称或描述产品的任何其他词或短语。</span><span>人们用来查找产品的搜索词可以从管理员管理。</span></span></p>
<ol>
<li>
<p><span>对于</span><span>搜索</span><span>，客户输入他们想要查找的内容的前几个字母。</span></p>
<p><span>目录中的所有匹配项以及找到的结果数显示在下方。</span></p>
</li>
<li>
<p><span>客户按下 Enter 键或单击匹配产品列表中的结果。</span></p>
<p><img alt="搜索" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-box.png?lang=en" /></p>
</li>
</ol>
<h2 id="advanced-search"><span>高级搜索</span></h2>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>此处描述的高级表单搜索功能不适用于</span>Live Search<span>。</span></p>
</div>
</div>
<p><span><span>高级搜索让购物者可以根据输入到表单中的值搜索目录。</span><span>因为表单包含多个字段，所以一次搜索可以包含多个参数。</span><span>结果是目录中符合条件的所有产品的列表。</span><span>高级搜索的链接位于您商店的页脚中。</span></span></p>
<p><img alt="高级搜索" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-advanced.png?lang=en" /></p>
<p><span><span>表单中的每个字段对应于您产品目录中的一个属性。</span><span>要添加字段，请将属性的前端属性设置为</span></span><code>Include in Advanced Search</code><span><span>。</span><span>作为最佳做法，请仅包括客户最有可能用来查找产品的字段，因为太多会减慢搜索速度。</span></span></p>
<ol>
<li>
<p><span>在商店的底部，客户单击</span><span>Advanced Search</span><span>。</span></p>
</li>
<li>
<p><span>在</span><em>高级搜索</em><span>表单中，根据需要在尽可能多的字段中添加完整或部分值。</span></p>
</li>
<li>
<p><span>单击</span><span>搜索</span><span>以显示结果。</span></p>
<p><img alt="搜索结果" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-search-advanced-results-modify.png?lang=en" /></p>
</li>
<li>
<p><span>如果他们在搜索结果中看不到他们要查找的内容，客户会单击&ldquo;</span><span>修改您的搜索</span><span>&rdquo;并尝试其他条件组合。</span></p>
</li>
</ol>]]></description>
      <pubDate>Fri, 09 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2目录导航]]></title>
      <link>https://www.360magento.com/blog/Catalog-navigation/</link>
      <description><![CDATA[<p><span>术语</span><em>导航</em><span><span>是指购物者在整个商店中从一个页面移动到另一个页面的方法。</span><span>您商店的主菜单或顶部导航实际上是一个类别链接列表，可让您轻松访问目录中的产品。</span><span>在出现在大多数页面顶部的面包屑路径中以及出现在某些两列或三列页面左侧的分层导航中也有类别。</span><span><br /></span></span></p>
<p><span>对于要在您的商店中可见的产品，必须将其分配到至少一个类别</span><span><span>。</span><span>每个类别都可以有一个专用的登录页面，其中包含图像、静态块、描述和类别中的产品列表。</span><span>您还可以为仅在特定时间段（例如假期或促销）活动的类别页面创建特殊设计。</span></span></p>
<p><img alt="店面目录导航" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/storefront-menu-levels.png?lang=en" /></p>]]></description>
      <pubDate>Thu, 08 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2配置目录媒体 URL 格式]]></title>
      <link>https://www.360magento.com/blog/Configure-catalog-media-URL-format/</link>
      <description><![CDATA[<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>General</span><span>并选择</span><span>Web</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>Url Options</span></span><span>部分并设置选项</span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span>：</span><span><span></span></span><span></span></p>
</li>
</ol>
<p><img alt="网页 &gt; 常规选项" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/web-url-options.png?lang=en" /></p>
<div class="table-container">
<table>
<thead>
<tr><th><span>场地</span></th><th><a href="https://experienceleague.adobe.com/docs/commerce-admin/start/setup/websites-stores-views.html?lang=en#scope-settings">范围</a></th><th><span>描述</span></th></tr>
</thead>
<tbody>
<tr>
<td><span>将商店代码添加到 URL</span></td>
<td><span>全球的</span></td>
<td><span><span>如果启用了 Web 服务器重写，则会在 URL 中插入当前视图的商店代码。</span><span>选项：是/否</span></span></td>
</tr>
<tr>
<td><span>自动重定向到基本 URL</span></td>
<td><span>全球的</span></td>
<td><span><span>（对于单一商店设置）如果您的网站上有损坏的链接，这会将流量重定向到基本 URL，而不是带有&ldquo;404 页面未找到&rdquo;消息的页面。</span><span>选项：No / Yes (302 Found) / Yes (301 Moved Permanently)</span></span><br /><br /><span><em>重要！</em></span><span>不要使用自动重定向到多商店设置的基本 URL。</span></td>
</tr>
<tr>
<td><span>目录媒体 URL 格式</span></td>
<td><span>全球的</span></td>
<td><span><span>定义分配给产品和类别的 URL 格式。</span><span>选项：</span></span><br /><span>每个图像变体的唯一哈希值（传统模式）</span><span>&nbsp;- 将转换后的文件名定义为唯一的哈希值。</span><br /><span>基于查询参数的</span><span>图像优化- 根据查询参数定义</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/content-design/media/gallery/media-gallery-image-optimization.html?lang=en">图像优化</a><span>过程。</span></td>
</tr>
</tbody>
</table>
</div>]]></description>
      <pubDate>Wed, 07 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2配置目录 URL]]></title>
      <link>https://www.360magento.com/blog/Configure-catalog-URLs/</link>
      <description><![CDATA[<ol>
<li>
<p><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>Stores</span><span>&nbsp;&gt;&nbsp;</span><em>Settings</em><span>&nbsp;&gt;&nbsp;</span><span>Configuration</span><span>。</span></p>
</li>
<li>
<p><span>在左侧面板中，展开</span><span>目录</span><span>并选择下面的</span><span>目录</span><span>。</span></p>
</li>
<li>
<p><span><span>展开</span><span><span>搜索引擎优化</span></span></span><img alt="扩展选择器" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/icon-display-expand.png?lang=en" /><span><span>部分并</span><span>设置选项：</span></span><span><span></span></span><span></span></p>
<ul>
<li>
<p><span>将</span><span>产品 URL 后缀</span><span>设置为</span><code>html</code><span>或</span><code>htm</code><span><span>。</span><span>输入不带句点的后缀，因为它是自动应用的。</span></span></p>
</li>
<li>
<p><span>将</span><span>类别 URL 后缀</span><span>设置为</span><code>html</code><span>或</span><code>htm</code><span><span>。</span><span>输入不带句点的后缀，因为它是自动应用的。</span></span></p>
</li>
<li>
<p><span><span>根据您的喜好</span><span>设置</span></span><span>产品 URL 的使用类别路径。</span><span></span></p>
</li>
</ul>
<p><img alt="搜索引擎优化" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/catalog-search-engine-optimization_c1.png?lang=en" /></p>
<p><span><span>有关这些选项的更多信息，请参阅</span><em><span>配置参考</span></em><span>中的</span></span><a href="https://docs.magento.com/user-guide/configuration/catalog/catalog.html#search-engine-optimization">搜索引擎优化</a><span>。</span><em><span></span></em><span></span></p>
</li>
<li>
<p><span>完成后，单击</span><span>保存配置</span><span>。</span></p>
</li>
<li>
<p><span>出现提示时，单击系统消息中的</span><span>缓存管理</span><span>链接并刷新无效缓存。</span></p>
<p><img alt="刷新缓存" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/msg-cache-management.png?lang=en" /></p>
<p><span>有关这些选项的更多信息，请参阅</span><a href="https://docs.magento.com/user-guide/system/cache-management.html">刷新缓存</a><span>。</span></p>
</li>
</ol>]]></description>
      <pubDate>Tue, 06 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2网址组件]]></title>
      <link>https://www.360magento.com/blog/URL-components/</link>
      <description><![CDATA[<h3 id="url-key"><span>网址键</span></h3>
<p><span><span>URL 键是描述产品或类别的静态 URL 的一部分。</span><span>当您创建产品或类别时，会根据名称自动生成初始 URL 密钥。</span><span>要更改 URL 密钥，请参阅产品信息的</span></span>搜索引擎优化<span>部分。</span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span><span>带重音的特殊字符会自动替换为 URL 键中的常规非重音版本。</span><span>例如，</span></span><code>&ntilde;</code><span>自动替换为</span><code>n</code><span>。</span></p>
</div>
</div>
<p><span><span>URL 键应由小写字符组成，这些字符之间有非尾随连字符以分隔单词。</span><span>不允许在 URL 键的开头或结尾使用连字符。</span><span>一个设计良好、&ldquo;搜索引擎友好&rdquo;的 URL 键可能包括产品名称和关键词，以改进它被搜索引擎索引的方式。</span><span>URL 键可以配置为在 URL 键更改时创建自动重定向。</span></span></p>
<div class="extension note">
<div><span><span>笔记</span></span></div>
<div>
<p><span>要扩展 URL 自定义，例如本地化 URL，请参阅</span>URL 重写<span>以获取更多信息。</span></p>
</div>
</div>
<h3 id="html-suffix"><span>后缀</span></h3>
<p><span><span>您的目录可以配置为包含或排除后缀作为类别和产品 URL 的一部分。</span><span>人们可能选择使用或省略后缀的原因有多种。</span><span>有些人认为后缀不再有任何用处，没有后缀的页面可以更有效地被搜索引擎索引。</span><span>但是，您的公司可能有需要后缀的标准化 URL 格式。</span></span></p>
<p><span><span>由于后缀由系统配置控制，因此您永远不应将其直接输入到类别或产品的 URL 键中。</span><span>（这样做会导致 URL 末尾出现双后缀。）无论您是否决定使用后缀，都要保持一致，并为所有产品和类别页面使用相同的设置。</span><span>以下是带有和不带有后缀的 URL 示例。</span></span></p>
<h4 id="url-with-html-suffix"><span>带有 HTML 后缀的 URL</span></h4>
<ul>
<li><code>http://mystore.com/helena-hooded-fleece.html</code></li>
<li><code>http://mystore.com/helena-hooded-fleece.htm</code></li>
</ul>
<h4 id="url-without-html-suffix"><span>没有 HTML 后缀的 URL</span></h4>
<ul>
<li><code>http://mystore.com/helena-hooded-fleece</code></li>
</ul>
<h3 id="category-path"><span>类别路径</span></h3>
<p><span><span>您可以将 URL 配置为包含或排除类别路径。</span><span>默认情况下，类别路径包含在所有类别和产品页面中。</span><span>以下示例显示了带有和不带有类别路径的相同产品 URL。</span></span></p>
<h4 id="url-with-category-path"><span>带有类别路径的 URL</span></h4>
<ul>
<li><code>http://mystore.com/women/tops-women/hoodies-and-sweatshirts-women/helena-hooded-fleece.html</code></li>
</ul>
<h4 id="url-without-category-path"><span>没有类别路径的 URL</span></h4>
<ul>
<li><code>http://mystore.com/helena-hooded-fleece.html</code></li>
</ul>
<p><span><span>为防止搜索引擎索引指向相同内容的多个 URL，您可以从 URL 中排除类别路径。</span><span>另一种方法是使用规范的元标记让搜索引擎知道要索引哪些 URL 以及要忽略哪些 URL。</span><span>默认情况下，Commerce 不在产品 URL 中包含类别路径。</span></span></p>]]></description>
      <pubDate>Mon, 05 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2网址格式]]></title>
      <link>https://www.360magento.com/blog/URL-formats/</link>
      <description><![CDATA[<h3 id="dynamic-url"><span>动态网址</span></h3>
<p><span>动态 URL 是</span><em>即时创建的</em><span><span>，可能包含一个查询字符串，其中包含产品 ID、排序顺序和发出请求的页面的变量。</span><span>当客户在您的商店中搜索产品时，生成的 URL 可能如下所示：</span></span></p>
<ul>
<li><code>http://mystore.com/catalogsearch/result/?q=racer+back</code></li>
<li><code>http://mystore.com/women/tops-women.html?style_general=135</code></li>
</ul>
<h3 id="static-url"><span>静态网址</span></h3>
<p><span><span>静态 URL 是特定页面的固定地址。</span><span>静态 URL 可以以搜索引擎友好的格式或按 ID 引用产品和类别的格式显示。</span><span>搜索引擎友好的 URL 包括人们可能用来查找产品的词，并且需要启用 Web 服务器重写。</span><span>具有静态 URL 的文件通常用于产品和类别页面、内容页面和</span></span>主题资产<span>。</span></p>
<ul>
<li><code>http://mystore.com/antonia-racer-tank.html</code></li>
</ul>]]></description>
      <pubDate>Sun, 04 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2目录菜单]]></title>
      <link>https://www.360magento.com/blog/Catalog-menu/</link>
      <description><![CDATA[<p><span>目录菜单提供对产品创建、类别和库存管理工具的轻松访问，以及用于</span>B2B 商店<span>自定义定价的共享目录。</span></p>
<p><img alt="目录菜单" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/admin-menu-catalog.png?lang=en" /></p>
<p><span>在</span><em>管理</em><span>侧边栏上，单击</span><span>目录</span><span>。</span></p>
<h2 id="products"><span>产品</span></h2>
<p><span>创建各种类型的</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/products/products-list.html?lang=en">产品</a><span>并管理您的库存。</span></p>
<p><img alt="产品网格" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/products-grid.png?lang=en" /></p>
<h2 id="categories"><span>类别</span></h2>
<p><span>创建作为商店导航基础的</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/catalog/categories/categories.html?lang=en">类别</a><span>结构。</span></p>
<p><img alt="类别工作区" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/category-workspace.png?lang=en" /></p>
<h2 id="shared-catalogs"><span>共享目录</span></h2>
<p><span>对于安装并启用了 B2B for Adob​​e Commerce 的商店，</span><a href="https://experienceleague.adobe.com/docs/commerce-admin/b2b/shared-catalogs/catalog-shared.html?lang=en">共享目录</a><span>使您能够为不同的公司提供自定义定价。</span></p>
<p><img alt="共享目录产品" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/shared-catalog-select-products-step-1.png?lang=en" /></p>]]></description>
      <pubDate>Sat, 03 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2为不同的视图编辑产品]]></title>
      <link>https://www.360magento.com/blog/Edit-a-product-for-a-different-view/</link>
      <description><![CDATA[<p><span>对于具有多个网站、商店和视图的安装，</span>范围<span><span>设置确定产品可用于销售的位置，以及可用于每个商店视图的产品信息。</span><span>最初，您创建的所有产品都发布到默认网站、商店和商店视图。</span></span></p>
<ol>
<li></li>
<ol>
<li>
<p><span>在左上角，将</span><span>Store View</span><span>设置为要编辑的具体视图。</span></p>
</li>
<li>
<p><span>单击</span><span>确定</span><span>以确认范围更改。</span></p>
<p><img alt="商店视图" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-store-view-spanish-racer-tank.png?lang=en" /></p>
</li>
<li>
<p><span>使用商店视图的新值更新该字段。</span></p>
<p><span><span>可以为商店视图编辑的任何字段下方都会出现一个复选框。</span><span>要覆盖默认值，请取消选择&ldquo;</span></span><span>使用默认值</span><span>&rdquo;复选框。</span></p>
<p><img alt="为西班牙语商店视图翻译产品名称" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-translate-field-spanish.png?lang=en" /></p>
</li>
<li>
<p><span>完成后，点击</span><span>保存</span><span>。</span></p>
</li>
<li>
<p><span>在左上角，将</span><span>商店视图</span><span>选择器设置回默认值。</span></p>
</li>
<li>
<p><span>要验证商店中的更改，请执行以下操作：</span></p>
</li>
<ul>
<li>
<p><span>在右上角，单击</span><em>管理</em><span>菜单箭头并选择</span><span>客户视图</span><span>。</span></p>
<p><img alt="客户观" src="https://experienceleague.adobe.com/docs/commerce-admin/assets/product-admin-menu-customer-view.png?lang=en" /></p>
</li>
<li>
<p><span>在商店的右上角，将</span><span>语言</span><span>选择器设置为您编辑的产品的商店视图，并找到您为该视图编辑的产品。</span></p>
</li>
<li><span><img src="https://www.360magento.com/media/wysiwyg/blog_1229/4.png" width="860" /></span></li>
</ul>
</ol></ol>]]></description>
      <pubDate>Fri, 02 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置默认​​页面布局]]></title>
      <link>https://www.360magento.com/blog/configure-default-page-layout-magento-2/</link>
      <description><![CDATA[<p><span><span><span>你知道吗？</span><span>使用默认的 Magento，您可以更改商店布局。</span><span>这可以直接从 Magento 后端完成。</span></span></span></p>
<p><span><span><span>建立电子商务商店最重要的步骤之一是决定它的外观和感觉。</span><span>根据您的设计思路优化正确的页面布局将产生最佳的客户体验。</span></span></span></p>
<p><span><span><span>商店页面的页眉、页脚和内容区域由部分或容器分隔。</span><span>每页的列数取决于布局。</span></span></span></p>
<p></p>
<h2><span id="How_To_Configure_Default_Page_Layout_In_Magento_2">如何在 Magento 2 中配置默认​​页面布局？</span></h2>
<p><span><img src="https://www.360magento.com/media/wysiwyg/default-layout.png" /></span></p>
<ul>
<li><span>登录到 Magento 管理员。</span></li>
<li><span>前往</span><span>商店 &rarr; 设置 &rarr; 配置。</span></li>
<li><span>转到</span><span>Web &rarr; 默认布局</span></li>
<li><span>您可以在此处从下拉菜单中更改默认产品布局和类别布局。</span></li>
<li><span>选择您选择的页面布局以显示在前端。</span></li>
<li><span>保存配置。</span></li>
</ul>]]></description>
      <pubDate>Thu, 01 Dec 2022 08:32:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中安装和设置 Varnish 缓存]]></title>
      <link>https://www.360magento.com/blog/How-to-Install-and-Setup-Varnish-cache-in-Magento2/</link>
      <description><![CDATA[<p><span><span>缓存是任何网站的关键部分。</span><span>对于像 Magento 2 这样的重型平台，缓存变得更加重要。通过使用缓存，商家可以减少页面加载时间，加快页面响应，从而创造更好的用户体验。</span></span></p>
<p><span><span>Magento 2 中最流行的缓存技术之一是 Varnish。</span><span>Varnish 作为一个完整的页面缓存机制来减少 Magento 2 服务器的工作量。</span><span>因此，性能得到改善。</span></span></p>
<p><span><span>Varnish Cache 是一个开源的 Web 应用程序加速器（HTTP 代理）。</span><span>Varnish 将数据存储在内存中。</span><span>这使 Varnish 能够减少期货的响应时间和网络带宽消耗。</span><span>与 Apache 和 Nginx 等 Web 服务器不同，Varnish 专为与 HTTP 协议一起使用而设计。</span></span></p>
<h2><span>如何在 Magento 2 中安装 Varnish</span></h2>
<p><span>Magento 有自己的缓存机制（读取、写入数据到文件），但效率不够高。</span><br /><span><span>Magento 本身强烈推荐 Varnish 为其用户。</span><span>要在 Magento 2 上运行 Varnish，您需要安装 Varnish 并将 Varnish 配置文件（VCL 文件）部署到系统中的 Varnish 实现中。</span></span></p>
<p><span>以 root 用户 (sudo su) 运行以下一系列命令。</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">apt<span class="token operator">-</span>get install apt<span class="token operator">-</span>transport<span class="token operator">-</span>https
curl https<span class="token punctuation">:</span><span class="token comment">//repo.varnish-cache.org/GPG-key.txt | apt-key add -</span>
<span class="token keyword">echo</span> <span class="token double-quoted-string string">"deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1"</span> \
     <span class="token operator">&gt;</span><span class="token operator">&gt;</span> <span class="token operator">/</span>etc<span class="token operator">/</span>apt<span class="token operator">/</span>sources<span class="token punctuation">.</span><span class="token keyword">list</span><span class="token punctuation">.</span>d<span class="token operator">/</span>varnish<span class="token operator">-</span>cache<span class="token punctuation">.</span><span class="token keyword">list</span>
apt<span class="token operator">-</span>get update
apt<span class="token operator">-</span>get install varnish</pre>
<p><span>如果一切顺利，您应该能够看到 Varnish 版本：</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">varnishd <span class="token operator">-</span><span class="token constant">V</span></pre>
<h2><span>如何在 Magento 2 中配置 Varnish</span></h2>
<h3><span>第一步：修改webserver监听端口</span></h3>
<p><span>安装 Varnish 后，您需要配置当前的 Web 服务器。</span></p>
<p><span>将您的网络服务器配置为侦听默认端口 (80) 以外的端口 (8080)。</span></p>
<p><span>找到您当前的&ldquo;服务器&rdquo;指令并将监听端口更改为 8080。</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">server <span class="token punctuation">{</span>
    listen <span class="token number">8080</span> default_server<span class="token punctuation">;</span>
    server_name  your<span class="token operator">-</span>magento2<span class="token operator">-</span>store<span class="token punctuation">.</span>dev<span class="token punctuation">;</span>
    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span></pre>
<h3><span>第二步：修改default.vcl</span></h3>
<p><span>备份旧的默认值</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">cp <span class="token operator">/</span>etc<span class="token operator">/</span>varnish<span class="token operator">/</span><span class="token keyword">default</span><span class="token punctuation">.</span>vcl <span class="token operator">/</span>etc<span class="token operator">/</span>varnish<span class="token operator">/</span><span class="token keyword">default</span><span class="token punctuation">.</span>vcl<span class="token punctuation">.</span>bak</pre>
<p><span>从 Magento 2 后端下载默认 VCL 配置。</span></p>
<p><span><span>转到商店 &gt; 配置 &gt; 高级 &gt; 系统 &gt; 整页缓存。</span><span>单击&ldquo;缓存应用程序&rdquo;下拉框。</span><span>从列表中选择&ldquo;清漆缓存&rdquo;。</span></span></p>
<p><span>下载与您在系统中安装的清漆等效的清漆文件版本。</span></p>
<p><img alt="" class="wp-image-3508" src="https://store.magenest.com/wp/wp-content/uploads/2019/08/Varnish-cache-magento-2-download-default-vcl.png" /><span>Magento 2 中的清漆配置</span></p>
<p><span>复制这个你刚刚导出的文件到 /etc/varnish/default.vcl</span></p>
<p><span>查找并编辑下面的行</span><code>backend default</code></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token shell-comment comment"># Default backend definition. Set this to point to your content server.</span>
backend <span class="token keyword">default</span> <span class="token punctuation">{</span>
<span class="token punctuation">.</span>host <span class="token operator">=</span> <span class="token double-quoted-string string">"127.0.0.1"</span><span class="token punctuation">;</span>
<span class="token punctuation">.</span>port <span class="token operator">=</span> <span class="token double-quoted-string string">"8080"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></pre>
<p><span>在哪里</span></p>
<ul>
<li><span><span>.host &ndash; Varnish 后端或源服务器的完全限定主机名或 IP 地址和监听端口；</span><span>也就是说，提供内容 Varnish 的服务器会加速。</span><span>通常，这是您的 Web 服务器。</span></span></li>
<li><span>.port &ndash; Web 服务器的监听端口（本例中为 8080）</span></li>
</ul>
<h3><span>第三步：配置Nginx端口80（或443）传给Varnish</span></h3>
<p><span>打开 Nginx 配置文件（位于 /path/to/nginx/sites-enabled/default）</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">server <span class="token punctuation">{</span>
    listen <span class="token number">80</span><span class="token punctuation">;</span>
    location <span class="token operator">/</span> <span class="token punctuation">{</span>
          proxy_pass http<span class="token punctuation">:</span><span class="token comment">//127.0.0.1:6081/;</span>
          proxy_set_header Host <span class="token variable">$host</span><span class="token punctuation">;</span>  
    	proxy_set_header <span class="token constant">X</span><span class="token operator">-</span>Forwarded<span class="token operator">-</span>Host <span class="token variable">$http_host</span><span class="token punctuation">;</span>
	proxy_set_header <span class="token constant">X</span><span class="token operator">-</span>Real<span class="token operator">-</span><span class="token constant">IP</span> <span class="token variable">$remote_addr</span><span class="token punctuation">;</span>
	proxy_set_header <span class="token constant">X</span><span class="token operator">-</span>Forwarded<span class="token operator">-</span><span class="token keyword">For</span> <span class="token variable">$proxy_add_x_forwarded_for</span><span class="token punctuation">;</span>
		proxy_set_header Ssl<span class="token operator">-</span>Offloaded <span class="token double-quoted-string string">"1"</span><span class="token punctuation">;</span>
		proxy_set_header      <span class="token constant">X</span><span class="token operator">-</span>Forwarded<span class="token operator">-</span>Port <span class="token number">443</span><span class="token punctuation">;</span>
		proxy_set_header <span class="token constant">X</span><span class="token operator">-</span>Forwarded<span class="token operator">-</span>Proto https<span class="token punctuation">;</span>
		proxy_set_header <span class="token constant">X</span><span class="token operator">-</span>Forwarded<span class="token operator">-</span>Ssl on<span class="token punctuation">;</span>

<span class="token punctuation">}</span></pre>
<p><span>6081 是 varnish 的默认端口。</span></p>
<p><span>最后，重启 Varnish &amp; Nginx（或 apache）</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">service nginx restart
service varnish restart</pre>
<h2><span>如何在 Magento 2 中验证清漆</span></h2>
<h3><span>第一步：检查 Varnish 是否监听 6081 端口</span></h3>
<p><span>netstat -tulpn | grep varnished</span></p>
<h3><span>第二步：验证var/cache中的内容，var/page_cache文件夹没有重新生成</span></h3>
<p><span>由于 FPC 配置为从 Varnish 提供内容，因此一旦清除，缓存文件夹（var/cache、var/page_cache）应始终为空。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Tue, 08 Nov 2022 08:24:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中更改产品图片尺寸]]></title>
      <link>https://www.360magento.com/blog/Change-product-image-sizes-in-Magento2/</link>
      <description><![CDATA[<p><span><span>产品图片是电子商务商店的重要视觉元素，因为它不仅提供了有关产品的更多信息，而且在客户第一次访问时就给他们留下了良好的印象。</span><span>吸引人的图像通过将文本中的所有功能显示为可视化来满足产品描述。</span><span>通过这种方式，转化率显着提高。</span></span></p>
<p><span><span>让我们谈谈图像大小。</span><span>在 Magento 产品图像中，缩略图图像等可以轻松调整大小以获得更好的视觉体验。</span><span>它还可以潜在地提高网站的加载速度。<br /></span></span></p>
<p><span>假设您要将类别网格产品图像的大小调整为&nbsp;</span><span>300px</span><span>&nbsp;x&nbsp;</span><span>450px</span><span>（原始：</span><span>240px</span><span>&nbsp;x&nbsp;</span><span>300px</span><span>），如下所示。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/1.png" width="800" /></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/2.png" width="800" /></span></p>
<p><span>在本博客中，我们将向您展示如何在 Magento 2 中更改产品图像大小。</span></p>
<h2><span>第 1 步 - 查找 view.xml 文件</span></h2>
<p><span>几乎所有产品图片的配置都包含在</span><span>view.xml 中</span><span><span>（包括宽度和高度）。</span><span>因此，如果您想在 Magento 2 中更改 resize 产品图像，则需要调整</span></span><span>view.xml</span><span>文件。</span></p>
<p><span>主题 的</span><span>view.xml</span><span>的常规位置是</span><span>&lt;theme_dir&gt;/etc/view.xml</span><span>。</span></p>
<p><span>例如：</span><span>app/design/Magenest/beauty/etc/view.xml</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/3.png" width="800" /></div>
<p><span>如果您的主题没有</span><span>view.xml</span><span><span>文件，只需在您的父主题 etc/ 文件夹中找到它并复制到您的主题文件夹。</span><span>这遵循 Magento 的后备机制。</span></span></p>
<p><span></span><span>view.xml</span><span><span>的位置</span><span>因您使用</span></span><span>Magento Blank</span><span>主题或</span><span>Magento Luma</span><span>主题而异：</span></p>
<ul>
<li><span>Magento/Blank：</span><span>供应商/magento/theme-frontend-blank/etc/view.xml</span></li>
<li><span>Magento/Luma：</span><span>供应商/magento/theme-frontend-luma/etc/view.xml</span></li>
</ul>
<p><span><span>Magento 不推荐覆盖核心的代码，所以你不应该修改这些文件。</span><span>最好复制到</span></span><span>app/</span><span>文件夹中的一个新的来修改它。</span></p>
<h2><span>第 2 步 - 找到正确的图像 ID 并输入</span></h2>
<p><span>在</span><span>view.xml 中，图像属性在</span><span></span><span>&lt;images&gt;</span><span><span>元素</span><span>的范围内配置：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>view</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:Config/etc/view.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>media</span><span class="token punctuation">&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>images</span> <span class="token attr-name">module</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento_Catalog<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
           <span class="token comment">&lt;!-- Product images are configured within this element scope --&gt;</span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>bundled_product_customization_page<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>thumbnail<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span>140<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span>140<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>cart_cross_sell_products<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>thumbnail<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span>152<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span>188<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>cart_page_product_thumbnail<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>small_image<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span>110<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span>160<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>category_page_grid<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>small_image<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span>275<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span>275<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>category_page_list<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>small_image<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span>275<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span>275<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span></pre>
<p><span><span>Magento 中的每个产品图像都有一个 id 和 type 属性。</span><span>它们在</span></span><span>view.xml</span><span>内的 &lt;image&gt; 节点中定义：</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>images</span> <span class="token attr-name">module</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento_Catalog<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>unique_image_id<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>image_type<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	...
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>images</span><span class="token punctuation">/&gt;</span></span></pre>
<p><span>查找包含产品图像定义的图像唯一 ID。</span></p>
<p><span>在我们的情况下，图像 id 是</span><span>&lt;image id="category_page_grid" type="small_image"&gt;</span><span>。</span></p>
<p><span>提示</span><span><span>：要查找图像 id，请找到宽度和高度与输出图像完全相同的节点。</span><span>假设您的图像是 700px x 700px 。</span><span>找到具有 &lt;width&gt;700&lt;/width&gt; 和 &lt;height&gt;700&lt;/height&gt; 的节点</span></span></p>
<h2><span>第 3 步 - 在 Magento 2 中配置产品图片</span></h2>
<p><span>找到包含产品图片配置的元素后，更改 &lt;&nbsp;</span><span>width</span><span>&nbsp;&gt; 和 &lt;&nbsp;</span><span>height</span><span>&nbsp;&gt; 节点的值</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>images</span> <span class="token attr-name">module</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento_Catalog<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>image</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>category_page_grid<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>small_image<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>width</span><span class="token punctuation">&gt;</span></span><span class="token comment">&lt;!-- Replace this with width in px : 300--&gt;</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>width</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>height</span><span class="token punctuation">&gt;</span></span><span class="token comment">&lt;!-- Replace this with height in px: 450 --&gt;</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>height</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>image</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>images</span><span class="token punctuation">&gt;</span></span></pre>
<h2><span>第 4 步 - 清理缓存</span></h2>
<p><span>清理 Magento 缓存以应用配置。</span></p>
<ul>
<li><span><span>您可以转到系统 -&gt; 工具 -&gt; 缓存管理。</span><span>然后单击 Flush Magento Cache 按钮以清除 Magento Cache。</span></span></li>
</ul>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/4.png" width="800" /></div>
<ul>
<li><span>或者您可以使用命令行执行此操作：</span><span>php bin/magento cache:flush</span></li>
</ul>
<p><span>在某些情况下，您可能希望调整店面上所有图像的大小，以便立即提供它们，这将加快第一次加载时的页面加载速度。</span></p>
<p><span>这可能是必要的情况可能是：</span></p>
<ul>
<li><span>导入产品后，可能有各种尺寸的图像</span></li>
<li><span>如果图像尺寸发生变化</span></li>
<li><span>图像缓存已刷新</span></li>
</ul>
<p><span>从 Magento 根文件夹运行此命令：&nbsp;</span><span>php bin/magento catalog:images:resize</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/5.png" width="800" /></div>
<p><span>之后，您的所有类别网格图像都已调整大小。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1026/6.png" width="800" /></div>
<h2><span>包起来</span></h2>
<p><span><span>Magento 提供了许多有用的功能来处理产品及其图像。</span><span>今天，我们学习了配置产品视觉外观方面最重要的功能之一。</span></span></p>
<p></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Mon, 07 Nov 2022 08:32:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[覆盖 Magento 2 布局：基本布局和主题布局]]></title>
      <link>https://www.360magento.com/blog/Override-Magento2-Layout-Base-Layout-Theme-Layout/</link>
      <description><![CDATA[<h2><span>1 Magento 2 核心布局是什么？</span></h2>
<p><span><span>页面的基本组件是布局、容器和块。</span><span>布局表示网页的结构。</span><span>容器代表该网页结构中的占位符。</span><span>块代表容器占位符内的 UI 控件或组件。</span></span></p>
<p><span><span>在这篇博客中，我们将解释如何覆盖 Magento 2 布局。</span><span>Magento 2 中的布局 xml 文件描述了页面结构。</span></span></p>
<p><span>强烈建议您在想要完全取消使用核心的布局文件并定义自己的布局时覆盖布局文件。</span></p>
<p><span><span>不要重写 Magento 2 核心文件。</span><span>为了保证您的修改安全，您应该覆盖或扩展自定义主题中的布局文件。</span></span></p>
<h2><span>2 2 种 Magento 2 核心布局：基础布局和主题布局</span></h2>
<p><span>Magento 2 布局分为两种类型的布局：</span><span>基本布局</span><span>和</span><span>主题布局</span><span><span>。</span><span>这是它们之间的主要区别。</span></span></p>
<h3><span>2.1 基地布局</span></h3>
<p><span><span>基本布局文件由模块提供。</span><span>我们可以在这个路径上找到这些文件：&nbsp;</span></span></p>
<ul>
<li><span>配置和一般布局文件：</span><span>&nbsp;{module_dir}/view/frontend/layout/</span></li>
<li><span>页面布局文件：</span><span>&nbsp;{module_dir}/view/frontend/page_layout/</span></li>
</ul>
<h3><span>2.2 主题布局</span></h3>
<p><span><span>主题布局由 Magento 主题提供。</span><span>我们可以在这条路径上找到它们：</span></span></p>
<ul>
<li><span>配置和一般布局文件：</span><span>&nbsp;{theme_dir}/Namespace_Module/layout/</span></li>
<li><span>页面布局文件：</span><span>&nbsp;{theme_dir}/Namespace_Module/page_layout/</span></li>
</ul>
<h2><span>3 覆盖核心布局</span></h2>
<p><span>当我们执行自定义时，我们可以覆盖布局，这意味着您放置在主题中的新文件将被使用，而不是父主题布局文件或基础布局文件。</span></p>
<h3><span>3.1 覆盖基础布局</span></h3>
<p><span>添加覆盖的基本布局文件（覆盖模块提供的基本布局）：</span></p>
<p><span>将同名的布局文件放在以下位置：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;theme_dir&gt; </span><span>
  |__/&lt;Namespace_Module&gt; </span><span>
     |__/layout </span><span>
       |__/override </span><span>
          |__/base </span><span>
            |--&lt;layout1&gt;.xml </span><span>
            |--&lt;layout2&gt;.xml</span></pre>
<p><span>这些文件覆盖以下布局：</span></p>
<ul>
<li><span>&lt;module_dir&gt;/view/frontend/layout/&lt;layout1&gt;.xml</span></li>
<li><span>&lt;module_dir&gt;/view/frontend/layout/&lt;layout2&gt;.xml</span></li>
</ul>
<p><span>例如：</span></p>
<ul>
<li><span>&lt;theme_dir&gt;/Magento_Customer/layout/override/base/default.xml 将覆盖</span></li>
<li><span>vendor/magento/module-customer/view/frontend/layout/default.xml （或 app/code/Magento/Customer/view/frontend/layout/default.xml 如果您使用 github 版本）</span></li>
</ul>
<h3><span>3.2 覆盖主题布局</span></h3>
<p><span>要覆盖父主题布局：</span></p>
<p><span>将同名的布局文件放在以下位置：</span></p>
<p><em>&lt;theme_dir&gt;</em></p>
<p><em>&nbsp;&nbsp;|__/&lt;Namespace_Module&gt;</em></p>
<p><em>&nbsp;&nbsp;&nbsp; &nbsp;|__/layout</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;|__/override</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|__/theme</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |__/&lt;Parent_Vendor&gt;</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|__/&lt;parent_theme&gt;</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;|--&lt;layout1&gt;.xml</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;|--&lt;layout2&gt;.xml</em></p>
<p><span>这些文件覆盖以下布局：</span></p>
<ul>
<li><span>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout1&gt;.xml</span></li>
<li><span>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout2&gt;.xml</span></li>
</ul>
<p><span>要覆盖页面布局文件，请使用 page_layout 目录名称而不是布局。</span></p>
<h2><span>4 结论</span></h2>
<p><span><span>覆盖布局文件为主题定制创造了有利条件。</span><span>但是，您需要记住，覆盖的布局文件不受对主文件的任何更改的影响，如果您不仔细检查正在更新的文件，这反过来可能会导致将来升级 Magento 2 时出现问题。</span></span></p>
<p><span>因此，应该非常小心地使用覆盖，并且只在真正需要并且不能没有它的情况下使用。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Sun, 06 Nov 2022 08:29:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中为购物车中的产品设置自定义价格]]></title>
      <link>https://www.360magento.com/blog/How-to-set-custom-Price-for-Products-in-Cart-in-Magento2/</link>
      <description><![CDATA[<p><span><span>为了在产品页面或小部件上显示产品价格，Magento 从基本价格、特价、等级价格或目录规则价格之一计算最低价格。</span><span>可配置产品可以为子产品设置自己的价格，捆绑产品可以对捆绑应用固定价格。</span><span>然后，当将产品添加到购物车时，其价格也会受到购物车价格规则的影响。</span></span></p>
<p><span><span>在本文中，我们将展示如何将您的自定义价格添加到购物车中的产品中。</span><span>此操作将覆盖 Magento 计算的价格。</span></span></p>
<h2><span>购物车中产品的自定义价格</span></h2>
<p><span>以下是可以帮助您实现这一目标的 2 个简单步骤：</span></p>
<p><span>首先，安装自定义模块后，您声明一个名为 events.xml 的文件以捕获在将产品添加到购物车后发生的事件。</span></p>
<p><span>&lt;供应商名称&gt;/&lt;模块名称&gt;/etc/frontend/events.xml</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>config</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:Event/etc/events.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>event</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>checkout_cart_product_add_after<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>observer</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>customPriceInCart<span class="token punctuation">"</span></span> <span class="token attr-name">instance</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>VendorName\ModuleName\Observer\CustomPriceInCart<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>event</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>config</span><span class="token punctuation">&gt;</span></span></pre>
<p><span>在这里，您声明了一个名为 customPriceInCart 的观察者，它将处理每次将产品添加到购物车时 Magento 调度的事件 checkout_cart_product_add_after。&nbsp;</span></p>
<p><span>接下来，我们创建观察者类：&nbsp;</span></p>
<p><span>&lt;供应商名称&gt;/&lt;模块名称&gt;/Observer/customPriceInCart.php</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
namespace VendorName\ModuleName\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;

class CustomPriceInCart implements ObserverInterface
{
	public function execute(\Magento\Framework\Event\Observer $observer)
	{
		//get the item just added to cart
		$item = $observer-&gt;getEvent()-&gt;getData('quote_item');
		//(optional) get the parent item, if exists
		$item = ($item-&gt;getParentItem() ? $item-&gt;getParentItem() : $item);
		// set your custom price
		$customPrice = 101;
		$item-&gt;setCustomPrice($customPrice);
		$item-&gt;setOriginalCustomPrice($customPrice);
		$item-&gt;getProduct()-&gt;setIsSuperMode(true);
	}
}</pre>
<p><span>通过函数</span><span>setIsSuperMode(true)</span><span>为产品打开超级模式，您可以停止系统生成价格，然后设置您的自定义价格。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/1_2.png" width="800" /></span></p>
<p><span>结果是每当将产品添加到购物车时，您的自定义价格都会替换原始价格。<br /></span></p>
<h2><span>结论</span></h2>
<p><span><span>当产品出现在客户的购物车中时，本教程已成功修复了产品的价值。</span><span>除了设置固定数字外，您还可以添加自己的函数并将其他类注入到观察者中以实现自定义定价逻辑。</span></span></p>
<p><span><span>感谢您阅读这篇文章。</span><span>如果您在上面的代码中运行良好或在实现该方法时遇到任何问题，请告诉我们。</span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Sat, 05 Nov 2022 08:26:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置多个网站、多个商店视图]]></title>
      <link>https://www.360magento.com/blog/How-to-configure-multiple-websites-multiple-store-views-in-Magento2/</link>
      <description><![CDATA[<p><span><span>Magento 允许我们在一次安装中创建多个网站并存储使用不同属性和内容的视图。</span><span>本博客将向您展示如何在 Magento 2 中配置多个网站、多个商店视图。</span></span></p>
<h2><span>第 1 步：创建网站</span></h2>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; All Stores</span><span>。</span></p>
<p><span>2. 在店铺页面，点击</span><span>创建网站</span><span>。</span></p>
<ul>
<li><span>名称 - 输入名称以识别网站。</span></li>
<li><span>代码 - 输入唯一代码以避免冲突。</span></li>
</ul>
<ul>
<li><span>排序顺序 - 输入可选的数字排序顺序。</span></li>
</ul>
<p><span>3. 单击</span><span>保存网站</span><span>。</span></p>
<h2><span>第 2 步：创建商店</span></h2>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; All Stores</span><span>。</span></p>
<p><span>2. 在店铺页面，点击</span><span>创建店铺</span><span>。</span></p>
<ul>
<li><span><span>网站 - 单击要与此商店关联的网站的名称。</span><span>一个网站可以有多个商店。</span></span></li>
<li><span>名称 - 输入名称以识别商店。</span></li>
<li><span>代码 - 输入唯一代码以识别商店。</span></li>
<li><span>根类别 - 单击此商店的根类别的名称。</span></li>
</ul>
<p><span>3. 点击</span><span>保存商店</span><span>。</span></p>
<h2><span>第 3 步：创建商店视图</span></h2>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; All Stores</span><span>。</span></p>
<p><span>2. 在店铺页面，点击</span><span>创建店铺视图</span><span>。</span></p>
<ul>
<li><span><span>商店 - 单击商店名称以关联此商店视图。</span><span>每个商店可以有多个商店视图。&nbsp;</span></span></li>
<li><span>名称 - 输入名称以标识此商店视图。&nbsp;</span></li>
<li><span>代码 - 输入唯一名称以标识此商店视图。</span></li>
<li><span>状态 - 选择启用。</span></li>
<li><span>排序顺序 - 输入可选的数字排序顺序。</span></li>
</ul>
<p><span>3.点击</span><span>保存商店视图</span></p>
<h2><span>第 4 步：更改网站基本 URL</span></h2>
<p><span>要使用 http://mysite.local 等唯一 URL 访问网站，您必须在 Magento Admin 中更改每个站点的基本 URL。</span></p>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; Configuration &gt;&gt; General &gt;&gt; Web</span><span><span>&nbsp;.</span></span></p>
<p><span><span>2。</span><span>选择</span><span>左上角的</span></span><span>Store View以检查您添加的新网站视图，选择</span><span></span><span>OK</span><span>确认操作。</span></p>
<p><span>3. 展开</span><span>基本 URL</span><span>部分。</span></p>
<p><span><span>4. 清除 Base URL 和 Base Link URL 字段旁边的</span><span>Use&nbsp;</span><span>Default 复选框</span></span><span>。在</span><span><span>Base URL</span></span><span>和</span><span>Base&nbsp;</span><span>Link&nbsp;</span><span><span><span>URL</span></span><span>字段中输入网站的 URL&nbsp;</span><span>。</span><span>确保以正斜杠结束 URL，以便可以使用商店中的其他 URL 密钥对其进行扩展。</span><span>例如：http://mysite.local/</span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
<div class="wp-block-image"><img alt="" class="wp-image-5488" src="https://store.magenest.com/wp/wp-content/uploads/2019/12/Configure-multiple-websites-multiple-store-views-change-URL-1-1024x477.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/1.jpg" width="800" /></div>
<p><span>5. 重复</span><span>基本 URL（安全）</span><span>部分中的上一步。</span></p>
<p><span>6. 如果您有两个以上的网站，请像第 1 步一样添加新网站，并使用</span><span>商店视图</span><span>部分切换网站（商店）并为新网站配置新网址：</span></p>
<p><span>例子：</span></p>
<div class="wp-block-image"><img alt="" class="wp-image-5489" src="https://store.magenest.com/wp/wp-content/uploads/2019/12/Configure-multiple-websites-multiple-store-views-change-URL-2-1024x298.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/2.jpg" width="800" /></div>
<p><span>7. 单击</span><span>保存配置。</span></p>
<h2><span>第 5 步：将商店代码添加到基本 URL（可选）</span></h2>
<p><span>Magento 为您提供了将商店代码添加到站点基本 URL 的选项，这简化了设置多个商店的过程。</span></p>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; Configuration &gt;&gt; General &gt;&gt; Web</span><span>。</span></p>
<p><span><span>2. 选择</span><span>左上角的</span></span><span>Store View ，点击</span><span></span><span>Default Config</span><span>。</span></p>
<p><span>3. 展开</span><span>URL 选项</span><span><span>.</span></span></p>
<p><span><span>4.&nbsp;</span><span>清除将</span><span><span>商店代码添加到 URL</span></span><span>字段</span><span>旁边的</span></span><span>使用系统值复选框。</span><span><span>从将</span><span><span>商店代码添加到 URL</span></span><span>列表中，单击</span><span><span>是</span></span><span>。</span></span></p>
<p><span>5. 点击</span><span>保存配置</span><span>。</span></p>
<h2><span>第 6 步：更改默认商店视图基本 URL</span></h2>
<p><span>完成此步骤后，您将失去对 Magento Admin 的访问权限，您的访问权限会在您设置虚拟主机后返回。</span></p>
<p><span>1. 在 Magento 2 面板中，转到</span><span>Stores &gt;&gt; Settings &gt;&gt; Configuration &gt;&gt; General &gt;&gt; Web</span><span>。</span></p>
<p><span><span>2. 选择</span><span>左上角的</span></span><span>Store View ，点击</span><span></span><span>Default Config。</span></p>
<p><span>3. 展开</span><span>基本 URL</span><span><span>&nbsp;.4。</span><span>清除</span><span><span>Base Link URL</span></span><span>字段</span><span>旁边的</span></span><span>Use Default复选框。</span><span><span>在</span><span><span>基本 URL</span></span><span>和</span><span><span>基本链接 URL</span></span><span>字段中输入所需的 URL。</span><span>例如：http://exam.com/</span></span></p>
<p><span>5. 重复</span><span>基本 URL（安全）</span><span>部分中的上一步。</span></p>
<p><span>6. 单击</span><span>保存配置。</span></p>
<p></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Fri, 04 Nov 2022 08:33:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置 Table Rate Shipping Method]]></title>
      <link>https://www.360magento.com/blog/How-to-configure-Table-Rate-Shipping-Method-in-Magento2/</link>
      <description><![CDATA[<p><em>什么是表率</em><span>？</span><em>它是一种运输方法，它引用数据表以根据重量与目的地</em><span>、</span><em>价格</em><span>与目的地和</span><em>物品数量与</em><span><span>目的地等维度的融合来估算运输成本</span><span>。</span></span></p>
<p><span><span>例如，您可以使用表费率来向您的客户收取 100 磅订单的费用，该费用高于运送到同一地点的 50 磅订单。</span><span>当客户要求报价时，结果将出现在购物车的运费估算中。</span></span></p>
<p><span>按照以下步骤在</span><span>Magento 2</span><span>中配置 Table Rates Shipping Method 。</span></p>
<h2><span>步骤 1：配置默认设置</span></h2>
<p><span>在管理面板上，转到</span><span>商店 &gt; 设置 &gt; 配置 &gt; 销售 &gt; 运输方式，</span><span>然后放大</span><span>表费率</span><span>部分，您将看到以下部分：</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/1_1.png" width="800" /></div>
<ul>
<li><span></span><span>将启用</span><span><span>更改</span><span>为</span></span><span>是</span></li>
<li><span>您可以更改</span><span>标题</span><span>和</span><span>方法名称</span><span><span>或保留默认值。</span><span>这些值将显示为结帐页面中估计费率旁边的标签。&nbsp;</span></span></li>
<li><span>Condition</span><span><span>包含 3 种计算方法选项：Weight v. Destination；</span><span>价格诉目的地；</span><span>项目数量与目的地</span></span></li>
</ul>
<ul>
<li><span>如果您想在估算中包含虚拟产品，请在&ldquo;</span><span>在价格计算中包含虚拟产品</span><span>&rdquo;中选择&ldquo;是&rdquo; 。</span></li>
<li><span>如果您收取手续费，请将计算手续费设置</span><span>为</span><span>固定或百分比并输入</span><span>手续费。</span><span>此金额将按订单收取。</span><span>&nbsp;</span></li>
<li><span>在</span><span>Displayed Error Message 框中</span><span>，键入此方法不可用时出现的消息</span></li>
<li><span><span>您可以</span><span>在所有允许的国家或特定国家之间&nbsp;选择</span></span><span>运送到适用国家。</span><span></span></li>
<li><span>如果您选择特定国家，&ldquo;</span><span>运送到特定国家</span><span>&rdquo;将被启用，让您选择您想应用表费率的国家。</span></li>
<li><span>最后一个字段</span><span>排序顺序</span><span>定义了费率在结帐页面中显示的顺序</span></li>
<li><span>单击</span><span>保存配置</span><span>以完成。</span></li>
</ul>
<h2><span>第 2 步：填写预计运费</span></h2>
<p><span>在左上角，选择&ldquo;</span><span>商店视图</span><span>&rdquo;到&ldquo;主网站&rdquo;或配置适用的任何其他网站。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/2_1.png" width="800" /></div>
<p><span>将出现 2 个新按钮</span></p>
<div class="wp-block-image"><img alt="" class="wp-image-5550" src="https://store.magenest.com/wp/wp-content/uploads/2020/01/configure-table-rates-shipping-method-in-Magento-2-import-export-files-1024x198.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/3_1.png" width="800" /></div>
<p><span>单击</span><span>导出 CSV</span><span><span>并将 CSV 文件保存到您的计算机。</span><span>打开 CSV 文件，填写运费计算条件值的表格</span></span></p>
<ul>
<li><span>使用星号 (*) 作为通配符来表示任何类别中的所有可能值。</span></li>
<li><span>Country 列中的每一行都应该有一个有效的三字符代码。</span></li>
</ul>
<p><span>示例：价格与目的地</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/4_1.png" width="800" /></div>
<p><span>完成后，保存 csv 文件。</span></p>
<h2><span>第 3 步：导入表格费率数据</span></h2>
<p><span>转到</span><span>Table Rates Shipping</span><span>部分，在左上角，选择</span><span>Store View</span><span>&nbsp;to &ldquo;Main website&rdquo; 或配置适用的任何其他网站。&nbsp;</span></p>
<p><span><span>单击</span><span><span>导入字段中的</span></span></span><span>选择文件</span><span><span>按钮</span><span>，然后选择要导入的前一个 csv 文件。</span><span>单击</span><span><span>保存配置</span></span><span>。</span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
<h2><span>第 4 步：检查结果</span></h2>
<p><span><span>要测试表运费，请将产品添加到购物车。</span><span>然后，转到结帐页面。</span><span>完成所有运输信息后，查看运输估算部分，您将看到您之前配置的值。</span></span></p>
<p><span>示例</span><span>：将 45 美元的产品添加到购物车</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/5_1.png" width="800" /></div>
<p><span>在结帐页面中，您可以看到运费将根据我们在步骤 2 中添加的规则进行更改。</span></p>
<ul>
<li><span>未选择发货状态时，运费为 15 美元。</span></li>
</ul>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/6_1.png" width="800" /></div>
<ul>
<li><span>将运输状态更改为阿拉斯加/夏威夷，运费为 20 美元。</span></li>
</ul>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/7_1.png" width="800" /></div>
<p><span>注意</span><span>：您可以使用表格费率来创建免费送货条件。</span></p>
<p><span>我们希望通过这些简单的步骤可以帮助您轻松理解和配置 Table Rate Shipping Method。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Thu, 03 Nov 2022 08:21:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Paypal 如何在 Magento 2 中工作？]]></title>
      <link>https://www.360magento.com/blog/How-does-Paypal-work-within-Magento2/</link>
      <description><![CDATA[<p><span>Magento 中可用的支付方式是</span><span>Paypal Express Checkout</span><span>，它支持客户使用 Paypal 账户或信用卡支付。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/1.png" width="800" /></div>
<p><span>本文将帮助您如何在</span><span>Magento 2</span><span><span>中配置 PayPal 。</span><span>在设置 Paypal 付款之前，请确保您拥有真实或沙盒 Paypal 商家帐户。</span></span></p>
<h2><span>1.从新配置开始</span></h2>
<p><span>1. 前往</span><span>商店</span><span>&gt;</span><span>配置</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/2.png" width="800" /></div>
<p><span>2. 向下滚动到</span><span>销售</span><span>选项卡，展开它并单击</span><span>付款方式</span><span>选项卡。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/3.png" width="800" /></div>
<p><span>3. 如您所见，</span><span>Merchant Location</span><span><span>就在此处。</span><span>您可以为 Paypal 付款选择一个国家，或者如果您不选择，付款将使用 General Config 中的 Default Country。</span></span></p>
<p><span>此设置决定了配置中出现的 PayPal 解决方案的选择。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/4.png" width="800" /></div>
<p><span>4. 之后，单击</span><span>配置</span><span>按钮以展开</span><span>Paypal Express Checkout</span><span>部分。</span></p>
<p><span></span><span>5. 然后，在必填 Paypal 设置</span><span>&gt;</span><span>快速结账</span><span><span>部分</span><span>填写信息。</span></span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/5.png" width="800" /></div>
<p><span>如果您将任何字段（可选字段除外）留空，则</span><span>启用此解决方案</span><span><span>字段将被禁用。</span><span>在填写所有必填字段之前，您无法启用它。</span></span></p>
<ul>
<li><span>与 PayPal 商家帐户关联的电子邮件：</span><span><span>电子邮件地址区分大小写。</span><span>要接收付款，您输入的电子邮件地址必须与您的 PayPal 商家帐户中指定的电子邮件地址相匹配。</span><span>此字段是可选的，您可以将其留空。</span></span></li>
</ul>
<ul>
<li><span>API 身份验证方法：</span><span>这里有两种类型的身份验证方法。</span></li>
</ul>
<ol>
<li><span>API 签名。</span></li>
<li><span>API 证书。</span></li>
</ol>
<ul>
<li><span>API 用户名/API 密码：</span><span>输入 Paypal 为您提供的用户名/密码。</span></li>
<li><span>API 签名/API 证书：</span><span>取决于</span><span>&nbsp;</span><span>身份验证方法，您必须完成它。&nbsp;</span></li>
<li><span>沙盒模式：</span><span>确定您正在使用的环境。&nbsp;</span></li>
</ul>
<ul>
<li><span>API 使用代理：</span><span>如果您使用代理连接 Magento 和 Paypal，则将此字段设置为是，并填写以下两个字段：</span></li>
</ul>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/6.png" width="800" /></div>
<p><span><span>6. 完成这些字段后，您可以</span><span>在</span><span><span>启用此解决方案字段中选择</span></span></span><span>是</span><span>。</span><span><span></span></span><span></span></p>
<p><span>7. 如果您希望客户在商店付款，请启用</span><span>Enable In-Context Checkout Experience</span><span>字段并输入</span><span><span><span>Merchant Account</span></span><span><span>&nbsp;ID</span></span></span><span>的值。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/7.png" width="800" /></div>
<p><span>移至</span><span>基本设置 - PayPal Express Checkout</span><span>部分以设置付款的一些基本信息。</span></p>
<p><span>在这里，您可以指定</span><span>标题、排序顺序、付款操作</span><span>（此字段包括授权/销售/订单操作）。</span></p>
<p><span>顺便说一句，如果您希望在每个产品页面上显示付款，则将&ldquo;</span><span>在产品详细信息页面上显示&rdquo;</span><span>字段设置为&ldquo;是&rdquo;。</span></p>
<h2><span>2. 获取 API 凭证</span></h2>
<p><span>您可以通过单击</span><span>Get Credentials from Paypal</span><span>&nbsp;/&nbsp;</span><span>Sandbox Credentials</span><span>按钮来获取信息。</span></p>
<p><span>如果您想从沙盒模式更改为实时模式，只需将您输入的所有凭据替换为实时凭据即可。</span></p>
<p><span>1. 登录您的 Paypal 商家帐户。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/8.png" width="800" /></div>
<p><span>2. 进入</span><span>设置</span><span>&gt;</span><span>账户设置</span></p>
<p><span>3. 转到</span><span>帐户访问</span><span>&gt;&nbsp;</span><span>API 访问</span><span>&gt;</span><span>更新</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/9.png" width="800" /></div>
<p><span>4. 向下滚动到</span><span>自定义结帐体验</span><span>，然后单击</span><span>管理 API 凭据。</span></p>
<p><span>5. 然后，选择身份验证方法</span><span>&nbsp;</span><span>（签名或证书）并提交您的选择。</span></p>
<p><span>6. 现在，您可以获得 Paypal 付款方式的凭据。</span></p>
<p><span>完成 Paypal 支付方式的所有基本设置后，前往 Store Front 并尝试购买东西。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/10.png" width="800" /></div>
<p><span>现在，您将看到 Paypal 付款出现在产品详细信息、迷你购物车和结帐页面上。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1025/11.png" width="800" /></div>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Wed, 02 Nov 2022 08:28:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何检查客户是否登录 Magento 2]]></title>
      <link>https://www.360magento.com/blog/How-To-Check-If-Customer-Is-Logged-Into-Magento2/</link>
      <description><![CDATA[<p><span><span>众所周知，在很多情况下，我们需要检查客户当前是否在您的网站上登录。</span><span>例如，有一些针对已登录客户的特殊促销活动。</span><span>今天，这篇博客将向您展示如何在 Magento 2 中检查客户的登录状态。</span></span></p>
<p><span><span>在 Magento 中，会话在增强用户体验方面发挥着重要作用，它们在收集有关用户访问的重要统计数据方面也很有用。</span><span>会话的特点是在服务器端存储与用户交互相关的信息。</span></span>我为您推荐此解决方案：</p>
<p><span>使用</span><code>Magento\Customer\Model\Session::isLoggedIn()</code><span>方法。</span></p>
<p><code>isloggedIn()</code><span><span>方法返回一个布尔值，指示登录客户的状态。</span><span>访客客户或未登录的客户浏览该网站将返回 false，反之亦然。</span></span></p>
<p><span>要在控制器、助手或观察者中使用此类......您可以按照以下步骤操作：</span></p>
<p><span>首先，您需要在构造函数方法中注入以下类：</span><code>/Magento/Customer/Model/Session</code><span>.</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token keyword">protected</span> <span class="token variable">$_session</span><span class="token punctuation">;</span>

<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
\<span class="token package">Magento<span class="token punctuation">\</span>Customer<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Session</span> <span class="token variable">$session</span><span class="token punctuation">,</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_session</span> <span class="token operator">=</span> <span class="token variable">$session</span><span class="token punctuation">;</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span></pre>
<p><span>然后在您的班级中，在任何函数中使用以下代码来检查客户是否已登录：</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_session</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isLoggedIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// Customer is logged in</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token comment">// Customer is not logged in</span>
<span class="token punctuation">}</span></pre>
<p><span>使用控制器类的代码示例：</span></p>
<p><em>将 [Vendor] 和 [Module] 替换为您的供应商和模块名称</em></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token keyword">namespace</span> <span class="token punctuation">[</span>Vendor<span class="token punctuation">]</span>\<span class="token punctuation">[</span>Module<span class="token punctuation">]</span>\<span class="token package">Controller<span class="token punctuation">\</span>Index</span><span class="token punctuation">;</span>

<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>Action<span class="token punctuation">\</span>Context</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>Action<span class="token punctuation">\</span>Action</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Customer<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Session</span><span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name">ClassName</span> <span class="token keyword">extends</span> <span class="token class-name">Action</span>
<span class="token punctuation">{</span>
    <span class="token keyword">protected</span> <span class="token variable">$_session</span><span class="token punctuation">;</span>

    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span>Context <span class="token variable">$context</span><span class="token punctuation">,</span> Session <span class="token variable">$session</span><span class="token punctuation">)</span> 
    <span class="token punctuation">{</span>
        <span class="token keyword">parent</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">__construct</span><span class="token punctuation">(</span><span class="token variable">$context</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_session</span> <span class="token operator">=</span> <span class="token variable">$session</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token comment">// by using Session model</span>
        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_session</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isLoggedIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token comment">//customer has logged in</span>
            <span class="token comment">// your code in here</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
            <span class="token comment">//Customer is not logged in</span>
            <span class="token comment">// your code in here</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span></span></pre>
<p><span>我们希望本文能帮助您检查客户是否已登录 Magento 2。祝您编码愉快！</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Tue, 01 Nov 2022 08:22:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加客户属性 - Magenest]]></title>
      <link>https://www.360magento.com/blog/How-to-add-customer-attribute-in-Magento2-Magenest/</link>
      <description><![CDATA[<p><span><span>了解客户是所有电子商务业务成功的关键。</span><span>在 Magento 2 中，商家可以通过注册表单、帐户仪表板等中的各个字段收集客户属性。为了更好地了解您的客户，需要在客户网格中添加自定义属性。</span><span>在此博客中，我们将指导您如何通过 2 个简单的步骤在 Magento 2 中创建自定义客户属性。</span></span></p>
<p><span>为您提供智能解决方案</span><span>：使用</span><span>Magento 2 的客户属性</span><span>有效地收集客户信息。</span></p>
<h2><span>步骤 1：创建数据补丁</span></h2>
<p><span>Magento 的最新版本引入了一种在 Magento 2 数据库中修改数据的新方法：</span><span><span>数据/模式补丁</span></span><span>（更多信息在这里：</span><span>Magento 文档</span><span>）。</span></p>
<p><span>我们将实施一个</span><span>数据补丁</span><span>来将客户的属性添加到数据库中。</span></p>
<p><span></span><em><code>CustomerAttributePatcher</code></em><span><span>首先，按照这个目录约定在你的模块目录中</span><span>创建一个名为：的类：</span></span><em><code>&lt;your-module&gt;/Setup/Patch/Data/CustomerAttributePatcher.php</code></em></p>
<p><span>注意</span><span>：</span><em>所有数据补丁都必须在此目录</em><span>中。</span></p>
<p><span>必须实施</span><em><code>Magento\Framework\Setup\Patch\DataPatchInterface</code></em></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token keyword">namespace</span> <span class="token package">Magenest<span class="token punctuation">\</span>Customer<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>Patch<span class="token punctuation">\</span>Data</span><span class="token punctuation">;</span>

<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Customer<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Customer</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Eav<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Config</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Customer<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>CustomerSetupFactory</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>ModuleDataSetupInterface</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>Patch<span class="token punctuation">\</span>DataPatchInterface</span><span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name">AccountPurposeCustomerAttribute</span> <span class="token keyword">implements</span> <span class="token class-name">DataPatchInterface</span>
<span class="token punctuation">{</span>
    <span class="token comment">/**
     * @var CustomerSetupFactory
     */</span>
    <span class="token keyword">private</span> <span class="token variable">$customerSetupFactory</span><span class="token punctuation">;</span>

    <span class="token comment">/**
     * @var ModuleDataSetupInterface
     */</span>
    <span class="token keyword">private</span> <span class="token variable">$setup</span><span class="token punctuation">;</span>

    <span class="token comment">/**
     * @var Config
     */</span>
    <span class="token keyword">private</span> <span class="token variable">$eavConfig</span><span class="token punctuation">;</span>

    <span class="token comment">/**
     * AccountPurposeCustomerAttribute constructor.
     * @param ModuleDataSetupInterface $setup
     * @param Config $eavConfig
     * @param CustomerSetupFactory $customerSetupFactory
     */</span>
    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span>
        ModuleDataSetupInterface <span class="token variable">$setup</span><span class="token punctuation">,</span>
        Config <span class="token variable">$eavConfig</span><span class="token punctuation">,</span>
        CustomerSetupFactory <span class="token variable">$customerSetupFactory</span>
    <span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">customerSetupFactory</span> <span class="token operator">=</span> <span class="token variable">$customerSetupFactory</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">setup</span> <span class="token operator">=</span> <span class="token variable">$setup</span><span class="token punctuation">;</span>
        <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">eavConfig</span> <span class="token operator">=</span> <span class="token variable">$eavConfig</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token comment">/** We'll add our customer attribute here */</span>
    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">apply</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token variable">$customerSetup</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">customerSetupFactory</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'setup'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">setup</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$customerEntity</span> <span class="token operator">=</span> <span class="token variable">$customerSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getEavConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getEntityType</span><span class="token punctuation">(</span>Customer<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ENTITY</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$attributeSetId</span> <span class="token operator">=</span> <span class="token variable">$customerSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getDefaultAttributeSetId</span><span class="token punctuation">(</span><span class="token variable">$customerEntity</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getEntityTypeId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$attributeGroup</span> <span class="token operator">=</span> <span class="token variable">$customerSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getDefaultAttributeGroupId</span><span class="token punctuation">(</span><span class="token variable">$customerEntity</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getEntityTypeId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$attributeSetId</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$customerSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">addAttribute</span><span class="token punctuation">(</span>Customer<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ENTITY</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'new_attribute'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>
            <span class="token single-quoted-string string">'type'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'int'</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'input'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'select'</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'label'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'New Attribute'</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'required'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'default'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token number">0</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'visible'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'user_defined'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'system'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">false</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'is_visible_in_grid'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'is_used_in_grid'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'is_filterable_in_grid'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'is_searchable_in_grid'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'position'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token number">300</span>
        <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$newAttribute</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">eavConfig</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getAttribute</span><span class="token punctuation">(</span>Customer<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ENTITY</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'new_attribute'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$newAttribute</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">addData</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
            <span class="token single-quoted-string string">'used_in_forms'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'adminhtml_checkout'</span><span class="token punctuation">,</span><span class="token single-quoted-string string">'adminhtml_customer'</span><span class="token punctuation">,</span><span class="token single-quoted-string string">'customer_account_edit'</span><span class="token punctuation">,</span><span class="token single-quoted-string string">'customer_account_create'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'attribute_set_id'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token variable">$attributeSetId</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'attribute_group_id'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token variable">$attributeGroup</span>
        <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$newAttribute</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function">getDependencies</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getAliases</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span></span></pre>
<h2><span>第二步：安装数据补丁</span></h2>
<p><span>运行升级命令为了数据补丁采取行动：</span><code>php bin/magento setup:upgrade</code></p>
<p><span>现在我们的客户属性已安装。</span></p>
<p><span><span>我们希望这些简单的步骤可以帮助您在 Magento 2 中添加您需要的自定义客户属性。</span><span>如果您有任何问题，请在评论中提出。</span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Mon, 31 Oct 2022 08:28:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加自定义 CSS 文件]]></title>
      <link>https://www.360magento.com/blog/How-to-add-Custom-CSS-File-in-Magento2/</link>
      <description><![CDATA[<p><span>在本文中，我们将讨论</span><span>&ldquo;如何在 Magento 2 中自定义 CSS&rdquo;</span><span>，它可以帮助您自定义 Magento 中的所有样式，例如布局、字体粗细、颜色、背景等。它可以加载一些文件，如 URL、 CDN、库等。</span></p>
<p><span><span>在 Magento 2 中，您可以在 Module 或 Theme 中包含自定义 CSS。</span><span>通常，您包含的样式表应该适用于所有商店页面，您将在布局</span></span><code>default_head_blocks.xml</code><span>或特定加载样式中包含一个 CSS 文件，每个页面都有一个布局。</span></p>
<h2><span>在模块中包含 CSS</span></h2>
<p><span><span>在本例中，我们将创建模块，并</span><span>在模块的</span><span><span>view/frontend/layout</span></span></span><code>Magenest_CustomCss</code><span>文件夹中添加一个</span><span>default_head_blocks.xml</span><span><span>文件，对于特定布局的自定义 CSS，我们将从</span><span><span>default_head_block.xml</span></span><span>布局开始。</span><span>它将适用于 Magento 中的所有页面。</span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span>  <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>css</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magenest_CustomCss::css/css-module.css<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span>

After that, add the web/css/source/less-custom.less file.

body {
    background: pink;
}</pre>
<p><span>这是使用以下命令清除缓存后的结果：</span><code>php bin/magento cache:flush</code></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/1_1.jpg" width="800" /></div>
<p><span><span>如果您想为特定布局自定义 CSS，则需要页面的布局，这与模块或主题中的 less 文件类似的步骤。</span><span>这是</span></span><span>catalog_product_view.xml</span><span>的一个例子：</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;page</span></span></span><span><span></span></span></span> <span class="token attr-name"><span class="token namespace"><span><span>xmlns:</span></span></span><span><span> xsi </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> http://www.w3.org/2001/XMLSchema-instance </span></span><span class="token punctuation"><span><span>"</span></span></span></span>
      <span class="token attr-name"><span><span> layout </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> 2columns-left </span></span><span class="token punctuation"><span><span>" </span></span></span></span>
     <span class="token attr-name"><span class="token namespace"><span><span>xsi:</span></span></span><span><span> noNamespaceSchemaLocation </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> urn:magento:framework:View/Layout/etc/page_configuration.xsd </span></span><span class="token punctuation"><span><span>"</span></span></span></span><span class="token punctuation"><span><span> &gt; </span></span></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> head </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> css </span></span></span> <span class="token attr-name"><span><span>src </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> css/local.css </span></span><span class="token punctuation"><span><span>"</span></span></span></span> <span class="token punctuation"><span><span> /&gt; </span></span></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> head </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> page </span></span></span><span class="token punctuation"><span><span>&gt;</span></span></span></span></pre>
<p><span>结果将如下图所示：</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/2_1.jpg" width="800" /></div>
<p><span>我们可以进入带有布局主页的页面或</span><code>catalog_product_view.xml</code></p>
<p><span>和</span><code>catalog_product_view</code></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/3_1.jpg" width="800" /></div>
<p><span>最后，我们将检查页面是否有布局</span><code>catalog_category_view.xml</code></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/4_1.jpg" width="800" /></div>
<h2><span>在主题中包含 CSS</span></h2>
<p><span><span>Theme 添加 CSS 的方式与 Module 类似，但这里有一点不同。</span><span>它是目录的结构。</span></span></p>
<p><span><span class="tadv-color">第一步：</span></span><span><span><span>您需要在/app/design/frontend/&lt;Vendor&gt;/&lt;Theme_Name&gt;/web/css/local.css</span></span><span>中创建一个 css 文件&nbsp;</span></span><span><span></span></span></p>
<p><span><span class="tadv-color">第二步：</span></span><span>在这一步中，创建</span><span>default_head_blocks.xml</span><span>文件</span></p>
<p><span>app/design/frontend/&lt;供应商&gt;/&lt;Theme_Name&gt;/&lt;Module_NameSpace&gt;/layout/</span></p>
<p><span><span class="tadv-color">第三步：</span></span><span>在</span><code>default_head_blocks.xml</code><span>中，使用</span><span>css 标签 (&lt;css&gt;)</span><span>包含我们在第 2 步创建的 css 文件。</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;page</span></span></span><span><span></span></span></span> <span class="token attr-name"><span class="token namespace"><span><span>xmlns:</span></span></span><span><span> xsi </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> http://www.w3.org/2001/XMLSchema-instance </span></span><span class="token punctuation"><span><span>"</span></span></span></span>
      <span class="token attr-name"><span><span> layout </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> 2columns-left </span></span><span class="token punctuation"><span><span>" </span></span></span></span>
      <span class="token attr-name"><span class="token namespace"><span><span>xsi:</span></span></span><span><span> noNamespaceSchemaLocation </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> urn:magento:framework:View/Layout/etc/page_configuration.xsd </span></span><span class="token punctuation"><span><span>"</span></span></span></span><span class="token punctuation"><span><span> &gt; </span></span></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> head </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> css </span></span></span> <span class="token attr-name"><span><span>src </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> css/local.css </span></span><span class="token punctuation"><span><span>"</span></span></span></span> <span class="token punctuation"><span><span> /&gt; </span></span></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> head </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> page </span></span></span><span class="token punctuation"><span><span>&gt;</span></span></span></span><span><br /></span></pre>
<p><span><span class="tadv-color">第四步：在local.css文件中添加以下代码。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">body {
    background: blue;
}</pre>
<p><span><span class="tadv-color">第五步：</span></span><span>在 Magento 根目录下运行 clear cache 命令。&nbsp;</span></p>
<p><span>结果会是这样：背景变成了蓝色：</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/5_1.jpg" width="800" /></div>
<p><span><span>在 Magento 2 中创建自定义 CSS 文件很容易，对吧？</span><span>我们希望您可以使用 CSS 来修改 Magento 店面，以获得更好的用户体验。</span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Sun, 30 Oct 2022 08:28:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何以编程方式在 Magento 2 中将产品添加到愿望清单]]></title>
      <link>https://www.360magento.com/blog/How-to-Add-Product-to-Wishlist-in-Magento2-Programmatically/</link>
      <description><![CDATA[<p><span><span>Magento 2 Wishlist 允许用户将产品添加到他们的收藏夹中，这将为下次购买节省时间。</span><span>此外，愿望清单也可以通过电子邮件与任何人共享。</span></span></p>
<p><span>本文将指导您如何以编程方式将产品添加到 Magento 2 的愿望清单中。</span></p>
<h2><span>如何将产品添加到愿望清单</span></h2>
<p><span>要将产品添加到愿望清单，我们需要两个参数：</span><span>产品对象</span><span>和</span><span>客户 ID</span><span>。</span></p>
<ul>
<li><span>Product Object</span><span><span>：可以通过Product SKU或者Id获取。</span><span>例如，使用此方法从</span></span><span>SKU</span><span>获取产品：</span><em><code>Magento\Catalog\Api\ProductRepositoryInterface::get($sku)</code></em></li>
<li><span>客户 ID</span><span><span>。</span><span>可以使用此方法为当前登录的客户获取前端客户 ID：</span></span><em><code>Magento\Customer\Model\Session::getId()</code></em></li>
</ul>
<p><span>要保存产品，首先加载客户的愿望清单，然后通过愿望清单模型添加产品。</span></p>
<p><span>编码示例：</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>

<span class="token keyword">class</span> <span class="token class-name">AddProductToWishlist</span>
<span class="token punctuation">{</span>
   <span class="token keyword">protected</span> <span class="token variable">$_wishlistFactory</span><span class="token punctuation">;</span>
   <span class="token keyword">protected</span> <span class="token variable">$_wishlistResource</span><span class="token punctuation">;</span>

   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span>
       Magento\<span class="token package">Wishlist<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>WishlistFactory</span> <span class="token variable">$wishlistFactory</span><span class="token punctuation">,</span>
       Magento\<span class="token package">Wishlist<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>ResourceModel<span class="token punctuation">\</span>Wishlist</span> <span class="token variable">$wishlistResource</span>
   <span class="token punctuation">)</span> <span class="token punctuation">{</span>
       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_wishlistFactory</span>  <span class="token operator">=</span> <span class="token variable">$wishlistFactory</span><span class="token punctuation">;</span>
       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_wishlistResource</span> <span class="token operator">=</span> <span class="token variable">$wishlistResource</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>

   <span class="token comment">/**
    * @param $product
    * @param $customerId
    *
    * @throws \Magento\Framework\Exception\AlreadyExistsException
    * @throws \Magento\Framework\Exception\LocalizedException
    */</span>
   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">saveProductToWishlist</span><span class="token punctuation">(</span><span class="token variable">$product</span><span class="token punctuation">,</span> <span class="token variable">$customerId</span><span class="token punctuation">)</span>
   <span class="token punctuation">{</span>
       <span class="token comment">//load wishlist by customer id</span>
       <span class="token variable">$wishlist</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_wishlistFactory</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">loadByCustomerId</span><span class="token punctuation">(</span><span class="token variable">$customerId</span><span class="token punctuation">,</span> <span class="token boolean constant">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

       <span class="token comment">//add product for wishlist</span>
       <span class="token variable">$wishlist</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">addNewItem</span><span class="token punctuation">(</span><span class="token variable">$product</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

       <span class="token comment">//save wishlist</span>
       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">_wishlistResource</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">save</span><span class="token punctuation">(</span><span class="token variable">$wishlist</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span></span></pre>
<p><span>结果如下：该产品已在前端成功添加到用户的收藏列表中。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/3.png" width="800" /></div>
<h2><span>结论</span></h2>
<p><span><span>Magento 2 Wishlist 是一种方便的方式来跟踪您喜欢但尚未准备好购买的产品。</span><span>您的愿望清单中的物品可以与他人共享或添加到购物车中。</span><span>为用户带来更好的体验。</span></span></p>
<p><span><span>默认情况下，Magento 仅支持每个客户的一个愿望清单。</span><span>对于</span></span><span>多个愿望清单，您可以</span><span></span><span>在这里</span><span><span>查看我们的免费扩展</span><span>。</span></span></p>
<p><span><span>我们希望您从这篇文章中学到了一些有用的东西。</span><span>如果出现任何问题，请在评论中告诉我们。</span></span></p>
<p><span>感谢您的阅读！</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Sat, 29 Oct 2022 08:32:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 页面的布局中移动块、容器]]></title>
      <link>https://www.360magento.com/blog/How-to-move-block-container-in-a-layout-in-a-Magento2-page/</link>
      <description><![CDATA[<p><span>今天，我们将了解如何使用layout.xml</span><span><span>将 Magento 2 中的元素（块、容器等）移动到页面的不同部分</span><span>。</span></span></p>
<h2><span>如何</span><span>在 Magento 2 中移动块</span></h2>
<p><span>首先，我们需要编辑布局 xml 文件以移动块。&nbsp;</span></p>
<p><span>布局 xml 可用于：&nbsp;</span></p>
<ul>
<li><span>将元素移动到另一个元素</span></li>
<li><span>添加或删除一些元素&nbsp;</span></li>
</ul>
<p><span>但在本篇博客的范围内，我们将重点关注如何将元素移动到另一个元素。</span></p>
<p><span>要将块移动到另一个目的地，我们需要使用</span><code>&lt;move&gt;</code><span>带有特定元素名称和目的地位置的标签。</span></p>
<p><code>&lt;move&gt;</code><span>标记将按指定顺序将声明的块或容器元素设置为另一个元素的子元素。</span></p>
<p><span>例子</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>move element<span class="token operator">=</span><span class="token double-quoted-string string">"page.main.title"</span> destination<span class="token operator">=</span><span class="token double-quoted-string string">"product.info.main"</span> before<span class="token operator">=</span><span class="token double-quoted-string string">"product.info.price"</span><span class="token operator">/</span><span class="token operator">&gt;</span></pre>
<p><span><span>在这个例子中。</span><span>我将块名称&ldquo;&nbsp;</span></span><span>page.main.title</span><span>&nbsp;&rdquo;移动到&ldquo;&nbsp;</span><span>product.info.price</span><span><span>&nbsp;&rdquo;元素</span><span>之前的&ldquo;&nbsp;</span></span><span>product.info.main &rdquo;。</span><span></span></p>
<p><span>使用</span><code>&lt;move&gt;</code><span>标签时，这些属性是必需的：</span><span>元素</span><span>、</span><span>目的地</span><span>。</span></p>
<p><span>这些属性： before 和 after 用于指定元素应该放在目标元素之前或之后。</span></p>
<p><span><span>使用可以使用破折号 (-) 将块定位在其嵌套级别的所有其他同级之前或之后。</span><span>如果省略这些属性，则该元素将放置在所有兄弟元素之后。</span></span></p>
<p><span>请记住：</span></p>
<ul>
<li><code>&lt;move&gt;</code><span>如果要移动的元素未定义，则跳过。</span></li>
<li><span><span>如果未定义 as 属性，则使用元素别名的当前值。</span><span>如果这不可能，则使用 name 属性的值。</span></span></li>
<li><span><span>在布局生成期间，&lt;move&gt; 指令在移除之前处理​​（使用 remove 属性设置）。</span><span>这意味着如果任何元素被移动到计划删除的元素，它们也将被删除</span></span></li>
</ul>
<p class="has-medium-font-size"><span><span class="tadv-color">动手吧！</span></span></p>
<p><span>在此博客中，我将指导您如何将价格块移动到产品详细信息页面上的另一个位置。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/1.png" width="800" /></div>
<p><span><span>如上图所示，红色矩形是价格块。</span><span>我们将把那个块移到另一个地方：</span></span><span>product.info.main</span></p>
<p><span>步骤 1：</span><span><span>您需要在</span><span><span>module/view/frontend/layout/中创建</span></span></span><span>catalog_product_view.xml</span><span>文件</span><span><span></span></span></p>
<p><span><span>因为产品详情页面是前端页面并且它使用这个布局文件catalog_product_view.xml。</span><span>这样我们就需要在正确的前端范围和正确的布局xml文件名中创建。</span></span></p>
<p><span>步骤 2：为</span><span><span><span>catalog_product_view.xml</span></span><span>添加内容</span></span><span><span></span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>move</span> <span class="token attr-name">element</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>product.info.price<span class="token punctuation">"</span></span> <span class="token attr-name">destination</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>product.info.main<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span></pre>
<p><span>第 3 步：</span><span>通过以下命令清理布局缓存：</span><code>php bin/magento cache:clean</code><span>layout.</span></p>
<p><span>这是结果：</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/2.png" width="800" /></div>
<p><span>如您所见，价格块已成功移动到</span><span>product.info.main</span><span>部分。</span></p>
<h2><span><span>如何</span><span>在 Magento 2中</span></span><span>移动容器</span><span></span></h2>
<p><span>移动容器与移动块非常相似，如果需要，您还需要指定元素名称、目的地、之前或之后。</span></p>
<p><span><span>这就是通过布局 XML 文件移动 Magento 2 中的元素的全部内容。</span><span>如果您有任何疑问或问题，请随时与我们联系。</span><span>谢谢！</span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Fri, 28 Oct 2022 08:29:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中删除块、容器、静态资源]]></title>
      <link>https://www.360magento.com/blog/How-to-remove-block-container-static-resource-in-Magento2/</link>
      <description><![CDATA[<p><span><span>Magento 2 使店主能够在各个方面为客户提供最佳体验。</span><span>自定义前端以吸引和吸引用户很容易。</span><span>在本文中，我们将展示 Magento 2 开发人员的基本自定义之一：删除</span></span><span>块</span><span>、</span><span>容器</span><span>和</span><span>静态资源</span><span>。</span></p>
<h2><span>1.如何删除块</span></h2>
<p><span>块是一个页面输出单元，它呈现一些独特的内容（对最终用户来说是视觉上可见的任何内容），例如一条信息或用户界面元素。</span></p>
<p><span>在 Magento 2 中从布局中删除块的步骤：</span></p>
<p><span>您的代码将如下所示：</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>referenceBlock</span> <span class="token attr-name">&lt;em</span><span class="token punctuation">&gt;</span></span>name<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>em</span><span class="token punctuation">&gt;</span></span>="product.info.overview" <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>em</span><span class="token punctuation">&gt;</span></span>remove<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>em</span><span class="token punctuation">&gt;</span></span>="true"/&gt; </pre>
<p><span>例如，从产品页面中删除描述块：</span></p>
<p><span>在</span><span>catalog_product_view.xml</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>referenceBlock</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>product.info.overview<span class="token punctuation">"</span></span> <span class="token attr-name">remove</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span></pre>
<p><span>在此，我使用</span><code>&lt;referenceBlock&gt;</code><span>删除块。</span></p>
<p><code>Name</code><span>是要删除的块的名称。</span></p>
<p><code>Remove</code><span><span>设置为 true 以删除。</span><span>刷新</span></span><span>缓存</span><span>后，整个描述将从产品页面中删除。</span></p>
<h2><span>2. 如何移除容器</span></h2>
<p><span><span>容器在视图输出生成期间呈现子元素。</span><span>它可以是空的，也可以包含任意一组 &lt;container&gt; 和 &lt;block&gt; 元素。</span><span>如果 &lt;container&gt; 为空，并且没有子 &lt;block&gt; 可用，则不会在前端源代码中显示。</span></span></p>
<p><span>在 Magento 2 中从布局中删除容器的步骤：</span></p>
<p><span>您的代码将如下所示：</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> referenceContainer</span></span></span> <span class="token attr-name"><span><span>名称</span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>&ldquo;</span></span></span><span><span>内容</span></span><span class="token punctuation"><span><span>&rdquo;</span></span></span></span> <span class="token attr-name"><span><span>移除</span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>&ldquo;</span></span></span><span><span>真</span></span><span class="token punctuation"><span><span>&rdquo;</span></span></span></span><span class="token punctuation"><span><span> /&gt;</span></span></span></span></pre>
<p><span>例如，从产品页面中删除内容：</span></p>
<p><span>在</span><span>catalog_product_view.xml</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt; </span>

<span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;page</span></span></span><span><span></span></span></span> <span class="token attr-name"><span class="token namespace"><span><span>xmlns:</span></span></span><span><span> xsi </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> http://www.w3.org/2001/XMLSchema-instance </span></span><span class="token punctuation"><span><span>" </span></span></span></span> <span class="token attr-name"><span class="token namespace"><span><span>xsi:</span></span></span><span><span> noNamespaceSchemaLocation </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> urn:magento:framework:View/Layout/etc/ page_configuration.xsd </span></span><span class="token punctuation"><span><span>"</span></span></span></span><span class="token punctuation"><span><span> &gt; </span></span></span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> body </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;</span></span></span><span><span> referenceContainer </span></span></span> <span class="token attr-name"><span><span>name </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> content </span></span><span class="token punctuation"><span><span>"</span></span></span></span> <span class="token attr-name"><span><span> remove </span></span></span><span class="token attr-value"><span class="token punctuation"><span><span>= </span></span></span><span class="token punctuation"><span><span>"</span></span></span><span><span> true </span></span><span class="token punctuation"><span><span>"</span></span></span></span><span class="token punctuation"><span><span> /&gt; </span></span></span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> body </span></span></span><span class="token punctuation"><span><span>&gt; </span></span></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><span><span>&lt;/</span></span></span><span><span> page </span></span></span><span class="token punctuation"><span><span>&gt;</span></span></span></span></pre>
<p><span>除了移除块之外，我曾经</span><code>&lt;referenceContainer&gt;</code><span>移除容器。</span></p>
<p><code>Name</code><span>是我要删除的容器的名称。</span></p>
<p><code>Remove</code><span><span>设置为 true 以删除。</span><span>刷新缓存后，内容将从</span></span><span>产品页面</span><span>中删除。</span></p>
<h2><span>3. 如何移除静态资源（JavaScript、CSS、字体）</span></h2>
<p><span><span>要删除页面中链接的静态资源，请在扩展</span><span><span>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml</span></span></span><code>&lt;head&gt;</code><span><span>的主题中进行类似以下的更改</span><span>：</span></span><span><span></span></span><span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>head</span><span class="token punctuation">&gt;</span></span>
       <span class="token comment">&lt;!-- Remove local resources --&gt;</span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>css/styles-m.css<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>my-js.js<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento_Catalog::js/compare.js<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
       <span class="token comment">&lt;!-- Remove external resources --&gt;</span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js<span class="token punctuation">"</span></span><span class="token punctuation">/&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>remove</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://fonts.googleapis.com/css?family=Montserrat<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>head</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span></pre>
<p><span>请注意，如果在初始布局中添加了带有模块路径（例如 Magento_Catalog::js/sample.js）的静态资产，则在删除资产时也需要指定模块路径。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Thu, 27 Oct 2022 08:27:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置税收规则、税率]]></title>
      <link>https://www.360magento.com/blog/How-to-setup-Tax-Rules-Tax-Rates-in-Magento2/</link>
      <description><![CDATA[<p><span>为了帮助企业轻松扩展到国际市场，Magento 2 允许您为每个地区和产品创建和设置不同的税率。</span></p>
<p><span>我们希望本文能帮助您更好地了解 Magento 2 中的税收。</span></p>
<h2><span>创建税率</span></h2>
<p><span>登录到您的管理页面，点击</span><span>商店-&gt;税区</span><span><span>和税率</span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/1.jpg" width="800" /></p>
<p><span>点击</span><span>添加新税率</span></p>
<div class="wp-block-image wp-image-7115"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/2.jpg" width="800" /></div>
<p><span>现在，您可以配置税率</span></p>
<ul>
<li><span>Tax Identifier&nbsp;</span><span>- 用于内部识别的税的名称</span></li>
<li><span>邮编/邮政是范围</span><span>- 如果选中，您将能够在此下方的两个字段中设置邮政编码范围</span></li>
<li><span>州</span><span>- 您希望征收税率的州（如果您的国家没有州，此选项将显示为灰色）</span></li>
<li><span>国家</span><span>- 您希望对其征收税率的国家</span></li>
<li><span>税率百分比</span><span>- 客户需要支付的税率百分比</span></li>
</ul>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/3.jpg" width="800" /></div>
<p><span>单击&ldquo;</span><span>保存税率&rdquo;</span><span>按钮以保存税率。</span></p>
<h2><span>创建税收规则</span></h2>
<p><span>点击</span><span>税收规则</span></p>
<div class="wp-block-image"><img alt="创建税收规则 Magento 2" class="wp-image-7118" src="https://store.magenest.com/wp/wp-content/uploads/2020/07/creat-a-tax-rules.jpg" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/4.jpg" width="800" /></div>
<p><br /><span>点击</span><span>添加新的税收规则</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/5.jpg" width="800" /><img alt="添加新的税收规则 Magento 2" class="wp-image-7119" src="https://store.magenest.com/wp/wp-content/uploads/2020/07/add-new-tax-rules.jpg" /></div>
<h3><span>税收规则信息</span></h3>
<ul>
<li><span>名称</span><span>- 您的税则名称</span></li>
<li><span>税率</span><span>- 选择您想要的税率</span></li>
<li><span>添加新税率</span><span>- 创建新税率</span></li>
</ul>
<div class="wp-block-image wp-image-7120"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/6.jpg" width="800" /></div>
<h3><span>其他设置</span></h3>
<ul>
<li><span>客户税类</span><span>&ndash; 您可以从现有的税类中进行选择、编辑或按添加新税类来创建新的客户税类。</span></li>
<li><span>产品税级</span><span>&mdash;&mdash;从现有的列表中选择、编辑它们或通过按下下面的按钮创建一个全新的产品税级。</span></li>
<li><span>优先级</span><span><span><span>- 指明规则优先级，以防适用不止一种税。</span><span>优先级相同的税收会加起来，不同优先级的税收会复合。</span></span></span></li>
<li><span>仅计算小计</span><span>- 选中复选框以根据订单小计计算税金。</span></li>
<li><span>排序顺序</span><span>&ndash; 列表中税收规则的顺序。</span></li>
</ul>
<div class="wp-block-image wp-image-7121"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1024/7.jpg" width="800" /></div>
<p><span>您可以导入税率和出口税率</span></p>
<p><span>单击</span><span>保存规则</span><span>按钮以保存税收规则。</span></p>
<p><span><span><span>感谢您阅读这篇文章。</span><span>如果出现任何问题，请在评论中告诉我们</span></span></span><span>。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Wed, 26 Oct 2022 08:29:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在侧边栏列 Magento 2 中添加静态块？]]></title>
      <link>https://www.360magento.com/blog/How-to-add-a-static-block-in-a-sidebar-column-Magento2/</link>
      <description><![CDATA[<p><span>今天，我们将展示一种在侧边栏列中添加静态块的简单方法，您可以使用该块向客户显示重要通知。&nbsp;</span></p>
<h2><span>使用 Magento 2 的默认功能创建静态块</span></h2>
<p><span>首先，您必须在管理端创建一个 CMS 静态块，这是 Magento 2 的一个很棒的默认功能。</span></p>
<p><span>访问后端 &gt; 内容 &gt; 块 &gt; 添加新块</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/6_1.png" width="800" /></div>
<h2><span>另一种使用 DataPatch 创建静态块 CSM 的方法。</span></h2>
<p><span>您必须在此路径中添加以下代码：'&nbsp;</span><em>Magenest/StaticBlock/Setup/Patch/Data/CreateStaticBlock.php</em><span><span>&nbsp;'。</span><span>您可以将名称编辑为您想要的任何名称。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>

<span class="token keyword">namespace</span> <span class="token package">Magenest<span class="token punctuation">\</span>StaticBlock<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>Patch<span class="token punctuation">\</span>Data</span><span class="token punctuation">;</span>

<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>Patch<span class="token punctuation">\</span>DataPatchInterface</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Setup<span class="token punctuation">\</span>ModuleDataSetupInterface</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Magento<span class="token punctuation">\</span>Cms<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>BlockFactory</span><span class="token punctuation">;</span>
<span class="token comment">/**
* Class UpdateTest2Block
* @package Test\CmsExport\Setup\Patch\Data
*/</span>
<span class="token keyword">class</span> <span class="token class-name">CreateStaticBlock</span> <span class="token keyword">implements</span> <span class="token class-name">DataPatchInterface</span>
<span class="token punctuation">{</span>
   <span class="token comment">/**
    * @var ModuleDataSetupInterface
    */</span>
   <span class="token keyword">private</span> <span class="token variable">$moduleDataSetup</span><span class="token punctuation">;</span>

   <span class="token comment">/**
    * @var BlockFactory
    */</span>
   <span class="token keyword">private</span> <span class="token variable">$blockFactory</span><span class="token punctuation">;</span>

   <span class="token comment">/**
    * AddAccessViolationPageAndAssignB2CCustomers constructor.
    * @param ModuleDataSetupInterface $moduleDataSetup
    * @param BlockFactory $blockFactory
    */</span>
   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span><span class="token punctuation">(</span>
       ModuleDataSetupInterface <span class="token variable">$moduleDataSetup</span><span class="token punctuation">,</span>
       BlockFactory <span class="token variable">$blockFactory</span>
   <span class="token punctuation">)</span> <span class="token punctuation">{</span>
       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">moduleDataSetup</span> <span class="token operator">=</span> <span class="token variable">$moduleDataSetup</span><span class="token punctuation">;</span>
       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">blockFactory</span> <span class="token operator">=</span> <span class="token variable">$blockFactory</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>

   <span class="token comment">/**
    * {@inheritdoc}
    */</span>
   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">apply</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
   <span class="token punctuation">{</span>
       <span class="token variable">$newCmsStaticBlock</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
           <span class="token single-quoted-string string">'title'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'Static Block created by using DataPatch'</span><span class="token punctuation">,</span>
           <span class="token single-quoted-string string">'identifier'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'static-block-created-by-datapatch'</span><span class="token punctuation">,</span>
           <span class="token single-quoted-string string">'content'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token single-quoted-string string">'&lt;h3&gt;Static Block created by using DataPatch&lt;/h3&gt;'</span><span class="token punctuation">,</span>
           <span class="token single-quoted-string string">'is_active'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token number">1</span><span class="token punctuation">,</span>
           <span class="token single-quoted-string string">'stores'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> \<span class="token package">Magento<span class="token punctuation">\</span>Store<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Store</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">DEFAULT_STORE_ID</span>
       <span class="token punctuation">]</span><span class="token punctuation">;</span>

       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">moduleDataSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">startSetup</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

       <span class="token comment">/** @var \Magento\Cms\Model\Block $block */</span>
       <span class="token variable">$block</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">blockFactory</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
       <span class="token variable">$block</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setData</span><span class="token punctuation">(</span><span class="token variable">$newCmsStaticBlock</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

       <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">moduleDataSetup</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">endSetup</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>

   <span class="token comment">/**
    * {@inheritdoc}
    */</span>
   <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function">getDependencies</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
   <span class="token punctuation">{</span>
       <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>

   <span class="token comment">/**
    * {@inheritdoc}
    */</span>
   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getAliases</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
   <span class="token punctuation">{</span>
       <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span></span></pre>
<p><span>运行命令</span><span>php bin/magento setup:upgrade</span><span>将静态块添加到数据库中。</span></p>
<p><span><span>其次，我们需要创建一个新模块 (Magenest_StaticBlock) 和一个您想要添加 CMS 静态块的布局。</span><span>在我们的模块中，我们将此块添加到默认布局中，以便它可以显示在每个具有容器名称'&nbsp;</span></span><em>sidebar.additional</em><span>&nbsp;'路径的页面中：</span><em>Magentest/StaticBlock/view/frontend/layout/default.xml</em></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>referenceContainer</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sidebar.additional<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>block</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Magento\Cms\Block\Block<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sidebar_custom_static_block<span class="token punctuation">"</span></span> <span class="token attr-name">as</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sidebar_custom_static_block<span class="token punctuation">"</span></span> <span class="token attr-name">after</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>catalog.compare.sidebar<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>arguments</span><span class="token punctuation">&gt;</span></span>
                   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>argument</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>block_id<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>string<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>sidebar-customer-static-block<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>argument</span><span class="token punctuation">&gt;</span></span>
               <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>arguments</span><span class="token punctuation">&gt;</span></span>
           <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>block</span><span class="token punctuation">&gt;</span></span>
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>referenceContainer</span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span></pre>
<p><span><span>block_id 是我们自定义 CMS 静态块中的标识符值。</span><span>上述 CMS 静态块的 block_id 是&ldquo;&nbsp;</span></span><em>sidebar-customer-static-block</em><span>&nbsp;&rdquo;，它是通过 Backend 或&ldquo;&nbsp;</span><em>static-block-created-by-datapatch</em><span>&nbsp;&rdquo;（由代码创建）创建的。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/7_1.png" width="800" /></div>
<p><span>最后，您可以看到 CMS 静态块的内容出现在侧边栏中。</span></p>
<p><span>希望本指南对您有用。&nbsp;</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为英语</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将英语翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译英语</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Tue, 25 Oct 2022 08:23:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中以客户身份登录 - 分步指南]]></title>
      <link>https://www.360magento.com/blog/How-to-login-as-customer-in-Magento2-A-Step-by-Step-Guide/</link>
      <description><![CDATA[<p><span><span>有时客户需要订单帮助，这需要商店管理员在客户的视图下调查问题。</span><span>从</span></span><span>Magento 2.4</span><span>开始，Magento 2 以客户身份登录功能已可用于 Magento 的开源和企业版本。</span></p>
<h2><span>启用 Magento 2 以客户身份登录</span></h2>
<h3><span>启用该功能</span></h3>
<ol>
<li><span>在管理页面中单击</span><span>Stores -&gt; Settings -&gt; Configuration</span><span>。</span></li>
<li><span>在左侧面板中，展开</span><span>客户</span><span>并选择</span><span>Login as Customer</span><span>。</span></li>
</ol>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/1_1.png" width="800" /></div>
<p><span>描述配置中的字段</span></p>
<div class="table-wrapper">
<div>
<table class="wp-block-table">
<tbody>
<tr>
<td><span>选项</span></td>
<td><span>价值</span></td>
<td><span>描述</span></td>
</tr>
<tr>
<td><span>启用以客户身份登录</span></td>
<td><span>是/否</span></td>
<td><span>启用/禁用以客户身份登录功能</span></td>
</tr>
<tr>
<td><span>为管理员用户禁用页面缓存</span></td>
<td><span>是/否</span></td>
<td><span>如果是，将为管理员用户禁用页面缓存。</span></td>
</tr>
<tr>
<td><span>要登录的商店视图</span></td>
<td><span>自动检测（默认）/手动选择</span></td>
<td><span><span>自动使用该公司用户的默认商店设置。</span><span>如果您希望管理员用户在以客户身份登录时选择商店视图，请使用手动选择。</span></span></td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>3. 完成后，点击</span><span>保存配置</span><span>并</span><span>清除缓存</span></p>
<h3><span>以客户身份登录</span></h3>
<p><span><span>以客户身份登录允许您以客户身份查看网站，并允许您以客户身份进行故障排除和采取其他操作。</span><span>此功能需要管理员帐户有权访问客户 &gt; 以客户身份登录。</span></span></p>
<p><span>从</span><span>Magento 2.4.1</span><span><span>开始，客户还必须</span><span>在管理员登录之前从他们的仪表板启用</span></span><em>允许远程购物帮助：</em><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/2_1.png" width="800" /></p>
<p><span>如果客户未启用此选项，则当管理员尝试登录其帐户时，将显示错误消息：&ldquo;</span><span><span><span>用户未启用&ldquo;允许远程购物协助&rdquo;功能。</span><span>联系客户讨论此用户配置。</span></span></span><span>&rdquo;</span></p>
<p><span><span>要跳过这个额外的步骤，商店管理员可以</span><span>通过命令行禁用模块</span></span><span>LoginAsCustomerAssistance ：</span><span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">php bin<span class="token operator">/</span>magento module<span class="token punctuation">:</span>disable Magento_LoginAsCustomerAssistance</pre>
<p><span>然后重新部署站点。</span></p>
<p><span>以客户身份登录</span><span>出现在以下页面上：</span></p>
<ul>
<li><span>客户编辑页面</span></li>
</ul>
<ol>
<li><span>在</span><em>管理</em><span>侧边栏上，转到</span><span>客户 -&gt; 所有客户。</span></li>
<li><span>在网格中找到客户，然后单击</span><em>操作</em><span>列中的编辑。</span></li>
<li><span>在顶部控制栏上，单击&ldquo;</span><span>以客户身份登录</span><span>&rdquo;</span></li>
</ol>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/3_1.png" width="800" /></div>
<ul>
<li><span>订单查看页面</span></li>
</ul>
<ol>
<li><span>在</span><em>Admin</em><span>侧边栏上，转到</span><span>Sales</span><span>&nbsp;-&gt;&nbsp;</span><span>Orders</span><span>。</span></li>
<li><span>在网格中查找顺序。</span></li>
<li><span>在</span><em>操作</em><span>列中，单击</span><span>查看</span><span>。</span></li>
<li><span>点击&ldquo;</span><span>以客户身份登录</span><span>&rdquo;</span></li>
</ol>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/4_1.png" width="800" /></div>
<ul>
<li><span>发票查看页面</span></li>
<li><span>货件查看页面</span></li>
<li><span>贷项凭单查看页面</span></li>
</ul>
<p><span>管理员连接将显示在标题上。</span><span>关闭会话</span><span>按钮将结束登录会话清除相关缓存</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/5_1.png" width="800" /></div>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Mon, 24 Oct 2022 08:27:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置店内取货功能]]></title>
      <link>https://www.360magento.com/blog/How-to-configure-in-store-pickup-function-in-Magento2/</link>
      <description><![CDATA[<p><span><span>Magento 2.4 于 7 月底发布，具有许多出色的功能，可以帮助店主优化电子商务网站的客户体验。</span><span>这个新版本最强大的功能之一是</span></span><span>Magento 店内取货</span><span>，为买家提供了另一种下订单后获取商品的方式：到实体店取货。</span></p>
<p><span>在本文中，我们将为您提供配置 Magento 店内取货的分步指南。</span></p>
<h2><span>Magento 店内取货功能是什么？</span></h2>
<p><span>店内取货 (ISPU) 是</span><span>Magento 2.4</span><span><span>中的一项新功能，允许客户在线下订单并从实体店取货。</span><span>Magento 中的订单管理系统 (OMS) 提供了一个基于 Web 的界面，允许商店员工挑选和准备商品以供客户取货。</span></span></p>
<h2><span>您什么时候需要使用店内取货？</span></h2>
<p><span>客户在网上购物以尽量减少接触，但他们想要那种熟悉的实体店体验。</span></p>
<h2><span>如何设置 Magento 店内取货功能</span></h2>
<h3><span>第 1 步：启用多源库存 (MSI)</span></h3>
<p><span>首先，您的网站必须启用 MSI 功能。&nbsp;</span></p>
<p><span>请按照以下步骤添加新来源：</span></p>
<ul>
<li><span>在管理侧边栏上，转到</span><span>商店 &gt; 库存 &gt; 来源</span></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/6.png" width="800" /></p>
<ul>
<li><span>单击</span><span>添加新源</span><span>按钮。</span></li>
</ul>
<ul>
<li><span>现在您将填写表格以配置新源的一些信息：</span></li>
</ul>
<p><span>&gt;</span><span>一般部分</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/7.png" width="800" /></p>
<p><span><em>名称</em></span><em>：</em><span>标识库存源的唯一名称</span><br /><span><em>代码</em></span><em>：</em><span>源代码是分配给库存和导出/导入数据时使用的唯一 ID 已</span><br /><span><em>启用</em></span><span>：如果此库存源可以使用，则将其设置为是</span><br /><span><em>描述</em></span><span>：简要说明此位置用于快速参考或其他详细信息</span><br /><span><em>纬度和经度</em></span><span>：这里是设施位置的 GPS 坐标</span><br /><span><em>用作取件位置</em></span><span>：我们将在下一步中设置。</span></p>
<p><span>&gt;</span><span>联系方式</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/8.png" width="800" /></p>
<p><span><em>联系人姓名</em></span><span>：输入该位置主要联系人的全名。</span><br /><span><em>电子邮件</em></span><span>：输入用于联系该位置的电子邮件地址。</span><br /><span><em>电话</em></span><span>：输入区号和电话号码。</span><br /><span><em>传真</em></span><span>：输入传真的区号和电话号码（如果有）。</span></p>
<p><span>&gt;</span><span>地址数据</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/9.png" width="800" /></p>
<p><span><em>国家</em></span><span>：选择国家。</span><br /><span><em>州/省</em></span><span>：输入州或省的标准缩写。</span><br /><span><em>城市</em></span><span>：输入城市。</span><br /><span><em>街道</em></span><span>：输入实际街道地址。</span><br /><span><em>邮政编码</em></span><span>：输入邮政编码。</span></p>
<ul>
<li><span>按</span><span>保存</span><span>按钮完成工作。</span></li>
</ul>
<h3><span>第 2 步：启用 Magento 店内取货功能</span></h3>
<p><span><span>* 要在结帐页面上显示选择商店取货的选项，您必须</span><span>在</span><span><span>送货方式</span></span><span>设置中启用</span></span><span>店内送货。</span><span><span>转到</span><span><span>商店 &gt; 配置 &gt; 销售 &gt; 交货方式</span></span></span><span><span></span></span><span></span><span><span></span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/10.png" width="800" /></p>
<p><span>* 要将来源设为取货地点，请按照以下步骤操作：</span></p>
<ul>
<li><span><span>转到</span><span><span>商店 &gt; 库存 &gt; 来源下的</span></span></span><span>管理来源</span><span>页面</span><span><span></span></span></li>
</ul>
<ul>
<li><span>编辑将被设置为取货地点的来源</span></li>
</ul>
<ul>
<li><span>启用&ldquo;</span><span><em>用作取货地点</em></span><span><span>&rdquo;字段。</span><span>之后，&ldquo;</span></span><span>取货地点</span><span>&rdquo;部分将出现并提供有关该地点的描述信息</span>
<ul>
<li><span><em>Frontend Name</em></span><span>&nbsp;: 取货地点的名称</span></li>
<li><span><em>前端描述</em></span><span>：您可以输入有关位置的更多详细信息，例如商店营业时间、相对于其他地标的位置，或任何有助于客户选择正确取货位置的有用信息</span></li>
</ul>
</li>
</ul>
<ul>
<li><span>最后，单击</span><span>保存</span><span>按钮。</span></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/11.png" width="800" /></p>
<h2><span>店面代表</span></h2>
<p><span>完成店内取货配置后，客户可以在结账时选择</span><em>配送</em><span>和店内取货</span><em>。</em></p>
<p><span><span>如果客户选择店内取货方式，则会根据他们保存的送货地址的位置自动选择取货地点。</span><span>客户还可以更改选择的取货地点。&nbsp;</span></span></p>
<p><span>对于访客用户，客户必须手动选择取货地点。&nbsp;&nbsp;</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/12.png" width="800" /></p>
<p><span>此外，商家还可以通过店内取货选项从后端下单：</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/13.png" width="800" /></p>
<p class="has-medium-font-size"><span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Sun, 23 Oct 2022 08:22:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取库存状态警报不足]]></title>
      <link>https://www.360magento.com/blog/How-to-get-stock-status-alert-deficient-in-Magento2/</link>
      <description><![CDATA[<p><span>今天，我们将展示在 Magento 2 中获取库存状态警报不足的方法。如果产品的数量下降到设置中的</span><span>Notify for Quantity below 之下</span><span>，系统将通知管理员产品处于低库存状态。</span></p>
<p><em lang="zh">例子：</em></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/1.png" width="800" /></div>
<p><span lang="zh">产品数量为 3</span><br /><span lang="zh">下面的数量通知是 3</span><br /><span lang="zh">客户购买此产品，库存为 1</span><br /><span lang="zh">管理员为此订单创建发货，因此数量降至 2</span><br /><span><span><span>系统将通知管理员该产品的库存状态。</span><span>您可以通过访问</span></span><em><span><span><span>报告 &gt; 产品 &gt; 低库存查看通知</span></span></span></em></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/2.png" width="800" /></p>
<p><span lang="zh"><span><span>有 3 种方法可以设置</span></span><span><span><span>以下数量通知</span></span></span></span><span>：</span></p>
<ul>
<li lang="zh"><span>为所有产品设置。</span></li>
<li lang="zh"><span>为特定产品设置。</span></li>
<li lang="zh"><span>针对特定的产品来源进行设置。</span></li>
</ul>
<h2><span lang="zh">3 种设置以下数量通知的方法</span></h2>
<h3><span lang="zh">1 - 为所有产品设置</span></h3>
<p lang="zh"><span>访问</span><em><span>商店 &gt; 设置 &gt; 配置 &gt; 目录 &gt; 库存 &gt; 产品库存选项 &gt; 通知以下数量</span></em></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/3.png" width="800" /></p>
<p><span>注意：</span><span>此配置为整个网站/商店的所有产品全局设置默认值。</span></p>
<h3><span lang="zh">2 - 为特定产品设置</span></h3>
<p lang="zh"><span>访问</span><span><em>目录 &gt; 产品 &gt; 特定产品 &gt; 高级库存 &gt; 通知以下数量</em></span></p>
<p><img alt="" class="wp-image-9747" src="https://store.magenest.com/wp/wp-content/uploads/2020/11/image2-1024x537.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/4.png" width="800" /></p>
<p><span>注意：</span><span><span>此配置会覆盖在网站/商店级别设置的值。</span><span>该值适用于产品的所有来源。</span></span></p>
<h3><span lang="zh">3 - 设置特定的产品来源</span></h3>
<p lang="zh"><span>访问</span><span><em>目录 &gt; 产品 &gt; 特定产品 &gt; 来源 &gt; 通知数量</em></span></p>
<p><span><span>如果您的站点有多个来源，则会为特定来源设置数量和通知数量。</span><span>如果不是，它将获得默认值。</span></span></p>
<p><img alt="" class="wp-image-9748" src="https://store.magenest.com/wp/wp-content/uploads/2020/11/image4-1024x538.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1014/5.png" width="800" /></p>
<p><span>注意：</span><span><span>此配置会覆盖所有其他设置。</span><span>商家可以为特定产品的每个来源分配不同的阈值。</span></span></p>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Sat, 22 Oct 2022 08:29:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取产品库存]]></title>
      <link>https://www.360magento.com/blog/How-to-get-Product-Stock-in-Magento2/</link>
      <description><![CDATA[<p><span><span>库存管理是电子商务管理中不可或缺的一部分。</span><span>在某些情况下，出于许多不同的原因，我们需要获取产品的库存信息。</span><span>例如，您需要检查产品是否有库存以将其显示在类别页面上，或者防止客户将缺货的产品添加到购物车等许多情况。&nbsp;</span></span></p>
<p><span>在本文中，我们将逐步指导您获取产品库存 Magento 2。</span></p>
<h2><span>从管理页面获取产品库存信息</span></h2>
<p><span>作为管理员，您可以在分类产品网格中获取产品的库存信息：</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/1_3.png" width="800" /></div>
<p><span>或者在产品创建/编辑表单中，您可以编辑数量（每个来源）或查看产品的可销售数量。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/2_3.png" width="800" /></div>
<h2><span>对于开发人员</span></h2>
<p><span><span>作为开发人员，您还需要了解产品库存信息，例如缺货状态、库存状态、剩余数量、最大数量、最小数量&hellip;&hellip;以及许多其他信息。</span><span>Magento 2 支持开发人员获取产品库存信息的一些方法。</span></span></p>
<p><span><span><span>使用StockItemRepository</span></span><span>获取特定产品的库存信息</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token variable">$productId</span> <span class="token operator">=</span> <span class="token number">620</span><span class="token punctuation">;</span>
<span class="token comment">/** @var \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItem */</span>

<span class="token variable">$stockItem</span> <span class="token operator">=</span> \<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>ObjectManager</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">get</span><span class="token punctuation">(</span>\<span class="token package">Magento<span class="token punctuation">\</span>CatalogInventory<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>Stock<span class="token punctuation">\</span>StockItemRepository</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span>

<span class="token comment">// Retrieve backorders status</span>
<span class="token keyword">echo</span> <span class="token variable">$stockItem</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getBackorders</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// Get quantity of item remaining in stock</span>
<span class="token keyword">echo</span> <span class="token double-quoted-string string">"qty: "</span><span class="token punctuation">.</span><span class="token variable">$stockItem</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getQty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// Get stock status</span>
<span class="token keyword">echo</span> <span class="token variable">$stockItem</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getIsInStock</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// Retrieve Maximum Qty Allowed in Shopping Cart data wrapper</span>
<span class="token keyword">echo</span> <span class="token double-quoted-string string">"max sale qty: "</span><span class="token punctuation">.</span><span class="token variable">$stockItem</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getMaxSaleQty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></pre>
<p><span><span><span>使用GetSourceItemsDataBySku</span></span><span>检索产品多源数量</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token comment">// To retrieve product multi-source quantities, you can use GetSourceItemsDataBySku</span>

<span class="token comment">/** @var \Magento\InventoryCatalogAdminUi\Model\GetSourceItemsDataBySku $sourceDataBySku */</span>
<span class="token comment">//use ObjectManager to get \Magento\InventoryCatalogAdminUi\Model\GetSourceItemsDataBySku instance</span>

<span class="token variable">$sku</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"24-MB01"</span><span class="token punctuation">;</span> <span class="token comment">//sku of product</span>

<span class="token variable">$sourceDataBySku</span> <span class="token operator">=</span> \<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>ObjectManager</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">get</span><span class="token punctuation">(</span>\<span class="token package">Magento<span class="token punctuation">\</span>InventoryCatalogAdminUi<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>GetSourceItemsDataBySku</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">//load quantities of assigned source</span>
<span class="token variable">$data</span> <span class="token operator">=</span> <span class="token variable">$sourceDataBySku</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$sku</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// the returned data should be an array including source name, source code, qty of the product in source, source status</span>
<span class="token comment">// data = array(</span>
<span class="token comment">//  array(</span>
<span class="token comment">//      'source_code' =&gt; "example",</span>
<span class="token comment">//      'quantity' =&gt; 100,</span>
<span class="token comment">//      'status' =&gt; 1</span>
<span class="token comment">//      'name' =&gt; "Example"</span>
<span class="token comment">//      'source_status' =&gt; true</span>
<span class="token comment">//)</span>

<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></pre>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token punctuation"><span></span></span><span class="token punctuation"><span></span></span><span class="token punctuation"><span></span></span></pre>
<p><span><span>产品存储库用于加载特定产品的所有信息。</span><span>因此，它也用于获取股票信息。&nbsp;</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
   <span class="token comment">//use product repository to get stock data</span>
  <span class="token variable">$sku</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"883985891715"</span><span class="token punctuation">;</span>
<span class="token comment">/** @var Magento\Catalog\Model\ProductRepository $productRepository */</span>
   <span class="token variable">$productRepository</span> <span class="token operator">=</span> \<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>ObjectManager</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">get</span><span class="token punctuation">(</span>Magento\<span class="token package">Catalog<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>ProductRepository</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token variable">$product</span> <span class="token operator">=</span> <span class="token variable">$productRepository</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token variable">$sku</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$product</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
       <span class="token keyword">echo</span> <span class="token variable">$product</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isSalable</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Check is product available for sale</span>
       <span class="token keyword">echo</span> <span class="token variable">$product</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isAvailable</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Check whether the product type or stock allows to purchase the product</span>
       <span class="token keyword">echo</span> <span class="token variable">$product</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getQty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> get quantity of product

   <span class="token punctuation">}</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></pre>
<p><span><span>产品集合对于获取产品列表中的库存信息也很有用。</span><span>您还可以使用库存属性来过滤或从集合中获取数据。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token comment">/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */</span>
<span class="token variable">$productCollection</span> <span class="token operator">=</span> \<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>App<span class="token punctuation">\</span>ObjectManager</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">get</span><span class="token punctuation">(</span>\<span class="token package">Magento<span class="token punctuation">\</span>Catalog<span class="token punctuation">\</span>Model<span class="token punctuation">\</span>ResourceModel<span class="token punctuation">\</span>Product<span class="token punctuation">\</span>Collection</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">//use  salable option to filter product in collection</span>
<span class="token variable">$data</span> <span class="token operator">=</span>  <span class="token variable">$productCollection</span>
<span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">addAttributeToFilter</span><span class="token punctuation">(</span><span class="token double-quoted-string string">"is_saleable"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span>
<span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setPageSize</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span>
<span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">toArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></pre>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Fri, 21 Oct 2022 08:24:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中使用多个送货地址]]></title>
      <link>https://www.360magento.com/blog/How-to-use-multiple-shipping-addresses-in-Magento2/</link>
      <description><![CDATA[<h3><span>先决条件：设置通讯录</span></h3>
<p><span>第 1 步：</span><span>转到</span><em>我的帐户 &gt; 通讯录</em></p>
<p><span>第 2 步：</span><span>输入您的默认送货地址</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/14_1.png" width="800" /></div>
<p><span>第 3 步：</span><span>添加新地址</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/15_1.png" width="800" /></div>
<h3><span>多个送货地址</span></h3>
<p><span>第 1 步：</span><span>选择您的产品并添加到购物车</span></p>
<p><span>第 2 步：</span><span>选择</span><em>查看和编辑购物车</em></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/1_2.png" width="800" /></div>
<p><span>第 3 步：</span><span>选择</span><em>多地址结帐</em></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/2_2.png" width="800" /></div>
<p><span>第 4 步：</span><span>选择购物车中每件商品的送货地址，然后选择</span><span>前往送货信息</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/3_1.png" width="800" /></div>
<p><span>第 5 步：</span><span><span>您可以查看按送货地址过滤的所有商品及其详细信息。</span><span>选择 Continue to Billing Information 继续下订单。&nbsp;</span></span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/4_1.png" width="800" /></div>
<p><span>下订单后，您将有 2 个具有 2 个不同送货地址的订单。</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/5_1.png" width="800" /></div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Thu, 20 Oct 2022 08:31:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置多个送货地址]]></title>
      <link>https://www.360magento.com/blog/How-to-Configure-Multiple-Shipping-Addresses-in-Magento2/</link>
      <description><![CDATA[<p><span><span>一个非常实际的情况是&ldquo;如果您需要将订单运送到 2 个或更多不同的地址，则必须创建具有不同送货地址的不同订单&rdquo;。</span><span>这个解决方案会导致一个问题，如果您有多个收货地址，您必须创建各种订单，多次结帐......这给客户带来了不便。</span></span></p>
<p><span>因此，Magento 2 创建了多个送货地址功能，可将您的订单划分为每个商品的多个地址。</span></p>
<h2><span>店主如何在 Magento 2 中配置多个送货地址</span></h2>
<p><span>第 1 步：</span><span>登录 Magento 2 管理页面</span></p>
<p><span>第 2 步：</span><span>选择</span><em>商店 &gt; 配置</em></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/1_1.png" width="800" /></div>
<p><span>第 3 步：</span><span>在选项卡</span><span>Configuration</span><span>中，展开</span><span>Sales</span><span>面板并选择</span><span>Multishiping Settings</span></p>
<div class="wp-block-image"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/2_1.png" width="800" /></div>
<p><span>第 4 步：</span><span>在</span><span>选项</span><span>部分，将</span><em>允许运送到多个地址</em><span>更改为是或勾选</span><em>使用系统值</em><span>（默认为是）并输入</span><em>允许运送到多个地址的最大数量</em><span>的数量或勾选</span><em>使用系统值</em><span>（默认为 100）。</span></p>
<ul>
<li><em>允许送货到多个地址：</em><span>配置客户是否可以在店面使用多个送货地址。</span></li>
<li><em>允许运送到多个地址</em><span><span>的最大数量：配置订单中可用于多个运送地址的最大商品数量。</span><span>例如，此配置设置为 10 件商品，而您的购物车中有 11 件商品，则不能使用多收货地址功能。</span></span></li>
</ul>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Wed, 19 Oct 2022 08:35:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建色板属性]]></title>
      <link>https://www.360magento.com/blog/How-to-Create-Swatches-Properties-in-Magento2/</link>
      <description><![CDATA[<p><span><span>在本文中，我们将介绍</span><span>使用内置产品属性管理系统&nbsp;在</span></span><span>Magento 2上为产品创建样本的步骤。</span><span></span></p>
<p><span><span>Magento 支持颜色样本和基于文本的样本。</span><span>无法选择的选项被划掉或模糊。</span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/1.png" width="800" /></span></p>
<p><span>Magento 2 色板：基于颜色和文本的色板</span></p>
<h2><span>在 Magento</span><span>&nbsp;2中配置色板</span></h2>
<p><span>要创建色板，请转到</span><em>Admin &gt; Stores &gt; Attributes &gt; Product</em><span>，单击</span><em>Add New Attribute</em><span>。</span></p>
<h3><span>完成基本属性</span></h3>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/2.png" width="800" /></p>
<p>插入<em>默认标签</em>来描述属性。</p>
<p><span>在</span><em>Store Owner 的目录输入类型中</em><span>，选择类型是文本样本或视觉样本。</span></p>
<ul>
<li><span>带文字色板</span>
<ul>
<li><span>在管理色板下，单击</span><em>添加色板</em><span>。</span></li>
<li><span><span>为列表中显示的第一个值命名，同时，当您有多个商店视图时，您可以在 Admin 下命名该值，并为每个商店视图命名不同的值。</span><span>如果只有一个商店视图，则管理员值会自动应用于店面。</span></span></li>
<li><span>单击</span><em>添加</em><span>色板并再次执行上述指南以获取下一个色板。</span></li>
<li><span><span>如果要将其用作默认值，请</span><span>标记为</span></span><em>默认值复选框。</em><span></span></li>
</ul>
</li>
</ul>
<p><img alt="" class="wp-image-10607" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image9-1024x175.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/3.png" width="800" /></p>
<ul>
<li><span>使用视觉样本：</span>
<ul>
<li><span>在管理色板下，单击</span><em>添加色板</em><span>。</span></li>
<li><span>为样本选择颜色或上传文件。</span></li>
<li><span>默认商店视图是在前端显示的样本的名称。</span></li>
<li><span>单击</span><em>添加</em><span>色板并再次执行上述指南以获取下一个色板。</span></li>
<li><span><span>如果要将其用作默认值，请</span><span>标记为</span></span><em>默认值复选框。</em><span></span></li>
</ul>
</li>
</ul>
<p><span></span><em>为所需的值</em><span><span>选择是，</span><span>以要求客户在购买前选择选项。</span></span></p>
<p><span></span><em>在选择不同的色板时，为更新产品预览图像</em><span><span>选择是以更新</span><span>目录页面和产品页面上的产品图像。</span></span></p>
<p><span></span><em>对于视觉样本，如果可能，请为样本使用产品图像</em><span><span>选择是，</span><span>以允许使用后备逻辑将样本图像替换为产品样本或基本图像。</span></span></p>
<h3><span>完成高级属性（可选）</span></h3>
<p><img alt="" class="wp-image-10609" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image12-1024x474.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/4.png" width="800" /></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/5.png" width="800" /></p>
<ul>
<li><span><span>插入</span><span>少于 60 个符号的</span></span><em>属性代码，不要使用空格。</em><span></span></li>
<li><span></span><em>范围</em><span><span>包括商店视图、网站和全球</span><span>。</span><span>您将在商店系统中选择属性外观被批准的三个位置之一。</span></span></li>
<li><span></span><em>如果您</em><span><span>不想与其他产品共享，请</span><span>应用唯一值。</span></span></li>
<li><span></span><em>为&ldquo;添加到列选项</em><span><span>&rdquo;选择&ldquo;是&rdquo;</span><span>以将此属性添加到产品网格中的列选项列表中。</span></span></li>
<li><span></span><em>为在过滤器选项</em><span><span>中使用选择是，</span><span>以将此属性添加到产品网格中的过滤器选项列表中。</span></span></li>
</ul>
<h3><span>管理标签部分</span></h3>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/6.png" width="800" /></p>
<p><span><span>插入</span><span>为字段标签显示的</span></span><em>标题。</em><span>如果您的商店支持多种语言，请为每个视图插入标题的翻译。</span></p>
<h3><span>店面属性</span></h3>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/7.png" width="800" /></p>
<ul>
<li><span></span><em>为&ldquo;在搜索中使用</em><span><span>&rdquo;选择&ldquo;是&rdquo;</span><span>以准备好搜索属性。</span></span></li>
<li><span></span><em>如果您在&ldquo;店面可比&rdquo;</em><span><span>字段</span><span>中选择&ldquo;是&rdquo;，则允许在&ldquo;产品比较&rdquo;中比较产品属性。</span></span></li>
<li><span></span><em>在&ldquo;用于促销规则条件&rdquo;</em><span><span>字段中选择&ldquo;是&rdquo;</span><span>以将产品属性应用于价格规则。</span></span></li>
<li><span>要使该属性在目录页面列表中可见，请在&ldquo;</span><em>在店面目录页面上可见&rdquo;</em><span>字段中选择&ldquo;是&rdquo;。</span></li>
<li><span><span>如果您的商店支持产品列表，则可以显示该属性并将其用作排序参数。</span><span>从&ldquo;</span></span><em>用于产品列表</em><span>&rdquo;和&ldquo;用于在产品列表</span><em>中排序&rdquo;</em><span>字段中配置它。</span></li>
<li><span>保存属性以完成所有操作。</span></li>
</ul>
<h2><span>更新产品</span></h2>
<p><span>在管理侧边栏上，选择</span><em>目录 &gt; 产品</em><span>并选择可配置产品。</span></p>
<p><span>在配置部分中，单击</span><span>编辑配置</span><span>。</span></p>
<p><img alt="" class="wp-image-10615" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image3-1-1024x460.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/8.png" width="800" /></p>
<p><span>选择要添加到可配置产品的属性，然后单击</span><span>下一步</span><span>。</span></p>
<p><img alt="" class="wp-image-10617" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image2-1-1024x480.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/9.png" width="800" /></p>
<p><span>然后，选择属性值。</span></p>
<p><img alt="" class="wp-image-10618" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image6-1-1024x486.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/10.png" width="800" /></p>
<p><span>接下来，选择图像、价格和数量选项。</span></p>
<p><img alt="" class="wp-image-10616" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image1-1-1024x485.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/11.png" width="800" /></p>
<p><span>接下来，您将显示所有新产品，在其中单击</span><em>Generate Product</em><span>。</span></p>
<p><img alt="" class="wp-image-10619" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image15-1024x482.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/12.png" width="800" /></p>
<p><span>设置价格和数量，然后点击</span><em>保存</em><span>。</span></p>
<p><img alt="" class="wp-image-10620" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image16-1024x484.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/13.png" width="800" /></p>
<p><span>选择</span><em>Affected Attribute Set</em><span>然后点击</span><em>Confirm</em><span>。</span></p>
<p><img alt="" class="wp-image-10621" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image10-1024x275.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/14.png" width="800" /></p>
<p><span>最后，刷新缓存，然后重新加载编辑页面并查看结果。</span></p>
<p><img alt="" class="wp-image-10622" src="https://store.magenest.com/wp/wp-content/uploads/2020/12/image14-1024x482.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1013/15.png" width="800" /></p>
<p><span></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Tue, 18 Oct 2022 08:27:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中使用 Modal 小部件创建弹出窗口]]></title>
      <link>https://www.360magento.com/blog/How-to-create-a-popup-using-Modal-widget-in-Magento2/</link>
      <description><![CDATA[<p><span>在使用 Magento 2 时，我们尝试利用 Magento 支持的所有实用程序，以避免不得不重新设计现有功能，这会耗费时间和精力。</span></p>
<p><span>在这篇文章中，我将解释如何在 Magento 2 中创建和调用模态弹出窗口小部件。</span></p>
<p><span><span><span>首先，我们有一个按钮。</span><span>单击它将显示一个弹出窗口。</span></span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>button id<span class="token operator">=</span><span class="token double-quoted-string string">"modal-btn"</span><span class="token operator">&gt;</span>Open Modal<span class="token operator">&lt;</span><span class="token operator">/</span>button<span class="token operator">&gt;</span></pre>
<h2><span>为弹出窗口创建内容</span></h2>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>div id<span class="token operator">=</span><span class="token double-quoted-string string">"modal-content"</span><span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token double-quoted-string string">"modal-inner-content"</span><span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span>h2<span class="token operator">&gt;</span>Modal Title<span class="token operator">&lt;</span><span class="token operator">/</span>h2<span class="token operator">&gt;</span>
        <span class="token operator">&lt;</span>p<span class="token operator">&gt;</span>Modal content<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token operator">&lt;</span><span class="token operator">/</span>p<span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">&gt;</span></pre>
<h2><span>使用 Magento 2 模态小部件</span></h2>
<p><span><span><span>我们现在需要同时需要 jQuery 和 jQuery UI。</span><span>为此，在您的 JS 脚本中，添加以下代码：</span></span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>script<span class="token operator">&gt;</span>
    <span class="token keyword">require</span><span class="token punctuation">(</span>
        <span class="token punctuation">[</span>
            <span class="token single-quoted-string string">'jquery'</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'Magento_Ui/js/modal/modal'</span>
        <span class="token punctuation">]</span><span class="token punctuation">,</span>
        <span class="token keyword">function</span><span class="token punctuation">(</span>$<span class="token punctuation">,</span> modal<span class="token punctuation">)</span> <span class="token punctuation">{</span> 
            <span class="token comment">// Your JS</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></pre>
<h2><span>设置模式</span>&nbsp;<span>小部件的选项</span></h2>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token keyword">var</span> options <span class="token operator">=</span> <span class="token punctuation">{</span>
    	type<span class="token punctuation">:</span> <span class="token single-quoted-string string">'popup'</span><span class="token punctuation">,</span>
    	responsive<span class="token punctuation">:</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
      innerScroll<span class="token punctuation">:</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
    	title<span class="token punctuation">:</span> <span class="token single-quoted-string string">'Pop-up title'</span><span class="token punctuation">,</span>
      buttons<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span>
         text<span class="token punctuation">:</span> $<span class="token punctuation">.</span>mage<span class="token punctuation">.</span><span class="token function">__</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'Close'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
         <span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token single-quoted-string string">'modal-close'</span><span class="token punctuation">,</span>
         click<span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
             this<span class="token punctuation">.</span><span class="token function">closeModal</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
         <span class="token punctuation">}</span>
    	<span class="token punctuation">}</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span></pre>
<h2><span>初始化模态</span>&nbsp;<span>小部件</span></h2>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token function">modal</span><span class="token punctuation">(</span>options<span class="token punctuation">,</span> $<span class="token punctuation">(</span><span class="token single-quoted-string string">'#modal-content'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre>
<p><span>单击按钮时创建事件将显示一个弹出窗口：</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$<span class="token punctuation">(</span><span class="token double-quoted-string string">"#modal-btn"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'click'</span><span class="token punctuation">,</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
    $<span class="token punctuation">(</span><span class="token double-quoted-string string">"#modal-content"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">modal</span><span class="token punctuation">(</span><span class="token double-quoted-string string">"openModal"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre>
<h2><span>结束</span></h2>
<p><span>完成上述所有步骤后，您的脚本应如下所示：</span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>script<span class="token operator">&gt;</span>
    <span class="token keyword">require</span><span class="token punctuation">(</span>
        <span class="token punctuation">[</span>
            <span class="token single-quoted-string string">'jquery'</span><span class="token punctuation">,</span>
            <span class="token single-quoted-string string">'Magento_Ui/js/modal/modal'</span>
        <span class="token punctuation">]</span><span class="token punctuation">,</span>
        <span class="token keyword">function</span><span class="token punctuation">(</span>$<span class="token punctuation">,</span> modal<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">var</span> options <span class="token operator">=</span> <span class="token punctuation">{</span>
                type<span class="token punctuation">:</span> <span class="token single-quoted-string string">'popup'</span><span class="token punctuation">,</span>
                responsive<span class="token punctuation">:</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
                innerScroll<span class="token punctuation">:</span> <span class="token boolean constant">true</span><span class="token punctuation">,</span>
                title<span class="token punctuation">:</span> <span class="token single-quoted-string string">'Pop-up title'</span><span class="token punctuation">,</span>
                buttons<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span>
                    text<span class="token punctuation">:</span> $<span class="token punctuation">.</span>mage<span class="token punctuation">.</span><span class="token function">__</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'Close'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
                    <span class="token keyword">class</span><span class="token punctuation">:</span> <span class="token single-quoted-string string">'modal-close'</span><span class="token punctuation">,</span>
                    click<span class="token punctuation">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                        this<span class="token punctuation">.</span><span class="token function">closeModal</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                    <span class="token punctuation">}</span>
                <span class="token punctuation">}</span><span class="token punctuation">]</span>
            <span class="token punctuation">}</span><span class="token punctuation">;</span>

            <span class="token function">modal</span><span class="token punctuation">(</span>options<span class="token punctuation">,</span> $<span class="token punctuation">(</span><span class="token single-quoted-string string">'#modal-content'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            $<span class="token punctuation">(</span><span class="token double-quoted-string string">"#modal-btn"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'click'</span><span class="token punctuation">,</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                $<span class="token punctuation">(</span><span class="token double-quoted-string string">"#modal-content"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">modal</span><span class="token punctuation">(</span><span class="token double-quoted-string string">"openModal"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></pre>
<h2><span>结果</span></h2>
<p><span>单击按钮时，我们会弹出一个弹出窗口</span><span>：</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/1_3.png" width="800" /></p>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Mon, 17 Oct 2022 08:28:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中验证表单的完整指南]]></title>
      <link>https://www.360magento.com/blog/The-Complete-Guide-on-How-to-Validate-Forms-in-Magento2/</link>
      <description><![CDATA[<p><span><span>Magento 应用程序提供了多种验证表单输入的方法。</span><span>在本文中，我将向您展示如何使用 javascript 在 Magento 2 中验证表单。</span></span></p>
<h2><span>要向表单添加验证，您需要启动验证</span></h2>
<p><span>有几种方法可以启动表单验证：</span><br /><span>- 使用 data-mage-init 属性</span></p>
<pre class="EnlighterJSRAW line-numbers language-js" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator"><span>&lt;</span></span><span> form id </span><span class="token operator"><span>= </span></span><span class="token string">"my-form"</span><span> data </span><span class="token operator"><span>-</span></span><span> mage </span><span class="token operator"><span>-</span></span><span> init </span><span class="token operator"><span>= </span></span><span class="token string">'{"validation": {}}' </span><span class="token operator"><span>&gt; </span></span>
    <span class="token operator"><span>... </span></span>
<span class="token operator"><span>&lt; </span></span><span class="token operator"><span>/</span></span><span> form </span><span class="token operator"><span>&gt;</span></span></pre>
<p><span>- 使用 text/x-magento-init 脚本类型标签</span></p>
<pre class="EnlighterJSRAW line-numbers language-js" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator"><span>&lt;</span></span><span> script type </span><span class="token operator"><span>= </span></span><span class="token string">"text/x-magento-init" </span><span class="token operator"><span>&gt; </span></span>
    <span class="token punctuation">{ </span>
        <span class="token string">"#my-form" </span><span class="token operator"><span>: </span></span> <span class="token punctuation">{ </span>
            <span class="token string">"validation" </span><span class="token operator"><span>: </span></span> <span class="token punctuation">{ </span><span class="token punctuation">} </span>
        <span class="token punctuation">} </span>
    <span class="token punctuation">} </span>
<span class="token operator"><span>&lt; </span></span><span class="token operator"><span>/</span></span><span> script </span><span class="token operator"><span>&gt;</span></span></pre>
<h2><span>将验证规则应用于您的输入字段</span></h2>
<p><span>在您的自定义表单中，您可以使用此处列出的以下方法之一为您的字段设置验证规则：</span><br /><span>- 方法 #1：使用&ldquo;data-validate&rdquo;属性</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;input id="field-name" type="text" data-validate='{"required":true}'/</span></pre>
<p><span>- 方法#2：使用规则名称作为属性</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;input id="field-1" ... required="true"/&gt;</span></pre>
<p><span>- 方法#3：使用规则名作为类名</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;input id="field-1" ... class="input-text required-entry"/&gt;</span></pre>
<p><span>- 方法#4：在表单标签的 data-mage-init 属性中设置规则</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;form ... data-mage-init='{"validation": {"rules": {"field-1": {"required":true}}}}'&gt; </span><span>
    ... </span><span>
&lt;/form&gt;</span></pre>
<h2><span>一些表单验证规则列表</span></h2>
<ul>
<li><span>验证密码</span></li>
<li><span>字母数字</span></li>
<li><span>仅限字母</span></li>
<li><span>无空格</span></li>
<li><span>最大字数</span></li>
<li><span>确认电邮</span></li>
<li><span>验证网址</span></li>
<li><span>验证数字</span></li>
<li><span>验证范围</span></li>
<li><span>验证标识符</span></li>
<li><span>仅限字母</span></li>
<li><span>字母数字</span></li>
<li><span>无空格</span></li>
<li><span>电话美国</span></li>
<li><span>英国电话</span></li>
<li><span>等等，...</span><br /><span>您可以在文件中检查这些所有验证逻辑：</span><em>lib/web/mage/validation.js</em></li>
</ul>
<p><span>示例</span><br /><span><span>我们创建一个自定义表单并为表单字段添加验证。</span><span>在这个表单中，我们使用&ldquo;data-mage-init&rdquo;属性来启动表单验证。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form class="form" id="custom-form" method="post" autocomplete="off" data-mage-init='{"validation": {}}'&gt;
   &lt;fieldset class="fieldset"&gt;
       &lt;legend class="legend"&gt;
        &lt;span&gt;Form Information&lt;/span&gt;
       &lt;/legend&gt;
       &lt;div class="field required"&gt;
           &lt;label for="email_address" class="label"&gt;
           &lt;span&gt;Email&lt;/span&gt;
           &lt;/label&gt;
       &lt;div class="control"&gt;
            &lt;input type="email" name="email" id="email" value=" "  title="Email"       data-validate="{required:true,  'validate-email':true}"&gt;
        &lt;/div&gt;
       &lt;/div&gt;
       &lt;div class="field name required"&gt;
           &lt;label class="label" for="name"&gt;&lt;span&gt;Name&lt;/span&gt;&lt;/label&gt;
           &lt;div class="control"&gt;
               &lt;input name="name" id="field-2" title="Name" value="" class="input-text" type="text" data-validate="{required:true}"/&gt;
           &lt;/div&gt;
       &lt;/div&gt;
   &lt;/fieldset&gt;
   &lt;div class="actions-toolbar"&gt;
       &lt;div class="primary"&gt;
           &lt;button type="submit" class="action submit primary" title="Submit"&gt;&lt;span&gt;Submit&lt;/span&gt;&lt;/button&gt;
       &lt;/div&gt;
   &lt;/div&gt;
&lt;/form&gt;</pre>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/13_1.png" width="800" /></span></pre>
<p><span>因此，我们已经学习了如何使用 javascript 和 Magento 2 的 validation.js 库来验证表单。希望这篇文章可以帮助您解决您的问题。</span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Sun, 16 Oct 2022 08:26:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中获取和设置 cookie]]></title>
      <link>https://www.360magento.com/blog/How-to-get-and-set-cookies-in-Magento2/</link>
      <description><![CDATA[<p><span>Cookie 是网络工作方式的必要组成部分。</span><span>网站使用 cookie 来跟踪用户并启用用户特定的功能。</span><span>因此，在本文中，我们将向大家展示如何在 Magento 2 中从 cookie 中获取和设置数据。</span></p>
<h2><span>创建类以管理 cookie</span></h2>
<p><span><span>第一步是在 app/code/Magentest/Helper 中设置一个 ExampleCookie.php 类。</span><span>ExampleCookie.php 包含以下内容：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
namespace Magenest\ManagerCookie\Helper;

use Magento\Framework\Session\SessionManagerInterface;

class ExampleCookie {

   protected $cookieManager;
   protected $cookieMetadataFactory;

   public function __construct(
       \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
       \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
       )
   {
       $this-&gt;cookieManager = $cookieManager;
       $this-&gt;cookieMetadataFactory = $cookieMetadataFactory;
    }

   /**
    * get cookie by name
    */
   public function getCookie($cookieName) {
       return $this-&gt;cookieManager-&gt;getCookie($cookieName);

   }

   /**
    * set public cookie
    */
   public function setPublicCookie($cookieName, $value) {

   $metadata = $this-&gt;cookieMetadataFactory
       -&gt;createPublicCookieMetadata()
       -&gt;setDuration(86400) // Cookie will expire after one day (86400 seconds)
       -&gt;setSecure(true) //the cookie is only available under HTTPS
       -&gt;setPath('/subfolder')// The cookie will be available to all pages and subdirectories within the /subfolder path
       -&gt;setHttpOnly(false); // cookies can be accessed by JS
  
   $this-&gt;_cookieManager-&gt;setPublicCookie(
       $cookieName,
       $value,
       $metadata
   );
}
   
   /**
    * set sensitive cookie
    */
 public function set Sensitive Cookie($cookieName, $value) {

   $metadata = $this-&gt;cookieMetadataFactory
       -&gt;createSensitiveCookieMetadata()
       -&gt;setPath('')// for global
       -&gt;setDomain('.example.com');// cookie will be available for www.example.com, example.com and will not be available for anotherexample.com

   $this-&gt;_cookieManager-&gt;setSensitiveCookie(
       $cookieName,
       $value,
       $metadata
   );
}

}</pre>
<p><span><span>关于在 Magento 中设置 cookie，首先，你们需要记住，我们在 Magento 中有两种类型的 cookie。</span><span>它们是公共和敏感 cookie：</span></span></p>
<ul>
<li><span>公共</span>&nbsp;<span>cookie</span><span><span>可以通过 JS 访问。</span><span>默认情况下，这些 cookie 的 HttpOnly 将设置为 false。</span></span></li>
<li><span>敏感的cookies</span><span><span>不能被客户端的JS访问，它只能在你的服务器上访问。</span><span>对于这些 cookie，HttpOnly 将始终设置为 true。&nbsp;</span></span></li>
</ul>
<p><span><span>设置 cookie 时，您设置了原始 cookie 数据和一些元数据。</span><span>此元数据包括cookie 的有效</span></span><span>路径</span><span>、cookie 过期时间的</span><span>Duration</span><span>等。</span></p>
<h2><span>在 Javascript 中使用 cookie</span></h2>
<p><span>在 javascript 中，您只需要包含</span><span>jquery/jquery.cookie</span><span>即可使用 cookie</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;script type="text/javascript"&gt;
   require([
       'jquery',
       'jquery/jquery.cookie'
   ], function ($) {
       $(document).ready(function () {

           var simple_cookie = $.cookie('name_cookie'); // Get Cookie Value, note: You can only get a cookie if it is public
           if(!simple_cookie) {
               $.cookie('name_cookie', 'value of cookie', {expires: 86400}); // Set Cookie with metadata (note the cookies set here are public)
           }else {
               console.log(simple_cookie);
           }
       });
&lt;/script&gt;</pre>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="z-index: 2; width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为中文（简体）</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将中文（简体）翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译中文（简体）</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Sat, 15 Oct 2022 08:29:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置联系我们表格和联系电子邮件]]></title>
      <link>https://www.360magento.com/blog/How-to-configure-Contact-Us-form-Contact-Email-in-Magento2/</link>
      <description><![CDATA[<p><span><span>联系我们表单为客户提供了一种与您的业务保持联系的简便方法。</span><span>更重要的是，联系我们表格还有助于让客户放心，有人在倾听他们的查询、投诉和反馈。</span></span></p>
<p><span>因此，在本博客中，我们将向您展示如何在 Magento 2 商店中配置联系我们表单。</span></p>
<h1><span>I.启用联系我们表格</span></h1>
<p><span>第 1 步：</span><span>在管理面板中，选择</span><span>Stores&gt;Configuration：</span></p>
<ul class="wp-block-gallery columns-1 is-cropped">
<li class="blocks-gallery-item"><img alt="" class="wp-image-13338" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_4-1024x549.png" data-id="13338" data-link="https://store.magenest.com/blog/?attachment_id=13338" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/8.png" width="800" /></li>
</ul>
<p><span>第 2 步：</span><span>在&ldquo;</span><span>常规</span><span>&rdquo;选项卡中导航到&ldquo;</span><span>联系人&rdquo;</span></p>
<ul class="wp-block-gallery columns-1 is-cropped">
<li class="blocks-gallery-item"><img alt="" class="wp-image-13339" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_5-1024x137.png" data-id="13339" data-link="https://store.magenest.com/blog/?attachment_id=13339" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/9.png" width="800" /></li>
</ul>
<p><span><span>为字段</span><span>设置</span></span><span>是</span><span></span><span>启用联系我们</span></p>
<p><span>第 3 步：</span><span><span>将您的联系电子邮件放入&ldquo;发送电子邮件至&rdquo;字段中。</span><span>在电子邮件发件人选项中选择将在电子邮件中设置的发件人姓名：</span></span></p>
<ul class="wp-block-gallery columns-1 is-cropped">
<li class="blocks-gallery-item"><img alt="" class="wp-image-13340" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_6-1024x217.png" data-id="13340" data-link="https://store.magenest.com/blog/?attachment_id=13340" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/10.png" width="800" /></li>
</ul>
<p><span><span>您可以在&ldquo;电子邮件模板&rdquo;选项中选择要用于消息的模板。</span><span>然后点击&nbsp;</span></span><span>保存配置</span><span>按钮</span></p>
<p><span>第 4 步：</span><span>在前端检查结果，查看默认的&ldquo;联系我们&rdquo;表单是否已显示：</span></p>
<p><span><img alt="" class="wp-image-13341" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_7-1024x566.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/11.png" width="800" /></span></p>
<h2><span>II.配置联系我们表格</span></h2>
<p><span>第 1 步：</span><span>转到</span><span>内容&gt;块：</span></p>
<p><span><img alt="" class="wp-image-13342" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_8-1024x543.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/12.png" width="800" /></span></p>
<p><span>第 2 步：</span><span>找到带有 Title&nbsp;</span><span>Contact us info</span><span><span>的块，然后在 Select 下拉菜单中</span><span>选择</span></span><span>Edit ：</span><span></span></p>
<p><span><img alt="" class="wp-image-13343" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_9-1024x551.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/13.png" width="800" /></span></p>
<p><span></span><span>您可以通过在内容</span><span>框中输入您的联系信息并</span><span>保存</span><span><span>块</span><span>来自定义您的联系我们表单。</span></span></p>
<p><span>第 3 步：</span><span>将</span><span>CAPTCHA</span><span>添加到&ldquo;</span><span>联系我们&rdquo;</span><span>表单</span></p>
<p><span>转到</span><span>商店 &gt; 配置 &gt; 客户 &gt; 客户配置</span></p>
<p><span><img alt="" class="wp-image-13344" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_10-1024x513.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/1_1.png" width="800" /></span></p>
<p><span>在选项卡验证码中&nbsp;</span></p>
<p><span><img alt="" class="wp-image-13345" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_11-1024x379.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/2_1.png" width="800" /></span></p>
<p><span></span><span>将&ldquo;在店面启用验证码&rdquo;</span><span><span>字段</span><span>设置为&ldquo;是&rdquo; 。</span><span>然后为字段表单选择联系我们以在此表单上添加验证码。</span><span>之后单击&ldquo;</span></span><span>保存配置</span><span><span>&rdquo;按钮。</span><span>StoreFront 中的结果：CAPTCHA 将添加到您的联系我们表单中：</span></span></p>
<p><span><img alt="" class="wp-image-13346" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_12.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/3_1.png" width="800" /></span></p>
<h2><span>III.自定义电子邮件联系表&nbsp;</span></h2>
<p><span>第 1 步：</span><span><span>在 app/code/YourVendor/YourModule/view/frontend/templates 中创建文件 form.phtml。</span><span>您可以在下面查看我们的示例代码：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;form class="form contact"
      action="&lt;?= $block-&gt;escapeUrl($block-&gt;getFormAction()) ?&gt;"
      id="contact-form"
      method="post"
      data-hasrequired="&lt;?= $block-&gt;escapeHtmlAttr(__('* Required Fields')) ?&gt;"
      data-mage-init='{"validation":{}}'&gt;
 
    &lt;fieldset class="fieldset"&gt;
        &lt;legend class="legend"&gt;&lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('Write Us')) ?&gt;&lt;/span&gt;&lt;/legend&gt;&lt;br /&gt;
        &lt;div class="field note no-label"&gt;&lt;?= $block-&gt;escapeHtml(__('Jot us a note and we&rsquo;ll get back to you as quickly as possible.')) ?&gt;&lt;/div&gt;
        &lt;div class="field name required"&gt;
            &lt;label class="label" for="name"&gt;&lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('Name')) ?&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;div class="control"&gt;
                &lt;input name="name" id="name" title="&lt;?= $block-&gt;escapeHtmlAttr(__('Name')) ?&gt;" value="&lt;?= $block-&gt;escapeHtmlAttr($this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getPostValue('name') ?: $this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getUserName()) ?&gt;" class="input-text" type="text" data-validate="{required:true}"/&gt;
            &lt;/div&gt;
        &lt;/div&gt;
 
       &lt;--New field customize--&gt;
        &lt;div class="field subject required"&gt;
             &lt;label class="label" for="subject"&gt;&lt;span&gt;&lt;?php /* @escapeNotVerified */ echo __('Subject') ?&gt;&lt;/span&gt;&lt;/label&gt;
             &lt;div class="control"&gt;
                  &lt;input name="subject" id="subject" title="&lt;?php /* @escapeNotVerified */ echo __('Subject') ?&gt;" value="" class="input-text" type="text" data-validate="{required:true}"/&gt;
             &lt;/div&gt;
        &lt;/div&gt;
 
        &lt;div class="field email required"&gt;
            &lt;label class="label" for="email"&gt;&lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('Email')) ?&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;div class="control"&gt;
                &lt;input name="email" id="email" title="&lt;?= $block-&gt;escapeHtmlAttr(__('Email')) ?&gt;" value="&lt;?= $block-&gt;escapeHtmlAttr($this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getPostValue('email') ?: $this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getUserEmail()) ?&gt;" class="input-text" type="email" data-validate="{required:true, 'validate-email':true}"/&gt;
            &lt;/div&gt;
        &lt;/div&gt;
 
        &lt;div class="field telephone"&gt;
            &lt;label class="label" for="telephone"&gt;&lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('Phone Number')) ?&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;div class="control"&gt;
                &lt;input name="telephone" id="telephone" title="&lt;?= $block-&gt;escapeHtmlAttr(__('Phone Number')) ?&gt;" value="&lt;?= $block-&gt;escapeHtmlAttr($this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getPostValue('telephone')) ?&gt;" class="input-text" type="text" /&gt;
            &lt;/div&gt;
        &lt;/div&gt;
 
        &lt;div class="field comment required"&gt;
            &lt;label class="label" for="comment"&gt;&lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('What&rsquo;s on your mind?')) ?&gt;&lt;/span&gt;&lt;/label&gt;
            &lt;div class="control"&gt;
                &lt;textarea name="comment" id="comment" title="&lt;?= $block-&gt;escapeHtmlAttr(__('What&rsquo;s on your mind?')) ?&gt;" class="input-text" cols="5" rows="3" data-validate="{required:true}"&gt;&lt;?= $block-&gt;escapeHtml($this-&gt;helper('Magento\Contact\Helper\Data')-&gt;getPostValue('comment')) ?&gt;&lt;/textarea&gt;
            &lt;/div&gt;
        &lt;/div&gt;
 
        &lt;?= $block-&gt;getChildHtml('form.additional.info') ?&gt;
    &lt;/fieldset&gt;
 
    &lt;div class="actions-toolbar"&gt;
        &lt;div class="primary"&gt;
            &lt;input type="hidden" name="hideit" id="hideit" value="" /&gt;
            &lt;button type="submit" title="&lt;?= $block-&gt;escapeHtmlAttr(__('Submit')) ?&gt;" class="action submit primary"&gt;
                &lt;span&gt;&lt;?= $block-&gt;escapeHtml(__('Submit')) ?&gt;&lt;/span&gt;
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/form&gt;</pre>
<p><span>第 2 步：</span><span><span>接下来，</span><span>在 app/code/YourVendor/YourModule/view/frontend/layout 中创建</span></span><span>contact_index_index.xml以用新的 form.phtml 文件覆盖之前的</span><span></span><span>form.phtml</span><span><span>文件。</span><span>看看我们下面的示例代码：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;?xml version="1.0"?&gt; </span><span>
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View /Layout/etc/page_configuration.xsd"&gt;     </span><span>
   &lt;body&gt;      </span><span>
      &lt;referenceBlock name="contactForm" remove="true"/&gt;    </span><span>
       &lt;referenceContainer name="content"&gt; </span><span>
           &lt;block class="Magento\Contact\Block\ContactForm" name= "customContactForm" template="Magenticians_Modulecontact::form.phtml" /&gt; </span><span>
       &lt;/referenceContainer&gt; </span><span>
   &lt;/body&gt; </span><span>
&lt;/page&gt;</span></pre>
<p><span>第 3 步：</span><span>转到</span><span>MARKETING &gt; Email Templates</span><span>并单击</span><span>Add New Template</span><span>按钮：</span></p>
<p><span><img alt="" class="wp-image-13347" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_13-1024x502.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/1_2.png" width="800" /></span></p>
<p><span><span>从</span><span><span>模板</span></span><span>字段中</span><span>选择</span></span><span>联系表格，然后单击</span><span><span><span>加载模板</span></span><span>按钮。</span><span>然后单击</span><span><span>保存模板</span></span><span>按钮。</span></span><span><span></span></span><span></span><span><span></span></span><span></span><span><span></span></span><span></span></p>
<p><span>第 4 步：</span><span>转到</span><span>商店 &gt; 配置 &gt; 常规 &gt; 联系人</span><span>选项卡：</span></p>
<p><span><img alt="" class="wp-image-13348" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_14-1024x461.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/2_2.png" width="800" /></span></p>
<p><span><span>选择</span><span>您为电子邮件模板字段创建的</span></span><span>我的自定义表单。</span><span>然后单击</span><span>保存配置</span><span>。</span></p>
<p><span>如果您已正确完成所有步骤，您的结果将是带有新字段主题的联系我们表单，如下面的屏幕截图：</span></p>
<p><span><img alt="" class="wp-image-13349" src="https://store.magenest.com/wp/wp-content/uploads/2021/04/Screenshot_15-1024x674.png" /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/3_2.png" width="800" /></span></p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>
<div class="TnITTtw-fp-collapsed-button" style="display: block;"></div>
<div class="TnITTtw-mate-fp-bar" style="width: 0px; height: 0px; opacity: 0; display: none;">
<div class="TnITTtw-hide-fp-bar" style="display: none;"></div>
<div class="TnITTtw-current-page-lang" style="display: none;">此页面的语言为英语</div>
<div class="TnITTtw-cta-button-layout" style="display: none;">
<div class="TnITTtw-spinner">
<div class="TnITTtw-bounce1"></div>
<div class="TnITTtw-bounce2"></div>
<div class="TnITTtw-bounce3"></div>
</div>
<div class="TnITTtw-mw-button TnITTtw-fp-translate TnITTtw-high-cta" style="display: none;">翻译为</div>
</div>
<div class="TnITTtw-change-language TnITTtw-select" style="display: none;" data-for-serial="3"></div>
<div class="TnITTtw-stop-fp"></div>
<div class="TnITTtw-toggle-iphone-settings" style="display: none;"></div>
<div class="TnITTtw-ui_selector" style="display: none;">
<div class="TnITTtw-options-arrow" style="display: none;"></div>
<div class="TnITTtw-options TnITTtw-opt-3 TnITTtw-standalone" style="display: none; z-index: 998;" data-serial="3">
<div class="TnITTtw-dd-search"><input class="TnITTtw-dd-input" type="text" data-dir="to" data-width="NaN" /></div>
<div id="selVisibleScroll-3">
<div id="selEntireScroll-3">
<div class="TnITTtw-inner-options-layout">
<ul class="TnITTtw-list">
<li class="lang-zh-CN TnITTtw-option"><span class="lang-zh-CN" id="lang-zh-CN">中文（简体）</span></li>
<li class="lang-zh-TW TnITTtw-option"><span class="lang-zh-TW" id="lang-zh-TW">中文（繁体）</span></li>
<li class="lang-da TnITTtw-option"><span class="lang-da" id="lang-da">丹麦语</span></li>
<li class="lang-uk TnITTtw-option"><span class="lang-uk" id="lang-uk">乌克兰语</span></li>
<li class="lang-ur TnITTtw-option"><span class="lang-ur" id="lang-ur">乌尔都语</span></li>
<li class="lang-hy TnITTtw-option"><span class="lang-hy" id="lang-hy">亚美尼亚语</span></li>
<li class="lang-ru TnITTtw-option"><span class="lang-ru" id="lang-ru">俄语</span></li>
<li class="lang-bg TnITTtw-option"><span class="lang-bg" id="lang-bg">保加利亚语</span></li>
<li class="lang-hr TnITTtw-option"><span class="lang-hr" id="lang-hr">克罗地亚语</span></li>
<li class="lang-is TnITTtw-option"><span class="lang-is" id="lang-is">冰岛语</span></li>
<li class="lang-ca TnITTtw-option"><span class="lang-ca" id="lang-ca">加泰罗尼亚语</span></li>
<li class="lang-hu TnITTtw-option"><span class="lang-hu" id="lang-hu">匈牙利语</span></li>
<li class="lang-kn TnITTtw-option"><span class="lang-kn" id="lang-kn">卡纳达语</span></li>
<li class="lang-hi TnITTtw-option"><span class="lang-hi" id="lang-hi">印地语</span></li>
<li class="lang-id TnITTtw-option"><span class="lang-id" id="lang-id">印尼语</span></li>
<li class="lang-gu TnITTtw-option"><span class="lang-gu" id="lang-gu">古吉拉特语</span></li>
<li class="lang-kk TnITTtw-option"><span class="lang-kk" id="lang-kk">哈萨克语</span></li>
<li class="lang-tr TnITTtw-option"><span class="lang-tr" id="lang-tr">土耳其语</span></li>
<li class="lang-cy TnITTtw-option"><span class="lang-cy" id="lang-cy">威尔士语</span></li>
<li class="lang-bn TnITTtw-option"><span class="lang-bn" id="lang-bn">孟加拉语</span></li>
<li class="lang-ne TnITTtw-option"><span class="lang-ne" id="lang-ne">尼泊尔语</span></li>
<li class="lang-af TnITTtw-option"><span class="lang-af" id="lang-af">布尔语(南非荷兰语)</span></li>
<li class="lang-iw TnITTtw-option"><span class="lang-iw" id="lang-iw">希伯来语</span></li>
<li class="lang-el TnITTtw-option"><span class="lang-el" id="lang-el">希腊语</span></li>
<li class="lang-ku TnITTtw-option"><span class="lang-ku" id="lang-ku">库尔德语</span></li>
<li class="lang-de TnITTtw-option"><span class="lang-de" id="lang-de">德语</span></li>
<li class="lang-it TnITTtw-option"><span class="lang-it" id="lang-it">意大利语</span></li>
<li class="lang-lv TnITTtw-option"><span class="lang-lv" id="lang-lv">拉脱维亚语</span></li>
<li class="lang-no TnITTtw-option"><span class="lang-no" id="lang-no">挪威语</span></li>
<li class="lang-cs TnITTtw-option"><span class="lang-cs" id="lang-cs">捷克语</span></li>
<li class="lang-sk TnITTtw-option"><span class="lang-sk" id="lang-sk">斯洛伐克语</span></li>
<li class="lang-sl TnITTtw-option"><span class="lang-sl" id="lang-sl">斯洛文尼亚语</span></li>
<li class="lang-pa TnITTtw-option"><span class="lang-pa" id="lang-pa">旁遮普语</span></li>
<li class="lang-ja TnITTtw-option"><span class="lang-ja" id="lang-ja">日语</span></li>
<li class="lang-ps TnITTtw-option"><span class="lang-ps" id="lang-ps">普什图语</span></li>
<li class="lang-mi TnITTtw-option"><span class="lang-mi" id="lang-mi">毛利语</span></li>
<li class="lang-fr TnITTtw-option"><span class="lang-fr" id="lang-fr">法语</span></li>
<li class="lang-pl TnITTtw-option"><span class="lang-pl" id="lang-pl">波兰语</span></li>
<li class="lang-fa TnITTtw-option"><span class="lang-fa" id="lang-fa">波斯语</span></li>
<li class="lang-te TnITTtw-option"><span class="lang-te" id="lang-te">泰卢固语</span></li>
<li class="lang-ta TnITTtw-option"><span class="lang-ta" id="lang-ta">泰米尔语</span></li>
<li class="lang-th TnITTtw-option"><span class="lang-th" id="lang-th">泰语</span></li>
<li class="lang-ht TnITTtw-option"><span class="lang-ht" id="lang-ht">海地克里奥尔语</span></li>
<li class="lang-et TnITTtw-option"><span class="lang-et" id="lang-et">爱沙尼亚语</span></li>
<li class="lang-sv TnITTtw-option"><span class="lang-sv" id="lang-sv">瑞典语</span></li>
<li class="lang-lt TnITTtw-option"><span class="lang-lt" id="lang-lt">立陶宛语</span></li>
<li class="lang-my TnITTtw-option"><span class="lang-my" id="lang-my">缅甸语</span></li>
<li class="lang-ro TnITTtw-option"><span class="lang-ro" id="lang-ro">罗马尼亚语</span></li>
<li class="lang-lo TnITTtw-option"><span class="lang-lo" id="lang-lo">老挝语</span></li>
<li class="lang-fi TnITTtw-option"><span class="lang-fi" id="lang-fi">芬兰语</span></li>
<li class="lang-en TnITTtw-option"><span class="lang-en" id="lang-en">英语</span></li>
<li class="lang-nl TnITTtw-option"><span class="lang-nl" id="lang-nl">荷兰语</span></li>
<li class="lang-sm TnITTtw-option"><span class="lang-sm" id="lang-sm">萨摩亚语</span></li>
<li class="lang-pt TnITTtw-option"><span class="lang-pt" id="lang-pt">葡萄牙语</span></li>
<li class="lang-es TnITTtw-option"><span class="lang-es" id="lang-es">西班牙语</span></li>
<li class="lang-vi TnITTtw-option"><span class="lang-vi" id="lang-vi">越南语</span></li>
<li class="lang-az TnITTtw-option"><span class="lang-az" id="lang-az">阿塞拜疆语</span></li>
<li class="lang-am TnITTtw-option"><span class="lang-am" id="lang-am">阿姆哈拉语</span></li>
<li class="lang-sq TnITTtw-option"><span class="lang-sq" id="lang-sq">阿尔巴尼亚语</span></li>
<li class="lang-ar TnITTtw-option"><span class="lang-ar" id="lang-ar">阿拉伯语</span></li>
<li class="lang-ko TnITTtw-option"><span class="lang-ko" id="lang-ko">韩语</span></li>
<li class="lang-mg TnITTtw-option"><span class="lang-mg" id="lang-mg">马尔加什语</span></li>
<li class="lang-mr TnITTtw-option"><span class="lang-mr" id="lang-mr">马拉地语</span></li>
<li class="lang-ml TnITTtw-option"><span class="lang-ml" id="lang-ml">马拉雅拉姆语</span></li>
<li class="lang-ms TnITTtw-option"><span class="lang-ms" id="lang-ms">马来语</span></li>
<li class="lang-mt TnITTtw-option"><span class="lang-mt" id="lang-mt">马耳他语</span></li>
<li class="lang-km TnITTtw-option"><span class="lang-km" id="lang-km">高棉语</span></li>
</ul>
</div>
</div>
<div id="sel-scrollbar-3">
<div id="sel-track-3">
<div id="sel-dragBar-3"></div>
</div>
</div>
</div>
</div>
</div>
<div class="TnITTtw-fp-options" style="display: none;"><input id="TnITTtw-always-translate" readonly="readonly" style="display: none;" type="checkbox" /><label class="TnITTtw-always-translate-label TnITTtw-not-pro" for="TnITTtw-always-translate" style="display: none;"><span class="TnITTtw-always-translate-inner-label" style="display: none;">随时将英语翻译为</span><span class="TnITTtw-pro-label" style="display: none;">PRO</span></label> <br style="display: none;" /> <input id="TnITTtw-never-translate-lang" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-lang-label" for="TnITTtw-never-translate-lang" style="display: none;">一律不翻译英语</label> <br style="display: none;" /> <input id="TnITTtw-never-translate-site" style="display: none;" type="checkbox" /><label class="TnITTtw-never-translate-site-label" for="TnITTtw-never-translate-site" style="display: none;">一律不翻译www.360magento.com</label></div>
</div>]]></description>
      <pubDate>Fri, 14 Oct 2022 08:28:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 UI 表单中创建图像上传器]]></title>
      <link>https://www.360magento.com/blog/How-to-Create-an-Image-Uploader-in-Magento2-UI-Form/</link>
      <description><![CDATA[<p><span><span>上传文件是每个开发人员在使用 UI 表单时都会遇到的流行过程。</span><span>虽然它很受欢迎，但这个过程比看起来要复杂得多。</span><span>因此，在今天来自 Magenest 的技术指南文章中，我们将逐步指导您如何在 Magento 2 UI 表单中创建图像上传器。&nbsp;</span></span></p>
<h2><span>在 UI 表单中创建图片上传器的步骤</span></h2>
<h3><span>第 1 步：添加字段 UI 表单</span>&nbsp;</h3>
<p><span><span>让我们在您的 UI 表单 XML 文件中添加一个字段来呈现图像上传器。</span><span>请注意，您需要如下定义 formElement、elementTmpl、previewTmpl、uploaderConfig 配置，以确保图像上传器可以正确显示。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;field name="logo"&gt;
   &lt;argument name="data" xsi:type="array"&gt;
       &lt;item name="config" xsi:type="array"&gt;
           &lt;item name="dataType" xsi:type="string"&gt;string&lt;/item&gt;
           &lt;item name="label" xsi:type="string" translate="true"&gt;Logo&lt;/item&gt;
           &lt;item name="formElement" xsi:type="string"&gt;fileUploader&lt;/item&gt;
           &lt;item name="elementTmpl" xsi:type="string"&gt;ui/form/element/uploader/uploader&lt;/item&gt;
           &lt;item name="previewTmpl" xsi:type="string"&gt;ui/form/element/uploader/preview&lt;/item&gt;
           &lt;item name="sortOrder" xsi:type="number"&gt;10&lt;/item&gt;
           &lt;item name="required" xsi:type="boolean"&gt;true&lt;/item&gt;
           &lt;item name="allowedExtensions" xsi:type="string"&gt;jpg jpeg gif png svg&lt;/item&gt;
           &lt;item name="uploaderConfig" xsi:type="array"&gt;
               &lt;item name="url" xsi:type="url" path="magenest_upload/index/upload"/&gt;
           &lt;/item&gt;
           &lt;item name="notice" xsi:type="string"&gt;&lt;![CDATA[Allowed file types:jpg, jpeg, png.]]&gt;&lt;/item&gt;
       &lt;/item&gt;
   &lt;/argument&gt;
&lt;/field&gt;</pre>
<h3><span>第 2 步：创建 ImageUploader 模型</span></h3>
<p><span>创建一个模型 ImageUploader 来处理您的上传逻辑，例如从请求正文在临时目录中创建文件，将文件从临时目录复制到目标文件夹。</span></p>
<p><span><span>Magenest / ImageUpload / Model / ImageUploader</span><br /></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
namespace Magenest\ImageUpload\Model;
...
class ImageUploader extends \Magento\Catalog\Model\ImageUploader {
public function __construct(
   Database $coreFileStorageDatabase,
   Filesystem $filesystem,
   UploaderFactory $uploaderFactory,
   StoreManagerInterface $storeManager,
   LoggerInterface $logger, $baseTmpPath,
   $basePath,
   $allowedExtensions,
   $allowedMimeTypes = [],
   Name $fileNameLookup = null)
{
   parent::__construct($coreFileStorageDatabase, $filesystem, $uploaderFactory, $storeManager, $logger, $baseTmpPath, $basePath, $allowedExtensions, $allowedMimeTypes, $fileNameLookup);
}
//todo: for later logic override use
...
}</pre>
<h3><span>第三步：创建控制器上传图片</span></h3>
<p><span>当您上传图片时，控制器将响应</span><span>&nbsp;</span><span>使用 ImageUploader 模型将您的图片移动到目标目录。</span></p>
<p><span>Magenest / ImageUpload / Controller / Adminhtml / Index / Upload</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""> public function __construct(
       Context $context, 
       \Magenest\ImageUpload\Model\ImageUploader $imageUploader
   ){
       $this-&gt;imageUploader = $imageUploader;
       parent::__construct($context);
   }
   public function execute()
   {
       $imageId = $this-&gt;_request-&gt;getParam('param_name', 'image');

       try {
           $result = $this-&gt;imageUploader-&gt;saveFileToTmpDir($imageId);
       } catch (Exception $e) {
           $result = ['error' =&gt; $e-&gt;getMessage(), 'errorcode' =&gt; $e-&gt;getCode()];
       }
       return $this-&gt;resultFactory-&gt;create(ResultFactory::TYPE_JSON)-&gt;setData($result);
   }
</pre>
<h3><span>第 4 步：使用依赖注入配置 ImageUploader 和 Upload 控制器构造函数</span></h3>
<p><span><span>现在在 di.xml 中添加您的配置。</span><span>这些配置包括上传基本路径和上传图片上传的基本临时路径。</span><span>类型名称将是您的上传控制器。</span></span></p>
<p><span>现在在</span><span>Magenest/ImageUpload/etc/di.xml中添加配置</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>&lt;type name="Magenest\ImageUpload\TestImageUpload"&gt; </span><span>
   &lt;arguments&gt; </span><span>
       &lt;argument name="baseTmpPath" xsi:type="string"&gt;test/tmp&lt;/argument&gt; </span><span>
       &lt;argument name="basePath" xsi:type="string "&gt;test&lt;/argument&gt; </span><span>
   &lt;/arguments&gt; </span><span>
&lt;/type&gt;</span></pre>
<h2><span>检查结果</span></h2>
<p><span>如果所有步骤都已完成，请清除缓存并查看您的 UI 表单以查看结果。</span></p>
<div class="wp-block-image"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/7.png" width="800" /></span></div>
<div class="wp-block-image"><span>如果您已成功创建图片上传器，结果将如下所示</span></div>
<p><span><span>现在客户端可以将图像上传到文件系统。</span><span>但是，要将图像从 tmpl 文件夹移动到所需文件夹以及保存文件路径以供进一步处理，您需要在 UI 表单的操作保存中添加一些脚本：&nbsp;</span></span></p>
<p><span>Magenest / ImageUpload / Controller / Adminhtml / Index / Save</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if ($data) 
{
           if (isset($data['logo'][0]['name']) &amp;&amp; isset($data['logo'][0]['tmp_name'])) {
               $data['image'] =$data['logo'][0]['name'];
               /** @var \Magenest\ImageUpload\Model\ImageUploader $this-&gt;imageUploader */
               $this-&gt;imageUploader-&gt;moveFileFromTmp($data['image']);
           } elseif (isset($data['logo'][0]['image']) &amp;&amp; !isset($data['logo'][0]['tmp_name'])) {
               $data['image'] = $data['logo'][0]['image'];
           } else {
               $data['image'] = null;
           }
}</pre>]]></description>
      <pubDate>Thu, 13 Oct 2022 08:31:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中安装 ElasticSearch]]></title>
      <link>https://www.360magento.com/blog/How-to-install-ElasticSearch-within-Magento2/</link>
      <description><![CDATA[<p><span><span>为什么要安装 Elasticsearch？</span><span>Elasticsearch 是一个实时分布式搜索引擎，能够执行各种类型的搜索。</span><span>它在您的 Web 服务器上运行，其灵活的特性使其能够搜索各种类型的文档，无论其数据类型如何，包括结构化、非结构化、地理和指标数据类型。</span><span>通过安装 Elasticsearch，您可以提高电子商务网站搜索查询的性能和准确性。</span></span></p>
<p><span><span>从 2.4 版本开始，Magento 使用 Elasticsearch 进行搜索，而不是使用 Mysql。</span><span>在这篇博客中，我将向您介绍如何安装 Elasticsearch，然后在 Magento 2 中进行设置。</span></span></p>
<h2><span>1.安装Java（依赖需要）</span></h2>
<p><span><span>因为 Elasticsearch 是基于 Java 开发的开源软件，所以首先设置 Java 至关重要。</span><span>如您所知，Java 是一种编程语言和平台。</span><span>Java 是一种高级、健壮、面向对象和安全的编程语言。</span><span>因此，您可以将注意力从安全问题上移开，并按照以下说明进行操作。</span></span></p>
<p><span>运行以下命令来安装 Java。</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo apt-get update</pre>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo apt install openjdk-8-jdk-y</pre>
<p><span>接下来，使用以下命令验证 java 是否已正确安装：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">java -version</pre>
<p><span>输出应如下所示：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>openjdk version "1.8.0_292" </span><span>
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10) </span><span>
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)</span></pre>
<h2><span>2. 安装 Elasticsearch</span></h2>
<p><span>首先，您必须添加 Elasticsearch 的签名密钥来验证下载的包（如果您已经从 Elasticsearch 安装了包，则跳过此步骤）：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add</pre>
<p><span>接下来，您需要安装 apt-transport-https 包：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>sudo apt-get install apt-transport-https</span></pre>
<p><span>现在将 Elasticsearch 存储库添加到系统中。</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span><span>echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | </span><span>sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list</span></span></pre>
<p><span>接下来，更新 apt 包的列表并安装 Elasticsearch 引擎。</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>sudo apt-get update &amp;&amp; sudo apt-get install elasticsearch</span></pre>
<p><span>启动 Elasticsearch 服务。</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>sudo systemctl enable elasticsearch.service </span><span>
sudo systemctl start elasticsearch.service</span></pre>
<p><span>您可以通过使用以下 curl 命令将 HTTP 请求发送到 localhost 上的端口 9200 来验证 Elasticsearch 是否正在运行：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>curl -X GET "localhost:9200/"</span></pre>
<p><span>结果与此类似：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "name" : "P5wiUFd",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "WfQWVkBvSUam5sD708C6_w",
  "version" : {
    "number" : "6.8.14",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "dab5822",
    "build_date" : "2021-02-02T19:58:04.182039Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}</pre>
<h2><span>3. 在 Magento 2 中配置 Elasticsearch</span></h2>
<p><span><span>获得 Elasticsearch 后，您现在就可以在您的电子商务网站中配置这个强大的搜索引擎了。</span><span>让我们潜入吧！</span></span></p>
<p><span>从管理侧边栏中，导航到</span><em>商店 &gt; 设置 &gt; 配置 &gt; 目录 &gt; 目录 &gt; 目录搜索。</em></p>
<p><span>在 Search Engine 字段中，清除 Use system value 复选框并选择安装在您的服务器上的 Elasticsearch 版本。</span></p>
<p><span>配置 Elasticsearch 连接</span></p>
<ul>
<li><span><span>输入 Elasticsearch 服务器主机名。</span><span>默认是本地主机</span></span></li>
<li><span>输入 Elasticsearch 服务器端口。</span></li>
<li><span><span>在 Elasticsearch Index Prefix 字段中输入前缀以确定 Elasticsearch 索引。</span><span>例如：Magento2。</span></span></li>
<li><span>在 Enable Elasticsearch HTTP Auth 字段中，选择 Yes 选项以使用 HTTP 身份验证来建议用户名和密码访问 Elasticsearch Server。</span></li>
<li><span><span>在 Elasticsearch Server Timeout 字段中输入系统超时前的秒数。</span><span>默认数字为 15。</span></span></li>
</ul>
<p><span><span>要验证配置，请单击测试连接按钮。</span><span>如果成功，按钮文本将变为&ldquo;</span></span><span><em><span><span>成功！</span><span>再次测试</span></span></em></span><em>？</em><span>'</span></p>
<p><span>你的配置应该是这样的</span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/6.png" width="800" /></span></span></p>
<p><span>完成后，点击&ldquo;保存配置&rdquo;。</span></p>]]></description>
      <pubDate>Wed, 12 Oct 2022 08:27:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何以编程方式将产品添加到购物车]]></title>
      <link>https://www.360magento.com/blog/How-to-add-products-to-cart-programmatically/</link>
      <description><![CDATA[<p><span>在本文中，我们将向您展示如何在 Magento 2 中以编程方式将产品添加到购物车。这在您想要向购物车中的商品添加额外数据、添加需要自定义逻辑的产品或只是为购物车添加礼物时最有用。购买您的产品的客户。</span></p>
<p><span>本文假设：</span></p>
<ul>
<li><span>我们正在将代码添加到名为 Magenest\Example 的自定义模块中，路径为&ldquo;example&rdquo;</span></li>
<li><span>自定义添加到购物车功能在 Magenest\Example\Controller\Product 的控制器中执行</span></li>
</ul>
<h2><span>如何</span><span>使用报价模型将产品添加到购物车</span></h2>
<p><span>控制器 AddToCart 处理发送到路径&ldquo;example/product/addToCart&rdquo;的 GET 请求，并使用存储在请求参数中的信息将产品添加到购物车。</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
namespace Magenest\Example\Controller\Product;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\Exception\LocalizedException;

/**
* Class AddToCart
* @package Magenest\BookingReservation\Controller\Product
*/
class AddToCart extends Action implements HttpGetActionInterface
{
   /** @var \Magento\Checkout\Model\SessionFactory */
   private $checkoutSession;

   /** @var \Magento\Quote\Api\CartRepositoryInterface */
   private $cartRepository;

   /** @var \Magento\Catalog\Api\ProductRepositoryInterface */
   private $productRepository;

   /** @var \Magento\Framework\Serialize\Serializer\Json */
   private $json;

   /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable */
   private $configurableType;

   /**
     * AddToCart constructor.
     * @param Context $context
     * @param \Magento\Framework\Serialize\Serializer\Json $json
     * @param \Magento\Checkout\Model\SessionFactory $checkoutSession
     * @param \Magento\Quote\Api\CartRepositoryInterface $cartRepository
     * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
     * @param \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableType
     */
   public function __construct(
       Context $context,
       \Magento\Framework\Serialize\Serializer\Json $json,
       \Magento\Checkout\Model\SessionFactory $checkoutSession,
       \Magento\Quote\Api\CartRepositoryInterface $cartRepository,
       \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
       \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableType
   ) {
       $this-&gt;checkoutSession = $checkoutSession;
       $this-&gt;cartRepository = $cartRepository;
       $this-&gt;productRepository = $productRepository;
       $this-&gt;json = $json;
       $this-&gt;configurableType = $configurableType;
       parent::__construct($context);
   }

   /**
    * @return ResultInterface
    * @throws LocalizedException
    */
   public function execute()
   {
       $product = $this-&gt;productRepository-&gt;getById($this-&gt;getRequest()-&gt;getParam('id'));
       $qty = $this-&gt;getRequest()-&gt;getParam('qty');

       $session = $this-&gt;checkoutSession-&gt;create();
       $quote = $session-&gt;getQuote();
       $quote-&gt;addProduct($product, $qty);

       $this-&gt;cartRepository-&gt;save($quote);
       $session-&gt;replaceQuote($quote)-&gt;unsLastRealOrderId();
   }
}</pre>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span><br /></span><span></span></pre>
<p><span><span>您可以仅使用产品 ID 将产品添加到购物车。</span><span>数量参数是可选的：如果参数为空，报价模型将假定数量为 1。</span></span></p>
<h3><span>如何使用其他选项将产品添加到购物车</span></h3>
<p><span><span>addProduct 函数可以适应简单参数格式和高级参数格式。</span><span>这允许您向购物车项目添加其他选项和数据。</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">/**
* @throws LocalizedException
*/
public function addProductWithOptions()
{
   $productSku = $this-&gt;getRequest()-&gt;getParam('sku');
   $qty       = $this-&gt;getRequest()-&gt;getParam('qty');

   /**
    * You can specify custom options for a product before adding it to cart
    */
   $product = $this-&gt;productRepository-&gt;get($productSku);
   $product-&gt;addCustomOption('additional_options', $this-&gt;json-&gt;serialize([
       'custom_option_1' =&gt; [
           'label' =&gt; __("Custom Option 1"),
           'value' =&gt; 10
       ],
       'custom_option_2' =&gt; [
           'label' =&gt; __("Custom Option 2"),
           'value' =&gt; 20
       ]
   ]));

   /**
    * The second parameter of addProduct function can either be an integer, or a Magento DataObject
    * An integer will be interpreted as quantity added
    * Using a DataObject will allow adding custom data to cart items; these data will be saved and can be retrieved as info_buyRequest of quote/order items
    */
   $buyRequest = new \Magento\Framework\DataObject([
       'qty' =&gt; $qty,
       'related_product' =&gt; '',
       'custom_option' =&gt; '?'
   ]);

   $session = $this-&gt;checkoutSession-&gt;create();
   $quote = $session-&gt;getQuote();
   $quote-&gt;addProduct($product, $buyRequest);

   $this-&gt;cartRepository-&gt;save($quote);
   $session-&gt;replaceQuote($quote)-&gt;unsLastRealOrderId();
}</pre>
<p><span>Product 的&ldquo;additional_options&rdquo;将显示在购物车页面上：</span></p>
<h2><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/4.png" width="800" /></span></h2>
<h2><span>购物车页面上的产品附加选项</span></h2>
<h3><span>如何将特殊类型的产品添加到购物车</span></h3>
<p><span><span>将一些具有特殊类型的产品添加到购物车可能需要提供额外的选项。</span><span>假设您知道所需的具体参数值，您还可以将这些产品添加到购物车中。</span><span>以下是将捆绑产品添加到购物车的一般格式：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span>/** </span><span>
* @throws LocalizedException </span><span>
*/ </span><span>
public function addSpecialProduct() </span><span>
{ </span><span>
   $productId = $this-&gt;getRequest()-&gt;getParam('id'); </span><span>
   $product = $this-&gt;productRepository-&gt;getById($productId); </span>
<span>
   $buyRequest = new \Magento\Framework\DataObject([ </span><span>
       // super_group 用于设置分组产品中子项目的数量</span><span>
       'super_group' =&gt; [ </span><span>
           10 =&gt; "1", // value is pass as $sub-productId =&gt; $qty </span><span>
           20 =&gt; "2" </span><span>
       ], </span>
<span>
       // 添加捆绑产品需要两个选项：'bundle_option' 和 'bundle_option_qty' </span><span>
       // 两个选项都作为索引数组传递，</span><span>
       'bundle_option' =&gt; ["2", "4", "5"], // 使用捆绑产品 'selection_id' 添加项目，而不是实际产品 ID </span><span>
       'bundle_option_qty' =&gt; ["1", "2", " 3"], </span>
<span>
       // 可配置的产品选项使用 'super_attribute' 传递 option </span><span>
       'super_attribute' =&gt; [ </span><span>
           143 =&gt; "168", // 格式为 $optionId =&gt; $optionValue </span><span>
           93 =&gt; "58" </span><span>
       ] </span><span>
   ]); </span>
<span>
   $session = $this-&gt;checkoutSession-&gt;create(); </span><span>
   $quote = $session-&gt;getQuote(); </span><span>
   $quote-&gt;addProduct($product, $buyRequest); </span>
<span>
   $this-&gt;cartRepository-&gt;save($quote); </span><span>
   $session-&gt;replaceQuote($quote)-&gt;unsLastRealOrderId(); </span><span>
}</span></pre>
<p><span><span>每种特殊产品类型都有自己的功能来获取特殊属性。</span><span>请参阅这些产品的类型模型以了解如何手动添加它们。</span></span></p>
<p><span><span>例如，可以使用函数 getConfigurableAttributes() 或 getConfigurableAttributesAsArray() 提取可配置产品属性。</span><span>这使我们可以使用其简单的 SKU 将可配置的产品添加到购物车：</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">/**
* @throws LocalizedException
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
private function addConfigurableProduct()
{
   $childId = $this-&gt;getRequest()-&gt;getParam('id');
   $childProduct = $this-&gt;productRepository-&gt;getById($childId);

   /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable configurableType */
   $parentId = $this-&gt;configurableType-&gt;getParentIdsByChild($childId);
   if (($parentId = reset($parentId)) !== false) {
       $parentProduct = $this-&gt;productRepository-&gt;getById($parentId);
       $productAttributeOptions = $this-&gt;configurableType-&gt;getConfigurableAttributesAsArray($parentProduct);

       $options = [];
       foreach ($productAttributeOptions as $option) {
           $options[$option['attribute_id']] =  $childProduct-&gt;getData($option['attribute_code']);
       }
       $buyRequest = new \Magento\Framework\DataObject(['super_attribute' =&gt; $options]);

       $session = $this-&gt;checkoutSession-&gt;create();
       $quote = $session-&gt;getQuote();
       $quote-&gt;addProduct($parentProduct, $buyRequest);

       $this-&gt;cartRepository-&gt;save($quote);
       $session-&gt;replaceQuote($quote)-&gt;unsLastRealOrderId();
   }
}</pre>
<p><span>应始终将可配置产品添加为具有自定义选项的可配置 SKU，而不是其简单的 SKU：</span></p>
<h2><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/5.png" width="800" /></span></h2>
<h2><span>可配置产品的可配置 SKU</span></h2>
<h3><span>以编程方式添加到购物车时触发迷你购物车更新</span></h3>
<p><span>与每次访问时都请求最新数据的购物车页面不同，迷你购物车内容使用 Magento 的 customer-data.js 库缓存在客户端。</span></p>
<p><span><span>这个缓存只能通过在客户端机器上执行Javascript来清除；</span><span>因为服务器通常不能请求清除客户端上保存的数据。</span><span>因此，customer-data.js 的缓存失效和重新加载通常发生在客户端触发事件时，例如成功的 AJAX 请求。</span></span></p>
<p><span>迷你购物车可以配置为在对 addToCart 端点的 AJAX 请求完成时更新：</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">require([
   'jquery',
   'mage/url',
   'Magento_Customer/js/customer-data'
], function ($, urlBuilder, customerData) {
   $.ajax({
       type: 'POST',
       data: {
           product_id: ...,
           qty: ...
       },
       url: urlBuilder.build('example/product/addToCart'),
       complete: function () {
           // you might not need this section if you're using sections.xml instead
           customerData.invalidate(['cart']);
           customerData.reload(['cart'], true);
       },
       success: ...,
       error: ...
   })
});</pre>
<p><span><span>但是，每次都直接调用这些函数效率不是很高。</span><span>Magento 允许使用sections.xml 配置文件来配置这些端点服务器端：</span></span></p>
<p><span>Magenest/Example/etc/frontend/sections.xml</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd"&gt;
   &lt;action name="example/product/addToCart"&gt;
       &lt;section name="cart"/&gt;
   &lt;/action&gt;
&lt;/config&gt;</pre>
<p><span>现在，使用 Magento 2 AJAX 库发送到&ldquo;example/product/addToCart&rdquo;的所有 AJAX 请求都将触发重新加载&ldquo;购物车&rdquo;数据，而无需手动向 AJAX 请求添加回调。</span></p>]]></description>
      <pubDate>Tue, 11 Oct 2022 08:27:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 - 2022 完整指南中创建日期字段]]></title>
      <link>https://www.360magento.com/blog/How-to-create-a-date-field-in-Magento2-2022-Full-Guide/</link>
      <description><![CDATA[<p><span><span>当需要在上下文中为特定事件选择未知日期或安排某些计划时，主要需要日期字段。</span><span>它不仅减少了打字错误，而且还标准化了格式。</span><span>它还通过允许用户简单地选择而不是使用键盘输入来帮助改善用户体验。</span></span></p>
<p><span>在本文中，我们将向您展示如何在 Magento 2 中创建日期字段，尤其是在自定义表单中</span></p>
<h2><span>在 UI 组件中创建日期字段</span></h2>
<p><span>在这个代码片段中，我们将看到如何使用 UI 组件在 Magento 2 管理表单中添加日期字段。&nbsp;</span></p>
<p><span>先决条件：</span></p>
<ul>
<li><span>设置模块</span></li>
<li><span>设置表</span></li>
<li><span>设置3个文件：model、resourcemodel和collection</span></li>
<li><span><span>设置控制器和布局文件。</span><span>在布局文件中，对文件 ui 组件的引用是 ui_component/my_form.xml</span></span></li>
</ul>
<p><span>1.</span><span>创建文件内容&lt;routes&gt;_&lt;controller&gt;_&lt;action&gt;.xml</span></p>
<p><span>这是一个示例：magenest_myform_index.xml</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token prolog">&lt;?xml version="1.0"?&gt;</span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>page</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>urn:magento:framework:View/Layout/etc/page_configuration.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>referenceContainer</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>content<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>uiComponent</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>my_form<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>referenceContainer</span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span> 
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>page</span><span class="token punctuation">&gt;</span></span><br /><br /></pre>
<p><span>2.&nbsp;<span>创建对应的ui_component文件，命名为my_form.xml</span></span></p>
<p><span>3.&nbsp;<span>将示例代码添加到 my_form.xml</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>form</span><span class="token punctuation">&gt;</span></span>
    ...
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>fieldset</span><span class="token punctuation">&gt;</span></span>
        ...
       <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>field</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>start_date<span class="token punctuation">"</span></span> <span class="token attr-name">formElement</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>date<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>argument</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>data<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>array<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>item</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>config<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>array<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>item</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>options<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>array<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
                        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>item</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>showsTime<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>boolean<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>item</span><span class="token punctuation">&gt;</span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>item</span><span class="token punctuation">&gt;</span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>item</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>source<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>string<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>start_date<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>item</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>item</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>argument</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>settings</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>validation</span><span class="token punctuation">&gt;</span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>rule</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>validate-date<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>boolean<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>rule</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>validation</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataType</span><span class="token punctuation">&gt;</span></span>timestamp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataType</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">translate</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Start Date<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>visible</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>visible</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataScope</span><span class="token punctuation">&gt;</span></span>start_date<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataScope</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>settings</span><span class="token punctuation">&gt;</span></span>
     <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>field</span><span class="token punctuation">&gt;</span></span>
 ...
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>fieldset</span><span class="token punctuation">&gt;</span></span>
    ...
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>form</span><span class="token punctuation">&gt;</span></span><br /><br /><span>将代码添加到正确位置后，清理缓存，您的日期字段将开始显示您设置的位置：</span><br /><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/1.png" width="800" /></pre>
<h2><span>初始化日历小部件</span></h2>
<p><span>1.</span><span>创建模板文件（.phtml）</span></p>
<p><span>2.</span><span>要显示日期字段，首先我们需要添加字段名称为&ldquo;example-date&rdquo;</span></p>
<pre class="EnlighterJSRAW line-numbers language-generic" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;div class="field"&gt;
    &lt;label&gt;Date : &lt;/label&gt;
    &lt;input type="text" class="input-text" id="example-date" style="width: auto" name="example-date" /&gt;
&lt;/div&gt;<br /><br /><span>现在，我们可以简单地在 for 结束标记之后添加 Javascript 代码：&nbsp;</span></pre>
<pre class="EnlighterJSRAW line-numbers language-js" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token operator">&lt;</span>script<span class="token operator">&gt;</span>
  <span class="token function">require</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
    <span class="token string">'jquery'</span><span class="token punctuation">,</span>
    <span class="token string">'mage/translate'</span><span class="token punctuation">,</span>
    <span class="token string">'mage/calendar'</span>
    <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">$<span class="token punctuation">,</span> $t</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#example-date'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">calendar</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
        changeMonth<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
        changeYear<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
        showButtonPanel<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
        currentText<span class="token operator">:</span> <span class="token function">$t</span><span class="token punctuation">(</span><span class="token string">'Go Today'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        closeText<span class="token operator">:</span> <span class="token function">$t</span><span class="token punctuation">(</span><span class="token string">'Close'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        showWeek<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
    showOn<span class="token operator">:</span> <span class="token string">"both"</span><span class="token punctuation">,</span>
         showsTime<span class="token operator">:</span> <span class="token boolean">true</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></pre>
<ul>
<li><span>showOn</span><span><span>：日期选择器应该出现的时间。</span><span>日期选择器可以在字段获得焦点（&ldquo;焦点&rdquo;）、单击按钮（&ldquo;按钮&rdquo;）或任一事件发生（&ldquo;两者&rdquo;）时出现。</span></span></li>
<li><span>显示</span><span>时间：如果需要，显示时间</span></li>
</ul>
<p><span>日历小部件的大多数选项、方法和事件对应于</span><a class="is-plain-link" href="https://api.jqueryui.com/datepicker/" rel="noreferrer nofollow noopener" target="_blank"><span>jQuery Datepicker 小部件</span></a><span>选项。</span></p>
<p><span>结果如下：</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/2.png" width="800" /></span></p>
<h2><span>使用 system.xml 在 Magento 2 配置部分创建日期字段</span></h2>
<p><span>1.</span><span>在app/code/NameSpace/ModuleName/etc/adminhtml中创建system.xml文件</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>config</span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>noNamespaceSchemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>../../../Config/etc/system_file.xsd<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>system</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>section</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>yoursectionid<span class="token punctuation">"</span></span> <span class="token attr-name">translate</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>label<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">sortOrder</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>10<span class="token punctuation">"</span></span> <span class="token attr-name">showInDefault</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInWebsite</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInStore</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>Custom Label<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>tab</span><span class="token punctuation">&gt;</span></span>tab name<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>tab</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>resource</span><span class="token punctuation">&gt;</span></span>NameSpace_ModuleNmae::config_modulename<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>resource</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>group</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>general<span class="token punctuation">"</span></span> <span class="token attr-name">translate</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>label<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">sortOrder</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInDefault</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInWebsite</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInStore</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>General Settings<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span>
                <span class="token comment">&lt;!-- date field code start--&gt;</span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>field</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>start_date<span class="token punctuation">"</span></span> <span class="token attr-name">translate</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>label comment<span class="token punctuation">"</span></span> <span class="token attr-name">sortOrder</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>4<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">showInDefault</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token attr-name">showInStore</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span> <span class="token punctuation">&gt;</span></span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span><span class="token punctuation">&gt;</span></span>Start Date<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span>
                    <span class="token comment">&lt;!-- here we pass class where we create date picker--&gt;</span>
                    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>frontend_model</span><span class="token punctuation">&gt;</span></span>NameSpace\ModuleName\Block\DateField<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>frontend_model</span><span class="token punctuation">&gt;</span></span>
                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>field</span><span class="token punctuation">&gt;</span></span>
                <span class="token comment">&lt;!-- date field code end--&gt;</span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>group</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>section</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>system</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>config</span><span class="token punctuation">&gt;</span></span></pre>
<p><span><span>2.</span><span>创建 app/code/NameSpace/ModuleName/Block/DateField.php 我们在其中创建日期字段元素</span></span></p>
<pre class="EnlighterJSRAW line-numbers language-php" data-enlighter-language="php" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><span class="token php language-php"><span class="token delimiter important">&lt;?php</span>
<span class="token keyword">namespace</span> <span class="token package">NameSpace<span class="token punctuation">\</span>ModuleName<span class="token punctuation">\</span>Block</span><span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name">DateField</span> <span class="token keyword">extends</span> <span class="token class-name"><span class="token punctuation">\</span>Magento<span class="token punctuation">\</span>Config<span class="token punctuation">\</span>Block<span class="token punctuation">\</span>System<span class="token punctuation">\</span>Config<span class="token punctuation">\</span>Form<span class="token punctuation">\</span>Field</span>
<span class="token punctuation">{</span>
   <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">render</span><span class="token punctuation">(</span>\<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Data<span class="token punctuation">\</span>Form<span class="token punctuation">\</span>Element<span class="token punctuation">\</span>AbstractElement</span> <span class="token variable">$element</span><span class="token punctuation">)</span>
   <span class="token punctuation">{</span>
       <span class="token variable">$element</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setDateFormat</span><span class="token punctuation">(</span>\<span class="token package">Magento<span class="token punctuation">\</span>Framework<span class="token punctuation">\</span>Stdlib<span class="token punctuation">\</span>DateTime</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">DATE_INTERNAL_FORMAT</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
       <span class="token variable">$element</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setTimeFormat</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'HH:mm:ss'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//set date and time as per your need</span>
       <span class="token variable">$element</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setShowsTime</span><span class="token punctuation">(</span><span class="token boolean constant">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
       <span class="token keyword">return</span> <span class="token keyword">parent</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token variable">$element</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span></span></pre>
<p><span>有四种日期格式可供使用：</span></p>
<ul>
<li><span>DATETIME_INTERNAL_FORMAT: yyyy-MM-dd HH:mm:ss</span></li>
<li><span>DATE_INTERNAL_FORMAT：yyyy-MM-dd</span></li>
<li><span>DATETIME_PHP_FORMAT: Ymd H:i:s</span></li>
<li><span>DATE_PHP_FORMAT：Ymd</span></li>
</ul>
<p><span>此日期选择器元素将显示在商店配置下，如下所示：</span></p>
<pre class="EnlighterJSRAW line-numbers language-xml" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1012/3.png" width="800" /></pre>]]></description>
      <pubDate>Mon, 10 Oct 2022 08:31:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 允许内存耗尽错误]]></title>
      <link>https://www.360magento.com/blog/Magento2-Allowed-Memory-exhausted-error/</link>
      <description><![CDATA[<div class="votecell post-layout--left">
<div class="js-voting-container grid jc-center fd-column ai-stretch gs4 fc-black-200" data-post-id="141003">
<div class="js-accepted-answer-indicator grid--cell fc-green-500 py6 mtn8" title="接受此答案时正在加载..." data-s-tooltip-placement="right">
<div>
<p><span>在本文中，我们将了解问题的原因以及如何解决 Magento2 中&ldquo;允许的内存耗尽错误&rdquo;的问题。</span></p>
<p><span><span>&ldquo;allowed memory size of bytes exhausted&rdquo;错误的原因与内存不足有关。</span><span>如果您尝试使用比您通过&ldquo;memory_limit&rdquo;在 php.ini 文件中指定的更多的 RAM 资源，则会发生错误。</span></span></p>
<p><span>解决方案1：</span></p>
<p><span>在 php.ini 文件中，搜索并更改以下值，如下所示</span></p>
<pre><span>max_execution_time=18000 </span><span>
max_input_time=1800 </span><span>
memory_limit=4G</span></pre>
</div>
<div><span>并重新启动 Apache。</span></div>
</div>
</div>
</div>
<div></div>
<div><span>解决方案2：&nbsp;</span></div>
<div class="votecell post-layout--left">
<div class="js-voting-container grid jc-center fd-column ai-stretch gs4 fc-black-200" data-post-id="141003">
<div class="js-accepted-answer-indicator grid--cell fc-green-500 py6 mtn8" title="接受此答案时正在加载..." data-s-tooltip-placement="right">
<div class="ta-center"><span>Magento 2 命令中内存限制的快速解决方案是直接在命令中添加内存限制。</span></div>
</div>
</div>
</div>
<div class="answercell post-layout--right">
<div class="s-prose js-post-body">
<p><span>对于编译命令，</span></p>
<pre class="default s-code-block hljs python"><code>php -dmemory_limit=4G <span class="hljs-built_in">bin</span>/magento setup:di:<span class="hljs-built_in">compile</span>
</code></pre>
<p><span>用于部署</span></p>
<pre class="default s-code-block hljs csharp"><code>php -dmemory_limit=<span class="hljs-number">4</span>G bin/magento setup:<span class="hljs-keyword">static</span>-content:deploy
</code></pre>
<p><span>如果问题没有解决，您可以根据 4G 更改为最大。</span></p>
<p><span>解决方案3： -</span></p>
<p><span>您可以使用此命令而不是 bin/magento 轻松修复它</span><span>：</span></p>
<pre><span>php -dmemory_limit=-1 bin/magento ....</span></pre>
<p><span>例子：</span></p>
<pre><span>php -dmemory_limit=-1 bin/magento 设置：升级</span></pre>
<pre><span>php -dmemory_limit=-1 bin/magento setup:di:compile</span></pre>
<p><span><span>此错误与 PHP 中的内存限制配置有关。</span><span>参数&nbsp;</span></span><span>-dmemory_limit=-1</span><span>允许在没有内存限制的命令行中运行 PHP。</span></p>
<p><span>希望这些解决方案可以帮助您解决问题。</span></p>
</div>
</div>]]></description>
      <pubDate>Sun, 09 Oct 2022 08:26:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：向特定客户群免运费]]></title>
      <link>https://www.360magento.com/blog/Magento2-Free-shipping-for-specific-Customer-Group/</link>
      <description><![CDATA[<p class="p">为了向特定客户群免运费<a href="https://www.thecoachsmb.com/free-shipping-for-specific-customer-group/"></a>，我们将不得不创建促销规则。</p>
<p class="p">前题：</p>
<p class="p">我只想为登录用户显示免费送货方式。</p>
<p class="p"><strong><span style="font-family: sans-serif;">登录管理面板</span> - 转到营销 -&gt; 促销 -&gt; 购物车价格规则</strong><strong></strong></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1008/1.png" width="800" /></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1008/2.png" width="800" /></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1008/3.png" width="800" /></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1008/4.png" width="800" /></p>
<p class="p"><span style="font-family: sans-serif;"><span style="font-family: sans-serif;">然后单击</span><span style="font-family: sans-serif;">&ldquo;保存&rdquo;按钮以保存更改。</span></span></p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1008/5.png" width="800" /></p>
<p class="p">&ndash; 网站：主要网站</p>
<p class="p">&ndash; 客户群：Group X（选择客户群，我希望它申请登录用户）</p>
<p class="p">&ndash; 优惠券：无优惠券（我希望在他们登录帐户时自动应用）</p>
<p class="p">&ndash; 条件：空白（因此应适用于所有产品）</p>
<p class="p">&ndash; 行动：</p>
<p class="p">&ndash; 折扣金额：0</p>
<p class="p">&ndash; 适用于运费：是</p>
<p class="p">&ndash; 丢弃后续规则：否</p>
<p class="p">&ndash; 如果所有这些条件都为真：空白</p>
<p class="p">&ndash; 免费送货：适用于匹配物品的运输</p>]]></description>
      <pubDate>Sat, 08 Oct 2022 08:25:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中创建访问密钥]]></title>
      <link>https://www.360magento.com/blog/How-to-create-Access-Keys-in-Magento2/</link>
      <description><![CDATA[<p class="p"><span style="font-family: sans-serif;">在本文中，我们将看到访问密钥的详细信息：</span></p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/1_2.png" width="800" /></p>
<p class="p"><strong>获取访问密钥：</strong></p>
<p class="p"><span style="font-family: sans-serif;">在</span> Magento 市场上创建一个帐户并转到&nbsp;<a href="https://marketplace.magento.com/customer/accessKeys/">https://marketplace.magento.com/customer/accessKeys/</a>&nbsp;以获取私有和公共访问密钥</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/2_2.png" width="800" /></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/3_1.png" width="800" /></p>
<p class="p">在此处创建访问密钥。如果您有访问密钥，则可以使用它们。</p>
<p class="p"><span style="font-family: sans-serif;">现在输入</span>&nbsp;Username&nbsp;&nbsp;并&nbsp;password&nbsp;开始下载</p>
<ul>
<li><strong>用户</strong><span style="font-family: sans-serif;">名：您的公钥</span> 2fc966a913d4e83b28041eeb3c3b72e5</li>
<li><strong>密码</strong><span style="font-family: sans-serif;">：您的私钥。</span>48e05400d17ca1bcb4e693825c45416e</li>
</ul>
<p class="p">在您的项目中使用您的访问密钥。</p>]]></description>
      <pubDate>Fri, 07 Oct 2022 08:32:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在静态块 Magento2 中调用时事通讯]]></title>
      <link>https://www.360magento.com/blog/How-to-call-Newsletter-in-static-block-Magento2/</link>
      <description><![CDATA[<p class="p"><span style="font-family: sans-serif;">在本文中，我们将学习如何在</span> Magento2 的静态块中调用时事通讯。</p>
<ol>
<li>首先，您需要决定在哪个<span style="font-family: sans-serif;">静态块</span><span style="font-family: sans-serif;">中显示</span>newsetter。</li>
<li>在那个静态块中，像下面这样调用时事通讯。将下面的代码粘贴到该块内。</li>
</ol>
<p class="pre"></p>
<p class="p"><span style="font-family: sans-serif;">您需要使用</span> html 代码选项将此代码放在静态块中。</p>
<p class="p">3.我已经给出了在主页块上显示它的示例。</p>
<p class="p"><span style="font-family: sans-serif;">在主页静态块中，我选择了静态块，在那里我拖了</span>html代码</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/1_1.png" width="800" /></p>
<p class="p">4.保存并清除缓存。在前端查看您的时事通讯，如下所示：</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/2_1.png" width="800" /></p>]]></description>
      <pubDate>Thu, 06 Oct 2022 08:33:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中显示最新产品]]></title>
      <link>https://www.360magento.com/blog/How-to-Display-Latest-Products-in-Magento2/</link>
      <description><![CDATA[<p class="p"><br />Magento 2 拥有大量的产品属性，可以让我们过滤状态、新品、creat_at 等产品。但如果店主想在主页上展示数千种产品中的最新产品以增加销量，如何他们应该这样做吗？</p>
<p class="p"><span style="font-family: sans-serif;">查看以下文章，了解如何在</span> Magento 2 中创建最新产品。</p>
<p class="p"><span style="font-family: sans-serif;">我们可以将最新产品放在</span> Magento 2 网站的任何位置，但最简单的方法是创建一个 CMS 页面。</p>
<p class="p">首先，您转到<strong><span style="font-family: sans-serif;">内容</span> &gt; 页面</strong>并在网格表中选择主页。然后选择<strong>编辑</strong></p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/1.jpg" width="800" /></p>
<ul>
<li><strong>小部件类型</strong>：从下拉列表中选择目录新产品列表。</li>
<li><strong>显示类型</strong>：选择所有产品以获取所有产品。如果您选择新产品，您只能获取属性为新的产品。</li>
<li><strong>显示页面控制</strong><span style="font-family: sans-serif;">：如果要调整页面上的产品数量，请选择是。否则，选择否。</span>&nbsp;&nbsp;</li>
<li><strong>要显示的产品</strong>数量：输入要显示的产品数量。</li>
<li><strong>模板</strong>：选择要显示的模板。</li>
<li><strong>Cache Lifetime (Seconds)&nbsp;</strong><span style="font-family: sans-serif;">：</span>&nbsp;选择您希望刷新新产品列表的频率。默认情况下，缓存设置为 86400 秒或 24 小时。清理缓存将帮助小部件在保存内容后立即工作。</li>
</ul>
<p class="p">内容选项卡中的内容如下图所示：</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/2.jpg" width="800" /></p>
<p class="p">然后单击保存页面并在前端检查最终结果。</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/3.jpg" width="800" /></p>
<p class="p"><span style="font-family: sans-serif;">以上是在</span> Magento 2 中展示最新产品的 1 分钟指南。希望对您的工作有所帮助。</p>]]></description>
      <pubDate>Wed, 05 Oct 2022 08:29:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[自定义 Magento 2 布局插图的分步教程]]></title>
      <link>https://www.360magento.com/blog/Step-by-Step-Tutorial-to-Customize-Magento2-Layout-Illustrations/</link>
      <description><![CDATA[<p class="p"><br /><span style="font-family: sans-serif;">嗨，大家好，</span>&nbsp;今天的这篇文章将为您提供如何在实践中进行自定义布局的分步说明，特别是说明 Magento 页面标题中客户帐户链接的布局更改。</p>
<p class="p"><span style="font-family: sans-serif;">我刚刚创建了一个新主题</span><span style="font-family: sans-serif;">&mdash;&mdash;Bss 主题，它继承自一个空白主题，并且与下图中的风格相似：&nbsp;</span></p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/1.png" width="800" /></p>
<p class="p">我想将客户帐户链接移至下拉列表，如下所示：</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/2.png" width="800" /></p>
<p class="p">要获得上述结果，您需要执行以下步骤：</p>
<h2><strong><span style="font-family: sans-serif;">第</span> 1 步：定义布局块</strong><strong></strong></h2>
<p class="p">Bss 主题应用 Luma 主题：使用描述性方法确定模板、布局和样式位置。该文件负责显示文件中指定的标题链接：<strong>&lt;Magento_Theme_module_dir&gt;/view/frontend/layout/default.xml</strong>：</p>
<p class="pre">&nbsp;&lt;container name="header.panel" label="Page Header Panel" htmlTag="div" htmlClass="panel "&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;...</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Framework\View\Element\Html\Links" name="top.links"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;</p>
<p class="pre">&lt;/container&gt;</p>
<p class="p">其他模块使用此块使用<strong>referenceBlock</strong>将其特定链接添加到标头。</p>
<p class="p">例如：亮度主题</p>
<p class="p">Luma 主题中的客户模块：使用 move top.links 来阻止客户。</p>
<p class="p"><strong>&lt;Magento_luma_theme_dir&gt;/Magento_Theme/layout/default.xml</strong></p>
<p class="pre">&lt; <strong>referenceBlock</strong>&nbsp;name="header.links"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Customer\Block\Account\Customer" name="customer" template="account/customer.phtml" before="-"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;...</p>
<p class="pre">&lt; <strong>/referenceBlock</strong>&nbsp;&gt;</p>
<p class="pre">...</p>
<p class="pre">&lt; <strong>move</strong>&nbsp;element="top.links" destination="customer"/&gt;</p>
<p class="pre">...</p>
<p class="p"><span style="font-family: sans-serif;">在下拉菜单外的</span> Luma 主题文件中，添加了一个新块 - header.links。</p>
<p class="p"><strong>&lt;Magento_luma_theme_dir&gt;/Magento_Theme/layout/default.xml</strong></p>
<p class="pre">&nbsp;&lt;referenceContainer name="header.panel"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;</p>
<p class="pre">&lt;/referenceContainer&gt;</p>
<h2><strong><span style="font-family: sans-serif;">第</span> 2 步：定义模板</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">与上一步一样，</span>Bss 主题使用位于目录中的下拉菜单来识别模板：</p>
<p class="p"><strong>&lt;Magento_Customer_module_dir&gt;/view/frontend/templates/account/customer.phtml</strong></p>
<p class="pre">&lt;?php if($block-&gt;customerLoggedIn()): ?&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;li class="customer-welcome"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span class="customer-name"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role="link"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabindex="0"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-mage-init ='{"dropdown":{}}'</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-toggle="dropdown"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-trigger-keypress-button="true"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-bind="scope: 'customer'"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span data-bind="text: customer().fullname"&gt;&lt;/span&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button type="button"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="action switch"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabindex="-1"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-action="customer-menu-toggle"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&gt;&lt;?php /* @escapeNotVerified */ echo __('Change')?&gt;&lt;/span&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script type="text/x-magento-init"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"*": {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Magento_Ui/js/core/app": {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"components": {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"customer": {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"component": "Magento_Customer/js/view/customer"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php if($block-&gt;getChildHtml()):?&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="customer-menu" data-target="dropdown"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php echo $block-&gt;getChildHtml();?&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php endif; ?&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/li&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php endif; ?&gt;</p>
<h2><strong><span style="font-family: sans-serif;">第</span> 3 步：扩展基本布局以添加块</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">在</span> Bss 主题中创建扩展布局文件。</p>
<p class="p"><strong>app/design/frontend/Bss/default/Magento_Theme/layout/default.xml</strong></p>
<p class="pre">&lt;?xml version="1.0"?&gt;</p>
<p class="pre">&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/ page_configuration.xsd"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;referenceContainer name="header.panel"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/referenceContainer&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</p>
<p class="pre">&lt;/page&gt;</p>
<h2><strong><span style="font-family: sans-serif;">第</span> 4 步：移动链接</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">要将链接移动到块</span> header.links，我们需要将扩展​​布局文件添加到主题中：</p>
<p class="p"><strong><span style="font-family: sans-serif;">应用程序</span>/设计/前端/Bss/default/Magento_Customer/layout/default.xml</strong></p>
<p class="pre">&nbsp;&lt;?xml version="1.0"?&gt;</p>
<p class="pre">&lt;!--</p>
<p class="pre">/**</p>
<p class="pre">&nbsp;* Copyright &copy; Magento, Inc. All rights reserved.</p>
<p class="pre">&nbsp;* See COPYING.txt for license details.</p>
<p class="pre">&nbsp;*/</p>
<p class="pre">--&gt;</p>
<p class="pre">&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<strong>referenceBlock</strong>&nbsp;name="header.links"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Customer\Block\Account\Customer" name="customer" template="Magento_Customer::account/customer.phtml" before="-"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login" template="Magento_Customer::account/link/authorization.phtml"&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="sortOrder" xsi:type="number"&gt;10&lt;/argument&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/<strong>referenceBlock</strong>&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;move element="header" destination="header.links" before="-"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<strong>move</strong>&nbsp;element="register-link" destination="header.links"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<strong>move</strong>&nbsp;element="top.links" destination="customer"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<strong>move</strong>&nbsp;element="authorization-link" destination="top.links" after="-"/&gt;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</p>
<p class="pre">&lt;/page&gt;</p>
<p class="p">接下来，清除缓存并获取结果：</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/3.png" width="800" /></p>
<h2><strong><span style="font-family: sans-serif;">第</span> 5 步：使用 Css 设置下拉菜单样式</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">在</span>Bss主题的文件夹中，创建文件：<strong>app/design/frontend/Bss/default/web/css/source/&nbsp;_extend.les</strong></p>
<p class="pre">//</p>
<p class="pre">// Common</p>
<p class="pre">// ______________________________________________</p>
<p class="pre">&amp; when (@media-common = true) {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;.header.panel .header.links {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.customer-welcome + .authorization-link {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display: none;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">}</p>
<p class="pre">//</p>
<p class="pre">// Mobile</p>
<p class="pre">// _____________________________________________</p>
<p class="pre">.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;.customer-name,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;.customer-welcome + .authorization-link {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display: none;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">}</p>
<p class="pre">//</p>
<p class="pre">// Desktop</p>
<p class="pre">// _____________________________________________</p>
<p class="pre">.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;.customer-welcome {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.lib-dropdown(</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_toggle-selector: ~'.action.switch ',</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_options-selector: ~'.customer-menu .header.links',</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_dropdown-actions-padding: 0,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_icon-font-text-hide: true,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_icon-font-size: 22px,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_icon -font-line-height：22px，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_dropdown-list-min-width：160px，</p>
<p class="pre">&nbsp;&nbsp;@_dropdown-list-item-hover：transparent，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_dropdown-list-pointer-position：right，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_dropdown-list-position-right : 0</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Courier;">L</span><span style="font-family: Courier;">i</span>{</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: Courier;">a</span>{</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.lib-link( @_link</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-color: #333,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-text-decoration: none,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-color-visited: #333,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-text-decoration-visited: none,</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-color-hover: #333，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-text-decoration-hover：<span style="font-family: Courier;">none</span>，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-color-active：#333，</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@_link-text-decoration-active：<span style="font-family: Courier;">none</span></p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;）；</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display: block;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line-height: 1.4;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding: 8px;</p>
<p class="pre">&nbsp;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;.action {</p>
<p class="pre">&nbsp;&amp;.switch {</p>
<p class="pre">&nbsp;background: transparent;</p>
<p class="pre">&nbsp;border: none;</p>
<p class="pre">&nbsp;}</p>
<p class="pre">&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">}</p>
<h2><strong><span style="font-family: sans-serif;">第</span> 6 步：运行命令行并检查结果</strong><strong></strong></h2>
<p class="p">运行命令：</p>
<p class="pre">php bin/magento s:up</p>
<p class="pre">php bin/magento setup:static-content:deploy -f</p>
<p class="p">重新加载页面并检查结果：</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog1004/4.png" width="800" /></p>]]></description>
      <pubDate>Tue, 04 Oct 2022 08:24:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加/删除 JavaScript、CSS、字体]]></title>
      <link>https://www.360magento.com/blog/How-to-Add-Remove-JavaScript-CS-Fonts-in-Magento2/</link>
      <description><![CDATA[<p class="p"></p>
<h2><strong>1.在&lt;head&gt;中包含静态资源</strong></h2>
<p class="p"><span style="font-family: sans-serif;">在</span> Magento 2 中使用外部库自定义页面是很常见的，但如果您想使用外部库，则需要添加 JavaScript 和 CSS 文件。</p>
<p class="p"><span style="font-family: sans-serif;">在页面配置文件的</span> &lt;head&gt; 部分中添加了 JavaScript、CSS 和其他静态文件。&lt;head&gt; 页面的默认视图在 vendor /magento/module-theme/view/frontend/layout/default_head_blocks.xml 中定义。&nbsp;</p>
<p class="p">如果要添加外部文件，可以将此文件扩展为自定义主题。</p>
<p class="p">示例：在自定义主题中创建文件：</p>
<p class="p">app/code/Bss/default/Magento_Theme/layout/default_head_blocks.xml</p>
<p class="pre">&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</p>
<p class="pre">xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc</p>
<p class="pre">/page_configuration.xsd"&gt; &nbsp;&nbsp;&lt;head&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;! -- 添加本地资源 --&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;css src="css/my-styles.css"/&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 下面两种添加本地JavaScript文件的方法是对等的 --&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;script src="Magento_Catalog::js /sample1.js"/&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;link src="js/sample.js"/&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 添加外部资源 --&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;css</p>
<p class="pre">src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4 /css/bootstrap-theme.min.css" src_type="url" /&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;script</p>
<p class="pre">src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" /&gt; &nbsp;&nbsp;&nbsp;&lt;link rel="stylesheet" type="text/css"</p>
<p class="pre">src="http://fonts.googleapis.com/css?family=Montserrat"</p>
<p class="pre">src_type="url" /&gt; &nbsp;&nbsp;&lt;/head&gt; &lt;/page&gt;</p>
<p class="pre">&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">添加外部资源时，值</span> src_type = &ldquo;url&rdquo; 是必需的。</p>
<p class="p">资产的路径指定到以下位置之一：</p>
<ul>
<li>&lt;theme_dir&gt;/web-</li>
<li>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web-</li>
</ul>
<p class="p"><span style="font-family: sans-serif;">让我们再举一个例子来了解更多细节：</span>&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">如果您想将</span> owl.carousel.css 文件添加到网站中，请按照以下说明操作：&nbsp;将此行添加到 &lt;head&gt; 中：</p>
<p class="pre">&lt;css src = "css / owl.carousel.css" /&gt;</p>
<h2><strong>2.去除静态资源</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">当您根据设计的变化修改页面时，需要对页面进行编辑。但是，如果您不想使用</span> CSS、JavaScript 或字体文件，您完全可以删除它们。&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">要删除这些静态资源，并且链接位于页面</span> &lt;head&gt; 上，您应该在扩展主题中更改以下内容：</p>
<p class="p"><span style="font-family: sans-serif;">应用程序</span>/设计/前端/&lt;供应商&gt;/&lt;主题&gt;/Magento_Theme/layout/default_head_blocks.xml&nbsp;：</p>
<p class="pre">&lt;page &nbsp;xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" &nbsp;xsi:noNamespaceSchemaLocation= "urn:magento:framework:View/Layout/etc/page_configuration.xsd</p>
<p class="pre">" &gt; &lt;head&gt; &lt; !-- 删除本地资源 --&gt; &lt;remove src= "css/styles-m.css" /&gt; &lt;remove src= "my-js.js" /&gt; &lt;remove src= "Magento_Catalog::js/compare.js " /&gt; &lt;!-- 移除外部资源 --&gt; &lt;remove src= "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" /&gt; &lt;remove src=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" /&gt; &lt;remove src= "http://fonts.googleapis.com/css?family=Montserrat" /&gt; &lt;/head&gt; &lt;/page&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">例如：您希望删除</span> calendar.css 文件，因为您不使用此文件。calendar.css 文件是从文件中添加的</p>
<p class="p"><span style="font-family: sans-serif;">供应商</span>\magento\module-theme\view\frontend\layout\default_head_blocks.xml。</p>
<p class="p"><span style="font-family: sans-serif;">您可以使用</span> &lt;remove src = &ldquo;mage/calendar.css&rdquo; /&gt; 删除文件。</p>]]></description>
      <pubDate>Mon, 03 Oct 2022 08:26:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何修改 Magento 2 页面布局]]></title>
      <link>https://www.360magento.com/blog/How-to-modify-Magento2-page-layou/</link>
      <description><![CDATA[<p><span>在探索本教程之前，我们想提醒一下，Magento 2 支持 4 种基本页面布局类型，例如</span><span><span><span>1 列、2 列左、2 列右和 3 列。</span><span>这些页面布局用于页面配置文件中的特定页面，在 &lt;page&gt; 的属性布局中。</span></span></span></p>
<p><span><span><span><span>例如</span></span></span><span><span>：默认类别页面的布局是左两列。</span><span>如果要更改为设计中的 3 列，则必须在主题中扩展布局文件 catalog_category_view.xml。</span></span></span></p>
<p><span><span><span><span>第 1 步</span></span></span><span><span>：在以下文件夹中创建 catalog_category_view.xml 文件：</span></span></span></p>
<p><span>app/design/frontend/Bss/default/Magento_Catalog/layout/.</span></p>
<p><span><span><span><span>第 2 步</span></span></span><span><span>：将内容添加到 catalog_category_view.xml 文件并保存。</span></span></span></p>
<pre><span>&lt;?xml version="1.0"?&gt; </span>
<span>&lt;page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" </span>
<span>xsi:noNamespaceSchemaLocation="urn:magento:framework:View /Layout/etc/page_configuration.xsd"&gt; </span>
<span>... </span>
<span>&lt;/page&gt;</span></pre>
<p><span><span><span><span>第 3 步</span></span></span><span><span>：刷新缓存并检查结果：&nbsp;</span></span></span></p>
<p><span><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/3_2.png" width="800" /></span></span></span></p>]]></description>
      <pubDate>Sun, 02 Oct 2022 08:33:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何设置 Magento 2 报价设置运费]]></title>
      <link>https://www.360magento.com/blog/How-to-Set-up-Magento2-Quote-Set-Shipping-Amount/</link>
      <description><![CDATA[<p class="p">今天，我们将讨论<strong>M&nbsp;agento 2 报价</strong>集运费。</p>
<p class="p">Magento 2 目前正在使用前端处理库 Knockout JS (KO)。购物车页面 KO 将用于呈现带有 JSON 格式数据的 HTML 块，包括块总数。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/1_3.png" width="800" />&nbsp;</p>
<p class="p">在许多情况下，您需要获取购物车报价的完整信息来解决问题，例如：</p>
<ul>
<li>将当前购物车页面信息发送给客户（如果客户尚未准备好下订单）</li>
<li>根据购物车报价等信息自定义购物车页面界面。</li>
</ul>
<p class="p">通过以下简单的方法，您可以获取报价的完整数据，重点是块<strong>运输估算</strong>数据。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/2_3.png" width="800" /></p>
<h2><strong><span style="font-family: sans-serif;">如何设置</span> Magento 2 报价集运费</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">想知道</span><span style="font-family: sans-serif;">&ldquo;Estimate shipping&rdquo;区块的值保存在哪里，可以使用Chrome浏览器进行调试。</span></p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 1 步：</strong><span style="font-family: sans-serif;">在购物车页面</span> (http://yourdomain.com/checkout/cart)，按<strong>F12</strong>显示调试选项卡。</p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 2 步：</strong>导航到<strong><span style="font-family: sans-serif;">应用程序</span> -&gt; 本地存储 (yourdomain.com) -&gt; 值列（右列）。</strong></p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 3 步：</strong>复制<strong>Value 列</strong><span style="font-family: sans-serif;">中的文本（来自第</span> 2 步）并粘贴到网站 http://json.parser.online.fr/ 的左侧列中（以便轻松读取 Json 结构数据）。</p>
<p class="p"><span style="font-family: sans-serif;">您将看到存储在此</span> json 文本中的所有<strong>报价信息。</strong><span style="font-family: sans-serif;">但我只关注</span><span style="font-family: sans-serif;">&ldquo;预估运费&rdquo;的主要数据，block。</span></p>
<p class="p"><span style="font-family: sans-serif;">您需要关注两个主要对象，即</span><span style="font-family: sans-serif;">&ldquo;结帐数据&rdquo;和&ldquo;购物车数据&rdquo;（请查看下面的屏幕截图以获取这些对象的详细数据）。</span></p>
<p class="p">其中：</p>
<p class="p"><strong>结帐数据：结帐</strong>时有任何操作时保存值：<em><span style="font-family: sans-serif;">更改送货方式（</span>Magento 2 刷新送货方式），在国家字段中切换值，邮政编码，地址，城市......</em></p>
<p class="p"><strong>Cart-data：</strong><span style="font-family: sans-serif;">保存报价的概览信息（报价存储的更详细信息，您可以展开</span><span style="font-family: sans-serif;">&ldquo;cart-data&rdquo;部分查看更多信息）。</span></p>
<p class="p">根据具体情况，您可以相应地获取数据。</p>
<p class="p"><span style="font-family: sans-serif;">从</span> Json（字符串）获得数据后，我将指导如何获取 Magento 2 报价表的数据并处理您的要求。</p>
<p class="p"><span style="font-family: sans-serif;">在您自己创建的模块中创建一个</span> JS 文件。</p>
<p class="p"><strong>示例：</strong>&nbsp;app/code/Bss/QuoteData/view/frontend/web/js/quote-data.js。</p>
<p class="pre">define([</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;'jquery',</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;"Magento_Customer/js/customer-data",</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;'Magento_Checkout/js/checkout-data',</p>
<p class="pre">], function ($, customerData, checkoutData) {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;'use strict';</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;$.widget('bss.quote_data', {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_create: function () {</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("#click-button").on('click', function(){</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cartData = customerData.get('cart-data')(); // Data from "cart-data"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var checkout = checkoutData.getShippingAddressFromData(); // data from "checkout-data"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var selectedShippingMethod = checkoutData.getSelectedShippingRate(); // your selected shipping method from "checkout-data"</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*Log data in console tab of browser*/</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(cartData); // you can remove this after check</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(checkout); // you can remove this after check</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(selectedShippingMethod); // you can remove this after check</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Log data in console tab of browser */</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p class="pre">&nbsp;&nbsp;&nbsp;&nbsp;return $.bss.quote_data;</p>
<p class="pre">});</p>
<p class="p"><span style="font-family: sans-serif;">希望本文对您在处理</span> M&nbsp;agento 2 报价集运费或 Magento 2 报价表时有用。</p>]]></description>
      <pubDate>Sat, 01 Oct 2022 08:35:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中使块可见性动态化]]></title>
      <link>https://www.360magento.com/blog/Dynamize-block-visibility-in-Magento2/</link>
      <description><![CDATA[<p class="p"><span style="font-family: sans-serif;">如您所知，我们可以使用</span> ifconfig 参数根据 Magento / Config / Model / Config / Source / Yesno 配置字段配置任何块是否显示。对于值，我们可以将 XPath 用于必填字段：&nbsp;</p>
<p class="pre">&lt;block class="Namespace\Module\Block\Type" name="block.example" ifconfig="my/yesno/field"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;... <br />&lt;/block&gt;</p>
<p class="p"><span style="font-family: sans-serif;">例如：您使用</span> ifconfig 在核心联系人模块中检查演示：&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">供应商</span>/magento/module-contact/view/frontend/layout/default.xml</p>
<p class="pre">&lt;referenceBlock name="footer_links"&gt; <br />&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Framework\View\Element\Html\Link\Current" <br /><strong>ifconfig="contact/contact/enabled"</strong>&nbsp;name="contact-us-link"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt; argument name="label" xsi:type="string" <br />translate="true"&gt;联系我们&lt;/argument&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="path" xsi:type="string"&gt;联系方式&lt;/argument&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; <br />&nbsp;&nbsp;&nbsp;&lt; /block&gt; <br />&lt;/referenceBlock&gt;</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/3_1.png" width="800" /></p>
<p class="p"><span style="font-family: sans-serif;">我们还通过</span> ACL 资源调整可见性。虽然它主要用于管理区域，但类似的方法也适用于网站的前端。</p>
<p class="pre">&lt;block class="Namespace\Module\Block\Type" name="block.example" <br />aclResource="Vendor_ModuleName::acl_name"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- ... --&gt; <br />&lt;/block&gt;</p>
<p>&nbsp;</p>]]></description>
      <pubDate>Fri, 30 Sep 2022 08:30:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 的 Head Block 中添加元标记]]></title>
      <link>https://www.360magento.com/blog/Add-meta-tags-to-Magento2-s-Head-Block/</link>
      <description><![CDATA[<p><span><span><span>将元标签添加到 Magento 2 中的头块？</span><span>如何更快更容易地做到这一点？</span></span></span></p>
<p><span>大家好，&nbsp;</span></p>
<p><span><span><span>HTML 页面的 &lt;head&gt; 元素包含不同的元标记、JS 和 CSS 文件定义以及 JS 代码片段。</span><span>在 Magento 2 中，如果您希望在 &lt;head&gt; 中插入元标记，则需要使用一些自定义代码片段。&nbsp;</span></span></span></p>
<p><span>现在就开始！</span></p>
<h2 class="ftwp-heading" id="quick-guide-to-add-meta-tags-to-the-head-block-in-magento-2"><span>在 Magento 2 的 Head Block 中添加元标记的快速指南</span></h2>
<p><span>您需要从自定义主题创建扩展文件，以将 &lt;meta&gt; 标记添加到布局中的 &lt;head&gt; 元素中。</span></p>
<pre><span>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml.</span></pre>
<p><span>或者您可以使用 head.additional 添加具有自定义类和自定义 phtml 的新块：</span></p>
<pre><span>&lt;referenceBlock name="head.additional"&gt; &lt;block </span>
<span>class="Vendor\Module\Block\CustomHead" name="custom_head" </span>
<span>template="Vendor_Module::custom_head.phtml"/&gt; &lt;/referenceBlock&gt;</span></pre>
<p><span>在</span><span>默认类中</span><span>呈现标记元</span><span>：</span><span>\Magento\Framework\View\Page\Config\Renderer。</span></p>
<h2 class="ftwp-heading" id="5-types-of-meta"><span><span>5 种元类型</span></span></h2>
<p><span>这个类可以渲染 5 种类型的元数据并将它们全部捕获：&nbsp;</span></p>
<ul>
<li><span><span><span>og：是一种用于在您的网站和社交网络之间进行通信的协议。</span><span>比如开放图的一些属性Og：title，Og：type，Og：description，Og：image，Og：url&hellip;&hellip;</span></span></span></li>
<li><span>charset：用于指定 HTML 文档的字符编码</span></li>
<li><span>content_type：用于声明网站的语言显示代码</span></li>
<li><span>x_ua_compatible</span></li>
<li><span>media_type：用于指定要链接的元类型</span></li>
<li><span><span>&ldquo;Default&rdquo; case</span>：使用 Magento 的默认元标记，如元标题、元描述。</span></li>
</ul>
<p><span>尝试使用以下代码添加到您的主题布局中：&nbsp;</span></p>
<pre><span><span><span>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" </span></span><span><span>
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt; </span></span></span>
<span> &nbsp;&nbsp;&lt;head&gt; </span>
<span><span><span> &nbsp;&nbsp;&nbsp;&lt;! -- 这将创建一个类似 '&lt;meta </span></span><span><span>
http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"&gt;' 的标签 --&gt; </span></span></span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name="x_ua_compatible" content="IE= edge,chrome=1"/&gt; </span>
<span><span><span> &nbsp;&nbsp;&nbsp;&lt;!-- 这将创建一个类似 '&lt;meta property="og:type" </span></span><span><span>
content="article"/&gt;'' 的标签 --&gt; </span></span></span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name="og:type" content ="article"/&gt; </span>
<span> &nbsp;&nbsp;&nbsp;&lt;!-- 这将创建一个类似 '&lt;meta charset="UTF-8"&gt;' 的标签 --&gt; </span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name="charset" content="UTF-8"/&gt; </span>
<span><span><span> &nbsp;&nbsp;&nbsp;&lt;!-- 这将创建一个类似 '&lt;meta http-equiv="Content-Type" </span></span><span><span>
content="content-type-value"/&gt;' 的标签 - -&gt;</span></span></span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name="content_type" content="content-type-value"/&gt; </span>
<span><span><span> &nbsp;&nbsp;&nbsp;&lt;!-- 这个标签不会渲染（详见</span></span><span><span>
\Magento\Framework\View\Page\Config\Renderer） --&gt; </span></span></span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name ="media_type" content="any-value"/&gt; </span>
<span><span><span> &nbsp;&nbsp;&nbsp;&lt;!-- 这将创建一个标签，如 '&lt;meta name="my_custom_type" </span></span><span><span>
content="my_custom_value"/&gt;' --&gt; </span></span></span>
<span> &nbsp;&nbsp;&nbsp;&lt;meta name="my_custom_type" content ="my_custom_value"/&gt; </span>
<span> &nbsp;&nbsp;&lt;/head&gt; </span>
<span>&lt;/page&gt;
</span></pre>
<h2 class="ftwp-heading" id="conclusion"><span>结论</span></h2>
<p><span>这就是我们在 Magento 2 的 head 块中添加元标记的快速指南。</span></p>]]></description>
      <pubDate>Thu, 29 Sep 2022 08:27:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[引用 Magento 2 中的容器：包含的示例]]></title>
      <link>https://www.360magento.com/blog/Referencing-containers-in-Magento2-Examples-of-included/</link>
      <description><![CDATA[<ul>
<li><strong><span style="font-family: sans-serif;">要更新容器，您可以使用</span> &lt;referenceContainer&gt;。&nbsp;</strong></li>
</ul>
<p class="p">例如：向页眉面板添加链接。</p>
<p class="pre">&lt;referenceContainer name="header.panel"&gt; <br />&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="css_class" xsi:type=" string"&gt;标题链接&lt;/argument&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; <br />&nbsp;&nbsp;&nbsp;&lt;/block&gt; <br />&lt;/referenceContainer&gt;</p>
<ul>
<li><strong><span style="font-family: sans-serif;">要创建包装</span> div 或块，您可以使用容器。</strong>&nbsp;</li>
</ul>
<p class="p">例如：将容器添加到页脚容器中并在前端显示。</p>
<p class="pre">&lt;referenceContainer name="footer"&gt; <br />&nbsp;&nbsp;&nbsp;&lt;container name="some.container" as="someContainer" label="Some Container" htmlTag="div" htmlClass="some-container"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;block class="Magento\Cms\ Block\Block" name="footer_top"&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="block_id" xsi:type="string"&gt;footer_top&lt;/argument&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/block&gt; <br />&nbsp;&nbsp;&lt;/container&gt; <br />&lt;/referenceContainer&gt;</p>
<ul>
<li><strong><span style="font-family: sans-serif;">要将类添加到现有容器中：</span>&nbsp;</strong></li>
</ul>
<p class="pre">&lt;referenceContainer name="page.wrapper" htmlClass="my-new-page-wrapper-class second-class"/&gt;</p>
<p class="p"><strong>*注意</strong><span style="font-family: sans-serif;">：</span>referenceContainer 部分将覆盖被引用容器的类。</p>
<p class="p"><span style="font-family: sans-serif;">要为现有容器添加</span> id，您可以使用 htmlID 标记，如下所示：&nbsp;</p>
<p class="pre">&lt;referenceContainer name="page.wrapper" htmlId="MyWrapper"/&gt;</p>
<p>&nbsp;</p>]]></description>
      <pubDate>Wed, 28 Sep 2022 08:28:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中优化资源文件]]></title>
      <link>https://www.360magento.com/blog/Optimize-resource-files-in-Magento2/</link>
      <description><![CDATA[<p>如果您是拥有网站的店主，则不应忽略<strong>优化资源文件。</strong>做这个动作是非常重要和必要的。</p>
<p class="p"><span style="font-family: sans-serif;">与优化网站内容不同，您可以通过更简单的步骤直接在</span> Magento 2 后端优化资源文件。让我们阅读并遵循我们的指南！</p>
<h2><strong>什么是资源文件？</strong><strong></strong></h2>
<p class="p">您希望优化您的资源文件，但您清楚地知道资源文件是什么吗？</p>
<p class="p"><span style="font-family: sans-serif;">资源文件包含图标、菜单、对话框、字符串表、用户定义的二进制数据和其他类型的项目的集合。</span>&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">资源文件可以在编译成兼容的格式后直接嵌入到可执行文件中，从而形成一个包含代码和资源的</span>EXE。应用程序可以在运行时利用嵌入文件中的资源对象。</p>
<p class="p">资源文件允许您更改应用程序显示的文本和视觉效果，而无需更新应用程序的代码。</p>
<h2><strong>有多少种方法可以减少资源文件的加载时间？</strong><strong></strong></h2>
<p class="p">优化资源文件与减少资源文件的加载时间相同。</p>
<p class="p"><span style="font-family: sans-serif;">我们有</span> 3 种方法可以更快地加载资源文件：合并和捆绑文件，以及最小化代码。</p>
<ul>
<li>合并是将多个相同类型的文件合并为一个文件的过程。</li>
<li><span style="font-family: sans-serif;">捆绑是一种组合许多文件以减少加载页面所需的</span> HTTP 请求数量的技术。</li>
<li>缩小会删除空格、换行符和注释，但代码的功能不受影响。由于无法修改最小化文件，因此您应该仅在准备开始生产时使用此方法。</li>
</ul>
<p class="p"><span style="font-family: sans-serif;">但是，默认情况下，</span>Adobe Commerce 和 Magento Open Source 不会合并、捆绑或最小化文件，因此项目开发人员必须决定使用哪种文件优化方法。</p>
<p class="p">不用担心，我们在下面展示了快速且合适的方法。查看我们的详细指南！</p>
<h2><strong><span style="font-family: sans-serif;">优化资源文件的</span> 4 个步骤</strong><strong></strong></h2>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 1 步</strong>：在<strong><em>管理</em></strong>侧边栏上，转到<strong><em><span style="font-family: sans-serif;">商店</span> &gt; 设置 &gt; 配置 &gt;高级&gt; 开发人员</em></strong>。</p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 2 步</strong><span style="font-family: sans-serif;">：要优化</span> CSS 文件，请单击<strong><em>CSS 设置</em></strong><span style="font-family: sans-serif;">部分。如果要合并或缩小</span> CSS 文件，请选择<strong><em>是。</em></strong></p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/1_2.png" width="800" /></p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 3 步</strong><span style="font-family: sans-serif;">：要优化</span> JavaScript 文件，请单击<strong>JavaScript 设置</strong><span style="font-family: sans-serif;">部分。如果要合并或缩小</span> JS 文件，请选择<strong><em>是。</em></strong></p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/2_2.png" width="800" /></p>
<p class="p"><strong><span style="font-family: sans-serif;">第</span> 4 步</strong><span style="font-family: sans-serif;">：要缩小</span> PHTML 模板文件，请单击<strong>模板设置</strong>部分并选择<strong><em>是以</em></strong><span style="font-family: sans-serif;">缩小</span> HTML。</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/3.png" width="800" /></p>
<p class="p"><span style="font-family: sans-serif;">完成所有</span> 4 个步骤后，您不要忘记保存配置以完成该过程。现在，您已成功优化资源文件。</p>]]></description>
      <pubDate>Tue, 27 Sep 2022 08:25:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：使用静态文件签名]]></title>
      <link>https://www.360magento.com/blog/Magento2-Use-static-file-signing/</link>
      <description><![CDATA[<p><span style="font-family: sans-serif;">当您的</span> Magento 网站具有多个版本并且浏览器需要发现它们时，常用的开发工具之一是使用静态文件签名。</p>
<h2><strong>关于静态文件签名</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">可以通过更改数字签名（包括</span> JavaScript、CSS、图像和字体）来监控静态文件。签名附加到基本 URL 之后的路径。如果文件的签名与浏览器中当前缓存的签名不同，则使用该文件的最新版本。</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/1_1.png" width="800" /></p>
<p class="p"><span style="font-family: sans-serif;">例如，当您运行命令时</span>&nbsp;</p>
<p class="pre">php bin/magento 设置：静态内容：部署&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">要部署静态内容，</span>Magento 会自动更改部署的版本。</p>
<h2><strong>使用静态文件签名的配置</strong><strong></strong></h2>
<p class="p">要启用<strong>签名静态文件，</strong>您应该按照以下步骤操作：</p>
<ol>
<li>访问后端并登录到管理员帐户。</li>
<li>在<strong>管理</strong>侧边栏上，转到<strong>商店</strong>&gt;<strong>配置</strong>&gt;<strong>高级</strong>&nbsp;&gt;<strong>开发人员</strong>&gt;<strong>静态文件设置</strong>。</li>
<li>选择<strong>是以</strong>启用此配置。</li>
</ol>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/2_1.png" width="800" /></p>
<p class="p">除此之外，您还可以使用命令行来启用或禁用上述配置。</p>
<p class="pre">php bin/magento 配置：设置 dev/static/sign &lt;值&gt;</p>
<p class="p"><span style="font-family: sans-serif;">值为</span> 1（启用）或 0（禁用）。</p>
<p class="p"><span style="font-family: sans-serif;">例如，当您启用时，</span>URL 将显示为&nbsp;</p>
<table border="0" cellspacing="0">
<tbody>
<tr>
<td valign="top">
<p class="pre">http://magento2.com/pub/static/version1591840430/frontend/Magento/luma/en_US/mage/calendar.css</p>
</td>
</tr>
</tbody>
</table>
<p class="p"><span style="font-family: sans-serif;">或者在另一种情况下，当您禁用时，</span>URL 将是</p>
<table border="0" cellspacing="0">
<tbody>
<tr>
<td valign="top">
<p>http://magento2.com/pub/static/frontend/Magento/luma/en_US/mage/calendar.css</p>
</td>
</tr>
</tbody>
</table>
<p class="p"><strong><em>注意：配置静态文件设置仅在开发人员模式下可用。</em></strong></p>
<h2><strong>结论</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">这是关于在</span> Magento 中启用使用静态文件签名的指南。</p>
<p class="p">希望您会对这些有用的信息感到满意。</p>]]></description>
      <pubDate>Mon, 26 Sep 2022 08:29:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中设置开发者客户端限制]]></title>
      <link>https://www.360magento.com/blog/How-to-set-developer-client-restrictions-in-Magento2/</link>
      <description><![CDATA[<p><span style="font-family: sans-serif;">作为店主，您应该对您的网站有所了解：您的网站有多少元素，您可以使用哪些工具来影响网站的功能以及您如何使用它等等</span><span style="font-family: sans-serif;">&hellip;&hellip;</span></p>
<p class="p"><span style="font-family: sans-serif;">如果您正在运行一个</span> Magento 网站，您可能知道并希望找到一种使用高级开发工具的方法。它们用于在前端开发过程中建立编译模式、构建 IP 地址允许列表、提供模板路径提示以及在店面和管理界面中执行现场文本更改。</p>
<h2><strong>为什么需要限制开发者客户端？</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">在激活模板路径提示配置之前使用开发者客户端限制配置。您需要添加您希望他们看到路径提示的</span> IP 地址。&nbsp;</p>
<p class="p">有关模板路径提示的额外信息。它是一种诊断工具，可通过路径为页面上使用的每个模板添加符号，您可以为店面或管理员启用它。</p>
<p class="p"><span style="font-family: sans-serif;">回到</span> Developer Client Restrictions，您应该使用此功能，因为它将最大限度地减少对客户在商店购物体验的干扰。&nbsp;</p>
<p class="p">除此之外，当您拥有允许列表时，路径提示的检查和自定义将更简单、更快、更正确，因为有一些资源可以做到这一点。因此，您的客户不会因为可以访问错误链接而感到不愉快。</p>
<h2><strong>逐步配置开发者客户端限制</strong><strong></strong></h2>
<p class="p">有关帮助您理解受限开发人员客户端的好处的详细示例：您想要启用路径提示但只有您可以看到而其他人看不到，是时候激活此配置了。</p>
<p class="p">请按照以下步骤完成此操作：</p>
<p class="p">1. 登录管理员帐户。</p>
<p class="p">2. 在<strong>管理</strong><span style="font-family: sans-serif;">侧边栏上，单击商店</span> &gt;<strong>设置</strong>&gt;<strong>配置</strong>&gt;<strong>高级</strong>&gt;<strong>开发人员</strong>。</p>
<p class="p">3. 单击<strong>开发者客户端限制</strong>部分。</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/1.png" width="800" /></p>
<p class="p"><strong><em>注意：开发者客户端限制仅在启用开发者模式后出现。</em></strong></p>
<p class="p">4. 在<strong>Allow IPs中输入您的 IP 地址</strong><span style="font-family: sans-serif;">。如果要添加多个</span> IP 地址，请用逗号分隔每个地址。</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0924/2.png" width="800" /></p>
<p class="p">5.不要忘记保存配置并刷新任何无效缓存，以便此操作处于活动状态。</p>
<h2><strong>结论</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">它非常简单整洁，对吧？按照上面的详细说明，您将更有效地获得一切。</span>&nbsp;</p>
<p class="p"><span style="font-family: sans-serif;">我们希望它对您有所帮助。</span>&nbsp;</p>]]></description>
      <pubDate>Sun, 25 Sep 2022 08:33:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中创建产品属性集]]></title>
      <link>https://www.360magento.com/blog/Create-a-product-property-set-in-Magento2/</link>
      <description><![CDATA[<p align="justify" class="p">Magento 2 产品属性集是某种产品的一组属性特征，并在创建它们时使用<em><span>（例如，</span>&nbsp;</em><strong><em>Top</em></strong><em>有颜色、尺寸、材料、天气，</em><strong><em>Bag</em></strong><em>有颜色、重量、材料）。</em></p>
<p align="justify" class="p">Magento 2&nbsp;中使用产品属性集主要是为了简化您的产品管理，这样您就不需要将每个<span class="16"><span>属性</span></span>单独分配给产品。</p>
<h2><strong>创建属性集</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">为了在</span> Magento 2 中创建产品属性集，请按照下列步骤操作：</p>
<ol>
<li>导航到<strong>Admin Panel &gt; Stores &gt; Attributes &gt; Attribute Set</strong>.</li>
</ol>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_10.png" width="800" />&nbsp;</p>
<p class="p">&nbsp; &nbsp; &nbsp; 2. 选择您要编辑的属性集或按<strong>添加属性集</strong><strong>Add Attribute Set</strong>以添加一个</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_11.png" width="800" /></p>
<p class="p">&nbsp; &nbsp; &nbsp; &nbsp; 3. 填写属性集信息：</p>
<ul>
<li><strong>在名称</strong><strong>Name</strong>字段中插入属性集的名称。</li>
<li><span style="font-family: Arial;">在</span><span style="font-family: Arial;">&ldquo;</span><strong>基于</strong><strong>Based On</strong><strong>&rdquo;</strong>字段中，选择已经存在的属性集，新属性集将基于。</li>
<li>按<strong>保存</strong><strong>Save</strong>按钮。</li>
</ul>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_12.png" width="800" /></p>
<h2><strong>编辑属性集</strong><strong></strong></h2>
<p align="justify" class="p">创建新属性后，您将看到属性集编辑页面，其中包含可编辑的<strong>属性集名称</strong>&nbsp;<strong>Attribute Set Name</strong>、分配给该属性集的属性组以及<strong>未分配</strong><strong>Unassigned Attributes</strong>的属性。</p>
<p align="justify" class="p">要将属性添加到现有组，您只需将其拖放到所选组中即可。</p>
<p align="justify" class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_13.png" width="800" /></p>
<p align="justify" class="p">您可以通过按<strong>添加新</strong><strong>Add New</strong>按钮来添加新组。此外，您只需单击属性组并按<strong>Delete Selected Group</strong>按钮即可删除该属性组。</p>
<p align="justify" class="p">完成后不要忘记按<strong>保存</strong><strong>Save</strong>按钮。</p>]]></description>
      <pubDate>Sat, 24 Sep 2022 08:28:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中添加产品属性]]></title>
      <link>https://www.360magento.com/blog/Add-product-attributes-in-Magento2/</link>
      <description><![CDATA[<p align="justify" class="p">Magento 2 产品属性通常是 Magento 2 产品的属性，可帮助客户在产品变体之间进行选择并找到最合适的选项。它可能是颜色，尺寸，重量，材料等。</p>
<p align="justify" class="p"><span style="font-family: Arial;">产品属性不仅用于定义</span> Magento 2 产品特性，还用于帮助客户缩小结果范围并提高客户参与度的搜索。Magento 2产品属性也可以用于各种规则，如<span style="font-family: Arial;">动态分类规则</span>、cms显示规则等。</p>
<h2 align="justify"><strong><span style="font-family: Arial;">在</span> Magento 2 中添加产品属性的步骤如下：</strong><strong></strong></h2>
<ol>
<li>转到<strong>Admin Panel</strong><strong>&nbsp;&gt;&nbsp;Stores&nbsp;&gt;&nbsp;Attributes&nbsp;&gt;&nbsp;Product.</strong></li>
</ol>
<p><strong><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_1_2.png" width="800" /></strong></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 2. 按<strong>添加新属性</strong><strong>Add New Attribute</strong>按钮。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_2_2.png" width="800" /></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 3. 填写<strong>属性属性</strong><strong>Attribute Properties</strong>部分。</p>
<ul>
<li>输入属性的<strong>默认标签</strong><strong>Default Label</strong>&nbsp;。它将显示在管理面板上。</li>
<li><strong>在商店所有者的目录输入类型</strong><strong>Catalog Input Type for Store Owner</strong>字段中选择一种属性类型。这里有这样的可用值：<em><span style="font-family: Arial;">文本字段、文本区域、日期、是</span>/否、</em>多<em>选、下拉菜单、价格、媒体图像、固定产品税、视觉样本</em>、文本<em>样本。</em></li>
<li><strong><span style="font-family: Arial;">在</span>Values Required</strong><span style="font-family: Arial;">字段中选择</span> yes以使该属性对产品是必需的。在这种情况下，如果您不设置其值，您将无法使用该属性保存产品。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_3_1.png" width="800" /></p>
<p align="justify" class="p">&nbsp; &nbsp; &nbsp; &nbsp; 4. 填写<strong>高级属性属性</strong><strong>Advanced Attribute Properties</strong>部分。</p>
<ul>
<li>设置<strong>属性代码</strong><strong>Attribute Code</strong>。如果将此字段留空，则属性代码将自动从默认标签生成。</li>
<li>在<strong>Scope</strong><span style="font-family: Arial;">中，您选择将在其上编辑属性的级别。就</span> Magento 2 是一个多语言和多网站平台而言，最好将文本字段属性留在<em>商店视图</em>级别。如果属性值不依赖于站点或语言，则选择<em>Global 会更明智。</em></li>
<li>设置属性的<strong>默认值</strong><strong>Default Value</strong>。请注意，默认值不会自动设置所有现有产品。只有在产品重新保存后才会添加。</li>
<li>在<strong>唯一值</strong><strong>Unique Value</strong><span style="font-family: Arial;">字段中设置是，如果您不希望将相同的属性值应用于不同的产品，例如</span> SKU 属性应该是唯一的。</li>
</ul>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_4_1.png" width="800" /></p>
<p align="justify" class="p">&nbsp; &nbsp; &nbsp; &nbsp; 5. 在<strong>商店所有者的输入验证中</strong><strong>Input Validation for Store Owner</strong><strong>，</strong>选择框集过滤器，该过滤器将在保存产品之前用于验证属性值。</p>
<p align="justify" class="p">&nbsp; &nbsp; &nbsp; &nbsp; 6.在<strong>添加到列选项字段中过滤</strong><strong>Add to Column Options</strong><em>是</em>，以便将属性添加到产品网格中的列选项列表中。</p>
<p align="justify" class="p"><span style="font-family: Arial;">您需要启用此选项，以便该属性出现在</span>&nbsp;<strong>产品网格列</strong><strong>Product Grid Columns</strong>中，您可以将其添加到产品网格中。</p>
<p align="justify" class="p">&nbsp; &nbsp; &nbsp; &nbsp; 7. 如果您希望在过滤产品时使用此属性，<strong>请在过滤选项</strong><strong>Use in Filter Options</strong>字段的使用中选择<em>是。</em></p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_5.png" width="800" /></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 8. 设置<strong>默认商店视图</strong><strong>Default Store View</strong>&nbsp;，该视图将在<strong>管理标签</strong><strong>Manage Labels</strong>部分的店面中显示。如果您有一个多语言网站，您可以为每种语言设置一个标签。</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_6.png" width="800" /></p>
<p align="justify" class="p">&nbsp; &nbsp; &nbsp; &nbsp; 9. 配置<strong>店面属性</strong><strong>Storefront Properties</strong>。</p>
<ul>
<li><span style="font-family: Arial;">如果您希望在搜索中使用该属性，请在</span><span style="font-family: Arial;">&ldquo;在搜索中</span><strong><span style="font-family: Arial;">使用</span><span style="font-family: Arial;">&rdquo;</span></strong><strong>Use in Search</strong>字段中选择<em>&ldquo;是&rdquo;。</em></li>
<li><span style="font-family: Arial;">如果您希望在</span>&nbsp;Magento 2 目录搜索中使用该属性，则必须设置<strong>Search Weight</strong>。</li>
<li>决定您是否希望该属性<strong>在高级搜索中可见</strong><strong>Visible in Advanced Search</strong>。</li>
<li>在<strong>店面的可比较</strong><strong>Comparable on Storefront</strong>字段中，您可以选择是否在比较产品页面上使用此属性。</li>
<li>在<strong>用于分层导航中</strong><strong>Used in Layered Navigation</strong>，您选择要在分层导航中使用的属性。</li>
<li><strong><span style="font-family: Arial;">您可以在</span><span style="font-family: Arial;">&ldquo;在搜索结果</span></strong><span style="font-family: Arial;">中使用分层导航</span><span style="font-family: Arial;">&rdquo;中选择是否将属性用于分层导航搜索。</span></li>
</ul>
<p class="p"><strong>注意：</strong><span style="font-family: Arial;">详细了解</span>&nbsp;Magento 2 中的<span style="font-family: Arial;">分层导航配置</span>。</p>
<ul>
<li>在<strong>位置</strong><strong>Position</strong>字段中，您可以设置属性在分层导航中的位置。</li>
</ul>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_7.png" width="800" /></p>
<ul>
<li>如果您希望此属性也用于<span style="font-family: Arial;">购物车价格规则</span>cart price rules&nbsp;和<span style="font-family: Arial;">目录价格规</span>catalog price rule<span style="text-decoration: underline;"><span style="font-family: Arial;">则</span></span><span style="font-family: Arial;">的规则条件，请在</span><span style="font-family: Arial;">&ldquo;</span><strong><span style="font-family: Arial;">用于促销规则条件</span><span style="font-family: Arial;">&rdquo;</span></strong><strong>Use for Promo Rule Conditions</strong><span style="font-family: Arial;">字段中选择</span><span style="font-family: Arial;">&ldquo;</span><em>是</em>&rdquo; 。<a href="https://magefan.com/blog/create-cart-price-rule-in-magento-2" title="如何在 Magento 2 中创建购物车价格规则？"></a><a href="https://magefan.com/blog/magento-2-catalog-price-rules" title="创建 Magento 2 目录价格规则"></a></li>
<li>为了使属性在附加选项中显示在产品页面上，请<strong>在店面目录页面上可见</strong><strong>Visible on Catalog Pages on Storefront</strong>字段中选择<em>是。</em></li>
<li><span style="font-family: Arial;">选择</span> Yes in&nbsp;<strong>Use in Product Listing</strong><span style="font-family: Arial;">以将此属性值添加到产品列表（产品集合）中的</span> PHP 产品对象。</li>
<li><span style="font-family: Arial;">如果您希望该属性用于排序过程，请在</span><span style="font-family: Arial;">&ldquo;</span><strong>用于产品列表中的排序</strong><strong>Used for Sorting in Product Listing</strong><strong>&rdquo;</strong>字段中选择<strong>&ldquo;是&rdquo;。</strong></li>
</ul>
<p><strong><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_8.png" width="800" /></strong></p>
<ul>
<li>完成后不要忘记按<strong>保存属性</strong>按钮。</li>
</ul>
<h2><strong>分配给属性集</strong><strong></strong></h2>
<p class="p">Magento 允许您根据需要创建任意数量的产品属性，每个属性都有自己的输入类型，并将它们分配给<span style="font-family: Arial;">属性集</span>，这些属性集是某种产品的一组属性特征。</p>
<p align="justify" class="p">因此，转到<strong>Admin Panel&nbsp;&gt;&nbsp;Stores&nbsp;&gt;&nbsp;Attributes&nbsp;&gt;&nbsp;Attribute Set ，选择您需要的属性，将其从Unassigned Attributes</strong>拖放到<strong>Groups。</strong></p>
<p align="justify" class="p"><strong><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_9.png" width="800" /></strong></p>
<p align="justify" class="p">完成后不要忘记保存属性集。</p>
<p align="justify" class="p">因此，属性和属性集可帮助您管理产品并保持其信息结构化且易于查找。</p>
<p align="justify" class="p">但是，有时更新属性可能是一项具有挑战性的任务，尤其是在您有很多产品的情况下。</p>
<p>&nbsp;</p>]]></description>
      <pubDate>Fri, 23 Sep 2022 08:27:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中禁用页面构建器]]></title>
      <link>https://www.360magento.com/blog/Disable-Page-Builder-in-Magento2/</link>
      <description><![CDATA[<p class="p">Magento Page Builder 是 Commerce 版本 2.3.1 和 Open Source 2.4.3 中提供的高级内容创建工具。它使您可以更快地创建丰富的内容。这是由于 Page Builder 具有广泛的功能集，例如：整页布局、不同的内容类型、自定义产品属性输入类型、拖放页面设计等。</p>
<p class="p"><span style="font-family: Arial;">尽管它是一个非常方便的工具，可以显着改善多个</span> Magento 商店页面的内容创建，但有些人仍然更喜欢使用所见即所得的编辑器。</p>
<p class="p"><span style="font-family: Arial;">因此，我们将向您展示如何在</span> Magento 2 管理面板中禁用 Page Builder 的 2 种不同方法。</p>
<p class="p">在您询问之前，不建议通过命令行禁用它，因为它可能会破坏多个布局。</p>
<p class="p"><span style="font-family: Arial;">要在</span> Magento 2 中禁用 Page Builder，请导航到<strong>Stores &gt; Configuration &gt; General &gt; Content Management &gt; Advanced Content Tools</strong>并禁用<strong>Page Builder</strong>选项。</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_1_1.png" width="800" /></p>
<p class="p"><span style="font-family: Arial;">通过此方法禁用</span> Page Builder 后，您将无法在任何产品、类别、CMS 页面、动态块或博客上使用它。</p>
<p class="p"><span style="font-family: Arial;">但是，如果您只想为</span> CMS 页面或博客禁用它，则可以使用另一种方法 -&nbsp;Magento 2 Advanced WYSIWYG Extension<span style="font-family: Arial;">。</span>&nbsp;</p>
<p class="p"><span style="font-family: Arial;">它允许您在特定页面上禁用</span> Page Builder，并在它们上使用 WYSIWYG 编辑器。</p>
<p class="p"><span style="font-family: Arial;">确保安装最新的</span> 2.0.11 版本。然后，要禁用 Page Builder，请转到<strong>Stores &gt; Configuration &gt; Magefan Extensions &gt; WYSIWYG Advanced</strong><span style="font-family: Arial;">并为</span> CMS、博客、类别或产品页面完全禁用它。&nbsp;</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_2_1.png" width="800" /></p>
<p><span style="font-family: Arial;">解决方案使您能够同时继续从方便的</span> Page Builder 和 WYSIWYG 编辑器中受益。<span style="font-family: Arial;">通过最合适和最方便的方法在</span> Magento 2 中创建内容。</p>]]></description>
      <pubDate>Thu, 22 Sep 2022 08:26:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：修复 Google PageSpeed 上的“延迟离屏图像]]></title>
      <link>https://www.360magento.com/blog/Magento2-Fix-delayed-off-screen-image-on-Google-PageSpeed/</link>
      <description><![CDATA[<p><span>这不是秘密</span>&nbsp;<span>网站速度是最重要的</span>&nbsp;SEO&nbsp;排名因素之一，不仅因为加载本身，还因为它对客户体验的影响。这就是为什么您必须使用不同的工具不断<span class="15"><span>测试网站速度</span></span><span>以确定减慢</span>&nbsp;Magento 2 商店的问题。</p>
<p class="p"><span style="font-family: Arial;">每个人都熟悉的最常见的工具是</span> Google PageSpeed Insights 或 PSI。它通过 Google 的服务器运行您的 URL，并提供有关您网站运行情况的报告。</p>
<p class="p"><span style="font-family: Arial;">今天，我们希望将您的注意力转向</span><span style="font-family: Arial;">&ldquo;延迟屏幕外图像&rdquo;，它通常会阻止您的网站进入 PSI 绿区。我们将讨论它的含义以及如何修复它以</span><span style="font-family: Arial;">加速</span> Magento。</p>
<p class="p">&nbsp;</p>
<h2><strong><span style="font-family: Arial;">什么是</span><span style="font-family: Arial;">&ldquo;延迟离屏图像&rdquo;消息？</span></strong><strong></strong></h2>
<p class="p">&ldquo;Defer Offscreen Images&rdquo;是 Google PageSpeed Insights 中显示的消息，其中<strong><span style="font-family: Arial;">列出了应在请求的</span> URL 上延迟加载的所有图像</strong><span style="font-family: Arial;">。它还显示了延迟加载这些图像可能会节省的大小。来自</span> Google 的完整描述如下所示：&nbsp;</p>
<p class="p"><em>&ldquo;考虑在所有关键资源完成加载后延迟加载屏幕外和隐藏图像，以缩短交互时间。&rdquo;</em></p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_1.png" width="800" /></p>
<p class="p">一旦网站访问者打开它，您的<strong>网页就会分为两部分</strong>- 首屏 (ATF) 和首屏以下。前者是指 Googlebots 在 PSI 屏幕截图中向您显示的屏幕上可见的区域。换句话说，它是访问者视口内的区域。</p>
<p class="p">然后后者指的是初始加载时不可见的区域或开始滚动页面后显示的所有内容。</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_2.png" width="800" /></p>
<p class="p">如果没有延迟加载，所有页面图像都会在页面呈现之前加载。它会导致延迟，尤其是在您加载包含大量图像的类别页面或产品页面时。</p>
<p class="p"><span style="font-family: Arial;">这就是为什么</span> Google 的<strong>&ldquo;延迟屏幕外图像&rdquo;消息建议您最初加载仅在首屏上方可见的媒体文件并延迟加载，延迟加载其余文件</strong>。</p>
<p class="p"><span style="font-family: Arial;">在这种情况下，一次加载所有图像不会成为问题，因为只会首先加载视口中的图像。</span>&nbsp;</p>
<p class="p"><span style="font-family: Arial;">还需要注意的是，</span><span style="font-family: Arial;">&ldquo;延迟离屏图像&rdquo;问题出现在移动网站上的次数多于桌面网站。这一点至关重要，因为</span><strong>移动体验更依赖于加载时间</strong>，而移动用户可能根本不愿意等待那么长时间来呈现页面。</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_3.png" width="800" /></p>
<h2><strong>&ldquo;延迟离屏图像&rdquo;的原因是什么？&nbsp;</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">出现</span> Google Page Speed Insights&ldquo;延迟离屏图像&rdquo;消息的主要原因是您根本没有在商店中使用图像延迟加载。</p>
<p class="p">您需要加载所有页面资产供用户浏览，这似乎是合乎逻辑的，但它并没有严格定义。正如我们之前开始的那样，只要您在视口中加载所有重要资产，其余部分的加载就可以延迟。</p>
<p class="p"><em>如果访问者只是单击顶部的某个位置并转到另一个页面，那么加载所有页面图像根本没有意义，是吗？</em></p>
<p class="p"><span style="font-family: Arial;">这就是为什么</span> Google 建议您实施延迟加载或延迟加载图像的原因。因此，除非用户开始滚动，否则不会加载图像文件。它有助于相应地提高您的 PSI 分数和用户体验。&nbsp;</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0917/_4.png" width="800" /></p>
<h2><strong><span style="font-family: Arial;">如何修复</span><span style="font-family: Arial;">&ldquo;延迟离屏图像&rdquo;？</span></strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">从</span> PSI 中出现&ldquo;延迟离屏图像&rdquo;的原因来看，要解决此通知，您必须为您的商店实施延迟加载。&nbsp;</p>
<p class="p"><span style="font-family: Arial;">您可以采用</span><span style="font-family: Arial;">&ldquo;硬&rdquo;的方式并将相应的属性添加到&ldquo;首屏&rdquo;图像的 HTML 代码中：</span></p>
<p>&lt;img src="https://yourwebsite.com/images/image-title.jpg" alt="Image Alt Tag" style="width:100%" loading="lazy"&gt;</p>
<p class="p"><span style="font-family: Arial;">但请注意，它不适用于旧版浏览器或任何版本的</span> Safari，这是此方法未被广泛使用的原因之一。&nbsp;</p>
<p class="p">忽略此方法的另一个原因是有像Magento 2 Image Lazy Load这样的强大工具可以自动解决这个问题。您只需要定义<strong>延迟加载块</strong>，模块将覆盖其余部分</p>]]></description>
      <pubDate>Wed, 21 Sep 2022 08:34:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[配置 MAGENTO 2 多语言商店]]></title>
      <link>https://www.360magento.com/blog/Configure-MAGENTO2-multilingual-store/</link>
      <description><![CDATA[<p>创建在线商店是推动创建和运营国际商店的一件好事。<span style="font-family: sans-serif;">随着创建在线商店的举措，如果您会说他们的语言，您将接触到世界上许多国家的客户。以客户的语言接触客户是本文的主题。因此，要以他们的母语接触客户，需要配置</span> Magento 2 多语言商店。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_1_4.png" width="800" />&nbsp;</p>
<p><span style="font-family: sans-serif;">使用</span> Magento 2 多语言商店将文本立即翻译成客户的母语很容易实现目标。<span style="font-family: sans-serif;">从客户的角度来看，需要选择他们的语言环境，客户将以他们的母语看到商店。此外，</span>Magento 2 不会逐字翻译，相反，您可以创建一个包含标题、标签、按钮和链接的含义表，以便让客户感觉商店很自然。因此，本文将分享以客户的母语提供给客户的最简单方法。&nbsp;</p>
<h2><strong>下载语言包</strong><strong></strong></h2>
<p class="p"><span style="font-family: sans-serif;">启用翻译功能后，您必须先下载并安装语言包。为此，请访问</span> Magento Marketplace 并找到所需语言的语言包。安装将由扩展管理器进行。下载和安装的过程通常与您已经使用过的类似。选择下载后，您将获得 .gzip 格式的文件，其中将包含所选语言包。该包包含您选择的语言的独特文件。&nbsp;</p>
<p>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_2_2.png" width="800" /></p>
<h2><strong><span style="font-family: sans-serif;">添加新的商店视图</span>&nbsp;</strong><strong></strong></h2>
<p class="p">下载语言包后，您需要指定在此视图中显示商店。对于每种语言，您都需要添加一个商店视图。安装<a href="https://soft-loft.com/why-migrate-to-magento-2/"><span style="text-decoration: underline;">Magento 2</span></a>时，默认语言为英语，并带有示例数据，您将看到法语、德语和英语。因此，下载语言包后，需要设置特定语言的前端。为此，需要转到您的管理面板，转到<strong>System</strong>，然后是<strong>Configuration</strong>和<strong>Manage stores</strong>。在菜单中，需要选择<strong>Create Store View</strong>，选择<strong>New Store View</strong><span style="font-family: sans-serif;">，并输入其字段名称和代码。最后，需要保存商店视图，并创建新的商店视图。</span>&nbsp;</p>
<h2><strong><span style="font-family: sans-serif;">安装和配置语言包</span>&nbsp;</strong><strong></strong></h2>
<p class="p">安装和配置语言包是下载后需要执行的下一步。为此，您需要进入管理面板，然后进入<strong>Store View</strong>、<strong>Configuration</strong>和<strong>General</strong>。然后，选择<strong>区域设置</strong>并设置您想要更改的语言。一旦你设置了<strong>Locale</strong>，<strong>Save Config</strong><span style="font-family: sans-serif;">，并清除缓存以使更改立即生效。</span>&nbsp;</p>
<p class="p">&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_3_2.png" width="800" /></p>
<h2><strong>更改产品描述和类别</strong><strong></strong></h2>
<p class="p">添加并保存新语言的配置后，需要更改产品的描述和类别。为此，请转到<strong>目录</strong>菜单并选择选项<strong>管理产品</strong>。之后，找到产品，然后单击按钮<strong>Edit</strong>。在打开的菜单中，从菜单中<strong><span style="font-family: sans-serif;">选择视图</span> <span style="font-family: sans-serif;">选择商店视图</span></strong>并更改选项的值，取消选中<strong>使用默认值</strong>选项。然后，单击<strong>保存</strong>或<strong>保存并继续编辑</strong>按钮。如果您需要编辑类别，您可以使用选项<strong>Manage Categories</strong>来完成。</p>
<h2><strong><span style="font-family: sans-serif;">在</span> MAGENTO 2 中设置多种货币</strong><strong></strong></h2>
<p class="p">&nbsp;最后，当您已经在商店中添加并激活了不同的语言时，您将需要添加当地货币。此举将有助于完成更多销售。通过设置多种货币，您将帮助客户了解产品价格与当地商品价格的比较。反过来，购物过程越方便，客户完成结账的可能性就越大。实际上，要在 Magento 2 中开启多币种功能，需要前往<strong>Stores</strong>，然后前往<strong>Settings</strong>、<strong>Configuration</strong>和<strong>General</strong>。然后，导航到<strong>Currency Setup</strong>。您将需要更改该部分中的<strong>默认配置当前配置范围</strong>。最后，填写必填字段并单击<strong>Save Configuration</strong><span style="font-family: sans-serif;">。</span>&nbsp;</p>]]></description>
      <pubDate>Tue, 20 Sep 2022 08:30:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[修复 Magento 2 中的死锁问题]]></title>
      <link>https://www.360magento.com/blog/Fix-the-deadlock-problem-in-Magento2/</link>
      <description><![CDATA[<p><span style="font-family: Arial;">死锁问题是</span> Magento 2 上最大和最难解决的问题之一，每个 Magento 开发人员迟早都会遇到它。<span style="font-family: Arial;">一旦您开始搜索如何解决</span> Magento 中的死锁问题，您将很难找到最终的答案。&nbsp;</p>
<h2><strong>1.测量产品节省执行时间</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">为此，请在</span> Magento 2 根目录中创建<strong>脚本文件夹。</strong>然后使用以下代码将<strong>test.php文件添加到其中：</strong></p>
<p>&lt;?php</p>
<p>error_reporting(E_ALL);</p>
<p>ini_set('display_errors', 1);</p>
<p>use Magento\Framework\App\Bootstrap;</p>
<p>require __DIR__ . '/../app/bootstrap.php';</p>
<p>$bootstrap = Bootstrap::create(BP, $_SERVER);</p>
<p>$obj = $bootstrap-&gt;getObjectManager();</p>
<p>$state = $obj-&gt;get(Magento\Framework\App\State::class);</p>
<p>$state-&gt;setAreaCode('adminhtml');</p>
<p>$startTime = microtime(true);</p>
<p>$productRepo = $obj-&gt;get(Magento\Catalog\Api\ProductRepositoryInterface::class);</p>
<p>$product = $productRepo-&gt;getById(39);</p>
<p>$product-&gt;setName($product-&gt;getName() . ' - test');</p>
<p>$product-&gt;setStoreId(0);</p>
<p>$productRepo-&gt;save($product);</p>
<p>$endTime = microtime(true);</p>
<p>$executionTime = ($endTime - $startTime);</p>
<p>echo " Execution time of script = ".$executionTime." sec";</p>
<p>?&gt;</p>
<p>然后运行<strong>​​php scripts/test.php</strong>以测量通过产品存储库保存一个产品所需的时间。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_1_3.png" width="800" /></p>
<p class="p">Magento 2.4.4 上，它需要不到一秒的时间。对于常规 Magento 2 商店，可接受的值最多为 2 秒。</p>
<p class="p"><span style="font-family: Arial;">如果产品保存在</span> 2 秒内执行，您可以跳过此部分并转到下一部分。</p>
<p class="p">如果您需要找出导致此问题的扩展名，最简单的方法是：</p>
<ol>
<li>禁用所有第三方<a href="https://magefan.com/magento-2-extensions" title="Magento 2 扩展"><span style="text-decoration: underline;">Magento 2 扩展</span></a>并测量保存产品所需的时间。</li>
<li>将所有扩展一一启用，衡量产品保存速度。</li>
</ol>
<p class="p">为每个扩展逐步执行此操作，您会发现哪个扩展对您的性能影响最大。</p>
<h2><strong>2.检查数据库配置</strong><strong></strong></h2>
<p class="p">Magento 建议使用以下<a href="https://experienceleague.adobe.com/docs/commerce-operations/performance-best-practices/software.html" title="Magento 软件推荐"><span style="text-decoration: underline;"><span style="font-family: Arial;">数据库配置</span></span></a><span style="font-family: Arial;">以获得更好的性能。因此，如果您遇到</span> Magento 死锁问题，请检查一下。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_2_1.png" width="800" /></p>
<p class="p"><span style="font-family: Arial;">您可能还面临以下问题：</span>&nbsp;</p>
<p class="p">SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction, query was...</p>
<p class="p">您可以尝试更改<strong>app/etc/env.php文件</strong><a href="https://www.naguel.com/magento-and-a-deadlock-found-when-trying-to-get-lock/" title="Magento 和尝试获取锁时发现死锁"><span style="text-decoration: underline;"><span style="font-family: Arial;">中的锁定节点</span></span></a>并更改内部配置节点中的前缀。</p>
<p>&lt;?php</p>
<p>return [</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;'lock' =&gt; [</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'provider' =&gt; 'db',</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'config' =&gt; [</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'prefix' =&gt; 'new-prefix-here'</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;]</p>
<p>];</p>
<p>然后只需重置索引器并尝试再次重新<a href="https://magefan.com/blog/how-to-reindex-magento-2-via-cli" title="如何使用 CLI 重新索引 Magento 2"><span style="text-decoration: underline;"><span style="font-family: Arial;">索引</span></span></a>。</p>
<h2><strong>3. 监控 Cron 执行</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">如果在执行</span> cron 作业期间发生 Magento 死锁问题，我们强烈建议安装一些 Magento 2 cron 计划扩展。</p>
<p class="p"><span style="font-family: Arial;">它们允许您查看</span> cron 作业执行图表并更改 cron 作业计划以减少对 CPU 的影响以及同时对数据库的请求数。</p>
<p class="p"><span style="font-family: Arial;">如果您发现同时执行了一些扩展进程（超过</span> 10 分钟），请尝试重新安排它们以平均分配负载。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_3_1.png" width="800" /></p>]]></description>
      <pubDate>Mon, 19 Sep 2022 08:24:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中配置统一运费方式]]></title>
      <link>https://www.360magento.com/blog/Configure-uniform-freight-method-in-Magento2/</link>
      <description><![CDATA[<p class="p"><span class="15"><span>统一</span></span>运费配送方式是在您的商店<span class="15"><span>配置配送方式</span></span>的简单解决方案。对于任何具有不同尺寸或重量或任何送货地址的订单，它都会收取固定的运费。由于易于配置和应用，统一运费受到许多携带者的欢迎。</p>
<p class="p">如果您需要在您的商店收取不同的运费，您可以使用<span class="15">Free Shipping Method</span>和<span class="15">Table Rate Shipping Method</span><span>来完成。现在，我们将一起学习如何在</span>&nbsp;Magento 2 中配置统一运费方式。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_1_2.png" width="800" /></p>
<h2><strong><span style="font-family: Outfit;">在</span> Magento 2 中配置统一运费方式的 4 个步骤：</strong><strong></strong></h2>
<ol>
<li>在管理面板上，Stores &gt; Settings &gt; Configuration.</li>
<li><span style="font-family: Outfit;">在左侧面板的</span> <span style="font-family: Outfit;">下</span>Sales，选择Shipping Methods选项卡。</li>
<li>打开Flat Rate栏目，</li>
</ol>
<ul>
<li>Enable<strong>通过选择是</strong><span style="font-family: Outfit;">的运输方式。当时，统一费率可在购物车的</span><span style="font-family: Outfit;">&ldquo;估计运费和税款&rdquo;部分以及结帐时的&ldquo;运费&rdquo;部分中使用。</span></li>
<li>在结帐页面上设置Title统一运费。</li>
<li>Method Name<span style="font-family: Outfit;">在购物车中与计算的运费一起显示的字段中描述方法。方法名称默认为</span><span style="font-family: Outfit;">&ldquo;固定&rdquo;。</span></li>
<li><span style="font-family: Outfit;">要阐明应用统一运费配送方式的条款，请将</span> <span style="font-family: Outfit;">设置为</span>Type以下选项之一：</li>
<li>无：此类型的运费为零，类似于<span style="font-family: Outfit;">免费送货方式</span>。</li>
<li>每个订单：为整个订单设置统一运费</li>
<li><span style="font-family: Outfit;">每件商品：为每件商品设置统一运费。费率乘以购物车中的商品数量，无论是否有多个数量相同或不同的商品。</span>* 提供Price<span style="font-family: Outfit;">您要收取的统一运费。</span>* 如果您要求收取额外的手续费，请设置Calculate Handling Fee<span style="font-family: Outfit;">为</span><span style="font-family: Outfit;">&ldquo;固定&rdquo;或&ldquo;百分比&rdquo;，然后在</span>Handling Fee字段中输入您要设置的数字。Displayed Error Message*如果统一运费不可用，请键入短文本。* 设置Ship to Applicable Countries为两个选项之一：</li>
<li><span style="font-family: Outfit;">所有允许的国家</span>/地区：每个国家/地区都支持免费送货。</li>
<li><span style="font-family: Outfit;">特定国家：仅选定国家</span>/地区支持统一运费。Sort Order在结帐页面的运输方式上设置。</li>
</ul>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 4. Save Config去完成。</p>
<p>&nbsp;</p>
<p class="p"></p>]]></description>
      <pubDate>Sun, 18 Sep 2022 08:28:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 的发票中添加订单 ID、客户 IP 地址]]></title>
      <link>https://www.360magento.com/blog/Add-order-ID-and-customer-IP-address-to-Magento2-s-invoice/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_1_1.png" width="800" /></p>
<h2><strong><span style="font-family: Outfit;">如何显示订单</span> ID</strong><strong></strong></h2>
<ul>
<li>在管理面板上，单击Stores &gt; Settings &gt; Configuration。</li>
<li>在左侧下方的面板中Sales，选择PDF Print-outs。</li>
<li>打开Invoice部分。</li>
<li>选择Yes_Display Order ID in Header</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_2.png" width="800" /></p>
<ul>
<li>打开Shipment部分</li>
<li>选择Yes_Display Order ID in Header</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_3.png" width="800" /></p>
<ul>
<li>打开Credit Memo部分</li>
<li>选择Yes_Display Order ID in Header</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_4.png" width="800" /></p>
<ul>
<li>完成后，单击Save Config。</li>
<li>在管理面板上，单击Stores &gt; Settings &gt; Configuration。</li>
<li>在左侧面板中的销售下，选择销售。</li>
<li>打开常规部分</li>
</ul>
<h2><strong><span style="font-family: Outfit;">如何显示客户</span> IP 地址</strong><strong></strong></h2>
<p><strong><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_5.png" width="800" /></strong></p>
<ul>
<li>选择No_Hide Customer IP</li>
<li>完成后，单击Save Config。</li>
</ul>]]></description>
      <pubDate>Sat, 17 Sep 2022 08:33:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[设置商店信息：Magento 2 中的电话号码、地址、增值税号]]></title>
      <link>https://www.360magento.com/blog/Set-store-information-phone-number-address-VAT-number-in-Magento2/</link>
      <description><![CDATA[<p class="p"><span>设置商店信息</span><span>是在线商店所必需的，以提供将用于销售文件和其他通信的基本信息。您需要添加的商店信息包括电话号码、国家</span>/地区、地区/州、邮政编码、增值税号等。所有这些信息都可以在您需要时灵活编辑。</p>
<p>但是，由于Magento 2 支持自定义多个设置，因此有时商店管理员很难找到确切的编辑位置。以下指南希望对您有所帮助。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0916/_1.png" width="800" /></p>
<h2><strong><span style="font-family: Outfit;">在</span> Magento 2 中设置存储信息的 3 个步骤</strong><strong></strong></h2>
<ul>
<li><span style="font-family: Outfit;">第</span> 1 步：登录到您的 Magento 2 后端</li>
<li><span style="font-family: Outfit;">第</span> 2 步：设置您的商店信息</li>
<li><span style="font-family: Outfit;">第</span> 3 步：检查结果</li>
<li>在管理侧边栏上，单击Stores。然后在下Settings，选择Configuration。</li>
<li>在左侧下方的面板中General，选择General。</li>
<li>展开Store Information部分，然后执行以下操作：
<ul>
<li>输入Store Name要在所有通信中使用的。</li>
<li>输入Store Phone Number, 按照您希望的格式显示。</li>
<li>在该Store Hours of Operation<span style="font-family: Outfit;">字段中，输入您的商店的营业时间。例如：周一至周五，</span>9-5，周六 9-中午 PST</li>
<li>选择Country您的企业所在的位置。</li>
<li>选择Region/State国家。</li>
<li>输入Store Address.&nbsp;如果地址很长，请继续第Store Address2 行的地址。</li>
<li>如果适用，请输入您商店的<span style="font-family: Outfit;">增值税号</span>。要验证号码，请单击Validate VAT&nbsp;Number按钮。</li>
</ul>
</li>
<li>完成后，单击Save Config。</li>
</ul>
<h3><strong><span style="font-family: Outfit;">第</span> 1 步：登录到您的 Magento 2 后端</strong><strong></strong></h3>
<h3><strong><span style="font-family: Outfit;">第</span> 2 步：设置您的商店信息</strong><strong></strong></h3>
<h3><strong><span style="font-family: Outfit;">第</span> 3 步：检查结果</strong><strong></strong></h3>
<p class="p">您现在可以在任何订单测试中检查结果。</p>]]></description>
      <pubDate>Fri, 16 Sep 2022 08:29:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改商店电子邮件地址]]></title>
      <link>https://www.360magento.com/blog/change-store-email-addresses-magento/</link>
      <description><![CDATA[<p>当您开始在 Magento 2 上销售时，更改商店电子邮件地址是最重要的任务之一。您最多可以有五个不同的电子邮件地址来代表每个商店或视图的不同职能或部门。除了以下预定义的电子邮件身份之外，您还可以根据需要设置三个自定义身份。</p>
<p>一般联系人<br />销售代表<br />客户支持</p>
<p>每个身份及其关联的电子邮件地址都可以与特定的自动电子邮件相关联，并显示为从您的商店发送的电子邮件的发件人。联系我们表格将被发送到不同的电子邮件地址。多亏了这一点，您可以减少管理员的工作量，并通过将问题分配给合适的部门来确保更快的回复。</p>
<p>更改商店电子邮件地址的 3 个步骤<br />第 1 步：为您的域设置电子邮件地址<br />第 2 步：为您的商店配置电子邮件地址<br />第 3 步：更新销售电子邮件配置<br />第 1 步：为您的域设置电子邮件地址<br />在为商店配置电子邮件地址之前，必须将每个电子邮件地址设置为您的域的有效电子邮件地址。按照服务器管理员或电子邮件 托管服务提供商的说明创建所需的每个电子邮件地址。</p>
<p>第 2 步：为您的商店配置电子邮件地址<br />在此步骤中，您可以设置一般联系人、销售代表和客户支持的电子邮件地址。</p>
<p>在管理侧边栏上，单击Stores。然后在下Settings，选择Configuration。<br />在左侧下方的面板中General，选择Store Email Addresses。<br />展开该General Contact部分，然后执行以下操作：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/email-template.png" /></p>
<p>在发件人姓名字段中，键入要作为与常规联系人身份关联的任何电子邮件的发件人显示的人员姓名。<br />在发件人电子邮件字段中，键入关联的电子邮件地址。</p>
<p>对您计划使用的每个商店电子邮件地址重复此过程。</p>
<p>完成后，点击 Save Config</p>
<p>第 3 步：更新销售电子邮件配置<br />现在，您将更改将用于销售单据（例如订单、发票、装运和贷项通知单）的电子邮件。如果您使用自定义电子邮件地址，请确保更新任何相关电子邮件的配置，以便正确的身份显示为发件人。</p>
<p>在左侧面板的 下Sales，选择Sales Emails。该页面有一个单独的部分用于以下各项：<br />订单和订单评论<br />发票和发票注释<br />装运和装运评论<br />贷项通知单和贷项通知单注释<br />从Order开始，展开每条消息的部分，并确保选择了正确的发件人。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/store-email-address.png" /></p>
<p><br />完成后，单击 Save Config 。</p>]]></description>
      <pubDate>Thu, 15 Sep 2022 08:29:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改欢迎信息]]></title>
      <link>https://www.360magento.com/blog/change-welcome-message-in-magento/</link>
      <description><![CDATA[<p>欢迎消息显示在标题的右上角，其中包括客户登录时的姓名。但是，对于未登录您商店的访问者，默认 Magento 2 将自动显示消息&ldquo;默认欢迎消息&rdquo;。<br />因此，为了引起客户的注意，您应该确保此欢迎信息必须更具吸引力和醒目。本文将向您展示如何通过 3 个简单的步骤更改 Magento 2 中的欢迎信息。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/QQ20220914-140900_2x.png" /><br />在 Magento 2 中更改欢迎信息的 3 个步骤</p>
<p>第 1 步：登录到您的 Magento 2 后端。<br />第 2 步：更改特定商店的欢迎信息<br />第 3 步：检查结果</p>
<p>第 1 步：登录到您的 Magento 2 后端</p>
<p>Magento 2.0<br />在管理侧边栏上，转到Stores &gt; Settings &gt; Configuration。<br />Magento 2.1 或以上<br />在管理侧边栏上，转到Content &gt; Design &gt; Configuration &gt; Select your current theme &gt; 。</p>
<p>第 2 步：更改特定商店的欢迎信息<br />选择要更改欢迎消息的商店视图。<br />在操作列下，打开Edit模式。<br />向下滚动并展开该Header部分。然后，输入Welcome Text您要显示的。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/e-message.png" /></p>
<p>第 3 步：检查结果<br />一切完成后，点击Save Config。<br />当提示更新页面缓存时，单击Cache Management工作区顶部的链接。然后，按照说明刷新缓存。</p>]]></description>
      <pubDate>Wed, 14 Sep 2022 08:28:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中自定义电子邮件模板、事务性电子邮件]]></title>
      <link>https://www.360magento.com/blog/Customize-email-templates-and-transactional-emails-in-Magento2/</link>
      <description><![CDATA[<p><strong>事务性电子邮件</strong>是系统发送的短消息，作为对客户在您网站上的活动的响应，同时支持正文内容<span class="16"><span>的默认模板，并与已完成电子邮件的页眉和页脚模板相关联。</span></span><span>特别是，由于内容的格式是</span>&nbsp;HTML 和 CSS，可以灵活地<strong><span>为</span>&nbsp;Magento 2 商店定制电子邮件模板</strong>以适应每个网站或每个商店视图。通过插入变量并将其保存在后端很容易进行自定义，您的自定义电子邮件模板将可供使用。为了确保它被发送到客户的收件箱，您应该<span class="16"><span>启用</span>&nbsp;SMTP</span>。</p>
<p class="p"><span class="15"><span style="font-family: Outfit;">电子邮件模板包含您的徽标</span></span><span>和</span><span class="15"><span style="font-family: Outfit;">商店信息</span></span><span>，因此您无需再进行编辑或设计。按照本教程，您可以获得详细的指南来编辑电子邮件模板或创建新的交易电子邮件，</span><span class="15"><span style="font-family: Outfit;">跟进电子邮件</span></span><span>。此外，为确保您的定制符合您的预期，您应该在将链接发送给客户之前点击预览链接进行检查。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/1_1.png" width="800" /></span></p>
<p class="p"><span class="15"><span style="font-family: Outfit;">如上所述，电子邮件分为三个元素：</span>Header、Body 和 Footer。</span><span></span></p>
<p class="p"><strong>标头模板</strong><strong>Header Template</strong>：标头是发送给客户的电子邮件的顶部，同时它很好地吸引了查看者的视线，因此您的徽标被放置在那里并直接链接到您的商店。这是为您的网站带来更多流量的好主意。</p>
<p class="p"><strong>页脚模板</strong><strong>Footer Template</strong>：页脚模板包括结论和发件人的签名。随意编辑页脚的内容，并添加更多信息，如公司电子邮件、号码或地址。</p>
<p class="p"><strong>消息模板</strong><strong>Message Template</strong><span style="font-family: Outfit;">：消息模板被称为电子邮件的正文，当您使用页眉和页脚模板时，自定义是类似的。但是，使用消息模板时，应用不同的活动或事件时会有所不同。</span>Magento 为您提供了相应的模板来使用或修改如何适合您的品牌。例如，您可以从与收件人相关的主要信息开始。</p>
<h2><span style="font-family: Outfit;">在</span> Magento 2 中自定义电子邮件模板的 4 个步骤</h2>
<ul>
<li><span style="font-family: Outfit;">第</span> 1 步：加载默认模板</li>
<li><span style="font-family: Outfit;">第二步：填写模板信息</span></li>
<li><span style="font-family: Outfit;">第</span> 3 步：预览模板</li>
<li><span style="font-family: Outfit;">第</span> 4 步：应用新模板</li>
<li>在管理面板上，Marketing &gt; Communications &gt; Email Templates.</li>
<li>点击Add New Template,
<ul>
<li>选择<strong>模板</strong><strong>Template</strong>的类型：页眉Header、页脚Footer或消息模板&nbsp;Message Templates。</li>
<li>点击Load Template，会出现对应的格式。</li>
</ul>
</li>
</ul>
<h3><span style="font-family: Outfit;">第</span> 1 步：加载默认模板</h3>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/2.png" width="800" /></p>
<h3><strong>第二步：填写模板信息</strong><strong></strong></h3>
<p class="p">在此步骤中，您可以为模板添加信息，例如名称、主题、内容、变量和样式。</p>
<ul>
<li>字段中新模板的名称Template Name。</li>
<li>插入Template Subject模板的组织。模板列表可以按主题列进行排序和过滤。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/3_1.png" width="800" /></p>
<ul>
<li>Template Content在框中根据需要<span style="font-family: Outfit;">自定义</span> HTML 。</li>
<li>单击以在框中Insert Variable插入变量。Template Content</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/4.png" width="800" /></p>
<p class="p">使用插入的变量，您可以将其直接自定义到模板中。</p>
<ul>
<li><span style="font-family: Outfit;">如果要声明任何</span> CSS，请在Template Styles框中输入样式。</li>
</ul>
<h3><strong><span style="font-family: Outfit;">第</span> 3 步：预览模板</strong><strong></strong></h3>
<p class="p">修改完成后，让我们通过模板预览看看实际修改后的样子：</p>
<ul>
<li>为确保模板按照您的预期正确应用，Preview Template如果需要，请单击以进行调整。</li>
<li>Save Template去完成。</li>
</ul>
<p class="p">每个完成的新模板都会在可用电子邮件模板列表中自动更新。</p>
<h3><strong><span style="font-family: Outfit;">第</span> 4 步：应用新模板</strong><strong></strong></h3>
<p class="p">这是启动新电子邮件模板的最后一步。完成这些设置，您就可以开始了：</p>
<p class="p"><span style="font-family: Outfit;">页脚</span>/页眉模板</p>
<ul>
<li><span style="font-family: Outfit;">转到</span> Magento Admin，按照路径：Store &gt; Configurations &gt; General &gt; Design，打开Email部分。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/5.png" width="800" /></p>
<ul>
<li><span style="font-family: Outfit;">为新的页脚</span>/页眉模板设置名称</li>
<li>Save Config去完成。</li>
</ul>
<p class="p">消息模板</p>
<ul>
<li><span style="font-family: Outfit;">转到</span> Magento Admin，按照以下路径：Store &gt; Configuration &gt; Customers &gt; Customer Configuration</li>
</ul>
<p class="p">根据模板的放置位置打开相关选项，例如模板属于Create New Account Options：</p>
<ul>
<li><span style="font-family: Outfit;">为</span> <span style="font-family: Outfit;">设置新模板</span>Welcome Email。</li>
<li>Save Config去完成</li>
</ul>]]></description>
      <pubDate>Tue, 13 Sep 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 显示错误的客户IP]]></title>
      <link>https://www.360magento.com/blog/Magento2-displays-wrong-customer-IP/</link>
      <description><![CDATA[<p class="p"><span><span style="font-family: Arial;">有时，您可以在</span> Magento 2 管理面板中看到 127.0.0.1 或其他错误的客户 IP，而不是真实的客户 IP 地址。这可能是由于您的 Magento 2 商店启用了代理，例如Varnish、Cloudflare、Sucuri.net&nbsp; 。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">要解决错误的</span> IP 地址问题，您需要：</span><span></span></p>
<p class="p"><span>1.</span><span><span style="font-family: Arial;">在</span>M2目录下新建一个文件</span><span>app/etc/XIP/di.xml</span><span></span></p>
<p class="p"><span>2.</span><span>粘贴代码</span><span></span></p>
<p class="p"><span>&lt;?xml version="1.0"?&gt; </span><span></span></p>
<p class="p"><span>&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" </span><span></span></p>
<p class="p"><span>xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config. xsd"&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;type name="Magento\Framework\HTTP\PhpEnvironment\RemoteAddress"&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument name="alternativeHeaders" xsi:type="array"&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item name="x-client-ip" xsi: type="string"&gt;HTTP_X_REAL_IP&lt;/item&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item name="x-cf-connecting-ip" xsi:type="string"&gt;HTTP_CF_CONNECTING_IP&lt;/item&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- &lt;item name="x-cf- mfcustom-ip" xsi:type="string"&gt;SOME_CUSTOM_SERVER_KEY &lt;/item&gt; --&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/argument&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/type&gt; </span><span></span></p>
<p class="p"><span>&lt;/config&gt;</span><span></span></p>
<p class="p"><span>&nbsp;</span></p>
<p class="p"><!--[if !supportLists]--><span>3.&nbsp;</span><!--[endif]--><span><span style="font-family: Arial;">保存文件，运行依赖注入编译，使用</span> CLI 命令：</span><span></span></p>
<p class="p"><span>php bin/magento setup:di:compile</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">4.</span></span><span>4. 如果这没有帮助，那么您需要使用其他值而不是&ldquo;</span><span>&nbsp;</span><strong><span class="15">SOME_CUSTOM_SERVER_KEY</span></strong><span>&nbsp;&rdquo;并取消注释行。要获得正确的值，您需要使用代码在 Magento 文件夹中创建 test.php 文件：</span><span></span></p>
<p class="p"><span>&lt;?php </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;echo '&lt;pre&gt;'; </span><span></span></p>
<p class="p"><span>&nbsp;&nbsp;&nbsp;&nbsp;var_dump($_SERVER);</span><span></span></p>]]></description>
      <pubDate>Mon, 12 Sep 2022 08:29:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[要启用 Magento 2 缺货通知：]]></title>
      <link>https://www.360magento.com/blog/To-enable-Magento2-out-of-stock-notification/</link>
      <description><![CDATA[<p class="p"><span>1. 在</span><strong><span class="15">Stores &gt; Configuration &gt; Catalog &gt; Inventory</span></strong><span>.</span><strong><span class="15">中启用显示缺货产品</span></strong><strong><span class="15">Display Out of Stock Products</span></strong><span>选项</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/_1.png" width="800" /></span></p>
<p class="p">2. 导航到<strong>Stores &gt; Configuration &gt; Catalog &gt; Catalog</strong>&nbsp;&gt;&nbsp;&nbsp;<strong>Product Alerts</strong>并启用<strong>Allow Alert When Product Comes Back in Stock</strong>选项。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/_2.png" width="800" /></p>
<p><span style="font-family: Arial;">只需启用此选项即可在店面上显示</span><span style="font-family: Arial;">&ldquo;有货时通知我&rdquo;通知。</span>但是，它不会发送通知</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/_3.png" width="800" /></p>
<p class="p">3.&nbsp;指定应在<strong>产品警报运行设置</strong><strong>Product Alert Run</strong>部分发送缺货通知的<strong>频率</strong><strong>Frequency</strong>和<strong>开始时间</strong><strong>Start Time</strong><strong>。</strong></p>
<p>填写<strong>错误电子邮件</strong>信息，以收到有关缺货通知和<strong>保存配置</strong>的任何问题的通知。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/_4.png" width="800" /></p>
<p>Magento 缺货通知可确保您不会错过任何转化，同时让客户满意。但是，如果您仍然不想在商店中展示缺货产品，则必须注意库存</p>]]></description>
      <pubDate>Sun, 11 Sep 2022 08:23:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 重新索引订单网格]]></title>
      <link>https://www.360magento.com/blog/Magento-2-Reindex-Order-Grid/</link>
      <description><![CDATA[<p class="p">无论商店中的订单流程如何，订单网格都是定义订单处理有效性的关键因素之一。</p>
<p class="p">您从订单网格中获得的信息越多，您<span class="15"><span>处理订单</span></span>的速度就越快，而无需分别处理每个订单。</p>
<p class="p"><span>然而，信息量并不是重点。它的有效性是最重要的。</span><span></span></p>
<p class="p"><span>有时，网格中显示的实际订单数据和订单数据不同。账单公司名称可能丢失，送货地址可能不完整，或者订单可能根本没有在网格中生成。</span><span></span></p>
<p class="p"><span>它使商店经理感到困惑并减慢了流程，因为他们在过滤时无法找到相关订单。</span><span></span></p>
<p class="p"><span>为避免这种情况</span><strong><span class="15"><span style="font-family: Arial;">，您需要重新索引</span> Magento 中的订单网格</span></strong><span>。</span><span></span></p>
<p class="p"><span>通常，要运行订单网格重新索引，您需要召集开发人员，除非您有一些技术知识可以自行创建自定义解决方案。</span><span></span></p>
<p class="p"><span>为了简化流程</span><strong><span class="15"><span style="font-family: Arial;">，我们引入了</span> Magento&nbsp;</span></strong><span class="16">2</span><span class="16"></span><span class="16"> Bett</span><span class="16">er</span><span class="16"> Adm</span><span class="16">in</span><span class="16"> Or</span><span class="16">der</span><span class="16"> Grid</span><span><span style="font-family: Arial;">的</span> Magento 2 重新索引订单网格功能。</span><span></span></p>
<p class="p"><span>它允许您直接从网格中重新索引订单网格，一键即可。</span><span></span></p>
<p class="p"><span>因此，您需要做的就是转到</span><strong><span class="15">Sales &gt; Orders</span></strong><span>&nbsp;</span><span>，然后按重新</span><strong><span class="15">Reindex Grid</span></strong><span>按钮。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/1.png" width="800" /></span></p>
<p class="p"></p>
<p class="p"><span><span style="font-family: Arial;">它将刷新</span> Magento 订单网格数据，因此有效的订单信息会显示在网格中。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0908/3.png" width="800" /></span></p>]]></description>
      <pubDate>Sat, 10 Sep 2022 08:26:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中启用管理员登录验证码]]></title>
      <link>https://www.360magento.com/blog/enable-admin-login-captcha-magento-2/</link>
      <description><![CDATA[<p>将验证码要求添加到管理员登录和忘记密码页面有助于将您的商店安全性提高到一个新的水平。当用户单击该Reload图标时，验证码将能够无限制地重新加载。</p>
<p><strong>在 Magento 2 中启用管理员验证码的步骤</strong></p>
<p>1、在管理面板上，单击Stores。在该Settings部分中，选择Configuration。<br />2、Admin在Advanced左侧面板中选择<br />3、打开该CAPTCHA部分，然后继续执行以下操作：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/Zir5S5l.png" /></p>
<p>在该Enable CAPTCHA on Frontend字段中，选择&ldquo;是&rdquo;以在前端启用 CAPTCHA<br />在该Font字段中，选择要用于 CAPTCHA 符号的字体名称。默认值为 LinLibertine。<br />在该Forms字段中，选择以下要使用 CAPTCHA 的表单之一<br />管理员登录<br />管理员忘记密码<br />在Displaying Mode，选择以下选项之一<br />总是<br />尝试登录次数后<br />在该Number of Unsuccessful Attempts to Login字段中，输入在出现验证码之前尝试登录失败的次数。如果您输入零，则验证码将始终可用<br />在该CAPTCHA Timeout (minutes)字段中，输入 CAPTCHA 过期前的分钟数。当 CAPTCHA 过期时，用户必须重新加载页面以生成新的 CAPTCHA。<br />在该Number of Symbols字段中，输入 CAPTCHA 将在其中更改的符号范围数，例如：3-7。最大符号数为八个。<br />在该Symbols Used in CAPTCHA字段中，指定可在 CAPTCHA 中使用的符号。仅设置字母（az 和 AZ）或数字（0-9）以输入框。不允许使用空格或其他字符，默认情况下不使用类似的符号。<br />在该Case Sensitive字段中，选择Yes是否要求用户完全按照所示输入大写和小写字符<br />完成后，点击Save Config</p>]]></description>
      <pubDate>Fri, 09 Sep 2022 08:29:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何配置 Magento 2 管理员操作日志？]]></title>
      <link>https://www.360magento.com/blog/configure-action-log-magento-2/</link>
      <description><![CDATA[<p>Magento 2 支持您配置管理员操作日志，帮助您管理和跟踪管理员的所有活动。您可以在网格上查看日志历史记录，并了解您的商店管理面板中已完成的操作，并了解执行操作的人员。此外，您可以在操作日志上查看 IP 和日期。该功能对于帮助您有效管理系统非常重要，尤其是在您的商店有多个管理员的情况下。</p>
<p>现在请按照下面给出的简单指南来配置操作日志：</p>
<p>1、在管理面板上，点击商店。在该Settings部分中，选择Configuration。<br />2、Admin在Advanced左侧面板中选择<br />3、打开该Admin Actions Logging部分，然后继续执行以下操作：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/8xmQ5tx.png" /></p>
<p></p>
<p><strong>要启用管理员日志记录，请选中该复选框。</strong><br /><strong>要禁用管理员日志记录，请清除该复选框。</strong></p>
<p><br />完成后，单击Save Config。<br />这就是可以配置 Magento 2 管理员操作日志以实现更好的系统管理的方式。如果您想通过查看 IP、名称、日期和操作等信息来监控多个管理员的活动，这将是一个很大的帮助。</p>
<p></p>]]></description>
      <pubDate>Thu, 08 Sep 2022 08:30:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中上传占位符]]></title>
      <link>https://www.360magento.com/blog/How-to-upload-Placeholders-in-Magento2/</link>
      <description><![CDATA[<p>如果您还没有完成主要的产品图片，那么预订即将推出的产品图片是一个好主意。替换的图像称为占位符。这意味着店主将在产品列表页面上使用临时图像，直到正式产品图像准备好出现。</p>
<p><span>在以下情况下，您可能需要 Magento 2 占位符：</span></p>
<ul>
<li><span>产品图片还没有准备好，但您仍然希望产品能够获得更好的 SEO 效果并引起客户的注意。</span></li>
<li><span>即使完整的内容还没有准备好，您也想检查前端的情况。</span></li>
<li><span>存在一些技术问题，在您找到解决这些问题的方法期间，您仍然希望客户体验不会因显示占位符而中断。</span></li>
</ul>
<p><span><span>默认情况下，上传的占位符图像通常是 Magento 徽标，但您也有权根据需要应用其他图像，例如您的品牌徽标。</span><span>占位符图像在目录页面上显示如下：</span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/1_3.png" width="800" /></span></p>
<p><span>那么通过 Magento Admin 上传占位符图像的快速方法是什么？</span></p>
<h2 id="3-steps-to-upload-placeholder-images-in-magento-2"><span>在 Magento 2 中上传占位符图像的 3 个步骤</span></h2>
<ul>
<li>第 1 步：登录到您的 Magento 2 后端</li>
<li>第 2 步：上传占位符图片</li>
<li>第三步：保存配置</li>
</ul>
<h3 id="login-magento-2-backend"><span>第 1 步：登录到您的 Magento 2 后端</span></h3>
<ul>
<li><span>在管理侧边栏上，</span><code class="language-plaintext highlighter-rouge">Stores &gt; Settings &gt; Configuration</code><span>.</span></li>
<li><span>在面板的 下</span><code class="language-plaintext highlighter-rouge">Catalog</code><span>，选择</span>Catalog<span>。</span></li>
</ul>
<h3 id="upload-placeholder"><span>第 2 步：上传占位符图片</span></h3>
<ul>
<li><span>展开该</span><code class="language-plaintext highlighter-rouge">Product Image Placeholders</code><span>部分。</span></li>
<li><span>单击</span><code class="language-plaintext highlighter-rouge">Choose File</code><span><span>以上传占位符图像。</span><span>您可以为每个角色使用相同或</span></span>不同的图像<span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/2_3.png" width="800" /></span></p>
<h3 id="save-configuration"><span>第三步：保存配置</span></h3>
<p><span>点击</span><code class="language-plaintext highlighter-rouge">Save</code><span>完成。</span></p>
<h2 id="final-words"><span>最后的话</span></h2>
<p><span><span>本教程向您展示了在 Magento 2 中上传占位符的快速步骤，这在各种情况下都非常有用，可确保为客户提供流畅的体验并支持品牌营销</span><span>。</span><span>如果您想了解更多信息，请不要忘记发表评论。</span></span></p>]]></description>
      <pubDate>Wed, 07 Sep 2022 08:28:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改 Favicon]]></title>
      <link>https://www.360magento.com/blog/How-to-Change-Favicon-in-Magento2/</link>
      <description><![CDATA[<p>更改 Favicon Magento 2&nbsp;-Favicon是&ldquo;favorite icon&rdquo;的缩写，指的是每个浏览器页面标签上的小图标。根据浏览器的不同，网站图标也会出现在地址栏中，就在 URL 之前。网站图标的大小通常为 16 x 16 像素或 32 x 32 像素。Magento 接受 ICO、PNG、JPG 和 SVG 文件类型，但并非所有浏览器都支持这些格式。&nbsp;用于网站图标的最广泛支持网上有许多免费工具可用于生成 ICO 图像或将现有图像转换为格式。</p>
<p><span>如果网站访问者打开许多选项卡并且无法再看到网站名称，他们将通过查看图标来识别您的商店。</span><span>图标可以代表您的品牌标识，因此使其在人群中脱颖而出将使您有机会在客户心目中变得更加独特。</span><span>这里有 3 个步骤供您更改 Magento 2 网站的 favicon。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/1_2.png" width="800" /></span></p>
<h2 id="3-steps-to-change-favicon-in-magento-2"><span>在 Magento 2 中更改 Favicon 的 3 个步骤</span></h2>
<p><em>您可以通过以下步骤更改 Magento 2 中的 Favicon：</em></p>
<ul>
<li>第 1 步：创建网站图标</li>
<li>第 2 步：将 Favicon 上传到您的商店</li>
<li>第三步：刷新缓存</li>
</ul>
<h3 id="create-favicon"><span>第 1 步：创建网站图标</span></h3>
<ul>
<li><span><span>使用您选择的图像编辑器</span><span>创建</span><span>徽标</span></span><code class="language-plaintext highlighter-rouge">16x16</code><span>的</span><code class="language-plaintext highlighter-rouge">32x32</code><span>图形图像。</span><a href="https://www.mageplaza.com/kb/how-upload-logo-magento-2.html"><span></span></a><span></span></li>
<li><span><span>（可选）使用可用的在线工具之一将文件转换为 .ico 格式。</span><span>然后，将文件保存到您的计算机。</span></span></li>
</ul>
<h3 id="upload-favicon"><span>第 2 步：将 Favicon 上传到您的商店</span></h3>
<h4 id="magento-20x"><span>Magento 2.0.x</span></h4>
<ul>
<li><span>在 上</span><code class="language-plaintext highlighter-rouge">Admin sidebar</code><span>，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>然后在下</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span>在左侧下方的面板中</span><code class="language-plaintext highlighter-rouge">General</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Design</code><span>。</span></li>
<li><span>展开该</span><code class="language-plaintext highlighter-rouge">HTML Head</code><span><span>部分。</span><span>然后，执行以下操作：</span></span></li>
</ul>
<h4 id="magento-21"><span>Magento 2.1+</span></h4>
<p><span><span>从 Magento 2.1 开始，这条路径发生了变化。</span><span>它位于</span></span><code class="language-plaintext highlighter-rouge">Content &gt; Configuration &gt; Select your current theme &gt; HTML Head</code></p>
<ul>
<li><span>在 上</span><code class="language-plaintext highlighter-rouge">Admin sidebar</code><span>，单击</span><code class="language-plaintext highlighter-rouge">Content</code><span><span>。</span><span>然后在下</span></span><code class="language-plaintext highlighter-rouge">Design</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li>
<p><span>在左侧下方的面板中</span><code class="language-plaintext highlighter-rouge">Design Configuration</code><span>，单击</span><code class="language-plaintext highlighter-rouge">Edit</code><span>您当前的网站 storeview。</span></p>
</li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/2_2.png" width="800" /></span></p>
<ul>
<li><span>展开该</span><code class="language-plaintext highlighter-rouge">HTML Head</code><span><span>部分。</span><span>然后，执行以下操作：</span></span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/3_2.png" width="800" /></span></p>
<ul>
<li><span><span>单击选择文件。</span><span>然后，找到您准备的网站图标文件。</span></span></li>
<li>
<p><span>如果要删除当前的网站图标，请标记删除图像复选框。</span></p>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。</span></li>
</ul>
<h3 id="refresh-cache"><span>第三步：刷新缓存</span></h3>
<ul>
<li><span>当提示</span>刷新缓存<span>时，单击</span><code class="language-plaintext highlighter-rouge">Cache Management</code><span>工作区顶部消息中的链接。</span></li>
<li><span>在列表中，标记已标记</span>的 Page Cache<span>复选框</span><code class="language-plaintext highlighter-rouge">Invalidated</code></li>
<li><span><span>将操作设置为&ldquo;刷新&rdquo;。</span><span>然后，单击</span></span><code class="language-plaintext highlighter-rouge">Submit</code><span>。</span></li>
<li><span>要查看新的网站图标，请返回您的店面并按 F5 刷新浏览器。</span></li>
</ul>
<p><span><span>立即开始更改您的网站图标，通过为其提供清晰的品牌标识来吸引更多流量并降低跳出率。</span><span>今天的帖子讨论了快速</span></span><span>更改 Magento 2 中的 favicon 的</span><span><span>步骤。</span><span>如果您有任何疑问，请随时在评论部分与我们分享。</span></span></p>]]></description>
      <pubDate>Tue, 06 Sep 2022 08:24:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改徽标]]></title>
      <link>https://www.360magento.com/blog/How-to-Change-Logo-in-Magento2/</link>
      <description><![CDATA[<p>为您的在线商店应用 Magento 2 平台后，您可能要做的第一件事就是更改标题中的 Magento 2 默认徽标，并为浏览器上传一个网站图标。上传您自己的标志将使商店在客户心目中更专业，更可靠。特别是，商业标志将帮助您显着提高品牌知名度。</p>
<h2 id="3-steps-to-change-logo-in-magento-2"><span>在 Magento 2 中更改徽标的 3 个步骤</span></h2>
<ul>
<li>第 1 步：上传您的徽标</li>
<li>第 2 步：在 Magento 2 中上传前端徽标</li>
<li>第 3 步：检查结果</li>
</ul>
<h3 id="uploading-logo"><span>第 1 步：上传您的徽标</span></h3>
<p><span><span>标头中徽标的大小和位置由商店的主题决定。</span><span>您的徽标可以保存为 GIF、PNG、JPG 或 SVG 文件类型，并从商店的管理员上传。</span><span>示例数据中的默认 Magento 徽标是一个 SVG 文件，它是一种基于 XML 的可扩展矢量图形格式。</span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/1_1.png" width="800" /></span></span></p>
<p><span><span>徽标图像位于服务器上的以下位置。</span><span>具有该名称并位于该位置的任何图像文件都用作主题徽标。</span></span></p>
<p><span>小路：</span><code class="language-plaintext highlighter-rouge">app/design/frontend/[vendor]/[theme]/web/images/logo.svg</code></p>
<p><span>如果您不知道徽标的大小或主题中使用的任何其他图像，请在浏览器中打开页面，右键单击图像，然后检查元素。</span></p>
<p><span>除了在标志上</span><code class="language-plaintext highlighter-rouge">the header</code><span>，你的标志还出现在</span><code class="language-plaintext highlighter-rouge">email templates</code><span>和</span><code class="language-plaintext highlighter-rouge">PDF invoices</code><span>上等</span><code class="language-plaintext highlighter-rouge">sales documents</code><span><span>。</span><span>用于电子邮件模板和发票的徽标有不同的尺寸</span></span>要求<span>，必须单独上传。</span></p>
<h3 id="upload-frontend-logo"><span>第 2 步：在 Magento 2 中上传前端徽标</span></h3>
<h4 id="magento-20"><span>Magento 2.0</span></h4>
<ul>
<li><span>在管理侧边栏上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>然后在下</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span>在左侧面板中</span><code class="language-plaintext highlighter-rouge">General</code><span>选择设计。</span></li>
<li><span>如果您有多个商店或视图，</span><code class="language-plaintext highlighter-rouge">Store View</code><span><span>请在左上角设置应用配置的视图。</span><span>然后，清除每个字段后的复选框，以便输入新值。</span></span></li>
<li><span>展开该</span><code class="language-plaintext highlighter-rouge">Header</code><span><span>部分。</span><span>然后，执行以下操作：</span></span></li>
</ul>
<h4 id="magento-21"><span>Magento 2.1</span></h4>
<p><span><span>从 Magento 2.1 开始，这条路径发生了变化。</span><span>它位于</span></span><code class="language-plaintext highlighter-rouge">Content &gt; Configuration &gt; Select your current theme &gt; Header</code></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/2_1.png" width="800" /></span></span></p>
<p><span><span><span>你可以看到像这样的 Header 部分。</span></span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/3_1.png" width="800" /></span></span></p>
<p></p>
<ul>
<li><span><span>要上传新徽标，请单击选择文件。</span><span>然后，从您的计算机中选择文件。</span></span></li>
<li><span>输入</span><code class="language-plaintext highlighter-rouge">Logo Image Width</code><span>和</span><code class="language-plaintext highlighter-rouge">Logo Image Height</code><span>。</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Logo Image Alt</code><span>字段中，输入您希望在有人将鼠标悬停在图像上时显示的文本。</span></li>
</ul>
<h3 id="check-result"><span>第 3 步：检查结果</span></h3>
<p><span>完成后，点击</span><code class="language-plaintext highlighter-rouge">Save Config</code></p>
<p><span>现在你的标志已经准备好了。</span></p>
<h2 class="active" id="where-should-you-use-your-brand-logo"><span>你应该在哪里使用你的品牌标志？</span></h2>
<p><span>除了您的网站标题之外，还有很多地方可以放置您的品牌徽标以获得更专业的形象、建立信任并将其用作营销工具：</span></p>
<ul>
<li>电子邮件</li>
<li>发票</li>
<li>表格/调查</li>
<li><span>横幅广告</span></li>
<li>社交媒体渠道</li>
<li><span>产品包装</span></li>
<li><span>名片和文具</span></li>
</ul>
<p><span>此外，您可能还想</span>更新页脚中的版权声明<span><span>。</span><span>这些是您可以立即处理的一些简单的设计任务。</span><span>当您的商店正在开发中时，您可以打开商店演示通知，然后在准备启动时将其删除。</span></span></p>
<h2 class="active" id="the-bottom-line"><span>最后的话</span></h2>
<p><span><span>如果您想专业化您的在线商店，请从更改徽标开始。</span><span>上述易于遵循的步骤将使您立即完成此操作。</span><span></span><span>如果您有任何问题，请在下方留言</span></span><span>与我们联系，我们将尽力提供帮助。</span></p>]]></description>
      <pubDate>Mon, 05 Sep 2022 08:28:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中上传产品视频 - Youtube API Key]]></title>
      <link>https://www.360magento.com/blog/How-to-upload-Product-Videos-in-Magento2-Youtube-API-Key/</link>
      <description><![CDATA[<p>您想知道如何更有效地吸引和说服客户吗？答案是，给他们看，不要告诉他们。为了帮助您的产品更具吸引力和活力，Magento 2 允许为您需要的任何产品上传单独的视频。视频包含从图像到音频的各种媒体，因此是传达任何信息的有力方法。这就是为什么观看 Magento 产品视频将在购买前向客户提供您产品的真实概览。产品越视觉化，客户创造的销售额就越多。</p>
<p><span><span>视频可以从您的浏览器上传，也可以将 Youtube 链接嵌入到产品设置中。</span><span>为此，您必须从您的 Google 帐户获取 API 密钥并将其插入到配置中。</span></span></p>
<p><span>本</span>教程<span>中清楚地列出了您应该遵循的必要步骤。</span></p>
<h2 id="3-steps-to-upload-product-videos-in-magento-2"><span>在 Magento 2 中上传产品视频的 3 个步骤</span></h2>
<ul>
<li>第 1 步：获取您的 YouTube API 密钥</li>
<li>第 2 步：配置 Magento</li>
<li>第 3 步：链接到视频</li>
</ul>
<h3 id="get-youtube-api-key"><span>第 1 步：获取您的 YouTube API 密钥</span></h3>
<p><span>首先，您必须通过访问您的 Google 帐户来获取您的 YouTube API 密钥：</span></p>
<ul>
<li><span>登录到您的 Google 帐户，然后访问</span>Google Developers Console<span><span>。</span><span>然后，按照这些：</span></span></li>
<ul>
<li><span>在</span>使用 Google API<span>下，单击</span><code class="language-plaintext highlighter-rouge">Youtube Data APIs</code><span>。</span></li>
</ul>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/1.png" width="800" /></p>
<ul>
<ul>
<li>点击<code class="language-plaintext highlighter-rouge">Manage</code></li>
</ul>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/2.png" width="800" /></p>
<ul>
<ul>
<li>在面板左侧选择<code class="language-plaintext highlighter-rouge">Credentials</code>，点击<code class="language-plaintext highlighter-rouge">Create Credentials</code>并选择<code class="language-plaintext highlighter-rouge">API key</code>。</li>
</ul>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/3.png" width="800" /></p>
<ul>
<ul>
<li>当提示创建新密钥时，选择<code class="language-plaintext highlighter-rouge">Server key</code>。输入密钥名称和IP 地址，然后单击<code class="language-plaintext highlighter-rouge">Create</code>。</li>
<li>获得密钥后，将密钥复制到剪贴板。</li>
</ul>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/4.png" width="800" /></p>
<h3 id="configure-magento"><span>第 2 步：在 Magento 中配置</span></h3>
<p><span>现在，回到 Magento 并完成设置：</span></p>
<ul>
<li><span>在管理侧边栏上，</span><code class="language-plaintext highlighter-rouge">Stores &gt; Settings &gt; Configuration</code><span>.</span></li>
<li><span>在面板中的</span>Catalog<span>下，选择</span><code class="language-plaintext highlighter-rouge">Catalog</code><span>。</span></li>
<li><span><span>展开该部分，将</span><span><span>Youtube API 密钥</span></span></span><code class="language-plaintext highlighter-rouge">Product Videos</code><span><span>粘贴</span><span>到必填字段中。</span></span></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/5.png" width="800" /></p>
<ul>
<li><span>单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。</span></li>
<li><span>转到</span>缓存管理<span>以刷新缓存。</span></li>
</ul>
<h3 id="link-to-video"><span>第 3 步：链接到视频</span></h3>
<p><span>在您的网站上添加视频，一切都会设置好！</span></p>
<ul>
<li><span><span>从 中</span><span>，</span></span><code class="language-plaintext highlighter-rouge">Product Detail</code><span>单击</span><code class="language-plaintext highlighter-rouge">Add Video</code><span>。</span><code class="language-plaintext highlighter-rouge">Images and Videos</code></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/6.png" width="800" /></p>
<ul>
<li><span>输入 YouTube 或 Vimeo 视频的</span><a href="https://www.mageplaza.com/kb/how-to-create-url-rewrites-magento-2.html">URL</a><span><span>。</span><span>在该</span></span><code class="language-plaintext highlighter-rouge">URL</code><span>字段中，如果您尚未输入 Youtube API 密钥，则会出现系统错误消息，点击</span><code class="language-plaintext highlighter-rouge">OK</code><span>继续。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/7.png" width="800" /></span></p>
<ul>
<li><span>输入视频的</span><code class="language-plaintext highlighter-rouge">Title</code><span>和</span><code class="language-plaintext highlighter-rouge">Description</code><span>。</span></li>
<li><span>要</span>上传预览图像<span>，请浏览到图像并选择文件。</span></li>
<li><span>如果您更喜欢使用视频元数据，请单击</span><code class="language-plaintext highlighter-rouge">Get Video Information</code><span>。</span></li>
<li><span>要将角色分配给视频，请标记每个角色的相应复选框：</span>
<ul>
<li><span>基本图像</span></li>
<li><span>小图像</span></li>
<li><span>色板图像</span></li>
<li><span>缩略图</span></li>
<li><span>从产品页面隐藏</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save</code><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0904/8.jpg" width="800" /></span></p>
<p></p>]]></description>
      <pubDate>Sun, 04 Sep 2022 08:29:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中上传图片产品]]></title>
      <link>https://www.360magento.com/blog/How-to-upload-Images-Product-in-Magento2/</link>
      <description><![CDATA[<p><span>高质量的图像是使您的网站更加美观并为您的购物者提供专业外观的力量。</span><span>多亏了这些图像，客户可以更快地做出购买决定，并减少与产品外观相关的问题，这可以显着减少支持团队的工作量。</span><span>但是，如果您的每个产品在目录中都有一组图像，那么管理数百或数千张图像是相当困难的。</span><span>因此，您现在应该为您的图像文件建立一个命名约定，这将有助于您更轻松地跟踪，即使您想找到原始文件。</span>在本主题中，我们将逐步向您展示如何在 Magento 2 中上传产品图片。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1_5.png" width="800" /></p>
<p><span>在产品详细信息中，您可以同时上传产品所需的任意数量的图像，链接到视频，重新排列它们的顺序，并确定每个图像的使用方式。</span><span>对于每个产品，您可以将三个角色分配给任何图像。</span><span>您可以设置必须足够大以产生缩放所需的放大倍率的主图像或基本图像。</span><span>除了基本图片之外，该图片的小图片将出现在产品列表中，缩略图将出现在购物车中。</span><span>分配对您来说很灵活；</span><span>但是，默认情况下，这些角色会自动分配给第一个上传的图像。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/2_2.png" width="800" /></span></p>
<p><span>如何在 Magento 2 中按以下选项上传图像产品</span></p>
<h2 class="active" id="2-steps-to-upload-images-product-in-magento-2"><span>在 Magento 2 中上传图片产品的 2 个步骤</span></h2>
<ul>
<li>第 1 步：如何进入 Magento 2 中的图像产品</li>
<li>第 2 步：如何在 Magento 2 中管理图像产品</li>
</ul>
<h3 id="get-into-images-product"><span>第 1 步：如何进入 Magento 2 中的图像产品</span></h3>
<ul>
<li><span>登录 Magento 2 后端后，转到</span><code class="language-plaintext highlighter-rouge">Catalog &gt; Manage Products</code></li>
<li><span>打开产品</span></li>
</ul>
<h3 id="manage-images-products"><span>第 2 步：如何在 Magento 2 中管理图像产品</span></h3>
<ul>
<li><span>单击</span><code class="language-plaintext highlighter-rouge">Edit</code><span>链接，然后执行以下操作：</span></li>
</ul>
<h4 id="21-upload-an-image"><span><span>2.1.&nbsp;</span><span>上传图片</span></span></h4>
<p><span>要上传新图像，您可以应用以下两种方式之一：</span></p>
<ul>
<li><span>从您的浏览器中拖动一个图像，并将其放入</span><span>图像和视频</span><span>框中。</span></li>
<li><span><span>单击</span><span><span>图像和视频</span></span></span><code class="language-plaintext highlighter-rouge">Camera</code><span><span>框中的标题</span><span>，浏览到图像文件并单击</span><span>以选择您需要的任何图像。</span></span><span><span></span></span><code class="language-plaintext highlighter-rouge"><br /></code></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/3_1.png" width="800" /></p>
<h4 id="22-assign-the-base-image"><span><span>2.2.&nbsp;</span><span>分配基础图像</span></span></h4>
<p><span><span>如果要分配给基本图像，只需单击图像下角的标签图标即可。</span><span>一旦您点击，就会出现一个橙色的小横幅，这意味着您的分配成功。</span></span></p>
<p><span><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/4_1.png" width="800" /></span></span></p>
<h4 id="23-reorder-images"><span><span>2.3.&nbsp;</span><span>重新排序图像</span></span></h4>
<p><span>要更改目录中图像的显示位置，请单击</span><code class="language-plaintext highlighter-rouge">Sort</code><span>图像右上角的图标，然后将其拖放到新位置。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/5_1.png" width="800" /></span></p>
<h4 id="24-delete-an-image"><span><span>2.4.&nbsp;</span><span>删除图像</span></span></h4>
<p><span>要删除任何图像，请单击</span><code class="language-plaintext highlighter-rouge">Delete</code><span>左下角的图标。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/6_1.png" width="800" /></span></p>
<p><span>单击</span><code class="language-plaintext highlighter-rouge">Save</code><span>以保存更改。</span></p>
<h4 id="25-view-image-detail"><span><span>2.5.&nbsp;</span><span>查看图像详细信息</span></span></h4>
<ul>
<li><span>要获取图像的详细信息，请单击</span><code class="language-plaintext highlighter-rouge">Images and Videos</code><span><span>图像标题下方或</span><span>面板中的</span></span><span>基本设置下。</span><span></span></li>
<li><span>在&ldquo;图像详细信息&rdquo;页面中，您可以执行以下任何操作：</span></li>
</ul>
<h4 id="26-enter-alt-text"><span><span>2.6.&nbsp;</span><span>输入替代文字</span></span></h4>
<p><span>在</span><code class="language-plaintext highlighter-rouge">Alt Text</code><span>框中，写下您的图像的一些描述。</span></p>
<p><span><span>屏幕阅读器引用图像替代文本以提高 Web 可访问性，并在索引站点时被搜索引擎引用。</span><span>某些浏览器会在鼠标悬停时显示 Alt 文本。</span><span>因此，您应该小心选择图像的关键词。</span></span></p>
<h4 id="27-assign-roles"><span><span>2.7.&nbsp;</span><span>分配角色</span></span></h4>
<p><span><span>默认情况下，三个角色（基本图像、小图像和缩略图）会自动分配给产品的第一个图像。</span><span>如果要重新分配，请执行以下操作：</span></span></p>
<ul>
<li><span>单击所需的图像以打开图像详细信息页面。</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Role</code><span>部分中，选择要分配给该图像的角色。</span></li>
</ul>
<p><span>分配的角色在选定模式下会显示一个复选标记，并且之前的图像不再分配给该角色。</span></p>
<h4 id="28-hide-images"><span><span>2.8.&nbsp;</span><span>隐藏图像</span></span></h4>
<p><span>要排除任何图像，请</span><code class="language-plaintext highlighter-rouge">Hide from Product Page</code><span>在&ldquo;图像详细信息&rdquo;页面中标记复选框，然后单击</span><code class="language-plaintext highlighter-rouge">Save</code><span>。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/7_1.png" width="800" /></span></p>
<ul>
<li><span>要退出详细视图，请单击右上角的</span><code class="language-plaintext highlighter-rouge">Close</code><span>框。</span></li>
<li><span>点击</span><code class="language-plaintext highlighter-rouge">Save</code><span>完成。</span></li>
</ul>
<h2 class="active" id="final-words"><span>最后的话</span></h2>
<p><span>这些是您可以在 Magento 2 中上传、编辑、删除和隐藏图像产品的可能操作。</span><span><span>如果您想获得更多指导，请随时</span><span>在下面发表评论或</span></span>联系我们。</p>]]></description>
      <pubDate>Sat, 03 Sep 2022 08:21:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加新的 CMS 块]]></title>
      <link>https://www.360magento.com/blog/How-to-Add-New-CMS-Blocks-in-Magento2/</link>
      <description><![CDATA[<p>从Magento 管理面板在 Magento 2 中添加新的 CMS 块很容易。您可以设置显示块的位置，可以是一个页面、一组页面或任何页面。创建块标题和标识符以确定块并易于管理。块的内容将使用编辑器方便地创建，该编辑器允许您格式化文本、创建链接和表格、图像、视频和音频。此外，如果您更喜欢使用 HTML 代码，只需单击&ldquo;显示/隐藏编辑器&rdquo;按钮。</p>
<p><span><span>CMS Blocks 将您的网站变成一个有吸引力且引人入胜的页面，以吸引更多流量。</span><span>要在 Magento 2 中添加新的 CMS 块，您可以按照下面给出的这些简单步骤进行操作。</span></span></p>
<h2 class="active" id="8-steps-to-add-new-cms-blocks-in-magento-2"><span>在 Magento 2 中添加新 CMS 块的 8 个步骤</span></h2>
<p><span><em>按照以下步骤在 Magento 2 中添加新的 CMS 块：</em></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1_4.png" width="800" /></span></span></p>
<p></p>
<ol>
<li><span><span>在管理面板上，单击内容。</span><span>在该</span></span><code class="language-plaintext highlighter-rouge">Elements</code><span>部分中，选择</span><code class="language-plaintext highlighter-rouge">Blocks</code><span>。</span></li>
<li><span>单击右上角的</span><code class="language-plaintext highlighter-rouge">Add New Block</code><span>按钮并继续。</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Block Title</code><span>字段中，输入新块的名称标题</span></li>
</ol>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/2_1.png" width="800" /></span></p>
<p></p>
<ol>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Identifier</code><span><span>字段中，为块选择一个唯一标识符。</span><span>请记住，使用所有小写字符并使用下划线而不是空格。</span></span></li>
<li><span>在</span>Store View<span><span>字段中，选择</span><span>块可用</span></span>的 Store View(s)<span></span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Status</code><span>字段中，设置为</span><code class="language-plaintext highlighter-rouge">Enable</code><span>使该块在</span>商店中可见</li>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Content</code><span>字段中，完成块的内容</span></li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Block</code><span>。</span></li>
</ol>
<h2 class="active" id="final-words"><span>最后的话</span></h2>
<p><span><span>CMS 块表示用于显示信息的内容块，例如文本、图像、视频，甚至是来自小部件和其他来源的信息。</span><span>按照上述步骤，您可以立即在 Magento 2 中创建一个新的 CMS Block，以更轻松地吸引您的访问者。</span><span></span><span>如果您需要任何帮助，请随时与我们联系以获得进一步的帮助。</span></span></p>]]></description>
      <pubDate>Fri, 02 Sep 2022 08:24:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中翻译 CMS 页面]]></title>
      <link>https://www.360magento.com/blog/How-to-Translate-CMS-Pages-in-Magento2/</link>
      <description><![CDATA[<p>翻译 CMS 页面是在全球范围内发展您的业务的受支持方式之一。这意味着您可以创建翻译后的网站，然后使其在特定商店视图中对您的客户可见。要设置翻译的内容页面，您必须创建一个具有相同 URL 的新页面以将其分配给商店。配置后，您将使用翻译后的文本更新特定视图的 CMS 页面。</p>
<h2 id="6-steps-to-translate-cms-page-in-magento-2"><span>在 Magento 2 中翻译 CMS 页面的 6 个步骤：</span></h2>
<ol>
<li><span>在管理面板上，</span><code class="language-plaintext highlighter-rouge">Content &gt; Elements &gt; Pages</code><span>.</span></li>
<li><span>找到需要翻译的页面，在编辑模式下打开。</span></li>
<li><span>复制</span><code class="language-plaintext highlighter-rouge">URL Key</code><span><span>到剪贴板。</span><span>然后，点击</span></span><code class="language-plaintext highlighter-rouge">Back</code><span>按钮返回页面网格。</span></li>
<li><span>点击</span><code class="language-plaintext highlighter-rouge">Add New Page</code><span>，您需要：</span>
<ul>
<li><span>翻译</span><code class="language-plaintext highlighter-rouge">Page Title</code><span>.</span></li>
<li><span>粘贴</span><code class="language-plaintext highlighter-rouge">URL Key</code><span>您之前复制的内容</span></li>
<li><span>在左上角，选择</span><code class="language-plaintext highlighter-rouge">Store View</code><span>翻译显示</span></li>
<li><span>在左侧面板的 下</span><code class="language-plaintext highlighter-rouge">Page Information</code><span>，选择</span><code class="language-plaintext highlighter-rouge">Content</code><span>，然后插入页面的翻译文本。</span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Layout</code><span><span>在选项卡中为页面</span><span>创建</span></span><code class="language-plaintext highlighter-rouge">Design</code><span>。</span></li>
<li><span><span>在</span><span>选项卡</span></span><code class="language-plaintext highlighter-rouge">Keywords</code><span><span>中</span><span>完成翻译</span></span><code class="language-plaintext highlighter-rouge">Description</code><span></span><code class="language-plaintext highlighter-rouge">Meta Data</code><span></span></li>
</ul>
</li>
<li><span>单击</span><code class="language-plaintext highlighter-rouge">Save Page</code><span><span>以完成，并在</span><span>出现提示时</span></span>刷新缓存。<span></span></li>
<li><span>前往店面并使用</span>语言<span>选择器检查</span>商店视图<span>上的翻译。</span>公司页脚链接块和欢迎信息<span><span>等一些元素</span><span>也需要翻译。</span></span></li>
</ol>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1_3.png" width="800" /></span></span></p>
<p></p>
<h2 class="active" id="final-words"><span>最后的话</span></h2>
<p><span><span>在线商家如果想在不同国家开展业务，需要在 Magento 2 中翻译 CMS 页面。</span><span>它有助于将 CMS 页面翻译成合适的语言，以增加流量。</span></span><span>如果您有任何问题，请随时在评论部分提出。</span></p>]]></description>
      <pubDate>Thu, 01 Sep 2022 08:31:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2：如何在主页上插入产品]]></title>
      <link>https://www.360magento.com/blog/Magento2-How-to-Insert-Products-on-Homepage/</link>
      <description><![CDATA[<p>主页可以被认为是每个网站最重要的部分，因为客户在决定是否留下之前会首先看到您的主页。设计不佳且信息不足的主页不会吸引或留住客户。因此，您的工作是让主页真正吸引人，并用它来说服他们采取行动。</p>
<p>增加转化率和降低跳出率的第一步可以是在您的主页上插入产品。想象一下，当他们访问您的网站并看到吸引他们的产品时，他们更有可能购买这些产品或留下来进一步探索。此外，您还可以按照本指南在主页中插入制造商/品牌。在本文中，我们将展示如何通过一些简单的步骤在主页上插入产品。</p>
<h2 id="5-steps-to-insert-products-on-the-homepage-in-magento-2"><span>在 Magento 2 的主页上插入产品的 5 个步骤：</span></h2>
<ul>
<li>第 1 步：导航到内容 &gt; 页面</li>
<li>第 2 步：在&ldquo;操作&rdquo;菜单下选择&ldquo;编辑&rdquo;</li>
<li>第 3 步：选择目录产品列表选项</li>
<li>第 4 步：选择类别并单击插入小部件按钮</li>
<li>第五步：点击保存页面完成</li>
</ul>
<h3 id="step-1-navigate-content"><span>第 1 步：导航到内容 &gt; 页面</span></h3>
<p><span>首先，您需要登录到您商店的</span>Magento 2 管理面板<span><span>。</span><span>导航至</span></span><code class="language-plaintext highlighter-rouge">Content</code><span>&gt;</span><code class="language-plaintext highlighter-rouge">Pages</code></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1_2.png" width="400" /></p>
<p><span>页面将在此处显示，您将看到商店的所有页面。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/2.png" width="800" /></span></p>
<h3 id="step-2-select-edit-under-actions-menu"><span>第 2 步：在&ldquo;操作&rdquo;菜单下选择&ldquo;编辑&rdquo;</span></h3>
<p><span>在</span><code class="language-plaintext highlighter-rouge">Homepage</code><span>标题上，从</span><code class="language-plaintext highlighter-rouge">Select</code><span>下拉菜单中选择</span><code class="language-plaintext highlighter-rouge">Edit</code><span>下拉</span><code class="language-plaintext highlighter-rouge">Actions</code><span>菜单。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/3.png" width="800" /></span></p>
<p><span><span>现在转到</span><code class="language-plaintext highlighter-rouge">Content</code><span>部分并单击</span><code class="language-plaintext highlighter-rouge">Insert widget</code></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/4.png" width="800" /></p>
<h3 id="step-3-choose-catalog-product-list-option"><span>第 3 步：选择目录产品列表选项</span></h3>
<p><code class="language-plaintext highlighter-rouge">Insert Widget</code><span>页面将出现，</span><code class="language-plaintext highlighter-rouge">Catalog Products List</code><span>选择</span><code class="language-plaintext highlighter-rouge">Widget type。</code><span><span><br /></span></span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/5.png" width="700" /></span></p>
<h3 id="step-4-select-category-and-click-on-insert-widget-button"><span>第 4 步：选择类别并单击插入小部件按钮</span></h3>
<p><span>在下一页上，有一个</span><code class="language-plaintext highlighter-rouge">Conditions</code><span>属性，</span><code class="language-plaintext highlighter-rouge">Category</code><span>从选项中选择，然后选择</span><code class="language-plaintext highlighter-rouge">category</code><span><span>要在商店主页上显示的属性。</span><span>然后，单击</span></span><code class="language-plaintext highlighter-rouge">Insert Widget</code><span>。</span></p>
<p><span>&nbsp;<img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/6.png" width="800" /></span></p>
<h3 id="step-5-click-save-page-to-finish"><span>第五步：点击保存页面完成</span></h3>
<p><span>返回</span><code class="language-plaintext highlighter-rouge">Content</code><span>选项卡，您将</span><code class="language-plaintext highlighter-rouge">Products</code><span><span>在文本框中看到一个图标。</span><span>点击</span></span><code class="language-plaintext highlighter-rouge">Save Page</code><span>按钮完成页面切换。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/7.png" width="800" /></span></p>
<h2 class="active" id="to-summarize"><span>总结</span></h2>
<p><span><span>我们相信完成所有这些步骤对您来说非常容易。</span><span>现在，是时候</span></span><span>在主页上插入新产品了，</span><span><span>这有助于吸引您的客户并增加流量并促进 Magento 2 商店的销售。</span><span></span></span><span><span>随时分享您的任何疑问，我们将尽力为您提供支持。</span></span></p>]]></description>
      <pubDate>Wed, 31 Aug 2022 08:26:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置默认​​页面]]></title>
      <link>https://www.360magento.com/blog/How-to-Configure-the-Default-Page-in-Magento2/</link>
      <description><![CDATA[<p><span>在本主题中，我将介绍</span><span>如何配置默认 CMS 页面</span><span><span>。</span><span>默认页面是当您单击基本 URL 时将出现的页面。</span><span>通常主页被配置为默认页面。</span><span>此外，当出现&ldquo;页面未找到&rdquo;错误时，将显示默认页面。</span></span></p>
<h2 id="configure-the-default-pages-in-magento-2"><span>在 Magento 2 中配置默认​​页面</span></h2>
<p><em>按照简单指南在 Magento 2 中配置默认​​页面：</em></p>
<ul>
<li><span>在管理面板上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>在该</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>部分中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Web</code><span>在</span><code class="language-plaintext highlighter-rouge">General</code><span><span>左侧面板中</span><span>选择</span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Default Pages</code><span>部分，然后继续执行以下操作：</span>
<ul>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Default Web URL</code><span>字段中，默认值</span><code class="language-plaintext highlighter-rouge">cms</code><span>或根据需要输入其他值</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">CMS Home Page</code><span>字段中，选择要成为主页的页面，您应该选择&ldquo;主页&rdquo;</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Default No-route URL</code><span><span>字段中，默认值为&ldquo;cms/noRoute/index&rdquo;。</span><span>或根据需要输入其他值</span></span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">CMS No Route Page</code><span><span>字段中，选择值以在出现</span><span>404 Not Found</span><span>错误</span></span><code class="language-plaintext highlighter-rouge">404 Page Not Found</code><span>时显示 CMS 页面</span><a href="https://www.mageplaza.com/kb/magento-2-404-page-not-found.html"><span></span></a><span></span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">CMS No Cookies Page</code><span>字段中，选择</span><code class="language-plaintext highlighter-rouge">Enable Cookies</code><span>值以在浏览器中禁用 cookie 时显示 CMS 页面</span></li>
<li><span>在该</span><code class="language-plaintext highlighter-rouge">Show Breadcrumbs for CMS Pages</code><span>字段中，设置</span><code class="language-plaintext highlighter-rouge">Yes</code><span>是否要在所有 CMS 页面的顶部显示面包屑路径</span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1_1.png" width="900" /></span></p>]]></description>
      <pubDate>Tue, 30 Aug 2022 08:25:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中配置 Robots.txt]]></title>
      <link>https://www.360magento.com/blog/How-to-Configure-Robots-txt-in-Magento2/</link>
      <description><![CDATA[<p>如您所知，配置robot.txt对于任何致力于网站搜索引擎优化的网站都很重要。特别是，当您将站点地图配置为允许搜索引擎为您的商店编制索引时，有必要向网络爬虫提供 robots.txt 文件中的说明，以避免索引不允许的站点。位于 Magento 安装根目录中的 robots.txt 文件指示 Google、Yahoo、Bing 等搜索引擎可以轻松识别和跟踪。在这篇文章中，我将介绍配置robot.txt 文件的指南，以便它与您的站点一起工作。</p>
<h2 id="what-is-robotstxt-in-magento-2"><span>Magento 2 中的 Robots.txt 是什么？</span></h2>
<p><span><span>robots.txt 文件指示网络爬虫知道在哪里索引您的网站以及在哪里跳过。</span><span>定义这个网站机器人 - 网站爬虫关系将帮助您优化您网站的排名。</span><span>有时您需要它来识别和避免索引特定部分，这可以通过配置来完成。</span><span>您可以决定使用默认设置或为每个搜索引擎设置自定义说明。</span></span></p>
<h2 class="active" id="steps-to-configure-magento-2-robotstxt-file"><span>配置 Magento 2 robots.txt 文件的步骤</span></h2>
<p><span>请按照此分步指南在 Magento 2 中配置您的 robots.txt 文件：</span></p>
<ul>
<li><span>在管理面板上，单击</span><code class="language-plaintext highlighter-rouge">Stores</code><span><span>。</span><span>在该</span></span><code class="language-plaintext highlighter-rouge">Settings</code><span>部分中，选择</span><code class="language-plaintext highlighter-rouge">Configuration</code><span>。</span></li>
<li><span></span><code class="language-plaintext highlighter-rouge">Design</code><span>在</span><code class="language-plaintext highlighter-rouge">General</code><span><span>左侧面板中</span><span>选择</span></span></li>
<li><span>打开该</span><code class="language-plaintext highlighter-rouge">Search Engine Robots</code><span>部分，然后继续执行以下操作：</span>
<ul>
<li><span>在</span><code class="language-plaintext highlighter-rouge">Default Robots</code><span>中，选择以下选项之一：</span>
<ul>
<li>INDEX, FOLLOW</li>
<li>NOINDEX, FOLLOW</li>
<li>INDEX, NOFOLLOW</li>
<li>INDEX, NOFOLLOW</li>
</ul>
</li>
<li><span>如果需要，在该</span><code class="language-plaintext highlighter-rouge">Edit Custom instruction of robots.txt File</code><span>字段中输入自定义说明。</span></li>
<li><span><span>如果您需要恢复默认说明，请</span><span>在该</span></span><code class="language-plaintext highlighter-rouge">Reset to Defaults</code><span>字段中单击按钮。</span><code class="language-plaintext highlighter-rouge">Reset to Default</code><span></span></li>
</ul>
</li>
<li><span>完成后，单击</span><code class="language-plaintext highlighter-rouge">Save Config</code><span>。</span></li>
</ul>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog0829/1.png" width="900" /></span></p>
<p></p>
<h2 id="magento-2-robotstxt-examples"><span>Magento 2 Robots.txt 示例</span></h2>
<p><span>您还可以通过设置自定义说明来隐藏您的网页，使其对网站爬虫隐藏，如下所示：</span></p>
<ul>
<li><span>允许完全访问</span></li>
</ul>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent:*
Disallow:
</code></pre>
</div>
</div>
<ul>
<li><span>禁止访问所有文件夹</span></li>
</ul>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent:*
Disallow: /<br /></code></pre>
<h2 id="more-robotstxt-examples"><span>更多 Robots.txt 示例</span></h2>
<h3 id="block-google-bot-from-a-folder"><span>从文件夹中阻止 Google bot</span></h3>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot 
Disallow: /subfolder/
</code></pre>
</div>
</div>
<h3 id="block-google-bot-from-a-page"><span>从页面中阻止 Google bot</span></h3>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot 
Disallow: /subfolder/page-url.html</code></pre>
</div>
</div>
<h2 id="common-web-crawlers-bots"><span>常见的网络爬虫（机器人）</span></h2>
<p><span>以下是互联网上的一些常见机器人。</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>User-agent: Googlebot
User-agent: Googlebot-Image/1.0
User-agent: Googlebot-Video/1.0
User-agent: Bingbot
User-agent: Slurp		# Yahoo
User-agent: DuckDuckBot
User-agent: Baiduspider
User-agent: YandexBot
User-agent: facebot		# Facebook
User-agent: ia_archiver		# Alexa</code></pre>
</div>
</div>
</div>
</div>]]></description>
      <pubDate>Mon, 29 Aug 2022 08:23:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2“拒绝访问”错误]]></title>
      <link>https://www.360magento.com/blog/Magento2-access-denied-error/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/1_1.png" width="800" /></p>
<p class="p"><span style="font-family: Arial;">虽然你们中的许多人都面临这个问题，但很少有人真正知道它与什么有关或如何解决这个问题。因此，在本指南中，我们将为</span><span style="font-family: Arial;">&ldquo;拒绝访问&rdquo;错误提供一个非常简单和快速的解决方案，以使任何有或没有技术技能的人都能处理它。</span></p>
<p class="p"><span style="font-family: Arial;">但是，让我们首先定义什么是</span> Magento&ldquo;拒绝访问&rdquo;错误。</p>
<h2><strong><span style="font-family: Arial;">什么是</span> Magento&ldquo;拒绝访问&rdquo;错误？</strong><strong></strong></h2>
<p class="p">Magento Access denied 错误是最常见的 Magento 错误，当您尝试访问网页而无权进入时出现。当您使用不正确的管理面板凭据、创建具有错误用户角色的新用户或安装Magento 2 扩展<span style="font-family: Arial;">时，它通常会出现在</span> Magento 管理员中。</p>
<h2><strong><span style="font-family: Arial;">如何修复</span> Magento 2 中的&ldquo;拒绝访问&rdquo;错误？</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">现在您知道</span><span style="font-family: Arial;">&ldquo;访问被拒绝&rdquo;错误可能出现的主要原因，让我们相应地解决它们。</span></p>
<h3><strong><span style="font-family: Arial;">解决方案</span> 1. 获取正确的凭据</strong><strong></strong></h3>
<p class="p"><span style="font-family: Arial;">如果您丢失了管理面板凭据，恢复它们的唯一方法是通过数据库表。转到您的数据库并运行以下</span> SQL 查询：</p>
<p>SET @salt = MD5(UNIX_TIMESTAMP());</p>
<p><br />UPDATE admin_user SET password = CONCAT(SHA2(CONCAT(@salt, 'YourNewPassword'), 256), ':', @salt, ':1') WHERE username = 'admin';</p>
<p>&nbsp;</p>
<p class="p">现在尝试使用新密码登录，如果无法登录，请检查<strong>admin_user</strong><span style="font-family: Arial;">表中的</span>2 列：&nbsp;<em>first_failure</em>和<em>lock_expires</em><span style="font-family: Arial;">并将这些列的值设置为</span> null。</p>
<h3><strong><span style="font-family: Arial;">解决方案</span> 2. 分配适当的用户角色</strong><strong></strong></h3>
<p class="p"><span style="font-family: Arial;">如果您在添加新用户后在</span> Magento 中遇到&ldquo;访问被拒绝&rdquo;问题，很可能您没有为他们分配用户角色。</p>
<p class="p">在这种情况下，使用其他用户登录或要求管理员转到<strong>System &gt; Permissions &gt; All Users</strong>并将您的用户分配给某个用户角色。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/2_1.png" width="800" /></p>
<h3><strong><span style="font-family: Arial;">解决方案</span> 3. 获取访问特定扩展程序的权限</strong><strong></strong></h3>
<p class="p"><span style="font-family: Arial;">由于</span> Magento 不会自动更新对新扩展的权限，因此您可能无权查看新的扩展设置。&nbsp;</p>
<p class="p"><span style="font-family: Arial;">它通常有助于重新登录管理面板。但是，如果</span> Magento &ldquo;拒绝访问&rdquo;错误仍然存​​在，请重置管理员权限。</p>
<p><span style="font-family: Arial;">1.</span>转到<strong>System &gt; Permissions &gt; User Roles</strong><strong>&nbsp;</strong>并找到新扩展被阻止的角色。</p>
<p><strong><span style="font-family: Arial;"></span></strong>2.在<strong>Resource Access</strong>更改为<em>全部</em>或某些特定扩展<strong>Role Resources</strong>。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/3_1.png" width="800" /></p>
<h3><strong><span><span style="font-family: Arial;">解决方案</span>4.修复system.xml和config.xml冲突</span></strong><strong><span></span></strong></h3>
<p class="p"><span><span style="font-family: Arial;">有时会发生在启用某些自定义模块后，</span>Magento 2 中的&ldquo;访问被拒绝&rdquo;问题出现并阻止您访问自定义模块。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">尝试禁用扩展并检查问题是否仍然存在。如果是，请检查</span> system.xml 和 config.xml 文件。</span><strong><span class="15">config.xml</span></strong><span>和</span><strong><span class="15">system.xml</span></strong><span><span style="font-family: Arial;">中的某些条目可能会丢失。</span>&nbsp;</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">现在您应该能够快速修复</span><span style="font-family: Arial;">&ldquo;访问被拒绝&rdquo;错误并立即跳回与 Magento 管理员一起工作。无论您是否是开发人员，您都应该知道如何对</span></span><span class="16">Magento</span><span class="16"> 进行故</span><span class="16">障排除</span>以消除所有可能的问题并更快地找到解决方案。<span></span></p>]]></description>
      <pubDate>Sun, 28 Aug 2022 08:30:15 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中添加相关产品]]></title>
      <link>https://www.360magento.com/blog/Add-related-products-in-Magento2/</link>
      <description><![CDATA[<p class="p"><span><span style="font-family: Arial;">在</span> Magento 2 中添加相关产品：</span><span></span></p>
<p class="p"><!--[if !supportLists]--><span>1.&nbsp;</span><!--[endif]--><span>转到</span><span class="15">Catalog &gt; Products</span><span>并选择您要添加产品推荐的产品。</span><span></span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/1.png" width="800" /></p>
<p class="p"><!--[if !supportLists]--><span>2.&nbsp;</span><!--[endif]--><span>向下滚动到</span><span class="15">相关产品</span><span class="15">Related Products</span><span class="15">、追加销售</span><span class="15">Up-sells</span><span class="15">和交叉销售</span><span class="15">Cross-sells</span>部分，然后按<span class="15">添加相关产品</span><span class="15">Add</span><span class="15"> Related Products</span><span>按钮。</span><span></span></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/2.png" width="800" /></p>
<p class="p"><!--[if !supportLists]--><span>3.&nbsp;</span><!--[endif]--><span>选择您要添加的与当前产品相关的产品，然后按</span><span class="15">添加所选产品</span>&nbsp;<span class="15">Add Selected Products</span><span>。</span><span></span></p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/3.png" width="800" /></p>
<p class="p"><!--[if !supportLists]--><span>4.&nbsp;</span><!--[endif]--><span>整理一下你添加的相关产品。</span><span><span style="font-family: Arial;">您可以通过</span> grad 和 drop 删除或更改它们的顺序。</span><span> </span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/blog822/4.png" width="800" /></span></p>
<p class="p">不要忘记<span class="15">保存</span>产品并在店面检查结果。产品将按照您安排的顺序排列。<span></span></p>]]></description>
      <pubDate>Sat, 27 Aug 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[配置 Magento 2 购物车]]></title>
      <link>https://www.360magento.com/blog/Configure-Magento-shopping-cart/</link>
      <description><![CDATA[<p>由于购物车与结账直接相关，因此配置选项位于Stores &gt; Configuration &gt; Sales &gt; Checkout<span style="font-family: Arial;">下。导航到那里以从</span> Magento 购物车选项开始。</p>
<p>&nbsp;</p>
<h2><strong>1.配置我的购物车链接</strong><strong></strong></h2>
<p class="p">购物车链接位于网站标题的右上角。它显示客户添加到购物车的产品数量。</p>
<p class="p"><span style="font-family: Arial;">相应地，您可以配置是否显示购物车中的商品总数或购物车中的商品数量（不考虑数量）。</span>&nbsp;</p>
<p class="p">因此，您所要做的就是找到My Cart Link&nbsp;部分并定义如何&nbsp;<span style="font-family: Arial;">显示</span> Cart Summary。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/1_3.png" width="800" /></p>
<p>Display item quantities<strong>&nbsp;</strong>显示购物车中的商品总数以及每个产品数量。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/2_2.png" width="800" /></p>
<p>Display number of items in cart显示购物车中的商品数量，不包括每个产品数量。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/3_2.png" width="800" /></p>
<h2><strong><span>2. 设置迷你购物车</span></strong><strong><span></span></strong></h2>
<p class="p"><span><span style="font-family: Arial;">单击</span> Magento 购物车链接后，您将触发一个迷你购物车。与购物车链接相同，它在目录的每一页上都可用。因此，客户可以快速查看他们已经添加到购物车的内容，而不管他们在哪个页面上。</span><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/4_2.png" width="800" /></p>
<p class="p"><span style="font-family: Arial;">要在</span> Magento 中设置迷你购物车，您只需在<strong>&nbsp;</strong>Mini Cart&nbsp;部分配置三个选项：</p>
<ul>
<li><span style="font-family: Arial;">设备是否在</span>&nbsp;&nbsp;Display Mini Cart&nbsp;&nbsp;字段中启用或禁用迷你车。</li>
<li><span style="font-family: Arial;">输入</span>&nbsp;Number of Items to Display Scrollbar<span style="font-family: Arial;">，</span><strong>&nbsp;</strong>该滚动条定义了客户在启用滚动之前必须添加的项目数。</li>
<li><span style="font-family: Arial;">设置</span>&nbsp;要&nbsp;在迷你购物车中显示&nbsp;的最近添加&nbsp;项目的最大数量&nbsp;Maximum Number&nbsp;of recently added&nbsp;Items to Display<strong>。</strong></li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/5.png" width="800" /></p>
<h2><strong><span>3.设置重定向到购物车</span></strong><strong><span></span></strong></h2>
<p class="p"><span>有关添加到购物车的产品的所有信息都已在迷你购物车中。相应地，在客户将任何产品添加到购物车后，不需要将他们重定向到购物车页面。默认情况下，重定向是禁用的。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">您可以让您的客户选择随时访问购物车摘要页面。这样结帐看起来并不强制。</span>&nbsp;</span><span></span></p>
<p class="p">但是，您可以选择您喜欢的任何选项。转到<span class="15">购物车</span>部分并启用或禁用<span class="15">将产品重定向到购物车后</span><span>&nbsp;选项</span><span class="15">After Adding a Product Redirect to Shopping Cart</span><span>&nbsp;。</span><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/6.png" width="800" /></p>
<h2><strong><span>4. 定义报价生命周期</span></strong><strong><span></span></strong></h2>
<p class="p"><span>有时，顾客离开购物车的时间过长，以后仍然会回来购买。然而，在此期间产品的价格可能会发生变化。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">相应地，</span></span><span class="15">报价有效期（天）</span><span class="15">Quote Lifetime (days)</span><span>&nbsp;选项定义了报价有效的天数。</span><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/7.png" width="800" /></p>
<h2><strong><span>5.配置购物车缩略图</span></strong><strong><span></span></strong></h2>
<p class="p"><span><span style="font-family: Arial;">缩略图可帮助您的客户了解他们已经添加到购物车的产品。通常，它们与客户添加的产品相匹配。但是，当产品有变体时，购物车中的缩略图可能与添加到购物车的产品不匹配。</span>&nbsp;</span><span></span></p>
<p class="p"><span>对于可配置和分组的产品，图像与产品变体或父产品图像相匹配。</span><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/8.png" width="800" /></p>
<p class="p"><span style="font-family: Arial;">因此，您可以设置</span>&nbsp;Grouped&nbsp;&nbsp;and&nbsp;&nbsp;Configurable Product Images<span style="font-family: Arial;">。</span>&nbsp;</p>
<ul>
<li>产品缩略图本身&nbsp;Product Thumbnail Itself&mdash; 使用客户添加到购物车的产品缩略图。</li>
<li>父产品缩略图&nbsp;Parent Product Thumbnail&mdash; 使用父产品的缩略图。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/9.png" width="800" /></p>
<h2><strong><span>6. 指定最小订购数量</span></strong><strong><span></span></strong></h2>
<p class="p">如果您想鼓励更多购买或仅向某些客户群体出售特定数量，您可以配置<span class="15">购物车中允许的最小数量</span><span class="15">Minimum</span><span class="15"> Qty Allowed in Shopping Cart</span><span>.。&nbsp;</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">转到</span>&nbsp;</span><span class="15">Stores &gt; Configuration &gt; Catalog &gt; Inventory &gt; Product Stock Options</span><span>&nbsp;进行设置。</span><span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/10.png" width="800" /></p>
<p class="p">然后，根据您的配置，不同组的客户将看到他们需要选择的数量以将商品添加到购物车。</p>
<h2><strong>7.配置最低订单金额</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">与</span> Magento 中的购物车相关的另一个鼓励购买的选项是最低订购量。根据它，客户必须满足一定的小计才能结帐。否则，结帐按钮根本不可用。&nbsp;</p>
<p class="p">此外，您还可以要求将订单运送到多个地址，以满足每个地址的最低订单金额。</p>
<p class="p"><span style="font-family: Arial;">要配置最小订单量，请转到</span>&nbsp;Stores &gt; Configuration &gt; Sales &gt; Sales &gt; Minimum Order Amount<strong>&nbsp;</strong>并设置以下选项：</p>
<ul>
<li>启用&nbsp;最低订单金额。</li>
<li><span style="font-family: Arial;">应用折扣后输入小计的</span>&nbsp;Minimum&nbsp;Amount。</li>
<li><span style="font-family: Arial;">决定是否将</span>&nbsp;折扣金额&nbsp;Include Discount Amount&nbsp;计入最低金额。</li>
</ul>
<p class="p"><span style="font-family: Arial;">如果您选择</span>是<span style="font-family: Arial;">Yes</span><span style="font-family: Arial;">，则订单将满足应用折扣的最低要求。即使应用了折扣，也没有客户必须达到最低订单金额</span>&nbsp;<strong>。</strong><strong></strong></p>
<ul>
<li><span style="font-family: Arial;">选择最低订单金额是否应</span>&nbsp;包括税额Include Tax to Amount。</li>
<li><span style="font-family: Arial;">配置</span>&nbsp;客户在购物车中看到的不符合要求的最小订单数量&nbsp;的描述消息Description Message，以及在购物车中显示的错误Error to Show in Shopping Cart，以防有任何错误。</li>
<li>如果您想要求每个地址的最低订单量，请启用&nbsp;Validate Each Address Separately in Multi-address Checkout在多地址结帐中分别验证每个地址<strong>。</strong></li>
<li><span style="font-family: Arial;">设置</span>&nbsp;多地址描述消息Multi-address Description Message&nbsp;和&nbsp;多地址错误以显示在购物车Multi-address Error to Show in Shopping Cart中。</li>
</ul>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/11.png" width="800" /></p>
<h2><strong><span>8. 设置礼物选项</span></strong><strong><span></span></strong></h2>
<p class="p"><span><span style="font-family: Arial;">由于</span> Magento 购物车是结账前的最后一步，因此客户可以在此阶段留下礼物信息是有道理的。无论客户在什么场合下订单，礼品信息都能提供个性化的体验并给人留下深刻印象。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/12.png" width="800" /></span></p>
<h2><strong><span>9.检查购物车规则</span></strong><strong><span></span></strong></h2>
<p class="p">最后但并非最不重要的是您配置的<span class="15">Magento</span><span class="15"> 购物车价</span><span class="15">格规则</span>以提供折扣。购物车价格规则允许您设置某些条件并提供客户可以在购物车或结账时应用的优惠券。<span></span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/13.png" width="800" /></p>]]></description>
      <pubDate>Fri, 26 Aug 2022 08:24:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中启用模板路径提示]]></title>
      <link>https://www.360magento.com/blog/Enable-template-path-prompt-in-Magento-2/</link>
      <description><![CDATA[<p class="p"><span>Magento 2 中的模板路径提示是帮助您定义 .&nbsp;</span><span class="15">ph</span><span class="15">p</span><span class="15"> 块类</span>或<span class="15">.phtml</span><span class="15"> 模板</span><span><span style="font-family: Arial;">，对应于</span> Magento 2 商店的特定页面区域。换句话说，模板路径提示为每个模板的路径添加了一个符号，以帮助您更轻松地找到 .phtml 文件并相应地更快地编辑它们。您可以在前端和管理员的 Magento 文件结构中找到代码。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">因此，让我们找出可以启用</span> Magento 2 模板路径提示的方法。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/1_2.png" width="800" /></span></p>
<h2>从管理面板启用模板路径提示<strong></strong></h2>
<p class="p"><span style="font-family: Arial;">为了在</span> Magento 2 中启用模板路径提示，请按照下列步骤操作：</p>
<ol>
<li><span style="font-family: Arial;">确保您的</span> Magento 2 处于<span style="font-family: Arial;">默认模式或开发者模式</span><span style="font-family: Arial;"></span><span style="font-family: Arial;"></span>。</li>
<li>转到Admin Panel &gt; Stores &gt; Settings &gt; Configuration &gt;&nbsp;Advanced &gt; Developer &gt; Debug</li>
</ol>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/2_1.png" width="800" /></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 3. 检查并配置开发者客户端限制Developer Client Restrictions。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/3_1.png" width="800" /></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 4.&nbsp;启用<span class="15">模板路径提示</span>。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 选择是否要为<span class="15">StoreFront</span>或<span class="15">Admin</span><span style="font-family: Arial;">启用它。如果您希望模板路径提示在</span> PHTML 模板文件路径之外显示块 PHP 类名&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 称，请在<span class="15">Add</span><span class="15"> Blo</span><span class="15">ck</span><span class="15"> Names to Hints</span><span style="font-family: Arial;">选择框中选择</span> Yes 。</p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/4_1.png" width="800" /></span></p>
<p class="p"></p>
<p class="p">&nbsp; &nbsp; &nbsp; &nbsp; 5.&nbsp;<span style="font-family: Arial;">完成后不要忘记按</span>保存配置按钮。</p>
<h2><strong><span>使用命令行界面启用模板路径提示</span></strong><strong><span></span></strong></h2>
<p class="p"><span class="15">注意：</span><span><span style="font-family: Arial;">与以前的方法不同，使用</span> CLI 您只能为 Magento 2 店面启用或禁用模板路径提示。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">要在</span> Magento 2 中启用模板路径提示，请运行以下命令：</span><span></span></p>
<p class="p"><span>php bin/magento dev:template-hints:enable</span><span></span></p>
<p class="p"><span>要禁用模板路径提示，请使用以下命令：</span><span></span></p>
<p class="p"><span>php bin/magento dev:template-hints:disable</span><span></span></p>
<p class="p"></p>]]></description>
      <pubDate>Thu, 25 Aug 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[配置 Magento 2 结帐选项]]></title>
      <link>https://www.360magento.com/blog/Configure-Magento2-checkout-options/</link>
      <description><![CDATA[<p class="p"><span style="font-family: Arial;">客户登陆</span> Magento 结账页面，他们希望能够快速轻松地完成下单流程。因此，您的工作是处理定义结帐页面和布局属性的 Magento 结帐选项。&nbsp;</p>
<p class="p"><span style="font-family: Arial;">如您所见，</span>Magento 结帐页面配置相对简单。</p>
<p class="p"><span style="font-family: Arial;">要配置</span> Magento 结帐选项：</p>
<p class="p">1. 导航到Stores &gt; Configuration &gt; Sales &gt; Checkout &gt; Checkout Options</p>
<p>2.<span style="font-family: Arial;">启用</span> Onepage Checkout作为默认格式。</p>
<p class="p">3.允许或禁止<span style="font-family: Arial;">访客结帐</span>以定义客户是否能够在未注册的情况下进行结帐。</p>
<p class="p">注意：如果您愿意，您仍然可以在结帐后将<span style="font-family: Arial;">客人订单转换为客户<a href="https://magefan.com/blog/magento2-convert-guest-to-customer" title="在 Magento 2 中将访客结账客户转换为注册客户"></a></span>以进行营销。</p>
<p class="p">4. Enable Terms and Conditions.启用条款和条件。</p>
<p class="p">5. Display Billing Addresses.决定在哪里显示帐单地址<span style="font-family: Arial;">。</span>&nbsp;</p>
<p class="p">6. Maximum Number of Items to Display in Order Summary.设置在订单汇总中显示的最大项目数。</p>
<p class="p"><img src="https://www.360magento.com/media/wysiwyg/blog_84/1_1.png" width="800" /></p>
<p>不要忘记保存配置并转到结帐页面以检查您刚刚配置的选项。</p>
<p><textarea id="BFI_DATA" style="width: 1px; height: 1px; display: none;"></textarea></p>
<div class="LTRStyle" id="WidgetFloaterPanels" style="display: none; text-align: left; direction: ltr; visibility: hidden;">
<div id="WidgetFloater" onmouseout="Microsoft.Translator.OnMouseOutFloater()" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;">
<div id="WidgetLogoPanel"><span id="WidgetTranslateWithSpan"><span>TRANSLATE with </span><img id="FloaterLogo" /></span> <span id="WidgetCloseButton" onclick="Microsoft.Translator.FloaterOnClose()" title="Exit Translation">x</span></div>
<div id="LanguageMenuPanel">
<div class="DDStyle_outer"><input id="LanguageMenu_svid" name="LanguageMenu_svid" onclick="this.select()" style="display: none;" type="text" value="en" /> <input id="LanguageMenu_textid" name="LanguageMenu_textid" onclick="this.select()" style="display: none;" type="text" /> <span class="DDStyle" id="__LanguageMenu_header" onclick="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);" onkeydown="return LanguageMenu &amp;&amp; !LanguageMenu.Show('__LanguageMenu_popup', event);">English</span>
<div style="position: relative; text-align: left; left: 0;">
<div style="position: absolute; ;left: 0px;">
<div class="DDStyle" id="__LanguageMenu_popup" style="display: none;">
<table border="0" id="LanguageMenu">
<tbody>
<tr>
<td><a href="#ar" onclick="return LanguageMenu.onclick('ar');" tabindex="-1">Arabic</a></td>
<td><a href="#he" onclick="return LanguageMenu.onclick('he');" tabindex="-1">Hebrew</a></td>
<td><a href="#pl" onclick="return LanguageMenu.onclick('pl');" tabindex="-1">Polish</a></td>
</tr>
<tr>
<td><a href="#bg" onclick="return LanguageMenu.onclick('bg');" tabindex="-1">Bulgarian</a></td>
<td><a href="#hi" onclick="return LanguageMenu.onclick('hi');" tabindex="-1">Hindi</a></td>
<td><a href="#pt" onclick="return LanguageMenu.onclick('pt');" tabindex="-1">Portuguese</a></td>
</tr>
<tr>
<td><a href="#ca" onclick="return LanguageMenu.onclick('ca');" tabindex="-1">Catalan</a></td>
<td><a href="#mww" onclick="return LanguageMenu.onclick('mww');" tabindex="-1">Hmong Daw</a></td>
<td><a href="#ro" onclick="return LanguageMenu.onclick('ro');" tabindex="-1">Romanian</a></td>
</tr>
<tr>
<td><a href="#zh-CHS" onclick="return LanguageMenu.onclick('zh-CHS');" tabindex="-1">Chinese Simplified</a></td>
<td><a href="#hu" onclick="return LanguageMenu.onclick('hu');" tabindex="-1">Hungarian</a></td>
<td><a href="#ru" onclick="return LanguageMenu.onclick('ru');" tabindex="-1">Russian</a></td>
</tr>
<tr>
<td><a href="#zh-CHT" onclick="return LanguageMenu.onclick('zh-CHT');" tabindex="-1">Chinese Traditional</a></td>
<td><a href="#id" onclick="return LanguageMenu.onclick('id');" tabindex="-1">Indonesian</a></td>
<td><a href="#sk" onclick="return LanguageMenu.onclick('sk');" tabindex="-1">Slovak</a></td>
</tr>
<tr>
<td><a href="#cs" onclick="return LanguageMenu.onclick('cs');" tabindex="-1">Czech</a></td>
<td><a href="#it" onclick="return LanguageMenu.onclick('it');" tabindex="-1">Italian</a></td>
<td><a href="#sl" onclick="return LanguageMenu.onclick('sl');" tabindex="-1">Slovenian</a></td>
</tr>
<tr>
<td><a href="#da" onclick="return LanguageMenu.onclick('da');" tabindex="-1">Danish</a></td>
<td><a href="#ja" onclick="return LanguageMenu.onclick('ja');" tabindex="-1">Japanese</a></td>
<td><a href="#es" onclick="return LanguageMenu.onclick('es');" tabindex="-1">Spanish</a></td>
</tr>
<tr>
<td><a href="#nl" onclick="return LanguageMenu.onclick('nl');" tabindex="-1">Dutch</a></td>
<td><a href="#tlh" onclick="return LanguageMenu.onclick('tlh');" tabindex="-1">Klingon</a></td>
<td><a href="#sv" onclick="return LanguageMenu.onclick('sv');" tabindex="-1">Swedish</a></td>
</tr>
<tr>
<td><a href="#en" onclick="return LanguageMenu.onclick('en');" tabindex="-1">English</a></td>
<td><a href="#ko" onclick="return LanguageMenu.onclick('ko');" tabindex="-1">Korean</a></td>
<td><a href="#th" onclick="return LanguageMenu.onclick('th');" tabindex="-1">Thai</a></td>
</tr>
<tr>
<td><a href="#et" onclick="return LanguageMenu.onclick('et');" tabindex="-1">Estonian</a></td>
<td><a href="#lv" onclick="return LanguageMenu.onclick('lv');" tabindex="-1">Latvian</a></td>
<td><a href="#tr" onclick="return LanguageMenu.onclick('tr');" tabindex="-1">Turkish</a></td>
</tr>
<tr>
<td><a href="#fi" onclick="return LanguageMenu.onclick('fi');" tabindex="-1">Finnish</a></td>
<td><a href="#lt" onclick="return LanguageMenu.onclick('lt');" tabindex="-1">Lithuanian</a></td>
<td><a href="#uk" onclick="return LanguageMenu.onclick('uk');" tabindex="-1">Ukrainian</a></td>
</tr>
<tr>
<td><a href="#fr" onclick="return LanguageMenu.onclick('fr');" tabindex="-1">French</a></td>
<td><a href="#ms" onclick="return LanguageMenu.onclick('ms');" tabindex="-1">Malay</a></td>
<td><a href="#ur" onclick="return LanguageMenu.onclick('ur');" tabindex="-1">Urdu</a></td>
</tr>
<tr>
<td><a href="#de" onclick="return LanguageMenu.onclick('de');" tabindex="-1">German</a></td>
<td><a href="#mt" onclick="return LanguageMenu.onclick('mt');" tabindex="-1">Maltese</a></td>
<td><a href="#vi" onclick="return LanguageMenu.onclick('vi');" tabindex="-1">Vietnamese</a></td>
</tr>
<tr>
<td><a href="#el" onclick="return LanguageMenu.onclick('el');" tabindex="-1">Greek</a></td>
<td><a href="#no" onclick="return LanguageMenu.onclick('no');" tabindex="-1">Norwegian</a></td>
<td><a href="#cy" onclick="return LanguageMenu.onclick('cy');" tabindex="-1">Welsh</a></td>
</tr>
<tr>
<td><a href="#ht" onclick="return LanguageMenu.onclick('ht');" tabindex="-1">Haitian Creole</a></td>
<td><a href="#fa" onclick="return LanguageMenu.onclick('fa');" tabindex="-1">Persian</a></td>
<td></td>
</tr>
</tbody>
</table>
<img alt="" style="height: 7px; width: 17px; border-width: 0px; left: 20px;" /></div>
</div>
</div>
</div>
<script type="text/javascript">// <![CDATA[
 var LanguageMenu; var LanguageMenu_keys=["ar","bg","ca","zh-CHS","zh-CHT","cs","da","nl","en","et","fi","fr","de","el","ht","he","hi","mww","hu","id","it","ja","tlh","ko","lv","lt","ms","mt","no","fa","pl","pt","ro","ru","sk","sl","es","sv","th","tr","uk","ur","vi","cy"]; var LanguageMenu_values=["Arabic","Bulgarian","Catalan","Chinese Simplified","Chinese Traditional","Czech","Danish","Dutch","English","Estonian","Finnish","French","German","Greek","Haitian Creole","Hebrew","Hindi","Hmong Daw","Hungarian","Indonesian","Italian","Japanese","Klingon","Korean","Latvian","Lithuanian","Malay","Maltese","Norwegian","Persian","Polish","Portuguese","Romanian","Russian","Slovak","Slovenian","Spanish","Swedish","Thai","Turkish","Ukrainian","Urdu","Vietnamese","Welsh"]; var LanguageMenu_callback=function(){ }; var LanguageMenu_popupid='__LanguageMenu_popup'; 
// ]]]]><![CDATA[></script>
</div>
<div id="CTFLinksPanel"><span id="ExternalLinksPanel"><a href="https://go.microsoft.com/?linkid=9722454" id="HelpLink" title="Help" target="_blank"> <img id="HelpImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowEmbed()" id="EmbedLink" title="Get this widget for your own site"> <img id="EmbedImg" /></a> <a href="javascript:Microsoft.Translator.FloaterShowSharePanel()" id="ShareLink" title="Share translated page with friends"> <img id="ShareImg" /></a> </span></div>
<div id="FloaterProgressBar"><span id="ProgressFill"></span></div>
</div>
<div id="WidgetFloaterCollapsed" onmouseover="Microsoft.Translator.OnMouseOverFloater()" style="display: none;"><span>TRANSLATE with </span><img id="CollapsedLogoImg" /></div>
<div id="FloaterSharePanel" style="display: none;">
<div id="ShareTextDiv"><span id="ShareTextSpan"> COPY THE URL BELOW </span></div>
<div id="ShareTextboxDiv"><input id="ShareTextbox" name="ShareTextbox" onclick="this.select()" readonly="readonly" type="text" /> <!--a id="TwitterLink" title="Share on Twitter"> <img id="TwitterImg" /></a> <a-- id="FacebookLink" title="Share on Facebook"> <img id="FacebookImg" /></a--> <a id="EmailLink" title="Email this translation"></a> <img id="EmailImg" /></div>
<div id="ShareFooter"><span id="ShareHelpSpan"><a id="ShareHelpLink"></a> <img id="ShareHelpImg" /></span> <span id="ShareBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnShareBackClick()" id="ShareBack" title="Back To Translation"> Back</a></span></div>
<input id="EmailSubject" name="EmailSubject" type="hidden" value="Check out this page in {0} translated from {1}" /> <input id="EmailBody" name="EmailBody" type="hidden" value="Translated: {0}%0d%0aOriginal: {1}%0d%0a%0d%0aAutomatic translation powered by Microsoft&reg; Translator%0d%0ahttp://www.bing.com/translator?ref=MSTWidget" /> <input id="ShareHelpText" type="hidden" value="This link allows visitors to launch this page and automatically translate it to {0}." /></div>
<div id="FloaterEmbed" style="display: none;">
<div id="EmbedTextDiv"><span id="EmbedTextSpan">EMBED THE SNIPPET BELOW IN YOUR SITE</span> <a id="EmbedHelpLink" title="Copy this code and place it into your HTML."></a> <img id="EmbedHelpImg" /></div>
<div id="EmbedTextboxDiv"><input id="EmbedSnippetTextBox" name="EmbedSnippetTextBox" onclick="this.select()" readonly="readonly" type="text" value="&lt;div id='MicrosoftTranslatorWidget' class='Dark' style='color:white;background-color:#555555'&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;setTimeout(function(){var s=document.createElement('script');s.type='text/javascript';s.charset='UTF-8';s.src=((location &amp;&amp; location.href &amp;&amp; location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&amp;ctf=true&amp;ui=true&amp;settings=manual&amp;from=en';var p=document.getElementsByTagName('head')[0]||document.documentElement;p.insertBefore(s,p.firstChild); },0);&lt;/script&gt;" /></div>
<div id="EmbedNoticeDiv"><span id="EmbedNoticeSpan">Enable collaborative features and customize widget: <a href="http://www.bing.com/widget/translator" target="_blank">Bing Webmaster Portal</a></span></div>
<div id="EmbedFooterDiv"><span id="EmbedBackSpan"><a href="javascript:Microsoft.Translator.FloaterOnEmbedBackClick()" title="Back To Translation">Back</a></span></div>
</div>
<script type="text/javascript">// <![CDATA[
 var intervalId = setInterval(function () { if (MtPopUpList) { LanguageMenu = new MtPopUpList(); var langMenu = document.getElementById(LanguageMenu_popupid); var origLangDiv = document.createElement("div"); origLangDiv.id = "OriginalLanguageDiv"; origLangDiv.innerHTML = "<span id='OriginalTextSpan'>ORIGINAL: </span><span id='OriginalLanguageSpan'></span>"; langMenu.appendChild(origLangDiv); LanguageMenu.Init('LanguageMenu', LanguageMenu_keys, LanguageMenu_values, LanguageMenu_callback, LanguageMenu_popupid); window["LanguageMenu"] = LanguageMenu; clearInterval(intervalId); } }, 1); 
// ]]]]><![CDATA[></script>
</div>]]></description>
      <pubDate>Wed, 24 Aug 2022 08:25:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 图像优化的 3 个技巧]]></title>
      <link>https://www.360magento.com/blog/Magento2-3-tips-for-image-optimization/</link>
      <description><![CDATA[<h2><strong><span><span style="font-family: Arial;">技巧</span> 1 - WebP 图片</span></strong><strong><span></span></strong></h2>
<p class="p"><span>PNG 和 JPG 图像格式已过时且尺寸较大。它使它们加载时间更长，并相应地降低您的网站性能。幸运的是，谷歌开发了 WebP&mdash;&mdash;大多数浏览器普遍接受的下一代文件格式。</span><span></span></p>
<p class="p"><span>查看完整指南以了解有关</span><span class="15">Magento 2 中 WebP 图像的</span><span><span style="font-family: Arial;">更多信息、它们与</span> PNG 和 JPG 格式的区别、在您的商店中使用它们的好处和原因。</span><span></span></p>
<p class="p">对于您的网站图像优化，您可以选择<span class="15">Ma</span><span class="15">gento</span><span class="15"> 2</span><span class="15"> We</span><span class="15">bP</span><span class="15"> 图像</span><span><span style="font-family: Arial;">扩展，它可以帮助您将网站上所有当前和未来的图像自动转换为</span> WebP 格式。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">这个</span> Magento 图像优化扩展允许您将图像的大小减少多达 50% 并同时保存它们的质量。真的很难看出区别。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/1.png" width="800" /></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/2.png" width="800" /></span></p>
<p class="p"><span><span style="font-family: Arial;">如果您仔细阅读本文，您可能想知道如果有人从不支持新</span> WebP 格式的旧浏览器进入您的 Magento 2 网站会发生什么。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">由于此</span> Magento 2 图像优化扩展不会将您的 PNG 和 JPG 图像替换为 WEBP 图像，因此它已得到处理。它只是制作他们的副本。因此，那些来自尚未与 WebP 集成的浏览器的人将看到您的原始图像为 PNG 和 JPG 格式。</span><span></span></p>
<p class="p"><strong><em><span class="15"><span style="font-family: Arial;">专业提示：如果您可以使用一些在线转换器将您的图像转换为</span> WebP 并将它们上传到您的网站，为什么还需要 Magento 2 WebP 图像扩展？</span></em></strong><span></span></p>
<p class="p"><span><span style="font-family: Arial;">并不是所有的浏览器都支持</span> WebP（你现在可能已经理解了）。如果您上传已转换的图像，来自&ldquo;非 webp&rdquo;浏览器的人会看到损坏的图像。这个图像优化工具不仅可以帮助您通过快速执行的网站满足所有客户的需求，而且无论使用何种浏览器，都可以向他们展示所有高质量的图片。</span><span></span></p>
<h2><strong><span><span style="font-family: Arial;">提示</span> 2 - 手动图像优化</span></strong><strong><span></span></strong></h2>
<p class="p"><span>这可能是优化您网站上的图像的最简单和最常用的方法。</span><a href="https://imagecompressor.com/" title="在线图像优化器"><span style="text-decoration: underline;"><span class="15">Optimizilla</span></span></a><span>&nbsp;- 是一个完全免费的在线图像优化器，可帮助您将图像的大小减小到可能的最小尺寸。&nbsp;</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">您需要做的就是上传最多</span> 20 张图像，然后等待几秒钟让图像优化器压缩它们。然后，您将能够单独下载每个图像或整个图像包。</span><span></span></p>
<p class="p"><span>Optimizilla 还允许您做的是调节颜色并比较原始图像和压缩图像的质量。</span><span></span></p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/3.png" width="800" /></span></p>
<p><span style="font-family: Arial;">我们强烈建议您在将图像上传到所见即所得编辑器之前使用</span> Optimizilla 压缩图像，以尽可能减少页面大小和加载时间</p>
<h2><strong><span style="font-family: Arial;">技巧</span> 3 - 图片延迟加载</strong><strong></strong></h2>
<p class="p"><span style="font-family: Arial;">一旦您尝试了上面提到的</span> Magento 2 图像优化工具，您的网站性能应该会显着提高。但是，还有另一种方法可以确保快速网页加载 -<span style="font-family: Arial;">延迟加载</span><span style="font-family: Arial;">。</span>&nbsp;</p>
<p class="p">当有人进入一个包含大量图片的页面时，他们通常会立即开始加载。这就是加载速度变慢的原因。您可以使用Magento 2 Image Lazy Load扩展，在向下滚动时将加载哪些图像。</p>
<p class="p">Image Lazy Load 模块与 Magento 2 WebP 图片扩展完全兼容。因此，除了减小图像大小外，您还可以逐步提高网站加载图像的性能。</p>
<p class="p"><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/4.png" width="800" /></span></p>
<p><span style="font-family: Arial;">总而言之，</span>Magento 2 图像优化实际上是您开始优化网站速度所需的第一件事。无论您的产品多么棒，或者您创造了多么令人惊叹的内容。如果您的网站需要大量时间来加载，人们就不会发现它。</p>]]></description>
      <pubDate>Tue, 23 Aug 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在产品页面 Magento 2 中添加自定义选项卡]]></title>
      <link>https://www.360magento.com/blog/How-to-Add-Custom-Tab-in-Product-Page-Magento2/</link>
      <description><![CDATA[<p><span>在 Magento 2 的产品页面中添加自定义选项卡的 5 个步骤：</span></p>
<ul>
<li>第 1 步：定义模板和布局文件</li>
<li>第 2 步：重命名产品选项卡</li>
<li>第 3 步：删除产​​品标签</li>
<li>第 4 步：添加自定义选项卡</li>
<li>第 5 步：在标签式导航中添加相关产品</li>
</ul>
<h2 id="step-1"><span>第 1 步：定义模板和布局文件</span></h2>
<p><span><span>首先，您需要定义要自定义的模板和布局文件。</span><span>一种可以帮助您做到这一点的有效方法是通过 Magento 管理员启用</span><span>和</span><span>添加</span></span><code class="language-plaintext highlighter-rouge">Template Path Hints</code><span><span>。</span><span></span><span>现在，您将看到负责产品信息选项卡的 Magento 模块，</span><span>&nbsp;</span><span>您现在可以开始自定义。</span></span><code class="language-plaintext highlighter-rouge">Block Names</code><span></span><code class="language-plaintext highlighter-rouge">Hints</code><span></span><code class="language-plaintext highlighter-rouge">Stores &gt; Configuration &gt; Advanced &gt; Developer &gt; Debug</code><span></span><code class="language-plaintext highlighter-rouge">module-catalog</code><span></span></p>
<h2 class="active" id="step-2"><span>第 2 步：重命名产品选项卡</span></h2>
<p><span>在为产品选项卡设置另一个标题之前，您需要覆盖</span><code class="language-plaintext highlighter-rouge">catalog_product_view.xml</code><span>可以在</span><code class="language-plaintext highlighter-rouge">vendor/module_catalog</code><span><span>文件夹中找到的基本布局文件。</span><span>覆盖这个文件的标准方法是在你的主题范围内创建一个新的布局文件，然后像基本文件一样命名它。</span><span>以下是您的文件路径的样子：&nbsp;</span></span><code class="language-plaintext highlighter-rouge">app/design/frontend/&lt;Mageplaza&gt;/&lt;Theme&gt;/Magento_Catalog/layout/catalog_product_view.xml</code></p>
<p><span>这是文件内的代码：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?xml version="1.0"?&gt;
&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";; xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;body&gt;
    &lt;referenceBlock name="product.info.details"&gt;                
      &lt;referenceBlock name="product.info.description"&gt;
        &lt;arguments&gt;
          &lt;argument name="title" translate="true" xsi:type="string"&gt;Description&lt;/argument&gt;
        &lt;/arguments&gt;
      &lt;/referenceBlock&gt;
    &lt;/referenceBlock&gt;
  &lt;/body&gt;
&lt;/page&gt;
</code></pre>
</div>
</div>
<p><span>在上面的代码中，第一个布局处理程序</span><code class="language-plaintext highlighter-rouge">&lt;referenceBlock name="product.info.details"&gt;</code><span><span>用于整体引用您的产品选项卡式导航。</span><span>同时，子处理程序</span></span><code class="language-plaintext highlighter-rouge">&lt;referenceBlock name="product.info.description"&gt;</code><span>引用单个选项卡，在此示例中是您的案例详细信息选项卡。</span></p>
<p><span>通过使用</span><code class="language-plaintext highlighter-rouge">&lt;argument name="title" translate="true" xsi:type="string"&gt;</code><span><span>，您可以为标签设置新标题。</span><span>请注意，处理程序</span></span><code class="language-plaintext highlighter-rouge">&lt;arguments&gt;</code><span>只是一个容器</span><code class="language-plaintext highlighter-rouge">&lt;argument&gt;</code><span>，它没有自己的属性。</span></p>
<h2 class="active" id="step-3"><span>第 3 步：删除产​​品标签</span></h2>
<p><span><span>删除产品标签是一项非常简单的任务。</span><span>您只需要引用您的目标块并将 remove 属性设置为 true。</span></span></p>
<p><span>波纹管是</span><code class="language-plaintext highlighter-rouge">the catalog_product_view.xml</code><span>：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?xml version="1.0"?&gt;
&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";; xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;body&gt;
    &lt;referenceBlock name="product.info.review" remove="true" /&gt;
  &lt;/body&gt;
&lt;/page&gt;
</code></pre>
</div>
</div>
<h2 class="active" id="step-4"><span>第 4 步：添加自定义选项卡</span></h2>
<p><span><span>波纹管是您可以向产品页面添加自定义选项卡的方式：首先，转到 Magento 管理员并创建一个新属性。</span><span>然后，为其命名并将其</span></span><code class="language-plaintext highlighter-rouge">Packaging</code><span>添加到</span><code class="language-plaintext highlighter-rouge">default</code><span>属性集。</span></p>
<p><span><span>完成上述步骤后，您需要创建一个新的模板文件。</span><span>该文件可以命名为</span></span><code class="language-plaintext highlighter-rouge">packaging-content.phtml</code><span>并保存在</span><code class="language-plaintext highlighter-rouge">app/design/frontend/&lt;Magplaza&gt;/&lt;Theme&gt;/Magento_Catalog/templates/product/view/</code><span>.</span></p>
<p><span>接下来，将此代码粘贴到文件中：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?php
$_helper = $this-&gt;helper('Magento\Catalog\Helper\Output');
$_product = $block-&gt;getProduct();
$_code = $block-&gt;getAtCode();
$_className = $block-&gt;getCssClass();
$_attributeLabel = $block-&gt;getAtLabel();
$_attributeType = $block-&gt;getAtType();
$_attributeAddAttribute = $block-&gt;getAddAttribute();
if ($_attributeLabel &amp;&amp; $_attributeLabel == 'default') {
    $_attributeLabel = $_product-&gt;getResource()-&gt;getAttribute($_code)-&gt;getFrontendLabel();
}
  $_attributeValue = $_product-&gt;getResource()-&gt;getAttribute($_code)-&gt;getFrontend()-&gt;getValue($_product);
?&gt;
 
&lt;?php if ($_attributeValue): ?&gt;
    &lt;div class="packaging-content" &lt;?php  echo $_attributeAddAttribute;?&gt;&gt;
        &lt;?php echo $_attributeValue; ?&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
</div>
</div>
<p><span>确保 NB 属性集与 if 语句中第 9 行的字符串值匹配。</span></p>
<p><span>最后，将以下代码放入您的布局文件中</span><code class="language-plaintext highlighter-rouge">catalog_product_view.xml</code><span>：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?xml version="1.0"?&gt;
&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";; xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;body&gt;
    &lt;referenceBlock name="product.info.details"&gt;                
      &lt;block class="Magento\Catalog\Block\Product\View\Description" name="packaging-content" template="Magento_Catalog::product/view/packaging-content.phtml" group="detailed_info"&gt;
        &lt;arguments&gt;
          &lt;argument name="at_call" xsi:type="string"&gt;getPackaging&lt;/argument&gt;
          &lt;argument name="at_code" xsi:type="string"&gt;packaging&lt;/argument&gt;
          &lt;argument name="css_class" xsi:type="string"&gt;packaging&lt;/argument&gt;
          &lt;argument name="at_label" xsi:type="string&rdquo;&gt;packaging&lt;/argument&gt;
          &lt;argument name="add_attribute" xsi:type="string"&gt;itemprop="packaging"&lt;/argument&gt;
          &lt;argument name="title" translate="true" xsi:type="string"&gt;Packaging content&lt;/argument&gt;
        &lt;/arguments&gt;
      &lt;/block&gt;
    &lt;/referenceBlock&gt;
  &lt;/body&gt;
&lt;/page&gt;
</code></pre>
</div>
</div>
<h2 class="active" id="step-5"><span>第 5 步：在标签式导航中添加相关产品</span></h2>
<p><span>为了在选项卡式导航中添加相关产品，您需要编辑两个文件，即模板和布局。</span></p>
<p><span>使用模板文件，将其命名为</span><code class="language-plaintext highlighter-rouge">related-products.phtml</code><span>并保存为</span><code class="language-plaintext highlighter-rouge">app/design/frontend/&lt;Mageplaza&gt;/&lt;Theme&gt;/Magento_Catalog/templates/product/</code><span><span>.&nbsp;</span><span>该文件将只有一个代码行：</span></span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?php echo $this-&gt;getBlockHtml('catalog.product.related'); ?&gt;
</code></pre>
</div>
</div>
<p><span>命名的布局文件</span><code class="language-plaintext highlighter-rouge">catalog_product_view.xml</code><span>如下所示：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?xml version="1.0"?&gt;
&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";; xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
  &lt;body&gt;
    &lt;!&mdash; 1st Code Block: Get Related Products as new tab --&gt;
    &lt;referenceBlock name="product.info.details"&gt;
      &lt;block class="Magento\Catalog\Block\Product\View" name="deliveryinfo.tab" as="deliveryinfo" template="Magento_Catalog::product/related-products.phtml" group="detailed_info" &gt;
        &lt;arguments&gt;
          &lt;argument translate="true" name="title" xsi:type="string"&gt;Related Products&lt;/argument&gt;
        &lt;/arguments&gt;
      &lt;/block&gt;
    &lt;/referenceBlock&gt;
 
    &lt;!&mdash; 2nd Code Block: Move original block to product info tabs --&gt;
    &lt;move element="catalog.product.related" destination="product.info.details" /&gt;
  &lt;/body&gt;
&lt;/page&gt;
</code></pre>
</div>
</div>
<p><span><span>第一个代码用于设置包含相关产品的新选项卡。</span><span>第二个代码用于将您的</span></span><code class="language-plaintext highlighter-rouge">upsell-products.phtml</code><span>模板文件更改为：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?php echo $this-&gt;getBlockHtml('product.info.upsell'); ?&gt;</code></pre>
<p><span>以下是您需要在布局文件中进行的一些自定义：</span></p>
<ul>
<li><span>第 6 行：将模板文件的名称更改为</span><code class="language-plaintext highlighter-rouge">upsell-products.phtml</code><span>.</span></li>
<li><span>第 8 行：将标签命名为</span><code class="language-plaintext highlighter-rouge">You might be interested</code><span>.</span></li>
<li><span>第 14 行：将属性添加到</span><code class="language-plaintext highlighter-rouge">product.info.upsell</code><span>.</span></li>
</ul>
<h2 class="active" id="conclusion"><span>结论</span></h2>
<p><span><span>总之，在产品页面的选项卡式导航中自定义和添加自定义选项卡并不难。</span><span>我希望在阅读这篇文章后，您将能够通过添加一些 CSS 样式轻松地拥有包含新自定义内容的新标签。</span></span></p>
</div>
</div>]]></description>
      <pubDate>Mon, 22 Aug 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento2中使用弹出窗口小部件jQuery]]></title>
      <link>https://www.360magento.com/blog/Using-Popup-Widget-jQuery-in-Magento2/</link>
      <description><![CDATA[<p><span>在本文中，我们将看一个在Magento 2中使用jQuery弹出窗口小部件的示例。为了清晰起见，我们将使用这个小部件创建一个模态窗口，在其中放置搜索表单，搜索表单默认位于header中。首先，让我们看看现有的小部件选项。以下选项是默认可用的:</span></p>
<ul>
<li>autoOpen</li>
<li>buttons</li>
<li>clickableOverlay</li>
<li>focus</li>
<li>innerScroll</li>
<li>modalClass</li>
<li>modalLeftMargin</li>
<li>responsive</li>
<li>title</li>
<li>type</li>
</ul>
<p><span>但是，这个列表不是最终的列表，您可以自由地添加所需的选项，从而扩展这个小部件的原始功能。</span></p>
<p><span>让我们仔细看看每个选项。</span></p>
<p><strong>autoOpen</strong></p>
<p><span>此属性的默认值为&ldquo;false&rdquo;。属性确定小部件初始化后是否立即显示模态窗口。</span></p>
<p><strong>buttons</strong></p>
<p><span>该属性的值是一个数组，其中包含一个对象，您可以在该对象中传递按钮、CSS类和处理程序函数的文本，单击按钮时将触发处理程序函数。</span></p>
<p><strong>clickableOverlay</strong></p>
<p><span>此属性确定在单击叠加时是否可以关闭模态窗口。默认值为true。</span></p>
<p><strong>focus</strong></p>
<p><span>此属性确定在窗口打开后立即处于焦点位置的元素。具有CSS类名称的字符串被接受为值。在我们的例子中，在打开一个弹出窗口之后，重点应该放在搜索输入字段上。</span></p>
<p><strong>innerScroll</strong></p>
<p><span>如果模态窗口超过了屏幕的大小，这个属性将确定滚动位置，并且在打开弹出窗口时，我们需要滚动位于特定位置。</span></p>
<p><strong>modalClass</strong></p>
<p><span>有了这个属性，我们可以定义样式化所需的任何CSS属性</span></p>
<p><strong>modalLeftMargin</strong></p>
<p><span>此属性设置模态窗口之间的缩进。</span></p>
<p><strong>responsive</strong></p>
<p><span>定义模态窗口的自适应行为。默认情况下，该值设置为false。</span></p>
<p><strong>title</strong></p>
<p><span>定义模态窗口的标题。</span></p>
<p><strong>type</strong></p>
<p><span>此属性接受两个值作为字符串弹出或模态。根据所选的值，将定义一个用于呈现弹出窗口的模板。这些模板默认位于下列文件夹中:</span></p>
<ul>
<li>&lt;Magento_Ui_module_dir&gt;/view/base/web/templates/modal/modal-popup.html popup template.</li>
<li>&lt;Magento_Ui_module_dir&gt;/view/base/web/templates/modal/modal-slide.html slide template.</li>
</ul>
<p><span>如果需要，可以在theme文件夹中覆盖它们。</span></p>
<p><span>由于我们将为标题搜索表单创建一个弹出窗口，因此需要覆盖form.mini并稍微修改它。phtml模板。</span></p>
<p><span>该模板位于vendor/magento/module-search中。让我们覆盖它，把它放在下面的文件夹:</span></p>
<p><em>Vendor_Name/Vendor_Theme/Magento_Search/templates/form.mini.phtml.</em></p>
<p><span>在搜索块前面添加一个标记，它将显示搜索按钮，单击该按钮后，我们的模态窗口将弹出。</span></p>
<div class="crayon-syntax crayon-theme-sublime-text crayon-font-consolas crayon-os-pc print-yes notranslate" id="crayon-63023b6531f49022424965" data-settings=" no-popup minimize scroll-always">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-1">1</div>
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-2">2</div>
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-3">3</div>
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-4">4</div>
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-5">5</div>
<div class="crayon-num" data-line="crayon-63023b6531f49022424965-6">6</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div class="crayon-line" id="crayon-63023b6531f49022424965-1"><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle"</span><span class="crayon-h"> </span><span class="crayon-i">id</span>=<span class="crayon-s">"search-popup-toggle"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f49022424965-2"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle-icon"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f49022424965-3"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">img </span><span class="crayon-i">src</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?php</span><span class="crayon-h"> </span><span class="crayon-k ">echo</span><span class="crayon-h"> </span><span class="crayon-v">$block</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getViewFileUrl</span><span class="crayon-sy">(</span><span class="crayon-s">'images/search-icon.svg'</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span><span class="crayon-h"> </span><span class="crayon-i">alt</span>=<span class="crayon-s">"search-icon"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f49022424965-4"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-i">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f49022424965-5"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle-text"</span><span class="crayon-h">&gt;</span><span class="crayon-i">Search</span><span class="crayon-h">&lt;</span>/<span class="crayon-i">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f49022424965-6"><span class="crayon-h">&lt;</span>/<span class="crayon-i">div</span><span class="crayon-h">&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>从技术上讲，这并不一定是一个按钮元素。这可以是任何DOM元素，稍后我们将向其附加事件处理程序。</span></p>
<p><span>下一步是连接RequireJS模块，在这个模块中我们定义了弹出窗口的设置。为了连接模块，我们使用了一个声明性的符号，通过</span><em>&lt;script type=&rdquo;text/x-magento-init&rdquo; /&gt;</em><span>&nbsp;</span><span>标签</span></p>
<p><span>在模板的末尾添加以下代码:</span></p>
<div class="crayon-syntax crayon-theme-sublime-text crayon-font-consolas crayon-os-pc print-yes notranslate" id="crayon-63023b6531f51439594018" data-settings=" no-popup minimize scroll-always">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-1">1</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-2">2</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-3">3</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-4">4</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-5">5</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-6">6</div>
<div class="crayon-num" data-line="crayon-63023b6531f51439594018-7">7</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div class="crayon-line" id="crayon-63023b6531f51439594018-1"><span class="crayon-ta">&lt;script </span><span class="crayon-e ">type</span>=<span class="crayon-s">"text/x-magento-init"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-2"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-3"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-s">"#search-popup-toggle"</span><span class="crayon-sy">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-4"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-s">"Magento_Search/js/search-popup"</span><span class="crayon-sy">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-5"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-6"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f51439594018-7"><span class="crayon-ta">&lt;/script&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span>在这个JSON对象中，我们传递#search-popup-toggle元素和search-popup.js脚本，我们将在下一步创建。请注意，在上面的代码中，我们指定了没有扩展名的js文件的名称。</span></p>
<p><span>Vendor_Name/Vendor_Theme/Magento_Search/we/js文件夹中，我们创建了一个新文件<strong>search-popup.js</strong></span></p>
<p><span>在文件中放入以下代码:</span></p>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-code">
<div class="crayon-pre">
<div class="crayon-line" id="crayon-63023b6531f54568905780-1"><span class="crayon-ta">&lt;?php</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-2"><span class="crayon-c">/**</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-3"><span class="crayon-c">* Copyright &copy; Magento, Inc. All rights reserved.</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-4"><span class="crayon-c">* See COPYING.txt for license details.</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-5"><span class="crayon-c">*/</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-6"><span class="crayon-c">// @codingStandardsIgnoreFile</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-7"><span class="crayon-ta">?&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-8"><span class="crayon-ta">&lt;?php</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-9"><span class="crayon-c">/** @var $block \Magento\Framework\View\Element\Template */</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-10"><span class="crayon-c">/** @var $helper \Magento\Search\Helper\Data */</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-11"><span class="crayon-v">$helper</span><span class="crayon-h"> </span>=<span class="crayon-h"> </span><span class="crayon-v">$this</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">helper</span><span class="crayon-sy">(</span><span class="crayon-sy">\</span><span class="crayon-i">Magento</span><span class="crayon-sy">\</span><span class="crayon-i">Search</span><span class="crayon-sy">\</span><span class="crayon-i">Helper</span><span class="crayon-sy">\</span><span class="crayon-e">Data::</span><span class="crayon-t">class</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-12"><span class="crayon-ta">?&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-13"><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle"</span><span class="crayon-h"> </span><span class="crayon-i">id</span>=<span class="crayon-s">"search-popup-toggle"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-14"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle-icon"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-15"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">img </span><span class="crayon-i">src</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?php</span><span class="crayon-h"> </span><span class="crayon-k ">echo</span><span class="crayon-h"> </span><span class="crayon-v">$block</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getViewFileUrl</span><span class="crayon-sy">(</span><span class="crayon-s">'images/search-icon.svg'</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span><span class="crayon-h"> </span><span class="crayon-i">alt</span>=<span class="crayon-s">"search-icon"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-16"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-i">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-17"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span </span><span class="crayon-t">class</span>=<span class="crayon-s">"block-search-toggle-text"</span><span class="crayon-h">&gt;</span><span class="crayon-i">Search</span><span class="crayon-h">&lt;</span>/<span class="crayon-i">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-18"><span class="crayon-h">&lt;</span>/<span class="crayon-i">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-19"><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"block block-search"</span><span class="crayon-h"> </span><span class="crayon-i">id</span>=<span class="crayon-s">"search-block"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-20"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"block block-title"</span><span class="crayon-h">&gt;</span><span class="crayon-h">&lt;</span><span class="crayon-e">strong</span><span class="crayon-h">&gt;</span><span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Search'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span><span class="crayon-h">&lt;</span>/<span class="crayon-i">strong</span><span class="crayon-h">&gt;</span><span class="crayon-h">&lt;</span>/<span class="crayon-i">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-21"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"block block-content"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-22"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">form </span><span class="crayon-t">class</span>=<span class="crayon-s">"form minisearch"</span><span class="crayon-h"> </span><span class="crayon-i">id</span>=<span class="crayon-s">"search_mini_form"</span><span class="crayon-h"> </span><span class="crayon-i">action</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-v">$helper</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getResultUrl</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span><span class="crayon-h"> </span><span class="crayon-i">method</span>=<span class="crayon-s">"get"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-23"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"field search"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-24"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">label </span><span class="crayon-t">class</span>=<span class="crayon-s">"label"</span><span class="crayon-h"> </span><span class="crayon-st">for</span>=<span class="crayon-s">"search"</span><span class="crayon-h"> </span><span class="crayon-i">data</span>-<span class="crayon-i">role</span>=<span class="crayon-s">"minisearch-label"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-25"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span</span><span class="crayon-h">&gt;</span><span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Search'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span><span class="crayon-h">&lt;</span>/<span class="crayon-i">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-26"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-i">label</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-27"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"control"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-28"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">input </span><span class="crayon-i">id</span>=<span class="crayon-s">"search"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-29"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">data</span>-<span class="crayon-i">mage</span>-<span class="crayon-i">init</span>=<span class="crayon-s">'{"quickSearch":{</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-30"><span class="crayon-s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "formSelector":"#search_mini_form",</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-31"><span class="crayon-s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "url":"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-v">$helper</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getSuggestUrl</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-ta">?&gt;</span>",</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-32"><span class="crayon-s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "destinationSelector":"#search_autocomplete"}</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-33"><span class="crayon-s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}'</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-34"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">type</span>=<span class="crayon-s">"text"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-35"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">name</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-v">$helper</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getQueryParamName</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-36"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">value</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-v">$helper</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getEscapedQueryText</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-37"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">placeholder</span>=<span class="crayon-s">"Search By Typing"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-38"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-t">class</span>=<span class="crayon-s">"input-text"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-39"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">maxlength</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-v">$helper</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getMaxQueryLength</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-40"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">role</span>=<span class="crayon-s">"combobox"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-41"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">aria</span>-<span class="crayon-i">haspopup</span>=<span class="crayon-s">"false"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-42"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">aria</span>-<span class="crayon-i">autocomplete</span>=<span class="crayon-s">"both"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-43"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="crayon-i">autocomplete</span>=<span class="crayon-s">"off"</span>/<span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-44"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-i">id</span>=<span class="crayon-s">"search_autocomplete"</span><span class="crayon-h"> </span><span class="crayon-t">class</span>=<span class="crayon-s">"search-autocomplete"</span><span class="crayon-h">&gt;</span><span class="crayon-h">&lt;</span>/<span class="crayon-e">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-45"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-v">$block</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">getChildHtml</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-46"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-i">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-47"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-i">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-48"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">div </span><span class="crayon-t">class</span>=<span class="crayon-s">"actions"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-49"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">button </span><span class="crayon-i">type</span>=<span class="crayon-s">"submit"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-50"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-i">title</span>=<span class="crayon-s">"<span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-v">$block</span>-<span class="crayon-h">&gt;</span><span class="crayon-e">escapeHtml</span><span class="crayon-sy">(</span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Search'</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span>"</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-51"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-t">class</span>=<span class="crayon-s">"action search"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-52"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span><span class="crayon-e">span</span><span class="crayon-h">&gt;</span><span class="crayon-ta">&lt;?=</span><span class="crayon-h"> </span><span class="crayon-c">/* @escapeNotVerified */</span><span class="crayon-h"> </span><span class="crayon-e">__</span><span class="crayon-sy">(</span><span class="crayon-s">'Search'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-ta">?&gt;</span><span class="crayon-h">&lt;</span>/<span class="crayon-e">span</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-53"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-e">button</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-54"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-e">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-55"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-e">form</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-56"><span class="crayon-h">&nbsp;&nbsp; </span><span class="crayon-h">&lt;</span>/<span class="crayon-e">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-57"><span class="crayon-h">&lt;</span>/<span class="crayon-e">div</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-58"><span class="crayon-ta">&lt;script </span><span class="crayon-e ">type</span>=<span class="crayon-s">"text/x-magento-init"</span><span class="crayon-h">&gt;</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-59"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-60"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-s">"#search-popup-toggle"</span><span class="crayon-sy">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-61"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-s">"Magento_Search/js/search-popup"</span><span class="crayon-sy">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-62"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-63"><span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="crayon-sy">}</span></div>
<div class="crayon-line" id="crayon-63023b6531f54568905780-64"><span class="crayon-ta">&lt;/script&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<p><span>这就是jQuery弹出窗口小部件在Magento 2中的样子，感谢您的阅读!在下面的部分留下你的评论和问题，我很乐意回答。</span></p>]]></description>
      <pubDate>Sun, 21 Aug 2022 08:30:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[xampp怎么修改php版本]]></title>
      <link>https://www.360magento.com/blog/How-does-xampp-modify-the-PHP-version/</link>
      <description><![CDATA[<h2>1、下载安装包与压缩包</h2>
<p><span>打开&nbsp;</span><code>XAMPP</code><span>&nbsp;官网，下载你所需要的版本，这里以 7.3.30 与 7.4.29 为例，那么你可以选择下载两个压缩包，或者一个压缩包一个安装包，但不能都是安装包，至于为什么，后面你应该会明白，所以这里我们选择了&nbsp;</span><code>7.4.29</code><span>&nbsp;安装包，</span><code>7.3.30</code><span>&nbsp;压缩包。</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/1.PNG" width="819" /></span></p>
<p></p>
<h2>2、目录配置</h2>
<p><span>1、确保XAMPP已退出，<span>并重命名 XAMPP 安装目录中的 php 目录为 php7.4，如D:\xampp\php 改变为 D:\xampp\php7.4。</span></span></p>
<p><span><span><span>2、将下载的另一个版本压缩包解压，并将其中的 php 目录移动到 XAMPP 安装目录。</span></span></span></p>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/1_1.PNG" width="819" /></span></span></p>
<h2>3、文件配置</h2>
<p><span>1、在 D:\xampp\apache\conf 目录下的 httpd.conf 文件中，找到 PHP 的 XAMPP 设置，配置如下所示：</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # XAMPP settings<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #Include "conf/extra/httpd-xampp-7.4.conf"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Include "conf/extra/httpd-xampp-7.3.conf"</p>
<p><span>注：当你真正使用时，该配置只能启用一个。</span></p>
<p>2、将 ‪D:\xampp\apache\conf\extra 目录中的 httpd-xampp.conf 文件重命名为 httpd-xampp-7.4.conf。</p>
<p>3、将另一个版本压缩包中同目录下的 httpd-xampp.conf，重命名为 httpd-xampp-7.3.conf，复制它并粘贴到D:\xampp\apache\conf\extra。</p>
<p><span>现在打开你的 XAMPP 控制面板启动 Apache。</span></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_84/1_2.PNG" width="819" /></p>
<p><span>注：如果你想要从一个版本切换到另一个版本，只需要在 D:\xampp\apache\conf\httpd.conf 注释与打开对应配置，修改xampp安装目录下的php文件夹名称，如D:\xampp\php 改变为 D:\xampp\php7.3，将你需要的php版本文件夹重命名为php，如D:\xampp\php7.4 改变为 D:\xampp\php，最后重新启动 Apache即可。</span></p>]]></description>
      <pubDate>Sat, 20 Aug 2022 08:28:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[可以在 Magento 2 中禁用 Elasticsearch 吗？]]></title>
      <link>https://www.360magento.com/blog/Can-Elasticsearch-be-disabled-in-Magento-2/</link>
      <description><![CDATA[<h2><span>配置 Magento 2 ElasticSearch 扩展</span></h2>
<p><span></span><span><span>步骤 1. 首先，您需要设置连接。</span><span>为此，导航到&nbsp;</span></span><span>管理面板 &gt; 商店 &gt; 配置 &gt; 弹性搜索 &gt; 连接：</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/connection2.jpg" width="819" /></span></p>
<p><span>步骤 2.</span><span><span>&nbsp;在&nbsp;</span><span><span>搜索引擎</span></span><span>&nbsp;下拉列表中</span><span>&nbsp;选择&nbsp;</span></span><span>Amasty ElasticSearch 。</span><span></span><span><span></span></span><span></span></p>
<p><span>步骤 3.</span><span>&nbsp;然后，输入 ElasticSearch 运行机器 IP 地址，指明</span><span>&nbsp;Elasticsearch Server Hostname&nbsp;</span><span>。</span></p>
<p><span>步骤 4.</span><span>&nbsp;定义</span><span>&nbsp;Elasticsearch 服务器端口。</span></p>
<p><span>步骤 5.</span><span><span>&nbsp;为您实施弹性搜索的每个商店</span><span>&nbsp;配置特定的&nbsp;</span></span><span>Elasticsearch 索引前缀。</span><span></span></p>
<p><span>步骤 6.</span><span><span>&nbsp;如果您的 Elasticsearch 服务器的验证已启用，请</span><span>在&nbsp;</span><span><span>Elasticsearch HTTP Auth</span></span><span>下拉列表中&nbsp;设置&nbsp;</span></span><span>是&nbsp;，并通过您的身份验证数据满足显示的行。</span><span></span><span><span></span></span><span></span></p>
<p><span>步骤 7.&nbsp;</span><span>如果需要，设置&nbsp;</span><span>Elasticsearch Server Timeout</span><span>的时间。</span></p>
<p><span>步骤 8.&nbsp;</span><span><span>测试连接。</span><span>如果它成功了，那么你做的一切都是正确的。</span></span></p>
<p>&nbsp;</p>
<p><span>之后，您需要设置&nbsp;</span><span>自动完成建议和拼写更正。</span></p>
<p><span>步骤 1.&nbsp;</span><span>导航到&nbsp;</span><span>管理面板 &gt; 商店 &gt; 配置 &gt; 弹性搜索 &gt; 目录：</span></p>
<p><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/catalog2.jpg" width="819" /></span></p>
<p><span>步骤 2.&nbsp;</span><span>在&nbsp;</span><span>通配符类型</span><span>&nbsp;字段中，从 3 个选项中选择将自动填写的单词部分。</span></p>
<p><span>步骤 3.&nbsp;</span><span>然后将字符数写入&nbsp;</span><span>Enable Wildcard After</span><span>。</span></p>
<p><span>步骤 4.&nbsp;</span><span><span>然后</span><span>通过输入字符数定义何时启用</span></span><span>&nbsp;拼写校正&nbsp;。</span><span></span></p>
<p><span>第 5 步。&nbsp;</span><span>在&ldquo;&nbsp;</span><span>搜索结果的最大数量&rdquo;</span><span>&nbsp;字段中，您可以在搜索结果中编写自己的最大元素数，或者将其保留为 0 以使用预设的 Magento 值。</span></p>
<p><span>第 6 步。</span><span>&nbsp;在下一个下拉列表中，您可以将&nbsp;</span><span>&ldquo;是&rdquo;&nbsp;</span><span>设置为&nbsp;</span><span>允许特殊字符</span><span>&nbsp;，这在客户使用高度特定的搜索短语和包含斜杠、连字符、破折号或任何其他非字母符号的单词时很有用。</span></p>
<p><span>第 7 步。&nbsp;</span><span>这里的最后一件事是配置&nbsp;</span><span>高级查询设置。&nbsp;</span><span>只需为每个属性选择您的偏好。&nbsp;</span></p>
<p><span>请记住，如果您需要将产品属性添加到搜索查询配置中，您需要执行以下操作：</span></p>
<p><span>导航到管理面板 &gt; 商店 &gt; 属性 &gt; 产品 &gt;&nbsp;</span><span>选择所需的&nbsp;</span><em>产品属性</em><span></span><span>&gt;&nbsp;</span><span><span>单击&nbsp;</span><span><span>店面属性 &gt; 启用在搜索中使用</span></span><span>&nbsp;。&nbsp;</span></span><span><span></span></span></p>
<p><span>之后，您必须&nbsp;根据需要填写</span><span>Indexation Settings</span><span>&nbsp;字段并选择是否要启用&nbsp;</span><span>Debug</span><span>。</span></p>
<h2><span>有什么方法可以在 Magento 2 中禁用 Elasticsearch？</span></h2>
<p><span>如果您已升级到 Magento 2.4，则Magento 2 禁用</span>Elasticsearch 功能<span><span>不可用，因为必须安装 Elasticsearch，并且无法绕过此限制。</span><span>由于 Magento 2.4 禁用 Elasticsearch 功能自 2.4 版本平台以来不可用，因此在最新版本的 Magento 2 中使用 Elasticsearch 进行更改的唯一方法是安装第三方扩展。</span></span></p>
<p><span>&nbsp;</span></p>
<p></p>
<p></p>]]></description>
      <pubDate>Fri, 19 Aug 2022 08:26:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何使用内联翻译翻译 Magento 2 扩展]]></title>
      <link>https://www.360magento.com/blog/How-to-Translate-Magento2-Extension-Using-Inline-Translation/</link>
      <description><![CDATA[<p><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">在本文中，您将学习如何执行 Magento 2 内联翻译。</span></span></span></p>
<p><span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">首先，确保您对不同语言有不同的商店视图。</span></span></span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">然后，您需要在 Magento 2 后端启用内联翻译并在前端翻译元素。</span></span></span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">请按照下面的快速指南正确执行 Magento 2 内联翻译。</span></span></span></span></p>
<p class="pr-notice-title"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">分步操作：</span></span></p>
<ol>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">转到Magento 2 管理面板中的商店。</span></span></li>
<li><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">在设置选项卡中选择配置部分。</span></span></li>
</ol>
<p><span><span><img height="471" src="https://www.360magento.com/media/wysiwyg/blog_84/Magento_2_inline_translation_1.jpg" width="819" /></span></span></p>
<p class="pr-notice-title"><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">分步操作：</span></span></span></p>
<ol>
<li><span>转到</span><span>高级</span><span>选项卡。</span></li>
<li><span>选择</span><span>开发人员</span><span>部分。</span></li>
<li><span>选择您需要执行翻译的商店视图。</span></li>
<li><span>启用内联翻译。</span></li>
<li><span>应为 Storefront 和 Admin 内联翻译禁用翻译、块和其他输出缓存。</span></li>
<li><span>按</span><span>保存配置</span><span>按钮以保存您的更改。</span></li>
</ol>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/Magento_2_inline_translation_2vz.jpg" width="819" /></span></span></p>
<p><span>在 Magento 2 后端设置配置后，您可以在前端开始翻译。</span></p>
<div class="wp-block-group pr-notice pr-notice-info">
<div class="wp-block-group__inner-container">
<p class="pr-notice-title"><span>分步操作：</span></p>
<ol>
<li><span>从下拉菜单中选择所需的语言（例如德语）。</span></li>
<li><span>在您需要翻译的页面上选择一个元素，然后翻译表单将打开。</span></li>
<li><span>将翻译后的文本输入</span><span>自定义</span><span>字段。</span></li>
<li><span>按</span><span>提交</span><span>保存翻译。</span></li>
</ol></div>
</div>
<p><span><span><img src="https://www.360magento.com/media/wysiwyg/blog_84/Magento_2_inline_translation_3_v1.jpg" width="819" /></span></span></p>
<p><span><span><span>请确保在提交翻译后刷新页面。</span></span></span></p>]]></description>
      <pubDate>Thu, 18 Aug 2022 08:22:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 部署静态内容]]></title>
      <link>https://www.360magento.com/blog/magento-2-static-content-deploy/</link>
      <description><![CDATA[<h2 class="active" id="overview-of-static-view-files-deployment"><span>静态视图文件部署概述</span></h2>
<p><span>首先，让我们了解更多关于静态视图的知识。</span></p>
<p><span><span>这里的静态是指可以缓存非动态生成的文件。</span><span>&ldquo;视图&rdquo;一词是指模型-视图-控制器 (MVC) 中的表示层。</span></span></p>
<p><span><span>静态视图文件的部署受三种 Magento 模式的影响，包括生产模式、默认模式和开发者模式。</span><span>静态视图文件部署命令使您能够在 Magento 2 商店处于生产模式时编写静态内容文件。</span></span></p>
<h2 class="active" id="deploy-static-content-via-command-line"><span>通过命令行部署静态内容</span></h2>
<p><span>转到 Magento 管理根文件夹并显示用法：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento setup:static-content:deploy -h</code><br /><br /><a href="https://www.mageplaza.com/install-magento-2-extension/">安装/更新扩展</a>时，只需运行以下命令行即可部署您的商店的静态内容</pre>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento setup:static-content:deploy -f</code></pre>
</div>
</div>
</div>
</div>]]></description>
      <pubDate>Wed, 17 Aug 2022 08:45:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 如何通过命令行解锁管理员用户]]></title>
      <link>https://www.360magento.com/blog/magento-2-unlock-admin-user/</link>
      <description><![CDATA[<h2 class="active" id="how-to-unlock-admin-user-via-command-line"><span>如何通过命令行解锁管理员用户</span></h2>
<h2 class="active" id="syntax-to-unlock-admin-user"><span>解锁管理员用户的语法</span></h2>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento admin:user:unlock username
</code></pre>
</div>
</div>
<p><span>让我们解锁一个管理员帐户：</span><code>360Magento</code>并提供以下信息</p>
<p><span>在命令行中输入：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento admin:user:unlock 360Magento
</code></pre>
</div>
</div>
<p><span>输出：</span></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>The user account "</code><code>360Magento</code><code>" has been unlocked<br /><br /><span>如果管理员用户未锁定，您可能会收到以下消息：</span><br /></code></pre>
<pre class="highlight"><code>The user account "</code><code>360Magento</code><code>" was not locked or could not be unlocked</code></pre>
<p></p>
</div>
</div>]]></description>
      <pubDate>Tue, 16 Aug 2022 08:25:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在 Magento 2 中配置 Cron（定时任务）]]></title>
      <link>https://www.360magento.com/blog/configure-cron-scheduled-task-in-magento-2/</link>
      <description><![CDATA[<p class="p"><span>1. 导航到&nbsp;</span><strong><span class="15">Stores &gt; Configuration &gt; Advanced &gt; System &gt; Cron (Scheduled Tasks)</span></strong><span>。</span><span></span></p>
<p class="p"><span>您将在</span><strong><span class="15">Cron（计划任务）</span></strong><span><span style="font-family: Arial;">选项卡下看到所有默认的</span> cron 作业，以及与您使用的各种 Magento 2 模块一起使用的 cron 作业。每个 cron 的选项都是相同的，因此您只需使用首选值填写它们。</span><span></span></p>
<p class="p"><span><img height="374" src="https://www.360magento.com/media/wysiwyg/blog_84/_1.png" width="616" /></span></p>
<p class="p"></p>
<p class="p">2.&nbsp;<span style="font-family: Arial;">配置</span> cron 计划选项。</p>
<p class="p"><strong>3. 在Generate Schedules Every</strong><span style="font-family: Arial;">中定义您希望</span> cron 多久&nbsp;生成一次计划。</p>
<p class="p">4. 在&nbsp;<strong>Schedule Ahead for</strong><span style="font-family: Arial;">字段中指定提前多长时间来安排</span> cron 作业的时间（以分钟为单位）。</p>
<p class="p"><em><span style="font-family: Arial;">例如，如果您在此处设置</span> </em><em><span style="font-family: Arial;">2</span></em><em>0，则 cron 作业将在 cron 运行后的下一个 </em><em><span style="font-family: Arial;">2</span></em><em>0 分钟内安排。</em></p>
<p class="p"><strong>5. 在Missed if not Run Within&nbsp;</strong><span style="font-family: Arial;">字段中设置时间（以分钟为单位），如果</span> cron 作业在预定时间后未运行，则将&nbsp;其分配为<em>Missed状态。</em></p>
<p class="p">6. 在&nbsp;<strong>History Cleanup Every</strong>字段中，您设置时间（以分钟为单位），在该时间之后应清除已完成任务的历史记录。</p>
<p class="p">7. 定义&nbsp;<strong>Success History Lifetime&nbsp; ，它指定具有</strong><em>成功</em><span style="font-family: Arial;">状态的</span> cron 作业应保留在数据库中的时间（以分钟为单位） 。</p>
<p class="p"><strong>8. 在Failure History Lifetime</strong>&nbsp;字段中设置状态为Error 的cron 作业应在数据库中保留多长时间</p>
<p><strong>9. 在Use Separate Process</strong><span style="font-family: Arial;">中选择是否要单独运行组中的所有</span> cron 作业&nbsp;。</p>
<p><img height="495" src="https://www.360magento.com/media/wysiwyg/blog_84/_2.png" width="819" /></p>
<h2><strong><span><span style="font-family: Arial;">在</span> Magento 中处理 Cron 作业的有用命令</span></strong><strong><span></span></strong></h2>
<p class="p"><span><span style="font-family: Arial;">尽管</span> Magento 中的 crons 按计划运行，您可以将它们配置为，但有时您可能需要手动按需执行它们。&nbsp;</span><span></span></p>
<p class="p"><strong><span class="15">注意：</span></strong><span><span style="font-family: Arial;">您需要在作为</span> Magento 所有者的用户下运行命令。</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">对于这些情况，您需要最常见的命令来与</span> Magento crons 一起使用</span><span></span></p>
<p class="p"><span><span style="font-family: Arial;">1.</span><span style="font-family: 宋体;">需要</span></span><strong><span class="15"><span style="font-family: Arial;">要创建</span> crontab</span></strong><span></span></p>
<p class="p"><span><span style="font-family: Arial;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">bin/magento cron：安装</span></span></span></span><span></span></p>
<p class="p"><strong><span class="15"><span style="font-family: Arial;">2.</span></span></strong><strong><span class="15"><span style="font-family: Arial;">要检查</span> crontab</span></strong><strong><span class="15"></span></strong></p>
<p class="p"><strong><span class="15"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">crontab -1</span></span></span></strong><strong><span class="15"></span></strong></p>
<p class="p"><strong><span class="15"><span style="font-family: Arial;">3.</span></span></strong><strong><span class="15"><span style="font-family: Arial;">要删除该用户的所有</span> Magento crons</span></strong><strong><span class="15"></span></strong></p>
<p class="p"><strong><span class="15">&nbsp;</span></strong><strong><span class="15"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">crontab </span></span></span></strong><strong><span class="15"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">-r</span></span></span></strong><strong><span class="15"></span></strong></p>
<p class="p"><strong><span class="15">4.</span></strong><strong><span class="15"><span style="font-family: Arial;">要运行</span> cron</span></strong><strong><span class="15">&nbsp;</span></strong><strong><span class="15">任务</span></strong><strong><span class="15"></span></strong></p>
<p class="p"><span><span style="font-family: Arial;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">bin/magento cron：运行</span></span></span></span><span></span></p>
<p class="p"><strong><span class="15">5</span></strong><span><span style="font-family: Arial;">.</span></span><strong><span class="15"><span style="font-family: Arial;">要运行</span> cron 组</span></strong><span></span></p>
<p class="p"><span><span style="font-family: Arial;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">bin/magento cron:run --group [cron 组名]</span></span></span></span><span></span></p>
<p class="p"><strong><span class="15">6</span></strong><span><span style="font-family: Arial;">.</span></span><strong><span class="15"><span style="font-family: Arial;">要删除</span> Magento crontab</span></strong><span></span></p>
<p class="p"><span><span style="font-family: Arial;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">bin/magento cron：删除</span></span></span></span><strong><span class="15"></span></strong></p>]]></description>
      <pubDate>Mon, 15 Aug 2022 08:27:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 通过命令行创建管理员用户]]></title>
      <link>https://www.360magento.com/blog/magento-2-add-admin-user-command-line/</link>
      <description><![CDATA[<p><span><span>从后端手动创建管理员用户是最基本的方法。</span><span>如果您处于以下情况，通过命令行创建管理员用户帐户具有一些优势：</span></span></p>
<ul>
<li><span>您希望通过使用命令行而不是在商店后端的帐户信息中填写多个字段来节省创建管理员帐户的时间</span></li>
<li><span>您是开发人员，您的客户需要您在不知道任何管理员帐户的情况下登录后端</span></li>
<li><span>您需要在短时间内创建多个管理员帐户<br /><br /></span></li>
</ul>
<p>如何在 Magento 2 中通过命令行创建管理员用户？ 获得服务器访问权限后，转到 Magento 管理根文件夹：</p>
<p><span>例如，现在我们将使用以下信息创建一个管理员帐户：</span></p>
<ul>
<li>User: 360magento</li>
<li>Password:&nbsp;<span>WeLoveMagento123</span></li>
<li>Email:&nbsp;hi@360magento.com</li>
<li>First Name:&nbsp;360magento</li>
<li>Last Name: Family</li>
</ul>
<p>所以这里是命令行：</p>
<pre class="highlight"><code>php bin/magento admin:user:create --admin-user=360magento --admin-password=<span>WeLoveMagento123</span> --admin-email=hi@360magento.com --admin-firstname=360magento --admin-lastname=Family<br /><br /><span>现在，我们成功创建了一个新的管理员帐户。</span><span>系统返回此消息：</span><br /></code></pre>
<pre class="highlight"><code>Created Magento administrator user named 360magento</code></pre>
<pre class="highlight"><code><br /><br /></code></pre>]]></description>
      <pubDate>Tue, 09 Aug 2022 01:59:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中添加/删除静态文件 JS、CSS、字体]]></title>
      <link>https://www.360magento.com/blog/add-remove-static-files-js-css-fonts-magento-2/</link>
      <description><![CDATA[<p>在今天的文章中，我将指导您如何在 Magento 2 中添加和删除静态文件，包括 JS、CSS 和字体。通过这个易于理解的教程，可以轻松添加或删除静态文件 JS、CSS、字体。</p>
<p><strong>添加静态文件</strong></p>
<p>通常，如果您想在 Magento 2 中使用外部库来自定义页面，您需要添加 JavaScript 和 CSS 文件。JavaScript、CSS 和其他静态文件将添加到页面配置文件的 &lt;head&gt; 部分。<br />在页面配置文件中，该&lt;head&gt;部分包括各种静态资源，例如 JavaScript、CSS。该文件定义了 Magento 商店页面</p>
<p>app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml中该部分的原始外观。&lt;head&gt;</p>
<p>要添加 CSS 和 JavaScript，建议您在自定义主题中扩展文件，然后在其中添加文件。<br />以下是必须添加的文件示例：</p>
<p><br />&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;<br /> &lt;head&gt;<br /> &lt;!-- Add local resources --&gt;<br /> &lt;css src="css/my-styles.css"/&gt;<br /> &lt;!-- The following two ways to add local JavaScript files are equal --&gt;<br /> &lt;script src="Magento_Catalog::js/sample1.js"/&gt;<br /> &lt;link src="js/sample.js"/&gt;<br /> &lt;!-- Add external resources --&gt;<br /> &lt;css src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" src_type="url" /&gt;<br /> &lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" /&gt;<br /> &lt;link rel="stylesheet" type="text/css" src="http://fonts.googleapis.com/css?family=Montserrat" src_type="url" /&gt;<br /> &lt;/head&gt;<br />&lt;/page&gt;</p>
<p>添加外部资源时，您必须指定src_type="url"参数值。<br />指令&lt;link src="js/sample.js"/&gt;可&lt;script src="js/sample.js"/&gt;用于将本地存储的 JavaScript 文件添加到您的主题中。</p>
<p><strong>删除静态文件</strong></p>
<p>对于要删除的页面中链接的静态资产&lt;head&gt;，您可以在扩展主题中进行更改，app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml如下所示：</p>
<p>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;<br /> &lt;head&gt;<br /> &lt;!-- Remove local resources --&gt;<br /> &lt;remove src="css/styles-m.css" /&gt;<br /> &lt;remove src="my-js.js"/&gt;<br /> &lt;remove src="Magento_Catalog::js/compare.js" /&gt;<br /> &lt;!-- Remove external resources --&gt;<br /> &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"/&gt;<br /> &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"/&gt;<br /> &lt;remove src="http://fonts.googleapis.com/css?family=Montserrat" /&gt;<br /> &lt;/head&gt;<br />&lt;/page&gt;</p>
<p>需要记住，如果您在初始布局中添加或删除具有模块路径的静态资产，则需要指定模块路径，例如Magento_Catalog::js/sample.js</p>
<div id="gtx-trans" style="position: absolute; left: -24px; top: 461px;">
<div class="gtx-trans-icon"></div>
</div>]]></description>
      <pubDate>Mon, 08 Aug 2022 06:19:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2 以编程方式添加 URL 重写]]></title>
      <link>https://www.360magento.com/blog/magento-2-url-rewrite-programmatically/</link>
      <description><![CDATA[<p>Magento 2 URL 以编程方式重写是在线零售商想要创建大量网站流量的绝佳解决方案之一。重写 url 的目的是允许您通过编程方式生成 301 重定向到Magento 2 。</p>
<h2 class="active" id="what-is-url-redirect"><span>什么是 URL 重定向？</span></h2>
<p><a href="https://en.wikipedia.org/wiki/URL_redirection" rel="nofollow" target="_blank">URL 重定向</a><span>是</span><a href="https://www.mageplaza.com/kb/how-to-configure-seo-in-magento-2.html">SEO</a><span><span>中的一个流行术语，它用于将访问者导航到商店所有者期望的任何链接。</span><span>重定向主要有两种类型：</span></span><a href="https://www.mageplaza.com/blog/magento-2-redirect-301-302.html">301 重定向和 302 重定向</a><span><span>。</span><span>因此，如果您想知道如何继续与当前站点的现有访问者合作，同时您计划构建一个更高效的新站点，最好的答案是通过重定向 301 创建搜索重定向。</span></span></p>
<p>在 Magento 中以编程方式添加 URL 的 2 个步骤<br />第 1 步：生成构造函数文件</p>
<pre class="highlight"><code>/**<span></span>
* @var \Magento\UrlRewrite\Model\UrlRewriteFactory<span></span>
*/<span></span>
protected $_urlRewriteFactory;<span></span>
<span></span>
/**<span></span>
* @param Context $context<span></span>
* @param \Magento\UrlRewrite\Model\UrlRewriteFactory $urlRewriteFactory<span></span>
*/<span></span>
public function __construct(<span></span>
    Context $context,<span></span>
    \Magento\UrlRewrite\Model\UrlRewriteFactory $urlRewriteFactory<span></span>
) {<span></span>
    $this-&gt;_urlRewriteFactory = $urlRewriteFactory;<span></span>
    parent::__construct(<span></span>
        $context<span></span>
    );<span></span>
}</code></pre>
<p><br />第 2 步：在执行方法中插入自定义 URL 重写</p>
<p>仅当您的原始网站是example.com/customModule/customController/customAction时，您才希望将URL重写为，www.example.com/xyz而不是。然后您可以运行以下方法：</p>
<p></p>
<pre class="highlight"><code>$urlRewriteModel = $this-&gt;_urlRewriteFactory-&gt;create()<span></span>
/* set current store id */<span></span>
$urlRewriteModel-&gt;setStoreId(1);<span></span>
/* this url is not created by system so set as 0 */<span></span>
$urlRewriteModel-&gt;setIsSystem(0);<span></span>
/* unique identifier - set random unique value to id path */<span></span>
$urlRewriteModel-&gt;setIdPath(rand(1, 100000));<span></span>
/* set actual url path to target path field */<span></span>
$urlRewriteModel-&gt;setTargetPath("www.example.com/customModule/customController/customAction");<span></span>
/* set requested path which you want to create */<span></span>
$urlRewriteModel-&gt;setRequestPath("www.example.com/xyz");<span></span>
/* set current store id */<span></span>
$urlRewriteModel-&gt;save();</code></pre>]]></description>
      <pubDate>Fri, 05 Aug 2022 07:16:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中更改样本图像大小]]></title>
      <link>https://www.360magento.com/blog/magento-2-change-swatch-image-size/</link>
      <description><![CDATA[<p><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><img alt="如何在 Magento-2 中更改色板图像大小" height="374" src="https://www.360magento.com/media/wysiwyg/blog_84/How-to-Change-Swatch-Image-Size-in-Magento-2-1.png" title="如何在 Magento-2 中更改色板图像大小" width="950" /></span></span></span></span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Magento 2 中的样本是向客户提供产品变化的功能。</span></span></span></span></span></span></p>
<p><span></span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Magento 2 可配置产品</span></span></span></span></span></span></span><span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">显示</span></span></span></span></span></span></span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp;在前端并带有样本，使客户可以轻松地从可用选项中进行选择。</span></span></span></span></span></span></span></span></p>
<p><span><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">默认的 Magento 2 色板类型是文本、颜色和图像色板，使产品描述更具洞察力并促进转换过程。</span></span></span></span></span></span></span></span></span><span><br /></span></span></p>
<p><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">现在，如果您想根据主题</span></span></span><em><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">更改 Magento 2 商店中的样本图像大小</span></span></span></em><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">，您可以使用以下代码进行操作。</span></span></span></p>
<p><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">调整图像样本大小，让访问者更好地了解产品变化并鼓励销售！</span></span></span></p>
<p><span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">以下是默认样本图像的外观</span></span></span></p>
<p><span><img alt="默认样本图像大小在 Magento-2" height="361" src="https://www.360magento.com/media/wysiwyg/blog_84/default-swatch-image-size-in-Magento-2.jpg" title="默认样本图像大小在 Magento-2" width="819" /></span></p>
<p></p>
<h2><span>在 Magento 2 中更改样本图像大小的方法：</span></h2>
<p><span>如果您在本地安装了带有 Luma 主题的 Magento 2 并希望更改样本图像的大小：</span></p>
<p><span>打开</span><em><span>vendor\magento\module-swatches\etc\view.xml</span></em></p>
<p><span>替换以下代码：</span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;image id="swatch_image" type="swatch_image"&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;width&gt;30&lt;/width&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;height&gt;20&lt;/height&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;/image&gt;</span></span></span></span></span></span></p>
<p><span>和</span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;image id="swatch_image" type="swatch_image"&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;width&gt;210&lt;/width&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;height&gt;210&lt;/height&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;/image&gt;</span></span></span></span></span></span></p>
<p><span>如果您安装了主题，请打开</span><em><span>app/design/frontend/[theme]/etc/view.xml</span></em><span>文件并搜索&ldquo;swatch_image&rdquo;</span></p>
<p><span>如果可用，则更改代码：</span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;image id="swatch_image" type="swatch_image"&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;width&gt;210&lt;/width&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;height&gt;210&lt;/height&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;/image&gt;</span></span></span></span></span></span></p>
<p><span>如果没有找到，请</span>将以下行放入媒体标签</p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;images module="Magento_Catalog"&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;image id="swatch_image" type="swatch_image"&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;width&gt;210&lt;/width&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;height&gt;210&lt;/height&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp; &nbsp; &lt;/image&gt; </span></span></span></span></span></span><br /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&lt;/images&gt;</span></span></span></span></span></span></p>
<p><span>完成后，您可以检查更新的图像样本，如下所示：</span></p>
<p><span><img alt="更改图像样本大小在 Magento-2" height="361" src="https://www.360magento.com/media/wysiwyg/blog_84/changed-image-swatch-size-in-Magento-2.jpg" title="更改图像样本大小在 Magento-2" width="819" /></span></p>
<p><span><span>如果对解决方案有任何疑问，请联系我们，我们很乐意提供帮助。</span></span></p>
<p><span>谢谢。</span></p>]]></description>
      <pubDate>Thu, 04 Aug 2022 07:28:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在 Magento 2 中备份数据库/回滚、媒体、代码]]></title>
      <link>https://www.360magento.com/blog/magento-2-backup-database-media-code/</link>
      <description><![CDATA[<p><span><span>运行在线商店时最重要的事情之一就是正确备份所有内容，以便如果出现问题，您可以回滚或恢复它。</span><span>因此，备份商店中最重要的数据非常重要。</span><span>备份文件后，您可以恢复或回滚它。</span><span>在这个过程中很容易出错，因为系统会在恢复之前删除特定的文件和数据库。</span></span></p>
<p><span><span>我们将讨论如何</span><span>在</span><a href="https://www.mageplaza.com/devdocs/magento-2-command-line-interface-cli.html"><span>命令行系列</span></a></span><span>中备份/回滚数据库、媒体、代码</span><span><span>。</span><span>如您所知，从 Magento 2 开始，他们在</span><span>.&nbsp;</span><span>这可能很难解决，让我解释一下有关</span><span><span>如何备份/回滚数据库、媒体、代码的</span></span><span>更多细节。</span></span><a href="https://www.mageplaza.com/devdocs/magento-2-command-line-interface-cli.html"><span></span></a><span></span><code class="language-plaintext highlighter-rouge">bin/magento</code><span></span><span><span></span></span><span></span></p>
<p><span>&nbsp;</span></p>
<h2 class="active" id="how-to-backup--rollback-db-media-code-command-line"><span>如何备份/回滚数据库、媒体、代码命令行</span></h2>
<p><span><span>转到 Magento 程序根文件夹执行命令：</span></span></p>
<h2 class="active" id="list-all-existed-backup-files"><span>查看所有已存在的备份文件</span></h2>
<pre class="highlight"><code>php bin/magento info:backups:list<br /></code><br /><span></span></pre>
<h2 class="active" id="backup-database"><span>备份数据库</span></h2>
<p><span><span>在过程开始时，它将进入</span><a href="https://www.mageplaza.com/devdocs/magento-2-maintaince-mode.html">维护模式</a><span>，并开始备份然后存储到</span><code class="language-plaintext highlighter-rouge">./var/backups/</code><span><span>文件夹。</span><span>之后，它将再次禁用维护模式。</span></span></span></p>
<pre class="highlight"><code>php bin/magento setup:backup --db</code><br /><br /><br /></pre>
<h2 class="active" id="backup-media"><span>备份媒体</span></h2>
<pre class="highlight"><code>php bin/magento setup:backup --media</code><br /><br /><br /></pre>
<h2 class="active" id="backup-code"><span>备用代码</span></h2>
<pre class="highlight"><code>php bin/magento setup:backup --code</code><br /><br /><br /></pre>
<h2 class="active" id="how-to-rollback-database-media-code"><span>如何回滚数据库、媒体、代码</span></h2>
<p><span>回滚数据库：</span></p>
<pre class="highlight"><code>php bin/magento setup:rollback --db-file=1534245793_db.sql<br /><br /></code></pre>
<p>备注：<span>所有备份文件都必须放在</span><code class="language-plaintext highlighter-rouge">./var/backups/</code><span>文件夹中</span></p>
<pre class="highlight"><br /><br /></pre>]]></description>
      <pubDate>Tue, 02 Aug 2022 09:14:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2常用全部命令]]></title>
      <link>https://www.360magento.com/blog/magento-2-cli-ssh-commands/</link>
      <description><![CDATA[<p>
如果您刚刚开始使用 Magento 2  或已经使用它很久了，您必须了解这些有用的SSH 命令，它们将帮助您轻松完成某些任务。 
</p>
<p>
当您必须清理缓存、启用 – 禁用缓存、运行 cron、数据索引和各种其他任务时，Magento SSH 命令会非常方便。要运行这些 SSH 命令，您需要具有对服务器的 SSH 访问权限，或者您可以使用命令行进行本地访问。 
</p>
<p>
因此，为了节省您最宝贵的时间 – 我们建议所有开发人员和感兴趣的人将此帖子加入书签收藏。这是 Magento2 的所有有用 SSH 命令的汇总。 
</p>

<table><tbody><tr><td><b>命令说明 &nbsp;</b></td><td><b>命令</b></td><td><b>短命令</b></td></tr><tr><td><span style="font-weight: 400;">显示命令帮助</span></td><td><b>php bin/magento help (command)</b></td><td><b>php bin/magento h</b></td></tr><tr><td><span style="font-weight: 400;">检查所有命令的列表 –</span><p></p><p><span style="font-weight: 400;">这将有助于列出 Magento2 的所有命令</span></p></td><td><b>php bin/magento list</b></td><td><b>php bin/magento</b></td></tr><tr><td><span style="font-weight: 400;">清理缓存</span></td><td><b>php bin/magento cache:clean</b></td><td><b>php bin/magento c:c</b></td></tr><tr><td><span style="font-weight: 400;">禁用缓存</span></td><td><b>php bin/magento cache:disable</b></td><td><b>php bin/magento c:d</b></td></tr><tr><td><span style="font-weight: 400;">启用缓存&nbsp;</span></td><td><b>php bin/magento cache:enable</b></td><td><b>php bin/magento c:e</b></td></tr><tr><td><span style="font-weight: 400;">刷新缓存</span></td><td><b>php bin/magento cache:flush</b></td><td><b>php bin/magento c:f</b></td></tr><tr><td><span style="font-weight: 400;">检查缓存的状态</span></td><td><b>php bin/magento cache:status</b></td><td><b>php bin/magento c:s</b></td></tr><tr><td><span style="font-weight: 400;">创建管理员账户&nbsp;</span></td><td><b>php bin/magento admin:user:create</b></td><td><b>php bin/magento a:u:c</b></td></tr><tr><td><span style="font-weight: 400;">解锁管理员帐户</span></td><td><b>php bin/magento admin:user:unlock</b></td><td><b>php bin/magento a:u:u</b></td></tr><tr><td><span style="font-weight: 400;">创建应用程序的转储&nbsp;</span></td><td><b>php bin/magento app:config:dump</b></td><td></td></tr><tr><td><span style="font-weight: 400;">将数据从共享文件导入到适当的数据存储e</span></td><td><b>php bin/magento app:config:import</b></td><td></td></tr><tr><td><span style="font-weight: 400;">调整图像大小&nbsp;</span></td><td><b>php bin/magento catalog:images:resize</b></td><td><b>php bin/magento c:i:r</b></td></tr><tr><td><span style="font-weight: 400;">删除未使用的产品属性&nbsp;</span></td><td><b>php bin/magento catalog:product:attribute:cleanup&nbsp;</b></td><td><b>php bin/magento c:p:a:c</b></td></tr><tr><td><span style="font-weight: 400;">设置sensitive配置值</span></td><td><b>php bin/magento config:sensitive:set</b></td><td></td></tr><tr><td><span style="font-weight: 400;">更改系统配置</span></td><td><b>php bin/magento config:set</b></td><td></td></tr><tr><td><span style="font-weight: 400;">显示给定路径的配置值。如果未指定路径，则将显示所有值</span></td><td><b>php bin/magento config:show</b></td><td></td></tr><tr><td><span style="font-weight: 400;">为当前用户生成并安装 crontab</span></td><td><b>php bin/magento cron:install</b></td><td></td></tr><tr><td><span style="font-weight: 400;">从 crontab 中删除任务&nbsp;</span></td><td><b>php bin/magento cron:remove</b></td><td></td></tr><tr><td><span style="font-weight: 400;">按计划运行cron jobs</span></td><td><b>php bin/magento cron:run</b></td><td><b>php bin/magento c:r</b></td></tr><tr><td><span style="font-weight: 400;">根据最新算法升级客户的哈希值</span></td><td><b>php bin/magento customer:hash:upgrade</b></td><td><b>php bin/magento c:h:u</b></td></tr><tr><td><span style="font-weight: 400;">设置应用模式</span></td><td><b>php bin/magento deploy:mode:set</b></td><td><b>php bin/magento d:m:set</b></td></tr><tr><td><span style="font-weight: 400;">显示当前应用模式</span></td><td><b>php bin/magento deploy:mode:show</b></td><td><b>php bin/magento d:m:sho</b></td></tr><tr><td><span style="font-weight: 400;">获取命令的依赖注入配置信息</span></td><td><b>php bin/magento dev:di:info</b></td><td></td></tr><tr><td><span style="font-weight: 400;">禁用数据库查询日志记录g</span></td><td><b>php bin/magento dev:query-log:disable</b></td><td></td></tr><tr><td><span style="font-weight: 400;">启用数据库查询日志记录</span></td><td><b>php bin/magento dev:query-log:enable</b></td><td></td></tr><tr><td><span style="font-weight: 400;">收集和发布主题的源文件。</span></td><td><b>php bin/magento dev:source-theme:deploy</b></td><td><b>php bin/magento d:s:d</b></td></tr><tr><td><span style="font-weight: 400;">禁用前端模板提示。需要缓存刷新。</span></td><td><b>php bin/magento dev:template-hints:disable</b></td><td></td></tr><tr><td><span style="font-weight: 400;">启用前端模板提示。需要缓存刷新。</span></td><td><b>php bin/magento dev:template-hints:enable</b></td><td></td></tr><tr><td><span style="font-weight: 400;">运行测试</span></td><td><b>php bin/magento dev:tests:run</b></td><td><b>php bin/magento d:t:r</b></td></tr><tr><td><span style="font-weight: 400;">生成 URN 到 *.xsd 映射的目录，以便 IDE 突出显示 xml。</span></td><td><b>php bin/magento dev:urn-catalog:generate</b></td><td><b>php bin/magento d:u:g</b></td></tr><tr><td><span style="font-weight: 400;">使用 XSL 样式表转换 XML 文件</span></td><td><b>php bin/magento dev:xml:convert</b></td><td><b>php bin/magento d:x:c</b></td></tr><tr><td><span style="font-weight: 400;">显示允许的索引器</span></td><td><b>php bin/magento indexer:info</b></td><td><b>php bin/magento i:i</b></td></tr><tr><td><span style="font-weight: 400;">重新索引数据</span></td><td><b>php bin/magento indexer:reindex</b></td><td><b>php bin/magento i:rei</b></td></tr><tr><td><span style="font-weight: 400;">将索引器状态重置为无效</span></td><td><b>php bin/magento indexer:reset</b></td><td><b>php bin/magento i:res</b></td></tr><tr><td><span style="font-weight: 400;">设置索引模式类型</span></td><td><b>php bin/magento indexer:set-mode</b></td><td><b>php bin/magento i:set</b></td></tr><tr><td><span style="font-weight: 400;">显示索引模式</span></td><td><b>php bin/magento indexer:show-mode</b></td><td><b>php bin/magento i:sho</b></td></tr><tr><td><span style="font-weight: 400;">显示索引器的状态</span></td><td><b>php bin/magento indexer:status</b></td><td><b>php bin/magento i:sta</b></td></tr><tr><td><span style="font-weight: 400;">发现代码库中的短语</span></td><td><b>php bin/magento i18n:collect-phrases</b></td><td><b>php bin/magento i1:c</b></td></tr><tr><td><span style="font-weight: 400;">保存语言包</span></td><td><b>php bin/magento i18n:pack</b></td><td><b>php bin/magento i1:p</b></td></tr><tr><td><span style="font-weight: 400;">卸载语言包</span></td><td><b>php bin/magento i18n:uninstall</b></td><td><b>php bin/magento i1:u</b></td></tr><tr><td><span style="font-weight: 400;">显示 Magento 管理 URI</span></td><td><b>php bin/magento info:adminuri</b></td><td><b>php bin/magento i:a</b></td></tr><tr><td><span style="font-weight: 400;">打印可用备份文件列表</span></td><td><b>php bin/magento info:backups:list</b></td><td><b>php bin/magento i:b:l</b></td></tr><tr><td><span style="font-weight: 400;">显示可用货币列表</span></td><td><b>php bin/magento info:currency:list</b></td><td><b>php bin/magento i:c:l</b></td></tr><tr><td><span style="font-weight: 400;">显示对 Magento 框架的依赖数量</span></td><td><b>php bin/magento info:dependencies:show-framework</b></td><td><b>php bin/magento i:d:show-f</b></td></tr><tr><td><span style="font-weight: 400;">显示模块之间的依赖关系数</span></td><td><b>php bin/magento info:dependencies:show-modules</b></td><td></td></tr><tr><td><span style="font-weight: 400;">显示模块之间循环依赖的数量</span></td><td><b>php bin/magento info:dependencies:show-modules-circular</b></td><td></td></tr><tr><td><span style="font-weight: 400;">显示可用语言区域列表</span></td><td><b>php bin/magento info:language:list</b></td><td><b>php bin/magento i:l:l</b></td></tr><tr><td><span style="font-weight: 400;">显示可用时区列表</span></td><td><b>php bin/magento info:timezone:list</b></td><td><b>php bin/magento i:t:l</b></td></tr><tr><td><span style="font-weight: 400;">设置维护模式允许IP</span></td><td><b>php bin/magento maintenance:allow-ips</b></td><td><b>php bin/magento m:a</b></td></tr><tr><td><span style="font-weight: 400;">禁用维护模式</span></td><td><b>php bin/magento maintenance:disable</b></td><td><b>php bin/magento ma:d</b></td></tr><tr><td><span style="font-weight: 400;">启用维护模式</span></td><td><b>php bin/magento maintenance:enable</b></td><td><b>php bin/magento ma:e</b></td></tr><tr><td><span style="font-weight: 400;">显示维护模式状态</span></td><td><b>php bin/magento maintenance:status</b></td><td><b>php bin/magento ma:s</b></td></tr><tr><td><span style="font-weight: 400;">禁用指定模块</span></td><td><b>php bin/magento module:disable</b></td><td><b>php bin/magento mo:d</b></td></tr><tr><td><span style="font-weight: 400;">启用指定模块</span></td><td><b>php bin/magento module:enable</b></td><td><b>php bin/magento mo:e</b></td></tr><tr><td><span style="font-weight: 400;">显示模块状态</span></td><td><b>php bin/magento module:status</b></td><td><b>php bin/magento mo:s</b></td></tr><tr><td><span style="font-weight: 400;">卸载由 composer 安装的模块</span></td><td><b>php bin/magento module:uninstall</b></td><td><b>php bin/magento m:u</b></td></tr><tr><td><span style="font-weight: 400;">部署示例数据模块</span></td><td><b>php bin/magento sampledata:deploy</b></td><td><b>php bin/magento sa:d</b></td></tr><tr><td><span style="font-weight: 400;">从 composer.json 中删除所有示例数据包</span></td><td><b>php bin/magento sampledata:remove</b></td><td><b>php bin/magento sa:rem</b></td></tr><tr><td><span style="font-weight: 400;">重置所有示例数据模块以重新安装</span></td><td><b>php bin/magento sampledata:reset</b></td><td><b>php bin/magento sa:res</b></td></tr><tr><td><span style="font-weight: 400;">备份 Magento 应用程序代码库、媒体和数据库</span></td><td><b>php bin/magento setup:backup</b></td><td><b>php bin/magento s:b</b></td></tr><tr><td><span style="font-weight: 400;">创建或修改部署配置	</span></td><td><b>php bin/magento setup:config:set</b></td><td><b>php bin/magento s:c:s</b></td></tr><tr><td><span style="font-weight: 400;">运行为安装应用程序安排的 cron job</span></td><td><b>php bin/magento setup:cron:run</b></td><td><b>php bin/magento s:c:r</b></td></tr><tr><td><span style="font-weight: 400;">安装和升级数据库中的数据</span></td><td><b>php bin/magento setup:db-data:upgrade</b></td><td><b>php bin/magento s:db-d:u</b></td></tr><tr><td><span style="font-weight: 400;">安装和升级数据库架构</span></td><td><b>php bin/magento setup:db-schema:upgrade</b></td><td><b>php bin/magento s:db-s:u</b></td></tr><tr><td><span style="font-weight: 400;">检查数据库架构或数据是否需要升级</span></td><td><b>php bin/magento setup:db:status</b></td><td><b>php bin/magento s:d:s</b></td></tr><tr><td><span style="font-weight: 400;">生成可自动生成的 DI 配置和所有缺失的类</span></td><td><b>php bin/magento setup:di:compile</b></td><td><b>php bin/magento s:d:c</b></td></tr><tr><td><span style="font-weight: 400;">安装 Magento 应用程序</span></td><td><b>php bin/magento setup:install</b></td><td><b>php bin/magento s:i</b></td></tr><tr><td><span style="font-weight: 400;">生成夹具</span></td><td><b>php bin/magento setup:performance:generate-fixtures</b></td><td><b>php bin/magento s:p:g</b></td></tr><tr><td><span style="font-weight: 400;">回滚 Magento 应用程序代码库、媒体和数据库</span></td><td><b>php bin/magento setup:rollback</b></td><td><b>php bin/magento se:r</b></td></tr><tr><td><span style="font-weight: 400;">部署静态视图文件</span></td><td><b>php bin/magento setup:static-content:deploy</b></td><td><b>php bin/magento s:s:d</b></td></tr><tr><td><span style="font-weight: 400;">安装商店配置。自 2.2.0 起已弃用。使用 config:set 代替</span></td><td><b>php bin/magento setup:store-config:set</b></td><td><b>php bin/magento s:s:s</b></td></tr><tr><td><span style="font-weight: 400;">卸载 Magento 应用程序</span></td><td><b>php bin/magento setup:uninstall</b></td><td><b>php bin/magento s:un</b></td></tr><tr><td><span style="font-weight: 400;">升级 Magento 应用程序、数据库数据和架构</span></td><td><b>php bin/magento setup:upgrade</b></td><td><b>php bin/magento s:up</b></td></tr><tr><td><span style="font-weight: 400;">显示商店列表</span></td><td><b>php bin/magento store:list</b></td><td></td></tr><tr><td><span style="font-weight: 400;">显示网站列表</span></td><td><b>php bin/magento store:website:list</b></td><td></td></tr><tr><td><span style="font-weight: 400;">卸载主题</span></td><td><b>php bin/magento theme:uninstall</b></td><td><b>php bin/magento t:u</b></td></tr><tr><td><span style="font-weight: 400;">生成Varnish VCL 并将其回显到命令行</span></td><td><b>php bin/magento varnish:vcl:generate</b></td><td></td></tr></tbody></table>
<p>要了解有关命令的更多信息，您可以查看<a href="https://devdocs.magento.com/guides/v2.4/config-guide/cli/config-cli-subcommands.html" rel="noopener noreferrer nofollow">Magento的官方指南</a>。我们希望这将帮助您节省更多时间，以便您可以更加专注于您的工作。</p>
<style>
table, table td, table th {
    border: 1px solid #ddd;
    padding: 8px;
    text-align: center;
    vertical-align: middle;
}
blockquote, hr, pre, table {
    margin-top: 8px;
    margin-bottom: 24px;
}
</style>]]></description>
      <pubDate>Mon, 19 Jul 2021 07:32:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2下载-开源版本]]></title>
      <link>https://www.360magento.com/blog/magento-2-download-all/</link>
      <description><![CDATA[<p><span style="font-weight: 400;">要使用Magento 2，用户必须在官方网站资源上下载Magento 2。但是需要登录或注册新帐户，Magento 2下载变得麻烦或花费大量时间。&nbsp;</span></p>
<p><span style="font-weight: 400;">因此，我们想向您介绍一种更简单，更快速的下载Magento 2的方法。</span></p>
<p><span style="font-weight: 400;">您可以直接在本文中下载Magento 2，而无需经历冗长而复杂的步骤。更重要的是，当Magento正式投放市场时，360Magento将尽我们最大的努力不断更新并为您提供最新版本。</span></p>
<p>让我们立即开始Magento免费下载！</p>
<h3><strong>带有示例数据和没有示例数据的Magento 2下载</strong></h3>
<p><span style="font-weight: 400;">下载Magento 2 zip包，您可以选择2个选项：带有示例数据下载和不带示例数据下载。那么您应该下载哪一个呢？我们将详细解释如下：</span></p>
<p><span style="font-weight: 400;">对于带有示例数据的Magento zip下载，您将拥有一个完整的店铺以及产品，类别和其他数据。该店铺提供Luma主题以及默认的Magento 2网站的所有完整功能。</span></p>
<p><span style="font-weight: 400;">因此，将Magento 2与示例数据一起使用将帮助您体验默认网站，并详细了解Magento管理员以及前端中的配置如何执行。 </span></p>
<p><span style="font-weight: 400;">如果是不带示例数据的Magento zip下载，那么的店铺就没有任何体验数据，只是一个网站框架。 </span></p>
<p><span style="font-weight: 400;"><strong>*注意</strong>：我们将以.zip格式提供文件，该文件易于处理Magento下载文件。</span></p>
<blockquote>
<p><strong></strong> 在免费下载Magento之前，请先<strong>检查</strong><a href="https://latest-m2.360magento.com/" rel="noopener noreferrer" target="_blank">Magento 2演示</a>以进行检查。</p>
</blockquote>
<h3><span style="font-weight: 400;"><strong>Magento 2</strong></span><span style="font-weight: 400;"><strong>下载</strong></span><span style="font-weight: 400;"><strong>最新版本&ndash; v2.4.x</strong></span></h3>
<p><span style="font-weight: 400;">Magento开源2.4.2包含280多个核心代码修复，35个安全增强功能以​​及社区成员解决的约290个GitHub问题。安全性增强包括扩展了对所有cookie的`SameSite`属性的支持。现在支持Elasticsearch 7.9.x和Redis6.x。</span></p>
<table><colgroup> <col width="15%" /> <col width="15%" /> <col width="15%" /> <col width="55%" /> </colgroup>
<tbody>
<tr>
<td><strong>Magento 2.4.x</strong></td>
<td><strong>无样本数据</strong></td>
<td><strong>带有样本数据</strong></td>
<td><strong>Magento 2版本的主要特点</strong></td>
</tr>
<tr>
<td><strong>Magento 2.4.2-p1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.2-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.2-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>补丁 2.4.2-p1 是一个仅限安全的补丁，它为我们之前的季度版本 Magento 2.4.2 中发现的漏洞提供修复，以及应用于该版本的热修复。商家可以安装这些对时间敏感的安全修复程序，使他们的站点与最新的安全修复程序保持同步，而无需应用完整的季度版本提供的数百个功能修复程序和增强功能。在应用此补丁之前，您必须部署 Magento 2.4.2。</td>
</tr>
<tr>
<td><strong>Magento 2.4.2</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento开源2.4.2包含280多个核心代码修复，35个安全增强功能以​​及社区成员解决的约290个GitHub问题。安全性增强包括扩展了对所有cookie的`SameSite`属性的支持。现在支持Elasticsearch 7.9.x和Redis6.x。</td>
</tr>
<tr>
<td><strong>Magento 2.4.1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento开源2.4.1包含130多个核心代码修复，15个安全增强功能以​​及我们社区成员解决的大约300个GitHub问题。它引入了对性能和安全性的增强。安全性增强包括对Cookie的SameSite属性的支持以及对与付款相关和与订单相关的API端点的CAPTCHA保护。</td>
</tr>
<tr>
<td><strong>Magento 2.4.0-p1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.0-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>补丁2.4.0-p1是仅用于安全性的补丁，它提供了针对我们先前的季度版本Magento 2.4.0中已发现的漏洞的修复程序，以及应用于该版本的热修复程序。商家可以安装这些对时间敏感的安全修补程序，以使其站点与最新的安全修补程序保持最新，而无需应用整个季度版本（Magento 2.4.1）提供的数百个功能修补程序和增强功能。</td>
</tr>
<tr>
<td><strong>Magento 2.4.0</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.4.0包含100多个核心代码修复，30个安全增强功能以​​及我们社区成员解决的226个GitHub问题。它引入了对PHP 7.4，Elasticsearch 7.6.x和MySQL 8.0的支持。Authorize.Net和Braintree付款方式集成已从核心代码中删除。重大的安全更改包括默认情况下在Admin中启用两因素身份验证。</td>
</tr>
<tr>
<td><strong>Magento 2.4.0</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.4.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.4.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.4.0包含100多个核心代码修复，30个安全增强功能以​​及我们社区成员解决的226个GitHub问题。它引入了对PHP 7.4，Elasticsearch 7.6.x和MySQL 8.0的支持。Authorize.Net和Braintree付款方式集成已从核心代码中删除。重大的安全更改包括默认情况下在Admin中启用两因素身份验证。</td>
</tr>
<tr></tr>
</tbody>
</table>
<h3><strong>Magento 2下载：2.2.x和2.3.x版本 </strong></h3>
<p><span style="font-weight: 400;">Magento 2.3.x是Magento提供的用户的最新Magento 2版本。因此，我们将为您提供有关每个版本的更多详细信息，以便您获得更多的了解并下载Magento2。</span></p>
<table><colgroup> <col width="15%" /> <col width="15%" /> <col width="15%" /> <col width="55%" /> </colgroup>
<tbody>
<tr>
<td><strong>Magento 2.2.x和2.3.x</strong></td>
<td><strong>没有样本数据</strong></td>
<td><strong>带有样本数据</strong></td>
<td><strong>每个Magento 2版本的主要特点</strong></td>
</tr>
<tr>
<td><strong>Magento 2.3.7</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.3.7 包括针对核心产品的重大平台升级、40 项安全增强和 15 项功能修复。它引入了对 PHP 7.4 的支持以及对PHP 7.1和7.2 的弃用。它现在与 Composer 2.x 兼容。现在支持 Elasticsearch 7.9.x 和 Redis 6.x。</td>
</tr>
<tr>
<td><strong>Magento 2.3.6-p1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.6-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.6-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>补丁 2.3.6-p1 是一个仅限安全的补丁，它为我们在上一季度发布的 Magento 2.3.6 中发现的漏洞提供修复，以及应用于该版本的热修复。商家可以安装这些对时间敏感的安全修复程序，使他们的站点与最新的安全修复程序保持同步，而无需应用完整的季度版本提供的数百个功能修复程序和增强功能。
在应用此补丁之前，您必须部署 Magento 2.3.6 并更新到 PHP 7.3。</td>
</tr>
<tr>
<td><strong>Magento 2.3.6</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.3.6包括将近200个对核心代码的修复和15个安全性增强。安全性增强包括对Cookie的SameSite属性的支持以及对与付款相关和与订单相关的API端点的CAPTCHA保护。这是包含功能修复程序的2.3.x产品系列中的最新版本。</td>
</tr>
<tr>
<td><strong>Magento 2.3.5-p2</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.5-p2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>修补程序2.3.5-p2是仅用于安全性的修补程序，它提供了针对我们上一季度版本Magento 2.3.5中已发现的漏洞的修复程序，以及应用于该版本的热修复程序。商家可以安装这些对时间敏感的安全修补程序，以使其站点与最新的安全修补程序保持最新，而无需应用整个季度版本（Magento 2.3.5）提供的数百个功能修补程序和增强功能。</td>
</tr>
<tr>
<td><strong>Magento 2.3.5-p1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.5-p1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento开源2.3.5-p1包含对核心产品的180多个功能修复，25个安全增强功能以​​及社区成员解决的46多个问题。此版本包括对Elasticsearch 7.x的支持，对核心Framework组件的升级以及从Zend框架到Laminas的迁移。</td>
</tr>
<tr>
<td><strong>Magento 2.3.4</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.3.4包括对核心产品的150多个功能修复，32个安全增强功能以​​及社区成员解决的275多个问题。此版本包括框架增强和性能改进。自定义布局更新已被删除，布局更新已被弃用。</td>
</tr>
<tr>
<td><strong>Magento 2.3.3</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.3.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.3.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento2.3.3包含针对核心产品的170多个功能修复和75个安全增强功能。除了PHP 7.2.x，此版本还提供对PHP 7.3.x的支持。它还为核心支付方法引入了PSD2遵从性，以及不遵循PSD2的Cyber​​source和eWay支付模块的弃用。添加了对varnish v6.2.0的支持。</td>
</tr>
<tr>
<td><strong>Magento 2.3.2</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento Open Source 2.3.2包括对核心产品的200多个功能修复，350多个社区提交的拉取请求以及75个关键的安全性增强。商家将赞赏店面页面响应时间的改善。此版本还包括实质性的基础结构改进。</td>
</tr>
<tr>
<td><strong>Magento 2.3.1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td>Magento2.3.1为商户和开发人员提供了重要的新工具，并进行了30多项核心安全改进。商家将赞赏改进的Admin订单创建工作流程。此版本还提供对Elasticsearch 6.0的支持，它是一个新的Authorize.Net扩展，以取代Authorize.Net Direct Post模块，并增强了Progressive Web Apps（PWA）Studio和GraphQL</td>
</tr>
<tr>
<td><strong>Magento 2.3.0</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.3.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.3.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括一些有趣的功能：</span><span style="font-weight: 400;">新的API；&nbsp;</span><span style="font-weight: 400;">渐进式Web应用程序（PWA）；&nbsp;</span><span style="font-weight: 400;">声明式数据库架构；&nbsp;</span><span style="font-weight: 400;">缓存管理访问控制级别（ACL）；&nbsp;</span><span style="font-weight: 400;">多源清单（MSI），&nbsp;</span><span style="font-weight: 400;">页面生成器；&nbsp;</span><span style="font-weight: 400;">Elasticsearch v.5;&nbsp;</span><span style="font-weight: 400;">所见即所得的变化；和&nbsp;</span><span style="font-weight: 400;">Google reCAPTCHA和两因素身份验证</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.7</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.2.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.2.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括</span><span style="font-weight: 400;">对产品安全性的30个关键增强；&nbsp;</span><span style="font-weight: 400;">超过150个核心代码修复和增强功能；以及&nbsp;</span><span style="font-weight: 400;">超过350个社区提交的请求。</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.6</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.2.6.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.2.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括</span><span style="font-weight: 400;">针对目录索引的性能调整增强功能；</span><span style="font-weight: 400;">提高了结帐流程的可靠性和易用性；&nbsp;</span><span style="font-weight: 400;">现在，可配置产品按可见价格按预期排序，&nbsp; </span><span style="font-weight: 400;">Magento不再发送重复的删除请求</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.5</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.2.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.2.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括</span><span style="font-weight: 400;">有关存储XSS，SQL注入和跨站点请求伪造（CSRF）漏洞的增强功能；&nbsp;</span><span style="font-weight: 400;">解决多个网站升级到Magento 2.2.4时的问题；&nbsp;</span><span style="font-weight: 400;">大幅改善索引性能；&nbsp;</span><span style="font-weight: 400;">对我们核心捆绑扩展程序的改进。</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.4</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.2.4.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.2.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括以下许多重要更改：</span><span style="font-weight: 400;">支持新的付款捆绑扩展：Amazon Pay，Vertex，Klarna；&nbsp;</span><span style="font-weight: 400;">增强Magento的运输和dotmailer；&nbsp;</span><span style="font-weight: 400;">改善网站性能，例如通过加载图片来加快购物速度，并</span><span style="font-weight: 400;">优化搜索性能</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.3</strong></td>
<td><a href="https://github.com/magento2-download/magento-2.x/releases/download/2.2.3/Magento-CE-2.2.3.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.2.3/Magento-CE-2.2.3_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括产品安全性增强，支持即将进行的USPS发货更改，版权更新，对Elasticsearch 5.0.x的支持以及对通过Magento Admin进行缓存管理的ACL控制的增强。</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.2</strong></td>
<td><a href="https://github.com/magento2-download/magento-CE-2.2.2/releases/download/2.2.2/Magento-CE-2.2.2.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.2.2-sample/releases/download/2.2.2-sample/Magento-CE-2.2.2_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">带来了一个新的即时购买选项，集成的dotmailer营销自动化软件，Magento Shipping，以及社区中的其他功能修复和增强功能。</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.1</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-CE-2.2.1/releases/download/2.2.1/Magento-CE-2.2.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.2.1-sample/releases/download/2.2.1-sample/Magento-CE-2.2.1_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">增强您的Magento软件的安全性和多项功能修复，并包括集成的Signifyd欺诈保护。</span></td>
</tr>
<tr>
<td><strong>Magento 2.2.0</strong></td>
<td><a href="https://github.com/magento2-download/2.2.0/releases/download/magento2.2.0/Magento-CE-2.2.0.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.2.0/Magento-CE-2.2.0_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="font-weight: 400;">包括许多修补程序和新功能，例如捆绑的扩展，通过改进索引编制和缓存操作以及安全性增强而带来的更好的性能。</span></td>
</tr>
</tbody>
</table>
<h3><span class="ez-toc-section" id="Magento_2_Download_2_1_x_versions"></span><strong style="font-family: Oswald; font-size: 33px;">Magento 2下载：2.1.x版本</strong><span class="ez-toc-section-end"></span></h3>
<table><colgroup> <col width="200px" /> <col width="200px" /> <col width="200px" /> </colgroup>
<tbody>
<tr>
<td><strong>Magento 2.1.x版本</strong></td>
<td><strong>没有样本数据</strong></td>
<td><strong>带有样本数据</strong></td>
</tr>
<tr>
<td><strong>Magento 2.1.14</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.1.14.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.14.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.13</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.13.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.13.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.12</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.12.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.12.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.11</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.11.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.11.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.10</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.10.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.1.10/Magento-CE-2.1.10_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.9</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-CE-2.1.9/releases/download/magento-2.1.9/Magento-CE-2.1.9.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.1.9/Magento-CE-2.1.9_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.8</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-CE-2.1.8/releases/download/2.1.8/Magento-CE-2.1.8.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.1.8/Magento-CE-2.1.8_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.7</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-CE-2.1.7/releases/download/2.1.7/Magento-CE-2.1.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-2.x-sample/releases/download/2.1.7/Magento-CE-2.1.7_sample_data.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.6</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento2-download/magento-CE-2.1.6/releases/download/2.1.6/Magento-CE-2.1.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.5</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.4</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.3</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.3.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.3.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.2</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.1</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><span style="color: #000000;"><strong>Magento 2.1.0</strong></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.1.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.1.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
</tbody>
</table>
<h3><span class="ez-toc-section" id="Magento_2_Download_2_0_x_versions"></span><strong style="font-family: Oswald; font-size: 33px;">Magento 2下载：2.0.x版本</strong><span class="ez-toc-section-end"></span></h3>
<table><colgroup> <col width="200px" /> <col width="200px" /> <col width="200px" /> </colgroup>
<tbody>
<tr>
<td><strong>Magento 2.0.x版本</strong></td>
<td><strong>没有样本数据</strong></td>
<td><strong>带有样本数据</strong></td>
</tr>
<tr>
<td><strong>Magento 2.0.18</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.0.18.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.18.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.17</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.17.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.17.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.16</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.16.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.16.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.15</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.15.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.15.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.14</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.14.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.14.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.13</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.13.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.13.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.12</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.0.12.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.12.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.11</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.0.11.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.11.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.10</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.10.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.10.zip" rel="nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.9</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.9.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.9.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.8</strong></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2/archive/2.0.8.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.8.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.7</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.7.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.7.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.6</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.6.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.6.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.5</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.5.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.5.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.4</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.4.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.4.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.3</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.3.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.3.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.2</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.2.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.2.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.1</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.1.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.1.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
<tr>
<td><strong>Magento 2.0.0</strong></td>
<td><a href="https://github.com/magento/magento2/archive/2.0.0.zip" rel="noopener noreferrer nofollow" target="_blank"><span style="font-weight: 400;"><span style="color: #ff6600;">下载</span></span></a></td>
<td><span style="color: #ff6600;"><a href="https://github.com/magento/magento2-sample-data/archive/2.0.0.zip" rel="noopener noreferrer nofollow" style="color: #ff6600;" target="_blank"><span style="font-weight: 400;">下载</span></a></span></td>
</tr>
</tbody>
</table>
<p>此外，这里有一些非常有用的文章，可帮助您获得有关Magento方面和相关问题的更多知识和理解：下载Magento之后，您必须了解安装Magento 2的要求。</p>
<blockquote>
<p><strong>请查看</strong> <span style="color: #ff6600;"><a href="https://devdocs.magento.com/guides/v2.4/install-gde/system-requirements.html" rel="noopener nofollow noreferrer" style="color: #ff6600;" target="_blank">Magento 2系统要求</a></span>以了解您应该遵循的要求。</p>
</blockquote>
<p>我们希望您喜欢这些Magento免费下载并及时更新您的网站以获得新的和高级的功能。</p>
<p>360Magento是中国领先的Magento定制开发服务商之一。我们拥有经验丰富且经过认证的Magento开发人员，致力于提供高质量的产品和服务，以有效地优化我们的业务。</p>
<p>现在就<span style="color: #ff6600;"><a href="https://www.360magento.com/contacts" rel="noopener noreferrer" style="color: #ff6600;" target="_blank">联系</a></span>，让我们知道您的问题。我们愿意随时为您提供支持。</p>
<style><!--
tbody tr:nth-child(2n+1) td {
    background: rgba(0, 0, 0, 0.03);
}
--></style>]]></description>
      <pubDate>Sun, 20 Dec 2020 02:11:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Paypal在Magento 1下线前的公告]]></title>
      <link>https://www.360magento.com/blog/paypal-magento-1-eol-announcement/</link>
      <description><![CDATA[<p><a href="#paypal-magento-1-eol-announcement"><strong>该公告中提到了什么？</strong></a></p>
<p><a href="#magento-1-eol-consequences"><strong>我们为什么要关心？</strong></a></p>
<p><a href="#Non-PCI-DSS-compliant">1.不符合PCI DSS规定的Magento商家可能被罚款100,000美元</a></p>
<p><a href="#paypal-end-support-magento-1">2. PayPal可能随时终止对Magento 1系统的支持</a></p>
<p><a href="#visa-magento-announcement">3.不仅PayPal向Magento系统发出警告</a></p>
<p><a href="#magento-1-data-breaches">4.数据泄露将损害Magento商家的声誉</a></p>
<p><a href="#magento-1-end-of-life-risks">5.即将来临的更多风险&hellip;&hellip;</a></p>
<p><a href="#magento-2-migration"><strong>不要惊慌。有解决办法！</strong></a></p>
<p><a href="#conclusion"><strong>结尾</strong></a></p>
<h2 id="paypal-magento-1-eol-announcement">该公告中提到了什么？</h2>
<p>最近，许多Magento 1网站的所有者都收到了一封电子邮件，通知他们Magento 1.x平台寿命终止。令人惊讶的是，该电子邮件不是来自Magento，而是来自PayPal。它提醒商家有关Magento 1停止日期，提及其相关风险并建议及时进行Magento 2迁移：</p>
<p><img alt="贝宝将停止支持magento 1" src="https://www.360magento.com/media/wysiwyg/blog_280/will-paypal-stop-supporting-magento-1-667x899.png" /></p>
<p>同时，贝宝（PayPal）指出未迁移到其网站上的Magento 2的后果，并敦促商家采取适当的措施：</p>
<p><img alt="" src="https://www.360magento.com/media/wysiwyg/blog_280/paypal-ends-support-for-magento-1.png" /></p>
<h2 id="magento-1-eol-consequences">我们为什么要关心？</h2>
<p>尽管PayPal没有透露他们是否会停止为Magento商店提供支持，但它的公告强调了Magento 1 终结的威胁，以帮助商家了解他们将要面对的问题以及如何应对。</p>
<h3 class="has-vivid-cyan-blue-color has-text-color" id="Non-PCI-DSS-compliant">1.不符合PCI DSS规定的Magento商家每月可能被罚款100,000美元</h3>
<p>由于Magento 1 的终结，2020年6月之后可能不会再出现针对Magento 1漏洞的安全补丁。因此，商家很可能会脱离PCI DSS合规性。</p>
<p><strong> <em>什么是PCI DSS？</em> </strong></p>
<p>不仅Magento网站，世界上所有允许信用卡付款的电子商务网站都必须符合<a href="https://www.pcisecuritystandards.org/" rel="nofollow">Payment Card Industry Data Security Standards </a>（PCI DSS）的要求。</p>
<p>尽管PCI DSS仅由大型信用卡公司（VISA，Mastercard，Discover和American Express）管理，但无论选择哪种支付服务，都必须遵循其要求，以确保安全地传输，存储和处理持卡人信息。</p>
<p>这些要求一般管理的做法，例如限制对持卡人数据的访问和生成非默认密码，以及诸如防火墙和加密应用之类的。</p>
<p><em><strong>Magento 1系统违反了PCI DSS的哪些要求？</strong></em></p>
<p>按照<a href="https://www.pcisecuritystandards.org/documents/PCI_DSS-QRG-v3_2_1.pdf?agreement=true&amp;time=1587662200387" rel="nofollow"> PCI DSS要求 6</a>，电子商务商店需要&ldquo;通过安装供应商提供的安全补丁来开发和维护安全的系统和应用程序&hellip;&hellip;&rdquo;：</p>
<p><img alt="PCI DSS要求" src="https://www.360magento.com/media/wysiwyg/blog_280/pci-dss-requirements.png" /></p>
<p>从2020年7月起，如果没有重要的安全补丁，Magento 1商家就不可能满足上述要求！</p>
<p><em><strong>如果Magento系统不兼容PCI DSS，会发生什么？</strong></em></p>
<p>忽视PCI DSS合规性并不会带来任何好处。</p>
<p>首先，如果在网站上购物后泄露了客户信息（持卡人数据），Magento商家可能会面临5,000美元至100,000美元的巨额罚款，具体取决于情况的严重性，卡交易的数量以及商店的违规时间。</p>
<p>其次，那些Magento 1网站甚至会失去接受支付卡的能力。</p>
<h3 class="has-vivid-cyan-blue-color has-text-color" id="paypal-end-support-magento-1">2. PayPal可能随时终止对Magento 1网站的支持</h3>
<p>众所周知，贝宝（PayPal）在为客户提供快速安全的方式进行全球在线支付方面处于领先地位。该支付网关默认情况下与Magento平台集成在一起，以允许客户使用其借记卡或信用卡在线支付。因此，现在超过50％的Magento商店都使用PayPal作为其主要的支付网关。</p>
<p><em><strong>如果PayPal终止其对Magento 1商店的服务将有多糟糕？</strong></em></p>
<p>值得注意的是，不仅Magento商家，而且所有支付程序都必须符合PCI DSS。因此，如果在Magento 1终结后PayPal继续对Magento 1网站做出让步，可能会对其声誉造成负面影响。</p>
<p>此外，由于PayPal与Magento紧密合作，它将帮助Magento鼓励平台用户从Magento 1迁移到Magento 2。。</p>
<p><em><strong>由于上述原因，PayPal迟早可能会停止支持Magento 1网站，这可能会带来很多危害：</strong></em></p>
<p>在第一种情况下，假设Magento商店未及时更新PayPal的政策，并且仍在其网站上通过PayPal提供付款方式。由此，购物者无法处理付款并放弃了购物车。</p>
<p>在第二种情况下，假设Magento商家通过另一个支付网关快速替换PayPal；但是，买家没有找到熟悉且可靠的付款方式，于是他们离开了商店。</p>
<h3 class="has-vivid-cyan-blue-color has-text-color" id="visa-magento-announcement">3.不仅贝宝向Magento商店发出警告</h3>
<p>其他信用卡公司也很有可能会撤销Magento 1商店的处理信用卡交易的权利。</p>
<p>最近，<a href="http://usa.visa.com/content/dam/VCOM/global/support-legal/documents/acquirer-advisory-magento-migration.pdf" rel="nofollow">VISA</a>呼吁Magento商家从1迁移到2，或者从Magento迁移到另一个电子商务平台，以保持PCI兼容性。此外，他们指出了剩余的Magento 1平台带来的5种后果：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_280/visa-encourages-magento-migration-1024x432.png" /></p>
<p>当所有支付网关提供商拒绝时，Magento商店如何生存？</p>
<h3 class="has-vivid-cyan-blue-color has-text-color" id="magento-1-data-breaches">4.数据泄露将损害Magento商家的声誉</h3>
<p>除了罚款之外，Magento商店可能还会面临客户数量急剧减少和收入下降的问题。</p>
<p>一些报告显示，近70%的在线购买者将远离与不符合安全标准和数据泄露有关的电子商务。</p>
<p>此外，Magento 1商家在被信息被盗的买家起诉时，应做好更糟糕的准备。另外，他们可能必须通过信用监控或身份盗窃保险来补偿持卡人，这绝对不便宜。</p>
<h3 class="has-vivid-cyan-blue-color has-text-color" id="magento-1-end-of-life-risks">5.即将来临的更多风险&hellip;&hellip;</h3>
<p>Magento 1终结可能导致比想象的还要糟糕的情况。</p>
<p>例如，它为黑客追踪Magento网站中的不安全漏洞创造了有利条件。现在，他们可以窃取客户的信用卡和订单详细信息以及其他机密商业信息。此外，如果黑客成功删除了网站数据，则Magento商店可能会经历漫长的网站停机时间。</p>
<p><img alt="magento 1寿命终止的后果" src="https://www.360magento.com/media/wysiwyg/blog_280/consequences-of-magento-1-end-of-life-1024x614.jpg" /></p>
<p>此外，大多数Magento开发公司现在已将注意力转移到Magento 2开发上。如果网站被黑客入侵，对于Magento商店所有者来说，向这些公司寻求帮助将具有挑战性。换句话说，他们将不得不弄清楚如何自己解决问题。</p>
<h2 id="magento-2-migration">不要惊慌。有解决办法！</h2>
<p>根据PayPal和VISA的建议，Magento商店应尽快开始Magento 2迁移或更改为另一个电子商务平台。</p>
<p>与将网站更改为完全不同的平台相比，更推荐使用Magento的最新版本。本质上，Magento 1和Magento 2的工作方式相似，只是界面和功能得到了改善。</p>
<p>如果您想将Magento 1迁移到2，选择我们的<a href="https://www.360magento.com/magento-migration">Magento 2迁移服务</a>将帮助您以最实惠的价格进行magento迁移。在2020年6月，我们提供了诱人的折扣&ndash;所有Magento 2迁移项目的将优惠10%。立即与我们联系（sales@360magento.com），以获得完善的计划和免费的迁移报价！</p>
<p><img alt="magento 1 下线解决方案" src="https://www.360magento.com/media/wysiwyg/blog_280/magento-1-eol-solution.png" /></p>
<h2 id="conclusion">结尾</h2>
<p>Magento 1 下线是不可避免的。到目前为止，只有PayPal和VISA警告Magento商店注意Magento 1终止支持。但是，可能有许多支付业务公司将关闭这些商店的大门。因此，所有Magento商家都应立即采取行动，从各种危险中解救其商店。</p>
<p><strong>相关文章：</strong></p>
<p><a href="https://www.360magento.com/blog/magento-1-end-of-life/">解答有关Magento 1生命终结（EOL）的所有问题</a></p>
<p><a href="https://www.360magento.com/blog/migrate-magento-1-9-x-to-2-3-x/">如何将Magento 1.9.x迁移到2.3.x</a></p>
<p><a href="https://www.360magento.com/blog/magento-migration-from-1-to-2/">Magento 1迁移到Magento2有什么好处？</a></p>]]></description>
      <pubDate>Thu, 04 Jun 2020 12:55:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[关于Magento1生命终结的话题]]></title>
      <link>https://www.360magento.com/blog/magento-1-end-of-life/</link>
      <description><![CDATA[<p>距Magento 1生命终结之日&ndash;2020年6月30日仅剩1个月的时间。因此，所有现有的Magento 1商店都必须尽快迁移到Magento 2。</p>
<p>在本文中，我们将回答有关Magento 1生命终止的所有问题，并提出如何处理它的建议。</p>
<ol>
<li><a href="#Why-Is-Magento-1-End-Of-Life">是什么导致Magento 1生命终结？</a></li>
<li><a href="#What-Are-Impacts-Of-Magento-1-End-Of-Life-To-Your-Website">Magento 1生命终止对您的网站有什么影响？</a></li>
<li><a href="#solution-for-magento-1-end-of-support">现有的Magento 1商店有什么解决方案？</a></li>
<li><a href="#How-Does-The-Magento-2-Migration-Process-Work">Magento 2迁移过程如何工作？</a></li>
<li><a href="#What-To-Expect-From-Magento-2-Website">从Magento 2网站可以期待什么？</a></li>
<li><a href="#When-Should-You-Migrate-Your-Website">您应何时迁移到Magento 2？</a></li>
</ol>
<p></p>
<h2>1.是什么导致Magento 1生命终止？</h2>
<p>自2014年中以来，Magento 1在新功能开发方面未进行任何更新，仅发布了一些可解决安全问题的补丁。原因很简单，Magento将所有精力都投入了Magento 2框架。</p>
<p>Magento为什么放弃&ldquo;第一个孩子&rdquo;？为什么它不同时培育Magento 1和2？</p>
<p><img alt="magento 1 eol公告" src="https://www.360magento.com/media/wysiwyg/blog_279/01.jpg" /></p>
<p>这样做的主要原因有3个。</p>
<p><em>首先，</em>关于Magento 1的投诉很多，例如性能差，页面加载速度慢，管理面板不友好（技术含量过高），前端不吸引人（即使应用现成的主题）等等。为了改善所有这些弱点，Magento几乎需要从头开始构建所有内容。实际上，他们是通过引入Magento 2做到这一点的。</p>
<p><em>其次，</em>假设Magento 1是免费的，而Magento 2是高级版本，那么Magento可以使它们两者都满足不同的需求。但事实不是这样的。Magento 1和2都有免费和付费版本（开源和商业版）。当以相同的比例放置时，绝对没有人会以相同的价格购买更好的版本（Magento 2），而选择Magento 1。因此，当继续提供旧版本时，Magento没有经济利益。</p>
<p><em>第三，</em> Magento 1逐渐弱化了Magento。将Magento与其他电子商务平台进行比较时，许多人会利用它来批评Magento。因此，Magento继续提供Magento 1平台弊大于利。</p>
<p>到目前为止，Magento维持对Magento 1的支持的唯一原因是仍然有大量的Magento 1商店。在Magento 1使用寿命终止日期之前这些商店所有者需要一些时间才能将其网站迁移。</p>
<p></p>
<h2>2. Magento 1生命终止对您的网站有什么影响？</h2>
<p>Magento 1寿命终止会带来一系列后果。</p>
<p>从2020年7月开始，Magento不再提供任何官方安全补丁。这意味着什么你？</p>
<p><img alt="magento 1支持何时结束" src="https://www.360magento.com/media/wysiwyg/blog_279/02.jpg" /></p>
<p>您的Magento商店安全性可能无法保证。一些黑客可能会抓住Magento 1的安全漏洞，以窃取您网站上的关键数据，甚至使您的网站崩溃。数据丢失，尤其是客户的个人信息丢失，将严重损害您的业务。&nbsp;</p>
<p>如果Magento 1终止其生命，那么您的扩展程序也可能会遇到许多麻烦。目前，从Magento官方，Magento开发人员，Magento服务商到Magento扩展提供商的几乎所有都将注意力转移到了Magento2。因此，如果您的Magento 1模块遇到任何问题，将很难找到人帮助。如果您没有内部开发人员，也找不到外部支持，您应该怎么做？</p>
<p></p>
<h2 class="has-luminous-vivid-orange-color has-text-color" id="solution-for-magento-1-end-of-support">3.现有的Magento 1商店有什么解决方案？</h2>
<p>Magento 1商家可以考虑迁移到另一个电子商务平台，例如Shopify，WooCommerce，BigCommerce，以应对Magento 1平台的结束。但是，最好的解决方案无疑是从Magento 1迁移到Magento 2。</p>
<p><img alt="magento 2迁移" src="https://www.360magento.com/media/wysiwyg/blog_279/03.jpg" /></p>
<p>如您所知，由于架构不同，在不同平台之间传输数据（产品，客户，订单等）的风险很大。另一方面，Magento提供了数据迁移工具来帮助商店所有者轻松地将数据库资产从Magento 1迁移到2。</p>
<p>此外，由于您已经熟悉了Magento平台，因此只需很少的时间即可熟悉Magento 2管理面板并有效地管理新站点。相比之下，如果决定使用全新的电子平台，则需要从头开始学习所有内容。</p>
<p></p>
<h2>4. Magento 2迁移过程如何工作？</h2>
<p>要将网站从Magento 1迁移到Magento 2，您的网站将执行以下一些基本步骤：</p>
<p><img alt="将magento 1迁移到2" src="https://www.360magento.com/media/wysiwyg/blog_279/04.png" /></p>
<h3><strong><em>迁移主题</em></strong></h3>
<p>由于Magento 2在编码方面与Magento 1完全不同，因此您的Magento 2网站必须具有新的主题。您可以在主题市场上轻松获得精美的现成的Magento 2网页设计模板。</p>
<p>但是，如果您对可用主题的质量/设计不满意，则应寻求定制Web设计服务。在360Magento，我们提供了许多选择，从克隆您当前的Magento 1设计到根据您的要求创建全新的设计不等。</p>
<h3><strong><em>迁移扩展</em></strong></h3>
<p>由于Magento 1的所有插件都与Magento 2不兼容，因此必须具有新的扩展。</p>
<p>好消息是，大多数Magento 1扩展都具有与Magento 2相似的版本。您需要做的是找到最佳替代品并将其安装在新站点上。</p>
<p>通常，当客户向我们发送迁移Magento 2的请求时，我们会要求他们提供其Magento 1模块的列表。然后，凭借我们的丰富经验，我们可以立即为M2提供最佳选择。有时，无需购买新插件，但我们将直接在新商店中开发自定义功能。</p>
<h3><strong><em>迁移资料</em></strong></h3>
<p>从Magento 1到2的数据传输无疑是最关键的一步。尽管我们可以使用Magento的官方数据迁移工具，但仍有很多事情要做。因此，该过程必须由专业/经验丰富的开发人员来实施，以避免数据丢失。</p>
<p>如果您需要360Magento来进行Magento 2迁移服务，尤其是数据迁移，我们将分两步执行数据迁移。首先，我们将创建一个备份并将数据从您当前的站点迁移到开发站点（在我们的服务器上）。其次，我们将再次将数据从开发站点传输到您的在线站点（在您选择的服务器上）。因此，在迁移过程中不会丢失任何东西。</p>
<h3><strong><em>迁移设置/配置 </em></strong></h3>
<p>语言，货币，付款，运输，电子邮件模板，商店信息&hellip;&hellip;在您当前的商店中，都需要重新设置以完成Magento 2迁移过程。</p>
<p></p>
<h2>5.您对Magento 2网站有什么期望？</h2>
<h3><em>网站速度快，<strong>性能</strong>稳定<strong></strong></em></h3>
<p>Magento 2上的默认Ajax购物车支持切换会话而无需重新加载整个页面，这将为您站点上的所有客户带来更好的体验。</p>
<p>另外，与旧版PHP版本相比，Magento 2的编程语言PHP 7提供了更高的负载。&nbsp;</p>
<p>缓存还可以提高站点性能。Magento 2使用Varnish缓存和HTTP加速器，可以轻松地缓存请求。</p>
<h3><strong><em>快速结帐</em></strong></h3>
<p>复杂的结帐增加了购物车的丢失率。为了解决这个问题，Magento 2提供了一页结帐，这比Magento 1快得多。</p>
<p><img alt="magento 2默认结帐" src="https://www.360magento.com/media/wysiwyg/blog_279/05.jpg" /></p>
<h3><strong><em>易于现代技术整合</em></strong></h3>
<p>有许多解决方案可将Magento 2网站与加速移动页面（AMP），渐进式Web应用程序（PWA）或其他先进技术集成在一起。但是，这些不适用于Magento 1平台。</p>
<p>完成Magento 2迁移后，使用AMP或PWA将您的网站提升到一个新水平将不再困难。</p>
<p></p>
<h2>6.您何时应该迁移到Magento 2？</h2>
<p>自Magento 2问世以来（距2015年7月）已有5年了。还可以理解，Magento已给企业所有者5年的时间为迁移做准备。如果您仍在使用Magento 1平台，那么您将错过多年提升店铺实力的绝佳机会。</p>
<p>再次提醒您，Magento将在2020年6月结束时停止支持Magento 1。如果您的网站尚未重新平台化，则应立即进行。</p>
<p><img alt="magento 1支持终止" src="https://www.360magento.com/media/wysiwyg/blog_279/06.jpg" /></p>
<p>尽快迁移到Magento 2的另一个原因是，360Magento为Magento迁移服务提供了最大促销：项目总成本的<strong>15％</strong>折扣。</p>
<p></p>
<h2>总结</h2>
<p>Magento 1生命终止对每个Magento电子商务业务都是不便之处。为了解决这个问题，没有比从1到2进行Magento迁移更好的选择了。</p>
<p>自2012年以来，凭借在Magento开发方面的综合经验，360Magento是许多商店店主想要升级其站点时的首选。我们希望很快收到您的来信！</p>]]></description>
      <pubDate>Thu, 21 May 2020 08:12:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中创建运输方式]]></title>
      <link>https://www.360magento.com/blog/magento-2-create-shipping-method/</link>
      <description><![CDATA[<p>电子商务就是为了客户便利。提供便利的运输方式是在线商店中客户体验的必然部分。默认情况下，有7种<a href="https://docs.magento.com/m2/ee/user_guide/configuration/sales/shipping-methods.html" target="_blank" rel="noopener noreferrer">Magento 2运送方式</a>：</p><ol><li>Free Shipping</li><li>Flat Rates</li><li>Table Rates</li><li>UPS</li><li>USPS</li><li>edEx</li><li>DHL</li></ol><p>您还可以学习如何轻松<a href="https://docs.magento.com/m2/ee/user_guide/shipping/magento-shipping-setup.html" target="_blank" rel="noopener noreferrer">配置Magento 2运送方式</a>。</p><p>然而，随着电子商务普及程度的提高，越来越多的类型的企业选择了在线购物平台，特别是Magento，因为它的功能和性能。但是，这些默认的运输方式还不足以满足目前所有类型的企业。</p><p>因此，我想出了一种编程方法来<i><strong>在Magento 2</strong></i>商店中<i><strong>创建运输方式</strong></i>。</p><p>考虑到业务需求而实施的定制运输方式是可行的选择。运输策略必须确保其在订单履行成本中所获得的收益不超过该订单所获利润。</p><p>理想的运输方式必须易于管理，快速且价格合理。并不是每个店主都能从默认的Magento 2送货方式中找到这样的送货方式。</p><p>在Magento 2商店中以编程方式创建适合您的业务需求并且可行的自定义运输方法，是拥有正确运输系统的最优化解决方案。</p><p>为什么我要强调优化运输策略呢？</p><p>以下统计信息解释了原因：</p><ol><li>61％的购物者表示由于额外的费用（例如运费）而退出交易– <a href="https://99firms.com/blog/ecommerce-statistics/#gref" target="_blank" rel="noopener noreferrer">99firms</a></li><li>79％的美国消费者表示免费送货将使他们更有可能在网上购物。– <a href="https://www.walkersands.com/wp-content/uploads/2018/07/Walker-Sands_2018-Future-of-Retail-Report.pdf" target="_blank" rel="noopener noreferrer">Walkersands</a></li><li>46.5％的中小型企业表示，提供免费送货可增加利润。– <a href="https://multichannelmerchant.com/blog/shopping-cart-abandonment-is-your-shipping-approach-hurting-your-conversions/" target="_blank" rel="noopener noreferrer">MCM</a></li></ol><h2>在Magento 2中创建运输方式的步骤：</h2><ol><li>在<strong>app/code/Alwayly/CustomShipping/registration.php</strong>中创建<strong>registration.php</strong>文件，&nbsp;并将以下代码添加到该文件中：<br>
<pre>
;&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
&nbsp; &nbsp; \Magento\Framework\Component\ComponentRegistrar::MODULE,
&nbsp; &nbsp; 'Alwayly_CustomShipping',
&nbsp; &nbsp; __DIR__
);
</pre>
</li><li>在<strong>app/code/Alwayly/CustomShipping/etc/module.xml</strong>中创建<strong>module.xml</strong>文件，并将以下代码添加到该文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
&nbsp; &nbsp; &lt;module name="Alwayly_CustomShipping" setup_version="1.0.0"&gt;
&nbsp; &nbsp; &lt;/module&gt;
&lt;/config&gt;
</pre>
</li>
<li>在<strong>app/code/Alwayly/CustomShipping/etc/adminhtml/system.xml</strong>中创建<strong>system.xml</strong>文件，&nbsp;并将以下代码添加到该文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"&gt;
&nbsp; &nbsp; &lt;system&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;section id="carriers" translate="label" type="text" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;group id="custom" translate="label" type="text" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Custom Shipping&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="active" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Enabled&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Config\Model\Config\Source\Yesno&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="name" translate="label" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Method Name&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="price" translate="label" type="text" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Price&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;validate&gt;validate-number validate-zero-or-greater&lt;/validate&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="handling_type" translate="label" type="select" sortOrder="7" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Calculate Handling Fee&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Shipping\Model\Source\HandlingType&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="handling_fee" translate="label" type="text" sortOrder="8" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Handling Fee&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;validate&gt;validate-number validate-zero-or-greater&lt;/validate&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="sort_order" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Sort Order&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="title" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Title&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="sallowspecific" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Ship to Applicable Countries&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;frontend_class&gt;shipping-applicable-country&lt;/frontend_class&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Shipping\Model\Config\Source\Allspecificcountries&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="specificcountry" translate="label" type="multiselect" sortOrder="91" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Ship to Specific Countries&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Directory\Model\Config\Source\Country&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;can_be_empty&gt;1&lt;/can_be_empty&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="showmethod" translate="label" type="select" sortOrder="92" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Show Method if Not Applicable&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Config\Model\Config\Source\Yesno&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="specificerrmsg" translate="label" type="textarea" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Displayed Error Message&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/group&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/section&gt;
&nbsp; &nbsp; &lt;/system&gt;
&lt;/config&gt;
</pre>
</li><li>在<strong>app/code/Alwayly/CustomShipping/etc/config.xml</strong>中创建<strong>config.xml</strong>文件，并将以下代码添加到该文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"&gt;
&nbsp; &nbsp; &lt;default&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;carriers&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;custom&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;active&gt;1&lt;/active&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;sallowspecific&gt;0&lt;/sallowspecific&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;model&gt;Alwayly\CustomShipping\Model\Carrier\Custom&lt;/model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;name&gt;Custom Shipping&lt;/name&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;price&gt;15.00&lt;/price&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;Custom Method&lt;/title&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;type&gt;I&lt;/type&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;specificerrmsg&gt;This shipping method is not available right now.&lt;/specificerrmsg&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/custom&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/carriers&gt;
&nbsp; &nbsp; &lt;/default&gt;
&lt;/config&gt;
</pre>
</li><li>在<strong>app/code/Alwayly/CustomShipping/Model/Carrier/Custom.php</strong>中创建<strong>Custom.php</strong>文件，并将以下代码添加到此文件中：<br>
<pre>
&lt;?php

namespace Alwayly\CustomShipping\Model\Carrier;

use Magento\Quote\Model\Quote\Address\RateRequest;
use Magento\Shipping\Model\Rate\Result;
use Magento\Shipping\Model\Carrier\AbstractCarrier;
use Magento\Shipping\Model\Carrier\CarrierInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory;
use Psr\Log\LoggerInterface;
use Magento\Shipping\Model\Rate\ResultFactory;
use Magento\Quote\Model\Quote\Address\RateResult\MethodFactory;

class Custom extends AbstractCarrier implements CarrierInterface
{
&nbsp; &nbsp; protected $_code = 'custom';
&nbsp; &nbsp; protected $rateResultFactory;
&nbsp; &nbsp; protected $rateMethodFactory;

&nbsp; &nbsp; public function __construct(
&nbsp; &nbsp; &nbsp; &nbsp; ScopeConfigInterface $scopeConfig,
&nbsp; &nbsp; &nbsp; &nbsp; ErrorFactory $rateErrorFactory,
&nbsp; &nbsp; &nbsp; &nbsp; LoggerInterface $logger,
&nbsp; &nbsp; &nbsp; &nbsp; ResultFactory $rateResultFactory,
&nbsp; &nbsp; &nbsp; &nbsp; MethodFactory $rateMethodFactory,
&nbsp; &nbsp; &nbsp; &nbsp; array $data = []
&nbsp; &nbsp; ) {
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;rateResultFactory = $rateResultFactory;
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;rateMethodFactory = $rateMethodFactory;
&nbsp; &nbsp; &nbsp; &nbsp; parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
&nbsp; &nbsp; }

&nbsp; &nbsp; public function getAllowedMethods()
&nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; return ['custom' =&gt; $this-&gt;getConfigData('name')];
&nbsp; &nbsp; }

&nbsp; &nbsp; public function collectRates(RateRequest $request)
&nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; if (!$this-&gt;getConfigFlag('active')) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; /** @var \Magento\Shipping\Model\Rate\Result $result */
&nbsp; &nbsp; &nbsp; &nbsp; $result = $this-&gt;rateResultFactory-&gt;create();

&nbsp; &nbsp; &nbsp; &nbsp; /** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */
&nbsp; &nbsp; &nbsp; &nbsp; $method = $this-&gt;rateMethodFactory-&gt;create();

&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setCarrier('custom');
&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setCarrierTitle($this-&gt;getConfigData('title'));

&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setMethod('custom');
&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setMethodTitle($this-&gt;getConfigData('name'));

&nbsp; &nbsp; &nbsp; &nbsp; /*you can fetch shipping price from different sources over some APIs, we used price from config.xml - xml node price*/
&nbsp; &nbsp; &nbsp; &nbsp; $amount = $this-&gt;getConfigData('price');

&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setPrice($amount);
&nbsp; &nbsp; &nbsp; &nbsp; $method-&gt;setCost($amount);

&nbsp; &nbsp; &nbsp; &nbsp; $result-&gt;append($method);

&nbsp; &nbsp; &nbsp; &nbsp; return $result;
&nbsp; &nbsp; }
}
</pre>
</li></ol><p>这就是在Magento 2中创建自定义送货方式的全部操作。创建Magento 2自定义送货方式后，其配置将在后端显示：</p><p>
<img src="https://www.360magento.com/media/wysiwyg/blog_278/shipping-method-configuration.png" alt="定制运输方式配置" />
</p><p>一旦配置并启用了自定义送货方式，它就会显示在前端：</p><p>
<img src="https://www.360magento.com/media/wysiwyg/blog_278/shipping-method-in-frontend.png" alt="前端中的自定义送货方式" /></p>]]></description>
      <pubDate>Wed, 25 Dec 2019 13:39:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中创建支付方式]]></title>
      <link>https://www.360magento.com/blog/m2-create-payment-method/</link>
      <description><![CDATA[<p>支付网关是确保电子商务业务安全的关键。选择适合您的业务类型的付款方式应引起适当注意。错误的选择将对您的支付系统造成灾难。客户的信任和忠诚度取决于您提供的付款处理系统。</p><h2>付款网关应该如何？</h2><ul><li>100％安全</li><li>与您的商店平台兼容</li><li>提供快速的付款流程</li><li>欺诈识别</li><li>开票功能</li><li>令人印象深刻的用户界面</li><li>可行的费用</li><li>支持国际支付</li><li>支援政策</li><li>支持的卡类型</li><li>支持定期付款</li><li>托管/非托管付款</li></ul><p>如果您是Magento商店的老板，则需要筛选出用于满足业务需求的支付网关。</p><p>但是，满足您所有要求的理想支付网关仅存在于并行世界中。但是，等等，您可以自行<i><strong>在Magento 2中创建付款方式</strong></i>！这篇文章向您展示了如何做到这一点。</p><h2>在Magento 2中创建付款方式的步骤：</h2><ol><li>在<strong>app/code/Alwayly/CustomPayment/registration.php</strong>中创建<strong>registration.php</strong>文件，并将以下代码添加到其中：<br>
<pre>&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
&nbsp; &nbsp; \Magento\Framework\Component\ComponentRegistrar::MODULE,
&nbsp; &nbsp; 'Alwayly_CustomPayment',
&nbsp; &nbsp; __DIR__
);</pre>
</li>
<li>在<strong>app/code/Alwayly/CustomPayment/etc/module.xml</strong>中创建<strong>module.xml</strong>文件，并将以下代码添加到此文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
&nbsp; &nbsp; &lt;module name="Alwayly_CustomPayment" setup_version="1.0.0"&gt;
&nbsp; &nbsp; &lt;/module&gt;
&lt;/config&gt;
</pre>
</li>
<li>在<strong>app/code/Alwayly/CustomPayment/etc/config.xml</strong>中创建<strong>config.xml</strong>文件，并将以下代码添加到该文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Store/etc/config.xsd"&gt;
&nbsp; &nbsp; &lt;default&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;payment&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;custompayment&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;payment_action&gt;authorize&lt;/payment_action&gt; &lt;!-- You can use another method --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;model&gt;Alwayly\CustomPayment\Model\PaymentMethod&lt;/model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;active&gt;1&lt;/active&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;Custom Payment&lt;/title&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;order_status&gt;pending_payment&lt;/order_status&gt;&lt;!-- set default order status--&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/custompayment&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/payment&gt;
&nbsp; &nbsp; &lt;/default&gt;
&lt;/config&gt;
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/etc/adminhtml/system.xml</strong>中创建<strong>system.xml</strong>文件，并将以下代码添加到此文件中：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"&gt;
&nbsp; &nbsp; &lt;system&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;section id="payment"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;group id="custompayment" translate="label" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Custom Payment Method&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="active" translate="label comment" sortOrder="10" type="select" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Enable&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;source_model&gt;Magento\Config\Model\Config\Source\Yesno&lt;/source_model&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;label&gt;Custom Payment&lt;/label&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/field&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/group&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/section&gt;
&nbsp; &nbsp; &lt;/system&gt;
&lt;/config&gt;
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/Model/PaymentMethod.php</strong>中创建<strong>PaymentMethod.php</strong>文件，&nbsp;将以下代码添加到此文件中：<br>
<pre>
&lt;?php
&nbsp;
namespace Alwayly\CustomPayment\Model;
&nbsp;
/**
&nbsp;* Pay In Store payment method model
&nbsp;*/
class PaymentMethod extends \Magento\Payment\Model\Method\AbstractMethod
{
&nbsp; &nbsp; /**
&nbsp; &nbsp; &nbsp;* Payment code
&nbsp; &nbsp; &nbsp;*
&nbsp; &nbsp; &nbsp;* @var string
&nbsp; &nbsp; &nbsp;*/
&nbsp; &nbsp; protected $_code = 'custompayment';
}
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/view/frontend/layout/checkout_index_index.xml</strong>中创建<strong>checkout_index_index.xml</strong>文件，并将以下代码添加到该文件：<br>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
&nbsp; &nbsp; &lt;body&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;referenceBlock name="checkout.root"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;arguments&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;argument name="jsLayout" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="components" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="checkout" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="children" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="steps" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="children" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="billing-step" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="component" xsi:type="string"&gt;uiComponent&lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="children" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="payment" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="children" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="renders" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- merge payment method renders here --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="children" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="custompayment" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="component" xsi:type="string"&gt;Emipro_Custompayment/js/view/payment/method-renderer&lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="methods" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="custompayment" xsi:type="array"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="isBillingAddressRequired" xsi:type="boolean"&gt;true&lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/item&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/argument&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/arguments&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/referenceBlock&gt;
&nbsp; &nbsp; &lt;/body&gt;
&lt;/page&gt;
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/view/frontend/web/js/view/payment/method-renderer.js</strong>上创建<strong>method-renderer.js</strong>文件，并将以下代码添加到该文件中：<br>
<pre>
define(
&nbsp; &nbsp; [
&nbsp; &nbsp; &nbsp; &nbsp; 'uiComponent',
&nbsp; &nbsp; &nbsp; &nbsp; 'Magento_Checkout/js/model/payment/renderer-list'
&nbsp; &nbsp; ],
&nbsp; &nbsp; function (
&nbsp; &nbsp; &nbsp; &nbsp; Component,
&nbsp; &nbsp; &nbsp; &nbsp; rendererList
&nbsp; &nbsp; ) {
&nbsp; &nbsp; &nbsp; &nbsp; 'use strict';
&nbsp; &nbsp; &nbsp; &nbsp; rendererList.push(
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: 'custompayment',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; component: 'Alwayly_CustomPayment/js/view/payment/method-renderer/custompayment'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; );
&nbsp; &nbsp; &nbsp; &nbsp; return Component.extend({});
&nbsp; &nbsp; }
);
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/view/frontend/web/js/view/payment/method-renderer/custompayment.js</strong>上创建<strong>custompayment.js</strong>文件，在&nbsp;此文件中添加以下代码：<br>
<pre>
define(
&nbsp; &nbsp; [
&nbsp; &nbsp; &nbsp; &nbsp; 'Magento_Checkout/js/view/payment/default'
&nbsp; &nbsp; ],
&nbsp; &nbsp; function (Component) {
&nbsp; &nbsp; &nbsp; &nbsp; 'use strict';
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; return Component.extend({
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; defaults: {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; template: 'Alwayly_CustomPayment/payment/customtemplate'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; });
&nbsp; &nbsp; }
);
</pre>
</li><li>在<strong>app/code/Alwayly/CustomPayment/view/frontend/web/template/payment/customtemplate.html</strong>上创建<strong>customtemplate.html</strong>文件，并将以下代码添加到此文件中：<br>
<pre>
&lt;div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}"&gt;
&nbsp; &nbsp; &lt;div class="payment-method-title field choice"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;input type="radio"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name="payment[method]"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;class="radio"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;data-bind="attr: {'id': getCode()}, value: getCode(), checked: isChecked, click: selectPaymentMethod, visible: isRadioButtonVisible()"/&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;label data-bind="attr: {'for': getCode()}" class="label"&gt;&lt;span data-bind="text: getTitle()"&gt;&lt;/span&gt;&lt;/label&gt;
&nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp; &lt;div class="payment-method-content"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko foreach: getRegion('messages') --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- /ko --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!--/ko--&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="payment-method-billing-address"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko foreach: $parent.getRegion(getBillingAddressFormName()) --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- /ko --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!--/ko--&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="checkout-agreements-block"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko foreach: $parent.getRegion('before-place-order') --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- ko template: getTemplate() --&gt;&lt;!-- /ko --&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!--/ko--&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="actions-toolbar"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="primary"&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;button class="action primary checkout"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type="submit"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data-bind="
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; click: placeOrder,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attr: {title: $t('Place Order')},
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css: {disabled: !isPlaceOrderActionAllowed()},
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enable: (getCode() == isChecked())
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disabled&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span data-bind="i18n: 'Place Order'"&gt;&lt;/span&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/button&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp; &lt;/div&gt;
&lt;/div&gt;
</pre>
</li></ol><p>这就是在Magento 2商店中创建自定义付款方式的过程。该扩展程序将创建后端设置以启用付款方式并为其设置标题。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_277/custom-payment-method-configuration.png" alt="自定义付款方式创建"/>
</p>
<p>启用付款方式后，可以在检出产品时将其显示在前端：</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_277/custom-payment-method-in-frontend.png" alt="前端结帐页面上的自定义付款方式" />
</p>
]]></description>
      <pubDate>Mon, 23 Dec 2019 07:13:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中获取订单的付款方式名称]]></title>
      <link>https://www.360magento.com/blog/m2-get-payment-method-title-of-order/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_276/How-To-Get-Payment-Method-Title-Of-Order-In-Magento-2.png" alt=" How To Get Payment Method Title Of Order In Magento 2 如何在Magento 2中获取订单的付款方式名称" /></p>
<p>电子商务网站有时需要注意一些小细节，例如按钮的颜色，订单完成页面中的细节或显示什么订购信息！</p><p>这是因为每一步都在推动用户转化或改善客户体验方面发挥作用。</p><p>有这样的一个细节是<i><strong>在Magento 2中获得订单的付款方式名称</strong></i>。</p><p>作为后期购物体验的一部分，您将在Magento 2的“My Orders”部分中显示哪些订单信息。当客户检查“My Orders”部分以查找有关该订单的任何信息时，它应该存在。</p><p>但是，默认的Magento 2并未在Magento 2中包含所有订单付款信息。</p><p>因此，以下解决方案允许管理员在Magento 2中获得订单的付款方式名称。请记住您的业务性质和客户洞察力，以决定是否需要在Magento 2商店中添加订单付款信息。</p><h2>Magento 2中获取付款方式名称的方法：</h2><p>从订单中获取支付模型，然后从支付中获取方法实例：</p>
<pre>
$orderIncrementId=10000003;
$objectManager&nbsp;=&nbsp;\Magento\Framework\App\ObjectManager::getInstance();
$order&nbsp;=&nbsp;$objectManager-&gt;create('Magento\Sales\Model\Order')-&gt;loadByIncrementId($orderIncrementId)
​​​​​​​$payment = $order-&gt;getPayment();
$method = $payment-&gt;getMethodInstance();
$methodTitle = $method-&gt;getTitle();
</pre>
<p>其中<code>$order</code>&nbsp;是<code>Magento\Sales\Model\Order</code>的实例</p>]]></description>
      <pubDate>Fri, 20 Dec 2019 06:26:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中以编程方式创建客户组]]></title>
      <link>https://www.360magento.com/blog/m2-create-customer-group/</link>
      <description><![CDATA[<p>在Magento 2中以编程方式创建客户之后，您可能需要根据类似的购买行为对他们进行分组，比如说，要轻松地组织他们，给他们打折并限制对特定产品或类别的访问。Magento 2提供了一种将客户分为<a href="https://docs.magento.com/m2/ce/user_guide/customers/customer-groups.html" target="_blank" rel="noopener noreferrer">Magento 2客户组</a>的解决方案。</p><p>这种安排可以帮助商店所有者进行有针对性的客户管理和营销。根据客户组有效地管理用户体验，规则，税种等。</p><p>Magento 2的默认客户组是：</p><ul><li>General</li><li>Not Logged In</li><li>Wholesale</li></ul><p>但是，对于我们的开发人员而言，默认功能是远远不够的（或者可以说，对于客户的要）</p><p>使用自定义客户组可以更轻松地管理用户体验和商店自定义！这就是为什么我编写<i><strong>在Magento 2中</strong></i>以<i><strong>编程</strong></i>方式<i><strong>创建客户组</strong></i>的方法。</p><h3>在Magento 2商店里，你能把顾客分成几个小组吗？</h3><ul><li>管理显示给用户的内容</li><li>配置税收规则</li><li>设计折扣和销售策略</li><li>限制产品或类别</li><li>提供特定的运输或付款方式</li></ul><p>列表是无止境的。提供您能想到的与客户类型有关的任何信息。客户将为这种双赢的情况而感恩，在这种双赢的情况下，您可以使他们的购物体验更加顺畅！</p><h2>在Magento 2中以编程方式创建客户组的步骤：</h2><p>&nbsp;在<strong>app/code/Vendor/Extension/Setup</strong>目录中创建<i><strong>InstallData.php</strong></i>文件：</p>
<pre>
&lt;?php
namespace Vendor\Extension\Setup;

use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Customer\Model\GroupFactory;

class InstallData implements InstallDataInterface
{
&nbsp; &nbsp; protected $groupFactory;

&nbsp; &nbsp; public function __construct(GroupFactory $groupFactory) {
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;groupFactory = $groupFactory;
&nbsp; &nbsp; }

&nbsp; &nbsp; public function install(
&nbsp; &nbsp; &nbsp; &nbsp; ModuleDataSetupInterface $setup,
&nbsp; &nbsp; &nbsp; &nbsp; ModuleContextInterface $context
&nbsp; &nbsp; ) {
&nbsp; &nbsp; &nbsp; &nbsp; $setup-&gt;startSetup();

&nbsp; &nbsp; &nbsp; &nbsp; $group = $this-&gt;groupFactory-&gt;create();
&nbsp; &nbsp; &nbsp; &nbsp; $group
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;setCode('New Group')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;setTaxClassId(3)&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;save();

&nbsp; &nbsp; &nbsp; &nbsp; $setup-&gt;endSetup();
&nbsp; &nbsp; }
}
</pre>
<p>好了，这就是代码</p>]]></description>
      <pubDate>Thu, 19 Dec 2019 10:09:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何禁用在Magento 2的产品页面上的Ajax“添加到购物车”]]></title>
      <link>https://www.360magento.com/blog/disable-ajax-add-to-cart-on-product-page-m2/</link>
      <description><![CDATA[<p>您的大量客户是否由于冗长的结帐流程而放弃了购物车？您是否要优化结帐流程，使您不会失去可能成为潜在客户的用户？</p>
<p>Magento 2“Add to Cart”按钮的默认行为是单击，它使用ajax将产品添加到购物车并使用户停留在产品页面上。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_274/ajax-add-to-cat.gif" alt="Magento 2的产品页面购物车按钮" />
</p>
<p>现在，为了加快购买过程，您需要<strong>在Magento 2的产品页面上禁用ajax添加到购物车</strong>，并将客户直接重定向到结帐页面。这可以推动您的客户进行购买，也可以节省客户完成订单的时间。</p>
<h2>在Magento 2的产品页面上禁用Ajax添加到购物车的步骤：</h2><ol><li>从<strong>vendor\magento\module-catalog\view\frontend\templates\product\view\addtocart.phtml</strong>文件中找到以下代码<br>
<pre>
&lt;script type="text/x-magento-init"&gt;
&nbsp;&nbsp; &nbsp;{
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;"#product_addtocart_form": {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Magento_Catalog/product/view/validation": {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "radioCheckboxClosest": ".nested"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;}
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;}
&lt;/script&gt;
</pre>
&nbsp;</li><li>转到&nbsp; <strong>app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/templates/product/view/addtocart.phtml</strong>并替换以下代码以添加<strong>bindsubmit</strong>事件：<br>
<pre>
&lt;script type="text/x-magento-init"&gt;
&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;"#product_addtocart_form": {
&nbsp; &nbsp; &nbsp; &nbsp; "Magento_Catalog/product/view/validation": {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;"bindSubmit": true,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;"radioCheckboxClosest": ".nested"
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;}
&nbsp; &nbsp;}
&lt;/script&gt;
</pre>
&nbsp;</li><li>要想单击添加到购物车按钮从购物车页面重定向到结帐页面，请转到<strong>Stores > Configuration > Sales > Checkout > Shopping Cart</strong>，并将“ <strong>After Adding a Product Redirect to Shopping Cart</strong> ”设置为<strong>Yes</strong>。
<img src="https://www.360magento.com/media/wysiwyg/blog_274/Redirect-directly-to-checkout.png" />
</li></ol><p>在Magento 2产品页面上禁用ajax添加到购物车并将客户直接重定向到结帐页面。</p>]]></description>
      <pubDate>Mon, 16 Dec 2019 07:38:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2路由的完整教程]]></title>
      <link>https://www.360magento.com/blog/magento-2-routing/</link>
      <description><![CDATA[<p><i><strong>Magento 2路由</strong></i>就是定义模块的URL。</p><p>整个Magento 2应用程序流基于处理URL请求和路由器类，它们负责匹配和处理请求。</p><p>Magento 2中的请求URL是http://example.com/index.php/router_name/controller/action</p><p>在这里，<strong>router_name</strong>用于查找模块。</p><p>当在Magento 2中发出请求时，&nbsp; <strong>controller/action:index.php → HTTP app → FrontController → Routing → Controller processing → etc</strong>流程。</p><p>在Http类中调用FrontController来路由请求，该请求将找到controller/action匹配项。</p><p><strong>vendor/magento/framework/App/FrontController.php</strong></p>
<pre>
public function dispatch(RequestInterface $request)
{
   \Magento\Framework\Profiler::start('routers_match');
   $routingCycleCounter = 0;
   $result = null;
   while (!$request-&gt;isDispatched() &amp;&amp; $routingCycleCounter++ &lt; 100) {
	   /** @var \Magento\Framework\App\RouterInterface $router */
	   foreach ($this-&gt;_routerList as $router) {
		   try {
			   $actionInstance = $router-&gt;match($request);
			   if ($actionInstance) {
				   $request-&gt;setDispatched(true);
				   $this-&gt;response-&gt;setNoCacheHeaders();
				   if ($actionInstance instanceof \Magento\Framework\App\Action\AbstractAction) {
					   $result = $actionInstance-&gt;dispatch($request);
				   } else {
					   $result = $actionInstance-&gt;execute();
				   }
				   break;
			   }
		   } catch (\Magento\Framework\Exception\NotFoundException $e) {
			   $request-&gt;initForward();
			   $request-&gt;setActionName('noroute');
			   $request-&gt;setDispatched(false);
			   break;
		   }
	   }
   }
   \Magento\Framework\Profiler::stop('routers_match');
	if ($routingCycleCounter &gt; 100) {
	   throw new \LogicException('Front controller reached 100 router match iterations');
	}
	return $result;
}
</pre>
<h2 id="create-custom-route-on-frontendadmin">在前端和后台管理上创建自定义路由的步骤：</h2><p>在实施以下方法之前，您可以参考有关<a href="https://www.360magento.com/blog/create-moudle-m2" target="_blank">Magento 2模块开发</a>的教程。</p><h3>创建前端路由：</h3><p>在<strong> app/code/[Vendor]/[Module]/etc/frontend </strong>文件夹中创建<strong>routes.xml</strong>，添加以下代码：</p>
<pre>
&lt;?xml version="1.0" ?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
	&lt;router id="standard"&gt;
		&lt;route frontName="helloworld" id="helloworld"&gt;
			&lt;module name="[Vendor]_[Module]"/&gt;
		&lt;/route&gt;
	&lt;/router&gt;
&lt;/config&gt;
</pre>
<h3>创建管理路由：</h3><p>在app/code/[Vendor]/[Module]/etc/adminhtml文件夹中创建<strong>routes.xml</strong>，并添加以下代码：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
	&lt;router id="admin"&gt;
		&lt;route id="helloworld" frontName="helloworld"&gt;
			&lt;module name="[Vendor]_[Module]"/&gt;
		&lt;/route&gt;
	&lt;/router&gt;
&lt;/config&gt;
</pre>
<h3>使用路由重写控制器：</h3><p>在<strong> app/code/[Vendor]/[Module]/etc/frontend</strong>文件夹中创建<strong>routes.xml</strong>，并添加以下代码：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
   &lt;router id="standard"&gt;
		&lt;route frontName="helloworld" id="helloworld"&gt;
			&lt;module name="[Vendor]_[Module]"/&gt;
		&lt;/route&gt;
	   &lt;route id="account"&gt;
		   &lt;module name="[Vendor]_[Module]" before="Magento_Customer" /&gt;
	   &lt;/route&gt;
   &lt;/router&gt;
&lt;/config&gt;
</pre>
这就是Magento 2路由的全部内容！</p>]]></description>
      <pubDate>Fri, 13 Dec 2019 10:27:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中重新排序产品页标签选项卡]]></title>
      <link>https://www.360magento.com/blog/m2-reorder-product-tabs/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_272/How-To-Reorder-Product-Tabs-In-Magento-2-880x346.png" alt="如何在Magento 2中重新排序产品页标签选项卡" /></p>
<p>电商网站的产品页面设计非常重要，因为在大多数情况下，潜在客户将搜索产品而不是品牌。此外，产品页面是将在社交媒体上共享最多的页面。</p>
<p>电商网站网页设计对于创造正确的视觉效果、产生引导和转化具有重要的作用。</p>
<p>此外，一个易于遵循逻辑的设计可以提高用户的购物体验！</p><p>关于Magento 2，在开发网站时，您可能需要调整默认页面的设计。这是为了优化页面以获得更好的购物体验，并吸引访问者停留在页面上。</p><p><i><strong>重新排列Magento 2中的产品标签选项卡，</strong></i>如下所示：</p><p><strong>整整之前：</strong></p><p>
<img src="https://www.360magento.com/media/wysiwyg/blog_272/Product-tabs-in-Magento-2-Meetanshi-880x324.png" alt="之前-Magento 2中的产品选项卡" />
<br> <strong>调整之后：</strong><br> 
<img src="https://www.360magento.com/media/wysiwyg/blog_272/Reordered-product-tabs-in-Magento-2-Meetanshi-880x325.png" alt="之后Magento 2中的产品选项卡" />
</p><h2>在Magento 2中重新排序产品标签选项卡的方法：</h2><ol><li>在<strong>app/design/frontend/Vendor/Theme/Magento_Catalog/layout/catalog_product_view.xml中</strong>创建/更改文件&nbsp;<br>
<pre>
&lt;referenceBlock name="product.info.details"&gt;
        &lt;referenceBlock name="product.info.description"&gt;
            &lt;arguments&gt;
                &lt;argument name="priority" xsi:type="string"&gt;1&lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
        &lt;referenceBlock name="product.attributes"&gt;
            &lt;arguments&gt;
                &lt;argument name="priority" xsi:type="string"&gt;3&lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
        &lt;referenceBlock name="reviews.tab"&gt;
            &lt;arguments&gt;
                &lt;argument name="priority" xsi:type="string"&gt;4&lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
        &lt;!-- Your Custom Tab --&gt;
        &lt;block class="Magento\Catalog\Block\Product\View\Description" name="product.features" as="features" template="product/view/features.phtml" group="detailed_info"&gt;
            &lt;arguments&gt;
                &lt;argument translate="true" name="title" xsi:type="string"&gt;Custom Tab&lt;/argument&gt;
                &lt;argument name="priority" xsi:type="string"&gt;2&lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/block&gt;
    &lt;/referenceBlock&gt;
</pre>
</li><li>如果&nbsp; 主题目录中不存在<em><strong>details.phtml</strong></em>文件，<br>则从<strong>vendor/magento-catalog-view/frontend/templates/product/view/details.phtml</strong>复制到<br> <strong>app/design/frontend/Vendor/Theme/Magento_Catalog/templates/product/view/details.phtml<br></strong><br>
<pre>
&lt;?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?&gt;
&lt;?php if ($detailedInfoGroup = $block-&gt;getGroupChildNames('detailed_info', 'getChildHtml')):?&gt;
    &lt;div class="product info detailed"&gt;
        &lt;?php $layout = $block-&gt;getLayout(); ?&gt;
        &lt;?php
            # We create a new array;
            $newPriority = array();
            # forEach the original $detailedInfoGroup Array;
            foreach ($detailedInfoGroup as $name){
                $alias = $layout-&gt;getElementAlias($name);
                # Get the priority which we applied via xml file
                # If no priority is applied via xml file then just set it to 10
                $priority = $block-&gt;getChildData($alias,'priority') ? $block-&gt;getChildData($alias,'priority') : '10';
                # variables pushed into new two-dimensional array
                array_push($newPriority, array($name, $priority));
            }
            # Sort array by priority
            usort($newPriority, function($a, $b) {
                return $a['1'] &lt;=&gt; $b['1'];
            });
        ?&gt;
        &lt;div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'&gt;
            &lt;?php
            # Delete the original forEach statement
            #foreach ($detailedInfoGroup as $name)
            foreach ($newPriority as $name):?&gt;
                &lt;?php
                    # rename $name[0] to $name because it's a two-dimensional array
                    # No further changes to this file, it works as explained
                    $name = $name[0];
                    $html = $layout-&gt;renderElement($name);
                    if (!trim($html)) {
                        continue;
                    }
                    $alias = $layout-&gt;getElementAlias($name);
                    $label = $block-&gt;getChildData($alias, 'title');
                ?&gt;
                &lt;div class="data item title"
                     aria-labeledby="tab-label-&lt;?php /* @escapeNotVerified */ echo $alias;?&gt;-title"
                     data-role="collapsible" id="tab-label-&lt;?php /* @escapeNotVerified */ echo $alias;?&gt;"&gt;
                    &lt;a class="data switch"
                       tabindex="-1"
                       data-toggle="switch"
                       href="#&lt;?php /* @escapeNotVerified */ echo $alias; ?&gt;"
                       id="tab-label-&lt;?php /* @escapeNotVerified */ echo $alias;?&gt;-title"&gt;
                        &lt;?php /* @escapeNotVerified */ echo $label; ?&gt;
                    &lt;/a&gt;
                &lt;/div&gt;
                &lt;div class="data item content" id="&lt;?php /* @escapeNotVerified */ echo $alias; ?&gt;" data-role="content"&gt;
                    &lt;?php /* @escapeNotVerified */ echo $html; ?&gt;
                &lt;/div&gt;
            &lt;?php endforeach;?&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;
</pre>
</li></ol>
<p>就这样而已。</p>
<p>更改Magento 2商店中产品页面上选项卡的顺序。根据买方角色和内容相关性来调整产品页面的设计。</p><p>如果你被困在这两个步骤之间，请联系我们，我们很乐意提供帮助。</p><p>谢谢。</p>]]></description>
      <pubDate>Wed, 11 Dec 2019 09:50:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中如何从URL导入产品图像]]></title>
      <link>https://www.360magento.com/blog/m2-import-product-images-from-url/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_271/How-To-Import-Product-Images-From-URL-In-Magento-2-880x346.png" alt="" /></p>
<p>Magento 2是目前最受欢迎的电子商务平台，通常会有很多从其他平台转移到M2的平台上来，这样在Magento 2中就需要<i><strong>从URL导入产品图像</strong></i>。默认情况下，Magento 2可以很好地处理图像导入，但是图片路径仅位于服务器中。然而，从外部URL导入产品图片时，可以使用以下解决方案。</p>
<p>以下内容可以包含在任何需要的地方，它的execute方法将使用以下参数调用：：</p>
<ul><li><em>$product</em> &nbsp;–加载的产品实例，图像将添加到其中</li><li><em>$imageUrl</em> &nbsp;–外部图片网址</li><li><em>$visible</em> &nbsp;–默认情况下将隐藏图像。您可以通过传递布尔值“true”使其可见。</li><li><em>$imageType</em> &nbsp;–数组，可选参数，您可以在其中指定将图像设置为主图像，小图像还是缩略图或它们的任意组合。</li></ul>
<p>该帖子提供了从Magento 2商店中的外部URL轻松导入产品图像的解决方案。</p>
<h2>在Magento 2中从URL导入产品图像的方法：</h2>
<p>在<strong>app/code/[Vendor]/[Module]/Service</strong>文件夹中创建<em><strong>ImportImageService.php</strong></em>类，并添加以下代码：</p>
<pre>
&lt;?php
	namespace [Vendor]\[Module]\Service;
	
	use Magento\Catalog\Model\Product;
	use Magento\Framework\App\Filesystem\DirectoryList;
	use Magento\Framework\Filesystem\Io\File;
	
	class ImportImageService
	{
		protected $directoryList;
		protected $file;
		public function __construct(
			DirectoryList $directoryList,
			File $file
		) {
			$this-&gt;directoryList = $directoryList;
			$this-&gt;file = $file;
		}
		public function execute($product, $imageUrl, $visible = false, $imageType = [])
		{
			$tmpDir = $this-&gt;getMediaDirTmpDir();
			$this-&gt;file-&gt;checkAndCreateFolder($tmpDir);
			$newFileName = $tmpDir . baseName($imageUrl);
			$result = $this-&gt;file-&gt;read($imageUrl, $newFileName);
			if ($result) {
				$product-&gt;addImageToMediaGallery($newFileName, $imageType, true, $visible);
			}
			return $result;
		}
		protected function getMediaDirTmpDir()
		{
			return $this-&gt;directoryList-&gt;getPath(DirectoryList::MEDIA) . DIRECTORY_SEPARATOR . 'tmp';
		}
	}
</pre>
<p>在将数据<a href="https://www.360magento.com/magento-migration" target="_blank">迁移到Magento 2</a>时，上述解决方案证明是节省时间的。</p>]]></description>
      <pubDate>Mon, 09 Dec 2019 07:37:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[已解决–未定义索引：在Magento 2.XX中运行Cron时出错]]></title>
      <link>https://www.360magento.com/blog/undefined-index-jobs-error/</link>
      <description><![CDATA[<p><img alt="Magento2 Cron job error" src="https://www.360magento.com/index.php/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yNzAvU29sdmVkLVVuZGVmaW5lZC1pbmRleC1qb2JzLUVycm9yLU9uLVJ1bm5pbmctQ3Jvbi1Jbi1NYWdlbnRvLTJfWF9YLTg4MHgzNDYucG5nIn19/key/1a3c3a1fca1f24547416cddd016979ba/" /></p>
<p>Magento 2中的Cron Job是自动化重复任务的绝佳工具！</p>
<p>但是，有时开发人员<em><strong>在Magento 2.xx中运行cron时</strong></em>会遇到<em><strong>未定义的索引：作业错误</strong></em>。（包括我）</p>
<p>在运行以下命令时，</p>
<pre>/usr/bin/php [magento root directory]/bin/magento cron:run | grep -v "Ran jobs by schedule" &gt;&gt; [magento root directory]/var/log/magento.cron.log
</pre>
<p>Magento将抛出以下异常：</p>
<blockquote>
<p><em><code>[Exception] Notice: Undefined index: jobs in /home/ubuntu/repo/project/vendor/magento/<br /> module-cron/Model/Config/Converter/Db.php on line 39</code></em></p>
</blockquote>
<h2>未定义索引的解决方案：在Magento 2.xx中运行cron时出现作业错误：</h2>
<p>从Magento 1迁移到Magento 2时，您可能会获得<strong>crontab/{groupname}/jobs/{code}</strong>条目，其中缺少组名，即<strong>core_config_data</strong>表中的默认名称。您需要删除错误的表条目，然后运行upgrade 和 deploy命令来解决此问题。</p>
<p>这样错误就解决了。</p>
<p>如果仍然存​​在任何问题，联系我们。</p>
<p>我们很乐意为您服务。</p>
<p>并与其他开发人员共享解决方案。</p>
<p>谢谢。</p>]]></description>
      <pubDate>Thu, 05 Dec 2019 09:42:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何将带有过滤器的列添加到Magento 2订单网格？]]></title>
      <link>https://www.360magento.com/blog/add-column-to-magento-2-orders-grid/</link>
      <description><![CDATA[<p>通常，Magento 2商店的管理员在使用和自定义订单网格时都需要其他选项-基于特定的即用型参数进行过滤可能会成为真正的挑战。<br></p>
<p>最近，Magento开发人员向我提出了一个问题。他试图扩展Magento 2.3.2上的订单网格。网络上的旧帖子并没有起到任何作用，自最近两年以来，Magento发生了很多变化。</p>
<p>于他的问题，我建议你看一看具体案例的解决方案：<br></p>
<p>我们需要在订单网格中添加一列（包含完成购买的客户的区域代码）。此外，商店管理员必须可以通过此新添加的列来过滤订单。<br></p>
<p>这似乎很容易，但是有几件事需要注意。例如，在虚拟订单的情况下，购买商品的购物者可能没有任何送货地址。或者，我们该如何列出地区？开始开发时，应考虑所有这些因素。根据前面提到的问题，我们假设：<br></p>
<ul><li>虚拟产品没有运送地区（“null”）。这将帮助您根据此参数选择它们，</li><li> 就像默认的Magento 2一样，将列出地区并显示代码，而无需将其转换为标签。 </li></ul>
<p>因此，要将新列添加到订单网格，您需要：</p>
<div id="toc_container" class="no_bullets">
<ul class="toc_list"><li><a href="#1_Create_a_new_module">1.创建一个新模块</a></li><li><a href="#2_Add_a_column_to_the_grid">2.在网格中添加一列</a><ul><li><a href="#Explanations"><span class="toc_number toc_depth_2">2.1</span>解释</a></li></ul></li><li><a href="#3_Add_data_to_the_column">3.将数据添加到列</a></li></ul></div>
<h2><span id="1_Create_a_new_module">1.创建一个新模块<br></span></h2>
<p>首先，让我们确定模块和供应商名称。好吧，我不需要选择供应商名称-它是Alwayly（好像我可以选择一样）。我仍然可以选择模块名称。把它命名为<em>ExtendedOrdersGrid</em></p>
<p>让我们创建以下目录：<code>app/code/Alwayly/ExtendedOrdersGrid</code>。要注册一个模块，我们将需要一些标准文件：<br></p>
<pre>
&gt; registration.php

php
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_ExtendedOrdersGrid',
    __DIR__
);


&gt; composer.json

json
{
    "name": "alwayly/module-extended-orders-grid",
    "description": "Extended Orders Grid Extension",
    "require": {
        "magento/module-ui" : "&gt;=100.1.0 &lt; 102",
        "magento/module-sales" : "&gt;=100.0.0 &lt;103"
    },
    "type": "magento2-module",
    "version": "1.0.0",
    "license": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "autoload": {
        "files": [ "registration.php" ],
        "psr-4": {
            "Alwayly\\ExtendedOrdersGrid\\": ""
        }
    }
}


&gt; etc/module.xml

xml
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_ExtendedOrdersGrid" setup_version="1.0.0"&gt;
        &lt;sequence&gt;
            &lt;module name="Magento_Sales"/&gt;
            &lt;module name="Magento_Ui"/&gt;
        &lt;/sequence&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>

<p>重要的是要注意，我已经削减了自动添加到我的IDE中的版权。因此，您可以毫无困难地使用此代码。<img draggable="false" class="emoji" alt="]]></description>
      <pubDate>Fri, 29 Nov 2019 03:31:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[利用Magento Facebook Shop集成工具提升销售]]></title>
      <link>https://www.360magento.com/blog/magento-facebook-shop-integration-tools/</link>
      <description><![CDATA[<p>社交媒体不再仅仅是在线社交网络的场所。用户一直在探索Facebook和Instagram之类的平台，几乎涵盖所有内容&mdash;&mdash;新闻、视频、内容分享以及吸引他们的一切。。&nbsp;</p>
<p>Facebook在全球拥有近24.1亿月活跃用户，同时也为企业提供了无限的平台。卖家只需点击几下即可免费找到潜在的买家，而无需花一分钱进行营销。</p>
<p>以下是<a href="https://blog.hootsuite.com/facebook-statistics/" rel="noopener nofollow" target="_blank">Hootsuite</a>在Facebook营销上的一些统计数据：</p>
<p><strong>&rarr;15％的美国社交媒体用户在Facebook上购物</strong></p>
<p><strong>&rarr;惊人的9000万家小型企业正在使用Facebook，其中大多数都坚持使用免费工具（例如&ldquo;Groups&rdquo;和&ldquo;pages&rdquo;）。&nbsp;</strong></p>
<p><strong>&rarr;2020年有87.1％的美国营销人员将使用Facebook营销</strong></p>
<p>对于全球的卖家来说，这些数字实在太惊人了，以至于在他们的营销策略中不得不考虑Facebook shopping。</p>
<p>Facebook提供了各种可能的方式来吸引用户，包括卖家和潜在买家。如果您看到这里，则可能您已经拥有一家在线商店或正准备<a href="https://www.360magento.com/magento-custom">搭建一个在线商店</a>，并期待利用社交媒体的影响力来增强产品的知名度，从而提高商店的销售额。</p>
<p>该博客讨论了社交媒体购物的见解以及将Facebook与Magento 1和Magento 2平台上的商店集成的最佳工具。</p>
<h2><strong>Magento Facebook页面集成提供什么？</strong></h2>
<p>这是英国一家受欢迎的在线商店<strong><a href="https://www.coxandcox.co.uk/" rel="noopener nofollow" target="_blank">Cox and Cox</a></strong>的示例。该商店基于Magento 2电子商务平台建立的，是各类家居装饰用品之家。<strong>Cox and Cox</strong>通过其<a href="https://www.facebook.com/coxandcoxmailorderltd/" rel="noopener nofollow" target="_blank"><strong>Facebook page store</strong></a>来挖掘其客户范围。</p>
<p><strong><img alt="Cox和Cox Facebook页面应用商店" class="alignnone wp-image-10455 size-full" height="524" src="https://www.360magento.com/media/wysiwyg/blog_264/Coxandcox-Facebook-page-app-store.gif" title="Cox and Cox Facebook页面应用商店" width="1015" /></strong></p>
<p>Facebook page store与常规的Magento商店看起来是否有所不同？</p>
<p>它几乎囊括了理想的在线商店所拥有的一切：</p>
<ul>
<li><strong>产品清单</strong></li>
<li><strong>价格&nbsp;</strong></li>
<li><strong>商品详情</strong></li>
<li><strong>完美的产品目录</strong></li>
<li><strong>结帐页面，该页面重定向到在线商店的结帐页面&nbsp;</strong></li>
</ul>
<p>这家社交媒体巨头使您能够创建一个以客户为中心的商店，在那里您的潜在买家可以很轻松找到您的Magento商店产品。这几乎就像你原来商店的复制品，只是在一个更大的平台&nbsp;</p>
<p>此外，当客户订阅您的Facebook商店时，他将<strong>根据其购物历史</strong>收到<strong>个性化建议</strong>，从而提供再次购买的机会。</p>
<p>好吧，这并不是Facebook页面商店集成可以提供给你的Magento商店的全部功能。根据<a href="https://wearesocial.com/blog/2019/01/digital-2019-global-internet-use-accelerates" rel="noopener nofollow" target="_blank">Wearesocial的数据</a>，<strong>在每月24.1亿活跃FB用户中</strong>，有<strong>22亿使用移动设备，这表明您有90％的潜在受众在移动端上找到您。</strong></p>
<p>如果您仅是Magento商店，则您可能需要雇用移动应用程序开发人员来让移动用户知道您的存在。在面向移动设备的Facebook页面上设有商店，您可以节省开发时间和设计专用移动应用程序的成本。</p>
<p>使用Magento商店的Facebook产品目录，您的大部分任务已经完成了。您的客户在他们的移动设备上（通过Facebook）找到您，并且很有可能为现成的用户体验付费。</p>
<p>接下来出现的问题是：<em><strong>卖家是否有任何DIY解决方案，可直接从其Magento商店建立Facebook页面商店？</strong></em>Magento Marketplace中提供了一些现成的解决方案：</p>
<p><strong><span style="color: #065aa0;"><a href="https://cedcommerce.com/magento-2-extensions/facebook-shop-magento-2-integration" rel="nofollow noopener" target="_blank">Cedcommerce Facebook商店整合</a></span></strong></p>
<p><img alt="Magento2 Commerce" class="alignnone wp-image-10512 size-full" height="250" src="https://www.360magento.com/media/wysiwyg/blog_264/Ced-Commerce-2.png" title="Magento2 Commerce" width="980" /></p>
<p>该品牌为Magento推出了两个Facebook商店整合工具</p>
<p>&rarr; <strong>Magento1的</strong> Facebook商店集成<strong></strong></p>
<p>&rarr; <strong>Magento2的</strong> Facebook商店集成<strong></strong></p>
<p>这是Cedcommerce Magento Facebook商店集成提供的配置，管理员可以在其中启用Facebook设置以及Shop标语。</p>
<p><img alt="magento 2后端" class="aligncenter wp-image-10457 size-full" height="400" src="https://www.360magento.com/media/wysiwyg/blog_264/Cedcommerce-magento-2-backend.png" title="magento 2后端" width="900" /></p>
<p>以下是此扩展程序提供的一些主要功能。</p>
<p><strong>控制产品：</strong></p>
<p>管理员可以完全控制他要在Facebook Page商店上显示的产品。他可以选择添加新产品，也可以单击简单的按钮撤回现有产品。</p>
<p><strong>批量产品列表：</strong></p>
<p>卖家可以在Facebook页面商店中批量添加产品。他们可以选择多个产品，然后将其导出到FB。</p>
<p><strong>产品信息变更：</strong></p>
<p>Facebook商店集成使您可以从单个面板管理产品详细信息。管理员可以通过Magento Admin修改详细信息，最终通过集成工具将其反映在Facebook页面商店中。</p>
<p>管理员因此可以节省在多个平台上更新信息的时间。</p>
<p><strong>同步库存</strong></p>
<p>Magento 1和Magento 2 Facebook商店集成可以很好地管理集中式库存。该工具使用Facebook API和Magento商店来连续检查产品的可用性。</p>
<p><strong>重定向到结帐页面</strong></p>
<p>Facebook页面商店将用户重定向到Magento结帐页面。这样，卖方就可以轻松地管理订单。该功能适用​​于Magento 1商店和Magento 2商店。&nbsp;</p>
<p>这是用于管理Facebook商店产品的Magento管理面板的屏幕截图：</p>
<p><img alt="facebook magento面板" class="aligncenter wp-image-10458 size-full" height="480" src="https://www.360magento.com/media/wysiwyg/blog_264/Cedcommerce-magento-panel.png" title="facebook magento面板" width="980" /></p>
<p><strong>价格：$ 199.00</strong></p>
<p>Magento 1商店也提供类似的扩展。</p>
<p><strong>注意：</strong>无论如何，我还是得告诉您，Magento将在2020年6月终止对Magento1平台的官方支持。如果您仍然对迁移过程一无所知，请阅读我们的博客：<a href="https://www.360magento.com/blog/migrate-magento-1-9-x-to-2-3-x/" title="如何将Magento1迁移到Magento2">将Magento1迁移到Magento2</a>。您也可以向我们咨询<a href="https://www.360magento.com/magento-migration" title="Magento迁移">Magento迁移服务</a>。我们的Magento专家小组可以为您提供帮助。</p>
<p><strong><span style="color: #065aa0;"><a href="https://marketplace.magento.com/zestardtech-zestard-facebookstore.html" rel="nofollow noopener" target="_blank">Zestard Facebook Store</a></span></strong></p>
<p><img alt="Facebook Magento集成" class="alignnone wp-image-10514 size-full" height="250" src="https://www.360magento.com/media/wysiwyg/blog_264/Zestard.png" title="Facebook Magento集成" width="980" /></p>
<p>Zestard提供了出色的Magento Facebook商店集成工具。该品牌声称可以在社交媒体上轻松设置商店。正如我们在CedCommerce Facebook商店集成中所讨论的，它具有以下共同特征：</p>
<p>&rarr;大宗商品清单</p>
<p>&rarr;从Magento管理面板更新产品信息</p>
<p>此外，该工具还具有一些其他功能：</p>
<p><strong>商店特定的设计：</strong></p>
<p>该工具使用Magento配置中的内部CSS设计FB商店页面。该功能使其成为在Facebook页面商店上创建Magento产品目录的更灵活的选择。你现在可以有一个Facebook商店提供几乎与你原来的Magento商店相同的用户体验。</p>
<p><strong>针对速度和性能进行了优化：</strong></p>
<p>该工具优化了最终商店的速度和性能，使产品加载速度更快。</p>
<p>这是管理面板中用于管理Magento Facebook商店集成的屏幕截图。</p>
<p><img alt="Facebook连接设置" class="aligncenter wp-image-10462 size-full" height="349" src="https://www.360magento.com/media/wysiwyg/blog_264/Zestard-Facebook-Connection-Setting.png" title="Facebook连接设置" width="837" /></p>
<p><strong>价钱：$ 99</strong></p>
<p><strong><span style="color: #065aa0;"><a href="https://marketplace.magento.com/meetanshi-magento2-facebook-store-integration.html" target="_blank">Meetanshi Facebook商店整合</a></span></strong></p>
<p><img alt="Facebook商店整合" class="alignnone wp-image-10565 size-full" height="250" src="https://www.360magento.com/media/wysiwyg/blog_264/Zestard-1.png" title="Facebook商店整合" width="980" /></p>
<p>Meetanshi使用新的工具为Magento商店分配Facebook页面而声名远播。有足够的理由这样说。</p>
<p><strong>计划产品生成：&nbsp;</strong></p>
<p>用户可以安排具有开始时间的产品，以将产品生成为CSV文件。</p>
<p>该面板还允许管理员像其他工具一样手动导出该内容。自动化平台使管理员不必频繁访问Magento面板。</p>
<p><strong>为产品添加属性：</strong>&nbsp;</p>
<p>管理员可以为商品添加标签，例如New/Used/Refurbished，就像亚马逊在其商店中所做的那样。</p>
<p><strong>添加类别：</strong></p>
<p>借助此Magento Facebook商店集成应用程序，管理员可以提及其他详细信息，例如产品类别和产品状况。</p>
<p>此Magento Facebook商店集成工具的常见功能与其他功能共有：</p>
<p>&rarr;在Facebook商店中显示产品和产品信息</p>
<p>&rarr;产品完全在管理员的控制之下，可以添加或删除&nbsp;</p>
<p>Magento管理面板中的配置页面说明了一切。</p>
<p><img alt="Facebook商店整合" class="alignnone wp-image-10531 size-full" height="420" src="https://www.360magento.com/media/wysiwyg/blog_264/Facebook-Store-Integration.png" title="Facebook商店整合" width="980" /></p>
<p><strong>价格：$ 189</strong></p>
<p>有很多解决方案可以帮助您直接从Magento商店展示Facebook页面产品目录。该列表中的所有解决方案在一定程度上都具有一些共同的特征。</p>
<p>开发人员之所以能够想出数不清的解决方案，仅仅是因为Facebook API允许他们这样做。此集成的基本工作流程如下：：</p>
<p>1.管理员必须从管理面板以CSV格式导出产品。</p>
<p>2. Facebook商店仅通过手动上传接受CSV格式的文件。</p>
<p>3. Magento Store产品的产品ID与Facebook API提供的ID相匹配。</p>
<p>4.库存处于连续同步状态</p>
<p>功能的交叉显然可以说明一件事-Magento后端可以为创建商店的Facebook API提供更多功能。您的业​​务需求将决定哪种工具最适合您。</p>
<p>但是，值得注意的是，这些工具倾向于避免一些被其他人用作USP的功能。主要原因之一可能是无数企业及其需求的实现。&nbsp;</p>
<p>虽然像上面提到的那样现成的解决方案可以证明是一种方便的解决方案，但是您可以要求我们进行定制设计的Magento Facebook商店集成。</p>
<p><strong>定制设计的Magento Facebook商店集成扩展的优势：</strong></p>
<p>1.您的自定义扩展程序具有您选择的功能</p>
<p>2.扩展没有过载影响性能的函数</p>
<p>3.您可以要求一个易于管理的自定义管理面板</p>
<p>4.您已经知道管理面板的全部潜能</p>
<p>&nbsp;360Magento的<a href="https://www.360magento.com/contacts/" target="_blank">Magento开发专家</a>一直根据客户的特定业务需求为他们提供即用型解决方案.</p>
<h2><strong>关于设置Magento Facebook商店集成的总结</strong></h2>
<p>显而易见，Facebook专页商店可以为您提供期望的Magento商店曝光率，以及您一直渴望的访问量和转化率。有了这些随时可以帮助你的工具，你可以为涌入量客户的客户而做准备。</p>
<p>对于您的Magento商店的个性化解决方案，您可以聘请我们经验丰富的<a href="https://www.360magento.com/" target="_blank">Magento开发团队</a> &nbsp;，他们可以根据您的自定义要求进行设计。在此处<a href="https://www.360magento.com/contacts/">联系我们</a>以定制Magento扩展或进行其他定制开发</p>]]></description>
      <pubDate>Wed, 20 Nov 2019 09:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2主题中如何包含使用javascript脚本？]]></title>
      <link>https://www.360magento.com/blog/how-to-include-custom-javascript-magento2/</link>
      <description><![CDATA[<p>Magento 2允许在整个站点，某个页面甚至页面的指定块和部分链接自定义javascript脚本。</p>
<p><a href="#step_1">在页面上包含自定义JavaScript有哪些选择<br></a><a href="#step_2">内联JavaScript的优缺点是什么？<br></a><a href="#step_3">如何在页面上异步加载JavaScript？<br></a><a href="#step_4">如何使用布局XML中的块参数配置页面上的JavaScript？<br></a><a href="#step_5">如何直接在.phtml模板中完成？</a></p>
<h2><strong><a id="step_1"></a>在页面上包含自定义JavaScript有哪些选择？</strong></h2>
<p>您可以通过以下三种方式进行操作：通过一个特殊的引擎框架将脚本连接到页面的头部，或者借助RequireJS（最佳的选项）。让我们考虑<strong>第一种方法</strong> –将脚本连接到页面头部。请记住，如果使用他的方法，将不可能覆盖脚本中的类，并且将最大程度地减少用户交互。当您通过已知库的cdn连接，或者您的脚本使用第三方聚合器时，此方法可能是最合适的。</p>
<p><span style="font-weight: 400;"><a id="step_5"></a>连接过程如下所示：</span><br></p>
<pre>
&lt;script src=”absolute or relative path to the script” &gt;&lt;/script&gt;
</pre>
<p><br><span style="font-weight: 400;">如果路径是绝对的，请&nbsp;</span>使用<br></p>
<pre>
src_type="url"
</pre>
<p><br>
或者<br></p>
<pre>
&lt;script type="text/javascript"&gt;script content&lt;/script&gt;
</pre>
<p><br>
内联在phtml中。</p>
<p>要改进此方法，请尝试在可以的地方使用deferred =”true”属性或至少async =”true”（但是，该属性仅适用于通过引用的脚本，不适用于嵌入式脚本）。更重要的是，<span style="font-weight: 400;">替换掉&nbsp;</span><br></p>
<pre>
&lt;script src="js/script.js"/&gt;
</pre>
<p>您可以使用</p>
<pre>
&lt;link src="js/script.js"/&gt;
</pre>
<p>现在，让我们继续<strong>第二种方法</strong> -通过Magento框架。您可以通过两种方式包含脚本：</p>
<ul><li>使用以下属性<br>
<pre>
data-mage-init='{ "VendorName_Module/js/script": {"configuration-value":true} }'
</pre>
<br>
它将请求一个脚本，其中包含要使用的元素及其参数（动画速度，元素数量等）。</li>
</ul><p>脚本的最终形式如下：<br></p>
<pre>
app/code/VendorName/Module/view/frontend/web/js/script.js
define([], function() {
return function(element, config) {
/* config: {
configuration-value: true
} */
};
});
</pre>
<ul><li>使用标签脚本<br>
<pre>
&lt;script type="script/x-magento-init"&gt;
{".element-selector": 
{"VendorName_Module/js/script": 
{"configuration-value": true}
}
}
&lt;/script&gt;
</pre>
<br>
&nbsp;</li>
</ul><p><span style="font-weight: 400;">其中.element-selector是将为其应用模块的选择器。如果选择器匹配的不是一个元素，而是几个元素，它将应用于每个元素。</span></p>
<p><span style="font-weight: 400;">连接依赖于第三方库的脚本不是最好的方法，但无疑是简单的方法：</span><br></p>
<pre>
&lt;script type="text/javascript"&gt;
require([
"VendorName_Module/js/script" 	//&lt;span style="font-weight: 400;"&gt;indicate library dependence&lt;/span&gt;
], function(loader) {
/* your script */
});
&lt;/script&gt;
</pre>
<p><br>
<strong>第三种方法</strong>是通过RequireJS。</p>
<p>这种方法允许将脚本连接到任何页面，并且比前两个页面工作更快，因为初始化所需的代码更少。<br></p>
<pre>
var config = {
deps: ['VendorName_Module/js/script']
};
</pre>
<h2><span style="color: #000000;"><a id="step_2"></a>内联JavaScript的优缺点是什么？</span></h2>
<p>内联JS的优点包括：</p>
<ul><li>易于连接</li>
<li>页面上没有其他请求</li>
</ul><p>但是此方法有一些缺点，因为代码：</p>
<ul><li>没有延迟并立即执行，因此不建议放置较大的内联代码；</li>
<li>很难再次使用；您必须再次将其插入其他页面；</li>
<li>在模板中很难找到，这就是为什么难以维护的原因；</li>
<li>没有被浏览器缓存，因为它是页面的一部分；</li>
<li>违反了Content-Security-Policy，这在跨站点脚本编制方面非常危险。</li>
</ul><h2><span style="color: #000000;"><a id="step_3"></a>如何在页面上异步加载JavaScript？</span></h2>
<p>这可以通过<strong>define</strong>方法来完成。</p>
<p>Require立即执行，而define将等待其他模块的调用。例如：<br></p>
<pre>
require([
'VendorName_Module/js/script'
], function(nameFunction) {
/* … */
});
</pre>
<h2><span style="color: #000000;"><strong><a id="step_4"></a>如何使用布局XML中的块参数配置页面上的JavaScript？</strong></span></h2>
<p>在AbstractBlock中，有一个getJsLayout方法，该方法返回带有jsLayout –参数的数组。在前端<br></p>
<pre>
&lt;?= $block-&gt;getJsLayout();?&gt;
</pre>
<p><br><span style="font-weight: 400;"> 会以jsLayout格式返回以json格式显示的一行。</span></p>
<p><span style="font-weight: 400;">因此，使用&lt;arguments /&gt;，您可以构建自己的json对象：</span><br></p>
<pre>
&lt;referenceBlock name="nameBlock"&gt;
	&lt;arguments&gt;
		&lt;argument name="jsLayout" xsi:type="array"&gt;
			&lt;item name="components" xsi:type="array"&gt;
			&lt;item name="script" xsi:type="array"&gt;
			&lt;item name="component" xsi:type="string"&gt;VendorName_Module/js/script&lt;/item&gt;
			&lt;/item&gt;&lt;/item&gt;
		&lt;/argument&gt;
	&lt;/arguments&gt;
&lt;/referenceBlock&gt;
</pre>
<p><br>
这就是本主题的全部内容。我希望我的文章对你有用。</p>
<p>寻找专业的<a href="https://www.360magento.com/" target="_blank" rel="noopener">Magento 2开发团队</a>联系我们</p>]]></description>
      <pubDate>Fri, 15 Nov 2019 07:02:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何生成sitemap文件]]></title>
      <link>https://www.360magento.com/blog/how-to-create-sitemap-in-magento/</link>
      <description><![CDATA[<p>站点地图是网站上所有URL的结构化列表，并带有其参数列表。站点地图的主要功能是使搜索引擎更容易理解和索引您的网站内容。网站站点地图也是一种有用的工具，以确保确保Googlebot能够看到您网站上的所有内容。幸运的是，大多数CMS系统都会生成一个。</p>
<p>最多有六种不同类型的站点地图，但是在本文中，我们将重点介绍两种最常见且被认为是最常用的站点地图格式：HTML和XML。</p>
<p><strong>目录：</strong></p>
<p><a href="#step_1">什么是HTML网站地图？<br></a><a href="#step_2">什么是XML网站地图？<br></a><a href="#step_3">HTML和XML网站地图有什么区别？<br></a><a href="#step_4">如何在Magento中创建站点地图XML？<br></a><a href="#step_5">如何向Google提交站点地图？<br></a><a href="#step_6">如何为自定义模型生成站点地图？</a></p>
<h2 id="step_1">什么是HTML网站地图？</h2>
<p>简单来说，HTML网站地图是一页上网站导航的轮廓文本版本。这种类型的站点地图对于任何类型的网站都是必不可少的，无论是电子商务网站，非营利性网站，博客网站还是娱乐网站。HTML网站地图的重要功能是使某些用户可以更轻松地浏览网站，因为他们可能需要的所有资源都可以快速访问。这就是为什么创建并保持用户友好的站点地图很重要的原因。如果它易于导航，快速加载并且结构整洁，那么您的网站的访问者可以轻松使用它。</p>
<p>根据HTML网站地图的最佳做法，它应具有链接到您网站上每个页面的锚链接。它将帮助用户浏览网站，并最终使其搜索引擎可爬行。读取站点地图后，搜索引擎将了解站点上的每个页面，包括大多数搜索引擎不断运行的，无法通过正常爬网过程轻易发现的所有URL。</p>
<h2>HTML网站地图的重要性</h2>
<p>HTML网站地图的最大好处是，它是清晰了解网站及其所有页面的好方法。这使站点地图成为可靠的导航工具，可随时在网站页脚使用。在大多数情况下，提供适当的HTML网站地图将改善用户体验，从而对您网站的排名产生影响。</p>
<p>此外，为了提升您的在线形象，这种类型的站点地图非常有价值，因为它是搜索引擎将阅读的页面，以了解您的网站并在其中建立索引。当网站上的信息是新的并且没有太多链接时，或者某些文章包含很多内容而链接不正确时，搜索引擎优化对具有动态内容的网站特别有用。</p>
<h2 id="step_2">什么是XML网站地图？</h2>
<p>XML网站地图是一个文本文件，用于详细说明网站上的所有URL。它可以在每个URL上包含额外的数据，包括解决其最新更新，其优先级，发生平均频率变化的信息，与站点其余部分的URL关系其余部分的关系以及是否有其他语言版本的相同URL。根据Google文档，XML站点地图对于具有大量存档或大量媒体内容的网站很有用，尽管我们认为，即使您的网络商店不符合这些特征，拥有站点地图仍将在很大程度上受益。</p>
<p>站点地图协议格式包含XML标签，并且应：</p>
<ul><li>以&lt;urlset&gt;开头标记开始，以&lt;/ urlset&gt;结束标记结束。</li>
<li>包括URL的&lt;url&gt;项作为父XML标记。</li>
<li>在&lt;urlset&gt;标记内指定名称空间（协议标准）。</li>
<li>包括&lt;url&gt;父标记的&lt;loc&gt;子条目。</li> 
</ul><p>其他标签是可选的，它们的支持可能因搜索引擎而异。因此，在包含任何这些可选标记之前，请查阅每个搜索引擎的文档。</p>
<h2>为什么XML网站地图对SEO很重要？</h2>
<p>创建站点地图对于SEO尤其有用。XML站点地图是为搜索漫游器设计的，更新的XML文件可用于对搜索引擎执行ping操作，并向它们发出更改和更新警报。XML文档使搜索引擎知道有新鲜的新内容。拥有完善的XML网站地图，可以极大地增加您的网页被搜索引擎抓取和编制索引的机会，尤其是在网站的导航系统无法正常工作或常规内部链接策略无法提供与所有您的页面。</p>
<p>如果您的网站是国际网站或将同一页面翻译成不同语言的网站，则可以使用XML网站地图来对搜索引擎的内容进行排序。该站点地图将能够告知抓取工具该页面具有多个版本，并且他们将使用此信息来确保根据用户的语言或位置向他们提供正确的网站版本。</p>
<h2 id="step_3">HTML和XML网站地图有什么区别？</h2>
<p>由于本文针对两个站点地图，因此必须清楚地了解它们之间的区别，这一点很重要。因此，本段专门讨论HTML网站地图与XML网站地图的比较。</p>
<p>HTML和XML网站地图在搜索引擎优化方面有不同的用途和价值。HTML和XML站点地图之间的主要区别在于，HTML站点地图主要是为用户编写的，是帮助他们全面了解网站的最主要工具，而XML站点地图则首先是为搜索引擎编写的。</p>
<p>HTML站点地图是网站，页面和信息的一般概述，可能对用户有用。虽然主要由网站的访问者使用，但它也可以帮助搜索引擎排名。</p>
<p>简而言之，主要创建XML来促进搜索引擎的功能，为搜索引擎提供有关网站结构的所有必要信息。</p>
<h2 id="step_4">如何在Magento中创建站点地图XML？</h2>
<p>您将在下面找到有关如何在Magento后台建立站点地图的清晰的分步说明。</p>
<p>第1步：导航至Stores-&gt;Settings-&gt;Configuration。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_262/settings-configuration.png" alt="settings configuration" /></p>
<p>步骤2：在“Catalog”选项中，选择“XML Sitemap”。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/catalog-xml-sitemap.png" alt="catalog xml sitemap" />
</p>
<p>请记住，根据任务，可以针对默认配置以及网站或商店视图执行这些设置。</p>
<p>步骤＃3：在“Categories Options”，“ Products Options”和“CMS Pages Options”部分中配置类别，产品和CMS页面的更新频率和优先级。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/categories-option.png" alt="categories option"
</p>
<p>在大多数情况下，这些部分中的默认值是首选值，但如果您需要引入一些自定义更改，以下是必须修改的字段。</p>
<p>以下值可用于频率设置：</p>
<ul><li>Always</li>
<li>Hourly</li>
<li>Daily</li>
<li>Weekly</li>
<li>Monthly</li>
<li>Yearly</li>
<li>Never</li>
</ul><p>频率值针对搜索引擎爬虫程序，并设置爬虫程序访问该页面的频率。建议将每次访问时更改的页面设置为Always。Never值应应用于已存档的页面；这样，搜索引擎爬虫将很少访问它们，以跟踪无法预料的变化（如果有的话）。但是，爬虫程序可能会忽略您设置的值，并更频繁地访问具有“Weekly”值的页面，而不是具有“Hourly”值的页面。</p>
<p>优先级值设置为0到1，其中1是最高优先级。</p>
<p>使用优先级设置，您可以指定哪些页面最重要，哪些页面不那么重要。因此，为所有页面设置1优先级是没有用的，因为所有页面都同样重要。对于“Priority”，默认值为0.5，这是大多数情况下的建议值。</p>
<p>另外，在“Add Images to Sitemap”字段中设置所需的站点地图图像–无，仅基础或全部。</p>
<p>完成后，按Save Config。</p>
<p>步骤＃4：设置站点地图生成设置。</p>
<p>展开“ Generation Settings”部分并配置以下内容：</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/generation-settings.png" alt="generation settings" />
</p>
<ul><li>Enabled-启用站点地图生成，因此设置为“Yes”。</li>
<li>Start Time–启动站点地图生成的服务器时间。最好的时间是晚上，当负载最小时，</li>
<li>Frequency-网站地图更新的频率。最好的方法是将值设置为等于商店中产品添加或更改的频率。</li>
<li>Error Email Recipient-有关生成站点地图错误的消息将被发送到的电子邮件地址。</li>
<li>Error Email Sender–发送有关站点地图生成错误的消息的电子邮件地址。可用选项包括General Contact, Sales representative, Customer support, Custom email。</li>
</ul><p>要为这些字段设置电子邮件地址，请导航至Stores-&gt;Configuration-&gt; General-&gt;Store Email Addresses。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/store-emain-addresses.png" alt="store emain addresses"
</p>
<p>Magento设置允许为整个网站或单独的商店定义它们。</p>
<p>Error Email Template–将用于生成站点地图通知的消息模板。</p>
<p>步骤＃5：定义站点地图文件限制</p>
<p>展开Sitemap File Limits部分，并填写以下字段：</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/sitemap-file-limits.png" alt="sitemap file limits" />
</p>
<ul><li>Maximum No of URLs Per File-限制添加到网站的URL数。</li>
<li>Maximum File Size–限制文件大小。</li>
</ul><p>步骤＃6：定义将站点地图添加到robots.txt中的规则</p>
<p>展开“Search Engine Submission Settings”部分，然后将“Enable Submission”字段设置为“Yes”。此配置将站点地图链接添加到robots.txt文件中，爬虫程序使用该文件来获取网站索引规则。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/search-engine-submission-settings.png" alt="search engine submission settings" />
</p>
<p>步骤＃7：按“Save Config”并刷新配置缓存以启用您所做的更改。</p>
<p>步骤＃8：要设置站点地图生成，请导航至Marketing-&gt;SEO & Search-&gt;Sitemap。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/marketing-sitemap.png" alt="marketing sitemap" />
</p>
<p>步骤＃9：按右上角的Add Sitemap按钮。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/add-sitemap-button.png" alt="add sitemap button" />
</p>
<p>步骤＃10：输入Filename和Path值。</p>
<p>
<img class="aligncenter size-full wp-image-23495" src="https://www.360magento.com/media/wysiwyg/blog_262/new-site-map.png" alt="new site map" />
</p>
<p>通常，sitemap.xml用作文件名，而路径设置为正斜杠。请记住，创建站点地图文件的目录必须是可写的。</p>
<p>步骤＃11：按“Save”或“Save & Generate”按钮。</p>
<p>如果按Save，则地图将在设置日期和时间自动生成。否则，如果按“Save & Generate”，则将立即生成站点地图。</p>
<p>如果您的Magento商店中有大量产品，则第一种选择更可取，您可以将生成时间安排在商店负荷最小的时候。</p>
<h2 id="step_5">如何向Google提交站点地图？</h2>
<p>可以通过Google Search Console来将XML网站地图提交给Google，不需要特别的知识。以下是一个简单的分步指南，将指导您完成此过程。</p>
<p><strong>注意！</strong>在向Google添加站点地图之前，必须先在Google Search Console中确认其对网站的权利。</p>
<p>步骤1：转到Google Search Console工具，然后输入网站的地址。</p>
<p>步骤2：在左侧栏中选择Sitemap。</p>
<p>步骤＃3：在相应的输入行中输入不带域名地址的XML网站地图URL（在屏幕截图中标记为2）。通常，地址是站点URL + sitemap.xml，但是可以肯定的是，您可以签入Magento站点地图生成设置。</p>
<p>步骤4：按Submit（提交）按钮。</p>
<p>站点地图将添加到web爬虫程序队列中。您可以在下面提交的站点地图部分中跟踪其站点地图提交的进度。</p>
<p>如果出现以下警告–“Your sitemap appears to be an HTML page. Please use a supported sitemap format instead” –在Google提交站点地图时出现，然后您需要检查在第3步中提交的站点地图URL是否正确。</p>
<p>
<img src="https://www.360magento.com/media/wysiwyg/blog_262/google-search-console.png" alt="google search console" />
</p>
<!-- Shortcoder conditions not met -->
<h2 id="step_6">如何为自定义模型生成站点地图？</h2>
<p>通过将新的ItemProvider添加到\Magento\Sitemap\Model\ItemProvider\Composite中，可以从自定义模型添加URL。</p>
<p>以下是将CMS页面添加到站点地图中的示例。尽管CMS页面默认包含在XML网站地图中，但是我们的示例演示了如何添加任何模型：</p>
<p><strong>app/code/VendorName/Sitemap/etc/module.xml</strong><br></p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
	&lt;module name="VendorName_Sitemap" &gt;
    	&lt;sequence&gt;
        	&lt;module name="Magento_Sitemap"/&gt;
    	&lt;/sequence&gt;
	&lt;/module&gt;
&lt;/config&gt;
</pre>
<p><br><strong>app/code/VendorName/Sitemap/etc/di.xml</strong><br></p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"&gt;

	&lt;!-- Types --&gt;

	&lt;type name="Magento\Sitemap\Model\ItemProvider\Composite"&gt;
    	&lt;arguments&gt;
        	&lt;argument name="itemProviders" xsi:type="array"&gt;
            	&lt;item name="examplePagesProvider" xsi:type="object"&gt;
                	VendorName\Sitemap\Model\ItemProvider\ExamplePages
            	&lt;/item&gt;
        	&lt;/argument&gt;
    	&lt;/arguments&gt;
	&lt;/type&gt;
	&lt;type name="VendorName\Sitemap\Model\ItemProvider\ExamplePages"&gt;
    	&lt;arguments&gt;
        	&lt;argument name="configReader" xsi:type="object"&gt;
            	VendorName\Sitemap\Model\ItemProvider\ExamplePagesConfigReader
        	&lt;/argument&gt;
    	&lt;/arguments&gt;
	&lt;/type&gt;

&lt;/config&gt;
</pre>
<p><br><strong>app/code/VendorName/Sitemap/etc/adminhtml/system.xml</strong><br></p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"&gt;
	&lt;system&gt;
    	&lt;section id="sitemap"&gt;
        	&lt;group id="example_pages" translate="label" type="text" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
            	&lt;label&gt;
                	&lt;![CDATA[Example Pages Options]]&gt;
            	&lt;/label&gt;
            	&lt;field id="changefreq" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"&gt;
                	&lt;label&gt;
                    	&lt;![CDATA[Frequency]]&gt;
                	&lt;/label&gt;
                	&lt;source_model&gt;Magento\Sitemap\Model\Config\Source\Frequency&lt;/source_model&gt;
            	&lt;/field&gt;
            	&lt;field id="priority" translate="label comment" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"&gt;
                	&lt;label&gt;
                    	&lt;![CDATA[Priority]]&gt;
                	&lt;/label&gt;
                	&lt;comment&gt;
                    	&lt;![CDATA[Valid values range from 0.0 to 1.0.]]&gt;
                	&lt;/comment&gt;
                	&lt;backend_model&gt;Magento\Sitemap\Model\Config\Backend\Priority&lt;/backend_model&gt;
            	&lt;/field&gt;
        	&lt;/group&gt;
    	&lt;/section&gt;
	&lt;/system&gt;
&lt;/config&gt;
</pre>

<p><b>app/code/VendorName/Sitemap/Model/ItemProvider/ExamplePages.php</b><br></p>
<pre>
&lt;?php

namespace VendorName\Sitemap\Model\ItemProvider;

use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Sitemap\Model\ItemProvider\ItemProviderInterface;
use Magento\Sitemap\Model\SitemapItemFactory;


/**
 * Class ExamplePages
 * @package VendorName\Sitemap\Model\ItemProvider
 */
class ExamplePages implements ItemProviderInterface
{
	/**
 	* @var ExamplePagesConfigReader
 	*/
	private $configReader;

	/**
 	* @var SitemapItemFactory
 	*/
	private $itemFactory;

	/**
 	* @var \Magento\Cms\Api\PageRepositoryInterface
 	*/
	private $pageRepositoryInterface;

	/**
 	* @var \Magento\Framework\Api\SearchCriteriaBuilder
 	*/
	private $searchCriteriaBuilder;

	/**
 	* @var array
 	*/
	protected $sitemapItems = [];

	/**
 	* ExamplePages constructor.
 	* @param ExamplePagesConfigReader $configReader
 	* @param SitemapItemFactory $itemFactory
 	* @param \Magento\Cms\Api\PageRepositoryInterface $pageRepositoryInterface
 	* @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
 	*/
	public function __construct(
    	ExamplePagesConfigReader $configReader,
    	SitemapItemFactory $itemFactory,

//    	CMS pages will be used as an example

    	\Magento\Cms\Api\PageRepositoryInterface $pageRepositoryInterface,
    	\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
	) {
    	$this-&gt;configReader = $configReader;
    	$this-&gt;itemFactory = $itemFactory;

    	$this-&gt;pageRepositoryInterface = $pageRepositoryInterface;
    	$this-&gt;searchCriteriaBuilder = $searchCriteriaBuilder;
	}

	/**
 	* @param int $storeId
 	* @return array
 	* @throws NoSuchEntityException
 	*/
	public function getItems($storeId): array
	{

//  	CMS pages will be used as an example

    	$searchCriteria = $searchCriteria = $this-&gt;searchCriteriaBuilder-&gt;create();
    	$pages = $this-&gt;pageRepositoryInterface-&gt;getList($searchCriteria)-&gt;getItems();

    	foreach ($pages as $page) {
        	$this-&gt;sitemapItems[] = $this-&gt;itemFactory-&gt;create(
            	[
                	'url' =&gt; $page-&gt;getIdentifier(),
                	'updatedAt' =&gt; $page-&gt;getUpdateTime(),
                	'priority' =&gt; $this-&gt;getPriority($storeId),
                	'changeFrequency' =&gt; $this-&gt;getChangeFrequency($storeId)
            	]
        	);
    	}

    	return $this-&gt;sitemapItems;
	}

	/**
 	* @param int $storeId
 	*
 	* @return string
 	*
 	*/
	private function getChangeFrequency(int $storeId): string
	{
    	return $this-&gt;configReader-&gt;getChangeFrequency($storeId);
	}

	/**
 	* @param int $storeId
 	*
 	* @return string
 	*
 	*/
	private function getPriority(int $storeId): string
	{
    	return $this-&gt;configReader-&gt;getPriority($storeId);
	}

}
</pre>
<p><br><b>app/code/VendorName/Sitemap/Model/ItemProvider/ExamplePagesConfigReader.php</b><br></p>
<pre>
&lt;?php

namespace VendorName\Sitemap\Model\ItemProvider;

use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface;;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;

/**
 * Class ExamplePagesConfigReader
 * @package VendorName\Sitemap\Model\ItemProvider
 */
class ExamplePagesConfigReader implements ConfigReaderInterface
{
	const XML_PATH_CHANGE_FREQUENCY = 'sitemap/example_pages/changefreq';
	const XML_PATH_PRIORITY = 'sitemap/example_pages/priority';

	/**
 	* @var ScopeConfigInterface
 	*/
	private $scopeConfig;

	/**
 	* @param ScopeConfigInterface $scopeConfig
 	*
 	*/
	public function __construct(ScopeConfigInterface $scopeConfig)
	{
    	$this-&gt;scopeConfig = $scopeConfig;
	}

	/**
 	* @param int $storeId
 	* @return string
 	*/
	public function getPriority($storeId): string
	{
    	$storeId = (int)$storeId;
    	return $this-&gt;getConfigValue(self::XML_PATH_PRIORITY, $storeId);
	}

	/**
 	* @param int $storeId
 	* @return string
 	*/
	public function getChangeFrequency($storeId): string
	{
    	$storeId = (int)$storeId;
    	return $this-&gt;getConfigValue(self::XML_PATH_CHANGE_FREQUENCY, $storeId);
	}

	/**
 	* @param string $configPath
 	* @param int $storeId
 	*
 	* @return string
 	*
 	*/
	private function getConfigValue(string $configPath, int $storeId): string
	{
    	$configValue = $this-&gt;scopeConfig-&gt;getValue(
        	$configPath,
        	ScopeInterface::SCOPE_STORE,
        	$storeId
    	);
    	return (string)$configValue;
	}
}
</pre>
<h2>总结</h2>
<p>如您所见，有两种主要的站点地图类型-XML和HTML。它们提供不同的功能-一种用于搜索引擎，另一种用于用户体验和搜索优化。按照上面提供的详细分步说明，您可以自行创建必要的站点地图，但是如果您需要支持，可以转到<a href="https://www.360magento.com/magento-maintenance" target="_blank" rel="noopener">“技术支持”</a>，我们将解决您可能遇到的任何问题，并为您提供优质的Magento开发解决方案。</p>]]></description>
      <pubDate>Tue, 05 Nov 2019 02:20:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2中如何添加js(javascript)脚本]]></title>
      <link>https://www.360magento.com/blog/add-javascript-to-magento-2/</link>
      <description><![CDATA[<p>在本文中，我们将研究Magento 2中的如何连接JavaScript。这里有四种连接方法：</p>
<p><a href="#step_1">通过&lt;script type =&rdquo;text/javascript&gt; &lt;/script&gt; <br /></a><a href="#step_2">以Magento风格<br /></a><a href="#step_3">命令式方法<br /></a><a href="#step_4">通过require-config.js文件</a></p>
<div class="h2text">
<h2><a id="step_1"></a>通过&lt;script type =&rdquo;text/javascript&gt; &lt;/script&gt;</h2>
</div>
<p><span style="font-weight: 400;">这是最简单但不推荐的方法，唯一的一个优点就是简单。如果要连接第三方库，可以保留此方法。在其他情况下，这种方法有几个明显的缺点：代码将很难再次使用，并且可能阻止页面加载（当然，这取决于脚本包含的内容）。显然，随着项目复杂性的增加，控制此类代码变得非常困难。在讨论此方法时，我们还应提及CSP（内容安全策略）。以这种方式连接的代码非常容易受到CSS攻击（跨站点脚本）的攻击。如果仍要使用此方法，则在连接时添加以下属性：deferred =&ldquo;true&rdquo;，async =&ldquo;true&rdquo;。</span></p>
<div class="h2text">
<h2><a id="step_2"></a>Magento风格</h2>
</div>
<p><span style="font-weight: 400;">现在，让我们考虑以Magento风格连接JS脚本的方法。首先，值得一提的是Magento 2使用RequireJS脚本来连接JS。这种方法允许模块化使用JS，以及后台和异步加载。要了解更多信息，请访问</span><a href="https://requirejs.org/" rel="noopener" target="_blank"><span style="font-weight: 400;">requirejs.org</span></a><span style="font-weight: 400;">的链接</span><span style="font-weight: 400;">。<br /></span></p>
<p><span style="font-weight: 400;">因此，第一种方法是使用特殊的</span><strong>data-mage-init </strong><span style="font-weight: 400;">属性。该属性必须包含JS模块的路径作为值、要应用JS代码的元素和配置参数。</span></p>
<p><span style="font-weight: 400;">例如，假设我们有一个requireJS模块调用一个弹出窗口。让我们在以下目录中创建一个JS文件：</span></p>
<p><strong>app/code/Example/JavascriptInitExample/view/frontend/web/example.js</strong></p>
<p><span style="font-weight: 400;">接下来，我们将在文件内编写以下代码：</span></p>
<pre>define([], function(){
    alert("A simple Example module");  
});
</pre>
<p><br /><span style="font-weight: 400;">现在假设有一个特定的模板，我们想在其中连接我们的JS模块。首先，让我们按照以下方式连接它：</span></p>
<pre>&lt;div class="example-element"  data-mage-init='{"Example_JavascriptInitExample/example": {}}'&gt;A single div&lt;/div&gt;
</pre>
<p><br /><span style="font-weight: 400;">加载页面时，浏览器将仅显示带有指定文本的弹出窗口。没什么特别的，但是如果我们将一些配置值传递给data-mage-init呢？例如，让我们这样写：</span></p>
<pre>&lt;div class="example-element"  data-mage-init='{"Example_JavascriptInitExample/example": {"config": "value"}}'&gt;A single div&lt;/div&gt;
</pre>
<p><span style="font-weight: 400;">并通过以下方式更改JS模块：</span></p>
<pre>define([], function(config){
    alert("A simple Example module");
    console.log(config);   
});
</pre>
<p><br /> 重新加载页面时，我们将获得相同的弹出窗口，但是如果我们看一下控制台，我们将看到config参数的值等于该值。同样，我们可以在JS模块中传递任何参数。除此之外，我们可以传递一个DOM元素作为参数，然后调用脚本。为此，我们通过以下方式重写模块：</p>
<pre>define([], function(config, element){
    alert("A simple Example module");
    console.log(config);
    console.log(element);   
});
</pre>
<p><br /> 重新加载页面后，该元素的输出将添加到控制台。在我们的例子中，将是</p>
<pre>&lt;div class="example-element"&gt;&lt;/div&gt;
</pre>
<p><br /> 当我们使用布局中的<strong>&lt;arguments&gt; &lt;/ arguments&gt;</strong>标记将一系列参数传递给块时，我们也可能遇到一种情况。如果我们想将这些参数作为JS模块的参数，则需要通过以下方式传递它们：</p>
<p>\</p>
<pre>&lt;div class="example-element"  data-mage-init='{"Example_JavascriptInitExample/example": 
&lt;?= /* @escapeNotVerified */ $block-&gt;getJsLayout() ?&gt;'&gt;A single div&lt;/div&gt;
</pre>
<p><br /><span style="font-weight: 400;">我们将JSON作为输入参数，可以根据需要进一步使用JSON。</span></p>
<p><span style="font-weight: 400;">通常，我们必须向模块传递多个参数。上面描述的语法可能很难理解，因此可以使用</span><strong>type =&ldquo;text/x-magento-init&rdquo; </strong><span style="font-weight: 400;">作为替代。看起来像这样：</span></p>
<pre>&lt;script type="text/x-magento-init"&gt;
    {
        ".example-element": {
            "Example_JavascriptInitExample/example":{
"config":"value",
"config2":"value2",
"config3": "optionConfig": &lt;?php /* @noEscape */ echo $block-&gt;getJsonConfig()?&gt;

   }          
        }
    }        
&lt;/script&gt;
</pre>
<p><br /> 如您所见，此代码更容易阅读。</p>
<div class="h2text">
<h2><a id="step_3"></a>命令式方法</h2>
</div>
<p>还值得一提的是，在连接JS模块时所谓的命令式方法通常可以在Magento 2代码中找到。但是，在M2文档中建议不要使用它。连接如下所示：</p>
<pre>&lt;script type="text/javascript"&gt;
require( [
       'jquery'
   ],
   function($) {
       	alert('Example');
       });
   }
);
&lt;/script&gt;
</pre>
<div class="h2text">
<h2><a id="step_4"></a>通过require-config.js文件</h2>
</div>
<p><span style="font-weight: 400;">最后，让我们考虑以下情况：当我们需要将脚本连接到多个页面而不是在同一个页面和特定元素中时。在这种情况下，您可以使用</span><strong>require-config.js </strong><span style="font-weight: 400;">文件，该文件需要在</span><strong>view/base/ require-config.js </strong><span style="font-weight: 400;">子目录下</span><span style="font-weight: 400;">的模块文件夹中创建</span><span style="font-weight: 400;">。内容应如下所示：</span></p>
<pre>var config = {
deps: [
'Example_JavascriptInitExample/js/example',
'AnotherExample_JavascriptInitExample/js/example',
]
};
</pre>
<p><br /> 在这种情况下，我们连接的脚本将在模块的所有页面上运行。通常，某些第三方库以这种方式连接。您还可以设置map属性并为各种模块定义前缀。将来，我们可以使用这些前缀在其他模块中连接所需的JS模块。例如<span style="font-weight: 400;">：</span></p>
<pre>var config = {
map: {
	" * " : {
		"example_alias": "example.js"
}
}
}
</pre>
<p><br /> 现在我们可以使用创建的别名连接相应的JS模块：</p>
<pre>define([
	"jquery",
	"example_alias"
], function($, config){
	/* code goes here */    
});
</pre>
<p><br /> 如果需要确定JS文件的加载顺序，则可以使用shim选项。</p>
<p>好了，这些都是Magento 2中连接JS文件的所有现有方法，希望一切都清楚了。感谢您的阅读。</p>]]></description>
      <pubDate>Fri, 01 Nov 2019 06:49:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中使用JavaScript组件]]></title>
      <link>https://www.360magento.com/blog/utilizing-javascript-component-m2/</link>
      <description><![CDATA[<p>Magento 2使用RequireJS库来使用JavaScript。该库使用异步依赖项加载模型-AMD。这使您可以优化加载包含JavaScript文件的页面所需的时间。另外，通过管理JavaScript资源依赖性，我们摆脱了已加载库的重复。</p>
<p><a href="#step_1">JavaScript资源的存储位置<br></a><a href="#step_2">JavaScript组件<br></a><a href="#step_3">Define vs require<br></a><a href="#step_4">在PHTML模板中插入JS组件<br></a><a href="#step_5">选择器上初始化组件<br></a><a href="#step_6">在带参数的选择器上初始化组件<br></a><a href="#step_7">在JavaScript中选择器上初始化组件</a></p>
<h2><a id="step_1"></a><strong><span style="color: #000000;">JavaScript资源的存储位置</span></strong></h2>
<ul><li><strong>lib/web/</strong> -此文件夹包含Magento中使用的库。这些可以是第三方库，例如jquery，underscore.js，knockout.js，也可以是基于<em>/mage/</em>文件夹中的Magento库。</li>
<li><strong>app/code/[Vendor]/[Module]/view/[areaName]/web/ </strong> —模块中使用的javascript文件的路径；</li>
<li><strong>app/design/[areaName]/[VendorTheme]/[themeName]/web/</strong> -主题中使用的javascript文件的路径；</li>
<li><strong>app/design/[areaName]/[VendorTheme]/[themeName]/[Vendor]_[Module]/web/</strong> -模块的继承javascript文件的路径。</li>
</ul><h2><strong><a id="step_2"></a><span style="color: #000000;">JavaScript组件</span></strong></h2>
<p>JS组件是作为AMD模块的RequireJS模块。这种方法使我们可以将逻辑封装在模块中，而不会阻塞全局名称空间。模块也可以使用其他模块。</p>
<p>这是一个简单的RequireJS模块的示例：<br></p>
<pre>
requirejs([], function() {
   alert("Hello World!");
});
</pre>
<p><br>
现在，在加载页面时，您将看到弹出“ Hello world”！</p>
<p>让我们连接jQuery和mage/cookies：<br></p>
<pre>
define([
  "jquery",
  "mage/cookies"
], function($){
  ...
});
</pre>
<p><br>
如您所见，您需要以数组的形式指定必要的模块以连接这些模块。然后RequireJs将按照声明模块的顺序将模块传递给函数。</p>
<h2><a id="step_3"></a><strong><span style="color: #000000;">Define vs require</span></strong></h2>
<p>如果要创建模块，应用程序的其他部分将依赖该模块，则需要使用define()。如果我们的模块仅使用其他模块，则使用require（）。</p>
<h2><strong><a id="step_4"></a><span style="color: #000000;">在PHTML模板中插入JS组件</span></strong></h2>
<p>根据任务，您可以使用两个选项之一来表示：</p>
<ul><li>使用data-mage-init属性</li>
<li>使用<em>&lt;script type =“text/x-magento-init”/&gt;</em>标记</li>
</ul><p>让我们弄清楚哪些选项可用以及何时可以使用它们。假设您只需要一个简单的JS文件连接，而无需指定参数或组件。</p>
<p>PHTML中JS的简单连接：<br></p>
<pre>

&lt;script type="text/x-magento-init"&gt;
{
   "*": {
       "Vendor_Module/js/myfile": {}
   }
}
&lt;/script&gt;
</pre>
<p><br>
在这个案例中，文件的路径为：</p>
<p><em>Vendor/Module/view/frontend/web/js/myfile.js</em></p>
<p>其中您的代码：<br></p>
<pre>
require([],
function(){
   "use strict";
   //your js goes here
});
</pre>
<h2><a id="step_5"></a><strong><span style="color: #000000;">在选择器上初始化组件</span></strong></h2>
<p>有两种方法可以做到这一点：</p>
<p>1)在data-mage-init属性中初始化组件。例如：<br></p>
<pre>
&lt;div id="element-id" data-mage-init='{"Vendor_Module/js/myfile":{}}'&gt;&lt;/div&gt;
</pre>
<p><br>
2)使用具有<em>&lt;script type =”text/x-magento-init”</em>属性的标签。例如：<br></p>
<pre>
&lt;script type="text/x-magento-init"&gt;
{
&nbsp;&nbsp;&nbsp;"#element-id": { 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Vendor_Module/js/myfile": {} 
&nbsp;&nbsp;&nbsp;} 
} 
&lt;/script&gt;
</pre>
<p><br>
在这个案例中，文件的路径为：</p>
<p><em>Vendor/Module/view/frontend/web/js/jsfilename.js</em></p>
<p>其中您的代码：<br></p>
<pre>
define(['uiComponent'],
function (Component) {
&nbsp;&nbsp;&nbsp;'use strict';
&nbsp;&nbsp;&nbsp;return Component.extend({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialize: function (config, node) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// some code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;});
});
</pre>
<p></p>
<h2><a id="step_6"></a><strong><span style="color: #000000;">在带参数的选择器上初始化组件</span></strong></h2>
<p>初始化组件时，向其发送参数（由php动态确定）也很重要。</p>
<p>1)data-mage-init<br></p>
<pre>
&lt;div id="element-id" data-mage-init='{"Vendor_Module/js/myfile":{"parameter":"value","status":&lt;?php echo $block-&gt;getStatus(); ?&gt;
}}'&gt;&lt;/div&gt;
</pre>
<p><br>
2)使用具有<em>&lt;script type =”text/x-magento-init”</em>属性的标签。例如：<br></p>
<pre>
&lt;script type="text/x-magento-init"&gt;
{
&nbsp;&nbsp;&nbsp;"#element-id": { 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Vendor_Module/js/myfile1": {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"parameter":"value",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"status":&lt;?php echo $block-&gt;getStatus(); ?&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
&nbsp;&nbsp;&nbsp;}
} 
&lt;/script&gt;
</pre>
<h2><a id="step_7"></a><strong><span style="color: #000000;">在JavaScript中的选择器上初始化组件</span></strong></h2>
<p>如果我们没有使用php获取动态参数，则可以在javascript文件中的选择器上初始化组件。</p>
<p>例如：</p>
<p><em>vendor/magento/module-swatches/view/adminhtml/web/js/visual.js</em><br></p>
<pre>
…
$('[data-role=swatch-visual-options-container]').sortable({
&nbsp;&nbsp;distance: 8,
&nbsp;&nbsp;tolerance: 'pointer',
&nbsp;&nbsp;cancel: 'input, button',
&nbsp;&nbsp;axis: 'y',
&nbsp;&nbsp;....
&nbsp;&nbsp;}
});
...
</pre>]]></description>
      <pubDate>Fri, 18 Oct 2019 09:28:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2创建多站点多商店]]></title>
      <link>https://www.360magento.com/blog/magento2-create-multiwebsite/</link>
      <description><![CDATA[<h2><b>步骤1：在Magento后台创建websites, stores, 和 store views</b></h2>
<ol>
<li>登录到Magento后台创建websites, stores, 和 store views。</li>
<li>单击<b>Stores</b>&gt;Settings&gt;<b>All Stores</b>。</li>
<li>在Stores页面上，点击<b>Create Website</b>。
<ul>
<li><b>Name</b>字段：输入名称以标识网站。</li>
<li><b>Code</b>字段：输入唯一的代码；例如，如果您有法国商店或德国商店，则可以输入french, german</li>
<li><b>Sort Order</b>字段：输入数字用来识别排序顺序。</li>
</ul>
</li>
<li>单击<b>Save Web Site</b>。</li>
</ol>
<h2><b>步骤2：创建Apache虚拟主机</b></h2>
<ol>
<li>以具有root 用户特权的用户身份，在文本编辑器中打开虚拟主机配置文件。</li>
<li>例如，打开/etc/httpd/conf/httpd.conf</li>
<li>找到以&lt;VirtualHost *：80&gt; 开头的部分。</li>
<li>在任何现有虚拟主机之后创建以下虚拟主机：</li>
<li>
<pre>
<VirtualHost *:80>
   ServerName          mylocalsite.com
   DocumentRoot        /var/www/html/magento2/pub/
</VirtualHost>

<VirtualHost *:80>
   ServerName          french.mylocalsite.com
   DocumentRoot        /var/www/html/magento2/pub/
   SetEnv MAGE_RUN_CODE "french"
   SetEnv MAGE_RUN_TYPE "website"
</VirtualHost>

<VirtualHost *:80>
   ServerName          german.mylocalsite.com
   DocumentRoot        /var/www/html/magento2/pub/
   SetEnv MAGE_RUN_CODE "german"
   SetEnv MAGE_RUN_TYPE "website"
</VirtualHost>
</pre>
</li>
<li>将更改保存到httpd.conf 并退出文本编辑器。</li>
<li>重新启动Apache：
<ul>
<li>CentOS：service httpd restart</li>
<li>Ubuntu：service apache2 restart</li>
</ul>
</li>
</ol>
<h2><b>步骤3：验证您的网站</b></h2>
<ol>
<li>打开操作系统的hosts文件。</li>
<li>以以下格式添加静态路由：</li>
<li>&lt;ip地址&gt; french.mylocalsite.com &lt;ip地址&gt; german.mylocalsite.com<br>
</li>
<li>在浏览器中打开以下URL之一：</li>
<li>http://mylocalsite.com/admin http://french.mylocalsite.com/frenchstoreview http://german.mylocalsite.com/germanstoreview<br>
<br>
</li>
</ol>]]></description>
      <pubDate>Mon, 14 Oct 2019 05:00:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2中的国家地区代码]]></title>
      <link>https://www.360magento.com/blog/magento-country-code/</link>
      <description><![CDATA[<p>估计很多朋友跟我一样，不知道从哪儿获取<strong>Magentro国家/地区代码</strong>。</p>
<p>当您要上传<strong>运输价格表</strong>（csv文件）时，需要在文件中输入这些代码。</p>
<p>下面我已经全部列出来了</p>
<table style="width: 75%;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom" nowrap="nowrap" width="281"><b>Country</b></td>
<td valign="bottom" nowrap="nowrap" width="97"><b>2 Digit Code</b></td>
<td valign="bottom" nowrap="nowrap" width="95"><b>3 Digit Code</b></td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Afghanistan</td>
<td valign="bottom" nowrap="nowrap" width="97">AF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AFG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Albania</td>
<td valign="bottom" nowrap="nowrap" width="97">AL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ALB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Algeria</td>
<td valign="bottom" nowrap="nowrap" width="97">DZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DZA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;American Samoa</td>
<td valign="bottom" nowrap="nowrap" width="97">AS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ASM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Andorra</td>
<td valign="bottom" nowrap="nowrap" width="97">AD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AND</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Angola</td>
<td valign="bottom" nowrap="nowrap" width="97">AO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AGO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Anguilla</td>
<td valign="bottom" nowrap="nowrap" width="97">AI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AIA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Antarctica</td>
<td valign="bottom" nowrap="nowrap" width="97">AQ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ATA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Antigua and Barbuda</td>
<td valign="bottom" nowrap="nowrap" width="97">AG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ATG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Argentina</td>
<td valign="bottom" nowrap="nowrap" width="97">AR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ARG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Armenia</td>
<td valign="bottom" nowrap="nowrap" width="97">AM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ARM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Aruba</td>
<td valign="bottom" nowrap="nowrap" width="97">AW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ABW</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Australia</td>
<td valign="bottom" nowrap="nowrap" width="97">AU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AUS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Austria</td>
<td valign="bottom" nowrap="nowrap" width="97">AT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AUT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Azerbaijan</td>
<td valign="bottom" nowrap="nowrap" width="97">AZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;AZE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bahamas</td>
<td valign="bottom" nowrap="nowrap" width="97">BS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BHS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bahrain</td>
<td valign="bottom" nowrap="nowrap" width="97">BH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BHR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bangladesh</td>
<td valign="bottom" nowrap="nowrap" width="97">BD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BGD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Barbados</td>
<td valign="bottom" nowrap="nowrap" width="97">BB</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BRB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Belarus</td>
<td valign="bottom" nowrap="nowrap" width="97">BY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BLR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Belgium</td>
<td valign="bottom" nowrap="nowrap" width="97">BE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BEL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Belize</td>
<td valign="bottom" nowrap="nowrap" width="97">BZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BLZ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Benin</td>
<td valign="bottom" nowrap="nowrap" width="97">BJ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BEN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bermuda</td>
<td valign="bottom" nowrap="nowrap" width="97">BM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BMU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bhutan</td>
<td valign="bottom" nowrap="nowrap" width="97">BT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BTN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bolivia</td>
<td valign="bottom" nowrap="nowrap" width="97">BO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BOL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bosnia and Herzegovina</td>
<td valign="bottom" nowrap="nowrap" width="97">BA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BIH</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Botswana</td>
<td valign="bottom" nowrap="nowrap" width="97">BW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BWA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bouvet Island</td>
<td valign="bottom" nowrap="nowrap" width="97">BV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BVT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Brazil</td>
<td valign="bottom" nowrap="nowrap" width="97">BR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BRA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;British Indian Ocean Territory</td>
<td valign="bottom" nowrap="nowrap" width="97">IO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IOT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;British Virgin Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">VG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VGB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Brunei</td>
<td valign="bottom" nowrap="nowrap" width="97">BN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BRN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Bulgaria</td>
<td valign="bottom" nowrap="nowrap" width="97">BG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BGR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Burkina Faso</td>
<td valign="bottom" nowrap="nowrap" width="97">BF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BFA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Burundi</td>
<td valign="bottom" nowrap="nowrap" width="97">BI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BDI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cambodia</td>
<td valign="bottom" nowrap="nowrap" width="97">KH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KHM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cameroon</td>
<td valign="bottom" nowrap="nowrap" width="97">CM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CMR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Canada</td>
<td valign="bottom" nowrap="nowrap" width="97">CA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CAN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cape Verde</td>
<td valign="bottom" nowrap="nowrap" width="97">CV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CPV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cayman Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">KY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CYM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Central African Republic</td>
<td valign="bottom" nowrap="nowrap" width="97">CF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CAF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Chad</td>
<td valign="bottom" nowrap="nowrap" width="97">TD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TCD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Chile</td>
<td valign="bottom" nowrap="nowrap" width="97">CL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CHL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;China</td>
<td valign="bottom" nowrap="nowrap" width="97">CN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CHN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Christmas Island</td>
<td valign="bottom" nowrap="nowrap" width="97">CX</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CXR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cocos [Keeling] Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">CC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CCK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Colombia</td>
<td valign="bottom" nowrap="nowrap" width="97">CO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;COL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Comoros</td>
<td valign="bottom" nowrap="nowrap" width="97">KM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;COM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Congo</td>
<td valign="bottom" nowrap="nowrap" width="97">CG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;COG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Congo</td>
<td valign="bottom" nowrap="nowrap" width="97">CD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;COD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cook Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">CK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;COK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Costa Rica</td>
<td valign="bottom" nowrap="nowrap" width="97">CR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CRI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Croatia</td>
<td valign="bottom" nowrap="nowrap" width="97">HR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HRV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cuba</td>
<td valign="bottom" nowrap="nowrap" width="97">CU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CUB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Cyprus</td>
<td valign="bottom" nowrap="nowrap" width="97">CY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CYP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Czech Republic</td>
<td valign="bottom" nowrap="nowrap" width="97">CZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CZE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Côte d’Ivoire</td>
<td valign="bottom" nowrap="nowrap" width="97">CI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CIV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Denmark</td>
<td valign="bottom" nowrap="nowrap" width="97">DK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DNK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Djibouti</td>
<td valign="bottom" nowrap="nowrap" width="97">DJ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DJI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Dominica</td>
<td valign="bottom" nowrap="nowrap" width="97">DM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DMA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Dominican Republic</td>
<td valign="bottom" nowrap="nowrap" width="97">DO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DOM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Ecuador</td>
<td valign="bottom" nowrap="nowrap" width="97">EC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ECU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Egypt</td>
<td valign="bottom" nowrap="nowrap" width="97">EG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;EGY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;El Salvador</td>
<td valign="bottom" nowrap="nowrap" width="97">SV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SLV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Equatorial Guinea</td>
<td valign="bottom" nowrap="nowrap" width="97">GQ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GNQ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Eritrea</td>
<td valign="bottom" nowrap="nowrap" width="97">ER</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ERI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Estonia</td>
<td valign="bottom" nowrap="nowrap" width="97">EE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;EST</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Ethiopia</td>
<td valign="bottom" nowrap="nowrap" width="97">ET</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ETH</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Falkland Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">FK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FLK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Faroe Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">FO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FRO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Fiji</td>
<td valign="bottom" nowrap="nowrap" width="97">FJ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FJI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Finland</td>
<td valign="bottom" nowrap="nowrap" width="97">FI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FIN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;France</td>
<td valign="bottom" nowrap="nowrap" width="97">FR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FRA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;French Guiana</td>
<td valign="bottom" nowrap="nowrap" width="97">GF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GUF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;French Polynesia</td>
<td valign="bottom" nowrap="nowrap" width="97">PF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PYF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;French Southern Territories</td>
<td valign="bottom" nowrap="nowrap" width="97">TF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ATF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Gabon</td>
<td valign="bottom" nowrap="nowrap" width="97">GA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GAB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Gambia</td>
<td valign="bottom" nowrap="nowrap" width="97">GM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GMB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Georgia</td>
<td valign="bottom" nowrap="nowrap" width="97">GE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GEO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Germany</td>
<td valign="bottom" nowrap="nowrap" width="97">DE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;DEU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Ghana</td>
<td valign="bottom" nowrap="nowrap" width="97">GH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GHA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Gibraltar</td>
<td valign="bottom" nowrap="nowrap" width="97">GI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GIB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Greece</td>
<td valign="bottom" nowrap="nowrap" width="97">GR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GRC</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Greenland</td>
<td valign="bottom" nowrap="nowrap" width="97">GL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GRL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Grenada</td>
<td valign="bottom" nowrap="nowrap" width="97">GD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GRD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guadeloupe</td>
<td valign="bottom" nowrap="nowrap" width="97">GP</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GLP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guam</td>
<td valign="bottom" nowrap="nowrap" width="97">GU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GUM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guatemala</td>
<td valign="bottom" nowrap="nowrap" width="97">GT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GTM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guernsey</td>
<td valign="bottom" nowrap="nowrap" width="97">GG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GGY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guinea</td>
<td valign="bottom" nowrap="nowrap" width="97">GN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GIN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guinea</td>
<td valign="bottom" nowrap="nowrap" width="97">GW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GNB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Guyana</td>
<td valign="bottom" nowrap="nowrap" width="97">GY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GUY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Haiti</td>
<td valign="bottom" nowrap="nowrap" width="97">HT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HTI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Heard Island and McDonald Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">HM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HMD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Honduras</td>
<td valign="bottom" nowrap="nowrap" width="97">HN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HND</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Hong Kong SAR China</td>
<td valign="bottom" nowrap="nowrap" width="97">HK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HKG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Hungary</td>
<td valign="bottom" nowrap="nowrap" width="97">HU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;HUN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Iceland</td>
<td valign="bottom" nowrap="nowrap" width="97">IS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ISL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;India</td>
<td valign="bottom" nowrap="nowrap" width="97">IN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IND</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Indonesia</td>
<td valign="bottom" nowrap="nowrap" width="97">ID</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IDN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Iran</td>
<td valign="bottom" nowrap="nowrap" width="97">IR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IRN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Iraq</td>
<td valign="bottom" nowrap="nowrap" width="97">IQ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IRQ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Ireland</td>
<td valign="bottom" nowrap="nowrap" width="97">IE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IRL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Isle of Man</td>
<td valign="bottom" nowrap="nowrap" width="97">IM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;IMN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Israel</td>
<td valign="bottom" nowrap="nowrap" width="97">IL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ISR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Italy</td>
<td valign="bottom" nowrap="nowrap" width="97">IT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ITA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Jamaica</td>
<td valign="bottom" nowrap="nowrap" width="97">JM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;JAM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Japan</td>
<td valign="bottom" nowrap="nowrap" width="97">JP</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;JPN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Jersey</td>
<td valign="bottom" nowrap="nowrap" width="97">JE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;JEY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Jordan</td>
<td valign="bottom" nowrap="nowrap" width="97">JO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;JOR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Kazakhstan</td>
<td valign="bottom" nowrap="nowrap" width="97">KZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KAZ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Kenya</td>
<td valign="bottom" nowrap="nowrap" width="97">KE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KEN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Kiribati</td>
<td valign="bottom" nowrap="nowrap" width="97">KI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KIR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Kuwait</td>
<td valign="bottom" nowrap="nowrap" width="97">KW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KWT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Kyrgyzstan</td>
<td valign="bottom" nowrap="nowrap" width="97">KG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KGZ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Laos</td>
<td valign="bottom" nowrap="nowrap" width="97">LA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LAO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Latvia</td>
<td valign="bottom" nowrap="nowrap" width="97">LV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LVA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Lebanon</td>
<td valign="bottom" nowrap="nowrap" width="97">LB</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LBN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Lesotho</td>
<td valign="bottom" nowrap="nowrap" width="97">LS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LSO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Liberia</td>
<td valign="bottom" nowrap="nowrap" width="97">LR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LBR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Libya</td>
<td valign="bottom" nowrap="nowrap" width="97">LY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LBY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Liechtenstein</td>
<td valign="bottom" nowrap="nowrap" width="97">LI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LIE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Lithuania</td>
<td valign="bottom" nowrap="nowrap" width="97">LT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LTU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Luxembourg</td>
<td valign="bottom" nowrap="nowrap" width="97">LU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LUX</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Macau SAR China</td>
<td valign="bottom" nowrap="nowrap" width="97">MO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MAC</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Macedonia</td>
<td valign="bottom" nowrap="nowrap" width="97">MK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MKD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Madagascar</td>
<td valign="bottom" nowrap="nowrap" width="97">MG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MDG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Malawi</td>
<td valign="bottom" nowrap="nowrap" width="97">MW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MWI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Malaysia</td>
<td valign="bottom" nowrap="nowrap" width="97">MY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MYS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Maldives</td>
<td valign="bottom" nowrap="nowrap" width="97">MV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MDV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mali</td>
<td valign="bottom" nowrap="nowrap" width="97">ML</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MLI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Malta</td>
<td valign="bottom" nowrap="nowrap" width="97">MT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MLT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Marshall Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">MH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MHL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Martinique</td>
<td valign="bottom" nowrap="nowrap" width="97">MQ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MTQ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mauritania</td>
<td valign="bottom" nowrap="nowrap" width="97">MR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MRT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mauritius</td>
<td valign="bottom" nowrap="nowrap" width="97">MU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MUS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mayotte</td>
<td valign="bottom" nowrap="nowrap" width="97">YT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MYT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mexico</td>
<td valign="bottom" nowrap="nowrap" width="97">MX</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MEX</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Micronesia</td>
<td valign="bottom" nowrap="nowrap" width="97">FM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;FSM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Moldova</td>
<td valign="bottom" nowrap="nowrap" width="97">MD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MDA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Monaco</td>
<td valign="bottom" nowrap="nowrap" width="97">MC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MCO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mongolia</td>
<td valign="bottom" nowrap="nowrap" width="97">MN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MNG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Montenegro</td>
<td valign="bottom" nowrap="nowrap" width="97">ME</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MNE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Montserrat</td>
<td valign="bottom" nowrap="nowrap" width="97">MS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MSR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Morocco</td>
<td valign="bottom" nowrap="nowrap" width="97">MA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MAR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Mozambique</td>
<td valign="bottom" nowrap="nowrap" width="97">MZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MOZ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Myanmar [Burma]</td>
<td valign="bottom" nowrap="nowrap" width="97">MM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MMR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Namibia</td>
<td valign="bottom" nowrap="nowrap" width="97">NA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NAM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Nauru</td>
<td valign="bottom" nowrap="nowrap" width="97">NR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NRU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Nepal</td>
<td valign="bottom" nowrap="nowrap" width="97">NP</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NPL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Netherlands</td>
<td valign="bottom" nowrap="nowrap" width="97">NL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NLD</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Netherlands Antilles</td>
<td valign="bottom" nowrap="nowrap" width="97">AN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ANT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;New Caledonia</td>
<td valign="bottom" nowrap="nowrap" width="97">NC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NCL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;New Zealand</td>
<td valign="bottom" nowrap="nowrap" width="97">NZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NZL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Nicaragua</td>
<td valign="bottom" nowrap="nowrap" width="97">NI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NIC</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Niger</td>
<td valign="bottom" nowrap="nowrap" width="97">NE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NER</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Nigeria</td>
<td valign="bottom" nowrap="nowrap" width="97">NG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NGA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Niue</td>
<td valign="bottom" nowrap="nowrap" width="97">NU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NIU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Norfolk Island</td>
<td valign="bottom" nowrap="nowrap" width="97">NF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NFK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;North Korea</td>
<td valign="bottom" nowrap="nowrap" width="97">KP</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PRK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Northern Mariana Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">MP</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MNP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Norway</td>
<td valign="bottom" nowrap="nowrap" width="97">NO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;NOR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Oman</td>
<td valign="bottom" nowrap="nowrap" width="97">OM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;OMN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Pakistan</td>
<td valign="bottom" nowrap="nowrap" width="97">PK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PAK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Palau</td>
<td valign="bottom" nowrap="nowrap" width="97">PW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PLW</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Palestinian Territories</td>
<td valign="bottom" nowrap="nowrap" width="97">PS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PSE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Panama</td>
<td valign="bottom" nowrap="nowrap" width="97">PA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PAN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Papua New Guinea</td>
<td valign="bottom" nowrap="nowrap" width="97">PG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PNG</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Paraguay</td>
<td valign="bottom" nowrap="nowrap" width="97">PY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PRY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Peru</td>
<td valign="bottom" nowrap="nowrap" width="97">PE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PER</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Philippines</td>
<td valign="bottom" nowrap="nowrap" width="97">PH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PHL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Pitcairn Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">PN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PCN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Poland</td>
<td valign="bottom" nowrap="nowrap" width="97">PL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;POL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Portugal</td>
<td valign="bottom" nowrap="nowrap" width="97">PT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PRT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Puerto Rico</td>
<td valign="bottom" nowrap="nowrap" width="97">PR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;PRI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Qatar</td>
<td valign="bottom" nowrap="nowrap" width="97">QA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;QAT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Romania</td>
<td valign="bottom" nowrap="nowrap" width="97">RO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ROU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Russia</td>
<td valign="bottom" nowrap="nowrap" width="97">RU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;RUS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Rwanda</td>
<td valign="bottom" nowrap="nowrap" width="97">RW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;RWA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Réunion</td>
<td valign="bottom" nowrap="nowrap" width="97">RE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;REU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Barthélemy</td>
<td valign="bottom" nowrap="nowrap" width="97">BL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;BLM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Helena</td>
<td valign="bottom" nowrap="nowrap" width="97">SH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SHN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Kitts and Nevis</td>
<td valign="bottom" nowrap="nowrap" width="97">KN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KNA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Lucia</td>
<td valign="bottom" nowrap="nowrap" width="97">LC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LCA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Martin</td>
<td valign="bottom" nowrap="nowrap" width="97">MF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;MAF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Pierre and Miquelon</td>
<td valign="bottom" nowrap="nowrap" width="97">PM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SPM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saint Vincent and the Grenadines</td>
<td valign="bottom" nowrap="nowrap" width="97">VC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VCT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Samoa</td>
<td valign="bottom" nowrap="nowrap" width="97">WS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;WSM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;San Marino</td>
<td valign="bottom" nowrap="nowrap" width="97">SM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SMR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Saudi Arabia</td>
<td valign="bottom" nowrap="nowrap" width="97">SA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SAU</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Senegal</td>
<td valign="bottom" nowrap="nowrap" width="97">SN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SEN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Serbia</td>
<td valign="bottom" nowrap="nowrap" width="97">RS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SRB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Seychelles</td>
<td valign="bottom" nowrap="nowrap" width="97">SC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SYC</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Sierra Leone</td>
<td valign="bottom" nowrap="nowrap" width="97">SL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SLE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Singapore</td>
<td valign="bottom" nowrap="nowrap" width="97">SG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SGP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Slovakia</td>
<td valign="bottom" nowrap="nowrap" width="97">SK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SVK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Slovenia</td>
<td valign="bottom" nowrap="nowrap" width="97">SI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SVN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Solomon Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">SB</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SLB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Somalia</td>
<td valign="bottom" nowrap="nowrap" width="97">SO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SOM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;South Africa</td>
<td valign="bottom" nowrap="nowrap" width="97">ZA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ZAF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;South Georgia and the South Sandwich Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">GS</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SGS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;South Korea</td>
<td valign="bottom" nowrap="nowrap" width="97">KR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;KOR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Spain</td>
<td valign="bottom" nowrap="nowrap" width="97">ES</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ESP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Sri Lanka</td>
<td valign="bottom" nowrap="nowrap" width="97">LK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;LKA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Sudan</td>
<td valign="bottom" nowrap="nowrap" width="97">SD</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SDN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Suriname</td>
<td valign="bottom" nowrap="nowrap" width="97">SR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SUR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Svalbard and Jan Mayen</td>
<td valign="bottom" nowrap="nowrap" width="97">SJ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SJM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Swaziland</td>
<td valign="bottom" nowrap="nowrap" width="97">SZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SWZ</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Sweden</td>
<td valign="bottom" nowrap="nowrap" width="97">SE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SWE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Switzerland</td>
<td valign="bottom" nowrap="nowrap" width="97">CH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;CHE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Syria</td>
<td valign="bottom" nowrap="nowrap" width="97">SY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;SYR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;São Tomé and Príncipe</td>
<td valign="bottom" nowrap="nowrap" width="97">ST</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;STP</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Taiwan</td>
<td valign="bottom" nowrap="nowrap" width="97">TW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TWN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tajikistan</td>
<td valign="bottom" nowrap="nowrap" width="97">TJ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TJK</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tanzania</td>
<td valign="bottom" nowrap="nowrap" width="97">TZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TZA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Thailand</td>
<td valign="bottom" nowrap="nowrap" width="97">TH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;THA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Timor</td>
<td valign="bottom" nowrap="nowrap" width="97">TL</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TLS</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Togo</td>
<td valign="bottom" nowrap="nowrap" width="97">TG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TGO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tokelau</td>
<td valign="bottom" nowrap="nowrap" width="97">TK</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TKL</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tonga</td>
<td valign="bottom" nowrap="nowrap" width="97">TO</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TON</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Trinidad and Tobago</td>
<td valign="bottom" nowrap="nowrap" width="97">TT</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TTO</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tunisia</td>
<td valign="bottom" nowrap="nowrap" width="97">TN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TUN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Turkey</td>
<td valign="bottom" nowrap="nowrap" width="97">TR</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TUR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Turkmenistan</td>
<td valign="bottom" nowrap="nowrap" width="97">TM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TKM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Turks and Caicos Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">TC</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TCA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Tuvalu</td>
<td valign="bottom" nowrap="nowrap" width="97">TV</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;TUV</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;U.S. Minor Outlying Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">UM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;UMI</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;U.S. Virgin Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">VI</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VIR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Uganda</td>
<td valign="bottom" nowrap="nowrap" width="97">UG</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;UGA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Ukraine</td>
<td valign="bottom" nowrap="nowrap" width="97">UA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;UKR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;United Arab Emirates</td>
<td valign="bottom" nowrap="nowrap" width="97">AE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ARE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;United Kingdom</td>
<td valign="bottom" nowrap="nowrap" width="97">GB</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;GBR</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;United States</td>
<td valign="bottom" nowrap="nowrap" width="97">US</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;USA</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Uruguay</td>
<td valign="bottom" nowrap="nowrap" width="97">UY</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;URY</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Uzbekistan</td>
<td valign="bottom" nowrap="nowrap" width="97">UZ</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;UZB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Vanuatu</td>
<td valign="bottom" nowrap="nowrap" width="97">VU</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VUT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Vatican City</td>
<td valign="bottom" nowrap="nowrap" width="97">VA</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VAT</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Venezuela</td>
<td valign="bottom" nowrap="nowrap" width="97">VE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VEN</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Vietnam</td>
<td valign="bottom" nowrap="nowrap" width="97">VN</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;VNM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Wallis and Futuna</td>
<td valign="bottom" nowrap="nowrap" width="97">WF</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;WLF</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Western Sahara</td>
<td valign="bottom" nowrap="nowrap" width="97">EH</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ESH</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Yemen</td>
<td valign="bottom" nowrap="nowrap" width="97">YE</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;YEM</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Zambia</td>
<td valign="bottom" nowrap="nowrap" width="97">ZM</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ZMB</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Zimbabwe</td>
<td valign="bottom" nowrap="nowrap" width="97">ZW</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ZWE</td>
</tr>
<tr>
<td valign="bottom" nowrap="nowrap" width="281">&nbsp;Åland Islands</td>
<td valign="bottom" nowrap="nowrap" width="97">AX</td>
<td valign="bottom" nowrap="nowrap" width="95">&nbsp;ALA</td>
</tr>
</tbody>
</table>]]></description>
      <pubDate>Tue, 08 Oct 2019 03:57:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[7个Magento安全提示，可确保您的电子商务商店安全无虞]]></title>
      <link>https://www.360magento.com/blog/magento-security-tips/</link>
      <description><![CDATA[<p>使用Magento系统建立网站时，真正困扰您的主要问题是<strong>如何保护Magento网站</strong>。Magento带有一些强大的内置安全功能，但是您必须采取一些措施来增强您的站点并保持其免受潜在攻击或数据丢失的影响。</p>
<p>尽管它是支持25万个活跃站点的最强大的电子商务平台之一，但它也存在一定的安全风险。根据TechRadar最近发布的Magento安全报告，在Magento上运行的<a href="https://www.techradar.com/news/magento-ecommerce-sites-at-high-risk-of-cyberattack" rel="nofollow" target="_blank">超过87％的电子商务网站</a>面临网络攻击的较高风险。</p>
<p>您的网站可能是其中之一。</p>
<p><strong>目录</strong></p>
<ul>
<li><a href="#1-install-an-ssl-certificate-on-your-store-website">1.在您的网站上安装SSL证书</a></li>
<li><a href="#2-insist-on-the-latest-version-of-magento">2.坚持最新版本的Magento</a></li>
<li><a href="#3-use-strong-passwords">3.使用较强密码</a></li>
<li><a href="#4-use-magento-scan-tool-to-scan-your-ecommerce-store">4.使用Magento扫描工具扫描您的电子商务网站</a></li>
<li><a href="5-use-magento-recaptcha">5.使用Magento reCAPTCHA</a></li>
<li><a href="#6-backup-your-site-regularly">6.定期备份您的网站</a></li>
<li><a href="#7-use-a-unique-url-for-admin-dashboard">7.对管理仪表板使用唯一的URL</a></li>
</ul>
<h2 id="magento-security-best-practices">Magento安全最佳做法</h2>
<p>如果您的站点仍然可以运行，您应该感到高兴，因为在本文中，我们将向您展示重要的Magento安全技巧，这些技巧将确保您的网站日后获得最强的安全性。继续阅读。</p>
<h3 id="1-install-an-ssl-certificate-on-your-store-website">1.在您的网站上安装SSL证书</h3>
<p><img src="https://i.imgur.com/NeS7bM8.png" alt="安装SSL证书"></p>
<p>您需要在网站上使用<a href="https://www.ssl2buy.com/" rel="nofollow" target="_blank">SSL证书</a>有很多理由。从帮助您提高Google排名到增强在网站上购物时的客户信心，这几乎是所有电子商务网站所有者的必备条件。</p>
<p>在安全方面，安全套接字层（SSL）证书旨在加密网站上共享的所有数据。这样，如果您将其安装在您的Magento电子商务网站中，它将对网站上共享的所有机密数据（例如信用卡详细信息和登录信息）进行加密。这对于防止网络攻击者获取此类信息至关重要，因为他们可能会试图窃取这些信息以实施身份盗窃和伪造等犯罪行为。</p>
<p>这样的骗局不仅可能损害您的声誉，而且还会因泄漏而导致巨额赔偿。</p>
<h3 id="2-insist-on-the-latest-version-of-magento">2.坚持最新版本的Magento</h3>
<p><img src="https://i.imgur.com/Zklz8O1.jpg" alt="坚持使用最新版本的Magento"></p>
<p>值得指出的是，Magento本身就是开源软件。因此，任何人都可以为它的发展做出贡献，这对于了解它是如何针对使用它的企业主的黑客来说是一个可行的选择。</p>
<p>不过，请不要担心，因为Magento开发人员已经有了解决此问题的方法。他们始终监视该软件，并且每次发现风险概况时，都会立即对其进行修补并发布该软件的最新版本，而该版本没有任何风险可以锁定这些欺骗手段。</p>
<p>问题是网络犯罪分子总是在寻找那些不<a href="https://www.360magento.com/blog/upgrade-magento-2">安装这些升级程序的</a>企业主。他们使用功能强大的自动化工具来帮助他们定位和定位易受攻击的站点。</p>
<p>随时注意最新的升级，避免成为受害者。</p>
<h3 id="3-use-strong-passwords">3.使用强密码</h3>
<p><img src="https://i.imgur.com/BTXPrq1.jpg" alt="使用强密码"></p>
<p>密码是访问您的网站的密钥。如果在线攻击者得到了它，他/她将不会浪费时间使用它来恶意访问您的网站。</p>
<p>您不希望您的用户数据被盗；您也不想被锁定在您的商业网站之外。避免这种情况的最佳方法是使用难以猜测但容易为您记住的强密码。</p>
<p>如果您不容易记住密码，专家建议使用免费的密码管理器之类的工具来存储密码。除此之外，请勿将密码保存在使用的系统中。</p>
<p>如果系统被感染，某些计算机病毒可以找到并窃取它们。最后，偶尔<a href="https://www.360magento.com/blog/how-reset-admin-password-magento-2">更改密码</a>是确保安全的一个好主意。</p>
<h3 id="4-use-magento-scan-tool-to-scan-your-ecommerce-store">4.使用Magento扫描工具扫描您的电子商务网站</h3>
<p><img src="https://i.imgur.com/6V1bK1Q.png" alt="使用Magento扫描工具"></p>
<p>只看一下就很难在您的电子商务网站中发现安全风险。Magento开发人员了解这一点，因此他们为您介绍了Magento免费扫描工具。</p>
<p>这个工具附带了许多安全工具，这些工具是专门设计的，可以方便地进行自动的网站安全扫描。在例行扫描期间，它可以帮助您检查存储的安全一致性，并在检测到站点上的任何可疑活动时转发实时警报。</p>
<p>此工具的一些核心功能包括将安全扫描会话保存在Magento商家帐户中，安排安全扫描，对可能使您的站点处于风险中的配置问题提供实时警报。</p>
<p>它还为您提供了一个免费指南，告诉您解决这些风险的最佳方法。</p>
<h3 id="5-use-magento-recaptcha">5.使用Magento reCAPTCHA</h3>
<p>使用Magento reCAPTCHA是阻止垃圾邮件并保护您免受攻击者攻击的一种简单方法。它的工作原理是确定在您的站点上启动的访问会话是由机器人还是人来完成，以确保站点登录的真实性和安全性。</p>
<p>大多数网站所有者使用它来抵御字典攻击等攻击，并确保搜索引擎蜘蛛仅对网站上的重要页面进行爬网，以避免垃圾邮件内容可能会使敏感数据或数据库面临被恶意攻击者利用的风险。</p>
<h3 id="6-backup-your-site-regularly">6.定期备份您的网站</h3>
<p><img src="https://i.imgur.com/fDWmgRd.jpg" alt="定期备份您的网站"></p>
<p>尽管互联网使您可以存储并连接到客户端，但它永远都不安全。经验法则是始终准备好备份，以防万一您的站点出现问题。</p>
<p>如果发生任何事情，<a href="https://www.360magento.com/blog/how-to-create-backups-magento-2">备份您的网站</a>将使恢复Magento电子商务网站变得非常容易，如果发生什么事情，导致数据丢失超级容易。您可以通过FTP客户端下载站点数据，然后将其备份到您的帐户中。</p>
<p>无论哪种方式，您都可以使用phpMyAdmin导出存储的数据库。导出后，您可以从Pixie控制面板下的数据库区域访问此数据。之后，选择数据库名称以查看其内容。</p>
<h3 id="7-use-a-unique-url-for-admin-dashboard">7.对管理仪表板使用唯一的URL</h3>
<p><img src="https://i.imgur.com/92pZnKf.jpg" alt="使用唯一网址"></p>
<p>所有Magento网站均设计为在管理控制面板上具有默认的my-site.com/admin URL。大多数网站所有者都不会为密码和用户名更改并保存。</p>
<p>这是一个重大风险，因为它为在线攻击者打开了更多途径，可在您的Web网站上发起危险攻击。最好的例子是蛮力攻击，他们尝试使用多种密码组合来获取您的准确登录详细信息并恶意访问管理面板。</p>
<p>为避免这种情况，在创建管理面板的URL时应使用其他名称。为此，您只需要修改网站的admin路径的URL，并为其命名即可轻松记住和难以猜测的名称。</p>
<p>查看此<a href="http://docs.magento.com/m1/ce/user_guide/configuration/url-admin-custom.html" rel="nofollow" target="_blank">免费的Magento指南，</a>以了解有关如何自行配置的更多信息。</p>
<h3 id="bonus-point">其他</h3>
<p>修改站点管理面板的安全设置。您是否想知道是否可以保护电子商务网站的后端区域免受恶意访问？</p>
<p>好吧，Magento可以让您轻松地从管理面板修改安全设置，从而做到这一点。使用此配置选项，您可以始终为您的网站网址创建一个密钥。</p>
<p>您还可以为管理会话设置上限，在这种情况下，这是用于访问该站点的密码有效的期限。此外，您还可以配置阻止尝试访问仪表板的人之前允许的确切登录尝试次数。</p>
<p>最后，请确保还使用此选项配置允许重置密码的请求数。</p>
<h2 id="final-thoughts">最后的想法</h2>
<p>这些技巧可以确保您的网站安全。现在必须实施它们，并且在您开始在网站上接受付款之前，请确保在Magento网站中拥有有效的SSL证书。使用这些证书保护您的网站之前，请勿冒险在网站中付款。</p>]]></description>
      <pubDate>Fri, 27 Sep 2019 19:48:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[升级Magento 2的终极指南]]></title>
      <link>https://www.360magento.com/blog/upgrade-magento-2/</link>
      <description><![CDATA[<p>该帖子由360Magento的技术人员进行了验证，以指导用户<strong>如何使用命令行和composer升级Magento 2版本</strong>。让我们逐步遵循本指南。</p>
<h2 id="to-updating-magento-2">更新Magento 2</h2>
<ul>
<li><a href="#step-1-backup-your-store">步骤1：备份网站</a></li>
<li><a href="#step-2-turn-on-maintenance-mode">步骤2：开启维护模式</a></li>
<li><a href="#step-3-upgrade-to-magento-2">步骤3：升级至Magento 2</a></li>
<li><a href="#step-4-check-the-current-magento-2s-version">步骤4：检查当前的Magento 2版本</a></li>
</ul>
<h3 id="step-1-backup-your-store">步骤1：备份网站</h3>
<p>为您的Magento 2站点创建备份非常紧急且必要，如果站点上有任何更改或中断，您可以通过备份管理保护所有数据免遭丢失。请按照本指南<a href="https://www.360Magento.com/blog/how-to-create-backups-magento-2">备份您的Magento 2网站</a>。</p>
<h3 id="step-2-turn-on-maintenance-mode">步骤2：开启维护模式</h3>
<p>升级时，应将网站置于维护模式。要启用维护模式：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento maintenance:enable
</code></pre></div></div>
<p>它将创建一个新文件<code class="language-plaintext highlighter-rouge">var/.maintenance.flag</code>。如果无法禁用维护模式，则可以删除此文件[记住！]</p>
<h3 id="step-3-upgrade-to-magento-2">步骤3：升级至Magento 2</h3>
<p>在这种情况下，我将升级到Magento版本<code class="language-plaintext highlighter-rouge">2.2.1</code>。在<a href="https://github.com/magento/magento2/releases">Github版本中</a>查看最新<a href="https://github.com/magento/magento2/releases">版本</a></p>
<h4 id="step-31-pull-package">步骤3.1拉包</h4>
<p><code class="language-plaintext highlighter-rouge">terminal/command-prompt</code>首先使用以下命令：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>composer require magento/product-community-edition 2.2.1 --no-update<font>
composer update<font>
</code></pre></div></div>
<p>可能会要求您输入用户名和密码</p>
要生成公钥/私钥对，进入<a href="https://marketplace.magento.com/customer/accessKeys/">Access Keys页面</a>并点击“Create A New Access Key”</p>
<h4 id="step-32-flush-cache">步骤3.2刷新缓存</h4>
<p>现在该删除缓存和generation了。在根文件夹中运行以下命令行：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rm -rf var/cache/*<font>
rm -rf var/page_cache/*<font>
rm -rf var/generation/*<font>
</code></pre></div></div>
<h5 id="notes">注意：</h5>
<ul>
<li>您或许安装了Memcached，Redis缓存...，应手动刷新这些缓存。</li>
</ul>
<h4 id="step-33-run-upgrade-magento">步骤3.3运行Upgrade升级Magento</h4>
<p>运行Upgrade模块，数据库架构</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento setup:upgrade
</code></pre></div></div>
<h4 id="step-34-run-complie-reindex">步骤3.4运行complie，reindex</h4>
<p>升级后，应运行编译和重新索引以提高性能。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento setup:di:compile<font>
php bin/magento indexer:reindex<font>
</code></pre></div></div>
<h5 id="notes-1">注意：</h5>
<ul>
<li>在Ubuntu / Debian Linux中，遇到权限问题时，请记住<code class="language-plaintext highlighter-rouge">sudo</code>在每个命令的开头插入<code class="language-plaintext highlighter-rouge">sudo composer update</code>。</li>
</ul>
<h4 id="step-35-disable-maintenance-mode">步骤3.5禁用维护模式</h4>
<p>您已在步骤2中打开了维护模式，现在必须将其关闭。运行以下命令行将其关闭：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento maintenance:disable
</code></pre></div></div>
<h3 id="step-4-check-the-current-magento-2s-version">步骤4：检查当前的Magento 2版本</h3>
<p>接下来，您可以通过运行命令检查Magento 2的版本。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento --version
</code></pre></div></div>
<p>如果系统显示缓存写入权限错误，请添加以下命令以对pub和var目录授予写入权限：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>chmod -R 777 pub var
</code></pre></div></div>
<h2 id="faqs">常见问题</h2>
<h4 id="q-i-cannot-access-to-frontend-after-upgrading">问：升级后我无法访问前端？</h4>
<p>您可能会收到以下消息： <code class="language-plaintext highlighter-rouge">We're sorry, an error has occurred while generating this email.</code></p>
<h4 id="answer">回答：</h4>
<p>那是因为Web服务器的读写权限。运行以下命令来解决该问题：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> find var vendor pub/static pub/media app/etc -type f -exec chmod u+w {} \; &amp;&amp; find var vendor pub/static pub/media app/etc -type d -exec chmod u+w {} \; &amp;&amp; chmod u+x bin/magento
</code></pre></div></div>
<p>再次刷新缓存：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rm -rf var/cache/*<font>
rm -rf var/page_cache/*<font>
rm -rf var/generation/*<font>
</code></pre></div></div>
<h2 id="upgrade-magento-2-service">升级Magento 2服务</h2>
<p>360Magento提供升级到最新的Magento 2版本，请<a href="https://www.360magento.com/contacts">与我们联系</a>以获取更多信息。</p>
<p>这就是通过命令行和composer升级/更新Magento 2版本的所有操作。感谢您的阅读，如果有任何麻烦，请<a href="https://www.360magento.com/contacts">与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 10 Sep 2019 04:45:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何重置Magento 2锁定的管理员帐户]]></title>
      <link>https://www.360magento.com/blog/how-to-reset-a-locked-admin-account-in-magento-2/</link>
      <description><![CDATA[<p>黑客可以通过连续尝试许多易于猜测的密码来滥用您的安全墙，这是一种常见的方式。因此，由于多次尝试失败，您的管理员后端已被锁定，Magento 2核心将阻止管理员用户继续登录。</p>
<p>所有登录操作将在一段时间内被阻止。</p>
<p>不幸的是，这对双方都不是好消息。为了确保及时管理后端的过程，您可以利用启动一些命令行的优势，这些命令行使安全的管理员帐户能够尽快重新登录到配置。为了具有执行Linux命令行操作的权限，您必须具有SSH访问权限以安全地连接到服务器。此步骤需要直接从服务器管理器获得许可，因此这将是黑客的最终选择，他们显然无法在您的鼻子底下运行命令行。</p>
<p>继续查看如何重置锁定的管理员用户，并在需要本教程时将其标记为书签。</p>
<h2 id="reset-a-locked-admin-account-in-magento-2">在Magento 2中重置锁定的管理员帐户</h2>
<p>商店所有者可以选择以下列出的方法之一</p>
<ul>
<li><a href="#solution-1-unlock-in-backend">解决方案＃1。解锁后端</a></li>
<li><a href="#solution-2-using-command-lines">解决方案2。使用命令行</a></li>
</ul>
<h2 id="solution-1-unlock-in-backend">解决方案＃1。解锁后端</h2>
<p>假设您要管理几个管理员帐户，但只有一个或两个被锁定，这将是在后端即可完成的最简单方法。</p>
<p>按照<code class="language-plaintext highlighter-rouge">System &gt; Locked Users</code>检查所有当前锁定的用户，然后选择要打开锁定的特定管理员帐户。</p>
<p><img src="https://cdn.mageplaza.com/media/general/T1BS3T2.png" alt="后端"></p>
<h2 id="solution-2-using-command-lines">解决方案2。使用命令行重置</h2>
<ul>
<li>第1步：打开您的Magento 2目录</li>
<li>步骤2：运行命令行。</li>
<li>步骤3：检查结果</li>
</ul>
<h3 id="step-1-open-your-magento-2-dir">第1步：打开您的Magento 2目录</h3>
<p>首先，打开您的Magento 2目录，这是重置管理员用户的常规格式。请注意，您只能手动解锁一个帐户。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento admin:user:unlock {username}
</code></pre></div></div>
<h3 id="step-2-running-command-lines">步骤2：运行命令行。</h3>
<p>要解锁特定的管理员帐户，请将该管理员的名称插入{username}变量中，例如，使用名为的管理员<code class="language-plaintext highlighter-rouge">sam</code>，键入以下命令行：</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>php bin/magento admin:user:unlock sam
</code></pre></div></div>
<h3 id="step-3-check-the-result">步骤3：检查结果</h3>
<p>如果输入的数据有效，则将在界面上发送成功消息。</p>
<p><img src="https://cdn.mageplaza.com/media/general/cQlyZEO.png" alt="解锁成功"></p>
<ul>
<li>如果输入管理员名称有误，此消息将通知：
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Couldn't find the user account "sam"
</code></pre></div> </div>
<p>您应该检查并重新键入步骤1中的命令行以及准确的管理员名称。</p>
</li>
<li>如果帐户从一开始就没有被锁定或无法被解锁，则会显示以下消息</li>
</ul>
<p><img src="https://cdn.mageplaza.com/media/general/6aYkeZr.png" alt="开锁"></p>]]></description>
      <pubDate>Fri, 06 Sep 2019 08:41:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何备份Magento 2网站]]></title>
      <link>https://www.360magento.com/blog/how-to-create-backups-magento-2/</link>
      <description><![CDATA[<p><strong>目录</strong></p>
<ul>
<li><a href="#create-magento-2-backup">创建一个Magento 2备份</a>
<ul>
<li><a href="#system-backup">系统备份</a></li>
<li><a href="#datebase-and-media-backup">数据库和媒体备份</a></li>
<li><a href="#database-backup">数据库备份</a></li>
</ul>
</li>
</ul>
<p><strong>为您的Magento 2创建备份</strong>非常重要且必要，如果站点上有任何更改或中断，您可以通过备份管理保护所有数据免遭丢失。特别是，这些数据库将在需要的正确位置自动恢复。</p>
<p>Backups Management存档的系统部分还包括文件系统，数据库，媒体文件等。同时，数据库备份文件使用.gz格式压缩。对于系统备份以及数据库和媒体备份，使用.tgz格式。</p>
<p>现在，我们将更深入地研究该机制，以便为像您这样的Magento 2网站创建一个完美的备份。</p>
<h2 id="create-magento-2-backup">创建Magento 2备份</h2>
<ul>
<li>在管理控制台上，单击<code class="language-plaintext highlighter-rouge">System</code>。在该<code class="language-plaintext highlighter-rouge">Tools</code>部分中，选择<code class="language-plaintext highlighter-rouge">Backups</code>。</li>
<li>在右上角，点击您要创建的备份类型的按钮：</li>
</ul>
<p><img src="https://cdn.mageplaza.com/media/general/ZZbkuUH.png" alt="如何创建Magento 2备份"></p>
<h3 id="system-backup">系统备份</h3>
<p>创建数据库和文件系统的完整备份。在此过程中，您可以通过<code class="language-plaintext highlighter-rouge">Include Media folder to System Backup</code>选中复选框来选择将媒体文件夹包括在备份中</p>
<h3 id="datebase-and-media-backup">数据库和媒体备份</h3>
<p>创建数据库和媒体文件夹的备份。</p>
<h3 id="database-backup">数据库备份</h3>
<p>创建数据库的备份。</p>
<p><img src="https://cdn.mageplaza.com/media/general/qhvxLFu.png" alt="Magento 2数据库备份"></p>
<ul>
<li>完成后，单击<code class="language-plaintext highlighter-rouge">OK</code>按钮</li>
</ul>]]></description>
      <pubDate>Thu, 05 Sep 2019 03:08:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何通过Composer安装插件扩展]]></title>
      <link>https://www.360magento.com/blog/magento2-install-extensions-via-composer/</link>
      <description><![CDATA[<p>本文将指导您使用Composer安装Magento 2扩展。</p>
<p><em>注意：按照说明进行操作时，请确保您知道自己在做什么。如果文章中的任何操作或术语引起混淆，请专业人员完成这项工作。</em></p>
<p>要通过Composer安装Magento 2扩展程序，您需要：</p>
<ul>
<li>服务器上已安装Magento 2和Composer</li>
<li>SSH服务器凭证</li>
<li><a href="https://magento.com/" target="_blank" rel="nofollow">https://magento.com/</a> Magento Marketplace帐户</li>
<li>扩展包</li>
</ul>
<h2>步骤1. Magento.com帐户</h2>
<p>如果您之前没有注册过，请访问<a href="https://magento.com/" target="_blank" rel="nofollow">https://magento.com/</a>并创建一个帐户。</p>
<p>登录帐户并转到“Marketplace”选项卡：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/go-to-marketplace.png" alt="前往Magento市场" width="909" height="678"></p>
<p>进入“My Access Keys”菜单项：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/my-access-keys.png" alt="我的访问密钥部分" width="901" height="489"></p>
<p>您可以创建一个新的访问密钥，也可以使用现有的访问密钥：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/use-keys.png" alt="使用密钥" width="1063" height="543"></p>
<p>保存访问密钥，因为它们将在以下步骤中使用。</p>
<h2>准备本地存储库</h2>
<p>通过SSH\SFTP登录到服务器，并在您方便的位置创建一个<em>repo</em>文件夹。在我们的示例中，完整文件夹路径将为<em>/www/private/magento/repo</em></p>
<p><em>注意：您可以为文件夹选择任何名称，但是请确保在执行以下操作时更改名称。</em></p>
<p>将您的扩展程序文件夹复制到此新创建的文件夹中。执行此操作后，以下是repo文件夹的例子：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/folder-contents.png" alt="文件夹内容" width="525" height="259"></p>
<p>如果扩展程序包是从Magento Marketplace网站下载的，则需要将<em>/upload/app/code/Vendor/</em>内容放入新创建的文件夹中。</p>
<p>如果扩展程序包仅包含这些文件夹的内容，则必须手动创建文件夹。要获取正确的文件夹名称，请检查<em>registration.php</em>文件：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/create-folders.png" alt="建立资料夹" width="749" height="297"></p>
<p>&nbsp;</p>
<h2>向Composer添加扩展并安装它们</h2>
<p>使用SSH登录到服务器，然后转到Magento 2文件夹。</p>
<p>在此文件夹中，将以下命令发送到Composer，告诉它将扩展添加到存储库。不要忘记用您自己的名称替换模块名称，文件夹路径和模块文件夹名称：</p>
<pre>
composer config repositories.module_name path /www/private/magento/repo
</pre>
<p><em>module_name</em>  &nbsp;是扩展名，您可以根据需要命名。</p>
<p>现在，我们已将扩展添加到Composer中，我们可以安装它们了。该命令将安装<em>amasty/[module_name]</em>：</p>
<pre>
composer require amasty/[module_name]
</pre>
<p>如果您是第一次运行该命令，则Composer将要求您提供magento.com帐户凭据。在这里，您将使用之前获得的公钥和私钥。</p>
<p>命令输出如下所示：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_267/command-output.png" alt="通过composer安装Magento 2扩展的命令输出" width="598" height="424"></p>
<p>现在，让我们完成安装过程：</p>
<pre>
php bin/magento setup:upgrade
</pre>
<p>恭喜，您的Magento扩展程序现已通过Composer安装。</p>]]></description>
      <pubDate>Tue, 27 Aug 2019 07:19:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[7种方法检测magento系统]]></title>
      <link>https://www.360magento.com/blog/check-magento-version/</link>
      <description><![CDATA[<p>Magento被称为最大的电子商务内容管理平台。三星，Fort，Fox Connect，联想，奥林巴斯，男士健康，Vizio，雀巢，耐克以及全球数百万个中小型商业网站等许多大品牌都使用了该平台。随着时间的推移，Magento 2会不断更新，因此商店的所有者可能会要求更改其当前的Magento版本。但是，在切换到另一个版本之前，他们最初会更好地了解Magento 2版本之间的优缺点，以便最终做出正确的决定。本文将向您介绍<strong>如何检查Magento 2版本</strong>以及其他<strong>版本</strong>。</p>
<p><strong>内容简要</strong></p>
<ul>
<li><a href="#method-1-use-magento-version-checking-tool">1.使用Magento版本检查工具</a></li>
<li><a href="#method-2-checking-version-from-url">2.从URL检查版本</a></li>
<li><a href="#method-3-checking-magento-version-via-online-tools">3.通过在线工具检查Magento版本</a></li>
<ul>
<li><a href="#check-magento-version-at-magescan">在MageScan中检查Magento版本</a></li>
<li><a href="#check-magento-version-and-more-at-magereport">在MageReport中检查Magento版本及更多</a></li>
</ul>
<li><a href="#method-4-check-version-in-admin-dashboard">4.在管理控制台中检查版本 </a></li>
<li><a href="#method-5-check-in-composerjson-file">5.再Composer.json文件中检查版本</a></li>
<li><a href="#method-6-use-php-code-checking">6.使用PHP代码检查</a></li>
<ul>
<li><a href="#check-magento-1-version">检查Magento 1版本 </a></li>
<li><a href="#check-magento-2-version">检查Magento 2版本 </a></li>
</ul>
<li><a href="#method-7-check-magento-version-via-command-line">7.通过命令行检查Magento版本</a></li>
</ul>
<h2 id="7-ways-help-you-check-magento-version">帮助您检查Magento版本的7种方法</h2>
<h3 id="method-2-checking-magento-version-from-url">方法＃1：从URL检查Magento版本</h3>
<p><strong>检查Magento版本的</strong>另一种方法是不使用任何工具，而只是在您的域名URL后面添加<code class="language-plaintext highlighter-rouge">/magento_version</code>然后进行搜索。显示的结果是您的Magento版本以及您网站上运行的版本。</p>
<p>让我们在那里查看示例：<a class="vglnk" href="https://marketplace.magento.com/magento_version" rel="nofollow"><span>https </span><span>：// </span><span>marketplace </span><span>。</span><span>magento </span><span>。</span><span>com </span><span>/ </span><span>magento </span><span>_ </span><span>版本</span></a></p>
<p><img alt="通过URL检查Magento版本" src="https://cdn.mageplaza.com/media/general2/ybI0XAg.png" /></p>
<h3 id="method-3-checking-magento-version-via-online-tools">方法＃3：通过在线工具检查Magento版本</h3>
<p>除了上述方法外，还有三个在线工具也可以免费使用。同样，您要做的就是放入商店的URL，然后在几秒钟内显示选中的Magento版本和版本。</p>
<h4 id="check-magento-version-at-magescan">在MageScan中检查Magento版本</h4>
<p><img alt="使用Magescan检查Magento的版本" src="https://cdn.mageplaza.com/media/general2/6EHyFao.png" /></p>
<p><a href="https://magescan.com/" rel="nofollow" target="_blank">MageScan</a>是服务提供商，可以帮助网店所有者和开发人员根据建议的Magento安全标准测试其站点。因此，该工具为用户提供了有关其Magento商店的各种信息，其中包括安装的Magento的版本。它可以通过分析默认的Magento文件以及它们在版本之间的变化来做到这一点。</p>
<p><img alt="易于通过Magescan在线检查Magento版本" src="https://cdn.mageplaza.com/media/general2/AlwEnnU.png" /></p>
<p>填写商店的URL后，MageScan不仅会为您提供上述所有工具可以显示的两个最重要的结果，而且还可以显示其他信息，例如托管提供商，管理面板，日志，版本控制，开发文件等。</p>
<h4 id="check-version-and-more-at-magereport">在MageReport中检查版本及更多内容</h4>
<p>提供与MageScan相同的功能，<a href="https://www.magereport.com/" rel="nofollow" target="_blank">MageReport</a>还为用户提供商店中使用的Magento版本。此外，它可以扫描网站所面临的安全状态的洞察力，而最有用的是一些补救建议，以解决这些漏洞。</p>
<p><img alt="一分钟内使用Magereport检查Magento版本" src="https://cdn.mageplaza.com/media/general2/al5BeQd.png" /></p>
<p>MageReport由Byte.nl提供，该公司是Magento供应商的托管专业人士。该工具使用基于行为的标识模式。因此，它对大多数商店的经理都是值得信赖和有帮助的。下表列出了MageReport可以为基于Magento的在线商店找到的可检查安全漏洞：</p>
<ul>
<li>当前的Magento版本</li>
<li>Magento版本已过时</li>
<li>默认/管理员位置</li>
<li>安全补丁</li>
<li>勒索软件</li>
<li>不安全的版本控制</li>
<li>过时的服务器软件</li>
</ul>
<h3 id="method-4-check-version-in-admin-dashboard">方法4：在管理控制台中检查版本</h3>
<p>获取Magento版本号的另一种方法太简单了，通常您不会注意到。访问管理面板，然后在仪表板上，在每个后端页面的右下角找到Magento版本。看下面的图片，您会看到它非常熟悉：</p>
<p><img alt="在Magento管理控制台中检查版本" src="https://cdn.mageplaza.com/media/general2/lTQjlAa.png" /></p>
<p><img alt="在管理控制台中检查Magento版本" src="https://cdn.mageplaza.com/media/general2/J8RZ5oB.png" /></p>
<h3 id="method-5-check-in-composerjson-file">方法＃5：再Composer.json文件中检查版本</h3>
<p>您还可以通过<a href="https://github.com/magento/magento2/blob/2.2-develop/composer.json#L5">示例</a>在根composer.json文件第5行中看到Magento 2版本<a href="https://github.com/magento/magento2/blob/2.2-develop/composer.json#L5"></a></p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>{<span>
    "name": "magento/magento2ce",<span>
    "description": "Magento 2 (Open Source)",<span>
    "type": "project",<span>
    "version": "2.2.6-dev",<span>
    "license": [<span>
        "OSL-3.0",<span>
        "AFL-3.0"<span>
    ],<span>
    ...<span>
</span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
</div>
<h3 id="method-6-use-php-code-checking">方法6：使用PHP代码检查</h3>
<h4 id="check-magento-1-version">检查Magento 1版本</h4>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>Mage::getVersion() //will return the magento version
</code></pre>
</div>
</div>
<h4 id="check-magento-2-version">检查Magento 2版本</h4>
<p>您可以在2.0.x版本中使用它：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>echo \Magento\Framework\AppInterface::VERSION;
</code></pre>
</div>
</div>
<p>对于2.1版：</p>
<p>第一种方法，使用DI：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>public function __construct( \Magento\Framework\App\ProductMetadataInterface $productMetadata ) {<span>
	$this-&gt;productMetadata = $productMetadata;<span>
}<span>
public function getMagentoVersion() {<span>
	return $this-&gt;productMetadata-&gt;getVersion();<span>
}<span>
</span></span></span></span></span></span></code></pre>
</div>
</div>
<p>第二种方法，直接使用ObjectManager：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();<span>
$productMetadata = $objectManager-&gt;get('Magento\Framework\App\ProductMetadataInterface');<span>
echo $productMetadata-&gt;getVersion();<span>
</span></span></span></code></pre>
</div>
</div>
<h2 id="method-7-check-magento-version-via-command-line">方法7：通过命令行检查Magento版本</h2>
<p>您可以运行以下命令以获取Magento 2版本：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento --version
</code></pre>
</div>
</div>
<p>实际上，由于Magento 2已利用其composer，因此您无需为此编写任何PHP代码。相反，有两种方法可以找到Magento 2版本：</p>
<p>首先，请尝试composer.json并查找version关键字。如果您更喜欢使用终端，则可以在项目的根目录中添加一些内容。</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>composer licenses | grep Version:
</code></pre>
</div>
</div>
<p>检查Magento 2版本天气的另一种方法是社区版或企业版，请输入以下内容</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>composer licenses | grep Name:
</code></pre>
</div>
</div>
<h2 id="final-words">最后的话</h2>
<p>Magento 2是出色的电子商务解决方案，具有专门用于商业目的的功能和设计的服务。对于曾经在其网站上安装此平台的用户来说，他们很可能曾经想过要设置或更新哪个Magento版本，以使其商店的<a href="https://www.360magento.com/blog/magento-2-performance-optimization/">性能更好</a>。该博客可以通过各种简单的方法帮助您<strong>检查Magento的版本</strong>，希望您可以为在线商店做出正确的选择。</p>]]></description>
      <pubDate>Wed, 21 Aug 2019 08:33:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2性能优化]]></title>
      <link>https://www.360magento.com/blog/magento-2-performance-optimization/</link>
      <description><![CDATA[<p>对于Magento 2商店，<strong><a href="https://www.360magento.com/blog/magento-2-performance-optimization/">Magento 2性能优化</a></strong>是使您的工作取得更大成功的重要因素之一。请记住，如果您希望客户花在您网站上的时间段内带来出色的体验，那么就可以使客户与您在一起的时间更长。因此，快速的在线商店是理想的选择，它对您期望的访问者更为友好，而不是网站的性能不佳。只有当您的商店离消费者更近时,增加转化率以及优化收入的过程才变得越来越容易。</p>
<p>根据<a href="https://magento.com/resources/white-paper-magento-2-site-performance-and-scalability-optimizations" rel="nofollow" target="_blank">Benchmark Testing</a>的比较，可以在Magento Enterprise Edition 2.0和Magento Enterprise Edition 1.14.2的现成支持和推荐配置之间进行比较。测试证明，在所有指标和用例中，Magento 2.0被视为比Magento 1.x更大的平台。使用Magento ver.2，您将处理令人惊讶的结果：</p>
<ul>
<li>每小时处理多达39％的订单</li>
<li>提供几乎即时的服务器响应时间，用于目录浏览</li>
<li>加快购物车服务器响应时间达66％</li>
<li>提供最高51％的端到端结帐时间</li>
</ul>
<p>如今，当人们广泛意识到Magento 2性能时，集成了许多其他技术来支持Magento 2性能优化，例如Varnish，Redis，Nginx甚至是全页缓存解决方案。借助现有工具，开发团队可以轻松地开始功能的解耦，然后通过组件之间的稳定兼容性和可操作性将灵活性升级到新的水平。在服务器响应时间和浏览器端渲染速度上设计更好的界面是一个好主意。毕竟，您将在改善Magento 2性能和增强商店客户体验方面取得重大进展。</p>
<h2 id="how-to-optimize-magento-2-performance">如何优化Magento 2的性能</h2>
<p>作为正常的电子商务页面，加载产品页面需要3秒钟以上的时间。如果您的客户需要浏览网站上的五个类似页面，您是否觉得很烦？当然，他们永远也不会耐心等待延迟。请关注这篇文章，并找到相关的方法来提高网站的性能。</p>
<h2 id="steps-to-optimize-performance">优化性能的步骤</h2>
<ul>
<li><a href="#step-1-enable-flat-categories-and-products">步骤1：启用Flat Categories 和 Products</a></li>
<li><a href="#step-2-merge-css-and-js-files">步骤2：合并CSS和JS文件</a></li>
<li><a href="#step-3-content-delivery-network">步骤3：CDN(内容传送网络)</a></li>
<li><a href="#step-4-caching">步骤4：缓存</a></li>
<li><a href="#step-5-image-optimization">步骤5：图片优化</a></li>
<li><a href="#step-6-enable-compression">步骤6：启用压缩</a></li>
<li><a href="#step-7-reduce-server-response-time">步骤7：减少服务器响应时间</a></li>
<li><a href="#step-8-magento-updates">步骤8：Magento更新</a></li>
</ul>
<p>首先，让我们在Google <a href="https://developers.google.com/speed/pagespeed/insights/" rel="nofollow" target="_blank">PageSpeed Tools中</a>检查分数</p>
<p><img alt="检查Pagespeed" src="https://cdn.mageplaza.com/media/general/O3BImNZ.png" /></p>
<h3 id="step-1-enable-flat-categories-and-products">步骤1：启用Flat Categories 和 Products</h3>
<p>您可能知道，对Magento 2性能的速度产生重大影响的方面之一就是数据库加载的能力。在配置中，启用<strong>Flat Catalog</strong>可以加快速度。Flat Catalog允许在有任何显示产品的请求时卸载数据库的数量。同时，MySQL查询的复杂性将降低。</p>
<p>转到后端，<code class="language-plaintext highlighter-rouge">Stores &gt; Configuration &gt; Catalog &gt; Catalog &gt; Storefront</code>在<strong>Use Flat Catalog Category</strong>字段中选择&ldquo;Yes&rdquo; 。</p>
<p><img alt="Magento 2性能-使用平面目录" src="https://cdn.mageplaza.com/media/general/nfkHXTE.png" /></p>
<h3 id="step-2-merge-css-and-js-files">步骤2：合并CSS和JS文件</h3>
<p>您需要遵循的下一步是合并和最小化CSS和Javascript文件，这意味着使网页尽可能的轻巧，以便快速加载。请将Magento 2置于生产模式。</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>./bin/magento deploy:mode:set production
</code></pre>
</div>
</div>
<h4 id="javascript-file">Javascript文件</h4>
<ul>
<li>去后端 <code class="language-plaintext highlighter-rouge">Stores -&gt; Configuration &gt; Advanced &gt; Developer &gt; JavaScript Settings</code></li>
<li><code class="language-plaintext highlighter-rouge">Merge JavaScript Files</code>设为是</li>
<li><code class="language-plaintext highlighter-rouge">Minify JavaScript Files</code>设为是</li>
</ul>
<p><img alt="Magento 2性能-合并JS文件" src="https://cdn.mageplaza.com/media/general/Kawf9TL.png" /></p>
<h4 id="css-file">CSS文件</h4>
<ul>
<li>去后端 <code class="language-plaintext highlighter-rouge">Stores &gt; Configuration &gt; Advanced &gt; Developer &gt; CSS Settings</code></li>
<li><code class="language-plaintext highlighter-rouge">Merge CSS Files</code>设为是</li>
<li><code class="language-plaintext highlighter-rouge">Minify CSS Files</code>设为是</li>
</ul>
<p><img alt="Magento 2 Performance-合并CSS文件" src="https://cdn.mageplaza.com/media/general/1n9CqRj.png" /></p>
<p>完成后，<code class="language-plaintext highlighter-rouge">Save Config</code>刷新缓存以激活更改。</p>
<h3 id="step-3-content-delivery-network">步骤3：内容传送网络</h3>
<p>内容分发网络（CDN）是一个特殊的系统，可以连接所有缓存服务器。除了受支持的地理位置邻近性外，CDN还将接管交付的Web内容并加快页面加载。</p>
<p>请按照本指南为Magento 2商店设置CDN。去后端<code class="language-plaintext highlighter-rouge">Stores -&gt; Configuration &gt; General &gt; Web &gt; Base URLs (Secure)</code></p>
<p><img alt="Magento 2 Performance-内容交付网络" src="https://cdn.mageplaza.com/media/general/VAQU2in.png" /></p>
<h3 id="step-4-caching">步骤4：缓存</h3>
<p>在后端，<code class="language-plaintext highlighter-rouge">System &gt; Cache Management</code>。</p>
<p><img alt="Magento 2性能-缓存管理" src="https://cdn.mageplaza.com/media/general/ds5MV8n.png" /></p>
<p>在这里，您可以找到许多缓存选项来刷新Magento 2缓存。点击<code class="language-plaintext highlighter-rouge">Enable</code>，然后点击<code class="language-plaintext highlighter-rouge">Submit</code>您需要的选项。</p>
<h3 id="step-5-image-optimization">步骤5：图片优化</h3>
<p>图像是使Magento 2商店的性能更加生动的必要因素。但是，图像大小太大而无法在您的站点上载是超载页面的关键原因之一。因此，<a href="https://www.360magento.com/blog/optimize-img/">压缩图像</a>应在提交任何图像之前完成。您可以将JPEG格式用于产品图像，将PNG或SVG用于布局以及徽标。</p>
<h3 id="step-6-enable-compression">步骤6：启用压缩</h3>
<p>跟随资源启用Google提供的压缩功能。</p>
<p>让我们从以下方式更改nginx压缩指令：</p>
<ul>
<li>gzip_types：gzip_types: text/plain application/x-javascript text/javascript text/xml text/css image/x-icon image/bmp image/png image/gif; to</li>
<li>gzip_types：*;</li>
</ul>
<h3 id="step-7-reduce-server-response-time">步骤7：减少服务器响应时间</h3>
<p>通过Magento 2内置缓存功能，您的站点的响应时间相当不错，大约为0.5秒。但这不是Google期望的理想时间。因此，Magento 2 本身通过Varnish 支持全页缓存。让我们将Varnish设置为在0.1-0.2s左右获得第一个字节。</p>
<p>转到后端，将<code class="language-plaintext highlighter-rouge">Stores &gt; Configuration &gt; Advanced &gt; System &gt; Full Page Cache</code>缓存应用程序转移到Varish Cache。</p>
<p><img alt="Magento 2性能-启用清漆缓存" src="https://cdn.mageplaza.com/media/general/xDoZm0I.png" /></p>
<p>打开<strong>Varnish Configuration</strong>部分，完成设置：</p>
<p><img alt="Magento 2 Performance-清漆配置" src="https://cdn.mageplaza.com/media/general/NUerGt1.png" /></p>
<h3 id="step-8-magento-updates">步骤8：Magento更新</h3>
<p>记得更新您的Magento 2商店。360Magento团队将尽力帮助您优化站点性能。</p>
<h3 id="result-after-optimizing-magento-2-store">优化Magento 2商店后的结果</h3>
<p><img alt="Magento 2 Performace" src="https://cdn.mageplaza.com/media/general/PuL1Yai.jpg" /></p>
<h2 id="performance-toolkit-optional">性能工具包（可选）</h2>
<h3 id="installation">安装</h3>
<p>jMeter：</p>
<p>&ndash;转到<a href="https://jmeter.apache.org/download_jmeter.cgi" rel="nofollow" target="_blank">http://jmeter.apache.org/download_jmeter.cgi</a>并在&ldquo;二进制&rdquo;部分下载jMeter（请注意，需要Java 6或更高版本）&ndash;解压缩存档</p>
<p>插件（仅当您要使用其他报告（例如图形）时）：</p>
<p>&ndash;转到<a href="http://jmeter-plugins.org/downloads/all/" rel="nofollow" target="_blank">http://jmeter-plugins.org/downloads/all/</a>并下载JMeterPlugins-Standard和JMeterPlugins-Extras</p>
<p>&ndash;将它们解压缩到jMeter实例的相应ext目录。</p>
<p>&ndash;现在可以通过GUI添加其他报告。</p>
<h3 id="usage">用法</h3>
<p>在首次运行jMeter测试之前，您需要首先使用bin / magento setup：performance：generate-fixtures命令生成测试数据。</p>
<h4 id="run-via-console">通过控制台运行</h4>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>Scenario can accept parameters that are described bellow in format &lt;parameter_name:default_value&gt;:<span>
<span>
&lt;host:localhost&gt; URL component 'host' of application being tested (URL or IP). Default is 'localhost'.<span>
<span>
&lt;base_path:/&gt; Base path for tested site. Default is '/'.<span>
<span>
&lt;report_save_path:./&gt; Path where reports will be saved. Reports will be saved in current working directory by default. Default is './'.<span>
<span>
&lt;ramp_period:300&gt; Ramp period (seconds). Period the request will be distributed within. Default is '300'.<span>
<span>
&lt;orders:0&gt; Number of orders in the period specified in the current allocation. If &lt;orders&gt; is specified, the &lt;users&gt; parameter will be recalculated. Default is '0'.<span>
<span>
&lt;users:100&gt; Number of concurrent users. Recommended  amount is 100. Minimal amount is 10. Default is '100'.<span>
<span>
&lt;view_product_add_to_cart_percent:62/&gt; Percentage of users that will only reach the add to cart stage. Default is '62'.<span>
<span>
&lt;view_catalog_percent:30/&gt; Percentage of users that will only reach the view catalog stage. Default is '30'.<span>
<span>
&lt;guest_checkout_percent:4/&gt; Percentage of users that will reach the guest checkout stage. Default is '4'.<span>
<span>
&lt;customer_checkout_percent:4/&gt; Percentage of users that will reach the (logged-in) customer checkout stage. Default is '4'.<span>
<span>
&lt;loops:1/&gt; Number of loops to run. Default is '1'.<span>
<span>
&lt;admin_path:admin/&gt; Admin backend path. Default is 'admin'.<span>
<span>
&lt;admin-user:admin/&gt; Admin backend user. Default is 'admin'.<span>
<span>
&lt;admin-password:123123q/&gt; Admin backend password. Default is '123123q'.<span>
<span>
&lt;think_time_deviation:1000&gt; Deviation (ms) for "think time" emulation. Default is '1000'.<span>
<span>
&lt;think_time_delay_offset:2000&gt; Constant delay offset (ms) for "think time" emulation. Default is '2000'.<span>
<span>
Necessary parameters must be passed to [command line](<a class="vglnk" href="https://www.360magento.com/blog/magento-2-command-line-interface-cli.html" rel="nofollow"><span>https</span><span>://</span><span>www</span><span>.</span><span>360magento</span><span>.</span><span>com</span><span>/</span><span>devdocs</span><span>/</span><span>magento</span><span>-</span><span>2</span><span>-</span><span>command</span><span>-</span><span>line</span><span>-</span><span>interface</span><span>-</span><span>cli</span><span>.</span><span>html</span></a>) with "J" prefix: "-J&lt;parameter_name&gt;=&lt;parameter_value&gt;"<span>
<span>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
</div>
<p>例：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&gt; cd /directory_of_jMeter/bin/<span>
<span>
&gt; jmeter -n -t /path_to_benchmark_file/benchmark.jmx -Jhost=magento2.dev -Jbase_path=/ -Jusers=100 -Jramp_period=300 -Jreport_save_path=./<span>
<span>
</span></span></span></span></code></pre>
</div>
</div>
<h4 id="run-via-gui">通过GUI运行</h4>
<ul>
<li>
<p>打开jMeter / bin目录并运行jmeter.bat</p>
</li>
<li>
<p>单击菜单中的文件-&gt;打开（Ctrl + O）并选择文件；或者在打开的GUI中拖放Benchmark.jmx文件。</p>
</li>
</ul>
<p>在第一个标签&ldquo;测试工具包&rdquo;上，您可以更改&ldquo;用户定义的变量&rdquo;，如下所示 <code class="language-plaintext highlighter-rouge">&lt;host&gt;, &lt;users&gt;, &lt;ramp_period&gt;, &lt;orders&gt;, &lt;report_save_path&gt;.</code></p>
<p>要运行脚本，请单击&ldquo;开始&rdquo;（顶部菜单中的绿色箭头）。</p>
<h3 id="results-of-running-report-types">运行结果（报告类型）</h3>
<p>通过GUI运行后，您可以在左侧面板中查看工作结果。选择相应的报告。</p>
<p>通过控制台运行脚本后，将在以下路径中生成报告： <code class="language-plaintext highlighter-rouge">&lt;report_save_path&gt;.</code></p>
<h3 id="threads">线程数</h3>
<p>jMeter脚本包含五个线程。安装程序线程和四个用户线程。</p>
<p>线程之间的百分比比率如下：</p>
<p>浏览，将商品添加到购物车和放弃购物车（报表中的BrowsAddToCart后缀）-62％</p>
<p>仅浏览（报表中的BrowsAddToCart后缀）-30％</p>
<p>浏览，将项目添加到购物车并以访客身份签出（报告中的GuestChkt后缀）-4％</p>
<p>浏览，将商品添加到购物车并以注册客户的身份结帐（报告中的CustomerChkt后缀）-4％</p>
<h3 id="about-reports">关于报告：</h3>
<p>总结报告。</p>
<p>报告包含有关线程的汇总信息。</p>
<p>报告文件名为 <code class="language-plaintext highlighter-rouge">{report_save_path}/summary-report.log</code></p>
<p>细节 <code class="language-plaintext highlighter-rouge"><a class="vglnk" href="http://jmeter.apache.org/usermanual/component_reference.html#Summary_Report" rel="nofollow"><span>http</span><span>://</span><span>jmeter</span><span>.</span><span>apache</span><span>.</span><span>org</span><span>/</span><span>usermanual</span><span>/</span><span>component</span><span>_</span><span>reference</span><span>.</span><span>html</span><span>#</span><span>Summary</span><span>_</span><span>Report</span></a></code></p>
<p>详细的网址报告。</p>
<p>报告包含有关URL的信息。</p>
<p>请注意，URL仅显示在生成的报告文件中（在GUI中，URL不显示）。</p>
<p>报告文件的名称为<code class="language-plaintext highlighter-rouge">{report_save_path}/detailed-urls-report.log</code>（可以以csv格式打开）。细节<code class="language-plaintext highlighter-rouge"><a class="vglnk" href="http://jmeter.apache.org/usermanual/component_reference.html#View_Results_in_Table" rel="nofollow"><span>http</span><span>://</span><span>jmeter</span><span>.</span><span>apache</span><span>.</span><span>org</span><span>/</span><span>usermanual</span><span>/</span><span>component</span><span>_</span><span>reference</span><span>.</span><span>html</span><span>#</span><span>View</span><span>_</span><span>Results</span><span>_</span><span>in</span><span>_</span><span>Table</span></a></code></p>
<p>关于其他类型请继续阅读 <code class="language-plaintext highlighter-rouge"><a class="vglnk" href="http://jmeter.apache.org/usermanual/component_reference.html" rel="nofollow"><span>http</span><span>://</span><span>jmeter</span><span>.</span><span>apache</span><span>.</span><span>org</span><span>/</span><span>usermanual</span><span>/</span><span>component</span><span>_</span><span>reference</span><span>.</span><span>html</span></a></code></p>]]></description>
      <pubDate>Fri, 16 Aug 2019 06:30:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[4种Magento 2重置管理员密码的方法]]></title>
      <link>https://www.360magento.com/blog/how-reset-admin-password-magento-2/</link>
      <description><![CDATA[<p>如果要登录Magento后台，则&ldquo;用户名&rdquo;和&ldquo;密码&rdquo;是必填字段。如果您忘记其中之一，那将是一个麻烦。因此，重置管理员密码对于每个网站都非常重要。使用Magento 2，可以单击&ldquo; 忘记密码&rdquo;链接，然后可以将临时密码立即发送到与该帐户关联的电子邮件地址。如果管理员帐户被锁定，<a href="https://www.360magento.com/blog/how-to-reset-a-locked-admin-account-in-magento-2.html">本教程</a>将对您有所帮助。让我们按照以下步骤在Magento 2中重置您的管理员密码。</p>
<h2 id="to-reset-magento-2-admin-password">重设Magento 2管理员密码</h2>
<p>Magento2中有3种重置管理员密码的方法：</p>
<ul>
<li><a href="#solution-1">解决方案1：在phpmyadmin中重置Magento 2管理员密码</a></li>
<li><a href="#solution-2">解决方案2：从管理控制台重置您的Magento 2密码</a></li>
<li><a href="#solution-3">解决方案3：通过命令行重置Magento 2管理员密码</a></li>
<li><a href="#solution-4">解决方案4：通过电子邮件重置Magento 1管理员密码</a></li>
</ul>
<h3 id="solution-1">解决方案1：在phpmyadmin中重置Magento 2管理员密码</h3>
<p>转到phpmyadmin并复制以下sql查询：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>UPDATE admin_user SET password = CONCAT(SHA2('xxxxxxxYourNewPassword', 256), ':xxxxxxx:1') WHERE username = 'admin';
</code></pre>
</div>
</div>
<p>该<code class="language-plaintext highlighter-rouge">xxxxxxx</code>字符序列的密码，它被保存在<code class="language-plaintext highlighter-rouge">app\etc\env.php</code>文件</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>&lt;?php<span>
return array (<span>
  ...<span>
  'crypt' =&gt; <span>
  array (<span>
    'key' =&gt; '525701df74e6cba74d5e9a1bb3d935ad', //cryptographic salt<span>
  ),<span>
  ...<span>
</span></span></span></span></span></span></span></span></code></pre>
</div>
</div>
<h3 id="solution-2">解决方案2：从管理控制台重置您的Magento 2密码</h3>
<ul>
<li>如果忘记密码，请单击hte <code class="language-plaintext highlighter-rouge">Forgot Your Password?</code>链接。</li>
</ul>
<p><img alt="如何重设管理员密码Magento 2忘记密码" src="https://www.360magento.com/media/wysiwyg/forgotpassword.png" /></p>
<ul>
<li>输入与管理员帐户关联的电子邮件地址。</li>
<li>点击 &nbsp; <code class="language-plaintext highlighter-rouge">Retrieve Password</code>。如果存在与该电子邮件地址关联的帐户，将发送一封电子邮件以重置您的密码。要阻止电子邮件发送到垃圾邮件框，请启用SMTP</li>
</ul>
<h3 id="solution3">解决方案3：通过命令行（CLI）重置Magento 2管理员密码</h3>
<p>我们在Magento 2根文件夹中键入：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>php bin/magento -h
</code></pre>
</div>
</div>
<p>它显示管理员命令行：</p>
<div class="language-plaintext highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>...<span>
 admin<span>
  admin:user:create                        Creates an administrator<span>
  admin:user:unlock                        Unlock Admin Account<span>
...<span>
</span></span></span></span></span></code></pre>
</div>
</div>
<p>Magento 2不支持通过命令行重置密码。但是，我们可以创建一个新的admin帐户，然后使用新帐户重置旧帐户。</p>
<pre>bin/magento admin:user:create
</pre>
<h3 id="solution-4">解决方案4：通过电子邮件重置Magento 1管理员密码</h3>
<ul>
<li>转到Magento管理面板，默认为 <code class="language-plaintext highlighter-rouge">your-domain.com/admin</code></li>
<li>单击<strong>Forgot your password</strong></li>
<li>在<strong>Email Address</strong>输入框中输入与管理员帐户关联的<strong>电子邮件地址</strong></li>
<li>单击<strong>Retrieve Password</strong>以重置密码。</li>
<li>打开您的电子邮件框，然后检查<strong> reset password link</strong>。该链接在24小时内有效。要阻止将电子邮件发送到垃圾邮件框，请启用SMTP。</li>
</ul>]]></description>
      <pubDate>Sun, 11 Aug 2019 09:50:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2通过SSH安装扩展插件]]></title>
      <link>https://www.360magento.com/blog/magento2-install-extensions-via-ssh/</link>
      <description><![CDATA[<h4><strong><span class="step">步骤1：</span></strong></h4>
<p>将下载的插件包解压缩</p>
<h4><strong><span class="step">第2步：</span></strong></h4>
<p>创建另一个名为app/code/Vendor/Modulename/的目录，其中Vendor为开发商名称，Modulename为模块内部标识符。您可以在下载的扩展ZIP文件的“ composer.json”文件中找到它，并查看节点“ psr-4”。例如</p>
<p><img class="alignnone size-full wp-image-4380" src="https://www.360magento.com/media/wysiwyg/blog_266/step2_1.jpg" alt="magento2扩展&插件安装指南-步骤1" width="842" height="564"></p>
<p>例如，它可能在此处为“Bss\AjaxCart”或“Bss\OneStepCheckout”，那么Modulename是\之后和\之前的部分，因此在我们的示例中，AjaxCart”或“ OneStepCheckout”这就是您所谓的Modulename，例如app/code/Bss/AjaxCart，然后将扩展ZIP文件的内容放在其中。</p>
<p><img class="alignnone size-full wp-image-4382" src="https://www.360magento.com/media/wysiwyg/blog_266/step2_2.jpg" alt="magento2扩展&插件安装指南-步骤2" width="619" height="434"></p>
<h4><strong><span class="step">第三步：</span></strong></h4>
<p>将目录 app/code/Bss/Modulename/对应到Magento安装的根目录中。Magento的根目录是包含目录“ app”，“ bin”，“ lib”等的目录。所有目录应与现有目录结构匹配。</p>
<p><img class="alignnone size-full wp-image-4383" src="https://www.360magento.com/media/wysiwyg/blog_266/step3.jpg" alt="magento2扩展&插件安装指南-步骤3" width="497" height="342"></p>
<h4><strong><span class="step">第四步：</span></strong></h4>
<p>转到Magento 2根目录。</p>
<p>执行：php bin/magento setup:upgrade</p>
<p><img class="alignnone size-full wp-image-4384" src="https://www.360magento.com/media/wysiwyg/blog_266/step4.jpg" alt="magento2扩展&插件安装指南-步骤4" width="855" height="535"></p>
<h4><strong><span class="step">步骤5：</span></strong></h4>
<p>执行：php bin/magento setup:static-content:deploy</p>
<p><img class="alignnone size-full wp-image-4385" src="https://www.360magento.com/media/wysiwyg/blog_266/step4-1.jpg" alt="magento2扩展&插件安装指南-步骤5" width="855" height="535"></p>
<h4><strong><span class="step">步骤6：</span></strong></h4>
<p>清除所有缓存</p>
<p>执行：php bin/magento cache:flush</p>
<p><strong><span class="step">*注意</span></strong></p>
<p>如果您是通过composer安装扩展程序，请在完全按照上面的指南安装更新的版本之前，完全删除供应商文件夹中的模块，删除composer.json中的模块行并执行composer更新。</p>
<p>购买插件后，&nbsp;如果您无法自行安装扩展程序，或者您已按照上述所有步骤操作，但扩展名无法正常使用，则可以删除文件或更改模块的文件扩展名，以保持网站正常运行。然后<a href="https://www.360magento.com/contacts/">请与我们联系</a>。360Magento技术支持团队将帮助您安装Magento模块。
<p>请点击查看<a href="https://www.360magento.com/magento2-install-extensions-via-composer">如何通过Composer安装Magento 2扩展</a>的安装指南！</p>]]></description>
      <pubDate>Mon, 05 Aug 2019 10:15:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何通过后台安装扩展插件]]></title>
      <link>https://www.360magento.com/blog/magento2-install-extensions-via-backend/</link>
      <description><![CDATA[<p>Magento 2使您能够通过其Web Setup Wizard工具安装扩展插件。这是用于安装在<a href="https://marketplace.magento.com/" rel="noopener" target="_blank">Magento Marketplace</a>网站购买的扩展程序的主要方法&nbsp; 。</p>
<p>在完成本安装指南之前，请阅读&nbsp; <a href="https://devdocs.magento.com/guides/v2.3/comp-mgr/prereq/prereq_compman-checklist.html" rel="noopener" target="_blank">本文</a>以确认是否满足所有最低服务器要求。然后按照以下步骤操作：</p>
<p>1.登录到您的Magento Marketplace帐户。单击<strong>Developer Portal</strong>选项卡上的&ldquo;My Access Keys&rdquo;链接。</p>
<p><img alt="Magento Marketplace" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-09_om_14.15.48.png" /></p>
<p>2.复制<strong>Public Key</strong>和<strong>Private Key</strong>。请注意，这些是在<strong>Magento 2</strong>标签上提供的。</p>
<p><img alt="Magento Marketplace" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-09_om_14.16.28.png" /></p>
<p>3.登录到Magento后端面板，然后转到<strong>SYSTEM ⟶ Tools ⟶ Web Setup Wizard</strong>。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-10_om_10.24.00.png" /></p>
<p>4.单击&nbsp; <strong>System Configuration</strong>。然后，从您的Marketplace帐户中输入<strong>公钥</strong>和<strong>私钥</strong>。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-30_om_08.08.48.png" /></p>
<p>5.确保您的Magento后端与Magento Marketplace同步。为此，请单击刷新按钮。请注意，处理您的请求可能需要几分钟。将您的Magento后端与Magento Marketplace同步后，您将看到您的Magento扩展概述。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-30_om_08.26.42.png" /></p>
<p>6.单击<strong>Extensions Ready to Install</strong>文本下方的&ldquo;Review and Install&rdquo;按钮。在扩展程序网格中，选中要安装的扩展程序的复选框。确保始终使用最新版本的扩展。单击安装按钮。</p>
<p>安装过程已开始。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-30_om_08.26.51.png" /></p>
<p>7. <strong>准备检查</strong>。检查商店环境的兼容性。准备就绪检查成功完成后，点击下一步按钮。如果您在此处发现任何问题，请修复它们，然后单击&ldquo;Try Again&rdquo;按钮以重试。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-29_om_17.35.48.png" /></p>
<p>8. <strong>创建备份</strong>。默认情况下，备份包括代码，媒体和数据库，但是您可以取消选择您不想包括在备份中的任何内容。单击Create Backup按钮。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-29_om_17.35.58.png" /></p>
<p>该操作完成后，单击&ldquo;Next&rdquo;按钮。</p>
<p>9.此页面显示了将要安装的扩展名和版本。单击安装按钮。</p>
<p>为了保护您的网上商店和客户的数据，您的网站将在安装过程中脱机。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-29_om_17.36.33.png" /></p>
<p>10.如下所示，控制台日志显示当前状态，并为您提供安装进度的直观展示。</p>
<p><img alt="Magento Web Setup Wizard" src="https://www.360magento.com/media/wysiwyg/blog_265/Schermafbeelding_2019-07-29_om_17.36.43.png" /></p>
<p>该过程完成后，将显示成功页面。</p>
<p>11.注销，然后重新登录，以使所有更改生效。您的扩展程序现在可以使用了。</p>
<p>&nbsp;</p>
<h2><strong>如何测试安装是否成功？</strong></h2>
<p>查看你所安装的扩展文档，并检查后台配置部分，以及前台效果。</p>
<p>如果您仍然需要帮助，360Magento提供Magento2扩展安装服务</p>]]></description>
      <pubDate>Tue, 30 Jul 2019 08:35:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何创建一个API请求]]></title>
      <link>https://www.360magento.com/blog/create-api-request-m2/</link>
      <description><![CDATA[<h2><strong>一、创建API请求 </strong></h2>
<p>创建API请求有4个简单步骤：</p>
<h3>第1步：声明API</h3>
<p>在模块的etc文件夹下创建webapi.xml：<br /> /magento/module-customer/etc/webapi.xml</p>
<pre>&lt;route url="/V1/customers" method="POST"&gt;
   &lt;service class="Magento\Customer\Api\AccountManagementInterface" method="createAccount"/&gt;
   &lt;resources&gt;
       &lt;resource ref="anonymous"/&gt;
   &lt;/resources&gt;
&lt;/route&gt;
</pre>
<p>让我们引导您完成上述代码，以确保您了解正在发生的事情：</p>
<ul>
<li>Route - 这是用于调用我们的API URL https://{{MagentoBaseURL}}/index.php/rest/V1/customers.。</li>
<li>Service class - 这是我们API的接口类，将调用主要方法&ldquo;createAccount&rdquo;。</li>
<li>Resources - 定义谁有权限调用此API。它可以是具有特定权限的匿名（每个人）或自己（客户）或特定管理员用户，例如，可以在acl.xml中添加Magento_Customer:: customer。</li>
</ul>
<h3>步骤2：创建webapi.xml中指定的接口文件</h3>
<p>Magento\Customer\Api\CustomerRepositoryInterface</p>
<pre>/**
* Create customer account. Perform necessary business operations like sending email.
*
* @param \Magento\Customer\Api\Data\CustomerInterface $customer
* @param string $password
* @param string $redirectUrl
* @return \Magento\Customer\Api\Data\CustomerInterface
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function createAccount(
   \Magento\Customer\Api\Data\CustomerInterface $customer,
   $password = null,
   $redirectUrl = ''
);
</pre>
<h3>第3步：创建模型类，您可以在其中放置实际的业务逻辑</h3>
<p>您必须在etc文件夹下的di.xml文件中指定它<br /> /module-customer/etc/di.xml</p>
<pre>&lt;preference for="Magento\Customer\Api\AccountManagementInterface"
           type="Magento\Customer\Model\AccountManagement" /&gt;
</pre>
<p>&nbsp;</p>
<h3>步骤4：创建第一个模型类AccountManagement.php以定义createAccount方法</h3>
<pre>/**
* @inheritdoc
*/
public function createAccount(CustomerInterface $customer, $password = null, $redirectUrl = '')
{
   if ($password !== null) {
       $this-&gt;checkPasswordStrength($password);
       $customerEmail = $customer-&gt;getEmail();
       try {
           $this-&gt;credentialsValidator-&gt;checkPasswordDifferentFromEmail($customerEmail, $password);
       } catch (InputException $e) {
           throw new LocalizedException(
               __("The password can't be the same as the email address. Create a new password and try again.")
           );
       
       $hash = $this-&gt;createPasswordHash($password);
   } else {
       $hash = null;
   
   return $this-&gt;createAccountWithPasswordHash($customer, $hash, $redirectUrl);
}
</pre>
<p>&nbsp;</p>
<h2>二、强制请求参数</h2>
<p>我们可以强制webapi.xml中的参数来保证在特定路由上使用特定值。让我们看一下<strong>/V1/carts/mine</strong>的例子</p>
<h3><strong>第1步：在webapi.xml中声明参数</strong></h3>
<p>vendor/magento/module-quote/etc/webapi.xml</p>
<pre>&lt;route url="/V1/carts/mine" method="POST"&gt;
   &lt;service class="Magento\Quote\Api\CartManagementInterface" method="createEmptyCartForCustomer"/&gt;
   &lt;resources&gt;
       &lt;resource ref="self" /&gt;
   &lt;/resources&gt;
   &lt;data&gt;
       &lt;parameter name="customerId" force="true"&gt;%customer_id%&lt;/parameter&gt;
   &lt;/data&gt;
&lt;/route&gt;
</pre>
<p>&nbsp;</p>
<h3>第2步：在di.xml中进行覆盖</h3>
<p>vendor/magento/module-webapi/etc/di.xml</p>
<pre>&lt;type name="Magento\Webapi\Controller\Rest\ParamsOverrider"&gt;
   &lt;arguments&gt;
       &lt;argument name="paramOverriders" xsi:type="array"&gt;
           &lt;item name="%customer_id%" xsi:type="object"&gt;Magento\Webapi\Controller\Rest\ParamOverriderCustomerId&lt;/item&gt;
       &lt;/argument&gt;
   &lt;/arguments&gt;
&lt;/type&gt;
</pre>
<h3>第3步：获取params的值</h3>
<p>vendor/magento/module-webapi/Controller/Rest/ParamOverriderCustomerId.php</p>
<pre>/**
* {@inheritDoc}
*/
public function getOverriddenValue()
{
   if ($this-&gt;userContext-&gt;getUserType() === UserContextInterface::USER_TYPE_CUSTOMER) {
       return $this-&gt;userContext-&gt;getUserId();
   
   return null;
}
</pre>
<p>我们已向您提供了为Magento 2创建API请求的基本指南。希望你能帮助到您。</p>]]></description>
      <pubDate>Fri, 12 Jul 2019 19:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在AWS上安装Magento2]]></title>
      <link>https://www.360magento.com/blog/install-magento-on-aws/</link>
      <description><![CDATA[<p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Install-Magento-on-AWS.jpg" alt="在亚马逊服务器安装Magento2" ></p>
<p>根据Magento客户和市场<a href="https://trends.builtwith.com/shop/Magento/Market-Share" target="_blank" rel="noopener">份额报告</a>，流行的内容管理系统（CMS）目前为967,664个网站提供支持。哇，这是一个庞大的数字。如果您拥有电子商务网站，或者您正在考虑建设电子商务网站，那么Magento应该是您设置电子商务平台的首选CMS。</p><p>首先，我们将在Amazon Web Service（AWS）平台上托管Magento。你可能会问，当谷歌也可以使用的时候，我为什么要考虑让AWS托管我的网？因为AWS拥有世界第一的电子商务网站<a href="https://www.amazon.com/" target="_blank" rel="noopener">亚马逊</a>。</p><p>让我们从Magento AWS托管开始。</p><p>您必须按照以下步骤在AWS上安装Magento：</p><ul><li><a href="#1">在亚马逊上设置服务器</a></li><li><a href="#2">在服务器上安装必备工具，运行Magento</a></li><li><a href="#3">设置数据库</a></li><li><a href="#4">在AWS上安装和配置Magento</a></li></ul><h2 style="text-align: center;">使用AWS Magento Hosting启动并运行</h2><h2 id="1">在亚马逊上设置服务器</h2><p><strong>Amazon Developer Console</strong></p><p>转到<a href="https://aws.amazon.com/" target="_blank" rel="noopener">Amazon</a>并设置一个帐户。现在，导航到<strong>AWS Management console</strong>。您将看到以下屏幕：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Amazon-Developer-Console.png" alt="Amazon Developer Console" ></p><p>选择<strong>EC2</strong>。如果你看不到它，不要担心。在<strong>Find Services</strong>搜索它，&nbsp;您将获得它。点击它。现在您将看到以下屏幕：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Find-Services.png" alt="查找服务"><br>单击<strong>Launch Instance</strong>。</p><p>选择具有默认操作系统（OS）的计算机，例如Linux，Ubuntu或Windows等。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Select-a-machine.png" alt="magento服务器系统"></p><p>您将看到以下屏幕。向下滚动，您会看到：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Select-a-machine-2.png" alt="选择一台主机"></p><p>选择Ubuntu服务器。大多数开发人员倾向于使用Linux操作系统来执行他们的任务，因此我更喜欢Ubuntu。如果您是Windows用户，并且想要选择Windows操作系统，你也可以这样做。配置几乎相同。</p><p>根据官方<a href="https://devdocs.magento.com/guides/v2.1/install-gde/system-requirements-tech.html" target="_blank" rel="noopener">Magento 2系统要求，</a>您需要至少<strong>2G的内存。</strong>但是，我建议使用4GB RAM。为了安全起见，如果你想调试或执行一段代码，你可能不想耗尽你的没存。因此，您必须：</p><p>选择<strong>类型</strong> t2 medium</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/T2-Medium.png" alt="T2中等" ></p><p>单击<strong>Configure Instance Details</strong>。现在你会看到：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Configure-Instance-Details.png" alt="配置实例详细信息"></p><p>您可以配置您的机器（即实例）。因为，没有什么可做的，继续添加存储。</p><p>现在，系统会要求您添加存储空间。默认情况下，存储大小足够，但如果要增加，则只需增加大小。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/storage-size.png" alt="存储大小"></p><p>完成此过程后，就可以单击<strong>Add Tags</strong></p><p>目前，我们不需要任何标签，因此，请单击“<strong>configure security group</strong>按钮。这个很重要。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/configure-security-group.png" alt="配置安全组"></p><p>现在，您可以添加有关全球哪些人访问您的服务器的规则。他们是否必须遵循协议才能到达服务器？现在，我正在使我的服务器可以访问所有流量。以后，我们可以提出安全规则。导航到“Type”并选择“ All traffic”。在源中，单击任意位置。它应该如下所示：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/configure-security-group-2.png" alt="" ></p><p>点击查看并启动。然后，您将有机会再次查看您的配置。单击“Launch” 您将看到以下提示。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Click-review-and-launch.png" alt="" ></p><p>在这里，选择一个新密钥对并为其命名。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/existing-key-pair.png" alt="" ></p><p>您可能想知道什么是密钥对？简单来说，它是一个密钥，可以让您安全地连接到您的服务器。它包括的<strong>公钥</strong>和一个<strong>私钥文件</strong>。它们共同允许您安全地连接到您的实例。对于Windows AMI，您必须使用私钥文件来获取实例的登录密码。对于Linux AMI，私钥文件允许您使用SSH登录您的实例。</p><p>下载密钥对并确保其安全，因为没有它，您将无法访问您的服务器。现在点击启动实例。</p><p>将打开一个新屏幕。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Download-the-key-pair.png" alt=""></p><p>单击<strong> View Instance</strong></p><p>在<strong>status check</strong>中，您可以看到它正在初始化：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/status-check.png" alt="状态检查"></p><p>忽略old server。您可能看不到服务器的名称。现在，导航到空白区域，您会注意到铅笔写入图标。单击它并命名您的服务器。您必须等待一段时间，然后刷新屏幕。检查您的<strong>system status</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/system-status.png" alt=""></p><p>现在，您必须连接到您的服务器。在此之前，您确保安装了<a href="https://git-scm.com/" target="_blank" rel="noopener">git</a>，因为我们将使用它连接到我们的服务器。现在，<strong>选择您的新服务器：</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/New-Server.png" alt=""></p><p>单击<strong>Connect</strong>。</p><p>现在您已了解如何连接到新服务器，我们将选择简单的方法。还记得你之前下载的密钥对吗？导航到该文件夹​​。假设您安装了git，右键单击空白区域并选择git bash here选项。现在复制该行，我在以ssh -I ......开头的示例下面加下划线。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/ssh-I.png" alt="" ></p><p><span style="font-size: 14px;">并将其粘贴到</span><strong style="font-size: 14px;">git bash</strong>中：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/git-bash-e1553092336737.png" alt="" ></p><p>按<strong>Enter</strong>键。你会得到一个问题：Are you sure you want to connect？输入<strong>yes</strong>。恭喜，现在你连上你的服务器了。但我们必须满足使Magento工作的要求。因此，是时候建立一个PHP环境了。接下来，我们将在git上运行一些命令来安装必备工具。</p><h2 id="2">在服务器上安装必备工具以运行Magento</h2><p>您必须在终端上执行以下代码才能获得在服务器上安装Magento所需的工具。</p>
<pre>ls -al</pre>
<p>这将显示服务器上的所有目录。</p>
<pre>sudo su </pre>
<p>这将引导您进入<strong>home/ubuntu</strong>目录。这意味着您已以root用户身份登录。</p>
<pre>apt-get update</pre>
<p>这将使用最新工具更新您的服务器。</p>
<pre>sudo apt-get install apache2 php libapache2-mod-php mysql-server php-mysql php-dom php-simplexml php-curl php-intl php-xsl php-mbstring php-zip php-xml composer</pre>
<p>此代码将安装Apache（Web服务器软件），PHP（最新版本，目前为7.2）以及Magento所需的必要额外工具，以及将用作数据库的MySQL服务器。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/serve-as-database.png" alt=""></p><p>&nbsp;如果询问您是否要继续，请按<strong>Y</strong>键？安装完成后，您必须创建一个数据库。</p><p>现在，安装PHP gd扩展</p>
<pre>apt-get install php7.2-gd</pre>
<p>安装PHP mcrypt扩展</p>
<pre>apt-get install php7.2-mcrypt</pre>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Install-PHP-mcrypt-extension.png" alt=""></p>
<pre>sudo a2enmod rewrite</pre>
<p>现在重启Apache：</p>
<pre>systemctl restart apache2</pre>
<p>然后导航</p>
<pre>cd /etc/apache2/</pre>
<pre>sudo nano apache2.</pre><p>按<strong>ctrl + w</strong>并搜索<strong>indexes</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/indexes.png" alt="索引" ></p><p>将<strong>None</strong>替换为<strong>all</strong>，如下所示：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Replace-None.png" alt=""></p><p>按<strong>ctrl + x</strong>，按<strong>y</strong>并按<strong>Enter键</strong>。</p><p><span style="font-size: 14px;">再次重启Apache服务：</span></p>
<pre>systemctl restart apache2.service</pre>
<p>现在转到公共根目录并从Github克隆Magento 2：</p>
<pre>cd /var/www/html</pre>
<pre>git clone https://github.com/Magento/Magento2.git</pre>
<pre>cd Magento2</pre>
<p>现在只需安装composer：</p>
<pre>composer install</pre>
<p>如果您遇到这样的错误：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/composer-install.png" alt="" ></p><p>要解决它，请运行以下命令：</p>
<pre>apt-get install php7.2-bcmath</pre>
<pre>composer install</pre>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_248/composer-install-2.png" alt="作曲家安装2" ></p><p>现在如果仍未安装composer，如上面的屏幕所示，请运行：</p>
<pre>sudo apt-get install php-soap</pre>
<pre>composer install</pre>
<p>现在您必须更改文件夹的权限，以便Magento安装程序可以安装所需的文件：</p>
<pre>
chmod -R 755 /var/www/html/Magento2/
chmod -R 777 /var/www/html/Magento2/var/
chmod -R 777 /var/www/html/Magento2/pub/
chmod -R 777 /var/www/html/Magento2/app/etc
chmod -R 777 /var/www/html/Magento2/generated
</pre>
<pre>sudo service Apache2 restart</pre>
<p>否则，php扩展将会丢失。</p><h2 id="3">设置数据库</h2><p>通过此命令登录MySQL</p>
<pre>mysql -u root -p</pre>
<p>它会询问你一个密码。默认情况下它是none，所以只需按<strong>Enter</strong>键。现在你在MySQL终端。</p><ul><li><strong>show databases:</strong>显示当前表。</li><li><strong>create database Magento:</strong>它将为Magento创建一个数据库</li><li><strong>exit</strong>它将退出MySQL终端</li></ul><h2 id="4">在AWS上安装和配置Magento</h2><p>导航到您的公共IP地址：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/public-IP-address.png" alt="公共IP地址"></p><p>将其复制并粘贴到您的浏览器，如xx.xxx.xxx.xx/Magento2/setup</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/Magento2-setup.png" alt="" ></p><p>您将看到以下屏幕。这意味着您已准备好在AWS上安装设置Magento。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS.png" alt="" ><br> 现在开始安装Magento：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-database.png" alt="在AWS数据库上设置Magento"></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-web.png" alt="" ></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-customize.png" alt="在AWS自定义上设置您的Magento" ></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-create-admin-account.png" alt="" ></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-Install-Now.png" alt="" ></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_248/setup-your-Magento-on-AWS-success.png" alt="" ><br> 以上消息表明您已在AWS上成功安装了Magento了。</p><p>如果需要Magento技术支持，请联系我们</p>]]></description>
      <pubDate>Fri, 12 Jul 2019 09:15:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何提高Magento的安全性]]></title>
      <link>https://www.360magento.com/blog/improve-magento-security/</link>
      <description><![CDATA[<p>Magento是一个流行的电子商务平台，具有许多令人敬畏和有用的功能。它被世界各地的商家广泛使用。当您经营电子商务网站时，您必须非常谨慎地处理有关客户的重要且敏感的信息。虽然Magento已经配备了大量内置安全功能，但您必须遵循最佳实践以获得更好的Magento安全性。</p>
<p>它是一种强制性的电子商务安全实践，由支付卡行业数据安全标准（PCI DSS）严格执行，用于处理客户的信用卡数据。保护数据和客户数据对您来说非常重要，因为它可以帮助您保持与客户的良好声誉，并消除不必要的离线时间。</p>
<p>所以，今天，在本指南中，我将分享保护Magento商店的技巧。</p>
<h2>提高Magento安全性的技巧</h2>
<ul>
<li><a href="#1">选择较强的管理员用户名和密码</a></li>
<li><a href="#2">使用两步验证添加额外的保护层</a></li>
<li><a href="#3">添加Magento reCAPTCHA</a></li>
<li><a href="#4">保持您的商店更新和安全</a></li>
<li><a href="#5">使用SSL保护客户的信息</a></li>
<li><a href="#6">创建Magento商店的定期备份</a></li>
<li><a href="#7">限制对Magento商店的管理员访问权限</a></li>
<li><a href="#8">安装知名的Magento扩展程序</a></li>
<li><a href="#9">唯一的管理URL</a></li>
<li><a href="#10">保护您的开发环境</a></li>
<li><a href="#11">选择性能稳定的magento托管主机</a></li>
</ul>
<h2 id="1">选择较强的管理员用户名和密码</h2>
<p>对于电子商务网站的安全性，选择强密码和复杂的管理员名称至关重要，因为它可以防止未经授权访问您的电子帐户和设备。只需选择一个独特而复杂的管理员名称和密码，以便潜在的在线黑客无法追踪您的Magento商店的登录详细信息。在设置商店密码时，请使用大小写字母，符号和数字的不规则组合（例如-ptU @＃$ * 59 ^）。</p>
<h2 id="2">使用两步验证添加额外的保护层</h2>
<p>Magento安全检查的另一个最佳实践是双因素身份验证（TFA）。它将帮助您保护Magento商店免受攻击。双因素身份验证将您的商店的登录过程分为两个步骤：首先，您必须添加登录凭据，然后您必须通过双因素身份验证步骤。此过程将阻止攻击者访问您商店的管理面板，即使他们已经窃取了登录凭据。要实现它，您可以阅读<a href="https://www.360magento.com/blog/setup-magento-2-two-factor-authentication" rel="noopener noreferrer" target="_blank">有关如何设置Magento 2 TFA的指南</a>。</p>
<h2 id="3">添加Magento reCAPTCHA</h2>
<p>在涉及Magento安全检查时，您不能忽视将reCAPTCHA添加到您的电子商务网站，这对保护您的在线业务起着至关重要的作用。它用于阻止垃圾邮件并使您的商店免受攻击者的攻击。reCAPTCHA将确定尝试登录您商店管理员的用户是人还是BOT，如果不是人，那么它将无法继续进行。</p>
<p>对于Magento 1.x： &nbsp; <a href="https://www.360magento.com/blog/add-recaptcha-to-magento" target="_blank">如何添加reCAPTCHA到Magento</a>对于Magento 2.x： &nbsp;<a href="https://www.360magento.com/blog/setup-magento-2-recaptcha" target="_blank">如何设置Magento 2 reCAPTCHA</a></p>
<h2 id="4">保持您的商店更新和安全</h2>
<p>Magento定期更新，其最新版本仍然充斥着软件中最近发现的安全风险，而不是其前辈。您需要尽快使用最新版本更新Magento商店，因为它可以让您采取最佳安全措施来保护商店免受在线威胁和破坏。</p>
<p>更新Magento还可以帮助您获得新功能，错误修复和其他重要升级。确保您使用的是最新的Magento版本。如果没有，那么请不要担心，请查看这些指南：</p>
<p>对于Magento 1.x：<a href="https://www.360magento.com/blog/upgrade-magento-1-7-to-1-9">如何将Magento 1.7升级到Magento 1.9<br /> </a>对于Magento 2.x：<a href="https://www.360magento.com/blog/update-magento-2-using-composer">如何使用Composer更新Magento 2</a></p>
<h2 id="5">使用SSL保护客户的信息</h2>
<p>没有SSL证书的电子商务网站容易受到黑客攻击。通过未加密的连接发送的数据很容易被攻击者追踪和窃取。如果您尚未在Magento商店中正确实施SSL，那么您的客户敏感信息（如登录凭据，信用卡数据和其他详细信息）将会泄漏。您必须从经过验证的证书颁发机构购买SSL证书，然后必须对其进行配置以强制通过HTTPS加载商店页面。</p>
<h2 id="6">创建Magento商店的定期备份</h2>
<p>定期备份Magento文件和数据库可以在您的商店发生不良事件时提供帮助。在这种情况下，您可以使用最新的未损坏备份来还原信息。使用FTP客户端下载文件，轻松备份您帐户中的文件。</p>
<p>您还可以在phpMyAdmin的帮助下导出Magento数据库，并从控制面板的Databases部分访问它。单击安装Magento的phpMyAdmin（在左侧框架中）中的数据库名称以查看数据库表。</p>
<h2 id="7">限制对Magento商店的管理员访问权限</h2>
<p>限制管理员访问权限将添加一个额外且有用的层来保护Magento商店。它可以作为管理面板上的快速Magento安全修复程序，您和您的其他站点管理员只能使用某个IP地址访问它。攻击者无法从其他IP地址访问管理面板。实施它以保护您的Magento商店。</p>
<h2 id="8">安装知名的Magento扩展程序</h2>
<p>由于您的电子商务网站有许多扩展以增强其体验，有时它可能会损害您的Magento商店的安全性。如果已安装未根据最佳Magento安全实践开发任何的扩展，则它将帮助攻击者进入并破解您的商店。</p>
<p>在将任何第三方Magento扩展程序安装到您的商店之前，请始终查看有关开发人员的跟踪记录，声誉和客户评论。只选择那些来自备受尊重的来源，定期更新和维护并具有良好记录的扩展。</p>
<h2 id="9">唯一的管理URL</h2>
<p>为Magento商店设置唯一的管理URL是保护Magento商店的另一个重要做法。默认情况下，Magento商店的管理URL是www.example.com/admin，很容易被攻击者追踪。</p>
<p>强烈建议将默认管理URL更改为任何人都无法轻易识别的URL，这将使他们难以突破Magento商店的安全性。您可以在本指南中了解有关<a href="https://www.360magento.com/blog/change-magento-admin-url" target="_blank">如何更改Magento管理URL的</a>更多信息。</p>
<h2 id="10">保护您的开发环境</h2>
<p>保护Magento商店的主要技巧之一是保护商店的开发环境。确保所有开发访问仅限于开发人员而不是其他任何人。这是因为，如果开发人员以外的其他人有权进入您商店的开发环境，那么您的Magento商店的安全性就会受到威胁。</p>
<h2 id="11">选择性能稳定的magento托管主机</h2>
<p>除了应用程序安全性之外，服务器安全性是您可能忽略的一个重要问题。如果您认真对待服务器安全性，那么转移到托管主机提供商是一个不错的选择。托管主机涵盖所有服务器安全性和修补，因此您不必担心它。</p>
<h2>总结</h2>
<p>客户总是喜欢在安全平台在线购买产品。因此，当您运营在线业务时，您不能忽视电子商务安全的重要性。因为忽略它可能减少电子商务网站的销售流量。</p>
<p>我现在相信，通过本指南，您可以更轻松地采取必要的步骤来改善Magento商店的安全性。如果您仍有任何疑惑或想要讨论有关本指南的任何内容，请联系我们。</p>]]></description>
      <pubDate>Sun, 07 Jul 2019 07:43:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何修改Magento后台管理URL路径]]></title>
      <link>https://www.360magento.com/blog/change-magento-admin-url/</link>
      <description><![CDATA[<p><span style="font-weight: 400;">Magento是最广泛使用的电子商务平台之一。该CMS系统因其安全性而受到认可，并且在大多数电子商务商店的许多平台中是最安全的。</span></p><p>虽然有许多建议关于<a href="https://www.360magento.com/blog/improve-magento-security" target="_blank" rel="noopener noreferrer">Magento商店的安全性</a>，但一个非常有用的做法就是使用Magento管理面板URL的唯一路径而不是使用默认URL。</p><p>在本教程中，我将教您如何更改Magento后台管理URL。我将向您展示多种方法来更改Magento 1.x和Magento 2.x的管理面板URL。</p><table style="text-align: center; margin: auto; border: 3px solid;"><tbody><tr><th style="background: #ff6e17; color: white;">更改Magento管理面板URL</th><th style="background: #ff6e17; color: white;">更改Magento 2管理面板URL</th></tr><tr><td><a href="#M1-AdminPanel">通过管理面板</a></td><td><a href="#M2-AdminPanel">通过管理面板</a></td></tr><tr><td><a href="#M1-Local">通过编辑local.xml文件</a></td><td>&nbsp;<a href="#M2-Env">通过编辑env.php</a></td></tr><tr><td></td><td><a href="#M2-Command">通过命令行</a></td></tr></tbody></table><h2><span style="font-weight: 400;"><strong><br> 更改Magento管理面板&nbsp;</strong></span></h2><h2 id="M1-AdminPanel"><span style="font-weight: 400;">方法1：通过管理面板</span></h2><p><span style="font-weight: 400;">更改Magento管理URL的第一步是转到Magento商店的管理面板，然后导航到<strong>SYSTEM → Configuration：</strong></span></p><p><img class="aligncenter size-full wp-image-10826 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/system-config-magento-admin-url.png" alt="system-config magento admin url" /><br>现在向下滚动并单击<strong>ADVANCED</strong>选项卡下的<strong>Admin</strong>选项：<strong></strong></p><p><img class="aligncenter size-full wp-image-10827 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/advanced-admin-magento.png" alt="advanced-admin magento">现在展开<strong>Admin Base URL</strong>部分，然后从<strong>Use Custom Admin Path</strong>下拉菜单中选择<strong>Yes</strong>，并输入您选择的管理路径。我将使用<strong>Magento</strong>，您可以根据您的要求进行更改：<strong></strong><strong></strong></p><p><strong>注意：</strong>请勿将<strong>Use Custom Admin URL</strong>选项更改为“<strong>Yes</strong></p><p><img class="aligncenter size-full wp-image-10828 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/admin-base-url-magento.png" alt="admin base url magento"><strong><br> </strong>接下来，只需单击<strong>Save Config</strong>按钮：<br> <img class="aligncenter size-full wp-image-10829 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/save-config-admin-url-magento.png" alt="保存配置管理员url magento" width="126" height="40"></p><h2 id="M1-Local"><span style="font-weight: 400;">方法2：通过编辑local.xml文件</span></h2><p><span style="font-weight: 400;">通过Magento商店根目录下的<strong>app/etc</strong>目录在文本编辑器中打开<strong>local.xml</strong>文件。在这里，您搜索此代码：<br> </span></p>
<pre>
&lt;admin&gt;
        &lt;routers&gt;
            &lt;adminhtml&gt;
                &lt;args&gt;
                    &lt;frontName&gt;&lt;![CDATA[admin]]&gt;&lt;/frontName&gt;
                &lt;/args&gt;
            &lt;/adminhtml&gt;
        &lt;/routers&gt;
    &lt;/admin&gt;
</pre>
<p>在上面的代码中，Magento管理员URL被设置为admin，因此将其更改为magento：</p>
<pre>
 &lt;admin&gt;
        &lt;routers&gt;
            &lt;adminhtml&gt;
                &lt;args&gt;
                    &lt;frontName&gt;&lt;![CDATA[magento]]&gt;&lt;/frontName&gt;
                &lt;/args&gt;
            &lt;/adminhtml&gt;
        &lt;/routers&gt;
    &lt;/admin&gt;
</pre>
<p><span style="font-weight: 400;">您可以使用上述任何方法来更改Magento Admin URL。最后，不要忘记通过从Magento商店的管理面板导航到<strong>System → Cache Management</strong>来清除缓存。现在让我们转到更改Magento 2管理URL的方法。<br> </span></p><h2 id="M2-AdminPanel"><span style="font-weight: 400;"><strong>更改Magento 2管理面板URL</strong></span></h2><h2><span style="font-weight: 400;">方法1：通过管理面板</span></h2><p><span style="font-weight: 400;">打开商店的管理面板，然后导航到</span><b>STORES → Configuration</b></p><p><img class="aligncenter size-full wp-image-9632 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/2018/08/stores-config-magento-2-recaptcha.png" alt="商店 - 配置magento 2 recaptcha" ></p><p><span style="font-weight: 400;">向下滚动并单击</span><b>ADVANCED </b><span style="font-weight: 400;">下的</span><b>Admin </b><span style="font-weight: 400;">。</span><img class="aligncenter size-full wp-image-5076 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/2017/06/image2.png" alt=""></p><p>现在展开<strong>Admin Base URL</strong>部分并按照我在Magento 1.x教你的方式进行更改：</p><p><img class="aligncenter size-full wp-image-5077 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/2017/06/image3.png" alt=""></p>
<p><span style="font-weight: 400;">然后，只需单击<strong>Save Config：</strong></span><br> <img class="aligncenter size-full wp-image-9674 appear" src="https://www.360magento.com/media/wysiwyg/blog_246/2018/08/save-config-2FA.png" alt="保存配置2FA" width="141" height="64"></p></div><h2 id="M2-Env"><span style="font-weight: 400;">方法2：通过编辑env.php</span></h2><p>通过<strong>app/etc</strong>目录用文本编辑器打开<strong>env.php</strong>文件。现在，您将看到以下代码：</p>
<pre>
&lt;?php
return array (
 'backend' =>
 array (
   'frontName' => 'magento',
 )
</pre>
<p>将以上代码替换为以下代码，将Magento 2管理员URL从admin更改为magento：</p>
<pre>
 'backend' =>
  array (
    'frontName' => 'magento',
  ),
</pre>
<h2 id="M2-Command"><span style="font-weight: 400;">方法3：通过命令行</span></h2><p><span style="font-weight: 400;">使用SSH终端连接您的商店，然后转到Magento 2商店的根目录。现在运行以下命令：</span></p>
<pre>
php bin/magento setup:config:set --backend-frontname="magento"
</pre>
<p>在上面的命令中，我将管理URL路径设置为<strong>magento</strong>，您可以根据需要进行设置。</p><p>我已经提到并详细说明了三种更改Magento 2 Admin URL的方法。使用您选择的方法后，您必须清理缓存。为此，请在Magento 2根目录中运行以下命令</p>
<pre>
rm -rf var/cache/*
php bin/magento cache:clean
php bin/magento cache:flush
</pre>
<h2><span style="font-weight: 400;">总结</span></h2><p>每个电子商务商店都必须拥有安全的管理网址。完成本教程后，您现在应该可以更改Magento管理员URL。如果您仍然有任何困惑或想要讨论任何事情，请随时联系我们！</p><div class="frame"><h2 class="frames">经常问的问题</h2><p><strong>Q1。服务器上找不到Magento管理员URL：为什么？<br> </strong></p><p>您可能遇到此问题，因为您输入了错误的Magento管理面板URL。这很容易纠正。对于Magento 1.x，从app / etc目录转到local.xml，对于Magento 2.x，从app / etc目录转到env.php。</p><p><strong>Q2。为什么Magento Admin URL仍会打开旧网址？</strong></p><p>这是因为您可能尚未清除商店的缓存。清除并刷新它，然后尝试打开Magento管理面板URL。<strong><br> </strong></p></div>]]></description>
      <pubDate>Fri, 05 Jul 2019 08:13:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何设置Magento 2双重身份验证]]></title>
      <link>https://www.360magento.com/blog/setup-magento-2-two-factor-authentication/</link>
      <description><![CDATA[<p>这是另一个Magento 2安全教程。在上一篇指南中，我向您展示了添加<a href="https://www.360magento.com/blog/setup-magento-2-recaptcha" target="_blank" rel="noopener noreferrer">Magento 2 reCAPTCHA</a>的方法，今天，您将学习如何配置Magento 2双重身份验证。</p><p>在这个Magento 2 reCAPTCHA教程中，我提到了Magento的公告，其中他们透露了&nbsp;  <a href="https://docs.magento.com/m2/ce/user_guide/magento/extension-install-two-factor-authentication.html" target="_blank" rel="nofollow noopener">Magento 2双重身份验证</a>被添加到所有Magento 2.1及以上版本中。</p><p>双重身份验证是另一项Magento 2最佳安全实践，旨在保护您的商店免受攻击者攻击。即使攻击者获得了商店的登录凭据，由于附加的安全层，他也无法访问它。</p><p>在进入实施阶段之前，让我们首先了解Magento 2双重身份验证的工作原理：</p><h2>Magento 2双重认证的作用是什么？</h2><p>它会将Magento 2管理面板的登录过程分为两个步骤：</p><ul><li><strong>第一步：</strong>您必须输入登录凭据，用户名和密码。</li><li><strong>第二步：</strong>您必须通过双重身份验证。</li></ul><p>让我们开始设置Magento 2双重身份验证</p><h2>要遵循的步骤</h2><ul><li><a href="#1">安装Magento 2双重身份验证</a></li><li><a href="#2">配置Magento 2双重身份验证</a></li></ul><h2 id="1">安装Magento 2双重身份验证</h2><p>启动SSH终端并连接您的Magento 2商店。然后转到其根目录并运行以下CLI命令：</p>
<pre>composer require msp/twofactorauth:3.0.0</pre>
<p>然后，您必须通过运行此命令启用双重身份验证模块：</p>
<pre>php bin/magento module:enable --all</pre>
<p>完成后，运行此命令升级设置：</p>
<pre>php bin/magento setup:upgrade</pre>
<p>现在运行以下命令编译设置：</p>
<pre>php bin/magento setup:di:compile</pre>
<p>最后，通过运行以下命令来清理和刷新缓存：</p>
<pre>
php bin/magento cache:clean

php bin/magento cache:flush
</pre>
<p>安装已完成，现在转到其配置部分。</p><h2 id="2">配置Magento 2双重身份验证</h2><p>在开始配置之前，让我告诉您，您可以向商店添加四种类型的2FA提供商选项：</p><ul><li>Google Authenticator</li><li>Duo Security</li><li>Authy</li><li>U2F</li></ul><p>我将在Magento 2的商店中添加Google Authenticator 2FA，您可以根据自己的需要使用任何其他提供商。</p><p>在商店的管理面板中添加此双重身份验证后，它将要求使用Google身份验证器应用程序扫描条形码，然后您必须输入提供的代码才能访问管理面板。</p><p>因此，现在登录到商店的管理面板并导航到<strong>STORES → Configuration:</strong></p><p><img class="aligncenter size-full wp-image-9666 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/Stores-Configuration-Magento-2-2FA.png" alt="商店 - 配置Magento 2 2FA"></p><p>点击<strong>SECURITY</strong>标签下的<strong>2FA</strong>：<strong></strong></p><p><img class="aligncenter size-full wp-image-9667 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/click-2FA.png" alt="点击2FA" width="274" height="126"></p><p>现在，在此处展开​​<strong>General </strong>部分，<strong>Enable Two Factor Auth</strong>中选择<strong>Yes</strong>，然后从<strong>Force providers</strong>选择<strong>Google Authenticator</strong>，这意味着它将自动用于所有用户访问管理面板。</p><p><img class="aligncenter size-full wp-image-9668 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/general-2FA.png" alt="一般2FA"></p><p><strong>注意：</strong>如果要为不同的用户设置不同的双重身份验证提供程序，请不要从强制提供程序中选择任何提供程序，并从<strong>SYSTEM → All Users</strong>转到用户列表，以便在启用提供程序后为每个用户选择双重身份验证提供程序。</p><p>现在展开<strong>Google Authenticator</strong>部分，然后从<strong>Enable This Provider</strong>中选择<strong>Yes</strong>。然后<strong>Enable “trust this device” option</strong>该选项有两个选项：</p><ul><li><strong>Yes:</strong>  &nbsp;如果您希望用户不为每个设备的每次登录输入验证码。</li><li><strong>No:</strong>如果您希望用户通过身份验证过程以登录管理面板。</li></ul><p><img class="aligncenter size-full wp-image-9669 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/Google-Authenticator.png" alt="Google身份验证器"></p><p>&nbsp;</p><p>正如我之前提到的那样，我将设置Google身份验证器双重身份验证，现在几乎完成了。但是，您可以通过转到其各个部分来配置不同的提供程序。让我简要介绍一下设置其他提供商的情况。</p><p>展开<strong>U2F设备（Yubikey和其他人）</strong>部分并按照我对Google身份验证器的相同方法：</p><p><img class="aligncenter size-full wp-image-9670 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/U2F-Devices.png" alt="U2F设备"></p><p>展开<strong>U2F Devices(Yubikey and others) </strong>部分，启用它，然后输入您将从Duo帐户获得的所需详细信息<strong>（集成密钥，密钥，API主机名）</strong>：</p><p><img class="aligncenter size-full wp-image-9671 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/Duo-Security.png" alt="二重安全"></p><p>展开<strong>Authy</strong>部分，启用它，然后输入您将从Authy帐户获得的所需详细信息：</p><p><img class="aligncenter size-full wp-image-9672 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/authy.png" alt="authy" ></p><p>现在您必须保存Magento 2双重身份验证配置，只需单击页面顶部的<strong>Save Config</strong>：</p><p><img class="aligncenter size-full wp-image-9674 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/save-config-2FA.png" alt="保存配置2FA" width="141" height="64"></p><p>是时候检查结果，注销并再次登录管理面板，它将通过Google身份验证器扫描条形码来询问您将获得的代码：</p><p><img class="aligncenter size-full wp-image-9673 appear" src="https://www.360magento.com/media/wysiwyg/blog_245/Magento-2-two-factor-authentication-result.png" alt="Magento 2双重认证结果"></p><p>这意味着Magento 2双重身份验证已成功配置。</p>]]></description>
      <pubDate>Wed, 03 Jul 2019 10:31:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何设置Magento 2 Google reCAPTCHA]]></title>
      <link>https://www.360magento.com/blog/setup-magento-2-recaptcha/</link>
      <description><![CDATA[<p>任何电商平台的安全性都至关重要，因为现在客户更喜欢在安全平台上购买商品。因此，您必须要始终保持网站安全。当您谈论可靠和安全的电子商务平台时，您不能忽视Magento。</p><p>但是，为了<a href="https://www.360magento.com/blog/improve-magento-2-security" target="_blank">使您的Magento 2商店更安全</a>，您必须遵循最佳做法，而reCAPTCHA就是其中之一。Magento <a href="https://docs.magento.com/m2/ce/user_guide/magento/extension-install-google-recaptcha.html?mkt_tok=eyJpIjoiTURSa05UVmxPRFF4TnpVMyIsInQiOiJlY2ZtQXhTSys1RnVDNm1LSDJsXC80Vlgzem81K1laN3JnU3owOE5IQlhBR0hpWm5cL3M0Um54cHpYWXJjMEpTc2JcL21IdExkNlwvMjYzNmViWmdxWHFhdG5YcitsODFUT3hYaTNIWHR1U2xKYlwvMThDbWJlc1RyQWxBZTNUb29yWjY3In0%3D" target="_blank" rel="nofollow noopener noreferrer">宣布</a> reCAPTCHA和2FA功能已添加到所有Magento 2.1及以上版本中，这是一个很好的补充。</p><p>所以，今天在本指南中，我将教你如何配置Magento 2 reCAPTCHA。如果您使用的是Magento 1.x版本，则可以查看本指南：<a href="https://www.360magento.com/blog/add-recaptcha-to-magento" target="_blank">如何添加Magento reCAPTCHA</a>。</p><p>开始吧！</p><h2>要遵循的步骤</h2><ul><li><a href="#1">安装Magento 2 reCAPTCHA</a></li><li><a href="#2">生成Google reCAPTCHA密钥</a></li><li><a href="#3">配置Magento 2 reCAPTCHA</a></li></ul><h2 id="1">安装Magento 2 reCAPTCHA</h2><p>启动SSH终端。连接您的Magento 2商店并转到其根目录。</p><p>现在运行以下命令：</p>
<pre>composer require msp/recaptcha:2.0.0</pre>
<p>然后，它会询问您通过转到您的marketplace帐户获得的回购凭据，用户名和密码。</p><p>如果你得到错误<strong>proc_open(): fork failed – Cannot allocate memory’ in phar</strong>那么你可以通过启用Swap空间来解决它，或者你也可以通过运行以下命令来解决它：</p>
<pre>php -d memory_limit=-1 /usr/local/bin/composer require msp/recaptcha:2.0.0</pre>
<p>完成后，通过运行以下命令启用模块：</p>
<pre>php bin/magento module:enable --all</pre>
<p>然后使用以下命令升级安装程序：</p>
<pre>php bin/magento setup:upgrade</pre>
<p>现在只需清理并刷新缓存：</p>
<pre>php bin/magento cache:clean</pre>
<pre>php bin/magento cache:flush</pre>
<h2 id="2">为您的Magento 2商店生成Google reCAPTCHA密钥</h2><p>转到<a href="https://www.google.com/recaptcha/admin" target="_blank" rel="nofollow noopener noreferrer">Google reCAPTCHA网站</a>，确保您已登录自己的帐户。</p><p>现在首先输入密钥的标签，我已经输入了<strong>My Magento CAPTCHA</strong>，你可以添加一个你的选择。然后选择reCAPTCHA的类型，这里有三种类型的reCAPTCHA，其中两种是：</p><ol><li><strong>reCAPTCHA v2：</strong>它通过单击按钮验证请求。</li><li><strong>Invisible reCAPTCHA：</strong>它将在后台验证请求而不进行任何交互。</li></ol><p><img class="aligncenter size-full wp-image-9628 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/label-for-google-recaptcha-keys.png" alt="谷歌recaptcha键的标签"></p><p>选择CAPTCHA类型后，输入要添加reCAPTCHA的Magento商店域和子域：</p><p><img class="aligncenter size-full wp-image-9629 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/google-recaptcha-add-domains.png" alt="google recaptcha添加域名" width="266" height="148"></p><p>现在单击您接受reCAPTCHA服务条款的<strong>复选框</strong>，然后单击<strong>Register</strong>：</p><p><img class="aligncenter size-full wp-image-9630 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/register-google-recaptcha.png" alt="注册google recaptcha"></p><p>您将被重定向到新页面，转到<strong>将reCAPTCHA添加到您的站点</strong>部分，您将看到生成了reCAPTCHA密钥。复制您必须在下一步中使用的<strong>Site Key</strong>和<strong>Secret Key</strong>。</p><p><img class="aligncenter size-full wp-image-9631 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/Adding-reCAPTCHA-to-your-site.png" alt="将reCAPTCHA添加到您的站点"></p><h2 id="3">配置Magento 2 reCAPTCHA</h2><p>转到商店的管理面板，然后导航到<strong>STORES → Configuration</strong></p><p><img class="aligncenter size-full wp-image-9632 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/stores-config-magento-2-recaptcha.png" alt="商店 - 配置magento 2 recaptcha"></p><p>现在点击<strong>Security</strong>标签下的<strong>Google reCaptcha</strong>：</p><p><img class="aligncenter size-full wp-image-9633 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/google-recaptcha-security.png" alt="谷歌recaptcha安全" width="277" height="132"></p><p>首先展开“<strong>General</strong>部分，输入您在上一步中复制的Google reCaptcha key。</p><p><img class="aligncenter size-full wp-image-9634 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/General-section-magento-2-recaptcha.png" alt="一般部分magento 2 recaptcha"></p><p>展开<strong>backend</strong>部分，如果要在管理员登录中启用Google reCAPTCHA，请从“Enable”下拉列表中选择“<strong>Yes</strong>：</p><p><img class="aligncenter size-full wp-image-9635 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/backend-section-Magento-2-recaptcha.png" alt="后端部分Magento 2 recaptcha"></p><p>现在展开最后一节，<strong>frontend</strong>。从<strong>Enable</strong>下拉菜单中选择<strong>Yes</strong>，然后根据需要为您的前端表单设置Google reCaptcha：</p><p><img class="aligncenter size-full wp-image-9636 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/frontend-magento-2-recaptcha.png" alt="前端magento 2 recaptcha"></p><p><img class="aligncenter size-full wp-image-9637 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/frontend-magento-2-recaptcha-2.png" alt="前端magento 2 recaptcha 2"></p><p>最后，只需单击<strong>Save Config</strong>：</p><p><img class="aligncenter size-full wp-image-9638 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/save-config-magento-2-recaptcha.png" alt="保存配置magento 2 recaptcha" width="144" height="61"></p><p>现在转到您商店的任何表单页面，我将转到联系页面，结果如下：</p><p><img class="aligncenter size-full wp-image-9639 appear" src="https://www.360magento.com/media/wysiwyg/blog_244/magento-2-recaptcha-result.png" alt="magento 2 recaptcha结果"></p><p>以上输出表明Magento 2 reCAPTCHA已成功配置。</p><h2>总结</h2><p>您的商店可能在各方面都得到了全面优化，但如果它缺乏客户所需的坚如磐石的安全性，那么您可能会失去客户的信任并看到转换率下降。按照本指南，我希望您现在可以设置Magento 2 reCAPTCHA。由于每天都在实施Magento 2商店的许多安全实践，添加reCAPTCHA就是其中之一。在下一个教程中，我将向您展示在Magento 2中配置双重身份验证的方法。</p><p>如果您仍有任何疑惑或疑问请联系我们</p><p>&nbsp;</p>]]></description>
      <pubDate>Mon, 01 Jul 2019 08:28:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何将reCAPTCHA添加到Magento]]></title>
      <link>https://www.360magento.com/blog/add-recaptcha-to-magento/</link>
      <description><![CDATA[<p>CAPTCHA是<strong>Completely Automated Public Turing Test to Tell Computers and Humans Apart.</strong>的简称，它用于确定您网站上的用户是否是人。它所服务的基本目的是阻止垃圾邮件并防止网站受到攻击，并通过简单易用的工作流程实现这一点。</p><p>用户必须用屏幕上显示的单词或字母填充CAPTCHA。如果CAPTCHA匹配，则允许用户继续，如果不匹配，那么当然，您无法继续。</p><p>联系表单是任何电子商务商店的重要组成部分，因此，它必须具有集成CAPTCHA表单以避免垃圾邮件。</p><p>Magento是一个受欢迎且功能强大的电子商务平台。所以今天我将教你如何在Magento的联系表格中添加谷歌reCAPTCHA。</p><p>在Magento联系表单中添加reCAPTCHA的过程包括以下步骤：</p><ul><li><a href="#create-account">创建Google reCAPTCHA帐户。</a></li><li><a href="#install-captcha-extension">下载并安装Magento reCaptcha Extension。</a></li><li><a href="#configuration">在Magento中配置reCAPTCHA。</a></li></ul><h2 id="create-account">创建Google reCAPTCHA帐户</h2><p style="margin: 0in; margin-bottom: .0001pt;">首先，登录您的Gmail帐户，转到Google reCAPTCHA <a href="https://www.google.com/recaptcha" target="_blank" rel="noopener noreferrer">注册页面</a>，然后单击“SIGN UP”。</p><p><img class="aligncenter size-full wp-image-3080 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/signup.png" alt="注册谷歌验证码" ><br>输入您选择的网站的标签名称，您可以轻松记住，并输入您的在线商店的域名。提供详细信息后，单击<strong>Register</strong></p><p><img class="aligncenter size-full wp-image-3081 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/register.png" alt="注册谷歌验证码帐户"></p><p>现在将出现一个屏幕，您可以从中获取您将在本教程的配置步骤中使用的<strong>Site</strong>和<strong>Secret Key</strong>。</p><p><img class="aligncenter size-full wp-image-3092 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/secret-site-key.png" alt="验证码的密钥和站点密钥"></p>
<h2 id="install-captcha-extension">下载并安装Magento reCaptcha Extension</h2><p>转到&nbsp; <a href="https://github.com/olegkoval/magento-contacts_form_captcha/" target="_blank" rel="nofollow noopener noreferrer">Contacts Form Captcha</a>，下载扩展程序。现在要安装下载的扩展，将下载文件的存档解压缩到网站的根目录。</p><p>完成后，不要忘记清除缓存。</p><h2 id="configuration">在Magento中配置reCAPTCHA</h2><p>返回管理面板，然后导航到<strong>System → Configuration。</strong></p><p><img class="aligncenter size-full wp-image-3086 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/system-configuration.png" alt="naviagate从systemto配置"></p><p>单击<strong>GENERAL</strong>选项卡下的<strong>Contacts</strong>。</p><p><img class="aligncenter size-full wp-image-3087 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/contact-tab.png" alt="点击联系" width="235" height="249"></p><p>在<strong>Enable Captcha</strong>属性选择<strong>是</strong>。然后输入我们在本教程第一步中创建的<strong>Google reCAPTCHA</strong>的<strong>Site Key</strong>和<strong>Secret Key</strong>。现在只需单击<strong>Save Config</strong>保存配置</p><p><img class="aligncenter size-full wp-image-3088 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/save-config.png" alt="保存配置"></p><p>转到Magento商店的联系我们页面，您将看到结果！</p><p><img class="aligncenter size-full wp-image-3089 appear" src="https://www.360magento.com/media/wysiwyg/blog_243/output.png" alt="回到magento"></p><h2>总结</h2><p>reCAPTCHA是一个明智的选择，使您的联系表格更安全，无垃圾邮件。完成本教程后，您应该能够将reCAPTCHA添加到Magento联系表单中。如果您有任何问题请联系我们。不要忘记与朋友分享这篇文章！</p>]]></description>
      <pubDate>Fri, 28 Jun 2019 09:20:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何使用Composer更新升级Magento 2]]></title>
      <link>https://www.360magento.com/blog/update-magento-2-using-composer/</link>
      <description><![CDATA[<p>Magento于2007年由Varien推出，现已成为发展最快的电子商务平台之一。凭借多项优秀和最新的电子商务功能，它在现代电子商务行业中崭露头角。如果您使用流行的CMS并且想知道如何使用Composer更新Magento 2，那么我们为您提供服务！</p><p>如今，由于其模块化架构，完整的可扩展性以及广泛的支持和选择，Magento是超过250,000个在线商店的电子商务平台的首选。</p><p>关于人们在使用Magento时遇到的各种问题的讨论已经开始，Magento 2发布了。但是几位专家提出了他们对该平台的特殊看法，并对Magento 2的改进产生了巨大影响。但是，人们在安装过程中仍遇到问题或陷入其他程序问题！</p><p>与其他电子商务平台一样，Magento不断提供更新，以便与行业趋势和所有用户兼容。这就是为什么强烈建议您始终保持最新版本的Magento的原因。</p><h2>为什么要更新Magento 2？</h2><p>然而，有一个问题不断上升：<a href="https://www.360magento.com/blog/why-m2" title="为什么要升级到Magento 2">“ 我们为什么要更新Magento 2？”</a><p><strong>以下是您真正应该遵循的8个理由：</strong></p><ul><li>安全更新</li><li>UI更新</li><li>功能改进</li><li>Bug修复</li><li>性能改进</li><li>支持最新技术堆栈</li><li>目录，产品，运输和计算改进</li><li>通过Google Analytics，付款方式，网关等第三方服务进行集成改进</li></ul><p>我们熟悉的Magento 2有几个功能。Magento 2命令行界面（CLI）是最好的之一，为开发人员在模块管理，索引管理，缓存管理和更新到最新的Magento 2版本等方面节省了大量时间。</p><p>今天，我们将解释如何使用CLI升级Magento 2版本。请记住，您应首先创建商店的备份，因为不建议您在生产环境中使用此方法。</p><p>此外，您应该知道Magento 2 CLI升级仅在您使用Composer安装Magento 2或从官方Magento网站下载的存档ZIP文件时才有效。如果您从GIT存储库克隆了Magento 2，则此方法不适用于您。</p><h2>更新Magento 2</h2><p>因此，让我们按照以下简单步骤深入了解Magento 2的升级过程：</p><p><strong>步骤1  - &gt;</strong>首先，通过SSH连接到您的Web服务器。使用putty或任何SSH客户端，使用完整的文件系统所有权登录Magento 2服务器。</p><p><strong>步骤2  - &gt;</strong>建立SSH连接后，您需要导航到<strong>Magento 2 ROOT</strong>目录。</p><p><strong>第3步 - &gt;</strong>现在按照顺序使用以下命令：</p>
<pre>composer require magento/product-community-edition 2.3.2 --no-update</pre>
<p><strong>2.3.2是Magento 2.3.x版本的最新版本。如果要升级Magento 2.2.x版本，请相应更改这些编号。</strong></p>
<pre>composer update</pre>
<p><strong>如果出现身份验证，请输入</strong><a href="http://devdocs.magento.com/guides/v3.0/comp-mgr/prereq/prereq_auth-token.html" target="_blank" rel="noopener noreferrer"><strong>magento.repo authentication</strong></a><strong>密钥。</strong></p>
<pre>
rm -rf var/di/* var/generation/* var/cache/* var/log/* var/page_cache/*
php bin/magento cache:clean
php bin/magento cache:flush
</pre>
<p><strong>如果您使用的是Magento 2文件系统以外的缓存存储（例如Varnish，Redis，Memcached等），则还需要手动清除该缓存。</strong></p>
<pre>
php bin/magento setup:upgrad
php bin/magento setup:di:compile
php bin/magento indexer:reindex
</pre>
<p><strong>步骤4  - &gt;</strong>现在转到Magento 2管理面板，并在右下角验证您是否已成功更新Magento 2版本。如果显示任何错误，请尝试重置<a href="http://devdocs.magento.com/guides/v3.0/install-gde/prereq/file-system-perms.html" target="_blank" rel="noopener noreferrer">文件权限</a>并再次清除缓存。</p><h2>结论</h2><p>有多种方法可以更新Magento 2.在上面的方法中，我们使用Magento 2 CLI来执行此任务。这是使用Composer快速升级Magento 2的精确而有用的指南。</p>]]></description>
      <pubDate>Thu, 27 Jun 2019 07:17:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何将Magento 1.7升级到Magento 1.9]]></title>
      <link>https://www.360magento.com/blog/upgrade-magento-1-7-to-1-9/</link>
      <description><![CDATA[<p>虽然Magento2已出来两三年了，比magento1更优秀，虽然magento1明年官方将不支持了，最近遇到一个使用magento1.7版本的客户，因为习惯，坚持要升级到magento1.9.4而不是magento2。下面主要介绍升级的基本步骤。首先，最重要的步骤，强烈建议备份您的网站程序和数据库，并通过magento的管理面板禁用以下选项：</p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;"><b>Magento编译</b>System > Tools > Compilation > Disable</li></ul></li></ul><p><img class="alignnone wp-image-1262 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/disable-compilation.png" alt="Magento 1.7管理面板"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;"><b>Magento缓存</b>System > Cache Management > Select All > Action: Disable > Submit</li></ul></li></ul><p><img class="alignnone wp-image-1264 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/disable-cache.png" alt="Magento缓存管理" ></p><p>现在我们就可以放心的准备在旧版本上执行升级了。从<a href="https://magento.com/tech-resources/download" target="_blank" rel="nofollow noopener noreferrer">https://magento.com/tech-resources/download</a>下载最新的magento v1.9.x 并执行以下步骤：</p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">从Magento v1.7目录中删除所有文件和文件夹（确保将备份保存在安全的地方）并放置Magento v1.9.x软件包中的所有文件和文件夹。</li><li style="font-weight: 400;">打开您喜欢的网络浏览器，转到您的网站链接。系统会要求您安装新的Magento v1.9.x商店，但不要担心，继续操作你将进入<b>Configuration</b>页面。使用您以前在Magento v1.7商店中使用的相同信息填写它，其中包括SQL DB服务器主机名，SQL DB名称，SQL Server用户名，SQL Server密码，基本URL和管理路径。</li></ul></li></ul><p><img class="alignnone wp-image-1266 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/configuration.png" alt="Magento安装和配置"></p><ul><li style="font-weight: 400;">完成安装后，请不要访问前端或后端页面。在Magento v1.7文件和文件夹备份中，将以下文件和文件夹复制并合并到新的Magento v1.9.x商店目录中：<ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">Community文件夹：<b>ROOT > app > code > community</b></li></ul></li></ul><p><img class="alignnone wp-image-1268 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/1.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">local文件夹：<b>ROOT > app > code > local</b></li></ul></li></ul><p><img class="alignnone wp-image-1269 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/2.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">根目录中的media文件夹：<b>ROOT > media</b></li></ul></li></ul><p><img class="alignnone wp-image-1270 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/3.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">您的主题文件夹：&nbsp; <b>ROOT > app > design > frontend > default (package name) > “your_theme”</b>（如果您使用的是“default”包，那么只需复制主题文件夹，否则您需要复制包含主题的整个包夹）</li></ul></li></ul><p><img class="alignnone wp-image-1271 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/4.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">根目录中的Skin文件夹：<b>ROOT > skin</b></li></ul></li></ul><p><img class="alignnone wp-image-1272 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/5.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">模块的自定义XML文件：&nbsp; <b>ROOT > app > etc > modules > “your_custom_XML_files”</b></li></ul></li></ul><p><img class="alignnone wp-image-1273 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/6.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">admin主题文件夹：<b>ROOT > app > design > adminhtml > default</b></li></ul></li></ul><p><img class="alignnone wp-image-1274 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/7.png" alt="FTP传输Magento"></p><ul><li style="list-style-type: none;"><ul><li style="font-weight: 400;">自定义JS文件夹：<b>ROOT > app > js</b></li></ul></li></ul><p><img class="alignnone wp-image-1275 size-full appear" src="https://www.360magento.com/media/wysiwyg/blog_241/8.png" alt="FTP传输Magento"></p><ul><li style="font-weight: 400;">现在删除<b>ROOT > var > cache</b>和<b>ROOT > var > sessions</b>所有内容以清除所有会话和缓存。</li></ul></li></ul><p>就是这样，我们已成功将Magento v1.7商店更新到最新的Magento v1.9.x商店。打开Web浏览器，测试商店中的每个细节和所有内容，并解决部分模板和插件的兼容问题。并从<a href="https://www.360magento.com/blog/change-magento-admin-url">magento管理面板</a>验证版本升级.]]></description>
      <pubDate>Tue, 25 Jun 2019 09:09:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2在产品详情页添加自定义选项卡]]></title>
      <link>https://www.360magento.com/blog/m2-add-custom-tab/</link>
      <description><![CDATA[<p>当您希望成功运营电商网站时，客户满意度是主要的。</p><p>我们可以尽可能的去描述产品的特性及其他方面的展示，这样每个客户都可以了解得到他们想要了解的，自然也会提高购买欲望。</p><p>为此，我将教您如何在Magento 2中添加自定义选项卡以获取产品详细信息。</p><h2>添加新属性和添加属性集</h2><p>打开Magento 2的管理面板，进入<strong>Stores → Product</strong>，然后单击<strong>Add New Attribute</strong>按钮。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/add-attribute.png" alt="保存属性" /></p><p>现在插入Attribute的详细信息。将默认标签设置为<strong>Tab</strong>，将属性代码设置为<strong>tab.</strong>现在只需单击<strong>Save Attribute</strong>。</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/save-attribute.png" alt="保存属性" /></p><p>转到<strong>Stores → Attribute Set</strong>，然后单击<strong>Add Attribute Set.</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/add-attribute-sets.png" alt="添加属性集" /></p><p>插入<strong>Laptop</strong>作为<strong>Attribute Set</strong>的名称，然后单击<strong>Save.</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/name-attribute-set.png" alt="属性集名称" /></p><p>现在将<strong>选项卡</strong>从<strong>Unassigned Attributes</strong>移动到<strong>Product Details</strong>，然后单击<strong>Save.</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/drag-attribute.png" alt="" /></p><h2>产品页面配置</h2><p>从商店的管理面板打开产品编辑页面，然后从<strong>Attribute Set</strong>下拉列表中选择“ <strong>Laptop</strong> ” 。<strong></strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/product-attribute.png" alt="产品属性" /></p><p>向下滚动产品编辑页面，您将看到一个新的文本字段<strong>Tab</strong>。添加<strong> Tab Created </strong>到在此文本字段中，然后单击“<strong>Save</strong></p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/tab-text.png" alt="标签文字" /></p><h2>创建模块</h2><p>现在我要创建一个自定义模块。如果您对如何创建一个没有任何知识，可以查看此分步指南：<a href="https://www.360magento.com/blog/create-moudle-m2/" target="_blank">如何在Magento 2中创建模块。</a></p><h2>模块配置</h2><p>在<strong>app/code/Alwayly/Mymodule/etc</strong>创建<strong>module.xml</strong>文件并将此代码粘贴到其中：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
&lt;module name="Alwayly_Mymodule" setup_version="2.0.0" /&gt;
&lt;/config&gt;
</pre>
<h2>模块注册</h2><p>在<strong>app/code/Alwayly/Mymodule</strong>目录下创建<strong>registration.php</strong>文件,并将此代码粘贴：</p>
<pre>
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Alwayly_Mymodule',
__DIR__
);
</pre>
<h2>创建前端布局文件</h2><p>在<strong>app/code/Alwayly/Mymodule/view/frontend/layout</strong>中创建<strong>catalog_product_view.xml</strong>并将此代码添加：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
&lt;body&gt;
&lt;referenceBlock name="product.info.details"&gt;
&lt;block class="Magento\Catalog\Block\Product\View" name="tab.tab" template="Alwayly_Mymodule::extra_tab.phtml" group="detailed_info" &gt;
&lt;arguments&gt;
&lt;argument translate="true" name="title" xsi:type="string"&gt;Extra Tab&lt;/argument&gt;
&lt;/arguments&gt;
&lt;/block&gt;
&lt;/referenceBlock&gt;
&lt;/body&gt;
&lt;/page&gt;
</pre>
<h2>创建模板文件</h2><p>在<strong>app/code/Alwayly/Mymodule/view/frontend/templates</strong>中创建<strong>extra_tab.phtml</strong>文件并将此代码粘贴到其中：<strong></strong></p>
<pre>
&lt;?php
$product = $block->getProduct();
?>
&lt;h1 style="color: #ff6e17"&gt;&lt;?php echo $product-&gt;getData('tab'); ?&gt;&lt;/h1&gt;
</pre>
<p>现在我们需要运行命令。</p><p><strong>注意：</strong>以下所有命令都必须在Magento 2的根目录中运行。</p><p>运行此命令：</p>
<pre>php bin/magento module:status</pre>
<p>如果您在禁用列表中找到该模块，则必须通过运行以下命令来启用它：</p>
<pre>
php bin/magento module:enable Alwayly_Mymodule
</pre>
<p>最后，只需运行下面这些命令：</p>
<pre>
php bin/magento setup:upgrade

php bin/magento cache:clean

php bin/magento cache:clean
</pre>
<p>打开网站的产品页面，您将看到以下的自定义标签：</p><p><img src="https://www.360magento.com/media/wysiwyg/blog_240/output-1.png" alt="Magento 2中添加了自定义选项卡" />]]></description>
      <pubDate>Fri, 21 Jun 2019 11:44:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用KnockoutJS在Magento 2中添加数量加减按钮]]></title>
      <link>https://www.360magento.com/blog/m2-add-qty-increment/</link>
      <description><![CDATA[<p>Knockout是一个遵循<strong>MVVM</strong>（模型 - 视图 - 视图 - 模型）模式的javascript库，用于创建前端。您可以使用Knockout JS轻松处理复杂的数据驱动接口，并且由于它是开源的，因此可以免费使用。</p>
<p>Knockout JS是轻量级的，主要用在Magento 2的结帐页面。但是Knockout JS在Magento 2中实现起来有点复杂，因此，本教程将教你如何在Magento 2产品页面上中实现Knockout JS。</p><p>Magento 2在产品页面上提供了一个简单的数量输入文本，为了使客户更容易操作，您可以在Magento 2中添加增量和减量按钮。我将使用自定义模块实现它，<p>开始吧！</p>
<h2>配置模块</h2>
<p>通过在<strong>app/code/Alwayly/AddQuantityIncrement/etc</strong>中创建<strong>module.xml</strong>文件来配置模块。在其中添加以下代码：
<pre>
	&lt;?xml version="1.0"?&gt;
	&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
	&lt;module name="Alwayly_AddQuantityIncrement" setup_version="1.0.0"&gt;&lt;/module&gt;
	&lt;/config&gt;
</pre>
<h2>模块注册</h2>
<p>现在通过在<strong>app/code/Alwayly/AddQuantityIncrement</strong>中创建<strong>registration.php</strong>来注册模块，并在其中添加以下代码：
<pre>
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
   \Magento\Framework\Component\ComponentRegistrar::MODULE,
   'Alwayly_AddQuantityIncrement',
   __DIR__
);
</pre>
<h2>复制addtocart.phtml</h2><p>从magento安装的根目录转到<strong>vendor/magento/module-catalog/view/frontend/templates/product/view</strong>并将<strong>addtocart.phtml</strong>复制到您自己的模块<strong>pp/code /Alwayly/AddQuantityIncrement/view/frontend/templates/catalog/product/view。</strong>该<strong>addtocart.phtml</strong>文件将是这样的：</p>
<pre>
&lt;?php
/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Catalog\Block\Product\View */
?>

&lt;?php $_product = $block->getProduct(); ?&gt;
&lt;?php $buttonTitle = __('Add to Cart'); ?&gt;
&lt;?php if ($_product-&gt;isSaleable()): ?&gt;
&lt;div class="box-tocart"&gt;
   &lt;div class="fieldset"&gt;
       &lt;?php if ($block-&gt;shouldRenderQuantity()): ?&gt;
       &lt;div class="field qty"&gt;
           &lt;label class="label" for="qty"&gt;&lt;span&gt;&lt;?php /* @escapeNotVerified */ echo __('Qty') ?&gt;&lt;/span&gt;&lt;/label&gt;
           &lt;div class="control"&gt;
               &lt;input type="number"
                      name="qty"
                      id="qty"
                      maxlength="12"
                      value="&lt;?php /* @escapeNotVerified */ echo $block-&gt;getProductDefaultQty() * 1 ?&gt;"
                      title="&lt;?php /* @escapeNotVerified */ echo __('Qty') ?&gt;" class="input-text qty"
                      data-validate="&lt;?php echo $block-&gt;escapeHtml(json_encode($block-&gt;getQuantityValidators())) ?&gt;"
                      /&gt;
           &lt;/div&gt;
       &lt;/div&gt;
       &lt;?php endif; ?&gt;
       &lt;div class="actions"&gt;
           &lt;button type="submit"
                   title="&lt;?php /* @escapeNotVerified */ echo $buttonTitle ?&gt;"
                   class="action primary tocart"
                   id="product-addtocart-button"&gt;
               &lt;span&gt;&lt;?php /* @escapeNotVerified */ echo $buttonTitle ?&gt;&lt;/span&gt;
           &lt;/button&gt;
           &lt;?php echo $block-&gt;getChildHtml('', true) ?&gt;
       &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;?php endif; ?&gt;
&lt;script type="text/x-magento-init"&gt;
   {
       "#product_addtocart_form": {
           "Magento_Catalog/product/view/validation": {
               "radioCheckboxClosest": ".nested"
           }
       }
   }
&lt;/script&gt;
&lt;?php if (!$block-&gt;isRedirectToCartEnabled()) : ?&gt;
&lt;script type="text/x-magento-init"&gt;
   {
       "#product_addtocart_form": {
           "catalogAddToCart": {
               "bindSubmit": false
           }
       }
   }
&lt;/script&gt;
&lt;?php endif; ?&gt;
</pre>
<h2>编辑addtocart.phtml</h2>
<p>在<strong>addtocart.phtml中</strong>，创建一个UI组件并对其进行初始化。要做到这一点，首先在数量的input字段上方添加以下脚本：</p>
<pre>
&lt;script type="text/x-magento-init"&gt;
{
   "*": {
           "Magento_Ui/js/core/app": {
               "components": {
                   "qty_change": {
                       "component": "Alwayly_AddQuantityIncrement/js/view/product/view/qty_change",
                       "defaultQty": &lt;?php echo $block-&gt;getProductDefaultQty() * 1 ?&gt;
                   }
               }
           }
   }
}
&lt;/script&gt;
</pre>
<p>现在将组件<strong>qty_change</strong>与以下前端HTML连接：</p>
<pre>
&lt;div class="control" data-bind="scope: 'qty_change'"&gt;
   &lt;button data-bind="click: decreaseQty"&gt;-&lt;/button&gt;
   &lt;input  data-bind="value: qty()"
   type="number"
   name="qty"
   id="qty"
   maxlength="12"
   title="&lt;?php echo __('Qty') ?&gt;"
   class="input-text qty"
   data-validate="&lt;?php echo $block-&gt;escapeHtml(json_encode($block-&gt;getQuantityValidators())) ?&gt;"
   /&gt;
   &lt;button data-bind="click: increaseQty"&gt;+&lt;/button&gt;
&lt;/div&gt;
</pre>
<p><strong>Data-bind 属性</strong>：使用我们的组件qty_change的Javascript函数连接HTML。</p><p>在上面的代码中，有两个按钮，我通过使用Javascript点击事件连接到组件，将用于减少/增加数量值。最终的<strong>addtocart.phtml</strong>文件如下所示：</p>
<pre>
&lt;?php
/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Catalog\Block\Product\View */
?&gt;

&lt;?php $_product = $block-&gt;getProduct(); ?&gt;
&lt;?php $buttonTitle = __('Add to Cart'); ?&gt;
&lt;?php if ($_product-&gt;isSaleable()): ?&gt;
&lt;div class="box-tocart"&gt;
   &lt;div class="fieldset"&gt;
       &lt;?php if ($block-&gt;shouldRenderQuantity()): ?&gt;
       &lt;div class="field qty"&gt;
           &lt;label class="label" for="qty"&gt;&lt;span&gt;&lt;?php /* @escapeNotVerified */ echo __('Qty') ?&gt;&lt;/span&gt;&lt;/label&gt;

&lt;script type="text/x-magento-init"&gt;
{
   "*": {
           "Magento_Ui/js/core/app": {
               "components": {
                   "qty_change": {
                       "component": "Alwayly_AddQuantityIncrement/js/view/product/view/qty_change",
                       "defaultQty": &lt;?php echo $block-&gt;getProductDefaultQty() * 1 ?&gt;
                   }
               }
           }
   }
}
&lt;/script&gt;

&lt;div class="control" data-bind="scope: 'qty_change'"&gt;
   &lt;button data-bind="click: decreaseQty"&gt;-&lt;/button&gt;
   &lt;input  data-bind="value: qty()"
   type="number"
   name="qty"
   id="qty"
   maxlength="12"
   title="&lt;?php echo __('Qty') ?&gt;"
   class="input-text qty"
   data-validate="&lt;?php echo $block-&gt;escapeHtml(json_encode($block-&gt;getQuantityValidators())) ?&gt;"
   /&gt;

   &lt;button data-bind="click: increaseQty"&gt;+&lt;/button&gt;
&lt;/div&gt;
       &lt;/div&gt;
       &lt;?php endif; ?&gt;
       &lt;div class="actions"&gt;
           &lt;button type="submit"
                   title="&lt;?php /* @escapeNotVerified */ echo $buttonTitle ?&gt;"
                   class="action primary tocart"
                   id="product-addtocart-button"&gt;
               &lt;span&gt;&lt;?php /* @escapeNotVerified */ echo $buttonTitle ?&gt;&lt;/span&gt;
           &lt;/button&gt;
           &lt;?php echo $block-&gt;getChildHtml('', true) ?&gt;
       &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;?php endif; ?&gt;
&lt;script type="text/x-magento-init"&gt;
   {
       "#product_addtocart_form": {
           "Magento_Catalog/product/view/validation": {
               "radioCheckboxClosest": ".nested"
           }
       }
   }
&lt;/script&gt;
&lt;?php if (!$block-&gt;isRedirectToCartEnabled()) : ?&gt;
&lt;script type="text/x-magento-init"&gt;
   {
       "#product_addtocart_form": {
           "catalogAddToCart": {
               "bindSubmit": false
           }
       }
   }
&lt;/script&gt;
&lt;?php endif; ?&gt;
</pre>
<h2>创建qty_change.js</h2><p>现在在<strong>app/code/Alwayly/AddQuantityIncrement/view/frontend/web/js/view/product/view</strong>中创建<strong>qty_change.js</strong>。在其中添加以下代码：</p>
<pre>
define([
   'ko',
   'uiComponent'
], function (ko, Component) {
   'use strict';
   return Component.extend({
       initialize: function () {
           //initialize parent Component
           this._super();
           this.qty = ko.observable(this.defaultQty);
       },
       decreaseQty: function() {
           var newQty = this.qty() - 1;
           if (newQty < 1) 
           {
               newQty = 1;
           }
           this.qty(newQty);
       },
       increaseQty: function() {
           var newQty = this.qty() + 1;
           this.qty(newQty);
       }
   });
});
</pre>
<h2>创建catalog_product_view.xml</h2><p>最后，只需在app/code/Alwayly/AddQuantityIncrement/view/frontend/layout中创建<strong>catalog_product_view.xml</strong>即可。在其中添加以下代码：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;body&gt;
       &lt;referenceBlock name="product.info.addtocart"&gt;
           &lt;action method="setTemplate"&gt;
               &lt;argument name="template" xsi:type="string"&gt;Alwayly_AddQuantityIncrement::catalog/product/view/addtocart.phtml&lt;/argument&gt;
           &lt;/action&gt;
       &lt;/referenceBlock&gt;
       &lt;referenceBlock name="product.info.addtocart.additional"&gt;
           &lt;action method="setTemplate"&gt;
               &lt;argument name="template" xsi:type="string"&gt;Alwayly_AddQuantityIncrement::catalog/product/view/addtocart.phtml&lt;/argument&gt;
           &lt;/action&gt;
       &lt;/referenceBlock&gt;
   &lt;/body&gt;
&lt;/page&gt;
</pre>
<p>上面代码的目的是更改默认的<strong>addtocart.phtml</strong>模板。</p>
<h2>运行命令</h2><p>使用SSH终端转到magento安装的根目录，然后运行以下命令：</p>
<pre>
rm -rf var/di var/generation var/cache/* var/log/* var/page_cache/*

php bin/magento module:enable Alwayly_AddQuantityIncrement

php bin/magento setup:upgrade

php bin/magento setup:di:compile

php bin/magento indexer:reindex

php bin/magento cache:clean

php bin/magento cache:flush
</pre>
<p>现在转到产品页面，您将看到结果：</p>
<p></p>
<p>Note:我们已在Magento 2.3上测试了上述代码.</p>]]></description>
      <pubDate>Wed, 19 Jun 2019 13:41:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento 2中将产品属性类型从文本更改为下拉列表]]></title>
      <link>https://www.360magento.com/blog/m2-change-product-attribute-type/</link>
      <description><![CDATA[<p>默认情况下，在Magento 2中，后台管理没有选项可以更改创建后的产品属性类型。因此，我们必须创建自定义脚本来更改产品属性类型。以下示例代码将帮助您将产品属性类型从文本更改为Magento 2中的下拉列表。</p>
<blockquote><p>另请阅读：&nbsp; <a href="//www.360magento.com/blog/m2-create-custom-attribute/">通过InstallData.php在Magento 2中创建自定义属性组和产品属性</a></p></blockquote>
<p>以下是我们在以下示例中遵循的步骤，</p>
<ul>
<li>将我们要更改的属性ID从文本更改为下拉列表</li>
<li>获取已存储在数据库中的给定属性Id的产品值</li>
<li>对于给定的属性Id，将先前存储的产品值作为选项插入数据库表“eav_attribute_option”和“eav_attribute_option_value”</li>
<li>使用选项Id将插入的属性选项分配给适当的产品</li>
<li>最后，使用UPDATE查询将属性类型从文本更改为数据库下拉列表</li>
</ul>
<pre>
&lt;?php
use Magento\Framework\App\Bootstrap;
 
/**
 * If the external file is in the root folder
 */
require __DIR__ . '/app/bootstrap.php';
 
$params = $_SERVER;
$bootstrap = Bootstrap::create(BP, $params);
$obj = $bootstrap->getObjectManager();
 
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
  
/*
 * Instance of object manager
 */
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 
/*
 * Attribute Id that we want to change from text to dropdown
 */
$attributeId = 155;  
 
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
  
/*
 * Get the product values that are already stored in the database for given attribute
 */
$catalog_product_entity_varchar = $resource->getTableName('catalog_product_entity_varchar');
$attribute_values = $connection->fetchAll("SELECT DISTINCT attribute_id, value FROM $catalog_product_entity_varchar where attribute_id = $attributeId"); 
if(!empty($attribute_values)) {
    foreach ($attribute_values as $_attribute_values) {
 
        $attribute_values = $connection->fetchRow("SELECT count(*) as cnt FROM `eav_attribute_option` where attribute_id = $attributeId;");
        $count = $attribute_values['cnt'] + 1;
 
        /*
         * Insert previously stored product values as an option on the database for a given attribute
         */
        $eav_attribute_option = $resource->getTableName('eav_attribute_option');
        $sql = "insert into $eav_attribute_option(option_id, attribute_id, sort_order) values (null, $attributeId, $count)";
        try {
            $resp = $connection->query($sql);
        } catch (Exception $e) {
            echo '<pre>';  print_r($e->getMessage());
        }
        $lastInsertId = $connection->lastInsertId();
 
        $eav_attribute_option_value = $resource->getTableName('eav_attribute_option_value');
        $sql = "insert into $eav_attribute_option_value(value_id, option_id, store_id, value) values (null, $lastInsertId, 0, '$_attribute_values[value]')";
        try {
            $resp = $connection->query($sql);
        } catch (Exception $e) {
            echo '<pre>';  print_r($e->getMessage());
        }
 
        $sql = "insert into $eav_attribute_option_value(value_id, option_id, store_id, value) values (null, $lastInsertId, 1, '$_attribute_values[value]')";
        try {
            $resp = $connection->query($sql);
        } catch (Exception $e) {
            echo '<pre>';  print_r($e->getMessage());
        }
    }
}
  
$catalog_product_entity_varchar = $resource->getTableName('catalog_product_entity_varchar');
$attribute_values = $connection->fetchAll("SELECT * FROM $catalog_product_entity_varchar where attribute_id = $attributeId"); 
if(!empty($attribute_values)) {
    foreach ($attribute_values as $_attribute_values) {
 
        /*
         * Get the option id for the specific product
         */
        $option_values = $connection->fetchRow("SELECT * FROM `eav_attribute_option` as eao INNER JOIN `eav_attribute_option_value` as eaov on eao.option_id = eaov.option_id WHERE eao.attribute_id = $attributeId and eaov.store_id = 1 and eaov.value = '$_attribute_values[value]'");
 
        if(!empty($option_values)) {
            $catalog_product_entity_int = $resource->getTableName('catalog_product_entity_int');
            $product_values_exist = $connection->fetchRow("SELECT value_id FROM $catalog_product_entity_int WHERE attribute_id = $attributeId and entity_id = $_attribute_values[entity_id]");
 
            if(empty($product_values_exist)) {
                $sql = "insert into $catalog_product_entity_int(value_id, attribute_id, store_id, entity_id, value) values (null, $attributeId, 0, $_attribute_values[entity_id], $option_values[option_id])";
                try {
                    $resp = $connection->query($sql);
                } catch (Exception $e) {
                    echo '<pre>';  print_r($e->getMessage());
                }
            } else {
                $sql = "Update $catalog_product_entity_int set value = $option_values[option_id] WHERE attribute_id = $attributeId and entity_id = $_attribute_values[entity_id]";
                try {
                    $resp = $connection->query($sql);
                } catch (Exception $e) {
                    echo '<pre>';  print_r($e->getMessage());
                }
            }
        }
    }
}
  
/*
 * Change the attribute type from text to dropdown on database
 */
$eav_attribute = $resource->getTableName('eav_attribute');
$sql = "UPDATE $eav_attribute SET `backend_type` = 'int', `frontend_input` = 'select', `source_model` = 'Magento\\\Eav\\\Model\\\Entity\\\Attribute\\\Source\\\Table' WHERE `attribute_id` = $attributeId";
try {
    $resp = $connection->query($sql);
} catch (Exception $e) {
    echo '<pre>'; print_r($e->getMessage());
}
  
$catalog_eav_attribute = $resource->getTableName('catalog_eav_attribute');
$sql = "UPDATE $catalog_eav_attribute SET `is_filterable` = 1, is_comparable = 1, is_visible_on_front = 1, is_html_allowed_on_front = 1, is_filterable_in_search = 1, used_in_product_listing = 1 WHERE `attribute_id` = $attributeId";
try {
    $resp = $connection->query($sql);
} catch (Exception $e) {
    echo '<pre>'; print_r($e->getMessage());
}
</pre>
<p>希望这可以帮助到你。</p>]]></description>
      <pubDate>Mon, 17 Jun 2019 05:11:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2通过安装脚本创建属性组和产品属性]]></title>
      <link>https://www.360magento.com/blog/m2-create-custom-attribute/</link>
      <description><![CDATA[<p>在Magento 2中，我们可以在后台上创建许多产品属性和属性组。但有时我们可能需要通过可安装脚本创建新的产品属性和属性组。例如，当我们在Magento 2中开发新扩展或自定义Magento 2的原生功能时，我们必须使用可安装脚本来创建新的产品属性和属性组。创建产品属性和属性组不是一件困难的事，本文将帮助您通过InstallData.php在Magento 2中创建新的属性组和产品属性。</p>
<p>假设我们将使用以下脚本创建一个名为&ldquo;My Custom Attribute Group&rdquo;的新属性组和名为&ldquo;My Sample Attribute&rdquo;的产品属性。</p>
<h3>第1步：定义新模块</h3>
<p>为了在Magento 2中创建新的扩展，首先我们必须在下面的文件路径中创建一个名为<strong>module.xml</strong>的文件来定义新模块，</p>
<p><em>文件路径：app/code/Alwayly/MyAttribute/etc/module.xml</em></p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_MyAttribute" setup_version="1.0.0"&gt;
        &lt;sequence&gt;
            &lt;module name="Magento_Catalog"/&gt;
        &lt;/sequence&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>
<p>接下来，在下面的文件路径中创建<strong>registration.php</strong>文件，</p>
<p><em>文件路径：app/code/Alwayly/MyAttribute/registration.php</em></p>
<pre>&lt;?php
    \Magento\Framework\Component\ComponentRegistrar::register(
        \Magento\Framework\Component\ComponentRegistrar::MODULE,
        'Alwayly_MyAttribute',
        __DIR__
    );
</pre>
<h3>第2步：创建安装文件InstallData.php</h3>
<p>然后，在以下文件路径中创建名为<strong>InstallData.php</strong>的文件。在此文件中，我们必须提供新创建的产品属性组的名称和属性信息，</p>
<p><em>文件路径：app/code/Alwayly/MyAttribute/Setup/InstallData.php</em></p>
<pre>&lt;?php
namespace Alwayly\MyAttribute\Setup;
  
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Model\Config;
  
class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;
   
    public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig)
    {
        $this-&gt;eavSetupFactory = $eavSetupFactory;
        $this-&gt;eavConfig = $eavConfig;
    }
  
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this-&gt;eavSetupFactory-&gt;create(['setup' =&gt; $setup]);
  
        $eavSetup-&gt;addAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'my_sample_attribute',
            [
                'group' =&gt; 'My Custom Attribute Group',
                'type' =&gt; 'varchar',
                'backend' =&gt; '',
                'frontend' =&gt; '',
                'label' =&gt; 'My Sample Attribute',
                'input' =&gt; 'text',
                'note' =&gt; 'My Sample Attribute',
                'class' =&gt; '',
                'source' =&gt; '',
                'global' =&gt; \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                'visible' =&gt; true,
                'required' =&gt; false,
                'user_defined' =&gt; true,
                'default' =&gt; '',
                'searchable' =&gt; false,
                'filterable' =&gt; false,
                'comparable' =&gt; false,
                'visible_on_front' =&gt; true,
                'used_in_product_listing' =&gt; true,
                'unique' =&gt; false,
                'apply_to' =&gt; 'simple'
            ]
        );
    }
}
</pre>
<h3>第3步：模块设置升级</h3>
<p>最后，我们必须通过在Magento安装的根目录中运行以下SSH命令来启用我们的新扩展，</p>
<blockquote>
<p>php magento module:enable Alwayly_MyAttribute</p>
</blockquote>
<p>然后，在CLI中运行以下命令以升级设置，</p>
<blockquote>
<p>php magento setup:upgrade</p>
</blockquote>
<p>然后，清除缓存并检查您的Magento 2管理员。现在，您可以在管理端查看新创建的产品属性组和产品属性，如下面的参考截图。</p>
<p>参考截图：</p>
<p><img alt="Magento创建属性组和产品属性" src="https://www.360magento.com/media/wysiwyg/blog_236/Create-Custom-Attribute-Group-Product-Attribute-in-Magento-2-via-InstallData.php_.png" /></p>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Sat, 15 Jun 2019 13:53:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2中使用安装/升级脚本创建数据库表]]></title>
      <link>https://www.360magento.com/blog/m2-create-database-table/</link>
      <description><![CDATA[<p>如果要在Magento 2中创建新的自定义模块，在某些情况下，您可能需要创建新的数据库表，修改现有的数据库表，并且可能需要在数据库表中设置一些初始缺省值。您可以通过在Magento 2中创建安装/升级脚本来实现此目的。</p>
<p>以下是安装/升级SQL脚本的列表</p>
<ul>
<li>InstallSchema</li>
<li>InstallData</li>
<li>UpgradeSchema</li>
<li>UpgradeData</li>
<li>Recurring</li>
<li>Uninstall</li>
</ul>
<p>所有这些类都将位于<strong>app/code/<Vendor>/<Module>/Setup</strong>文件夹中。</p>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup</em></p>
<p>在CLI中运行以下命令时，将运行模块的安装/升级脚本：</p>
<blockquote><p>php bin/magento setup:upgrade</p></blockquote>
<h3>InstallSchema：</h3>
<p>InstallSchema用于更改数据库模式，这意味着创建新数据库表或修改现有数据库表结构。InstallSchema类将在模块安装期间运行。</p>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup/InstallSchema.php</em></p>
<pre>
&lt;?php
 
namespace Alwayly\CustomScript\Setup;
 
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
 
class InstallSchema implements InstallSchemaInterface
{
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();
        if (!$installer->tableExists('comments')) {
            $table = $installer->getConnection()
                     ->newTable($installer->getTable('comments'))
                     ->addColumn(
                         'comment_id',
                         \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                         null,
                         [
                             'identity' => true,
                             'nullable' => false,
                             'primary'  => true,
                             'unsigned' => true,
                         ],
                         'ID'
                     )
                     ->addColumn(
                         'name',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                         255,
                         ['nullable => false'],
                         'Name'
                     )
                     ->addColumn(
                         'email',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                         255,
                         [],
                         'Email'
                     )
                     ->addColumn(
                         'url_key',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                         255,
                         [],
                         'URL Key'
                     )
                     ->addColumn(
                         'message',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                         '18K',
                         [],
                         'Message'
                     )
                     ->addColumn(
                         'status',
                         \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                         1,
                         [],
                         'Comment Status'
                     )
                     ->addColumn(
                         'created_at',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                         null,
                         ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT],
                         'Created At'
                     )->addColumn(
                         'updated_at',
                         \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                         null,
                         ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
                         'Updated At')
                     ->setComment('Comments Table');
            $installer->getConnection()->createTable($table);
 
            $installer->getConnection()->addIndex(
                $installer->getTable('comments'),
                $setup->getIdxName(
                    $installer->getTable('comments'),
                    ['name', 'email', 'url_key', 'message'],
                    \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT
                ),
                ['name', 'email', 'url_key', 'message'],
                \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT
            );
        }
        $installer->endSetup();
    }
}
</pre>
<p>InstallSchema安装程序类文件必须继承<strong>\Magento\Framework\Setup\InstallSchemaInterface</strong>并且必须具有一个带有2个参数SchemaSetupInterface和ModuleContextInterface的公共方法<strong>install（）</strong>。</p>
<ul>
<li><strong>SchemaSetupInterface：</strong>它是一个设置对象，它提供了与数据库服务器交互的机制。</li>
<li><strong>ModuleContextInterface：</strong>它有一个名为getVersion（）的方法，用于获取模块的当前版本。</li>
</ul>
<h3>InstallData：</h3>
<p>InstallData用于将数据添加到数据库表。InstallData类也将在模块安装期间运行。但它将在InstallSchema类之后运行。</p>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup/InstallData.php</em></p>
<pre></pre>
<h3>UpgradeSchema：</h3>
<p>UpgradeSchema用于创建或修改现有模块的数据库表。安装脚本和升级脚本之间的主要区别在于，安装脚本将在模块首次安装期间运行。但升级脚本将在每次模块升级时运行。</p>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup/UpgradeSchema.php</em></p>
<pre>
<?php
 
namespace Alwayly\CustomScript\Setup;
 
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
 
class UpgradeSchema implements UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) {
        $installer = $setup;
 
        $installer->startSetup();
 
        if(version_compare($context->getVersion(), '1.0.1', '<')) {
            $installer->getConnection()->addColumn(
                $installer->getTable( 'comments' ),
                'user_image',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'nullable' => true,
                    'length' => '254',
                    'comment' => 'Image',
                    'after' => 'url_key'
                ]
            );
        }
 
        $installer->endSetup();
    }
}
</pre>
<p>UpgradeSchema安装程序类文件必须继承<strong>\Magento\Framework\Setup\UpgradeSchemaInterface，</strong> &nbsp;并且必须具有一个带有2个参数SchemaSetupInterface和ModuleContextInterface的公共方法<strong>upgrade（）</strong>。</p>
<h3>UpgradeData：</h3>
<p>UpgradeData用于添加/删除数据库表中的数据。这与UpgradeSchema类相同。</p>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup/UpgradeData.php</em></p>
<pre>
&lt;?php
 
namespace Alwayly\CustomScript\Setup;
 
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
 
class UpgradeData implements UpgradeDataInterface
{
 
    protected $_commentFactory;
 
    public function __construct(\Alwayly\CustomScript\Model\CommentFactory $commentFactory)
    {
        $this->_commentFactory = $commentFactory;
    }
 
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        if (version_compare($context->getVersion(), '1.0.1', '<')) {
            $data = [
                'name' => 'Thomus Raj',
                'email' => 'roni_cost@xample.com',
                'url_key' => 'https://www.360magento.com',
                'message' => 'My first comment',
                'status' => 1
            ];
            $post = $this->_commentFactory->create();
            $post->addData($data)->save();
        }
    }
}
</pre>
<h3>Uninstall：</h3>
<p><em>示例文件路径：app/code/Alwayly/CustomScript/Setup/Uninstall.php</em></p>
<pre>
&lt;?php
 
namespace Alwayly\CustomScript\Setup;
 
use Magento\Framework\Setup\UninstallInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
 
class Uninstall implements UninstallInterface
{
    public function uninstall(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();
 
        $installer->getConnection()->dropTable($installer->getTable('comments'));
 
        $installer->endSetup();
    }
}
</pre>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Wed, 12 Jun 2019 09:59:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2添加额外费用到订单总计]]></title>
      <link>https://www.360magento.com/blog/m2-add-extra-fee-to-order-totals/</link>
      <description><![CDATA[<p>有时我们可能需要在Magento 2中为订单总额添加额外费用（手续费）。通常，订单总计包括小计，运费，税金和折扣，根据这些值计算总计。现在，如果我们想增加额外的费用，它将影响订单总额。在本文中，我们将指导您如何在没有任何问题的情况下为Magento 2订单额外收费。</p>
<p>在这里，我们将添加一个名为“处理费”的新订单总额，固定成本为10美元。</p>
<p><strong>第1步：</strong>定义新模块，</p>
<p>在以下文件路径中创建<strong>module.xml</strong>文件以定义新模块，</p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/etc/module.xml</em></p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_HandlingFee" setup_version="1.0.0"&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>
<p>接下来，在下面的文件路径中创建<strong>registration.php</strong>文件，</p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/registration.php</em></p>
<pre>
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_HandlingFee',
    __DIR__
);
</pre>
<p><strong>第2步：</strong> &nbsp;在以下路径中创建文件<strong>sales.xml</strong>，</p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/etc/sales.xml</em></p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Sales:etc/sales.xsd"&gt;
    &lt;section name="quote"&gt;
        &lt;group name="totals"&gt;
            &lt;item name="handlingfee" instance="Alwayly\HandlingFee\Model\Quote\Address\Total\HandlingFee" sort_order="400"/&gt;
        &lt;/group&gt;
    &lt;/section&gt;
&lt;/config&gt;
</pre>
<p><strong>步骤3</strong>：&nbsp;在以下路径中创建文件<strong>HandlingFee.php</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/Model/Quote/Address/Total/HandlingFee.php</em></p>
<pre>
&lt;?php
namespace Alwayly\HandlingFee\Model\Quote\Address\Total;
class HandlingFee extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal
{
    /**
     * @var \Magento\Framework\Pricing\PriceCurrencyInterface
     */
    protected $_priceCurrency;
  
    /**
     * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
     */
    public function __construct(
        \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
    ) {
        $this->_priceCurrency = $priceCurrency;
    }
  
    public function collect(
        \Magento\Quote\Model\Quote $quote,
        \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
        \Magento\Quote\Model\Quote\Address\Total $total
    ) {
        parent::collect($quote, $shippingAssignment, $total);
        $handlingFee = 10;
        $total->addTotalAmount('handlingfee', $handlingFee);
        $total->addBaseTotalAmount('handlingfee', $handlingFee);
        $quote->setHandlingFee($handlingFee);
        return $this;
    }
  
    public function fetch(
        \Magento\Quote\Model\Quote $quote,
        \Magento\Quote\Model\Quote\Address\Total $total
    ) {
        return [
            'code' => 'Handling_Fee',
            'title' => $this->getLabel(),
            'value' => 10
        ];
    }
  
    /**
     * get label
     * @return string
     */
    public function getLabel() {
        return __('Handling Fee');
    }
}
</pre>
<p><strong>步骤4</strong>：在以下路径中创建文件<strong>checkout_cart_index.xml</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/layout/checkout_cart_index.xml</em></p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;referenceBlock name="checkout.cart.totals"&gt;
            &lt;arguments&gt;
                &lt;argument name="jsLayout" xsi:type="array"&gt;
                    &lt;item name="components" xsi:type="array"&gt;
                        &lt;item name="block-totals" xsi:type="array"&gt;
                            &lt;item name="children" xsi:type="array"&gt;
                                &lt;item name="handlingfee" xsi:type="array"&gt;
                                    &lt;item name="component" xsi:type="string"&gt;Alwayly_HandlingFee/js/view/checkout/summary/handling-fee&lt;/item&gt;
                                    &lt;item name="sortOrder" xsi:type="string"&gt;20&lt;/item&gt;
                                    &lt;item name="config" xsi:type="array"&gt;
                                        &lt;item name="handlingfee" xsi:type="string" translate="true"&gt;Handling Fee&lt;/item&gt;
                                    &lt;/item&gt;
                                &lt;/item&gt;
                            &lt;/item&gt;
                        &lt;/item&gt;
                    &lt;/item&gt;
                &lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
    &lt;/body&gt;
&lt;/page&gt;
</pre>
<p><strong>步骤5</strong>：在同一路径中创建文件<strong>checkout_index_index.xml</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/layout/checkout_index_index.xml</em></p>
<pre>
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;referenceBlock name="checkout.root"&gt;
            &lt;arguments&gt;
                &lt;argument name="jsLayout" xsi:type="array"&gt;
                    &lt;item name="components" xsi:type="array"&gt;
                        &lt;item name="checkout" xsi:type="array"&gt;
                            &lt;item name="children" xsi:type="array"&gt;
                                &lt;item name="sidebar" xsi:type="array"&gt;
                                    &lt;item name="children" xsi:type="array"&gt;
                                        &lt;item name="summary" xsi:type="array"&gt;
                                            &lt;item name="children" xsi:type="array"&gt;
                                                &lt;item name="totals" xsi:type="array"&gt;
                                                    &lt;item name="children" xsi:type="array"&gt;
                                                        &lt;item name="handlingfee" xsi:type="array"&gt;
                                                            &lt;item name="component" xsi:type="string"&gt;Alwayly_HandlingFee/js/view/checkout/cart/totals/handling-fee&lt;/item&gt;
                                                            &lt;item name="sortOrder" xsi:type="string"&gt;20&lt;/item&gt;
                                                            &lt;item name="config" xsi:type="array"&gt;
                                                                &lt;item name="template" xsi:type="string"&gt;Alwayly_HandlingFee/checkout/cart/totals/handling-fee&lt;/item&gt;
                                                                &lt;item name="title" xsi:type="string" translate="true"&gt;Handling Fee&lt;/item&gt;
                                                            &lt;/item&gt;
                                                        &lt;/item&gt;
                                                    &lt;/item&gt;
                                                &lt;/item&gt;
                                                &lt;item name="cart_items" xsi:type="array"&gt;
                                                    &lt;item name="children" xsi:type="array"&gt;
                                                        &lt;item name="details" xsi:type="array"&gt;
                                                            &lt;item name="children" xsi:type="array"&gt;
                                                                &lt;item name="subtotal" xsi:type="array"&gt;
                                                                    &lt;item name="component" xsi:type="string"&gt;Magento_Tax/js/view/checkout/summary/item/details/subtotal&lt;/item&gt;
                                                                &lt;/item&gt;
                                                            &lt;/item&gt;
                                                        &lt;/item&gt;
                                                    &lt;/item&gt;
                                                &lt;/item&gt;
                                            &lt;/item&gt;
                                        &lt;/item&gt;
                                    &lt;/item&gt;
                                &lt;/item&gt;
                            &lt;/item&gt;
                        &lt;/item&gt;
                    &lt;/item&gt;
                &lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
    &lt;/body&gt;
&lt;/page&gt;
</pre>
<p><strong>第6步：</strong>在路径上创建文件<strong>handling-fee.js</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/web/js/view/checkout/cart/totals/handling-fee.js</em></p>
<pre>
define(
    [
        'Alwayly_HandlingFee/js/view/checkout/summary/handling-fee'
    ],
    function (Component) {
        'use strict';
        return Component.extend({
            /**
             * @override
             */
            isDisplayed: function () {
                return true;
            }
        });
    }
);
</pre>
<p><strong>步骤7：</strong>在以下路径中创建文件<strong>handling-fee.js</strong> .</p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/web/js/view/checkout/summary/handling-fee.js</em></p>
<pre>
define(
    [
        'jquery',
        'Magento_Checkout/js/view/summary/abstract-total',
        'Magento_Checkout/js/model/quote',
        'Magento_Checkout/js/model/totals',
        'Magento_Catalog/js/price-utils'
    ],
    function ($,Component,quote,totals,priceUtils) {
        "use strict";
        return Component.extend({
            defaults: {
                template: 'Alwayly_HandlingFee/checkout/summary/handling-fee'
            },
            totals: quote.getTotals(),
               isDisplayedHandlingfeeTotal : function () {
               return true;
            },
            getHandlingfeeTotal : function () {
                var price = 10;
                return this.getFormattedPrice(price);
            }
        });
    }
);
</pre>
<p><strong>步骤8：</strong>在以下路径中创建文件<strong>handling-fee.html</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/web/template/checkout/cart/totals/handling-fee.html</em></p>
<pre>
<!-- ko if: isDisplayedHandlingfeeTotal() -->
<tr class="totals handling-fee excl">
    <th class="mark" colspan="1" scope="row" data-bind="text: title"></th>
    <td class="amount">
        <span class="price" data-bind="text: getHandlingfeeTotal()"></span>
    </td>
</tr>
<!-- /ko -->
</pre>
<p><strong>步骤9</strong>：在以下路径中创建文件<strong>handling-fee.html</strong></p>
<p><em>&lt;Magento_2_Root&gt; /app/code/Alwayly/HandlingFee/view/frontend/web/template/checkout/summary/handling-fee.html</em></p>
<pre>
<!-- ko if: isDisplayedHandlingfeeTotal() -->
<tr class="totals coupon-fee excl">
    <th class="mark" colspan="1" scope="row" data-bind="text: handlingfee"></th>
    <td class="amount">
        <span class="price" data-bind="text: getHandlingfeeTotal(), attr: {'data-th': handlingfee}"></span>
    </td>
</tr>
<!-- /ko -->
</pre>
<p>最后，您可以在购物车和结帐页面上看到额外的费用。</p>
<p>参考截图：</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_235/Magento-2-Add-Extra-Fee-To-Order-Totals.png" alt="Magento2添加额外费用到订单总计" /></p>]]></description>
      <pubDate>Tue, 11 Jun 2019 06:33:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento 2中创建自定义运输方式]]></title>
      <link>https://www.360magento.com/blog/m2-create-custom-shipping-method/</link>
      <description><![CDATA[<p>Magento 2已经有一些内置的运输方式。但在某些情况下，我们可能想在Magento 2中创建自己的运输方式。这不是一个困难的过程。我们可以非常轻松地在Magento 2中创建自定义运输方式。这篇博客可以帮助您在短时间内创建自己的自定义运输方式。</p>
<p>创建自定义运输方法的步骤：</p>
<ul>
<li>创建一个新模块</li>
<li>创建配置文件</li>
<li>定义运输模型</li>
<li>创建运输模型</li>
<li>模块安装</li>
</ul>
<h3>创建一个新模块：</h3>
<p>在下面的文件路径中创建一个&ldquo;registration.php&rdquo;文件来注册我们的新模块，</p>
<p><em>文件路径：&lt;Magento_2_Root&gt; /app/code/Alwayly/CustomShipping/registration.php</em></p>
<pre>&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_CustomShipping',
    __DIR__
);
</pre>
<p>接下来，在下面的文件路径中创建一个&ldquo;module.xml&rdquo;文件来定义模块，</p>
<p><em>文件路径：&lt;Magento_2_Root&gt; /app/code/Alwayly/CustomShipping/etc/module.xml</em></p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_CustomShipping" setup_version="1.0.0"&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>
<h3>创建配置文件：</h3>
<p>在Magento 2中，每个运输方式都应该在管理面板中有配置选项。我们可以通过system.xml文件为我们的运输方式创建配置选项。</p>
<p><em>文件路径：&lt;Magento_2_Root&gt; /app/code/Alwayly/CustomShipping/etc/adminhtml/system.xml</em></p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"&gt;
    &lt;system&gt;
        &lt;section id="carriers" translate="label" type="text" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
            &lt;group id="customshipping" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"&gt;
                &lt;label&gt;Custom Shipping Method&lt;/label&gt;
                &lt;field id="active" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1"&gt;
                    &lt;label&gt;Enabled&lt;/label&gt;
                    &lt;source_model&gt;Magento\Config\Model\Config\Source\Yesno&lt;/source_model&gt;
                &lt;/field&gt;
                &lt;field id="price" translate="label" type="text" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
                    &lt;label&gt;Shipping Cost&lt;/label&gt;
                    &lt;validate&gt;validate-number validate-zero-or-greater&lt;/validate&gt;
                &lt;/field&gt;
                &lt;field id="name" translate="label" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"&gt;
                    &lt;label&gt;Method Name&lt;/label&gt;
                &lt;/field&gt;
                &lt;field id="sort_order" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
                    &lt;label&gt;Sort Order&lt;/label&gt;
                &lt;/field&gt;
                &lt;field id="title" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"&gt;
                    &lt;label&gt;Title&lt;/label&gt;
                &lt;/field&gt;
                &lt;field id="sallowspecific" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1"&gt;
                    &lt;label&gt;Ship to Applicable Countries&lt;/label&gt;
                    &lt;frontend_class&gt;shipping-applicable-country&lt;/frontend_class&gt;
                    &lt;source_model&gt;Magento\Shipping\Model\Config\Source\Allspecificcountries&lt;/source_model&gt;
                &lt;/field&gt;
                &lt;field id="specificcountry" translate="label" type="multiselect" sortOrder="91" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
                    &lt;label&gt;Ship to Specific Countries&lt;/label&gt;
                    &lt;source_model&gt;Magento\Directory\Model\Config\Source\Country&lt;/source_model&gt;
                    &lt;can_be_empty&gt;1&lt;/can_be_empty&gt;
                &lt;/field&gt;
                &lt;field id="showmethod" translate="label" type="select" sortOrder="92" showInDefault="1" showInWebsite="1" showInStore="0"&gt;
                    &lt;label&gt;Show Method if Not Applicable&lt;/label&gt;
                    &lt;source_model&gt;Magento\Config\Model\Config\Source\Yesno&lt;/source_model&gt;
                    &lt;frontend_class&gt;shipping-skip-hide&lt;/frontend_class&gt;
                &lt;/field&gt;
                &lt;field id="specificerrmsg" translate="label" type="textarea" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"&gt;
                    &lt;label&gt;Displayed Error Message&lt;/label&gt;
                &lt;/field&gt;
            &lt;/group&gt;
        &lt;/section&gt;
    &lt;/system&gt;
&lt;/config&gt;
</pre>
<h3>定义运输模型：</h3>
<p>现在在下面的路径中创建一个&ldquo;config.xml&rdquo;文件，并为我们的自定义运输方式设置默认配置，</p>
<p><em>文件路径：&lt;Magento_2_Root&gt; /app/code/Alwayly/CustomShipping/etc/config.xml</em></p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"&gt;
    &lt;default&gt;
        &lt;carriers&gt;
            &lt;customshipping&gt;
                &lt;active&gt;0&lt;/active&gt;
                &lt;sallowspecific&gt;0&lt;/sallowspecific&gt;
                &lt;price&gt;0&lt;/price&gt;
                &lt;model&gt;Alwayly\CustomShipping\Model\Carrier\Customshipping&lt;/model&gt;
                &lt;name&gt;Custom Shipping&lt;/name&gt;
                &lt;title&gt;Custom Shipping&lt;/title&gt;
                &lt;specificerrmsg&gt;This shipping method is not available. To use this shipping method, please contact us.&lt;/specificerrmsg&gt;
            &lt;/customshipping&gt;
        &lt;/carriers&gt;
    &lt;/default&gt;
&lt;/config&gt;
</pre>
<p>这里，&lt;default&gt;是父节点，其子节点是&lt;carriers&gt;，&lt;customshipping&gt;是我们的运输方式代码。&lt;model&gt;是重要的一个，在这个&lt;model&gt;标签中，我们应该定义我们的运输模型类。</p>
<h3>创建运输模型：</h3>
<p>在&ldquo;config.xml&rdquo;上定义运输模型后，我们需要在下面的文件路径中创建运输模型类&ldquo;Customshipping.php&rdquo;，</p>
<p><em>文件路径：&lt;Magento_2_Root&gt; /app/code/Alwayly/CustomShipping/Model/Carrier/Customshipping.php</em></p>
<pre>&lt;?php
namespace Alwayly\CustomShipping\Model\Carrier;
 
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\DataObject;
use Magento\Shipping\Model\Carrier\AbstractCarrier;
use Magento\Shipping\Model\Carrier\CarrierInterface;
use Magento\Shipping\Model\Config;
use Magento\Shipping\Model\Rate\ResultFactory;
use Magento\Store\Model\ScopeInterface;
use Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory;
use Magento\Quote\Model\Quote\Address\RateResult\Method;
use Magento\Quote\Model\Quote\Address\RateResult\MethodFactory;
use Magento\Quote\Model\Quote\Address\RateRequest;
use Psr\Log\LoggerInterface;
 
class Customshipping extends AbstractCarrier implements CarrierInterface
{
     
    /**
     * @var string
     */
    protected $_code = 'customshipping';
 
    /**
     * @var bool
     */
    protected $_isFixed = true;
 
    /**
     * @var ResultFactory
     */
    protected $_rateResultFactory;
 
    /**
     * @var MethodFactory
     */
    protected $_rateMethodFactory;
 
    /**
     * @param ScopeConfigInterface $scopeConfig
     * @param ErrorFactory $rateErrorFactory
     * @param LoggerInterface $logger
     * @param ResultFactory $rateResultFactory
     * @param MethodFactory $rateMethodFactory
     * @param array $data
     */
    public function __construct(
        ScopeConfigInterface $scopeConfig,
        ErrorFactory $rateErrorFactory,
        LoggerInterface $logger,
        ResultFactory $rateResultFactory,
        MethodFactory $rateMethodFactory,
        array $data = []
    ) {
        $this-&gt;_rateResultFactory = $rateResultFactory;
        $this-&gt;_rateMethodFactory = $rateMethodFactory;
        parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
    }
 
    /**
     * @return array
     * @api
     */
    public function getAllowedMethods()
    {
        return [$this-&gt;getCarrierCode() =&gt; __($this-&gt;getConfigData('name'))];
    }
 
    /**
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     * @param RateRequest $request
     * @return DataObject|bool|null
     * @api
     */
    public function collectRates(RateRequest $request)
    {
        /**
         * Make sure that shipping method is enabled
         */
        if (!$this-&gt;isActive()) {
            return false;
        }
 
        /** @var \Magento\Shipping\Model\Rate\Result $result */
        $result = $this-&gt;_rateResultFactory-&gt;create();
        $shippingPrice = $this-&gt;getConfigData('price');
        $method = $this-&gt;_rateMethodFactory-&gt;create();
 
        /**
         * Set carrier's method data
         */
        $method-&gt;setCarrier($this-&gt;getCarrierCode());
        $method-&gt;setCarrierTitle($this-&gt;getConfigData('title'));
 
        /**
         * Displayed as shipping method under Carrier
         */
        $method-&gt;setMethod($this-&gt;getCarrierCode());
        $method-&gt;setMethodTitle($this-&gt;getConfigData('name'));
        $method-&gt;setPrice($shippingPrice);
        $method-&gt;setCost($shippingPrice);
        $result-&gt;append($method);
        return $result;
    }
}
</pre>
<p><strong>注意：</strong></p>
<ul>
<li>在Magento 2中，每个运输类都应继承<strong>\Magento\Shipping\Model\Carrier\AbstractCarrier</strong>并实现<strong>\Magento\Shipping\Model\Carrier\CarrierInterface</strong>类。</li>
<li><strong>$ _code</strong>的值应与system.xml中的group id相同。</li>
<li>抽象类和接口需要两个函数<strong>getAllowedMethods</strong>和<strong>collectRates</strong>。</li>
<li>在函数collectRates中，我们必须为自定义运费计算实现所有逻辑。</li>
</ul>
<h3>模块安装：</h3>
<p>最后，我们必须启用扩展并安装它。为此，转到[magento_root]/bin目录并在CLI中运行以下命令，</p>
<blockquote>
<p>php magento module:enable Alwayly_CustomShipping</p>
</blockquote>
<p>然后，在CLI中运行以下命令以安装模块，</p>
<blockquote>
<p>php magento setup:upgrade</p>
</blockquote>
<p>然后，使用以下CLI命令清除缓存，</p>
<blockquote>
<p>php magento c:c</p>
</blockquote>
<p>现在，登录到Magento 2管理面板，导航到<strong>STORES</strong> &gt; <strong>Configuration</strong>，从左侧面板展开<strong>SALES</strong>部分，然后单击<strong>Shipping Methods</strong>。您可以看到我们的自定义运输方式配置页面如下，</p>
<p><img alt="Magento2自定义运输方式" src="https://www.360magento.com/media/wysiwyg/blog_234/How-to-Create-Custom-Shipping-Method-in-Magento-2-1-768x471.png" /></p>
<p>在这里，您可以启用我们的自定义运输方式，并根据您的需要设置配置值。</p>
<p>完成配置我们的送货方式后，运输计算将显示在结帐页面上，如下所示，</p>
<p><img alt="Magento2自定义运输方式" src="https://www.360magento.com/media/wysiwyg/blog_234/How-to-Create-Custom-Shipping-Method-in-Magento-2.png" /></p>
<p>最后，运输方式将应用于结账页面，结果将显示如下，</p>
<p><img alt="Magento2自定义运输方式" src="https://www.360magento.com/media/wysiwyg/blog_234/How-to-Create-Custom-Shipping-Method-in-Magento-2-2.png" /></p>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Fri, 07 Jun 2019 09:56:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[通过命令行在Magento 2中创建新的管理员用户]]></title>
      <link>https://www.360magento.com/blog/m2-create-admin-user-via-command/</link>
      <description><![CDATA[<p>通过命令行界面创建一个新的管理员用户是Magento 2中的一个重要功能。当我们忘记Magento 2管理员密码时，这是非常有用和快速的解决方案。</p>
<h3>通过命令行创建管理员用户</h3>
<p>以下是CLI命令，可帮助您在Magento 2中创建新的管理员用户，在Magento 2安装的根目录的路径中运行以下命令，</p>
<pre>php bin/magento admin:user:create --admin-user="admin" --admin-password="Admin@123" --admin-email="admin@360magento.com" --admin-firstname="MyFirstName" --admin-lastname="MyLastName"
</pre>
<p>创建管理员用户帐户后，上面的命令将返回以下成功消息，</p>
<blockquote>
<p>Created Magento administrator user named admin</p>
</blockquote>
<p>当我们在CLI中运行上述命令时，将执行以下文件以创建新的管理员用户，</p>
<p><em>&lt;Magento 2安装根目录&gt; /vendor/magento/magento2-base/setup/src/Magento/Setup/Console/Command/AdminUserCreateCommand.php</em></p>
<p>您还可以从命令行&ldquo;interactively&rdquo;创建管理员用户，该用户包含在最新版本的magento中。 </p>
<p>以下是创建新管理员用户的命令，</p>
<pre>php bin/magento admin:user:create</pre>
<p>它将提示您逐个输入以下必填字段。</p>
<ul>
<li><strong>Admin user：</strong> Magento管理员用户的名字。</li>
<li><strong>Admin password：</strong> Magento管理员用户的姓氏。</li>
<li><strong>Admin email：</strong> Magento管理员用户的电子邮件地址。</li>
<li><strong>Admin first name：</strong> Magento管理员用户名。</li>
<li><strong>Admin last name：</strong> Magento管理员用户密码长度必须至少为7个字符，并且必须至少包含一个字母和至少一个数字字符。</li>
</ul>
<p>这很简单，很酷。</p>
<h3>通过命令行解锁管理员用户</h3>
<p>有时管理员帐户将因多次不正确的登录尝试而锁定。使用以下命令解锁这些类型的管理员用户帐户。</p>
<pre>php bin/magento admin:user:unlock {username}</pre>
<p>例，</p>
<pre>php bin/magento admin:user:unlock admin</pre>
<p>上面的命令将返回以下成功消息，</p>
<blockquote>
<p>The user account &ldquo;admin&rdquo; has been unlocked</p>
</blockquote>
<p>在命令行界面中运行以下命令，以获取在Magento 2中创建管理员用户的所有选项列表，</p>
<pre>php bin/magento admin:user:create --help</pre>
<p>它将返回如下输出，</p>
<pre>Usage:
   admin:user:create [options]
 Options:
       --admin-user=ADMIN-USER                    (Required) Admin user
       --admin-password=ADMIN-PASSWORD            (Required) Admin password
       --admin-email=ADMIN-EMAIL                  (Required) Admin email
       --admin-firstname=ADMIN-FIRSTNAME          (Required) Admin first name
       --admin-lastname=ADMIN-LASTNAME            (Required) Admin last name
       --magento-init-params=MAGENTO-INIT-PARAMS  Add to any command to customize Magento initialization parameters
                                                  For example: "MAGE_MODE=developer&amp;MAGE_DIRS[base][path]=/var/www/example.com&amp;MAGE_DIRS[cache][path]=/var/tmp/cache"
   -h, --help                                     Display this help message
   -q, --quiet                                    Do not output any message
   -V, --version                                  Display this application version
       --ansi                                     Force ANSI output
       --no-ansi                                  Disable ANSI output
   -n, --no-interaction                           Do not ask any interactive question
   -v|vv|vvv, --verbose                           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
 Help:
   Creates an administrator
</pre>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Wed, 05 Jun 2019 08:21:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2创建新用户管理角色权限步骤]]></title>
      <link>https://www.360magento.com/blog/m2-create-new-user-role/</link>
      <description><![CDATA[<p>大多数在线商城平台都有多个管理员用户，如平台所有者，客户服务经理，销售代表等，以简化他们的商店管理流程。此类在线平台的所有者可能希望根据其角色限制管理员用户。为了实现这一目标，Magento 2具有“User Roles”的内置功能，允许平台所有者根据需要为特定的管理员用户组定义权限。</p>
<p>默认情况下，Magento创建名为“Administrators”的用户角色，该角色具有最高访问权限。平台的所有者属于此用户角色。</p>
<h3>在Magento 2中定义新用户角色的步骤</h3>
<p>例如，在下面的演示中，我们将了解如何创建名为“Sales representatives”的新用户角色，并根据其角色限制其访问权限。</p>
<p><strong>步骤1：</strong>在管理员面板上，单击左侧菜单中的“System”。然后，单击“Permissions”部分中的“User Roles”。在这里，您将看到现有用户角色的列表。</p>
<div class="wp-block-image"><figure class="aligncenter is-resized"><a href="#" target="_blank" rel="noreferrer noopener"><img src="https://www.360magento.com/media/wysiwyg/232/Steps-to-Create-New-User-Role-in-Magento-2-1.png" alt="Magento2为新用户添加管理员权限" /></a></figure></div>
<p><strong>步骤2：</strong>在右上角，单击“Add New Role”按钮以添加新用户角色。</p>
<div class="wp-block-image"><figure class="aligncenter"><a href="#" target="_blank" rel="noreferrer noopener"><img src="https://www.360magento.com/media/wysiwyg/232/Steps-to-Create-New-User-Role-in-Magento-2-2-1024x516.png" alt="Magento2为新用户添加管理员权限" /></a></figure></div>
<p><strong>步骤3：</strong>在“Role Information”部分中，输入描述性角色名称，如Sales Representatives。</p>
<p>在“Current User Identity Verification”部分中，输入您当前的管理员密码以验证您是否有权添加新用户角色。</p>
<div class="wp-block-image"><figure class="aligncenter"><a href="#" target="_blank" rel="noreferrer noopener"><img src="https://www.360magento.com/media/wysiwyg/232/Steps-to-Create-New-User-Role-in-Magento-2-3-1024x487.png" alt="Magento2为新用户添加管理员权限" /></a></figure></div>
<p><strong>第4步：</strong>单击左侧面板中的“Role Resources”。在这里，您可以看到以下下拉选项，</p>
<ul><li><strong>All：</strong>如果要授予对新用户角色的完全访问权限，请选择此选项。</li><li><strong>Custom：</strong>如果要授予对新用户角色的限制访问权限，请选择此选项。这将显示所有资源的列表。勾选要分配给新用户角色的资源的复选框。</li></ul>
<div class="wp-block-image"><figure class="aligncenter"><a href="#" target="_blank" rel="noreferrer noopener"><img src="https://www.360magento.com/media/wysiwyg/232/Steps-to-Create-New-User-Role-in-Magento-2-4-1024x518.png" alt="Magento2为新用户添加管理员权限"/></a></figure></div>
<p><strong>步骤5：</strong>最后，单击“Save Role”按钮以创建新用户角色。</p>
<div class="wp-block-image"><figure class="aligncenter"><a href="#" target="_blank" rel="noreferrer noopener"><img src="https://www.360magento.com/media/wysiwyg/232/Steps-to-Create-New-User-Role-in-Magento-2-5-1024x522.png" alt="Magento2为新用户添加管理员权限" /></a></figure></div>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Wed, 05 Jun 2019 08:05:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2以编程方式将产品属性分配到属性集]]></title>
      <link>https://www.360magento.com/blog/m2-assign-productattribute-to-attributeset/</link>
      <description><![CDATA[<p>在Magento中，将单个属性分配给单个属性集是一个快速的过程，我们可以非常轻松地在后台管理完成。但是将大量属性分配给所有属性集（即，属性集大于25个）并不是一个快速的过程，需要花费很多时间。但是我们可以通过使用自定义脚本使过程变得非常简单。在这里，我将向您展示如何使用自定义脚本将产品属性分配给所有属性集。</p>
<h3>将指定属性分配给任意单个属性集：</h3>
<p>以下代码有助于使用属性代码和属性集名称将特定产品属性分配给任意特定属性集，</p>
<pre>
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
 
/* Assign Specific Product Attribute to Any Single Attribute Set */
$attributeCode = 'size';
$attributeGroup = 'Product Details';
$attributeSet = 'Bag';
$eavSetup = $objectManager->create(\Magento\Eav\Setup\EavSetup::class);
$config = $objectManager->get(\Magento\Catalog\Model\Config::class);
$attributeManagement = $objectManager->get(\Magento\Eav\Api\AttributeManagementInterface::class);
 
$entityTypeId = $eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
$attributeSet = $eavSetup->getAttributeSet($entityTypeId, $attributeSet);
if(isset($attributeSet['attribute_set_id'])) {
     $group_id = $config->getAttributeGroupId($attributeSet['attribute_set_id'], $attributeGroup);
     $attributeManagement->assign(
          'catalog_product',
          $attributeSet['attribute_set_id'],
          $group_id,
          $attributeCode,
          100
     );
}
</pre>
<h3>为所有属性集分配指定属性：</h3>
<p>以下代码将产品属性分配给所有属性集，</p>
<pre>
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
 
/* Assign Specific Product Attribute to All the Attribute Sets */
$attributeCode = 'size';
$attributeGroup = 'Product Details';
 
$eavSetup = $objectManager->create(\Magento\Eav\Setup\EavSetup::class);
$config = $objectManager->get(\Magento\Catalog\Model\Config::class);
$attributeManagement = $objectManager->get(\Magento\Eav\Api\AttributeManagementInterface::class);
 
$entityTypeId = $eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
$attributeSetIds = $eavSetup->getAllAttributeSetIds($entityTypeId);
foreach ($attributeSetIds as $attributeSetId) {
     if ($attributeSetId) {
          $group_id = $config->getAttributeGroupId($attributeSetId, $attributeGroup);
          $attributeManagement->assign(
               'catalog_product',
               $attributeSetId,
               $group_id,
               $attributeCode,
               100
          );
     }
}
</pre>
<p>希望这可以帮助到你。</p>]]></description>
      <pubDate>Mon, 03 Jun 2019 05:51:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2从可配置产品中获取关联的简单产品信息]]></title>
      <link>https://www.360magento.com/blog/m2-get-simple-from-configurable/</link>
      <description><![CDATA[<p>Magento 2中的可配置产品允许商家创建具有不同类型变体的产品，例如具有不同颜色（即红色，绿色，蓝色），尺寸（即S，M，L）的T恤，这些变化是具有独特SKU，库存，价格等的简单产品。在前端，可配置产品的信息将显示在产品详细信息页面中，所有相关的简单产品将显示为下拉列表或色板。</p>
<p>例如，T恤是一种可配置的产品，它有不同的尺寸，如S，M和L。此尺寸选项与三种不同的简单产品相关联，这些简单产品具有独特的SKU，库存，并且可能根据尺寸具有不同的价格。在产品详细信息页面中，默认情况下，将显示具有此尺寸变化的T恤信息。当我们选择该选项时，将在详细信息页面中更改所选产品SKU和价格。这是Magento2中的默认功能。但有时候，比如我们可能需要从产品详细信息页面或网站其他位置的可配置产品中获取这些相关的简单产品。这时，我们需要扩展Magento2原生功能，这篇简单的博客将帮助您以编程方式从可配置产品中获取相关的简单产品。</p>
<p>为了在Magento 2中获取产品信息，我们可能需要在模块类的构造函数中注入<strong>\Magento\Catalog\Model\ProductRepository</strong>类的对象。</p>
<h3>使用依赖注入（DI）</h3>
<p>以下是使用依赖注入从可配置产品中获取关联简单产品的示例代码。</p>
<pre>protected $productRepository;
...
 
public function __construct(
    ...
    \Magento\Catalog\Model\ProductRepository $productRepository,
    ...
) {
    ...
    $this-&gt;productRepository = $productRepository;
    ...
}
 
public function getAssociatedSimpleProduct($configurable_product_id) {
    $configurableProduct = $this-&gt;productRepository-&gt;getById($configurable_product_id);
    $children = $configurableProduct-&gt;getTypeInstance()-&gt;getUsedProducts($configurableProduct);
    foreach ($children as $child){
        echo "Child Product Id: " . $child-&gt;getId();
        echo "Child Product SKU: " . $child-&gt;getSku();
    }
}
</pre>
<h3>使用对象管理器</h3>
<p>以下是使用对象管理器从Magento 2中的可配置产品获取关联的简单产品的示例代码。</p>
<pre>$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 
$configurable_product_id = 68;
$configurableProduct = $objectManager-&gt;get('Magento\Catalog\Model\ProductRepository')-&gt;getById($configurable_product_id);
 
$children = $configurableProduct-&gt;getTypeInstance()-&gt;getUsedProducts($configurableProduct);
foreach ($children as $child){
    echo "Child Product Id: " . $child-&gt;getId();
    echo "Child Product SKU: " . $child-&gt;getSku();
}</pre>
<p><strong>Note:</strong>以上代码在Magento 2.3中进行了测试。</p>]]></description>
      <pubDate>Fri, 31 May 2019 07:04:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何创建确认小部件(Widgets)]]></title>
      <link>https://www.360magento.com/blog/m2-create-widgets/</link>
      <description><![CDATA[<p>Magento确认小部件用于显示带有指定消息的对话框，以及确认按钮（即OK）和Cancel按钮。我们可以在下面的路径中找到Magento确认小部件源文件，</p>
<p><em>&lt;Magento安装根目录&gt;/vendor/magento/module-ui/view/base/web/js/modal/confirm.js</em></p>
<p>我们可以使用确认小部件为Admin和storefront实现确认窗口。</p>
<h3>初始化确认小部件：</h3>
<p>可以使用以下两种方法初始化确认小部件，</p>
<p><strong>方法1：</strong></p>
<p>可以通过绑定到某个元素来初始化确认小部件。</p>
<p>示例HTML代码：</p>
<pre>
&lt;a class="action delete" id="delete_image" href="&lt;?php /* @escapeNotVerified */ echo $block->getDeleteUrl($_customer->getEntityId()); ?>"&gt;
    &lt;span&gt;
        &lt;?php /* @escapeNotVerified */ echo __('Delete'); ?&gt;
    &lt;/span&gt;
&lt;/a&gt;
</pre>
<p>示例JS代码：</p>
<pre>
&lt;script&gt;
    require([
        'jquery',
        'Magento_Ui/js/modal/confirm'
    ],
    function($, confirmation) {
        $('#delete_image').on('click', function(event){
            event.preventDefault;
            confirmation({
                title: 'Some title',
                content: 'Some content',
                actions: {
                    /**
                     * Callback always - called on all actions.
                     */
                    always: function () {},
 
                    /**
                     * Callback confirm.
                     */
                    confirm: function () {},
 
                    /**
                     * Callback cancel.
                     */
                    cancel: function () {}
                }
            });
        });
    });
&lt;/script&gt;
</pre>
<p>在这里，确认小部件将在点击&lt;a&gt;标签时被初始化，并且在小部件初始化之后，modal pop-up窗口将打开。</p>
<p><strong>方法2：</strong></p>
<p>可以初始化确认小部件而不绑定到某个元素。</p>
<p>示例JS代码：</p>
<pre>
&lt;script&gt;
    require([
        'Magento_Ui/js/modal/confirm'
    ],
    function($, confirmation) {
        confirmation({
            title: 'Some title',
            content: 'Some content',
            actions: {
                /**
                 * Callback always - called on all actions.
                 */
                always: function () {},
 
                /**
                 * Callback confirm.
                 */
                confirm: function () {},
 
                /**
                 * Callback cancel.
                 */
                cancel: function () {}
            }
        });
    });
&lt;/script&gt;
</pre>
<p>这里，确认小部件将在页面加载时初始化，并且在小部件初始化之后，modal pop-up窗口将打开。</p>
<h3>确认小部件选项：</h3>
<ul>
<li>title:确认弹出窗口的标题。</li>
<li>content: <span style="font-size: 1rem;">确认弹出窗口的内容。</span></li>
<li>actions: 这是确认小部件回调，它有以下三个回调事件，
<ul>
<li>confirm callback:单击确认按钮时将调用它。</li>
<li>cancel callback: 单击取消按钮时将调用它。</li>
<li>always callback:单击确认按钮和取消按钮时将调用它。</li>
</ul>
</li>
</ul>
<p>Magento2确认小部件还有一些其他选项，</p>
<ul>
<li>autoOpen</li>
<li>clickableOverlay</li>
<li>focus</li>
</ul>
<p>您可以在<a href="https://devdocs.magento.com/guides/v2.2/javascript-dev-guide/widgets/widget_confirm.html" target="_blank" rel="noopener">此处</a>找到有关这些选项的详细说明</p>
<p>希望这可以帮助你。</p>]]></description>
      <pubDate>Wed, 29 May 2019 06:49:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2在列表页工具栏中添加自定义排序选项过滤器]]></title>
      <link>https://www.360magento.com/blog/m2-add-sortby/</link>
      <description><![CDATA[<p>在Magento 2默认功能中，类别页面的工具栏上将显示以下三种排序选项，</p>
<ul><li>Sort by “Position”</li><li>Sort by “Product Name”</li><li>Sort by “Price”</li></ul>
<p>但在某些情况下，您可能希望在类别工具栏中添加更多新选项，例如按创建日期（最新），畅销产品等对产品进行分类。在类别工具栏中添加新的排序选项并不困难，这篇博客可以帮助您以更少的时间自定义代码。</p>
<p>在这篇博客中，将展示如何在类别页面的工具栏中添加新的排序选项“Newest”。为了在Magento 2中添加新的排序选项，我们必须使用以下两个类，<strong>Magento\Catalog\Model\Config</strong>和<strong>Magento\Catalog\Block\Product\ProductList\Toolbar</strong></p>
<p><strong>步骤1：</strong>在以下路径中创建名为<strong>registration.php</strong>的文件，</p>
<p><em>文件路径：app/code/Alwayly/NewSorting/registration.php</em></p>
<pre>
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_NewSorting',
    __DIR__
);
</pre>
<p><strong>步骤2：</strong>在以下路径中创建名为<strong>module.xml</strong>的文件，</p>
<p><em>文件路径：app/code/Alwayly/NewSorting/etc/module.xml</em></p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_MyAttributeSet" setup_version="1.0.0"&gt;
        &lt;sequence&gt;
            &lt;module name="Magento_Catalog"/&gt;
        &lt;/sequence&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>
<p><strong>步骤3：</strong>在以下文件路径中创建名为<strong>di.xml</strong>的文件，在此文件中，我们必须为以下原生类添加插件，<strong>Magento\Catalog\Model\Config</strong>＆<strong>Magento\Catalog\Block\Product\ProductList\Toolbar</strong></p>
<p><em>文件路径：app/code/Alwayly/NewSorting/etc/frontend/di.xml</em></p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"&gt;
 
    &lt;type name="Magento\Catalog\Model\Config"&gt;
        &lt;plugin name="Alwayly_NewSorting::addNewSortOption" type="Alwayly\NewSorting\Plugin\Model\Config" /&gt;
    &lt;/type&gt;
     
    &lt;type name="Magento\Catalog\Block\Product\ProductList\Toolbar"&gt;
        &lt;plugin name="Alwayly_NewSorting::addNewFilterInToolbar" type="Alwayly\NewSorting\Plugin\Product\ProductList\Toolbar" /&gt;
    &lt;/type&gt;
 
&lt;/config&gt;
</pre>
<p><strong>步骤4：</strong>在以下文件路径中创建名为<strong>Config.php</strong>的文件，在此文件中，我们必须通过插件方法自定义原生代码以添加新的排序选项。</p>
<p><em>文件路径：app/code/Alwayly/NewSorting/Plugin/Model/Config.php</em></p>
<pre>
&lt;?php
namespace Alwayly\NewSorting\Plugin\Model;
 
class Config
{
    const NEWEST_SORT_BY = 'newest';
 
    /**
     * Adding new sort option
     *
     * @param \Magento\Catalog\Model\Config $catalogConfig
     * @param [] $result
     * @return []
     */
    public function afterGetAttributeUsedForSortByArray(
        \Magento\Catalog\Model\Config $subject, 
        $result
    ) {
        return array_merge(
            $result, 
            [
                self::NEWEST_SORT_BY => __('Newest')
            ]
        );
    }
}
</pre>
<p><strong>步骤 5:</strong> 最后，在以下文件路径中创建一个名为<strong>Toolbar.php</strong>的文件，在此文件中我们必须通过插件方法自定义原生代码以添加我们的新排序选项。.</p>
<p><em>文件路径: app/code/Alwayly/NewSorting/Plugin/Product/ProductList/Toolbar.php</em></p>
<pre>
&lt;?php
namespace Alwayly\NewSorting\Plugin\Product\ProductList;
 
class Toolbar
{
    const NEWEST_SORT_BY = 'newest';
 
    /**
     * Around Plugin
     *
     * @param \Magento\Catalog\Block\Product\ProductList\Toolbar $subject
     * @param \Closure $proceed
     * @param \Magento\Framework\Data\Collection $collection
     * @return \Magento\Catalog\Block\Product\ProductList\Toolbar
     */
    public function aroundSetCollection(
        \Magento\Catalog\Block\Product\ProductList\Toolbar $subject,
        \Closure $proceed,
        $collection
    ) {
        $currentOrder = $subject->getCurrentOrder();
        $currentDirection = $subject->getCurrentDirection();
        $result = $proceed($collection);
 
        if ($currentOrder == self::NEWEST_SORT_BY) {
            if ($currentDirection == 'desc') {
                $subject->getCollection()->setOrder('created_at', 'desc');
            } 
            else {
                $subject->getCollection()->setOrder('created_at', 'asc');
            }
        }
 
        return $result;
    }
}
</pre>

<p>完成上述步骤后，在Magento 2安装的根目录中运行以下SSH命令,</p>

<blockquote class="wp-block-quote"><p>php bin/magento setup:upgrade</p></blockquote>

<p>然后，清除所有Magento缓存并检查网站的产品列表页面。</p>

<blockquote class="wp-block-quote"><p><strong>Note:</strong>我们已在Magento 2.3上测试了上述代码.</p></blockquote>]]></description>
      <pubDate>Mon, 27 May 2019 06:28:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2使用AJAX更新购物车的产品数量]]></title>
      <link>https://www.360magento.com/blog/m2-update-qty-cart/</link>
      <description><![CDATA[<p>通过在购物车页面中使用AJAX添加数量更新选项，有助于改善Magento 2网站的用户体验。</p>
<p>按照以下简单步骤在Magento 2中创建新扩展，来添加AJAX功能以更新购物车页面中的商品数量。</p>
<h3>步骤1：</h3>
<p>在以下文件路径中创建一个名为<strong>registration.php</strong>的新php文件，</p>
<p><em>文件路径：app/code/Alwayly/AutoUpdateCartItemQty/registration.php</em></p>
<pre>&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Alwayly_AutoUpdateCartItemQty',
    __DIR__
);
</pre>
<h3>第2步：</h3>
<p>在以下文件路径中创建名为<strong>module.xml</strong>的xml文件以定义新模块，</p>
<p><em>文件路径：app/code/Alwayly/AutoUpdateCartItemQty/etc/module.xml</em></p>
<p>在这里，我们必须指定我们的自定义模块的名称，如<strong>Alwayly_AutoUpdateCartItemQty</strong>和它的安装版本如下，</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt;
    &lt;module name="Alwayly_AutoUpdateCartItemQty" setup_version="1.0.0"&gt;
    &lt;/module&gt;
&lt;/config&gt;
</pre>
<h3>第3步：</h3>
<p>在以下文件路径中创建名为<strong>checkout_cart_index.xml</strong>的xml文件，</p>
<p><em>文件路径：app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/layout/checkout_cart_index.xml</em></p>
<p>在此文件中，我们必须指定自定义模块的模板文件，如下所示，</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
     &lt;body&gt;
          &lt;referenceContainer name="content"&gt;
               &lt;block class="Magento\Framework\View\Element\Template" name="auto.update.cart.item.qty" template="Alwayly_AutoUpdateCartItemQty::script.phtml" after="-"/&gt;
          &lt;/referenceContainer&gt;
     &lt;/body&gt;
&lt;/page&gt;
</pre>
<h3>第4步：</h3>
<p>在以下文件路径中创建名为<strong>script.phtml</strong>的phtml文件，</p>
<p><em>文件路径：app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/templates/script.phtml</em></p>
<p>以下是<strong>script.phtml</strong>文件的代码，该文件将用于在结帐页面加载我们的自定义模块js文件，</p>
<pre>&lt;script&gt;
    require ([
        'jquery'
    ],
    function ($) {
        $(window).on("load", function () {
            require([          
               'Alwayly_AutoUpdateCartItemQty/js/cartItemQtyUpdate'
            ]);
        });
    });
&lt;/script&gt;
</pre>
<h3>第5步：</h3>
<p>最后，在以下文件路径中创建名为<strong>cartItemQtyUpdate.js</strong>的JS文件，</p>
<p><em>文件路径：app/code/Alwayly/AutoUpdateCartItemQty/view/frontend/web/js/cartItemQtyUpdate.js</em></p>
<p>在此文件中，我们必须添加以下代码，用于在更改qty字段值时使用ajax更新购物车的商品数量，</p>
<pre>define([
    'jquery',
    'Magento_Checkout/js/action/get-totals',
    'Magento_Customer/js/customer-data'
], function ($, getTotalsAction, customerData) {
 
    $(document).ready(function(){
        $(document).on('change', 'input[name$="[qty]"]', function(){
            var form = $('form#form-validate');
            $.ajax({
                url: form.attr('action'),
                data: form.serialize(),
                showLoader: true,
                success: function (res) {
                    var parsedResponse = $.parseHTML(res);
                    var result = $(parsedResponse).find("#form-validate");
                    var sections = ['cart'];
 
                    $("#form-validate").replaceWith(result);
 
                    /* This is for reloading the minicart */
                    customerData.reload(sections, true);
 
                    /* This is for reloading the totals summary  */
                    var deferred = $.Deferred();
                    getTotalsAction([], deferred);
                },
                error: function (xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    console.log(err.Message);
                }
            });
        });
    });
});
</pre>
<p>完成上述步骤后，在Magento 2安装的根目录下运行以下SSH命令，</p>
<blockquote class="wp-block-quote">
<p>php bin/magento setup:upgrade</p>
</blockquote>
<p>然后，清除所有Magento缓存并检查购物车页面中的数量更新选项。</p>
<blockquote class="wp-block-quote">
<p>Note：我们已经使用Luma主题在Magento 2.3上测试了上述代码。</p>
</blockquote>]]></description>
      <pubDate>Wed, 22 May 2019 21:29:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2在Phtml文件中调用显示静态块]]></title>
      <link>https://www.360magento.com/blog/m2-call-static/</link>
      <description><![CDATA[<p>Magento 2具有CMS静态块的内置功能，允许网站管理员在后台创建/控制静态内容。静态内容可以是促销横幅，退货政策，尺寸图表等。在后台创建CMS静态块后，它将通过使用以下任何一种方法显示在前端，</p>
<ol>
<li>在phtml文件中调用显示CMS静态块。</li>
<li>在CMS内容中调用显示CMS静态块。</li>
<li>在XML文件中调用显示CMS静态块。</li>
</ol>
<h3>在后台创建CMS静态块：</h3>
<p>在前端调用CMS块之前，首先需要创建它。下面是在Magento 2管理面板上创建新的CMS静态块的步骤，</p>
<p><strong>第1步：</strong>登录Magento 2管理面板。</p>
<p><strong>第2步：</strong>从左侧导航部分转到<strong>Content &gt; Blocks</strong>。您将看到Magento CMS静态块列表。</p>
<p><a href="#" rel="noopener noreferrer" target="_blank"><img alt="Magento2如何调用静态文件" src="https://www.360magento.com/media/wysiwyg/blog_226/Magento-2-How-to-Call-CMS-Static-Block-in-Phtml-File-1.png" /></a></p>
<p><strong>第3步：</strong>单击 <strong>&ldquo;Add New Block&rdquo;</strong>按钮。这将打开<strong>New Block</strong> &nbsp;页面。</p>
<p><a href="#" rel="noopener noreferrer" target="_blank"><img alt="Magento2如何调用静态文件" src="https://www.360magento.com/media/wysiwyg/blog_226/Magento-2-How-to-Call-CMS-Static-Block-in-Phtml-File-2-768x392.png" /></a></p>
<p><strong>步骤4：</strong>在<strong>New Block</strong> &nbsp;页面中，输入以下详细信息，然后单击<strong>Save Block</strong> &nbsp;按钮以创建CMS静态块。</p>
<ul>
<li>Enable Block：启用/禁用块。</li>
<li>Block Title：块的名称。（例如：Home Page Block）。</li>
<li>Identifier：块标识符。它必须是独一无二的。（例如:home-page-block）。</li>
<li>Store View：从多选框中选择商店视图。</li>
<li>Content：块的内容。</li>
</ul>
<p>完成上述步骤后，我们可以使用以下方法在前端调用显示CMS静态块，</p>
<h3>在Phtml文件中调用显示CMS静态块：</h3>
<p>这里是在Magento 2中的任意模板（phtml）文件中显示CMS静态块的代码，</p>
<pre>&lt;?php 
    echo $block-&gt;getLayout()
               -&gt;createBlock('Magento\Cms\Block\Block')
               -&gt;setBlockId('block_identifier')
               -&gt;toHtml();
?&gt;
</pre>
<h3>在CMS内容中显示CMS静态块：</h3>
<p>这里是在Magento 2中的任何其他CMS静态块/页面中显示CMS静态块的代码，</p>
<pre>
</pre>
<h3>在XML布局文件中调用显示CMS静态块：</h3>
<p>这里是在Magento 2中的任何布局（XML）文件中显示CMS静态块的代码，</p>
<pre> 
     
         
            block_identifier 
         
     

</pre>]]></description>
      <pubDate>Mon, 20 May 2019 04:01:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何将Magento 1.9.x迁移到2.3.x]]></title>
      <link>https://www.360magento.com/blog/migrate-magento-1-9-x-to-2-3-x/</link>
      <description><![CDATA[<p>您是否知道在过去三年中，超过70％的Magento 1网站已迁移到Magento 2？如果您仍在使用Magento 1，即使您已更新到最新的Magento 1.9.4.1版本，您的网站与当前Magento网站之间在设计与功能也会存在<em>较大差异</em>。因此，我们需尽快将Magento 1.9.x迁移到2.3.x，以至不落后于竞争对手。</p>
<h2>5个让你不再纠结迁移到Magento 2.3.x的理由.</h2>
<p><strong>1. Magento 1.9.x设计和功能都很差</strong></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_225/migrate-magento-1-to-2.3-1024x764.jpg" alt="将magento1.x迁移到magento2" /></p>
<p>Magento 1自发布以来已经很长时间了。因此，不仅是Magento 1.9.x的默认主题，还是这个旧版本市场的主题设计都已经过时了。</p>
<p>如果你坚持使用Magento 1的老式网站设计，那么你很可能会失去很多潜在客户。</p>
<p><strong>2. Magento 2.3.x提供了一种现代且响应迅速的设计</strong></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_225/magento-2-migration-1024x630.png" alt="magento 2迁移" /><br>
与Magento 1.9.x相比，Magento 2.3网站设计更时尚，更引人注目，更重要的是，对用户和移动设备都更加友好。</p>
<p>您可以轻松找到各种美观的Magento 2.3主题， &nbsp;适用于综合型，服装和配饰，电子产品和数字，家具，珠宝店。</p>
<p><strong>3. Magento 2.3.x带来了强大的电子商务功能和性能</strong></p>
<p>Magento在发布Magento 2.3时取得了突破性进展。与Magento 1.9.x相比，Magento 2.3运行速度更快（与PHP 7和HTML 5兼容）并且处理更顺畅。</p>
<p><em> 为什么Magento 2.3.x而不是Magento 2.2.x？</em></p>
<p>虽然Magento 2版本总体来说还是很不错的，但Magento 2.3.x比Magento 2.2.x更受推荐，尤其是2019年3月26日发布的Magento 2.3.1。在最新版本中，有许多令人印象深刻的功能，如 PWA studio，多源库存，页面构建器等。</p>
<p>阅读<a href="https://devdocs.magento.com/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.html" rel="nofollow" target="_blank">这篇文章</a>，了解最新Magento 2.3.1的所有高级功能。</p>
<p><strong>4. Magento 2.3.x的管理面板更直观，用户友好</strong></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_225/magento-1-to-2-migration-1024x554.png" alt="magento1升级到magento2" /></p>
<p>Magento商家将Magento 1.9.x迁移到2.3.x的主要动机之一是Magento 2完美的后端界面。即使您没有很强的技术知识，它也非常易于管理使用。相反，Magento 1的管理面板对于非技术用户来说似乎非常混乱。</p>
<p><strong>5. Magento将停止为Magento 1提供支持</strong></p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_225/upgrade-to-magento-2.3.png" alt="升级到magento 2.3" /></p>
<p>您可能知道，Magento正式宣布从2020年6月开始停止对Magento 1的支持。您对这个过时的平台有什么期望，而且没有其创始人的支持？</p>
<p>对于上述所有事实，没有理由继续使用过时的Magento 1.xx版本，除非......你负担不起<a href="#">Magento 2迁移</a>的<a href="#">费用</a>。<br>
&nbsp;</p>
<h2>将Magento 1.9.x迁移到2.3.x常见挑战的5个步骤</h2>
<p><strong>1.迁移您的数据</strong></p>
<p>您必须将数据库资源（例如：产品，类别，客户信息，订单等）从现有的Magento 1.9.x网站迁移到新网站。</p>
<p>如果您的Magento开发人员在Magento 2迁移方面没有过硬的专业知识，您可能会面临严重数据丢失的风险。让我们想象一下，如果您的买家无法登录他们的注册账户，将会如何！</p>
<p><strong>2.迁移您的主题</strong></p>
<p>由于Magento 1的所有主题都与Magento 2不兼容，因此将现有模板“移动”到新网站是不可能的。</p>
<p>有一些解决方案可以解决Magento主题迁移问题，我们将在下面的部分中提出建议。</p>
<p><strong>3.迁移您的扩展程序</strong></p>
<p>与主题一样，不幸的是，您无法在新商店中重复使用当前的Magento 1扩展程序。此外，即使您进行自定义，这些也无法在Magento 2网站中正常运行。</p>
<p><strong>4.迁移自定义功能</strong></p>
<p>有许多Magento商店开发了一些自定义功能（没有任何扩展获得）。如何将这些功能迁移到新网站对于网站所有者来说也是一个令人头痛的问题。</p>
<p><strong>5.迁移配置</strong></p>
<p>此步骤与在Magento 2网站上重新配置您的语言，货币，运送，电子邮件模板，税金，CMS页面等有关。<br>
&nbsp;</p>
<h2>解决Magento 2迁移问题的5个技巧</h2>
<p><strong>1.仅迁移关键数据库资源</strong></p>
<p>通过仅选择要迁移的重要数据库资源，可以最大程度地降低在Magento 2迁移过程中丢失这些资源的风险。顺便说一句，它为您提供了一个“净化”您网站并提升其性能的绝佳机会。</p>
<p><strong>2.考虑以下3个与网站设计相关的选项</strong></p>
<p>正如我们所提到的，一旦您决定将Magento 1.9.x迁移到2.3.x，就无法继续使用您的Magento 1主题。然而，你可以：</p>
<ul>
<li>克隆您当前的设计，为Magento 2制作类似的设计</li>
<li>为您的新店寻找新的现成主题（如果需要，还可以定制）</li>
<li>从头开始为Magento 2开发一个独特的前端</li>
</ul>
<p>根据时间和预算，您可以选择合适的选项。</p>
<p><strong>3.寻找Magento 2的类似扩展（应该来自相同的供应商）</strong></p>
<p>要将Magento 1.9.x迁移到2.3.x，您需要将所有当前模块替换为Magento 2的新模块。</p>
<p>有一些扩展需要将他们的数据迁移到Magento 2，如奖励积分，博客。这就是为什么我们建议您从同一模块供应商找到替换项，这使扩展数据迁移更加容易。</p>
<p><strong>4.为Magento 2开发类似的自定义功能或使用可用的M2扩展</strong></p>
<p>要在新站点上保留相同的自定义功能，Magento开发人员必须在Magento 2.3环境中重新开发它。</p>
<p>另一种解决方案是搜索可以为您提供类似功能的Magento 2扩展。很多时候，商家无法在执行Magento迁移之后可能为Magento 2找到合适的模块（他们需要的功能）。</p>
<p><strong>5.联系可靠的Magento开发公司来帮助您解决所有问题</strong></p>
<p>如果您发现Magento 2迁移过程有相当大的风险和问题，为什么不找到Magento服务商的帮助？</p>
<p>凭借在Magento的丰富经验，360Magento 以实惠的价格为您提供最佳的<strong><a href="https://www.360magento.com/magento-migration">Magento 2迁移服务</a></strong>。</p>
<p><img src="https://www.360magento.com/media/wysiwyg/blog_225/magento-2-migration-service-1024x454.jpg" alt="magento 2迁移服务" /></p>
<p>我们的Magento迁移服务包括将您的主题，数据，扩展，自定义功能，配置......从Magento 1.9.x平移到2.3.x。没有数据丢失。</p>
<p>特别是，在完成Magento迁移过程后，我们提供3-6个月（基于您的项目规模）的免费技术支持。<br>
&nbsp;</p>
<h2>想要迁移到Magento 2.3.x，但不知道从哪里开始？</h2>
<p>按照以下步骤将Magento 1.9.x成功迁移到2.3.x：</p>
<p>1.将您的迁移请求发送至sales@360magento.com</p>
<p>2.与我们的团队讨论您的项目要求，并从Magento认证工程师那里获得最佳建议</p>
<p>3.等待我们对您项目的全面建议&评估（包括周期和费用）</p>
<p>4.签署我们的网站开发协议</p>
<p>5.开始迁移工作，将您的网站提升到新的水平！</p>]]></description>
      <pubDate>Thu, 16 May 2019 13:35:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento1&2中配置Redis]]></title>
      <link>https://www.360magento.com/blog/configure-redis-magento-2-1/</link>
      <description><![CDATA[<p>首先，Magento 1和2中的Redis缓存配置有几个先决条件：</p>
<ul>
<li>Redis服务</li>
<li>PHP Redis扩展</li>
</ul>
<p><em>注意</em>：建议使用最新版本。</p>
<h2 style="margin: 0in; margin-bottom: .0001pt;">
<b>步骤1：更新并安装Redis-server</b></h2>
<pre style="color: #000020; background: #f6f8ff;">
wget http://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
make test
sudo make install
cd utils
sudo ./install_server.sh
sudo service redis_6379 start
sudo update-rc.d redis_6379 defaults
</pre>
<h2>第2步：在Magento中配置Redis</h2>
<h3>A.配置Magento 2以将Redis用作缓存存储</h3>
<p>将以下代码添加到您的应用程序app/etc/env.php：</p>
<pre style="color: #000020; background: #f6f8ff;">
&lt;?php
// app/etc/env.php
return [
    // Other directives
    'cache' => [
        'frontend' => [
            'default' => [
                'backend' => 'Cm_Cache_Backend_Redis',
                'backend_options' => [
                    'server' => '127.0.0.1',
                    'database' => '0',
                    'port' => '6379',
                    'password' => ''
                ]
            ],
            'page_cache' => [
                'backend' => 'Cm_Cache_Backend_Redis',
                'backend_options' => [
                    'server' => '127.0.0.1',
                    'database' => '1',
                    'port' => '6379',
                    'compress_data' => '0',
                    'password' => ''
                ]
            ]
        ]
    ]
];
</pre>
<h3>B.配置Magento 2以将Redis用作会话存储</h3>
<p>首先，您需要找到以下代码段：</p>
<pre style="color: #000020; background: #f6f8ff;">
'session' => [
    'save' => 'files'
],
And replace it with snippet as follows:
'session' => [
    'save' => 'redis',
    'redis' => [
        'host' => '127.0.0.1',
        'port' => '6379',
        'password' => '',
        'timeout' => '2.5',
        'persistent_identifier' => '',
        'database' => '2',
        'compression_threshold' => '2048',
        'compression_library' => 'gzip',
        'log_level' => '3',
        'max_concurrency' => '6',
        'break_after_frontend' => '5',
        'break_after_adminhtml' => '30',
        'first_lifetime' => '600',
        'bot_first_lifetime' => '60',
        'bot_lifetime' => '7200',
        'disable_locking' => '0',
        'min_lifetime' => '60',
        'max_lifetime' => '2592000'
    ] ],
</pre>
<p>其次，通过运行以下命令清除所有缓存会话：</p>
<pre style="color: #000020; background: #f6f8ff;">
bin/magento c:f
</pre>
<h3>C.配置Magento 1使用Redis</h3>
<p>首先，转到您的app/etc/local.xml，然后改变：</p>
<pre style="color: #000020; background: #f6f8ff;">
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;global&gt;
        &lt;install&gt;
            &lt;date&gt;&lt;![CDATA[Tue, 04 Oct 2016 09:53:37 +0000]]&gt;&lt;/date&gt;
        &lt;/install&gt;
        &lt;crypt&gt;
            &lt;key&gt;&lt;![CDATA[e972f3c4e8436052de805bdf1f40de0f]]&gt;&lt;/key&gt;
        &lt;/crypt&gt;
        &lt;disable_local_modules&gt;false&lt;/disable_local_modules&gt;
        &lt;resources&gt;
            &lt;db&gt;
                &lt;table_prefix&gt;&lt;![CDATA[]]&gt;&lt;/table_prefix&gt;
            &lt;/db&gt;
            &lt;default_setup&gt;
                &lt;connection&gt;
                    &lt;host&gt;&lt;![CDATA[localhost]]&gt;&lt;/host&gt;
                    &lt;username&gt;&lt;![CDATA[magento]]&gt;&lt;/username&gt;
                    &lt;password&gt;&lt;![CDATA[magento]]&gt;&lt;/password&gt;
                    &lt;dbname&gt;&lt;![CDATA[magento]]&gt;&lt;/dbname&gt;
                    &lt;initStatements&gt;&lt;![CDATA[SET NAMES utf8]]&gt;&lt;/initStatements&gt;
                    &lt;model&gt;&lt;![CDATA[mysql4]]&gt;&lt;/model&gt;
                    &lt;type&gt;&lt;![CDATA[pdo_mysql]]&gt;&lt;/type&gt;
                    &lt;pdoType&gt;&lt;![CDATA[]]&gt;&lt;/pdoType&gt;
                    &lt;active&gt;1&lt;/active&gt;
                &lt;/connection&gt;
            &lt;/default_setup&gt;
        &lt;/resources&gt;
        &lt;session_save&gt;&lt;![CDATA[files]]&gt;&lt;/session_save&gt;
    &lt;/global&gt;
    &lt;admin&gt;
        &lt;routers&gt;
            &lt;adminhtml&gt;
                &lt;args&gt;
                    &lt;frontName&gt;&lt;![CDATA[admin]]&gt;&lt;/frontName&gt;
                &lt;/args&gt;
            &lt;/adminhtml&gt;
        &lt;/routers&gt;
    &lt;/admin&gt;
&lt;/config&gt;
</pre>
<p>为：</p>
<pre style="color: #000020; background: #f6f8ff;">

&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;global&gt;
        // Other directives
        &lt;!-- This is a child node of config/global --&gt;
        &lt;cache&gt;
            &lt;backend&gt;Cm_Cache_Backend_Redis&lt;/backend&gt;
            &lt;backend_options&gt;
                &lt;server&gt;127.0.0.1&lt;/server&gt; &lt;!-- or absolute path to unix socket --&gt;
                &lt;port&gt;6379&lt;/port&gt;                
                &lt;database&gt;0&lt;/database&gt; &lt;!-- Redis database number; protection against accidental data loss is improved by not sharing databases --&gt;
                &lt;password&gt;&lt;/password&gt; &lt;!-- Specify if your server requires authentication --&gt;
            &lt;/backend_options&gt;
        &lt;/cache&gt;
        &lt;!--session_save&gt;&lt;![CDATA[files]]&gt;&lt;/session_save--&gt;
        &lt;session_save&gt;db&lt;/session_save&gt;
        &lt;redis_session&gt;                       &lt;!-- All options seen here are the defaults --&gt;
            &lt;host&gt;127.0.0.1&lt;/host&gt;            &lt;!-- Specify an absolute path if using a unix socket --&gt;
            &lt;port&gt;6379&lt;/port&gt;
            &lt;password&gt;&lt;/password&gt;             &lt;!-- Specify if your server requires authentication --&gt;
            &lt;timeout&gt;2.5&lt;/timeout&gt;            &lt;!-- This is the connection timeout, not the locking timeout --&gt;
            &lt;db&gt;0&lt;/db&gt;                        &lt;!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions --&gt;
            &lt;compression_threshold&gt;2048 &lt;/compression_threshold&gt;  &lt;!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 --&gt;
            &lt;compression_lib&gt;gzip&lt;/compression_lib&gt;              &lt;!-- gzip, lzf, lz4 or snappy --&gt;
            &lt;log_level&gt;1&lt;/log_level&gt;               &lt;!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) --&gt;
            &lt;max_concurrency&gt;6&lt;/max_concurrency&gt;                 &lt;!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes --&gt;
            &lt;break_after_frontend&gt;5&lt;/break_after_frontend&gt;       &lt;!-- seconds to wait for a session lock in the frontend; not as critical as admin --&gt;
            &lt;fail_after&gt;10&lt;/fail_after&gt;                       &lt;!-- seconds after which we bail from attempting to obtain lock (in addition to break after time) --&gt;
            &lt;break_after_adminhtml&gt;30&lt;/break_after_adminhtml&gt;
            &lt;first_lifetime&gt;600&lt;/first_lifetime&gt;                 &lt;!-- Lifetime of session for non-bots on the first write. 0 to disable --&gt;
            &lt;bot_first_lifetime&gt;60&lt;/bot_first_lifetime&gt;          &lt;!-- Lifetime of session for bots on the first write. 0 to disable --&gt;
            &lt;bot_lifetime&gt;7200&lt;/bot_lifetime&gt;                    &lt;!-- Lifetime of session for bots on subsequent writes. 0 to disable --&gt;
            &lt;disable_locking&gt;0&lt;/disable_locking&gt;                 &lt;!-- Disable session locking entirely. --&gt;
            &lt;min_lifetime&gt;60&lt;/min_lifetime&gt;                      &lt;!-- Set the minimum session lifetime --&gt;
            &lt;max_lifetime&gt;2592000&lt;/max_lifetime&gt;                 &lt;!-- Set the maximum session lifetime --&gt;
        &lt;/redis_session&gt;
    &lt;/global&gt;
    &lt;admin&gt;
        &lt;routers&gt;
            &lt;adminhtml&gt;
                &lt;args&gt;
                    &lt;frontName&gt;&lt;![CDATA[admin]]&gt;&lt;/frontName&gt;
                &lt;/args&gt;
            &lt;/adminhtml&gt;
        &lt;/routers&gt;
    &lt;/admin&gt;
&lt;/config&gt;
</pre>
<p>其次，通过运行以下命令清除会话的所有缓存：</p>
<pre style="color: #000020; background: #f6f8ff;">
rm -rf /var/www/html/magento/var/session/*
rm -rf /var/www/html/magento/var/cache/*
</pre>
<p>&nbsp;</p>
<h2>第3步：重新启动并检查结果</h2>
<p>接下来，您应该重新启动：</p>
<pre style="color: #000020; background: #f6f8ff;">
service redis-server restart
</pre>
<p>要检查Redis服务器是否正常工作，请输入：</p>
<pre style="color: #000020; background: #f6f8ff;">
redis-cli ping
</pre>
<p>如果结果是：</p>
<pre style="color: #000020; background: #f6f8ff;">
PONG
</pre>
<p>然后你的服务器正在响应。<br>
此外，您可以通过以下方式监控所有流量：</p>
<pre style="color: #000020; background: #f6f8ff;">
redis-cli monitor
</pre>
<p>然后刷新页面。如果您可以在终端上看到生成的日志，有随机的字母数字字符，这意味着缓存正在运行。<br>
您还可以检查 Redis-server是否能够设置密钥：</p>
<pre style="color: #000020; background: #f6f8ff;">
redis-cli
127.0.0.1:6379> set mykey KEY
OK
127.0.0.1:6379> get mykey
"KEY"
127.0.0.1:6379> exit
</pre>
<p>此外，您可以使用“info”命令获取服务器信息和统计信息：</p>
<pre style="color: #000020; background: #f6f8ff;">
redis-cli info
</pre>
<p>我们已经向您展示了在Magento 1和2中配置Redis的一些简单步骤。如果您有任何需要请联系我们。]]></description>
      <pubDate>Mon, 06 May 2019 14:10:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何设置Magento 2 Cron Job]]></title>
      <link>https://www.360magento.com/blog/setup-cron-job-magento-2/</link>
      <description><![CDATA[<p>Magento 2加载了很多很棒的功能，而Cron Job是其中最有用的功能之一。Cron是一个基于时间的调度程序，在Magento 2中使用预定的时间和日期自动运行命令很有用。</p><div class="magtoc"><h2 class="magtocp">如何配置Magento 2 Cron Job</h2><ol><li><a href="#crontab">创建crontab.xml</a></li><li><a href="#Run">创建Run.php</a></li><li><a href="#Magento-2-Cron">运行Magento 2 Cron Job</a></li></ol></div><h2>为什么要配置Magento 2 Cron Job？</h2><p>Cron是Magento 2中最重要的部分之一。您可以通过cron安排多项活动，如下所示：</p><ul><li>生成Google站点地图</li><li>新闻邮件</li><li>重建索引</li><li>目录价格规则</li><li>客户提醒和通知。</li><li>私人销售（仅限Magento企业版）</li><li>所有Magento电子邮件包括订单确认和交易。</li><li>自动更新货币汇率</li></ul><p>有关更多详细信息，您可以查看有关Cron Job 的<a href="http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html" target="_blank" rel="noopener noreferrer">官方文档</a>。</p><h2>如何配置Magento 2 Cron Job？</h2><p>今天，我将指导您如何用<a href="#" target="_blank" rel="noopener noreferrer">自定义模块在Magento中设置Cron Job </a>。我希望你已经在Magento 2中创建了一个自定义模块。所以，让我们开始吧！</p><h2 id="crontab">创建crontab.xml</h2><p>在<strong>app/code/Alwayly/Mymodule/etc中</strong>创建<strong>crontab.xml</strong>文件，并在其中粘贴以下代码：</p>
<pre>
&lt;?xml version="1.0"?&gt;
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"&gt;
&lt;group id="default"&gt;
&lt;job name="cron_name" instance="Magenticians\Mymodule\Cron\Run" method="execute"&gt;
&lt;schedule&gt;*/1 * * * *&lt;/schedule&gt;
&lt;/job&gt;
&lt;/group&gt;
&lt;/config&gt;
</pre>
<p>在上面的代码中，我设置了一分钟的计划。我已将组ID设为default和 job name设置为cron_name，您可以根据需要更改它们。</p><h2 id="Run">创建Run.php</h2><p>首先，在自定义模块中创建目录Cron，因此，目录现在将如下所示：<strong>app/code/Alwayly/Mymodule/Cron</strong>。现在在<strong>app/code/Alwayly/Mymodule/Cron</strong>中创建<strong>Run.php</strong>文件并将以下代码粘贴到其中：</p>
<pre>
&lt;?php
namespace Magenticians\Mymodule\Cron;

class Run 
{
   protected $_logger;
   public function __construct(
       \Psr\Log\LoggerInterface $logger
   ) 
    {
     $this->_logger = $logger;
    }

   public function execute()
   {
       //Edit it according to your requirement
       $this->_logger->debug('Cron run successfully');
       return $this;
   }
}
</pre>
<h2 id="Magento-2-Cron">运行Magento 2 Cron Job</h2><p>使用SSH连接您的服务器并转到Magento 2的根目录。现在运行以下命令：</p>
<pre>
php bin/magento cache:flush
php bin/magento cron:run
</pre>
<p>您还可以通过此命令仅为一个组运行Cron Job：</p>
<pre>
php bin/magento cron:run --group="your_group_name"
</pre>
<p>要检查Cron是否正常工作，请转到网站的<strong>var/log/debug.log</strong>，您将看到文本<strong>Cron run successfully</strong>。转到数据库的<strong>cron_schedule</strong>表，您将看到其中包含您的Cron Job名称的新条目。</p>
<p>Cron Job对于Magento 2商店非常重要，通过它可以安排和自动化其活动来节省您的时间。遵循本指南后，我希望您现在能够在Magento 2中轻松设置Cron Job。如果您仍有任何问题或想要讨论与Magento 2 Cron Job相关的内容，可以联系我们！</p>]]></description>
      <pubDate>Mon, 29 Apr 2019 10:08:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2.3 PWA Studio设置教程]]></title>
      <link>https://www.360magento.com/blog/magento2-3-pwa-setup/</link>
      <description><![CDATA[<h2>Magento PWA Studio介绍</h2>
<p>最近公司应用magento2.3.1开发了一个项目，Magento在Magento 2.3版本中引入了PWA（Progressive Web App）Studio项目，当然要折腾下啦。<br>
Magento PWA Studio是一套工具，旨在使开发人员能够将在线商店开发为渐进式Web应用程序。</p>
<h3>什么是Progressive Web Apps？</h3>
<p>PWA的普及在电子商务，在线新闻门户和其他领域的发展非常迅速，因为它具有<br>
如下特点：<br>
<strong>1。更快的用户界面支持</strong><br> 
即使在速度较慢的网络上，Web开发人员现在也可以在一次页面浏览后将整个网站加载到浏览器中。<br>
<strong>2.主屏幕快捷方式</strong><br> 
移动用户可以像手机APP应用程序一样将PWA站点安装到主屏幕。<br>
<strong>3.离线支持</strong><br> 
service worker使其能够脱机工作。即使用户丢失了互联网连接，现在也可以访问网站。PWA站点缓存内容以确保在用户脱机时可以提供某些内容。<br>
<strong>4.背景过程</strong><br>
如果用户面临连接不良或脱机的情况，浏览器会存储所有表单提交数据和请求，当连接正常时，会在后台重新发送所有数据。<br>
<strong>5.安全</strong><br> 
PWA站点使用HTTPS连接来增强安全性。</p>
<p>让我们回到Magento 2设置PWA话题中 ....</p>
<p>PWA Studio项目使用了现代工具和库：<br>
<strong>Webpack</strong><br> 
Webpack的主要功能是从项目模块中的依赖项创建一个或多个bundle。<br>
<strong>ReactJs</strong><br> 
用于构建用户界面的JavaScript库。<br>
<strong>Redux</strong><br> 
用于管理Web应用程序中的状态的JavaScript库。<br>
<strong>GraphQL</strong><br> 
客户端的数据查询语言和服务器端的服务层。</p>
<p><strong>让我们从Magento 2.3安装开始......</strong></p>
<p><strong>注意：</strong>您必须具有<a href="https://nodejs.org/en/">NodeJS的版本&nbsp;&gt; = 10.14.1</a>，并且&nbsp; <a href="https://yarnpkg.com/">Yarn&gt; = 1.13.0</a>。建议使用最新的LTS版本。</p>
<p>1.输入以下命令：</p>
<pre>omposer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/360mage</pre>
<p><strong>/var/www/html/360mage</strong>是Magento安装目录。</p>
<p>2.通过命令行安装Magento：</p>
<pre>
php bin/magento setup:install --base-url=http://localhost/360mage --db-host=localhost --db-name=360magento --db-user=root --db-password=360magento_pwa --admin-firstname=John --admin-lastname=Doe --admin-email=test@360magento.com --admin-user=admin --admin-password=admin123 --backend-frontname=admin_magento --language=en_US --currency=USD --timezone=Asia/Tbilisi --cleanup-database --use-rewrites=1
</pre>
<p>现在Magento的安装已完成</p>
<p>3.现在克隆pwa-studio存储库</p>
<pre>https://github.com/magento-research/pwa-studio.git</pre>
<pre>git clone https://github.com/magento-research/pwa-studio.git</pre>
<p>我已经在magento根目录<strong>例如： /var/www/html/360mage中</strong>克隆了这个存储库<strong></strong></p>
<p>4.您将在<strong>/var/www/html/360mage中</strong>看到<strong>pwa-studio</strong>目录。
进入这个目录：<strong></strong><br></p>
<pre>cd pwa-studio /</pre>
<p>5.运行</p>
<pre>yarn install</pre>
<p>6.在.env文件中指定Magento后端服务器。你可以在<strong>/var/www/html/360mage/pwa-studio/packages/venia-concept/</strong> 目录中看到<em>.env.dist</em>文件。如果您
看不到，请开启显示隐藏文件。现在复制<em>env.dist</em>创建<em>.env</em>文件<br></p>
<pre>cp packages/venia-concept/.env.dist packages/venia-concept/.env</pre>
<p>7.打开此.env文件并找到<em>MAGENTO_BACKEND_URL</em>。这里配置你的<br>
本地Magento 2.3实例，我的例子是：</p>
<pre>MAGENTO_BACKEND_URL="https://magento2-pwa.com/"</pre>
<p>8.现在让我们为venia-theme <strong>安装样本数据</strong>，以使其看起来更好看。</p>
<p>9. 在<strong>/var/www/html/360mage/pwa-studio/packages/venia-concept/</strong>目录中找到<em>deployVeniaSampleData.sh</em>文件。并将此
文件复制到Magento根目录中。现在它必须看起来如<strong>/var/www/html/360mage/deployVeniaSampleData.sh</strong>现在运行：<br><strong></strong><br><br><strong></strong></p>
<pre>bash deployVeniaSampleData.sh</pre>
<p>10.安装成功后运行：</p>
<pre>bin/magento setup:upgrade</pre>
<pre>bin/magento indexer:reindex</pre>
<pre>bin/magento cache:flush</pre>
<p>打开magento网站，您将能够看到已安装的示例数据，如：<br><img src="https://www.360magento.com/media/wysiwyg/blog_222/Screenshot_pwa.png" alt="magento2 pwa 截图"/></p>
<p>11.现在返回pwa-studio目录<strong>/var/www/html/360mage/pwa-studio</strong>并启动Server。</p>
<pre>yarn run build</pre>
<p>上面的命令可能会出现权限错误，为此使用sudo运行上面的命令。</p>
<pre>sudo yarn run build</pre>
<p>12.运行服务器，从项目根目录中使用以下任意命令启动服务：</p>
<pre>
yarn run watch:venia
yarn run watch:all
yarn run build && npm run stage:venia
<font>
</pre>
<p>上面的命令可能会给出权限错误，为此运行上面的命令要带上sudo。</p>
<p>您可以从<a href="https://magento-research.github.io/pwa-studio/venia-pwa-concept/setup/#run-the-server" target="_blank" rel="nofollow">Venia店面设置中</a>找到有关上述命令的更多信息</p>
<p>12.现在浏览应用程序，您将在终端上看到应用程序的URL，如：</p>
<pre>PWADevServer ready at https://magento-venia.local.pwadev:8001</pre>
<pre>或者</pre>
<pre>
Launching staging server...

https://magento-venia.local.pwadev:51828/

Staging server running at the address above.
</pre>
<p><strong>注意：</strong>您可能会遇到PWA上未加载产品图像的问题。<br>
要解决此问题，请创建一个虚拟主机，因为我创建了<strong>https://magento2-pwa.com</strong>，它必须指向Magento实例的pub目录，而不是指向magento的根目录。</p>
<p>恭喜！您已为Venia主题项目设置了开发环境。</p>]]></description>
      <pubDate>Sat, 20 Apr 2019 09:08:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[20个澳大利亚的Magento知名在线网站]]></title>
      <link>https://www.360magento.com/blog/magento-aus/</link>
      <description><![CDATA[<p>近几年，澳大利亚电子商务市场增速变得迅猛，然而电子商务平台的选择是在线平台的成功关键。 Magento具有许多优势，如开源，搜索引擎优化和移动友好，各种营销工具，高安全性和多个商店; Magento是满足所有在线购物偏好的理想平台。以下是澳大利亚Magento电子商务网站的20个在线示例将告诉你为什么选择Magento是值得的。</p>
<h2>Valley Girl</h2>
<p><img alt="Magento网站AU" class="aligncenter wp-image-11453" height="465" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-site-AU.png" width="950" /></p>
<p style="text-align: center;"><em><strong>valleygirl.com.au</strong></em></p>
<p>Valley Girl于1996年在新南威尔士州Penrith推出，被公认为15至25岁女性的领先快速时尚零售商之一。他们的Magento网站完全响应式，易于使用和导航，同时完美展示产品图片。</p>
<h2>2.Sportsgirl</h2>
<p style="text-align: center;"><img alt="Magento web AU" class="aligncenter wp-image-11454" height="506" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-web-AU.png" width="950" /><em><strong>sportsgirl.com.au</strong></em></p>
<p style="text-align: left;">Sportsgirl是一个澳大利亚标志性品牌，专注于时尚，美容和配饰。在他们的Magento电子商务网站中，客户可以享受快速结账，在他们的类别页面中有一个很棒的导航菜单，可轻松找到他们想要的东西。</p>
<h2 style="text-align: left;">3.Ice Design</h2>
<p style="text-align: center;"><img alt="Magento网站AU" class="aligncenter wp-image-11455" height="499" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-sites-AU.png" width="950" /><em><strong>icedesign.com.au</strong></em></p>
<p style="text-align: left;">ICE Design是澳大利亚年轻女性时尚的主导力量。通过Magento电子商务开发，他们的在线商店通过现代和简洁的设计为客户带来触觉般购物体验。</p>
<h2 style="text-align: left;">4.Australis</h2>
<p style="text-align: center;"><em><strong><img alt="Au的Magento网站" class="aligncenter size-full wp-image-11457" height="762" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-sites-in-Au.png" width="1565" />australiscosmetics.com.au</strong></em></p>
<p>Australis 化妆品是澳大利亚发展最快的十大化妆品品牌。他们提供各种各样的纯素化妆产品。它的Magento网站有一个快速加载页面体验好和具有现代方便的界面。</p>
<h2>5.Forcast</h2>
<p><img alt="Magento在澳大利亚的网站" class="aligncenter wp-image-11459" height="470" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-sites-in-Australia.png" width="950" /></p>
<p style="text-align: center;"><em><strong>forcast.com.au</strong></em></p>
<p>自1992年成立以来，Forcast已经建立了一个强大的全国性零售店，在全国拥有超过50家精品店，以及强大的在线粉丝。访问他们的网站时，您可以体验许多有趣的电子商务功能，支持多种货币，多语言和多商店。</p>
<h2>6.Forever New</h2>
<p><img alt="Magento网站在澳大利亚" class="aligncenter wp-image-11460" height="570" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-site-in-australia.png" width="950" /></p>
<p style="text-align: center;"><strong><em>forevernew.com.au</em></strong></p>
<p style="text-align: left;">Forever New成立于澳大利亚墨尔本，以其轻松穿戴和永恒的系列而闻名，这些系列产品展现了现代女性气质。他们的Magento网站提供了流畅的用户体验和简单的导航，使您可以轻松浏览产品。</p>
<h2 style="text-align: left;"><strong>7. Roxy</strong></h2>
<p style="text-align: center;"><em><strong><img alt="Magento网站在Au" class="aligncenter wp-image-11461" height="454" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-website-in-Au.png" width="950" />roxyaustralia.com.au</strong></em></p>
<p style="text-align: left;">Roxy是一个生活方面品牌，为潮流女孩生活的方方面面提供产品，从手提包到亨利，从潜水衣到潮牌手表。它的在线商店由Magento设计开发，因此它具有出色的设计，智能分类和信息丰富的产品页面。</p>
<h3 style="text-align: left;">8.Bonds</h3>
<p style="text-align: center;"><em><strong><img alt="Magento网站在澳大利亚" class="aligncenter wp-image-11463" height="543" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-web-in-Australia.png" width="950" />bonds.com.au</strong></em></p>
<p style="text-align: left;">来自一家小众女性用品制造商，Bonds已成为澳大利亚最具代表性的品牌之一。他们拥有直观简洁的Magento网站以及智能且用户友好的设计。</p>
<h2 style="text-align: left;">9.Pretty Little Thing</h2>
<p style="text-align: center;"><em><strong><img alt="Magento网AU" class="aligncenter wp-image-11467" height="456" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-webs-AU.png" width="950" />prettylittlething.com.au</strong></em></p>
<p style="text-align: left;">Pretty Little Thing是一个年轻的时尚品牌，旨在为女性时尚带来不一样的杀手锏，实惠的风格。它是在Magento电子商务平台上开发的，具有年轻，自由和现代的外观。</p>
<h2>10. Suzannegrae</h2>
<p style="text-align: center;"><em><strong><img alt="非盟现场网站Magento" class="aligncenter wp-image-11468" height="681" src="https://www.tigren.com/wp-content/uploads/2019/03/Live-website-Magento-in-AU.png" width="950" />suzannegrae.com</strong></em></p>
<p style="text-align: left;">Suzannegrae不仅销售服装，还为女性创造灵感。在Magento的帮助下，该网站提供了一个很好的导航菜单在他们的类别页面中，以帮助客户轻松找到任何产品。</p>
<h2 style="text-align: left;">11.Sussan</h2>
<p style="text-align: center;"><em><strong><img alt="在Au的现场Magento" class="aligncenter wp-image-11469" height="762" src="https://www.tigren.com/wp-content/uploads/2019/03/Live-site-Magento-in-Au.png" width="950" />sussan.com.au</strong></em></p>
<p class="BodyA">为座右铭&ldquo;女行为主,为女性设计，专为女性设计&ldquo;。Sussan是澳大利亚女性最喜欢的时尚品牌。像品牌风格，优雅的店面，方便的产品和目录浏览，这个马根托时尚网站已经吸引了很多女士的注意。</p>
<h2>12. Kath Mandu</h2>
<p style="text-align: center;"><em><strong><img alt="Au的Magento电子商务网站" class="aligncenter wp-image-11470" height="495" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-e-commerce-web-in-Au.png" width="950" />kathmandu.com.au</strong></em></p>
<p style="text-align: left;">Kathmandu设计的装备可以承载起家乡的崎岖景观，并为人们提供冒险精神。他们拥有简单和出色的智能类别，允许内容和产品在网站上巧妙地显示。</p>
<h2 style="text-align: left;">13.Dangerfield</h2>
<p style="text-align: left;"><span style="font-size: 24px; font-weight: bold; text-align: left;"><img alt="Magento开发公司" class="aligncenter size-full wp-image-11471" height="710" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-development-company.png" width="1181" /></span></p>
<p style="text-align: center;"><em><strong>shop.dangerfield.com.au</strong></em></p>
<p style="text-align: left;">美国Magento网站的一个简单而有效的网站，导航中的目录快速排序似乎是一个非常有用的功能。Dangerfield提供大量的制服，装备和精神装。</p>
<p style="text-align: left;"><span style="font-size: 24px; font-weight: bold; text-align: left;">14.Well Made Clothes</span></p>
<p style="text-align: center;"><em><strong><img alt="" class="aligncenter wp-image-11474" height="460" src="https://www.tigren.com/wp-content/uploads/2019/03/Au-website-Magento.png" width="950" />wellmadeclothes.com</strong></em></p>
<p style="text-align: left;">制作精良的服装产品来基于手工制作，极少浪费和可持续发展的要求。这家商店拥有现代而干净的设计，旨在使其时尚产品脱颖而出。</p>
<h2 style="text-align: left;">15. DC Shoes</h2>
<p style="text-align: center;"><strong><img alt="Magento开发公司" class="aligncenter wp-image-11475" height="465" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-developer-company.png" width="950" />dcshoes.com.au</strong></p>
<p style="text-align: left;">DC成立于1994年，迅速发展成为高性能滑板鞋和著名运动品牌的领导者。该网站采用Magento制作，具有高端图像，现代简约设计。</p>
<h2 style="text-align: left;">16. Showpo</h2>
<p style="text-align: center;"><em><strong><img alt="澳大利亚Magento网站" class="aligncenter wp-image-11476" height="418" src="https://www.tigren.com/wp-content/uploads/2019/03/Australia-Magento-web.png" width="950" />showpo.com</strong></em></p>
<p style="text-align: left;">Showpo是一家位于澳大利亚阳光明媚的悉尼的在线时装公司。他们的Magento网站在着陆页面上有各种类别，可以为您提供许多产品和信息。</p>
<h2 style="text-align: left;">17.The Upside Sport</h2>
<p style="text-align: center;"><em><strong><img alt="澳大利亚Magento开发商" class="aligncenter wp-image-11477" height="472" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-developer-in-australia.png" width="950" />theupsidesport.com</strong></em></p>
<p style="text-align: left;">The Upside致力于通过运动服装实现健康生活方式的理念。这是一个优秀的Magento网站，既方便用户使用，又具有视觉吸引力。</p>
<h2 style="text-align: left;">18. Priceline</h2>
<p style="text-align: center;"><em><strong><img alt="Magento公司" class="aligncenter wp-image-11478" height="496" src="https://www.tigren.com/wp-content/uploads/2019/03/Magento-company.png" width="950" />priceline.com.au</strong></em></p>
<p style="text-align: left;">通过Priceline网站，您可以在线商店中播放，探索超过13,000种产品并以前所未有的方式参与在线空间。</p>
<h2 style="text-align: left;">19. King Living</h2>
<p style="text-align: center;"><em><strong><img alt="澳大利亚Magento开发人员" class="aligncenter wp-image-11479" height="486" src="https://www.tigren.com/wp-content/uploads/2019/03/Australia-Magento-developer.png" width="950" />kingliving.com.au</strong></em></p>
<p style="text-align: left;">King Living是澳大利亚领先的家具设计品牌，拥有许多屡获殊荣的产品。它也是澳大利亚Magento电子商务网站的典型例子之一，它具有漂亮的外观设计。</p>
<h2 style="text-align: left;">20. Mocka<img alt="澳大利亚Magento电子商务网站的例子" class="aligncenter wp-image-11480" height="446" src="https://www.tigren.com/wp-content/uploads/2019/03/examples-magento-e-commerce-website-in-Australia.png" width="950" /></h2>
<p style="text-align: center;"><em><strong>mocka.com.au</strong></em></p>
<p>Mocka是澳大利亚的另一个家具品牌，专注于儿童，幼儿园，家居和生活家具。它建立在Magento之上，提供消费者在网上购物时所需的所有功能。</p>
<p>这就是澳大利亚Magento电子商务网站的20个典型例子，我们希望为您的电子商务网站提供启发。如果您正在寻找最好的<a href="https://www.tigren.com/magento-development-australia/">Magento开发公司</a>，我们很乐意帮助您在澳大利亚建立您的Magento电子商务网站。</p>
<p><strong><a href="https://www.360magento.com.com/contacts/"></a></strong>&nbsp;现在就<strong><a href="https://www.360magento.com.com/contacts/">联系我们</a></strong>，获取您的项目详细建议书，并评估时间和费用。</p>]]></description>
      <pubDate>Fri, 05 Apr 2019 11:04:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2  Demo站点在线演示]]></title>
      <link>https://www.360magento.com/blog/magento-2-demo/</link>
      <description><![CDATA[<div class="card">
<div class="card-image"><img alt="Magento 2演示" class="responsive-img" src="https://cdn.mageplaza.com/media/general/VHoUupD.jpg" /></div>
<div class="card-content" id="kb-content">
<p><strong><a href="/magento-2-demo">Magento 2 演示</a></strong>是在线演示站点，它带来了Magento2的真实体验，而不是在localhost上安装Magento 2。带有示例数据的Magento 2 演示Demo允许您作为前端的客户进行交互，并在后端作为管理员进行操作</p>
<p>使用在线<strong>Magento 2后台演示</strong>是一个完美的解决方案，可以帮助您在不进行任何安装的情况下享受Magento 2的所有功能。360Magento技术团队的及时协助确保该演示能够很好地运行。</p>
<p>我们收集互联网上的部分在线演示站点，以帮助商家，开发人员快速了解Magento 2。</p>
<div class="row">
<div class="col s6">
<h2>Magento 2站点演示：＃1 Blackbird</h2>
<div>
<p><a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://demo-acm-2.bird.eu/" rel="nofollow" target="_blank">前端</a> <a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://demo-acm-2.bird.eu/admin" rel="nofollow" target="_blank">后端</a></p>
</div>
</div>
<div class="col s6">
<h2>Magento 2站点演示：＃2 BSS</h2>
<div>
<p><a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://104.237.149.38/magento225/" rel="nofollow" target="_blank">前端</a> <a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://104.237.149.38/magento225/admin" rel="nofollow" target="_blank">后端</a></p>
<ul>
<li>用户名：admin</li>
<li>密码：admin123</li>
</ul>
</div>
</div>
<div class="col s6">
<h2>Magento 2站点演示：＃3 Bublue Demo</h2>
<div>
<p><a class="waves-effect waves-light btn" href="http://blankrefer.com/?https://magento.nublue.co.uk/" rel="nofollow" target="_blank">前端</a> <a class="waves-effect waves-light btn" href="http://blankrefer.com/?https://magento.nublue.co.uk/admin" rel="nofollow" target="_blank">后端</a></p>
<ul>
<li>用户名：admin</li>
<li>密码：nublue2test</li>
</ul>
</div>
</div>
<div class="col s6">
<h2>Magento 2站点演示：＃4 Magedirect</h2>
<div>
<p><a class="waves-effect waves-light btn" href="http://blankrefer.com/?https://demo1-m2.mage.direct/" rel="nofollow" target="_blank">前端</a> <a class="waves-effect waves-light btn" href="http://blankrefer.com/?https://demo1-m2.mage.direct/admin" rel="nofollow" target="_blank">后端</a></p>
<ul>
<li>用户名：demo</li>
<li>密码：demo123</li>
</ul>
</div>
</div>
<div class="col s6">
<h2>＃5 Firebearstudio演示</h2>
<div>
<p><a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://magento2demo.firebearstudio.com/" rel="nofollow" target="_blank">前端</a> <a class="waves-effect waves-light btn" href="http://blankrefer.com/?http://magento2demo.firebearstudio.com/admin_1vbjqf/" rel="nofollow" target="_blank">后端</a></p>
<ul>
<li>用户名：demo</li>
<li>密码：1q2w3e4r5t</li>
</ul>
</div>
</div>
</div>
<div class="row center" style="padding-top: 20px;"><a href="https://www.mageplaza.com/magento-2-one-step-checkout-extension/?utm_source=mageplaza&amp;utm_medium=banner&amp;utm_campaign=kb"> <img alt="Mageplaza为Magento 2一步到位" class="responsive-img" src="https://i.imgur.com/JzvQvQF.jpg" /> </a></div>
<h2 id="magento-2-demo-features">Magento 2演示介绍</h2>
<p>使用管理员权限登录后端，然后密切关注管理后端侧栏。</p>
<p><img alt="Magento 2演示管理员登录" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/UzJUxle.png" style="display: inline;" /></p>
<p>主要部分包括 <strong>Dasboard</strong>, <strong>Sales</strong>, <strong>Products</strong>, <strong>Customers</strong>, <strong>Marketing</strong>, <strong>Content</strong>, <strong>Reports</strong>, <strong>Stores</strong>, <strong>System</strong>, 和 <strong>Find partner extensions</strong>.</p>
<p>我们来看看每个部分的细节。</p>
<h3 id="dashboard">Dasboard</h3>
<p>您在Magento 2后端主页上。在主页的顶部，如果有与Magento 2 后端演示相关的任何更新，您可以按照系统通知进行操作。</p>
<p><img alt="Magento 2 Demo DashBoard" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/cSEefy6.png" style="display: inline;" data-original="https://cdn.mageplaza.com/media/general/cSEefy6.png" /></p>
<ul>
<li>
<p>Magento 2的Dasboard(仪表盘)显示了重要的数据指标，包括：</p>
<ul>
<li>Lifetime Sales-- 终身销售</li>
<li>Average Order-- 平均订单</li>
<li>Last Order -- 最近的订单</li>
<li>Last Search Terms -- 最近搜索词</li>
<li>Top Search Terms -- 热门搜索字词</li>
</ul>
</li>
</ul>
<p>在屏幕截图中是给出的示例，其中包含个人信息和订单信息等示例样本数据。</p>
<ul>
<li>
<p>在DashBoard(仪表盘)上，网站管理员可以跟踪特定时间段内的产品收入，税额，运输和数量。可以在下拉框中按时间过滤。</p>
<ul>
<li>Last 24 hours -- 过去24小时</li>
<li>Last 7 days -- 过去7天</li>
<li>Current Month -- 这个月</li>
<li>Year to Date (YTD) -- 年初至今（年月日）</li>
<li>2 Year to Date (2YTD) -- 2年至今（2YTD）</li>
</ul>
</li>
</ul>
<p>根据统计数据，店主将对每个时间段内的在线销售进行比较。</p>
<ul>
<li>为了获得更好的帮助，您的营销和<a href="https://marketplace.magento.com/mageplaza-magento-2-seo-extension.html">搜索引擎优化</a>团队可以按照畅销产品和观看次数最多的产品列表，这是在下一次建立更好的广告系列的最基本的，如保持最好的产品的稳定，并为不太受欢迎的项目提供折扣。</li>
</ul>
<h3 id="sales">Sales(订单)</h3>
<p>继续<strong>Sales</strong>部分，您可以管理完整的信息</p>
<h4 id="orders">订单</h4>
<ul>
<li>点击<code class="highlighter-rouge">Sales</code>，选择<code class="highlighter-rouge">Orders</code>。</li>
<li>在订单管理网格上，通过以下参数可以很好地控制网站中的所有订单：
<ul>
<li><strong>ID -- 订单ID</strong></li>
<li>Purchase Point（购买点)，如果您拥有多个商店，将指出订单所在的商店</li>
<li><strong>Purchase Date -- 购买日期</strong></li>
<li><strong>Bill-to-Name -- 账单名字</strong></li>
<li><strong>Ship-to-Name --收货人名字</strong></li>
<li><strong>Grand Total</strong>(Base) -- 总计（基数）</li>
<li><strong>Grand Total</strong> -- <strong>总计</strong>（已购买）</li>
<li><strong>Status</strong> -- <strong>状态</strong>可能是Completed, Processing, Pending等，具体取决于您的设置。</li>
</ul>
</li>
<li>在<strong>&ldquo;Action&rdquo;</strong>列下，单击<code class="highlighter-rouge">View</code>链接以导航到其详细信息页面以查看订单。</li>
<li>如果通过线下电话或电子邮件完成订单，可以使用&ldquo; <strong>Create New Order </strong>&rdquo;按钮手动填写订单信息，这将有助于您很好地管理库存。</li>
<li>如果需要，可以将所有数据导出为CSV或XML文件。</li>
</ul>
<p><img alt="Magento 2演示订单管理" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-orders.gif" style="display: inline;" data-original="https://cdn.mageplaza.com/docs/magento-2-demo-orders.gif" /></p>
<h4 id="invoices">Invoices（发票）</h4>
<ul>
<li>点按<code class="highlighter-rouge">Sales</code>，选择<code class="highlighter-rouge">Invoices</code>。</li>
<li>所有发票信息都在网格表上进行管理：
<ul>
<li>Invoice ID -- 发票ID</li>
<li>Invoice Date -- 发票日期</li>
<li>Order ID -- 订单ID</li>
<li>Order Date -- 订购日期</li>
<li>Bill-to-Date --比尔最新</li>
<li>Status -- 状态</li>
<li>Grand Total (Base) -- 总计（基数）</li>
<li>Grand Total (Purchased) -- 总计（已购买）</li>
</ul>
</li>
<li>在<strong>&ldquo;Action&rdquo;</strong>列下，单击<code class="highlighter-rouge">View</code>链接以导航到详细信息页面以查看发票。</li>
<li>如果需要，可以将所有数据导出为CSV或XML文件。</li>
</ul>
<p><img alt="Magento 2演示发票管理" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-invoices.gif" style="display: inline;" data-original="https://cdn.mageplaza.com/docs/magento-2-demo-invoices.gif" /></p>
<h4 id="shipments">Shipments（货物运输）</h4>
<ul>
<li>点按<code class="highlighter-rouge">Sales</code>，选择<code class="highlighter-rouge">Shipments</code>。</li>
<li>所有货件信息都在网格列表上管理：
<ul>
<li>Shipment ID -- 装运ID</li>
<li>Shipment Date -- 发货日期</li>
<li>Order ID -- 订单ID</li>
<li>Order Date -- 订购日期</li>
<li>Ship-to-Name -- 收货人名字</li>
<li>Total Quantity -- 总计数量</li>
</ul>
</li>
<li>在<strong>&ldquo;Action&rdquo;</strong>列下，单击<code class="highlighter-rouge">View</code>链接以导航到详细信息页面以查看货件。</li>
<li>如果需要，可以将所有数据导出为CSV或XML文件。</li>
</ul>
<p><img alt="Magento 2 Demo Shipments Management" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-shipments.gif" style="display: inline;" data-original="https://cdn.mageplaza.com/docs/magento-2-demo-shipments.gif" /></p>
<h4 id="transactions">Transactions(交易)</h4>
<ul>
<li>点按<code class="highlighter-rouge">Sale</code>，选择<code class="highlighter-rouge">Transactions</code>。</li>
<li>您网站上发生的每笔付款都将列在网格下，例如订单，授权，捕获，无效和退款。您可以追踪：
<ul>
<li>ID -- ID</li>
<li>Order ID -- 订单ID</li>
<li>Transaction ID -- 交易ID</li>
<li>Parent Transaction ID -- 父交易ID</li>
<li>Payment Method -- 付款方法</li>
<li>Transaction Type -- 交易类型</li>
<li>Closed -- 已关闭</li>
<li>Created -- 已创建</li>
</ul>
</li>
</ul>
<p><img alt="Magento 2 Demo Transactions Management" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-transactions.gif" style="display: inline;" data-original="https://cdn.mageplaza.com/docs/magento-2-demo-transactions.gif" /></p>
<h3 id="products">Products(产品)</h3>
<p>您可以在产品的类目下详细了解您的库存状态。在这里，如果需要，可以知道库存中的单个产品的数量，添加新的产品，更改或删除任何产品。</p>
<h4 id="catalog">目录</h4>
<ul>
<li>在管理员面板上<code class="highlighter-rouge">Sales &gt; Catalog</code>。</li>
<li></li>
</ul>
<h3 id="customers">Customers -- 客户</h3>
<h3 id="marketing">Marketing -- 营销</h3>
<h3 id="content">Content -- 内容</h3>
<h3 id="reports">Reports -- 报告</h3>
<p>从Magento 2开始，报告可通过5个小节更好地跟踪您的业务：<strong>Marketing</strong>, <strong>Sales</strong>, <strong>Customers</strong>, <strong>Products</strong>, and <strong>Reviews</strong>.</p>
<h4 id="marketing-1">Marketing（营销)</h4>
<p><strong>Product in cart(购物车中的产品)</strong></p>
<p>您将访问的第一份有关营销的报告是购物车报告中的产品，请执行以下操作：</p>
<ul>
<li>在<strong>&ldquo;Report&rdquo;</strong>部分中<code class="highlighter-rouge">Marketing</code>，选择<code class="highlighter-rouge">Product In Cart</code>。</li>
<li>在网格列表中，购物车中的所有最近产品都列出了包括 ID, Product, Price, Carts, 和 Orders选项列。</li>
<li>要查看详细报告，请单击所需项目的行，然后将您定向到其产品页面。</li>
</ul>
<p><img alt="Magento 2演示营销产品在购物车中" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/ohQPfqv.png" style="display: inline;" /></p>
<p><strong>Search Terms(搜索字词)</strong></p>
<p>搜索条件是客户在您的商店进行活动时的搜索查询的完整报告。这有助于调查客户的想法。</p>
<ul>
<li>继续使用<code class="highlighter-rouge">Marketing</code>子选项卡，选择<code class="highlighter-rouge">Search Terms</code>。</li>
<li>通过以下参数显示最近搜索词报告：Search Query, Store, Results, Uses, Redirect URL, Suggested Terms, 和 Action.。</li>
<li>要了解输入搜索词时显示的结果数以及搜索词搜索的次数，请打开<strong>Edit</strong>模式以根据需要跟踪和修改任何信息。</li>
</ul>
<p><img alt="Magento 2演示营销搜索条款" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/Hnyf74B.png" style="display: inline;" /></p>
<p><strong>Abandoned Cart(被遗弃的购物车)</strong></p>
<p>此报告允许您自动存储任何将产品添加到购物车并放弃购买的客户。</p>
<ul>
<li>转到<code class="highlighter-rouge">Abandoned Cart</code>选项。</li>
<li>为了更好地管理，abandonment carts列出了全部信息，其中包含Products, Quantity, Subtotal, 和 Applied Coupon。</li>
</ul>
<p>根据有用的详细信息，您可以得到正确的解决方案并发送具有适当折扣的电子邮件以将其挽回。</p>
<ul>
<li>单击每一行以获取更多信息。</li>
</ul>
<p><img alt="Magento 2演示营销被遗弃的购物车" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/qJaml6T.png" style="display: inline;" /></p>
<p><strong>Newsletter Problem Report（通讯问题报告）</strong></p>
<p>该图表显示了与<a href="https://www.mageplaza.com/magento-2-newsletter-popup/">新闻邮件订阅</a>相关的所有问题。所有这些都保存在时事通讯问题报告中。此外，还可以根据问题报告的日期、错误代码、错误文本和队列主题对它们进行排序。</p>
<p><img alt="Magento 2演示营销通讯问题报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/V95ruyB.png" style="display: inline;" /></p>
<h4 id="sales-1">Sales(销售)</h4>
<p>从Magento 2 Admin Demo，通过以下快捷方式可以很好地记录<a href="https://www.mageplaza.com/magento-2-reports-extension/">销售报告</a>：</p>
<ul>
<li>Orders</li>
<li>Tax</li>
<li>Invoiced</li>
<li>Shipping</li>
<li>Refunds</li>
<li>Coupons</li>
<li>Paypal Settlement</li>
<li>Braintree Settlement.</li>
</ul>
<p>让我们以订单报告为例：</p>
<ul>
<li>在<strong>Filter </strong>部分下，您需要执行以下操作：
<ul>
<li><code class="highlighter-rouge">Date Used</code>为图表设置，它可能是<strong>Order Created</strong>或<strong>Order Updated</strong>。</li>
<li>在<code class="highlighter-rouge">Period</code>字段中选择需要的时间段。</li>
<li>通过点击<code class="highlighter-rouge">From</code>和<code class="highlighter-rouge">To</code>字段中的日历图标来设置特定时间。</li>
<li>选择类型时允许显示顺序<code class="highlighter-rouge">Order Status</code>。如果选择&ldquo;Any&rdquo;，它将应用于除已取消订单之外的所有订单状态。</li>
<li>根据需要设置<code class="highlighter-rouge">Empty Row</code>为&ldquo;Yes&rdquo;或&ldquo;No&rdquo;。</li>
<li>当选择&ldquo;Yes&rdquo;时，使当前的值可见。</li>
</ul>
</li>
<li>完成筛选后，将通过Ajax加载图表。</li>
</ul>
<p><img alt="Magento 2演示订单报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/CnHPrxJ.png" style="display: inline;" /></p>
<h4 id="customers-1">Customers(客户)</h4>
<p>此报告将显示客户创建的订单总数。</p>
<ul>
<li>按日期过滤以加载下面的报告。</li>
<li>单击特定行以获取详细信息。</li>
<li>重复上述指南以报告订单计数报告。</li>
</ul>
<p><img alt="Magento 2演示客户报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/ICL2Tac.png" style="display: inline;" /></p>
<h4 id="products-1">Products(产品)</h4>
<p>在产品报告中，商店所有者可以保存包括大多数已查看产品，畅销商品，低库存，订购和下载的数据。</p>
<ul>
<li>按日期过滤以通过Ajax加载产品报告。</li>
<li>单击特定行以获取详细信息。</li>
<li>重复上述步骤以报告其他图表。</li>
</ul>
<p>基于您可以看到的静态信息，它有助于为您的产品构建一个智能的广告活动。</p>
<p><img alt="Magento 2演示产品报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/7HsmlPR.png" style="display: inline;" /></p>
<h4 id="reviews">Reviews(评价)</h4>
<p>登录Magento 2 Demo，您可以按客户或按产品跟踪审核报告。该报告将列出客户对您产品的全面评价。</p>
<p><img alt="Magento 2演示评论报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/qkLory9.png" style="display: inline;" /></p>
<h4 id="statictis">Statictis(统计)</h4>
<ul>
<li>在<code class="highlighter-rouge">Statictis</code>下面，点击并转到<code class="highlighter-rouge">Refresh Statictis</code>工作场所。</li>
<li>标记相应报告的一个或多个复选框</li>
<li>在左上角，从下拉框中选择刷新类型：刷新生命周期状态或刷新最后一天的状态。</li>
<li>单击<code class="highlighter-rouge">Submit</code>按钮刷新数据。</li>
</ul>
<p><img alt="Magento 2演示刷新Statictis" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/Q1QUtgX.png" style="display: inline;" data-original="https://cdn.mageplaza.com/media/general/Q1QUtgX.png" /></p>
<h3 id="stores">商店</h3>
<p>在<code class="highlighter-rouge">Stores</code>选项卡中，您可以使用5个子选项，如： Settings, Taxes, Currency, Attributes, 和 Other Settings。</p>
<h4 id="settings">设置(Settings)</h4>
<p>在本节中，您将在商店中看到一些常规配置。</p>
<p><strong>All Stores（所有商店）</strong></p>
<p>如果有多家商店，那么非常适合在这里管理，包括网站，商店和商店视图。</p>
<p>在右上角，您可以有3个操作：Create Website, Create Store View, 和 Create Store。</p>
<ul>
<li>要创建新的商店视图，
<ul>
<li>单击<strong>&ldquo;Create Store View</strong>按钮</li>
<li>设置<code class="highlighter-rouge">Store</code>为新商店视图指定商店。</li>
<li>设置<code class="highlighter-rouge">Name</code>为新的。</li>
<li>输入商店视图的<code class="highlighter-rouge">Code</code>。</li>
<li>在字段<code class="highlighter-rouge">Status</code>中选择已<strong>启用</strong>。</li>
<li>如有必要，您可以在商店视图列表中进行设置<code class="highlighter-rouge">Sort Order</code>。</li>
</ul>
</li>
</ul>
<p><img alt="Magento 2 Demo New Store View" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/7DTVtqU.png" style="display: inline;" /></p>
<ul>
<li>去创建新的商店，
<ul>
<li>点击<strong>Create Store</strong>按钮。</li>
<li>选择<code class="highlighter-rouge">Website</code>显示新商店。</li>
<li>设置<code class="highlighter-rouge">Name</code>。</li>
<li>从可用的类别列表中进行选择<code class="highlighter-rouge">Root Category</code>。</li>
</ul>
</li>
</ul>
<p><img alt="Magento 2演示新店" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/7DTVtqU.png" style="display: inline;" /></p>
<ul>
<li>去创建新网站，
<ul>
<li>单击<strong>&ldquo;Create Website &rdquo;</strong>按钮。</li>
<li>输入<code class="highlighter-rouge">Name</code>。</li>
<li>输入新网站<code class="highlighter-rouge">Code</code>。</li>
<li>如有必要，您可以在商店视图列表中进行设置<code class="highlighter-rouge">Sort Order</code>。</li>
</ul>
</li>
</ul>
<p><img alt="Magento 2演示新网站" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/bAT4Y23.png" style="display: inline;" /></p>
<p><strong>Configuration(配置)</strong></p>
<p>您可以从<strong>Configuration</strong>选项卡执行许多操作，但需要关注的主要部分是构建基本的Magento商店：</p>
<ul>
<li>Design(设计)</li>
</ul>
<p>该部分还有助于设计主题，上传Logo和网站标题，默认关键字和其他脚本。特别是，从Design中，您还可以配置搜索引擎机器人以获得更好的SEO。此外，管理员还可以自定义公司徽标的大小，然后将其上传到站点的页眉和页脚。</p>
<p><img alt="Magento 2演示设计" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/it05jKg.png" style="display: inline;" /></p>
<ul>
<li>Contact(联系)</li>
</ul>
<p><img alt="Magento 2演示联系人" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/4dkpROh.png" style="display: inline;" /></p>
<ul>
<li>Reports(报告)</li>
</ul>
<p>报告是高级工具，因此可以评估您的工作效率并以正确的方式推动它。从Magento 2 Admin，您可以设置时间在仪表板上将报告显示为默认值。</p>
<p><img alt="Magento 2演示报告" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/PQCvnbF.png" style="display: inline;" /></p>
<ul>
<li>Content Management(内容管理)</li>
</ul>
<p><strong>Content Management</strong>部分为您提供WYSIWYG编辑器工具，可以帮助您轻松上传新的网页，博客文章等。</p>
<p><img alt="Magento 2演示管理" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/aLx9zfh.png" style="display: inline;" /></p>
<ul>
<li>Catalog(类目)</li>
</ul>
<p>在<strong>Catalog</strong>配置中，您可以自由设置各种选项。例如，您可以在标记SKU，元标题，关键字和描述时完成产品字段自动生成。此外，可以允许客人在产品上进行评论。该部分还可以更好地控制店面，包括网格或列表模式中每页产品的数量，产品列表排序，产品和类别中的动态媒体URL以及每个产品的样本。此外，从本节开始可以配置越来越多的操作，登录Magento Admin以了解详细信息。</p>
<p><img alt="Maento 2演示目录" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/yOZKfzZ.png" style="display: inline;" /></p>
<h3 id="system">System(系统)</h3>
<p>在管理侧栏上，移动到<strong>System</strong>工作区，您可以使用以下部分在系统中创建许多设置。</p>
<p><strong>Data Transfer(数据传输)</strong></p>
<ul>
<li>Import/ Export(导入 / 导出)</li>
</ul>
<p>在<strong>Data Transfer</strong>下，您可以上传任何大小为25Mb的外部文件。这样可以方便地将数据从其他平台导入Magento而不会丢失任何重要信息。</p>
<p><img alt="Magento 2演示导入数据" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/keOCcJd.png" style="display: inline;" /></p>
<p>从该<code class="highlighter-rouge">Entity type</code>字段的下拉列表中，您可以选择其中之一：Advanced Pricing, Products, Customer 和 Addresses,。此外，Magento 2 Demo附带了Sample Data，可帮助您尝试导入数据。</p>
<p>此外，您可以导出任何csv文件。根据导出文件的实体类型，您可以通过标记相应的复选框来考虑需要导出的属性。</p>
<ul>
<li>Import/Export Tax Rates(导入导出税率)</li>
</ul>
<p>在Magento 2 Demo中，管理员可以根据您的需要轻松导入/导出Magento和其他平台之间的税率。</p>
<p><img alt="Magento 2 Demo导入出口税率" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/IcfDXyG.png" style="display: inline;" /></p>
<ul>
<li>Import History(导入历史记录)</li>
</ul>
<p>保存与Magento Admin中导入文件相关的所有活动。多亏了这一点，您始终可以跟踪将哪个文件导入您的网站。</p>
<p><img alt="Magento 2演示导入历史记录" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/C9zTKej.png" style="display: inline;" /></p>
<p><strong>Extension(扩展)</strong></p>
<p>进入子选项<code class="highlighter-rouge">Integration</code>，这使商店管理员可以更好地管理集成到他的商店中的每个模块。</p>
<p>要创建新的集成，您需要执行以下操作：</p>
<ul>
<li>单击<strong>Add New Integration</strong>按钮。</li>
<li>在左侧面板上完成<code class="highlighter-rouge">Integration Info</code>和<code class="highlighter-rouge">API</code>。</li>
</ul>
<p><img alt="Magento 2演示集成" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-integration.gif" style="display: inline;" /></p>
<p><strong>Tools(工具)</strong></p>
<p>在此选项卡中，商店管理员可能刷新缓存以确保所有配置始终是最新的。</p>
<p><img alt="Magento 2演示缓存管理" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/KkZjr4Z.png" style="display: inline;" /></p>
<p>此外，您还可以使用其他工具，包括：Backups, Index Management, 和 Web Setup Wizard.</p>
<p><strong>Permissions(权限)</strong></p>
<p><strong>Permissions</strong>部分显示Magento商店中包含活动用户，锁定用户以及每个用户的特定角色的所有用户的列表。</p>
<p>作为管理员，您可以按照以下指南从Admin Demo添加无限制的新用户：</p>
<ul>
<li>在<strong>Permissions</strong>下，选择<code class="highlighter-rouge">All Users</code>子选项卡。</li>
<li>在右上角，单击<code class="highlighter-rouge">Add New User</code>。</li>
<li>填写新用户的基本信息：User Name, First Name, Last Name, Email, 和 Password。</li>
<li>在<code class="highlighter-rouge">Current User Identity Verification</code>部分中的验证密码</li>
<li>将用户分配到商店中的特定角色。</li>
</ul>
<p><img alt="Magento 2 Demo创建新用户" class="lazy responsive-img" src="https://cdn.mageplaza.com/docs/magento-2-demo-create-new-user.gif" style="display: inline;" /></p>
<p>**其他设置**</p>
<ul>
<li>Notifications(通知)</li>
</ul>
<p>如果Magento有任何更新或您的系统或客户信息黑客漏洞问题，<strong>Notifications</strong>自选项将包括详细通知。根据信息重要性，很重要的它与红色标签一起显示 - &ldquo;CRITICAL&rdquo;，不太紧急的报告附在&ldquo;NOTICE&rdquo;标签上。</p>
<p><img alt="Magento 2演示通知" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/yAA76Nd.png" style="display: inline;" /></p>
<ul>
<li>Custom Variables(自定义变量)</li>
</ul>
<p>允许跟踪产品的所有自定义变量，包括新变量和现有变量。</p>
<p><img alt="Magento 2演示自定义变量" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/myWnbD0.png" style="display: inline;" /></p>
<ul>
<li>Manage Encrytion Key(管理加密密钥)</li>
</ul>
<p>可以保护您的密码以及敏感文档。您可以通过自动或手动生成密钥来加密数据。</p>
<p><img alt="Magento 2演示管理加密密钥" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/nhW4hIi.png" style="display: inline;" /></p>
<h3 id="find-partner--extensions">Find partner &amp; extensions(查找合作伙伴&amp;扩展程序)</h3>
<p><strong>Find partner extension</strong>包括Magento Platinum Partners功能，该功能将为商店管理员提供<strong>Featured Platinum Partners</strong>下的Magento合作伙伴列表。这对您的合作有很大的帮助，使您的电子商务业务有显著的发展。。</p>
<p>此外，您还可以找到更多技术合作伙伴，以帮助商家和品牌提供最佳客户体验的扩展和主题，以在<strong>合作伙伴搜索</strong>和<strong>Magento市场</strong>部分增强您的Magento商店。</p>
<p><img alt="Magento 2 Demo查找合作伙伴和扩展程序" class="lazy responsive-img" src="https://cdn.mageplaza.com/media/general/paLKjce.png" style="display: inline;" /></p>
<h2 id="system-requirements">系统要求</h2>
<h3 id="web-services">Web服务器</h3>
<ul>
<li>Apache 2.2或2.4</li>
<li>Nginx 1.8</li>
</ul>
<h3 id="database-engine">数据库引擎</h3>
<ul>
<li>MySQL 5.6</li>
<li>MariaDB</li>
<li>Percona</li>
</ul>
<h3 id="php">PHP</h3>
<ul>
<li>5.6.x</li>
<li>5.5.x，其中x为22或更大</li>
<li>7.0.2至7.1.0，7.0.5除外。不适用于7.0.5</li>
</ul>
<h3 id="php-extensions-requirements">PHP扩展要求</h3>
<ul>
<li>curl</li>
<li>gd, ImageMagick &gt; 6.3.7</li>
<li>intl</li>
<li>mbstring</li>
<li>mcrypt</li>
<li>mhash</li>
<li>openssl</li>
<li>PDO/MySQL</li>
<li>SimpleXML</li>
<li>soap</li>
<li>xml</li>
<li>xsl</li>
<li>zip</li>
<li>json (PHP 7 only)</li>
<li>iconv (PHP 7 only)</li>
</ul>
<h3 id="cache-system">缓存系统</h3>
<ul>
<li>PHP OPcache</li>
<li>Redis (Recommend)</li>
<li>Vanish (Recommend)</li>
<li>mem-cached (Recommend)</li>
</ul>
<h4 id="email-services">邮件服务</h4>
<ul>
<li>邮件传输代理（MTA）</li>
<li>SMTP服务器</li>
</ul>
<h3 id="ssl">SSL</h3>
<ul>
<li>HTTPS需要有效的安全证书。</li>
<li>不支持自签名SSL证书。</li>
<li>传输层安全性（TLS）要求</li>
</ul>
<h3 id="magento-2-enterprise-requirements">Magento 2企业版要求</h3>
<ul>
<li>PHP extension: bc-math</li>
<li>Apache Solr 4.x</li>
<li>RabbitMQ 3.5</li>
<li>Three master databases</li>
</ul>
<h2 id="how-to-install-magento-2">如何安装Magento 2</h2>
<p>本安装指南将向您<strong>展示如何</strong>在您自己的服务器或共享主机上<strong>安装Magento 2</strong> 最新版本。为您的Magento 2商店选择一个很棒的主机。</p>
<h3 id="getting-started-select-solution">入门：选择解决方案</h3>
<p>我们可以开始使用一些解决方案。</p>
<ul>
<li>从Zip文件安装：易于安装，无需命令行。</li>
<li>Metapackage：使用Composer安装Magento</li>
<li>从Git库安装：开发人员贡献</li>
</ul>
<p>在本指南中，我们将展示如何以＃1解决方案安装Magento2。很容易上手。</p>
<h3 id="install-magento-2-step-by-step">一步一步安装Magento 2：</h3>
<ul>
<li>下载Magento程序包</li>
<li>上传到您的服务器</li>
<li>更新权限</li>
<li>运行Magento安装向导</li>
<li>完成安装过程</li>
</ul>
<h4 id="prerequisites">先决条件</h4>
<p>在继续之前，请确保您已完成以下所有操作：</p>
<ul>
<li>设置符合Magento 2系统要求的服务器</li>
<li>创建了Magento文件<a href="https://devdocs.magento.com/guides/v2.1/install-gde/prereq/file-sys-perms-over.html" rel="nofollow">系统所有者</a></li>
</ul>
<h4 id="download-magento-packages">下载Magento软件包</h4>
<p>现在去<a href="https://magento.com/tech-resources/download" rel="nofollow">下载Magento 2</a>，下载Magento Community Edition（CE）的最新版本。</p>
<p>在此处下载最新的<a href="https://github.com/magento/magento2-sample-data/releases" rel="nofollow">样品数据</a></p>
<h4 id="upload-to-your-server">上传到您的服务器</h4>
<p>让我们下载一个zip文件，现在是时候将它上传到服务器了。您可以使用WinSCP，Filezilla上传它，然后将其解压缩到public_html目录（我们称之为：Magento根目录）。</p>
<p>如果您使用的是共享主机，则可以使用解压缩功能来解压Magento包。</p>
<p>如果您在服务器上运行，请按照以下命令操作：</p>
<h5 id="file-format-and-command">文件格式和命令</h5>
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code># File .tar.gz  <span>
tar zxf &lt;filename&gt;<span>
<span>
# File .zip<span>
unzip &lt;filename&gt;<span>
<span>
</span></span></span></span></span></span></code></pre>
</div>
</div>
<h4 id="update-permission">更新权限</h4>
<p>为以下文件夹添加写入权限：</p>
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code>var<span>
app/etc<span>
pub<span>
</span></span></span></code></pre>
</div>
</div>
<h4 id="running-the-magento-setup-wizard">运行Magento安装向导</h4>
<p>安装向导是一个多页向导，使您可以一步步完成每一页。您不能跳过页面，必须在每个页面上输入所有必需的信息，然后才能继续下一页。</p>
<ul>
<li>在浏览器地址栏中输入以下URL：</li>
</ul>
<p><code class="highlighter-rouge">http://www.example.com/setup</code></p>
<ul>
<li>在初始页面上，单击<code class="highlighter-rouge">Agree and Set Up Magento</code>。</li>
</ul>
<p>按顺序继续以下主题以完成安装。</p>
<h5 id="step-1-readiness-check">第1步：准备检查</h5>
<p>点击<code class="highlighter-rouge">Start Readiness Check</code>。如果显示任何错误，则必须先解决它们，然后才能继续。如果可以，请单击&ldquo;More detail&rdquo;以查看有关每项检查</p>
<p>点击 <code class="highlighter-rouge">Next</code></p>
<h5 id="step-2-add-a-database">第2步：添加数据库</h5>
<p>填写数据库信息，然后单击下一步</p>
<h5 id="step-3-web-configuration">第3步：Web配置</h5>
<p>输入以下信息：</p>
<p>您的店铺地址： <code class="highlighter-rouge">http://www.example.com</code></p>
<p>Magento管理员地址：输入访问Magento管理员的相对URL。例如：secret, backend</p>
<p>然后点击 <code class="highlighter-rouge">Next</code></p>
<h5 id="step-4-customize-your-store">第4步：自定义您的商店</h5>
<ul>
<li>从商店默认时区列表中，单击商店时区的名称。</li>
<li>从商店默认货币列表中，单击要在商店中使用的默认货币。</li>
<li>从商店默认语言列表中，单击要在商店中使用的默认语言。</li>
<li>在安装Magento软件之前，展开&ldquo;Advanced Modules Configuration&rdquo;以选择性地启用或禁用模块。</li>
</ul>
<p><img class="lazy responsive-img alt=" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" /></p>
<p>点击 <code class="highlighter-rouge">Next</code></p>
<h6 id="important">重要！</h6>
<p>请谨慎使用单个模块跳过依赖性检查。我们建议不要使用它，因为此错误的典型原因是您手动编辑了部署配置。建议不要编辑部署配置，因为将来的Magento软件更新可以撤消您的更改。</p>
<h5 id="step-5-create-admin-account">第5步：创建管理员帐户</h5>
<p>要<a href="https://www.mageplaza.com/kb/how-to-create-new-admin-user-magento-2.html">创建新的管理员帐户，</a>您需要输入管理员信息，例如</p>
<ul>
<li>新用户名</li>
<li>新邮件</li>
<li>新密码</li>
<li>确认密码</li>
<li>然后单击下一步</li>
</ul>
<h5 id="step-6-install">第6步：安装</h5>
<p>完成安装向导中的所有上述步骤后，单击立即安装。</p>
<p>安装成功显示消息Success以指示安装成功。</p>
<p>现在去前端，后端看结果</p>
<p><strong>前端</strong></p>
<p><img alt="Magento 2 Demo前端" class="lazy responsive-img" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" /></p>
<p><strong>后端</strong></p>
<p><img alt="Magento 2演示后端" class="lazy responsive-img" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" /></p>
<h3 id="people-also-searched-for">其他人可能也在寻找</h3>
<ul>
<li>magento 2演示</li>
<li>magento 2的演示</li>
<li>magento 2工作演示</li>
<li>magento 2演示网站</li>
<li>magento 2演示访问</li>
<li>带有样本数据的magento 2演示</li>
<li>具有管理员访问权限的magento 2演示</li>
<li>magento 2 luma演示</li>
<li>magento 2前端演示</li>
<li>magento 2.0管理员演示</li>
<li>magento 2 luma主题</li>
<li>magento luma演示</li>
<li>nexcess magento 2演示</li>
<li>magento luma主题</li>
<li>magento luma主题演示</li>
</ul>
<div class="row">
<p>致此：<strong>Magento 2 Demo 演示介绍以已结速了</strong>。</p>
</div>
</div>
</div>]]></description>
      <pubDate>Wed, 13 Mar 2019 11:23:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[升级到Magento2的十大常见问题]]></title>
      <link>https://www.360magento.com/blog/magento-2-migrations-faq/</link>
      <description><![CDATA[<p>自2018年以来，<a href="https://www.360magento.com/magento-migration"><strong> Magento 1迁移到Magento 2</strong></a>一直是Magento社区中最热门的话题之一。目前，Magento 1超过一半的商店正在计划迁移，因为他们看到了很多Magento 2的潜力。虽然如此，剩下的人仍然想知道是否应将他们的网站从Magento 1迁移到Magento 2。他们不清楚Magento 2升级过程，担心Magento迁移时间和成本，并担心可能的数据丢失。此外，一些商家发现很难找到提供此类服务的优质Magento迁移服务/ Magento开发公司。</p>
<p>因此，我们希望通过一一解答下面10个最常见问题来帮助实施Magento 1到2迁移。这样，商家将会够理解Magento迁移过程中涉及的内容（例如：主题/数据/代码/扩展迁移），部署Magento 2迁移项目的预计时间和成本，以及如何寻找靠谱的专业magento公司等。</p>
<h2>1.我们应该何时将Magento 1迁移到Magento 2？</h2>
<p>我们的大多数客户都关注这个问题。他们经常向我们提出以下问题：</p>
<p><em>&ldquo;Magento 2稳定吗？&rdquo;</em></p>
<p><em>&ldquo;我们应该将Magento 1迁移到2吗？&rdquo;</em></p>
<p><em>&ldquo;Magento 2迁移的适当时机是什么时候？&rdquo;</em></p>
<p><em>&ldquo;永久运行Magento 1是否可能？&rdquo;</em></p>
<p>...</p>
<p>根据我们对Magento 2的经验 - 在尝试了所有版本之后，我们认为现在是将Magento 1迁移到2的最佳时间。回到1 - 2年前，可以说Magento 2是相当的不稳定，只有少量的主题和扩展。但是，随着时间的推移，我们已经看到了明显的改进，特别是<strong>Magento 2.2.5版本</strong>（2018年6月27日发布）以上。目前，Magento 2不仅向我们展示了它的稳定性，而且还提供了具有丰富功能及令人欣喜的性能。如果你能负担得起Magento的迁移成本，没有理由不升级到Magento的2。</p>
<p><img alt="magento 2迁移的时间" class="aligncenter size-full wp-image-7638" src="https://www.tigren.com/wp-content/uploads/2018/06/time-for-magento-2-migration.jpg" /></p>
<p>除此之外，可以在短期内继续运行Magento 1网站; 但从长远来看，您可能会遇到一些问题，例如：</p>
<ul>
<li>不再从Magento官方那里获得现有商店的免费支持</li>
<li>没有更多补丁和平台增强功能</li>
<li>难以从Magento 1模块开发商/提供商那里获得支持</li>
<li>从Magento社区获得较少的帮助</li>
<li>由于过时的设计和性能，被竞争对手抛在后面</li>
</ul>
<h2>2.如何将主题从Magento 1迁移到Magento 2？</h2>
<p>实际上，通过将当前主题移动到新网站，将主题从Magento 1迁移到2是不可能的。因此，我们必须选择以下方式：</p>
<ul>
<li>找到Magento 2的免费主题并将其安装在新网站（如果需要，可以定制）：<em>非常便宜+快速</em></li>
<li>为Magento 2购买优质的现成主题并将其安装在您的网站（如果需要，可以定制）：<em>便宜+快速</em></li>
<li>克隆旧的Magento 1网站，为Magento 2网站建立一个类似的网站（需要Magento 1 PSD设计或原有网站）：<em>费用较高+耗时</em></li>
<li>克隆您最喜欢的网站设计，为您的商店创建一个类似的网站：<em>费用较高+非常耗时</em></li>
<li>从头开始创建独特的设计：<em>非常昂贵+非常耗时</em></li>
</ul>
<p><img alt="magento 1到2迁移" class="aligncenter size-full wp-image-7684" src="https://www.tigren.com/wp-content/uploads/2018/07/magento-1-to-2-migration.png" /></p>
<p>根据您的要求，预算和时间，您可以采取适当的方法。对于预算较小的商家，我们建议您选择第二个选项 - 即用型Magento 2主题。市场上有很多精心设计的M2主题和模板 - 价格非常实惠。通过使用这些主题，您只需花费一周的时间在新网站上安装它，并根据需要进行一些小的自定义。相反，第三，第四和第五选择可能需要超过1个月才能进行，这也会增加相关成本。</p>
<h2>3.如何将扩展从Magento 1迁移到2？</h2>
<p>与主题迁移类似，Magento 2扩展迁移并不意味着将现有的Magento 1扩展转移到新网站。相反，我们需要为Magento 2购买新模块，这些模块提供与Magento 1相同的功能。这意味着如果您的网站高度依赖第三方插件（例如超过50个扩展），则需要购买新的可能是实质性的。因此，您最好修改所有当前模块和插件，然后确定哪些模块和插件需要迁移到Magento 2商店或删除。</p>
<p>购买新的Magento 2扩展后，您必须在新站点上安装它们以及解决可能的冲突。迁移的模块数量越多，花费的时间就越多。</p>
<h2>4.如何将数据从Magento 1迁移到Magento 2？</h2>
<p>Magento 2数据迁移是Magento 1到2迁移过程中最重要的步骤之一。我们需要将产品，类别，客户，销售订单，博客和CMS页面内容，推荐，评级和评论......转移到新网站。幸运的是，Magento为我们提供了免费的Magento数据迁移工具包，使这个过程变得更容易。</p>
<p><img alt="magento 2迁移" class="aligncenter size-large wp-image-7687" src="https://www.tigren.com/wp-content/uploads/2018/07/magento-2-migration-1024x272.png" /></p>
<p>但是，您需要具备强大的数据迁移知识和技能，以确保所有数据库的传输顺利，安全。在某些情况下，迁移由非专业开发人员实施，这会导致严重的客户数据丢失。因此，买家登录网站时需要再次注册一个新帐户，显然不是所有人都愿意。</p>
<h2><span style="font-size: 22px; font-weight: bold;">5.如何将自定义代码从Magento 1迁移到2？</span></h2>
<p>就理论而言，Magento 2代码迁移应该很容易，因为大多数代码在两个平台之间是兼容的。但现实是另一回事。如果您的站点有任何自定义模块，那么通过从头开始为Magento 2开发该模块而不是将其代码迁移到新站点，可以节省时间和精力。简而言之，建议找到一个Magento 2扩展，它可以为您的自定义模块提供相同的功能，或者为Magento 2构建一个类似的扩展。</p>
<h2><span style="font-size: 22px; font-weight: bold;">6.迁移Magento网站需要多长时间？</span></h2>
<p>这是一个棘手的问题。我们无法给您准确的时间来执行Magento 1到2迁移，因为它取决于您现有网站和您未来网站的复杂程度。</p>
<p>例如，如果你有20个新的Magento 2扩展，那么安装和配置肯定比你只有5到10个模块需要更多的时间。平均而言，插件安装和配置需要3-5个小时。</p>
<p>此外，正如我们之前提到的，使用现成主题仅需1周，而Magento主题迁移的其他方法至少需要1个月。</p>
<p><img alt="将magento 1迁移到2需要多长时间" class="aligncenter size-full wp-image-7688" src="https://www.tigren.com/wp-content/uploads/2018/07/how-long-does-it-take-to-migrate-magento-1-to-2.jpg" /></p>
<p>一般而言，您需要为Magento 1至2迁移准备1至5个月。<a href="https://www.360magento.com/migrate-magento-1-to-magento-2/"><strong>这里</strong> </a>是在最短的时间内升级您的网站的一些提示。</p>
<h2><span style="font-size: 22px; font-weight: bold;">7.从Magento 1到2进行迁移的成本是多少？</span></h2>
<p>这是另一个难题，因为有很多因素决定您的Magento迁移成本。如果您聘请Magento服务商迁移您的网站，Magento的总成本将取决于开发人员的每小时费率和完成项目的预计时间。</p>
<p>例如，在360Magento，我们提供极具竞争力的小时费率：Magento 2每小时120元。如果您选择我们的Magento迁移服务，并且您的项目总预计时间为150小时，则总成本为18,000元。然而，如果您与沿海一线城市服务商合作，每小时费率高（从每小时250元起），您的总费用将增加一倍 - 37,500元。</p>
<p><a href="https://www.tigren.com/contact/"><strong><img alt="magento迁移成本" class="aligncenter size-full wp-image-7689" src="https://www.tigren.com/wp-content/uploads/2018/07/magento-migration-cost.png" /></strong></a></p>
<p>现在就<a href="https://www.360magento.com/contacts/"><strong>联系我们</strong></a>，获取Magento迁移项目的<strong>免费咨询和评估报价</strong>！</p>
<h2>8.商家应该自己迁移到Magento 2还是找服务商进行Magento迁移服务？</h2>
<p>许多Magento站点老板想知道他们是否可以自己迁移Magento 1或者寻找Magento迁移服务。对于第一种选择，如果企业拥有专门的Magento开发人员，他们在Magento 1到2迁移方面拥有丰富的经验，那么没有理由将他们的项目外包。相反，如果商家只拥有没有任何技术技能的管理知识，显然他们必须与可靠的Magento开发公司合作来升级他们的网站。</p>
<p>Magento 2升级对于业余爱好者来说是一个非常复杂的过程，但在专业人士眼中却是一个简单的过程。与信誉良好的Magento开发商合作，必将成功有效地将Magento 1迁移到Magento 2。</p>
<h2>9.如何寻找可靠的Magento服务商进行Magento 1到2迁移？</h2>
<p>您选择的Magento开发商将确定您项目成功的90％。选择合作伙伴时有3个最基本的标准：质量，价格和服务：</p>
<ul>
<li>质量：那个Magento服务商有信誉吗？他们有多少年的经验（尤其是Magento和Magento的迁移）？他们所做的Magento迁移项目的质量如何？</li>
<li>价格：该服务商提供的Magento迁移费用在您的预算范围内吗？它是否比市场上的平均价格便宜/更高？价格是否值得来保证质量？</li>
<li>服务：他们是否为您的项目提供合理的建议？它们是否可以方便地跟踪和控制整个迁移过程？您是否创建了具有特定任务和里程碑的详细计划？完成迁移后，他们是否提供支持？</li>
</ul>
<p><img alt="magento迁移服务" src="https://www.360magento.com/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yMTkvbWFnZW50by1taWdyYXRpb24tc2VydmljZS0xMDI0eDU0Ny5qcGcifX0,/key/ba652bef27a996578690acbb4073ea99/" /></p>
<p>凭借在Magento超过7年的经验，<strong>360Magento</strong>有信心在您的预算范围内提供高质量的Magento迁移服务。此外，我们在您的网站上线后提供3个月的免费支持。<strong><a href="https://www.360magento.com/magento-migration">在此处</a>&nbsp;</strong>了解有关我们服务的更多信息或<a href="https://www.360magento.com/contacts/"><strong>联系我们</strong></a>以获取更多信息。</p>
<h2>10.实施Magento 1到2迁移后我们会得到什么？</h2>
<p>如果您的站点成功迁移到Magento 2，您将获得更好的网站设计，性能提升，现代管理界面和更丰富的用户体验等等。<strong><a href="https://www.360magento.com/blog/magento-migration-from-1-to-2/">在这里</a></strong>找到更多优秀的成绩。</p>
<p>综上，Magento 1到2的迁移值得您花费时间，金钱和精力！</p>
<h2>结论</h2>
<p>希望此常见问题解答能帮助您了解有关Magento 1到2迁移过程的更多信息。</p>
<p><em>首先</em>，进行Magento网站迁移的最佳时机是现在，因为Magento 2稳定，与之前的版本相比具有许多有用的功能和增强功能。</p>
<p><em>其次</em>，不可能继续使用Magento 1主题和扩展并将它们移动到Magento 2.相反，你必须为新网站购买新的主题。</p>
<p><em>第三</em>，由于可能的数据丢失，在将数据从Magento 1迁移到2时必须非常小心。</p>
<p><em>第四</em>，您最好重新开发Magento 2的自定义模块，而不是迁移自定义代码。</p>
<p><em>第五</em>，Magento迁移项目的时间和成本取决于现有站点的复杂程度和新站点的要求，以及您选择的Magento服务商的每小时费率。</p>
<p><em>第六</em>，如果您缺乏Magento 2迁移的知识和经验，建议与声誉良好的Magento开发公司合作升级您的网站。</p>
<p><em>第七</em>，选择Magento迁移服务有很多标准，但最重要的标准是质量，成本和服务。</p>
<p><em>最后但同样重要的是</em>，Magento迁移不会让您失望，因为它提供了一个从设计到功能更好的网站。</p>
<p>360Magento是高品质Magento迁移服务的最佳选择之一，价格合理。将您的请求发送至<strong><a href="mailto:sales@360magento.com">sales@360magento.com</a></strong>获取免费报价和咨询！</p>]]></description>
      <pubDate>Mon, 04 Mar 2019 07:13:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 1迁移到Magento2有什么好处？]]></title>
      <link>https://www.360magento.com/blog/magento-migration-from-1-to-2/</link>
      <description><![CDATA[<p>您知道现在有四分之一的电子商务企业正在使用Magento吗？近年来，Magento已成为最流行的电子商务平台之一，在全球拥有超过25万家电商网站。此外，这些电商网站中的大多数都是以Magento为基础或计划将Magento从1迁移到2。虽然Magento 1已经是一个具有各种惊人功能的优秀平台，但Magento 2可以带来<em>更多</em>。如果您对于迁移到Magento 2有分歧，那么这篇博文将通过展示实现从<a href="https://www.360magento.com/magento-migration">Magento1迁移到2</a>后将会得到什么来帮助您更轻松地做出决定。之后，您可以考虑Magento 2升级是否值得。让我们开始吧！</p>
<h2 class="post-title">1.明显的性能提升</h2>
<p>与Magento 1相比，Magento 2具有卓越的性能。具体来说，大多数Magento 2网站在不同页面上的页面加载速度比Magento 1快50％。此外，在Magento 2上开发的网站可以提供更快的结账，同时处理更多订单和页面浏览，等等。为了实现这一目标，Magento 2结合了以下功能：</p>
<ul>
<li><strong>允许全页面缓存：</strong> &nbsp;由于具有整页缓存功能，Magento 2网站中的所有页面都能够在1-2秒内快速加载，没有缓存即可10秒加载。此外，全页缓存提供了以最佳速度同时处理多个目录页面的能力。</li>
<li><strong>包括Varnish缓存：&nbsp;</strong>Varnish缓存是另一个有价值的内置Web应用程序加速器，它在减少相关请求的响应时间和网络带宽利用率方面发挥着重要作用。</li>
<li><strong>支持PHP的最新版本：&nbsp;</strong> Magento 2支持最新版本的PHP（5.x - 7.x），它提供了许多功能以​​提高网页速度。</li>
<li><strong>减少JavaScript：</strong> &nbsp;在Magento 2中，JavaScript的数量被最小化，以便拒绝冗余浏览器的操作。</li>
<li><strong>优化图像：</strong> Magento 2允许我们使用内置工具轻松地直接在服务器上压缩和优化所有图像。</li>
<li><strong>应用MySql的最新版本：</strong> Magento 2使用最新版本的MySql，旨在增强查询，重新索引和缓存过程。</li>
</ul>
<p>&nbsp;</p>
<h2 class="post-title">2.方便的管理界面</h2>
<p>在将Magento从1迁移到2之后，您将获得一个先进，干净且用户友好的管理界面。以下是在Magento 2管理界面上管理商店的一些好处：</p>
<ul>
<li><strong>易于使用：</strong>与Magento 1管理面板相比，即使您没有技术背景，这个新界面看起来更现代，更易于使用。从新的调色板到智能结构，所有这些都使得直观地导航和管理商店变得更加方便。</li>
</ul>
<p style="text-align: center;"><em>Magento 1管理员面板</em></p>
<p><img alt="将magento 1迁移到magento 2" class="aligncenter size-large wp-image-7424" src="https://www.tigren.com/wp-content/uploads/2018/06/migrate-magento-1-to-magento-2-1024x745.png" /></p>
<p><img alt="magento 1到magento 2" class="aligncenter size-large wp-image-7425" src="https://www.tigren.com/wp-content/uploads/2018/06/magento-1-to-magento-2-1024x700.png" /></p>
<p>&nbsp;</p>
<p style="text-align: center;"><em>Magento 2仪表板</em></p>
<p><img alt="magento 2迁移" class="aligncenter size-large wp-image-7426" src="https://www.tigren.com/wp-content/uploads/2018/06/magento-2-migration-1024x745.png" /></p>
<p><img alt="magento商店迁移" class="aligncenter size-large wp-image-7427" src="https://www.tigren.com/wp-content/uploads/2018/06/magento-store-migration-1024x700.png" /></p>
<ul>
<li><strong>可自定义：</strong> Magento 2管理界面的一个特殊之处在于它允许我们选择将要/不要显示哪种类型的信息以便快速访问所需信息。例如，在&ldquo;产品管理&rdquo;页面中，您可以通过在&ldquo;列&rdquo;复选框上进行标记来选择要显示的不同产品数据（ID，类型，价格，状态，缩略图，SKU等）。</li>
</ul>
<p><img alt="比较magento 2和magento 1" class="aligncenter size-large wp-image-7428" src="https://www.tigren.com/wp-content/uploads/2018/06/compare-magento-2-and-magento-1-1024x569.jpg" /></p>
<ul>
<li><strong>响应：</strong>此管理面板的另一个有用功能是它针对各种屏幕尺寸进行了优化。由于这个原因，商店所有者可以使用从台式机，笔记本电脑到智能手机的任何设备轻松管理他们的商店。特别是，在出差时，他们仍然可以在平板电脑上轻松监控商店的运营。</li>
<li><strong>更快：</strong>在Magento 2后端，我们可以轻松快速地批量创建，导入，编辑产品或客户信息。</li>
</ul>
<p>总体而言，Magento 2管理面板针对开发人员和商家进行了优化，以有效管理网站。</p>
<h2 class="post-title">3.响应式和适合移动设备的网站设计</h2>
<p>如今，人们倾向于使用各种设备进行在线购物，特别是在他们的移动手机上。因此，优化网站设计以使其在各种设备上都能很好地呈现是至关重要的。幸运的是，Magento 2店面具有响应性和移动友好性。因此，移动和桌面用户都可以享受用户友好和吸引人的商店外观以及快速的页面加载速度。</p>
<h2 class="post-title"><img alt="magento 2响应式设计" class="aligncenter size-large wp-image-7430" src="https://www.tigren.com/wp-content/uploads/2018/06/magento-2-responsive-design-1024x296.png" /></h2>
<h2 class="post-title"></h2>
<p>&nbsp;</p>
<h2 class="post-title">4.良好的用户体验</h2>
<p>为购物者带来更好的体验将为促进Magento商店的销售和提高转换率做出巨大贡献。由于Magento从1迁移到2，您的用户体验将显著提升：</p>
<ul>
<li><strong>快速且用户友好的结账：</strong>结账是Magento 2最出色的功能之一。它是一个平稳而简单的两步流程，帮助客户尽快完成订单。因此，Magento 2商店结账的时间最小化，导致购物车放弃率显著下降，同时提高销售转化率。</li>
</ul>
<p><img alt="为什么magento 2" class="aligncenter size-full wp-image-7431" src="https://www.tigren.com/wp-content/uploads/2018/06/why-magento-2.jpg" /></p>
<p>此外，Magento 2提供&ldquo;访客结账&rdquo;功能，以便非注册购买者仍然可以轻松下订单并在结账后创建新帐户（如果需要）。此外，对于注册用户，他们只需要在结账页面输入他们的电子邮件地址，然后自动填写他们保存的信息（姓名，运送和账单地址，电话号码）。</p>
<ul>
<li><strong>个性化内容：</strong>在迁移到Magento 2网站中，您将能够跟踪用户的行为，他们喜欢的项目和搜索历史记录。基于该有价值的信息，商店所有者可以提供更适当的产品和服务，并为他们的不同客户群举行适当的促销活动。因此，买家可能会感到更受尊重并对商店更加忠诚。</li>
<li><strong>持久购物车：</strong>这是一个有趣的Magento 2电子商务商店。一旦买家登录他们的帐户，所有与他们所查看的产品，产品比较，愿望清单以及特别是购物车相关的信息将保留用于下次访问。这样，购物者不需要在最后一次访问时再次搜索他们喜欢的物品，而是立即继续他们的购物。</li>
<li><strong>方便的搜索和分层导航：</strong>对于任何电子商务网站，搜索和导航菜单至关重要，因为它为客户打开了一扇门，可以发现各种各样的产品。在Magento 2中，有用的搜索功能允许用户快速有效地查找喜欢的项目。此外，分层导航使买家能够轻松过滤产品并获得相关结果。</li>
<li><strong>内容丰富的产品页面：</strong> Magento 2的产品页面提供非常丰富的信息，包括视频，带缩放和色板的图像，评级和评论，......</li>
</ul>
<p>&nbsp;</p>
<h2 class="post-title">5.多种支付方式</h2>
<p>说Magento 2平台拥有多个流行支付网关的最佳支付系统之一，这是真的：<br /> <img alt="magento 2付款方式" class="aligncenter size-large wp-image-7434" src="https://www.tigren.com/wp-content/uploads/2018/06/magento-2-payment-methods-1024x576.png" /></p>
<ul>
<li>PayPal</li>
<li>Braintree</li>
<li>Amazon Pay</li>
<li>Klarna Payments</li>
<li>Authorize.net</li>
</ul>
<p>通过这种多样化的选择，客户可以快速，安全地完成付款。此外，Magento 2企业版还与Cyber​​Source和WorldPay集成，以确保所有交易都以最高的安全性进行。</p>
<h2 class="post-title">结论</h2>
<p>虽然Magento从1迁移到2可能需要你的时间和金钱，但值得你的努力。实施升级后，您将获得最高的网站性能，现代便捷的管理界面，响应和移动友好的设计，改善的客户体验和各种安全支付方式。顺便说一句，如果您正在寻找一个可靠的Magento开发公司将您的网站迁移到Magento 2，360Magento是最好的选择之一。凭借在Magento电子商务开发方面的丰富经验，我们有信心帮助您顺利地以可承受的成本<a href="https://www.360magento.com/magento-migration">从1到2进行Magento迁移</a>。现在就<em><strong><a href="http://www.360magento.com/contacts/">联系我们</a></strong></em>，获取您项目的免费报价。</p>]]></description>
      <pubDate>Fri, 01 Mar 2019 07:16:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何建立Magento电商网站？分步指南]]></title>
      <link>https://www.360magento.com/blog/build-magento-website/</link>
      <description><![CDATA[<p>许多调查显示，电子商务网站在电子商务行业中占据了很大的一部分，仅次于时尚行业。此外，预计电子商务网站数量将在2019年大幅增加，这篇如何从头开始创建电商网站的指南将非常有用。希望成为您的参考。</p>
<h2>7个步骤开发电子商务网站</h2>
<p>实际上，创建一个电子商务网站是一个漫长的过程，可能需要大量的时间，金钱和精力。有各种各样的大事和小事可做。但是，在这篇博文中，我们讲从头开始开展电子商务业务的七个基本步骤！</p>
<h3><em>第1步：为您的电子商务网站选择合适的平台</em></h3>
<p>谈到电子商务平台，有各种各样的选择（例如：Shopify，WooCommerce，Magento，Prestashop，OpenCart，Wix，3dCart，osCommerce，Drupal等）。关于<a href="https://www.360magento.com/blog/top-ecommerce-platforms/">开源电子商务平台</a> &nbsp;（免费）将有超过30个选项供您选择。</p>
<p><img alt="在magento上开发电子商务电子商店" class="size-full wp-image-10516" src="https://www.tigren.com/wp-content/uploads/2019/02/develop-electronics-ecommerce-store-on-magento.jpg" /></p>
<p>尽管如此，我们认为Magento将是您电子电子商务网站的最佳选择，原因如下：</p>
<ul>
<li>Magento是目前最受欢迎的电子商务平台之一</li>
<li>Magento有两个版本：Magento Open Source（免费）和Magento Commerce（商业版）</li>
<li>Magento提供电子网站所需的所有基本电子商务功能</li>
<li>Magento灵活且易于定制</li>
<li>Magento网站设计是移动友好的，默认响应性设计</li>
<li>Magento允许多种货币，多语言，多商店</li>
<li>Magento提供专业的站点管理仪表板</li>
<li>Magento对搜索引擎优化非常友好，这对于电子商务网站来说至关重要</li>
<li>有许多<a href="http://www.magego.com/" target="_blank">Magento模板和主题</a>供您选择</li>
<li>Magento的官方支持非常及时</li>
</ul>
<p>您可以在我们之前的博客文章中找到<a href="https://www.360magento.com/blog/magento-advantages/">Magento电子商务网站开发的</a>更多优势。</p>
<p>选择合适的平台将在您的电子商务网站开发中发挥重要作用，因此您需要投入时间！</p>
<h3><em>第2步：根据您选择的电子商务平台准备预算</em></h3>
<p>你知道建立一个电子商务网站需要多少钱吗？这是一个棘手的问题，不是吗？</p>
<p>实际上，创建一个在线销售电子产品的电子商务网站的价格是多种多样的，这取决于您选择的平台、您对网站设计和功能的要求，以及您的网站开发公司的工时费等因素的组合。</p>
<p><img alt="从头开始开展电子商务业务" class="aligncenter size-full wp-image-10515" src="https://www.tigren.com/wp-content/uploads/2019/02/starting-an-ecommerce-business-from-scratch.jpg" /><br /> 例如，假设您决定使用Magento开发网站并与360Magento合作开发一个简单的Magento电子商务网站（使用现成的主题并采用Magento默认功能），它可能需要花费12,000-30,000元人民币。此外，创建您的电子商务网站可能需要1-3个月。<a href="https://www.360magento.com/contacts/">联系我们</a>以获取项目的详细建议（包括预估的时间和费用）。</p>
<h3><em>第3步：提出有关电子电子商务网站设计的想法</em></h3>
<p>毫无疑问，规划网站设计是开始开发过程之前的第一步。通常，电子商务网站设计有两种选择：</p>
<ul>
<li style="list-style-type: none;">
<ul>
<li><em>基于电子商务网站模板开发您的网站。</em>从主题市场或主题提供商处购买或下载模板后，您只需将其安装在网站上并在必要时进行一些自定义。有免费和付费电子商务电子商务模板供您选择。对于预算紧张或需要快速设计解决方案的中小型电子商务来说，这是一种完美的方法。</li>
</ul>
</li>
</ul>
<p><img alt="免费电子magento主题" class="aligncenter size-full wp-image-10517" src="https://s3u.tmimgcdn.com/124595-1542621099785_4.jpg?width=1440" /></p>
<ul>
<li><em>从头开始设计新的电子商务网站设计。</em>如果您需要的是一种独特的设计，使您的电子商务网站与竞争对手不同并脱颖而出，这是一个理想的解决方案。但是，使用网页设计师全新设计需要花费大量时间，并且开发人员需要更多时间将PSD设计转换为实际网站模板。因此，比使用现成的网站模板设置电商网站所需的成本会高得多。</li>
</ul>
<h3><em>第4步：考虑电子商务网站的必备功能</em></h3>
<p><img alt="如何在线销售电子产品" class="aligncenter size-full wp-image-10519" src="https://www.tigren.com/wp-content/uploads/2019/02/how-to-sell-electronics-online.png" /><br /> 每个电子商务网站都有一定的要求列表，您需要在其他步骤之前澄清该列表。以下是您在电子商务网站功能方面需要考虑的一些要素：</p>
<ul>
<li>语言</li>
<li>货币</li>
<li>支付网关，支付方式</li>
<li>送货方式，运输公司</li>
<li>结帐流程</li>
<li>页面速度</li>
<li>电邮模板</li>
<li>横幅管理</li>
<li>社交登录，访客登录</li>
<li>第三方整合</li>
<li>...</li>
</ul>
<h3><em>第5步：购买并注册您的域名，主机，支付网关，运输公司</em></h3>
<p>据我们所知，一些店主甚至在开始他们的电子商务网站设计和开发之前很长一段时间都已经购买和注册了他们的域名，以避免丢失给任何人。一般来说，获取新域名的成本并不重要，除了一些热门和理想的域名，因此您应该尽快注册您喜欢的域名。</p>
<p>与域名不同，您不需要立即选择主机托管，而是列出可靠托管服务列表供以后选择。值得注意的是，如果您选择托管平台，则可以忽略此步骤。</p>
<p><img alt="如何创建电子商店电子商务网站" class="aligncenter size-full wp-image-10522" src="https://www.tigren.com/wp-content/uploads/2019/02/how-to-create-electronic-store-ecommerce-website.png" /><br /> 此外，选择支付网关和运输公司对您的电子商务网站也至关重要。您必须先定义这些，然后找到将它们集成到您的在线商店的方法。例如，您的网站基于Magento，您选择Stripe作为支付网关，然后您必须找到将Stripe集成到您网站的扩展程序。</p>
<h3><em>第6步：寻找值得信赖的电子商务网站设计和开发公司</em></h3>
<p>完成上述所有步骤后，您可以想象您的电子商务网站将如何运作。但是，它们都只是你头脑中或文档中的想法和计划。要将这些想法变为现实，您必须找到一个优秀的网站开发服务商来实施您的项目。</p>
<p>问题是你不应该寻找一般的&ldquo;电子商务网站开发公司&rdquo;或&ldquo;电子商务网站设计公司&rdquo;，因为你会被大量的网络代理商所淹没。</p>
<p>相反，如果你确定Magento是你的平台，那么寻找&ldquo;Magento开发公司，Magento服务商，Magento电子商务网站开发商，Magento开发商，Magento专家......&rdquo;。</p>
<p>顺便说一下，如果您正在寻找一家价格合理且实力强的Magento网页设计和开发公司，360Magento是首选之一。凭借在Magento开发方面超过7年的经验，我们一定会帮助您建立一个令您满意的电子商务网站，满足您的所有需求和要求。</p>
<p>不要犹豫<a href="https://www.360magento.com/contacts/">与我们联系，</a>并告诉您的电子商务网站开发项目需求！</p>
<h3><em>第7步：部署您的电子商务电子商店设计和开发流程</em></h3>
<p>一旦您有一个良好的电子商务网站开发计划，并选择合适的开发服务商，项目实施将更容易。</p>
<p>在大多数情况下，该服务商将负责在开始之前为您提供详细的项目建议和时间表（时间表）。因此，您只需向他们提供所需的信息和材料（例如：主题，扩展，支付网关帐户），并按照截止日期测试结果。</p>
<h2>那么，我们如何开始为电子商务制作电子商务网站？</h2>
<p>如前所述，我们在Magento以及电子商务开发方面拥有超过7年的经验。如果您给我们机会建立您的电子商务网站，并为您的电子商务从头开始奠定坚实的基础，我们永远不会让您失望。</p>]]></description>
      <pubDate>Mon, 25 Feb 2019 10:05:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento电子商务发展的20大优势]]></title>
      <link>https://www.360magento.com/blog/magento-advantages/</link>
      <description><![CDATA[<p class="ui_qtext_para">&nbsp;随着过去几年Magento电子商务发展的爆发，网上购物已经变得非常普遍&nbsp; 。虽然有许多电子商务平台，如Shopify，BigCommerce，3Dcart，Volusion，但Magento仍然处于领先地位，全球用户超过25万。</p>
<p class="ui_qtext_para">必然有一些原因。在本文中，我想提供20个使Magento电子商务网站开发成为趋势的理由。</p>
<h2><strong>Magento是开源的</strong></h2>
<p class="ui_qtext_para">您可能知道，Magento是一个开源平台，这意味着：</p>
<ul>
<li>它为您提供了大量的自定义和集成选项。</li>
<li>它甚至会在未来发展得更多。</li>
<li>它可以免费为所有商家获得。只需在您的服务器上下载并安装Magento，无需支付任何许可费用。</li>
</ul>
<h2><strong>2.自定义网页设计/界面</strong></h2>
<p>在Magento中，有各种CSS自定义选项可供您的网页设计使用。此外，Magento支持团队可能会为您提供有关响应式网站设计的最新趋势和提示的宝贵信息。</p>
<h2><strong>3.适合移动设备的特性</strong></h2>
<p>了解现在人们倾向于使用智能手机购买东西，Magento允许您构建可在平板电脑，智能手机和其他移动设备上查看的响应式网站，而不会有任何复杂度。</p>
<p><img alt="使用magento的好处" class="aligncenter size-full wp-image-10157" src="https://s.tmimgcdn.com/scr/62000/62000-en_10.jpg" /></p>
<h2><strong>4. SEO支持</strong></h2>
<p>在搜索引擎优化方面，Magento为您的产品和服务提供了大量机会，可以在Google和其他热门的SERP上展示。更具体地说，它允许您创建SEO所需的友好URL和Meta元素选项。因此，Magento帮助我们解决页面流量，重复内容，索引等不同的SEO问题。</p>
<h2><strong>5.快速的页面加载</strong></h2>
<p>Magento以其令人难以置信的快速网页加载而闻名。您的网络加载速度越快，商店访问者就能收到的信息越快，这会让您的销售和转化率显着提高。</p>
<h2><strong>6.灵活的托管选项</strong></h2>
<p>与其他平台不同，&nbsp;Magento电子商务开发&nbsp;使您可以自由选择任何托管解决方案提供商。</p>
<h2><strong>7.允许多网站生成</strong></h2>
<p>Magento为您提供了在单个后端/管理面板上托管多个网站的强大功能。换句话说，使用Magento，您的商店可以通过其独特的产品目录，设计和相互业务结构中的功能单独设置。</p>
<p><img alt="为什么Magento是最好的电子商务平台" class="aligncenter size-full wp-image-10158" src="https://www.tigren.com/wp-content/uploads/2019/01/Why-is-Magento-best-ecommerce-platform.png" /></p>
<h2><strong>8.多种货币和语言支持</strong></h2>
<p>目前大多数电子商务平台在各种货币和语言方面都没有选择，但Magento电子商务网站开发支持全球所有货币和语言。对于面向广泛地理受众的网站而言，此功能非常有价值。</p>
<h2><strong>9.第三方整合</strong></h2>
<p>通过使用Magento，您可以轻松地将您的网站与不同的支付网关和Web应用程序集成，如PayPal，Google Shopping，MailChimp，eBay，QuickBooks等等。</p>
<h2><strong>10.惊人的默认功能</strong></h2>
<p>Magento包含了您在电子商务网站中所期望的一切，包括高级搜索，愿望清单，收藏夹，产品比较，电子邮件列表，以及不同类型的产品等。这些功能将为您提供坚实的基础。为您的用户提供卓越的体验和满意度。</p>
<h2><strong>11. Magento很灵活</strong></h2>
<p>无论您的业务规模，预算，要求如何，您仍然可以找到适当版本的Magento。例如，Magento Go适合小公司，Magento Enterprise是中型和大型公司的完美匹配。</p>
<h2 class="ui_qtext_para"><strong>12.方便开发人员和管理员</strong></h2>
<p>在Magento电子商务开发中，开发人员能够轻松更新内容，向网站添加新页面，将页面链接到子导航或主导航。同时，对于网站所有者/管理员来说，即使他们缺乏高级编程技能和专业知识，它也很容易使用。但是，如果您在管理Magento网站时遇到任何困难，可以向可靠的Magento电子商务网站开发公司寻求帮助。</p>
<p><img alt="我为什么要使用Magento" class="aligncenter size-full wp-image-10159" src="https://www.tigren.com/wp-content/uploads/2019/01/Why-should-I-Use-Magento.png" /></p>
<h2 class="ui_qtext_para">13.方便快捷的结账</h2>
<p>智能Magento购物车将帮助您的客户逐步完成购买所需产品的过程。通常，结账过程简单快捷，因此可以最大限度地减少购物车的放弃。</p>
<h2 class="ui_qtext_para"><strong>14.轻松与Google服务集成</strong></h2>
<p>关于Magento网站开发的另一个好处是，Google Analytics，Google Checkout和Google Base等大多数Google服务都可以毫不费力地集成到您的网站中。</p>
<h2><strong>15.简单而智能的编码</strong></h2>
<p>与其他平台相比，可以说Magento核心代码并不太复杂，因为它可以很容易地与第三方编码集成。更重要的是，Magento不会受到未来升级的扩展或附件的干扰。</p>
<h2><strong>16.有效的报告制度</strong></h2>
<p>从后端，您可以获得有关网站性能的详细报告，指出现在的&ldquo;热门产品&rdquo;或缺货的内容，等等。这样，您的企业可以提出更好的策略来促进销售。</p>
<p><img alt="Magento是一个很好的电子商务平台" class="aligncenter size-full wp-image-10160" src="https://www.tigren.com/wp-content/uploads/2019/01/Is-Magento-a-good-ecommerce-platform.png" /></p>
<h2><strong>17.适合营销</strong></h2>
<p>Magento电子商务网站&nbsp;为您提供一系列有用的工具来推广您的业务。优惠券，私人销售，目录定价，阶梯定价等等。此外，您还可以展示一些相关产品，以加强交叉销售和追加销售。</p>
<h2><strong>18.有用的内容管理</strong></h2>
<p>Magento配备了一个直观且高度可视化的页面编辑器，名为&ldquo;所看即所得（WYSIWYG）&rdquo;。由于这个完美的工具，Magento商店所有者可以在没有技术知识的情况下轻松地更改他们的网页。</p>
<h2><strong>19.安全的电子商务网站</strong></h2>
<p>通过Magento开发，您可以使用多级安全权限保护您的网站并有效管理内部访问。您可以生成二级密码以禁止意外泄露。此外，Magento还具有CAPTCHA和PCI数据安全性，可提供最大程度的保护。</p>
<h2><strong>20. 强大的Magento社区</strong></h2>
<p>截至目前，已有超过375,000名会员参与Magento电子商务开发<a href="https://magento.com/community">社区</a>。因此，当您发现网站出现任何问题时，寻求帮助并不困难。</p>
<p><img alt="为什么选择magento开发" class="aligncenter size-full wp-image-10165" src="https://www.tigren.com/wp-content/uploads/2019/01/why-magento-development-1.jpg" /></p>
<h2><em><strong>你现在需要Magento电子商务网站开发吗？</strong></em></h2>
<p class="ui_qtext_para">毫无疑问，Magento是一个近乎完美的电子商务平台，可满足所有在线购物偏好。&nbsp;Magento电子商务开发&nbsp;带来了无限的优势，从安全的购物体验，无缝的产品管理到简单的第三方集成，这些都有助于推动业务增长。</p>
<p class="ui_qtext_para">作为最负盛名的Magento开发公司之一，360Magento将帮助您以最低的成本在一到三个月后建立一个令您满意的电子商务网站。现在就<a href="https://www.360magento.com/contacts/"><strong>联系</strong> </a>我们的团队，为您的企业获得全面的Magento网站开发计划！</p>]]></description>
      <pubDate>Thu, 10 Jan 2019 09:59:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[2019年排名前30位的开源电子商务平台]]></title>
      <link>https://www.360magento.com/blog/top-ecommerce-platforms/</link>
      <description><![CDATA[<p>近年来，我们看到了电子商务行业的强劲增长。从我们的角度来看，这种绽放的贡献者之一是当大多数电子商务平台可以免费获得时，该行业的容易进入。在本文中，我们将向您展示30个开源电子商务平台的列表，这些平台目前已广泛使用。所有这些都为您提供了各种自定义选项，可扩展性和巨大的社区支持。我们现在发现吧！</p>
<h2>顶级开源电子商务平台为您的在线业务提供动力</h2>
<h3><a href="https://magento.com/products/open-source" rel="nofollow">1. Magento开源（原Magento社区版）</a></h3>
<p><strong><img alt="magento社区开源电子商务平台" class="aligncenter size-full wp-image-6125" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-community-open-source-ecommerce-platform.png" /></strong></p>
<p>您可能知道，Magento是当今最强大的电子商务平台之一，在全球拥有超过25万名店主，150,000名开发人员和300多个解决方案合作伙伴。</p>
<p>如果您梦想拥有像三星，耐克或联想这样令人惊讶的电子商务网站，它们使用Magento企业版，每年的成本为16,000美元，如果只有中小型预算，那么请使用Magento开源平台。</p>
<p>尽管只是Magento的免费版本，但该平台为您提供了大量专门用于电子商务的功能，如响应式设计，快速加载页面，多商店/语言/货币，SEO支持等。</p>
<p>而且，Magento Open Source非常灵活，允许您自由定制平台，构建一个独特而充满活力的网站。</p>
<p>可以说，这个开源电子商务平台不仅适用于中小型电子商务的预算，而且能够从头开始推动这些公司的发展。</p>
<p><strong>Magento电子商务商店：</strong></p>
<ul>
<li>Christian Louboutin</li>
<li>Grenson</li>
<li>Erdem</li>
<li>Varley</li>
<li>Bucherer</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://woocommerce.com/" rel="nofollow">&nbsp;2. WooCommerce</a></h3>
<p><img alt="woocommerce开源平台" class="aligncenter size-full wp-image-6130" src="https://www.tigren.com/wp-content/uploads/2018/03/woocommerce-open-source-platfrom.png" /></p>
<p>我们要提到的第二个开源购物车平台是WooCommerce，这是一个非常免费的WordPress插件 - 全球最大的内容管理系统（CMS）。WooCommerce的下载量约为3100万，现在已经为所有电子商务商店的四分之一提供了动力。</p>
<p>WooCommerce是一个完全开源，高度可定制和灵活的电子商务平台。它提供了大量的电子商务功能，包括各种类型的产品和支付网关，税控，交付设置，库存跟踪，折扣和优惠券系统等。</p>
<p>一个有趣的事情是，这个平台使公司可以通过安装附加组件轻松地为他们的商店创建移动应用程序。</p>
<p>然而，WooCommerce的最大优势也是它的劣势。对于那些使用WordPress的人来说，这只是一个合适的电子商务解决方案。</p>
<p><strong>WooCommerce电子商务商店</strong></p>
<ul>
<li>New Balance</li>
<li>Subaru</li>
<li>Hemline</li>
<li>AB Aeterno</li>
<li>Wakami</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.prestashop.com/en" rel="nofollow">3. PrestaShop</a></h3>
<p><img alt="prestashop电子商务平台开源" class="aligncenter size-full wp-image-6132" src="https://www.tigren.com/wp-content/uploads/2018/03/prestashop-ecommerce-platfrom-open-source.png" /></p>
<p>与Magento类似，PrestaShop吸引了全球超过250,000名商家，并得到了广大社区的支持（超过100万会员）</p>
<p>PrestaShop是一个免费的电子商务平台，可帮助电子商务成功开发和运营其在线商店。</p>
<p>安装和自定义此平台只需要一点点努力，因为大多数事情都是直观的。有3,000种功能和2,000种模板供您选择。此外，您可以下载完全托管或自托管的PrestaShop版本。</p>
<p>然而，一些用户抱怨说，没有很多东西可以用Prestashop定制，除非你购买了额外的主题并深入挖掘其代码。</p>
<p><strong>PrestaShop电子商务商店</strong></p>
<ul>
<li>McDonald</li>
<li>Zippo</li>
<li>Bolina Sail</li>
<li>Atelier81</li>
<li>Pop-line</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://wpecommerce.org/addons/" rel="nofollow">4. WP电子商务</a></h3>
<p><img alt="开源wp电子商务平台" class="aligncenter size-full wp-image-6135" src="https://www.tigren.com/wp-content/uploads/2018/03/open-source-wp-ecommerce-platform.png" /></p>
<p>尽管比WooCommerce知名度低，但WP电子商务也是为WordPress用户开发的最好的开源电子商务平台之一。它获得了令人印象深刻的下载量 - 在过去几年中超过300万次。</p>
<p>WP电子商务为我们提供了一系列有用的电子商务功能，例如多层定价，营销工具，送货方式。此外，它使您可以灵活地选择从PayPal，Worldpay，ProPay到Authorize.net或Stripe的支付网关。</p>
<p>更重要的是，专业和专注的支持团队是WP电子商务的巨大优势。在大多数情况下，他们对您的查询反应非常快（平均在6小时内）。</p>
<p><strong>WP电子商务商店</strong></p>
<ul>
<li>Mayrun&rsquo;s Goods</li>
<li>MollyMeg</li>
<li>Cronut</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.3dcart.com/" rel="nofollow">5. 3dcart</a></h3>
<p><img alt="3dcart开源平台" class="aligncenter size-full wp-image-6136" src="https://www.tigren.com/wp-content/uploads/2018/03/3dcart-open-source-platform.png" /></p>
<p>谈到开源电子商务平台，3dcart将是您考虑的可靠选择。这个平台几乎包含您在线商店所需的一切：为商店所有者提供便利的管理系统，为购物者提供有吸引力的店面以及为搜索引擎提供友好的网站。</p>
<p>由于这些功能，您可以轻松克服运行在线商店的所有挑战，尤其是从一开始。</p>
<p>此外，3dcart提供24/7免费高级技术支持，快速设置和无交易费用 - 我们都需要从电子商务平台获得的东西。</p>
<p><strong>3dcart电子商务商店</strong></p>
<ul>
<li>Blue Diamond Almonds</li>
<li>Cool Gem Shop</li>
<li>TC Life Safety</li>
<li>Mill Supplies</li>
<li>KBS Coatings</li>
</ul>
<h3><a href="https://drupalcommerce.org/" rel="nofollow">6. Drupal Commerce</a></h3>
<p><img alt="drupal商务平台" class="aligncenter size-full wp-image-6138" src="https://www.tigren.com/wp-content/uploads/2018/03/drupal-commerce-platform.png" /></p>
<p>我们想要介绍的另一个全球开源电子商务平台是Drupal Commerce，它是在Drupal上构建的。</p>
<p>Drupal Commerce支持多种货币，多语言，智能管理系统，简单的购物车和结账。此外，该平台具有高度的灵活性和SEO友好性。</p>
<p>此外，Drupal Commerce已经与几个方便的第三方应用程序集成。</p>
<p><strong>Drupal商店</strong></p>
<ul>
<li>Guerlain</li>
<li>Lush</li>
<li>Cartier</li>
<li>EuroCentres</li>
<li>Bordas</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.opencart.com/" rel="nofollow">7. OpenCart</a></h3>
<p><img alt="opencart平台" class="aligncenter size-full wp-image-6141" src="https://www.tigren.com/wp-content/uploads/2018/03/opencart-platform.png" />如果我们在这个顶级开源电子商务平台列表中没有提到OpenCart，那将是一个很大的错误。到目前为止，OpenCart已被超过550K的电子商务商店广泛使用。</p>
<p>这个平台用PHP编写，非常适用于那些没有很多编程经验的电子商务初创公司（小公司）。此外，OpenCart还提供了大量的插件和主题，以提升您的商店设计和功能。</p>
<p>在功能方面，OpenCart支持多种货币，多语言，支持8种送货方式和多达20种不同的支付网关。</p>
<p>此外，活跃的社区是这个平台的优势。您可以轻松地从全球超过110k的OpenCart用户那里获得支持。</p>
<p><strong>OpenCart </strong> <strong>电子商务商店：</strong></p>
<ul>
<li>Missy Empire</li>
<li>British Red Cross</li>
<li>Shore Lines</li>
<li>Arrowfile</li>
<li>Kleshna</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.oscommerce.com/" rel="nofollow">8. osCommerce在线商家</a></h3>
<p><img alt="oscommerce平台" class="aligncenter size-full wp-image-6152" src="https://www.tigren.com/wp-content/uploads/2018/03/oscommerce-platform.png" /></p>
<p>osCommerce是最长期的开源电子商务平台之一，经过近20年的发展。随着时间的推移，它已经建立了一个大约9,000个免费附加组件的银行，并为超过20,000个电子商务商店提供支持。</p>
<p>osCommerce正在与超过30万的店主，开发商和解决方案提供商一起成长。因此，只要您的网站出现问题，就可以快速轻松地从社区寻求帮助。</p>
<p>此外，您将享受各种自定义选项，以增强您的店面外观和功能。</p>
<p>另一方面，与其他开源电子商务平台相比，这个平台相当陈旧且停滞不前。例如，它的前端演示看起来像亚马逊的古老网站。因此，没有</p>
<p><strong>osCommerce商店：</strong></p>
<ul>
<li>Ubuntu</li>
<li>Lanbo&rsquo;s Armory</li>
<li>Bio Manantial</li>
<li>Mopar</li>
<li>Moto Parts Max</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://virtuemart.net/" rel="nofollow">9. VirtueMart</a></h3>
<p><img alt="美德市场电子商务解决方案" class="aligncenter size-full wp-image-6154" src="https://www.tigren.com/wp-content/uploads/2018/03/virtue-mart-ecommerce-solution.png" /></p>
<p>正如WooCommerce是专有的WordPress和Drupal Commerce是Drupal独有的，VirtueMart只能与Joomla一起使用。</p>
<p>尽管功能比其他开源电子商务平台少，但VirtueMart仍然为您提供必要的功能，以使您的商店启动和运行。例如，它允许您创建多语言商店以满足全球需求。此外，这个平台是SEO友好的，帮助您的网站增加流量，并在搜索引擎上获得最佳位置。</p>
<p>当您知道VirtueMart仅由一个非常小的团队开发和运营时，您可能会感到惊讶 - 只有3-5名开发人员积极参与其中。然而，该平台吸引了近35万用户，主要是在美国和俄罗斯。</p>
<p><strong>VirtueMart电子商务商店：</strong></p>
<ul>
<li>Terre des Thes</li>
<li>Hanz de Fuko</li>
<li>Cerjo USA</li>
<li>Ayoka</li>
<li>Envirocon</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://oroinc.com/orocommerce/" rel="nofollow">10. </a><a href="https://oroinc.com/orocommerce/">OroCommerce</a></h3>
<p><img alt="orocommerce开发" class="aligncenter size-full wp-image-6157" src="https://www.tigren.com/wp-content/uploads/2018/03/orocommerce-development.png" /></p>
<p>与其他开源电子商务平台略有不同，OroCommerce专注于B2B而非B2C市场。其主要目的是通过最小化所有权总成本和促进这些业务的增长来满足中型和大型企业的需求。</p>
<p>OrocCommerce使您能够管理多个公司帐户和仓库，应用特定的价格手册和产品目录，为每组客户定制工作流程，显示多种货币等。</p>
<p>OroCommerce是一个开源B2B电子商务平台，可帮助推动在线业务增长，改善客户体验，降低总体拥有成本并缩短产品上市时间。它有社区版和企业版。功能包括购物清单管理，买卖双方互动，多种货币，多仓库管理，可扩展性，Elasticsearch，论坛等。</p>
<h3><a href="http://getsaleor.com/" rel="nofollow">11. Saleor</a></h3>
<p><img alt="销售商电子商务网站开发" class="aligncenter size-full wp-image-6160" src="https://www.tigren.com/wp-content/uploads/2018/03/saleor-e-commerce-website-development.png" /></p>
<p>与之前的电子商务解决方案相比，Saleor可能是一个不太知名的平台，但在开发电子商务网站时仍然是一个不错的选择。它可以满足开发人员，商店经理或客户的需求。</p>
<p>Saleor运行在Python 3.4上，具有清晰的架构，无需全面缓存，直接的本地开发和轻松定制。它结合了一流的技术，如Django，ElasticSearch，PostgreSQL，Docker和GraphQL。</p>
<p>对于商店所有者，Saleor提供直观的仪表板，多个支付网关和SEO支持。同时，它通过地理位置功能，快速结账流程和便捷的搜索工具为客户带来了极佳的购物体验。</p>
<h3><strong><a href="https://spreecommerce.org/" rel="nofollow">12.狂欢</a></strong></h3>
<p><img alt="狂欢电子商务发展" class="aligncenter size-full wp-image-6161" src="https://www.tigren.com/wp-content/uploads/2018/03/spree-e-commerce-development.png" /></p>
<p>Spree Commerce是一个基于Ruby on Rails构建的可扩展的开源电子商务平台。由于其灵活性，Spree可以满足不同电子商务类型的需求和要求，从内容驱动的网站，电子商务商店到多供应商市场。</p>
<p>Spree将帮助您建立一个具有吸引力的设计和精益功能的综合在线商店。关于这个平台的一个特殊之处是API omnichannel与多库存位置的结合，这意味着它可以在您的业务成长时随您扩展。</p>
<p>到目前为止，Spree Commerce已经建立了超过45,000家电子商务商店。</p>
<p><strong>狂欢电子商务商店：</strong></p>
<ul>
<li>Me Undies</li>
<li>Quarterly</li>
<li>R Polo Shirts</li>
<li>Prize Candle</li>
<li>Lula Lu</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.nopcommerce.com/" rel="nofollow">13. nopCommerce</a></h3>
<p><img alt="nopcommerce平台免费" class="aligncenter size-full wp-image-6166" src="https://www.tigren.com/wp-content/uploads/2018/03/nopcommerce-platform-free.png" /></p>
<p>自2008年开始，nopCommerce可以被认为是用ASP.NET编写的先驱开源电子商务平台之一。在过去10年中，其下载量已超过180万次。</p>
<p>nopCommerce为您提供了广泛的功能和功能，可以创建电子商务商店，从多商店，多供应商，库存管理，快速单页结账，SEO支持，折扣和优惠券，到Web服务API等。</p>
<p>到目前为止，nopCommerce已经发布了35个正式版本，所有版本都可以轻松下载和安装。</p>
<p><strong>nopCommerce商店：</strong></p>
<ul>
<li>Volvo</li>
<li>Puma</li>
<li>Reebok</li>
<li>DHC Skincare</li>
<li>Columbia</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://reactioncommerce.com/" rel="nofollow">14.Reaction Commerce</a></h3>
<p><img alt="反应商业开源" class="aligncenter size-full wp-image-6168" src="https://www.tigren.com/wp-content/uploads/2018/03/reaction-commerce-open-source.png" /></p>
<p>Reaction Commerce是一个快速，可扩展，实时反应和开源的Node.js商务平台。它基于HTML，CSS和JavaScript。通过实时分析为每个用户创建个人体验。商品基于位置，天气，市场趋势和其他数据点。Reaction Commerce是GitHub上最顶尖的开源商务项目之一。</p>
<p>Reaction Commerce是一个开源，易于使用和100％可定制的电子商务平台，用Node.js编写。该平台使您可以完全访问其代码库。</p>
<p>此外，由于Reaction是基于事件驱动的技术构建的，因此即使不重新加载页面也可以获得即时更新。</p>
<p><strong>Reaction Commerce商店：</strong></p>
<ul>
<li>Next Level</li>
<li>It Furniture</li>
<li>Easy Wine</li>
<li>Artlimes</li>
<li>Stephen Kenn</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://pimcore.com/en" rel="nofollow">15. Pimcore</a></h3>
<p><img alt="pimcore电子商务" class="aligncenter size-full wp-image-6169" src="https://www.tigren.com/wp-content/uploads/2018/03/pimcore-ecommerce.png" /></p>
<p>7年前，Pimcore构建于100％API驱动架构之上，基于MySQL，Mongo DB，PHP，Symfony，Varnish和Elastic Search的技术堆栈。该平台凭借其出色的设计和功能，可以满足B2B和B2C企业家的不同需求。</p>
<p>可以说，Pimcore现在已成为最有效的开源电子商务平台之一，为全球众多电子商务提供动力。</p>
<p><strong>Pimcore电子商务商店：</strong></p>
<ul>
<li>Martha White</li>
<li>Smuckers</li>
<li>Crisco</li>
<li>Nikonians</li>
<li>Pillsbury</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://simplecartjs.org/" rel="nofollow">16. SimpleCart JS</a></h3>
<p><img alt="开源simplecart" class="aligncenter size-full wp-image-6172" src="https://www.tigren.com/wp-content/uploads/2018/03/open-source-simplecart.png" /></p>
<p>与此列表中的其他开源电子商务平台相比，SimpleCart JS可能是最用户友好，易于使用且轻量级的。虽然大多数以前的平台要求商店所有者具有一定的专业水平，但SimpleCart JS只要求其用户获取基本的HTML知识。</p>
<p>只需几分钟即可建立一个基于SimpleCart JS的完整网站，具有多语言和多支付网关选项。</p>
<p><strong>SimpleCart JS网站：</strong></p>
<ul>
<li>Alpin</li>
<li>Libero</li>
<li>Purple Thistle Dairy Goats</li>
<li>Sleeping Monk Farm</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.jigoshop.com/" rel="nofollow">17. Jigoshop</a></h3>
<p><img alt="jigoshop电子商务发展" class="aligncenter size-full wp-image-6177" src="https://www.tigren.com/wp-content/uploads/2018/03/jigoshop-ecommerce-development.png" /></p>
<p>与WooCommerce一样，Jigoshop是另一个适用于WordPress的开源电子商务平台。它包含了您开始电子商务所需的几乎所有内容，从简单的产品管理，便捷的后端监控，SEO支持，各种营销工具到集成的社交媒体。</p>
<p>到目前为止，它已被来自不同国家的超过50万用户下载。</p>
<p>但是，Jigoshop有一些局限性。例如，创建可配置产品很复杂，您必须支付一定的费率才能获得Jigoshop社区的支持。</p>
<p><strong>JigoShop电子商务商店：</strong></p>
<ul>
<li>Tsaldaris</li>
<li>Tri-rail</li>
<li>Jime Jinak</li>
<li>Renlearn</li>
<li>Sebastian</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.zen-cart.com/index.php" rel="nofollow">18. Zen Cart</a></h3>
<p><img alt="zen cart电子商务平台" class="aligncenter size-full wp-image-6181" src="https://www.tigren.com/wp-content/uploads/2018/03/zen-cart-ecommerce-platform.png" /></p>
<p>继承自osCommerce的代码，Zen Cart自2003年以来已成为最令人印象深刻的免费下载开源电子商务平台之一。它得到了超过15万名成员的大型社区的支持，他们迄今为止贡献了20万个线程。</p>
<p>现在，这个平台提供了超过1,800个插件，分为16个不同的类别。Zen Cart及其附加组件都可以轻松安装，即使是谁拥有基本的网站开发专业知识。</p>
<p>另一方面，Zen Cart平台有一些缺点。例如，它的店面不够好看，不足以吸引客户，如果您上传大量产品，网站速度将非常慢。</p>
<p><strong>Zen Cart</strong>电子商务<strong>商店：</strong></p>
<ul>
<li>Mini In The Box</li>
<li>Tiny Deal</li>
<li>Yeti</li>
<li>Isabel Harris</li>
<li>Katiepie</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://en.shopware.com/" rel="nofollow">19.商品</a></h3>
<p><img alt="商品电子商务开源" class="aligncenter size-full wp-image-6187" src="https://www.tigren.com/wp-content/uploads/2018/03/shopware-ecommerce-opensource.png" /></p>
<p>自2000年以来，Shopware已为全球数千家各种规模的电子商务提供支持。毫无疑问，Shopware Community Edition是一个理想的解决方案，适合希望在预算有限的情况下使用高级电子商务网站的企业家。</p>
<p>通过使用此框架，您将拥有许多自定义选项以及对一组插件和模板的访问权限，从而创建一个独特的商店。</p>
<p>得益于Shopware的高端软件架构，您将从ElasticSearch，API和PHP7中获得巨大的收益。</p>
<p>此外，它的后端经过精心设计，旨在简化您的日常管理工作并节省您的时间。</p>
<p><strong>Shopware电子商务商店：</strong></p>
<ul>
<li>Sportalm</li>
<li>Salewa</li>
<li>Green Cup Coffee</li>
<li>Ames</li>
<li>Elten</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://www.konakart.com/" rel="nofollow">20. KonaKart</a></h3>
<p><img alt="konacart电子商务" class="aligncenter size-full wp-image-6189" src="https://www.tigren.com/wp-content/uploads/2018/03/konacart-e-commerce.png" /></p>
<p>无论您的公司规模如何，KonaKart都将提供适合您的需求和要求的电子商务解决方案。将KonaKart与其他开源电子商务平台区分开来的一件事是它通过诸如Javascript，JSON，POJO和SOAP等API提供的功能。</p>
<p>这些API的目的是帮助您将电子商务功能合并到当前网站中。KonaKart API的另一个惊人优势是在将您的网站升级到最新版本时节省您的时间，金钱和精力。</p>
<p>此外，值得注意的是，您或您的开发人员必须具备扎实的Java开发知识和经验，以便监控基于Konakart的商店。</p>
<p><strong>KonaKart电子商务商店：</strong></p>
<ul>
<li>博纳</li>
</ul>
<p>&nbsp;</p>
<h3><a class="broken_link" href="https://www.shoop.io/en/" rel="nofollow">&nbsp;21. Shoop</a></h3>
<p>Shoop平台采用Python和Django编写，带来了自定义和多存储生成的自由。此外，它还提供简单的结账流程，包括Stripe支付网关，SEO友好功能和简单的内容管理。目前还没有，Shoop可以满足现代零售商的需求，因为它具有可扩展性和灵活性。</p>
<p>现在，Shoop有两个办事处，一个在芬兰，另一个在美国。</p>
<p><strong>Shoop电子商务商店：</strong></p>
<ul>
<li>Mastermark</li>
<li>Ottobock</li>
<li>Aalto</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://www.x-cart.com/" rel="nofollow">22. X-Cart</a></h3>
<p><img alt="xcart电子商务开发" class="aligncenter size-full wp-image-6192" src="https://www.tigren.com/wp-content/uploads/2018/03/xcart-ecommerce-development.png" /></p>
<p>与所有提及的开源电子商务平台类似，X-Cart完全可定制，包含商家期望拥有的所有电子商务功能。它接受多种货币，多语言，以便您可以接触全球受众。此外，搜索引擎将喜欢基于X-Cart的商店，因为它具有SEO友好性。</p>
<p>您可能想要了解的有关此平台的另一件事是X-Cart为我们提供了托管和自托管选项。</p>
<p><strong>X-Cart电子商务商店：</strong></p>
<ul>
<li>Relax Home</li>
<li>Circa Max</li>
<li>Zeff Zone</li>
<li>Coast Furniture</li>
<li>Behind The Mask</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://www.tomatocart.com/" rel="nofollow">23.Tomato Cart</a></h3>
<p><img alt="tomatocart开源演示" class="aligncenter size-full wp-image-6194" src="https://www.tigren.com/wp-content/uploads/2018/03/tomatocart-open-source-demo.png" /></p>
<p>TomatoCart是一个osCommerce分支，应用ExtJS RIA框架。它具有很多优点，例如100％可定制，轻量级，功能负载，多功能和SEO友好。此外，它允许您的商店与多个支付网关集成，应用各种营销活动（销售和折扣）等。</p>
<p>这个TomatoCart的一个缺点是它仍然是一个年轻的平台，插件和主题的选项较少。</p>
<p><strong>TomatoCart电子商务商店：</strong></p>
<ul>
<li>ACI Hellas</li>
<li>Foto De Vakman</li>
<li>Doman</li>
<li>Kalafarsh</li>
<li>Lanternas</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://www.afcommerce.com/" rel="nofollow">24. AF Commerce</a></h3>
<p><img alt="电子商务发展" class="aligncenter size-full wp-image-6205" src="https://www.tigren.com/wp-content/uploads/2018/03/afcommerce-development.png" /></p>
<p>自2007年以来，AFCommerce已为超过25万家全球电子商务商店提供支持。看来这个平台没有定制的限制; 可以根据需要修改所有添加的PHP脚本以满足您的要求。</p>
<p>AFCommerce为我们提供了一系列&ldquo;开箱即用&rdquo;的功能。该平台适用于多语言和多种货币，可以轻松创建联盟计划，并实现单页结账。此外，还有一些独特的功能，如DHTML网页效果，快速购物篮（跟踪买家并说服他们完成购买）。</p>
<h3><a href="http://oscarcommerce.com/" rel="nofollow">25.Oscar</a></h3>
<p><img alt="奥斯卡电子商务平台开发" class="aligncenter size-full wp-image-6206" src="https://www.tigren.com/wp-content/uploads/2018/03/oscar-e-commerce-platform-development.png" /></p>
<p>Oscar是Django令人印象深刻的开源电子商务平台。使用奥斯卡有一些突出的好处。</p>
<p>首先，由于该框架是域驱动的，因此它便于自定义功能开发和维护过程。其次，虽然奥斯卡没有像其他开源电子商务平台那样庞大的用户社区，但它提供了一个非常全面和详细的文档，供您找到如何处理常见问题。第三，该平台最多支持9个不同的支付网关。</p>
<p><strong>Oscar Ecommerce Stores</strong><br /> &bull; Namhah<br /> &bull; Acquolina<br /> &bull; Giftingnation<br /> &bull; 500 accessories<br /> &bull; Chocolatebox</p>
<h3><a class="broken_link" href="http://zeuscart.com/" rel="nofollow">26. Zeuscart</a><br /> <img alt="zeuscart免费平台" class="aligncenter size-full wp-image-6208" src="https://www.tigren.com/wp-content/uploads/2018/03/zeuscart-free-platform.png" /></h3>
<p>Zeuscart是一个基于Web的PHP开源电子商务框架，用作脚本语言，帮助开发人员创建动态网站。它简单易用，但功能强大，具有很多电子商务功能。特别是，该平台提供了多种营销定制功能，这将有助于提高您的销售和转换率，并提高您的客户满意度。</p>
<p>即使您不是技术人员，也可以快速学习如何使用Zeuscart并在此平台上构建新站点。</p>
<h3><a href="https://sylius.com/" rel="nofollow">27.西利乌斯</a></h3>
<h3><img alt="sylius电子商务开源平台" class="aligncenter size-full wp-image-6209" src="https://www.tigren.com/wp-content/uploads/2018/03/sylius-e-commerce-open-source-platform.png" /></h3>
<p>Sylius开源平台于2016年发布。仅仅2年后，它就获得了令人难以置信的400万次下载。这是一个灵活的平台，设计时考虑了集成，易于托管和扩展。更具体地说，它可以部署在大多数众所周知的托管平台上（例如：Google Cloud，Heroku和Platform.sh）。因此，它可以节省时间和金钱，以便在确保高性能的同时扩展和实现新功能。</p>
<p>Sylius利用PHP并将学说作为ORM，数据库抽象和TWIG - PHP的安全模板引擎。在自定义方面，您可以修改核心数据模型，表单，控制器，存储库或插入新字段。</p>
<p>最后，Sylius提供了非常全面的技术文档，不仅包括烹饪书，还包括详细的教程。</p>
<p><strong>Sylius电子商务商店：</strong></p>
<ul>
<li>Axelprint</li>
<li>Balloti</li>
<li>Bi-Rite</li>
<li>Bogler</li>
</ul>
<p>&nbsp;</p>
<h3><a class="broken_link" href="http://www.ubercart.org/" rel="nofollow">28. Ubercart</a></h3>
<p><img alt="ubercart平台" class="aligncenter size-full wp-image-6210" src="https://www.tigren.com/wp-content/uploads/2018/03/ubercart-platform.png" /><br /> Ubercart可被视为Drupal最受欢迎的开源电子商务平台之一。它提供了从头开始在线业务的基本功能。然而，与前30名的其他框架相比，Ubercart似乎被抛在后面。它没有很多不规则的更新。</p>
<p><strong>Ubercart电子商务商店：</strong></p>
<ul>
<li>Brass Exchange</li>
<li>JAS Oceania</li>
<li>MJ Toys</li>
<li>Clob Ponds</li>
<li>SG Ammo</li>
</ul>
<p>&nbsp;</p>
<h3><a href="https://www.cubecart.com/" rel="nofollow">29. CubeCart</a></h3>
<p><img alt="opensource cubecart平台" class="aligncenter size-full wp-image-6212" src="https://www.tigren.com/wp-content/uploads/2018/03/opensource-cubecart-platform.png" /><br /> CubeCart是一个引人注目的英国免费电子商务平台，为数千家全球电子商务提供在线销售产品。它100％可定制和响应 - 很好地显示在从台式机，笔记本电脑到平板电脑和智能手机的所有设备上。此外，该平台允许您上传和管理无限的产品/客户/订单，集成社交媒体附加组件和一些流行的插件，如Mailchimp。</p>
<p><strong>CubeCart电子商务商店：</strong></p>
<ul>
<li>Avazzia</li>
<li>Planet BMX</li>
<li>Mata Traders</li>
<li>Richo Soft2</li>
<li>Peugeot</li>
</ul>
<p>&nbsp;</p>
<h3><a href="http://www.rockettheme.com/docs/joomla/extensions/rokquickcart/setup.md" rel="nofollow">30. RokQuickCart</a></h3>
<p><img alt="rokquickcart电子商务发展" class="aligncenter size-full wp-image-6213" src="https://www.tigren.com/wp-content/uploads/2018/03/rokquickcart-e-commerce-development.png" /></p>
<p>我们想提到的最后一个免费电子商务解决方案是RokQuickCart。此平台适用于一些常见的支付网关，如PayPal，Google Checkout和亚马逊。在网页上，产品将显示为网格中的块（由用户选择）。</p>
<p>此外，该软件重量轻，为您提供快速的加载速度。在后端，管理控件直观且易于使用。最后但同样重要的是，RokQuickCart接受多种货币（最多23种不同的货币）。</p>
<p><strong>RokQuickCart电子商务商店：</strong></p>
<ul>
<li>Byk Bikes</li>
<li>Skydive Moab</li>
<li>Simply Survival</li>
</ul>
<p>最后，我们向您展示了Top 30中所有潜在的开源电子商务平台。希望您能为您的商店选择合适的解决方案。</p>]]></description>
      <pubDate>Tue, 18 Dec 2018 09:55:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何上传和优化Magento 2中的产品图像和视频？]]></title>
      <link>https://www.360magento.com/blog/optimize-img/</link>
      <description><![CDATA[<p>首先，了解如何上传以及优化Magento 2中产品的图像和视频是至关重要的。大多数Magento 2网站都有各种各样的产品以及相关的图像和视频; 如果他们不知道如何有效地使用他们的资源，网站的性能将受到负面影响。因此，您的客户可能会在您的商店中获得糟糕的购物体验。</p>
<p>因此，在本文中，我们将逐步介绍如何在您的Magento2网站上传图像/视频，并为您提供一些有用的技巧，以优化您的资源并获得最佳性能。让我们开始吧！</p>
<h2>1.在Magento 2中上传和优化图像</h2>
<p>以下是在Magento 2后端上传产品图像的3个简单步骤：</p>
<p>首先，导航到要为其添加图像的产品。打开管理面板，导航到<strong>CATALOG</strong>，然后选择<strong>Products</strong>。</p>
<p><img alt="如何上传产品图片magento 2" src="https://www.tigren.com/wp-content/uploads/2018/08/how-to-upload-product-image-magento-2.png" /></p>
<p>然后，您可以选择要添加/更改图像的产品或创建新产品并上传其图像：</p>
<p><img alt="magento 2上传图片" class="aligncenter size-full wp-image-8254" src="https://www.tigren.com/wp-content/uploads/2018/08/magento-2-upload-image.png" /></p>
<p>在产品详细信息配置页面中，展开"<strong>Images And Videos</strong>"部分。单击"<strong>Browse to find or drag image here</strong>",以从计算机上传产品图像。</p>
<p><img alt="在产品详细信息m2中上传图片" src="https://www.tigren.com/wp-content/uploads/2018/08/upload-images-in-product-detail-m2.png" /></p>
<p>接下来，单击您上传的图像以添加图像详细信息。请记住添加适合SEO 的<strong>Alt Text</strong>，选择将决定网站上图像显示位置的<strong>Role</strong>（Base/ Small/ Swatch/ Thumbnail）。值得注意的是，图像可以同时具有多个角色。</p>
<p><img alt="magento 2产品图片" src="https://www.tigren.com/wp-content/uploads/2018/08/magento-2-product-images.png" /></p>
<p>保存配置以完成。</p>
<p>除此之外，以下是一些有用的建议，可以优化Magento 2中产品的图像：</p>
<ul>
<li><strong>以正确的格式准备图像：</strong> PNG是透明和高质量图像的最佳和通用格式。但是，如果您的网站高度依赖图像，则可以将PNG和JPEG格式结合使用，以免对网站性能产生性能影响。</li>
<li><strong>在图像大小和分辨率之间取得平衡：</strong>图像的分辨率必须与Web上显示的大小相对应。例如，您不需要为小缩略图使用高质量图片。</li>
<li><strong>使用专业工具处理图像：</strong>现在有许多工具（免费和付费）允许我们压缩和优化图像以减少文件的大小，同时质量不会受到明显影响。</li>
<li><strong>请您的开发人员/设计人员为网站上的每个图像/横幅提供标准图像大小：</strong>如果您找专业的Magento开发公司来构建您的网站，他们可以帮助您为您网站上的所有图像定义特定大小。凭借他们的经验，他们可以向您提供最佳尺寸，以最高质量显示图像，同时仍然保证网站速度。</li>
</ul>
<h2><img alt="最佳图像尺寸magento 2" src="https://www.tigren.com/wp-content/uploads/2018/08/optimal-image-size-magento-2.jpg" /></h2>
<p><span style="font-size: 24px; font-weight: bold;">2.在Magento 2中上传和优化视频</span></p>
<p>在Magento 1中，上传视频非常复杂，但如果您的网站基于Magento 2，则更容易。Magento 2允许我们默认在产品页面上嵌入Youtube或Vimeo的视频。以下是将视频上传到Magento 2产品页面的几个步骤：</p>
<ul>
<li>第1步：创建Youtube API密钥</li>
</ul>
<p>首先，您必须访问Google Developers Console：<a href="https://console.developers.google.com/" rel="nofollow" target="_blank">https//console.developers.google.com/</a>并登录到您的帐户。然后，搜索&ldquo;Youtube Data API v3&rdquo;。<img alt="如何上传视频magento 2" src="https://www.tigren.com/wp-content/uploads/2018/08/how-to-upload-video-magento-2.png" /></p>
<p>在下一页中，单击<strong>ENABLE</strong>。</p>
<p><img alt="magento 2上传视频" src="https://www.tigren.com/wp-content/uploads/2018/08/magento-2-upload-video.jpg" /></p>
<p>然后，在左侧菜单中选择<strong>Credentials</strong>，然后单击<strong>+ CREATE CREDENTIAL</strong>。<br /> <img alt="magento 2产品视频" class="aligncenter size-full wp-image-8264" src="https://www.tigren.com/wp-content/uploads/2018/08/product-video-magento-2.jpg" /></p>
<p>在这里，您必须选择从哪里调用API以及如何访问数据。<br /> <img alt="嵌入youtube video magento 2" src="https://www.tigren.com/wp-content/uploads/2018/08/embed-youtube-video-magento-2.jpg" /></p>
<p>之后，单击&nbsp; <strong> What credentials do I need?</strong>按钮以获取您的API密钥。复制密钥以在后端配置。<br /> <img alt="获取magento 2的youtube api密钥" src="https://www.tigren.com/wp-content/uploads/2018/08/get-youtube-api-key-for-magento-2.jpg" /></p>
<ul>
<li><strong>第2步：</strong>继续在Magento 2后端配置</li>
</ul>
<p>首先，打开管理面板，导航到<strong>STORES</strong>，选择<strong>Settings</strong>下的<strong>Configuration</strong>。</p>
<p><img alt="magento 2视频配置" src="https://www.tigren.com/wp-content/uploads/2018/08/video-configuration-magento-2.jpg" /></p>
<p>在左侧菜单中，展开<strong>CATALOG</strong>并选择<strong>Catalog</strong>。然后，展开"<strong>Product Video</strong>"部分，并输入你在第一步中复制的<strong>Youtube API Key</strong>。</p>
<p><img alt="在magento 2中添加youtube api密钥" src="https://www.tigren.com/wp-content/uploads/2018/08/add-youtube-api-key-in-magento-2.jpg" />之后，导航到&nbsp; <strong>CATALOG</strong>，然后选择&nbsp; <strong>Products</strong>。</p>
<p><img alt="如何上传产品图片magento 2" src="https://www.tigren.com/wp-content/uploads/2018/08/how-to-upload-product-image-magento-2.png" /></p>
<p>然后，您可以选择要添加/更改视频的产品或创建新产品并上传其视频：</p>
<p><img alt="magento 2上传图片" class="aligncenter size-full wp-image-8254" src="https://www.tigren.com/wp-content/uploads/2018/08/magento-2-upload-image.png" /></p>
<p>在产品详细信息配置页面中，展开&nbsp; <strong>Images And Videos</strong> &nbsp;部分。单击&nbsp; &ldquo;<strong> Add Video</strong>&rdquo;按钮。</p>
<p><img alt="m2在产品详细信息中上传图片" src="https://www.tigren.com/wp-content/uploads/2018/08/upload-images-in-product-detail-m2.png" /></p>
<p>在这里，您必须输入要嵌入网站的Youtube视频的网址。输入URL后，视频<strong>Title, Description</strong>和<strong>Preview Image</strong>将自动填充（但您可以编辑）。此外，您可以选择视频的<strong>Role</strong>（类似于图像）。</p>
<p><img alt="magento 2上传新视频" src="https://www.tigren.com/wp-content/uploads/2018/08/upload-new-video-magento-2.jpg" /></p>
<p>保存配置并清除缓存以完成。</p>
<p><strong>注意：</strong>如果您想从计算机上传视频（而不是通过Youtube）会更复杂。您需要做的是使用第三方扩展程序，允许您上传不同的视频格式，然后您可以将视频上传到媒体文件夹并附加到特殊产品。</p>
<p>此外，以下是优化Magento 2产品视频的一些建议：</p>
<ul>
<li><strong>我们强烈建议使用嵌入式视频：</strong>从Youtube / Vimeo嵌入视频不仅更容易，而且还有利于您的网站性能。如果您将视频上传到媒体（即使是短片），也可能会降低网页播放速度。如果您不希望别人在Youtube上看到您的视频，只需将其设置为个人视频并将其隐藏。</li>
<li><strong>优化您的自托管视频：</strong>如果您仍想使用自托管视频，则必须在上传前优化这些视频。建议不要上传超过1分钟的视频。</li>
</ul>
<p>我们已向您展示如何上传以及优化Magento 2网站中的图像和视频。希望它对你有用！</p>]]></description>
      <pubDate>Wed, 05 Dec 2018 01:20:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento2中CMS页面添加联系表单]]></title>
      <link>https://www.360magento.com/blog/m2-cms-contact/</link>
      <description><![CDATA[<div class="post-body">
<p>在这个Magento 2教程中，我们将向您展示在Magento 2中向CMS页面添加联系表单的五个简单步骤（例如：联系我们页面）。让我们开始吧！</p>
<h2>第1步：添加新的CMS页面</h2>
<p>打开Magento 2管理面板，导航到<strong>CONTENT</strong>，选择<strong>Pages</strong>（在<strong>Element</strong>下），然后单击<strong>Add New Page</strong>按钮。</p>
<p>（管理员面板CONTENT &gt; Pages &gt; Add New Page）</p>
<p><img alt="magento 2在cms页面上添加联系表格" height="792" src="https://www.360magento.com/index.php/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yMTQvYWRkLWNvbnRhY3QtZm9ybS1vbi1jbXMtcGFnZS1tYWdlbnRvLTItMTAyNHg3OTIucG5nIn19/key/bcacc48a0c0348a7cb928c2f9a89e42d/" width="1024" /></p>
<h2>第2步：添加CMS页面的信息</h2>
<p>在这里，您需要输入页面Title, URL Key, Meta Title, Meta Keyword, Meta Description，并选择页面所属的商店视图。</p>
<p><img alt="magento 2在cms页面上添加联系表格" height="896" src="https://www.360magento.com/index.php/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yMTQvbWFnZW50by0yLWFkZC1jb250YWN0LWZvcm0tMTAyNHg4OTYucG5nIn19/key/bcacc48a0c0348a7cb928c2f9a89e42d/" width="1024" /></p>
<h2>第3步：将内容（HTML）添加到CMS页面：</h2>
<p>您可以在&ldquo;Content&rdquo;部分添加更多信息。</p>
<p><img alt="magento 2联系表格" height="582" src="https://www.360magento.com/index.php/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yMTQvY29udGFjdC1mb3JtLW1hZ2VudG8tMi5wbmcifX0,/key/bcacc48a0c0348a7cb928c2f9a89e42d/" width="987" /></p>
<p>例如，您可以按以下方式插入Google地图：首先，访问Google地图，搜索您的位置; 其次，单击&ldquo;Share&rdquo;，选择&ldquo;Embed a map&rdquo;，然后单击&ldquo;COPY HTML&rdquo;; 最后，将链接粘贴到您的HTML内容。</p>
<h2><img alt="magento 2如何创建联系表格" height="549" src="https://www.360magento.com/index.php/alwayly@360mg/cms_wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvYmxvZ18yMTQvbWFnZW50by0yLWhvdy10by1jcmVhdGUtY29udGFjdC1mb3JtLnBuZyJ9fQ,,/key/bcacc48a0c0348a7cb928c2f9a89e42d/" width="867" /><br /> 第4步：将联系表单添加到CMS页面</h2>
<p>您可以更改联系表单中每个字段的标题。</p>
<p>在您的源代码中：<br /> app/design/frontend/company/name_theme/ new folder: Magento_Contact <br /> app/design/frontend/company/name_theme/Magento_Contact/ new folder: templates<br /> app/design/frontend/company/name_theme/Magento_Contact/templates/ new file: form.phtml。</p>
<p>在此文件中，您可以根据需要自定义表单。</p>
<p>然后，要将联系表单插入到我们正在创建的CMS页面，您只需要添加：&nbsp; <em></em>到<strong>Content </strong>部分。</p>
<h2>第5步：保存页面</h2>
<p>最后，记得保存配置并刷新缓存（或运行命令：<em>php bin/magento cache:flush</em>）。</p>
<p>我们已向您提供了详细说明，可以轻松地将自定义联系表单添加到CMS页面。</p>
</div>]]></description>
      <pubDate>Wed, 07 Nov 2018 09:57:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2与Shopify哪个好，如何选择？]]></title>
      <link>https://www.360magento.com/blog/m2-vs-shopify/</link>
      <description><![CDATA[<div class="post-body">
<p>Magento 2 对比 Shopify，这两个都是目前比较好的电子商务平台，近年来已成为一个备受争议的话题。关于这一点有很多相反的意见，这使得商家在为他们的商店选择时会很困惑。如果你是其中之一，这篇博文将通过从15个不同方面全面比较Magento 2和Shopify来帮助你更轻松地进行最佳选择。许多人误解这两个平台是相似的，但实际上，它们在每个方面几乎都有很大的不同。我们现在具体的讲解一下：</p>
<h2>1.平台的普及率</h2>
<p>毫无疑问，Magento 2和Shopify是当今非常流行的电子商务平台。Magento 2授权的电子商务超过250,000个，Shopify建立了大约600,000个在线商店。Magento全球社区由大约60,000名开发人员和300多个解决方案合作伙伴组成，从而不断改进和增强该平台。由于Magento拥有最大和最强大的社区，因此它始终领先于所有其他平台。Magento 2似乎是大多数中大型企业的首选，而小型企业对Shopify更感兴趣。</p>
<p>但是，这两个平台都是为大中小型公司服务的，无论规模。从我的角度来看，Magento 2未来不仅可以在大型电商平台上拓展业务，也会是小型电商平台的理想选择。</p>
<p><em>Magento：</em></p>
<p><img alt="magento 2" height="535" src="https://www.360magento.com/media/wysiwyg/blog_212/magento-2-1024x535.png" width="1024" /></p>
<p><em>Shopify：</em></p>
<p><img alt="shopify" height="366" src="https://www.360magento.com/media/wysiwyg/blog_212/shopify-1024x366.png" width="1024" /></p>
<p><strong>得分（Magento 2 vs Shopify）：1-1</strong></p>
<p>&nbsp;</p>
<h2>2.前期成本</h2>
<p>首先，Magento为我们提供了两个版本，两个选择，即Magento Open Source（免费）和Magento Commerce。因此，如果您选择Magento开源平台，则可以从0.00美元起。同时，Shopify提供14天的免费试用，但在此之后，您将需要付费。</p>
<p>尽管如此，基于两个平台从头开发新网站的前期成本却大不相同。要建立Magento网站，您需要具备过硬的技术知识和经验; 否则，你必须寻找一个专业的Magento技术服务商来做这件事，这需要付出以一定费用。一般而言，在亚洲找一家网站开发公司建立外贸网站需要花费2,500至10,000美元，而在美国，英国等公司合作至少需要15,000美元。</p>
<p>另一方面，Shopify商店没有安装费。您需要做的是选择一个月度计划开始，然后自己配置网站，因为它不需要很多技术技能。更具体地说，Shopify提供了网站构建拖放工具; 因此，您可以根据需要在页面上移动元素来自定义商店。</p>
<p>这就是为什么大多数小公司因为早期投资预算较低而选择Shopify。但是，对于大中型电子商务商城而言，Magento的开发成本可能不是什么大问题，也有助于他们长期发展。继续阅读以了解原因。</p>
<p><strong>得分（Magento 2 vs Shopify）：0-1</strong></p>
<p>&nbsp;</p>
<h2>3.运营费用</h2>
<p>正如我所提到的，Shopify用户必须选择月度计划，他们将继续按月支付账单，直到他们......关闭网店。有三种Shopify版本 - Basic Shopify，Shopify和Advanced Shopify，每月花费29美元，79美元和299美元。值得注意的是，网站托管已经包含在这些软件包中。</p>
<p>而Magento方面，您不用每月支付费用使用Magento 2，而是支付托管费（根据您的需要，每月3-100美元）。虽然它确实有成本，但您可以自由选择最适合您商店的托管解决方案。</p>
<p>除此之外，如果您使用外部支付网关而不是Shopify Payments，Shopify还会按每次销售收取2％，1％或0.5％（交易费用）。例如，如果您想在使用Basic Shopify套餐时加入PayPal，Braintree，Authorize.net等热门支付网关，那么每购买100美元的订单，您将需要支付2美元。因此，假设您的收入为每年100,000美元，那么您将向Shopify支付2000美元。</p>
<p>相反，Magento 2不收取外部支付网关的额外费用，也默认在网站上集成PayPal，Braintree，Authorize.net，....</p>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>4.易于使用</h2>
<p>在这里，我不再谈论如何建立网站，而是管理整个网站的便利性。</p>
<p>客观地说，Magento 2和Shopify都为管理员提供了用户友好且易于使用的管理仪表板，无论他们的技术知识水平如何。多亏了这一点，我们可以有效地管理产品，客户，订单，CMS页面和创建销售报告等。但是，相比之下，我更喜欢<a href="https://docs.magento.com/m2/ce/user_guide/stores/admin-dashboard.html" rel="nofollow">Magento 2仪表板</a>的现代风格外观。</p>
<p><em>Magento：</em></p>
<p>&nbsp;</p>
<p><img alt="magento 2仪表板" height="862" src="https://www.360magento.com/media/wysiwyg/blog_212/magento-2-dashboard.png" width="815" /></p>
<p><em>Shopify：</em></p>
<p><img alt="shopify管理仪表板" height="899" src="https://www.360magento.com/media/wysiwyg/blog_212/shopify-admin-dashboard-733x899.png" width="733" /></p>
<p><strong>得分（Magento 2 vs Shopify）：1-1</strong></p>
<p>&nbsp;</p>
<h2>5.功能</h2>
<p>这两种流行的平台都提供了启动和维护您的电子商务业务的基本功能。以下是一些比较示例：</p>
<p>在<em>折扣和优惠券代码方面</em>，Magento 2允许您默认生成任意数量的代码。虽然Shopify也提供此功能，但它不包含在基本计划中。</p>
<p>在<em>库存管理方面</em>，Magento用户可以控制无限数量的商品。Shopify商店也提供相同的功能，但使用基本计划的人除外 - 只允许25件商品。</p>
<p>在<em>运输</em>方面，两个平台都提供灵活的运输方式，并自动计算运费。</p>
<p>转向<em>多语言</em>设置，您可以通过轻松安装语言包向Magento 2商城添加任意数量的语言。对于Shopify，您必须寻找一些语言应用程序。</p>
<p>电子商务网店的另一个常见功能是<em>博客</em>，可以在Shopify上找到，可以使用免费或付费的扩展程序添加到Magento。</p>
<p>两个平台提供的最基本功能都与<em>SEO和营销有关</em>。事实上，Magento 2和Shopify为我们提供了类似的SEO能力，例如编辑元标记，元标题，元关键字，URL密钥，替代文本等，这有助于提高SERP上的网站排名。</p>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>6.设计和定制</h2>
<p>网站设计是决定网站成功的最重要因素之一。有许多Magento 2和Shopify主题供您选择，包括免费和付费。通常，大多数模板都具有响应式和移动友好性，因此无论客户使用何种设备，都可以很好地呈现。</p>
<p><img alt="响应式网站设计" height="640" src="https://www.360magento.com/media/wysiwyg/blog_212/responsive-website-design-1024x640.jpg" width="1024" />问题是你只能改变Shopify主题中的基本颜色和字体。而Magento 2是一个灵活且可扩展的平台，它允许您根据自己的创造力定制和创建美丽而独特的设计。</p>
<p>关于代码，Magento 2使用PHP，而Shopify使用Liquid; Magento是开源的，而Shopify是闭源的。由于是开源的，Magento 2使您能够自由开发定制代码以满足您的需求，而您无法修改Shopify的代码。</p>
<p>因此，Shopify仅适用于接受具有共同外观和视觉的简单网站的小公司。同时，Magento 2可以满足中型和大型电子商务企业的需求，这些企业往往需要独特而复杂的商店。</p>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>7.速度和性能</h2>
<p>网站速度是电子商务商店的关键因素。许多调查表明，即使1秒延迟也可能导致转换率降低7％。如果客户遇到网页加载速度缓慢，他们很可能会离开您的网站。</p>
<p>由于Shopify是托管解决方案，其网站性能由公司保证。诚然，Shopify网站在大多数情况下都具有稳定可靠的性能。</p>
<p>对于Magento 2网站，其网站速度主要取决于所选的托管服务。如果您选择具有适当网站优化功能的强大主机（整个站点中的代码和图像），则无需担心站点性能。</p>
<p><strong>得分（Magento 2 vs Shopify）：1-1</strong></p>
<p>&nbsp;</p>
<h2>8.用户体验</h2>
<p>评估电子商务平台时最重要的一个方面是用户体验，特别是结账方便。</p>
<p>Magento 2为我们提供了一个简单快速的两步结账流程（包括运输信息，预览和付款信息），以及一些出色的功能，如访客结账和一键创建帐户。此外，折扣代码框直接放在结帐页面上。</p>
<p>Shopify还提供便捷的单页结账。问题是，在Basic Shopify计划中，它从一开始就没有显示实时运费，这可能导致结账时放弃购物车的比率更高。</p>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>9.模块和插件</h2>
<p>尽管Magento 2和Shopify已经提供了网店所需的几乎所有内容，但强烈建议您考虑使用某些第三方扩展来增强网站性能和功能。</p>
<p>截至目前，Shopify在其商店中提供了超过2,300个应用程序，这比目前市场上的Magento 2扩展数量（超过3,000个）要少。相比之下，Magento 2不仅在数量上提供了更多插件，而且在质量方面也是更有保证。其扩展列表涵盖了商店改进和增强的所有方面，包括会计和财务，营销，内容和定制，客户支持，支付和安全，报告和分析等。</p>
<h3><img alt="magento 2扩展" height="616" src="https://www.360magento.com/media/wysiwyg/blog_212/magento-2-extensions-1024x616.png" width="1024" /></h3>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>10.可扩展性</h2>
<p>毫无疑问，Magento 2比Shopify更适合拥有数千种产品的中型和大型电子商务商店。如果你只想建立一个没有长期计划的小网站，Shopify可能是一个不错的选择。但是，如果您希望开发一个可能在未来发展壮大的在线业务，Magento 2将是首先。</p>
<p><strong>得分（Magento 2 vs Shopify）：1-0</strong></p>
<p>&nbsp;</p>
<h2>Magento 2 vs Shopify。谁是赢家？</h2>
<p>考虑到所有因素，最终得分为9-4，获胜者为Magento 2.但是，对于所有电子商务业务而言可能并非如此。为了找到最适合您公司的平台，您需要在平台的潜力与目标和预算之间取得平衡。</p>
<p>如果您需要在短时间内建立一个包含少量产品的商店，Shopify正是您所需要的。相反，如果您期望的是具有强大功能，可扩展性和自定义的在线商店，Magento是最佳选择。</p>
<p>对我来说，我更倾向于Magento 2.你呢？</p>
</div>]]></description>
      <pubDate>Sat, 03 Nov 2018 02:51:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[升级到Magento2的最佳时间到了]]></title>
      <link>https://www.360magento.com/blog/m2-upgrade/</link>
      <description><![CDATA[<p>2018年9月6日，Magento官方宣布他们将继续Magento 1的支持，直到2020年6月。该公告是为了纠正Magento先前声称他们将在发布Magento 2三年后停止为Magento 1提供支持（直到2018年11月） ）。与此同时，Magento强烈建议所有商家尽快<a href="https://www.360magento.com/magento-migration" title="Magento 1升级到Magento 2">升级到Magento 2</a>，原因有几个，我们将在这篇博文中讨论。</p>
<p>首先，延长Magento 1支持时间的目的既不是继续改进其功能，也不是为了吸引更多用户，而是让商家有更多时间来计划和实施他们升级到Magento 2.这方面是显而易见的。一方面，Magento仅为Magento Commerce 1(以前称之为Magento1企业版)提供高质量的修复和安全补丁，为Magento Open Source 1(以前称之为Magento1社区版)提供安全补丁。另一方面，magento将每三个月发布一次Magento 2的新版本，增加增强功能，修复bug以及安全更新。</p>
<blockquote>
<p><strong>For Magento Commerce 1 (formerly known as Enterprise Edition)</strong>:<br /> For Magento Commerce 1, we are providing software support through June 2020. Depending on your version, software support may include both quality fixes and security patches. Please review our&nbsp;Magento Software Lifecycle Policy&nbsp;to see how your version of Magento Commerce 1 is supported.</p>
<p><strong>For Magento Open Source 1 (formerly known as Community Edition)</strong>:<br /> For Magento Open Source 1, we are providing software security patches through June 2020 to ensure those sites remain secure and compliant. Please visit our&nbsp;Legal Terms page&nbsp;and review our Magento Open Source Software Maintenance Policy to see which versions of Magento Open Source 1 continue to receive software security maintenance.</p>
</blockquote>
<p>此外，毫无疑问，相比之下，Magento 1的默认功能逐渐变得贫瘠过时，而Magento 2应用了许多现代技术和改进。据Magento称，Magento 2为我们提供了卓越的云托管性能和强大的功能。此外，大多数Magento用户都认为Magento 2在很多方面都超过了以前的平台，从网站设计，网站性能到用户体验（管理员和买家）。因此，不仅是Magento官方并且整个Magento社区都将注意力转向Magento 2。</p>
<p>回到几年前Magento 2刚刚发布时，这是一个不稳定的电子商务平台，有很多bug，并且只有少数相关的主题和扩展。时间过得真快，一切都在不知不觉中发生了巨大变化。现在，Magento 2已经成为国际电商平台的首选之一。它不仅提供可靠的性能，还提供持续的丰富功能。截至目前，市场上已有超过2,000个Magento 2扩展，以及各种免费和付费magento 2主题模板。</p>
<p>长远考虑，如果您的企业有足够的预算，没有比现在升级到Magento 2更好的时间了。相反，如果您负担不起Magento迁移成本，那么我们为小公司提供一些方案方法可以有效地升级到Magento 2，而无需花费大量预算。不要等待Magento 1"生命终结"再开始从Magento 1迁移到Magento 2！</p>
<p>顺便说一句，如果您正在寻找Magento 2迁移服务提供商，360Magento是一个值得信赖的品牌。我们在Magento开发方面拥有超过6年的专业知识经验，可以帮助您成功迁移到Magento 2并且不会出现任何问题。此外，由于劳动力成本的竞争优势，我们能够提供非常合理的Magento迁移价格，适合大多数企业的预算。现在就<a href="https://www.360magento.com/contacts">联系我们</a>获取免费的magento迁移建议，详细的报价和时间表！</p>]]></description>
      <pubDate>Tue, 18 Sep 2018 04:01:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2添加SOLR和ELASTICSEARCH搜索引擎]]></title>
      <link>https://www.360magento.com/blog/m2-add-solr/</link>
      <description><![CDATA[<p>Magento 2社区版仅支持MySQL搜索引擎，但有些项目需要更好的搜索引擎才能提高销售额或转换率。 在这种情况下，我们可以选择实施Solr或Elasticsearch搜索引擎。magento2商业自带支持Solr,请查看<a href="https://www.360magento.com/blog/ce-vs-ee">magento2社区办和magento2企业版的比较</a></p>
<p>在这篇文章中，我们将创建一个框架代码和简单的示例，它将介绍实现其他搜索引擎（如Solr或Elasticsearch）的主要类和方法。如果你进入到Magento 2 后台管理，您可以在这个位置找到搜索引擎配置：Stores -&gt; Configuration -&gt; Catalog -&gt; Catalog Search 然后下拉 &ldquo;Search Engine&rdquo;选项。</p>
<p>在下拉列表中，您将注意到您只有MySQL引擎，我们的第一步是在此下拉列表中添加标签为&ldquo;Solr&rdquo;的额外选项。那么，现在开始吧。</p>
<p>在你的模块etc文件夹中，您需要使用以下xml代码创建文件di.xml：</p>
<pre>&lt;type name="Magento\Search\Model\Adminhtml\System\Config\Source\Engine"&gt;
  &lt;arguments&gt;
     &lt;argument name="engines" xsi:type="array"&gt;
         &lt;item name="solr" xsi:type="string"&gt;Solr&lt;/item&gt;
     &lt;/argument&gt;
  &lt;/arguments&gt;
&lt;/type&gt;
</pre>
<p>使用此xml代码，现在我们已经在下拉列表中添加了一个新选项，其选项名称为&ldquo;Solr&rdquo;。如果您正确创建并清理了Magento缓存，您将能够在下拉列表中看到它，其中会有一个新选项&ldquo;Solr&rdquo;。如果您看到它，则表示您已正确添加它。</p>
<p>在下一步中，我们将从php类开始，这些类负责将数据索引到搜索服务器。</p>
<p>首先，我们要implement Engine类，在di.xml中放入以下代码：</p>
<pre>&lt;type name="Magento\CatalogSearch\Model\ResourceModel\EngineProvider"&gt;
  &lt;arguments&gt;
     &lt;argument name="engines" xsi:type="array"&gt;
        &lt;item name="solr" xsi:type="string"&gt;Search\Solr\Model\ResourceModel\Engine&lt;/item&gt;
     &lt;/argument&gt;
  &lt;/arguments&gt;
&lt;/type&gt;
</pre>
<p>您可以看到我们为&ldquo;Seach\Solr\Model\ResourceModel\Engine&rdquo; 引入了我们自己的Engine类。引擎类负责在数据进入我们的indexerHandler类（solr服务器之前的最后一个端点）之前准备数据，而Engine类必须实现接口：\Magento\CatalogSearch\Model\ResourceModel\EngineInterface。</p>
<p>接口类包含以下四种方法： - processAttributeValue 准备要存储在solr索引中的属性值 - getAllowedVisibility 检索当前引擎允许的可见性值 - allowAdvancedIndex 定义当前搜索引擎是否支持高级索引 - prepareEntityIndex 将索引数组作为分隔符粘贴的字符串</p>
<p>这些方法是必需的，必须在Engine类中实现。为了更好地理解，您可以在类似的MySQL类中检查/比较逻辑：Magento\CatalogSearch\Model\ResourceModel\Engine</p>
<p>我们的框架类示例如下：</p>
<pre>&lt;?php
namespace Search\Solr\Model\ResourceModel;
use Magento\CatalogSearch\Model\ResourceModel\EngineInterface;
class Engine implements EngineInterface
{
    protected $catalogProductVisibility;
    private $indexScopeResolver;
 
    public function __construct(
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver $indexScopeResolver
    ) {
        $this-&gt;catalogProductVisibility = $catalogProductVisibility;
        $this-&gt;indexScopeResolver = $indexScopeResolver;
    }
 
    public function getAllowedVisibility()
    {
        return $this-&gt;catalogProductVisibility-&gt;getVisibleInSiteIds();
    }
 
    public function allowAdvancedIndex()
    {
        return false;
    }
 
    public function processAttributeValue($attribute, $value)
    {
        return $value;
    }
 
    public function prepareEntityIndex($index, $separator = ' ')
    {
        return $index;
    }
 
    public function isAvailable()
    {
        return true;
    }
}
?&gt;
</pre>
<p>下一步是创建名为&ldquo;Seach\Solr\Model\Indexer\IndexerHandler&rdquo;的indexerHandler，它将实现Magento\Framework\Indexer\SaveHandler\IndexerInterface。 要实现IndexerHandler，您需要在di.xml文件中添加以下代码：</p>
<pre>&lt;type name="Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory"&gt;
    &lt;arguments&gt;
        &lt;argument name="handlers" xsi:type="array"&gt;
            &lt;item name="solr" xsi:type="string"&gt;Search\Solr\Model\Indexer\IndexerHandler&lt;/item&gt;
        &lt;/argument&gt;
    &lt;/arguments&gt;
&lt;/type&gt;
</pre>
<p>如果打开IndexerInterface，您将看到四个必须实现的方法： - saveIndex 将实体数据添加到索引 - deleteIndex 从索引中删除实体数据 - cleanIndex 从索引中删除所有数据 - isAvailable 定义引擎是否可用（您可以ping到solr服务器和检查它是否连接）。</p>
<p>我们的IndexerHandler框架类示例如下：</p>
<pre>&lt;?php
namespace Search\Solr\Model\Indexer;
 
use Magento\Eav\Model\Config;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\Indexer\SaveHandler\IndexerInterface;
use Magento\Framework\Indexer\IndexStructureInterface;
use Magento\Framework\Search\Request\Dimension;
use Magento\Framework\Search\Request\IndexScopeResolverInterface;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver;
 
class IndexerHandler implements IndexerInterface
{
    private $indexStructure;
    private $data;
    private $fields;
    private $resource;
    private $batch;
    private $eavConfig;
    private $batchSize;
    private $indexScopeResolver;
    public function __construct(
        Batch $batch,
        array $data,
        $batchSize = 50
    ) {
        $this-&gt;batch = $batch;
        $this-&gt;data = $data;
        $this-&gt;batchSize = $batchSize;
    }
 
    public function saveIndex($dimensions, \Traversable $documents)
    {
        foreach ($this-&gt;batch-&gt;getItems($documents, $this-&gt;batchSize) as $batchDocuments)
        {
        }
    }
 
    public function deleteIndex($dimensions, \Traversable $documents)
    {
        foreach ($this-&gt;batch-&gt;getItems($documents, $this-&gt;batchSize) as $batchDocuments) 
        {
        }
    }
 
    public function cleanIndex($dimensions)
    {
    }
 
    public function isAvailable()
    {
        return true;
    }
}
</pre>
<p>在这些方法中，您应该实现Solr PHP客户端，它将对SOLR服务器进行列表操作。经常用到的是<a href="http://www.solarium-project.org/" rel="nofollow">Solarium PHP客户端</a>。</p>
<p>通过此步骤，我们将结束向搜索服务器索引数据的过程。</p>
<p>现在您可以检查您的索引器是否可以使用以下命令（在magento2 后台将搜索引擎设置为SOLR之前）：</p>
<pre>php /bin/magento indexer:reindex catalogsearch_fulltext
</pre>
<p>在接下来的最后一步中，我们将了解如何在Magento 2前端实现新的搜索引擎。所以，我们必须修改di.xml并添加以下代码：</p>
<pre>&lt;type name="Magento\Search\Model\AdapterFactory"&gt;
    &lt;arguments&gt;
        &lt;argument name="adapters" xsi:type="array"&gt;
            &lt;item name="solr" xsi:type="string"&gt;Search\Solr\SearchAdapter\Adapter&lt;/item&gt;
        &lt;/argument&gt;
    &lt;/arguments&gt;
&lt;/type&gt;
</pre>
<p>我们的新适配器类是Seach\Solr\SearchAdapter\Adapter。适配器类需要实现Magento\Framework\Search\AdapterInterface。在我们的适配器中，我们必须实现方法<strong>query</strong> - 此方法接受查询请求并处理它。看看我们的例子，一切都会更清晰。</p>
<pre>&lt;?php
namespace Search\Solr\SearchAdapter;
use Magento\Framework\Search\AdapterInterface;
use Magento\Framework\Search\RequestInterface;
use Magento\Framework\Search\Response\QueryResponse;
use Search\Solr\SearchAdapter\Aggregation\Builder;
 
class Adapter implements AdapterInterface
{
    protected $responseFactory;
    protected $connectionManager;
    protected $aggregationBuilder;
 
    public function __construct(
        ResponseFactory $responseFactory,
        Builder $aggregationBuilder,
        ConnectionManager $connectionManager
    ) {
        $this-&gt;responseFactory = $responseFactory;
        $this-&gt;aggregationBuilder = $aggregationBuilder;
        $this-&gt;connectionManager = $connectionManager;
    }
    /**
     * @param RequestInterface $request
     * @return QueryResponse
     */
    public function query(RequestInterface $request)
    {
        $client = $this-&gt;getConnection();
        $documents = [];
        $documents[1007] = array('entity_id'=&gt;'1007', 'score'=&gt;46.055);
        $documents[1031] = array('entity_id'=&gt;'1031', 'score'=&gt;45.055);
        $documents[1120] = array('entity_id'=&gt;'1120', 'score'=&gt;44.055);
 
        $aggregations = $this-&gt;aggregationBuilder-&gt;build($request, $documents);
        $response = [
            'documents' =&gt; $documents,
            'aggregations' =&gt; $aggregations,
        ];
        return $this-&gt;responseFactory-&gt;create($response);
    }
 
    public function getConnection(){
        return $this-&gt;connectionManager-&gt;getConnection();
    }
}
?&gt;
</pre>
<p>在我们的示例适配器类中，我我们有一串产品entity_ids：1007,1031,1120来自于我们的数据库产品id，仅用于测试目的。如果你想深入挖掘，我建议你检查MySQL适配器的工作原理。</p>
<p>通过这一步，我们结束了我们的示例。即使事情看起来很复杂，但当你开始工作时，一切都会好起来的。我希望您能喜欢Magneto 2新搜索引擎的编码。</p>]]></description>
      <pubDate>Fri, 14 Sep 2018 03:21:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento1&2颜色选择color swatches设置详细介绍]]></title>
      <link>https://www.360magento.com/blog/magento-color-swatches/</link>
      <description><![CDATA[<div class="post-entry entry std">
<p>视觉感知对购买行为具有很大影响。93％的客户认为视觉外观是购买决策的关键因素。第一次印象不会随着时间而改变。</p>
<p>在构建magento电子商务网站期间，选择color swatches作为用户视觉体验的战斗工具。 color swatches提供了一种友好的方式来显示可配置产品的选择属性。我们想与您分享一些关于如何通过使用 color swatches获得最大利润的提示。</p>
<p>我们的教程将分别为Magento和Magento 2清楚的介绍color swatches。这将有助于你：</p>
<ul>
<li>浏览创建color swatches的过程</li>
<li>在分层导航块（左侧属性筛选）中显示色板</li>
<li>将color swatches集成到自定义主题中</li>
</ul>
<h2>让我们从创建color swatches开始......</h2>
<p>Magento附带Swatch配置，允许您在产品和类别页面以及分层导航中将产品属性显示为颜色样本。您可以更改样本的宽度和高度值。</p>
<p>注意：自Magento 1.9.1版本发布以来，颜色样本内置于可配置的样本功能中。</p>
<p>如果您运行较旧的Magento版本，我们建议您升级或使用Magento插件，以便轻松添加颜色样本。</p>
<p>我们将分别为Magento和Magento 2制作样本。</p>
<h2>创建颜色样本</h2>
<h3>Magento1的步骤</h3>
<p>1.首先，您需要创建将与可配置样本一起使用的属性。您可以在Admin&gt; Catalog&gt;Attribute&gt;Manage Attributes中执行此操作。请确保在&ldquo;Properties&rdquo;选项卡中看到以下值并设置：</p>
<ul>
<li>Scope设置为&ldquo;Global&rdquo;</li>
<li>Catalog Input Type for Store Owner设置为&ldquo;Dropdown&rdquo;</li>
<li>Apply to设置为&ldquo;Configurable Product&rdquo;</li>
<li>Use To Create Configurable Product设置为&ldquo;Yes&rdquo;。</li>
</ul>
<p>要添加新颜色，请查看&ldquo;Manage Label / Options&rdquo;选项卡。您必须按添加选项按钮。在&ldquo;Admin&rdquo;列中，指定颜色的名称。然后，为支持的每种语言定义颜色的名称。这些名称将显示在前端。您还可以设置颜色显示的顺序。请前往查找<a href="https://docs.magento.com/m1/ce/user_guide/catalog/attributes.html" rel="nofollow">有关magento创建属性</a>的更多详细信息</p>
<p>2.现在，您必须在Admin &gt; System &gt; Configuration &gt; CATALOG &gt; Configurable Swatches &gt; General Settings中启用magento可配置样本。然后在&ldquo;Product Attributes to Show as Swatches in Product Detail&rdquo;中选择&ldquo;颜色值&rdquo;以在产品详细页中显示为&ldquo;样本&rdquo;，在&ldquo;Product Attributes to Show as Swatches in Product Detail&rdquo;字段中选择颜色值以便在产品列表中使用样本。</p>
<p>3.保存后，请导航到Admin &gt; Catalog &gt; Manage Products并创建新的可配置产品。如果您在创建可配置产品时需要帮助，请阅读<a href="https://docs.magento.com/m1/ce/user_guide/catalog/product-configurable.html" rel="nofollow">使用说明</a>。</p>
<p>4.最后，您需要上传色板图像和相应的产品图像。</p>
<p>添加色板图像有两种方法。第一种方法是将图像上传到/ media / wysiwyg / swatches文件夹。第二个是将产品图像作为样本图像。重要的细节是：</p>
<ul>
<li>上传的图像必须是.png格式。</li>
<li>上传的图像名称应与其显示的相应属性值完全匹配。</li>
<li>上传到Media Storage的Swatch图像是全局可用的，可用于任何其他产品。</li>
</ul>
<p>您可以在Magento Swatches手册中阅读更多相关信息：</p>
<p><a href="https://docs.magento.com/m1/ce/user_guide/catalog/product-configurable-swatch.html" rel="nofollow">http://docs.magento.com/m1/ce/user_guide/catalog/product-configurable-swatch.html</a></p>
<p>5.重复所有步骤，以便根据需要设置多个样本。</p>
<p>6.重新索引并清除缓存。</p>
<h3>Magento 2的步骤</h3>
<p>在Magento 2中创建色样的过程已经简化。</p>
<p>1.转到Admin &gt; Stores &gt; Attributes &gt; Product，然后单击添加新属性按钮。填写&ldquo;Properties&rdquo;选项卡中的所有必填字段。确保你看到：</p>
<ul>
<li>在Catalog Input Type for Store Owner中选择Visual Swatch。</li>
<li>Update Product Preview Image设置为&ldquo;Yes&rdquo;。</li>
<li>Use Product Image for Swatch if Possible，如果可能，则将产品图像用于样本，将值设置为&ldquo;No&rdquo;。如果要在产品页面上将产品图像显示为可点击样本，可以选择&ldquo;Yes&rdquo;。</li>
</ul>
<p>注意：您可以在此处了解有关<a href="https://docs.magento.com/m2/ce/user_guide/catalog/product-attributes.html" rel="nofollow">创建属性的更多信息</a></p>
<p>2.现在，您需要单击&ldquo; Swatch button&rdquo;按钮。添加您的属性值。</p>
<p>3.指定色板名称。</p>
<p>4.您可以选择颜色单击颜色框附近的箭头。您还可以使用色板图像替换颜色。请单击上传文件。</p>
<p>5.继续填写&ldquo;Advanced Attribute Properties&rdquo;字段以及&ldquo;Manage Labels&rdquo;和&ldquo; Storefront properties&rdquo;选项卡中的字段。保存并清除缓存。</p>
<p>现在，您需要将新创建的属性分配给产品。如果您需要先创建产品，请<a href="https://docs.magento.com/m2/ce/user_guide/catalog/product-create-configurable.html" rel="nofollow">查看用户指南。</a></p>
<p>请继续关注 - 我们会不定期更新我们的博文。</p>
</div>]]></description>
      <pubDate>Fri, 07 Sep 2018 08:21:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2创建自定义模块步骤/教程]]></title>
      <link>https://www.360magento.com/blog/create-moudle-m2/</link>
      <description><![CDATA[<p>
Magento2模块开发是magento开发人员必备的技能，此片文章中我们将一步一步教您在Magento2中创建一个HelloWorld模块，
</p>
<h2>基本要求</h2>
<p>在Magento 2中启动模块开发过程之前，请确保满足以下要求：</p>
<ul>
<li>安装最新版本的Magento 2，即2.1（如果您使用的是旧版本）。</li>
<li>如果您不想在每次更改编码时从Web存储中删除缓存，则应禁用Magento缓存。这将节省您的时间并加快您的模块开发过程。要禁用缓存，您需要转到Admin » System » Cache Management » 选择所有缓存类型并禁用它们。</li>
<li>将Magento切换到开发人员模式。这将帮助您轻松查看网站中的所有错误和漏洞。要打开开发人员模式，您需要访问终端并在Magento 2根目录执行如下命令：
<pre>php bin/magento deploy:mod:set developer</pre>
</li>
</ul>
<p>现在，让我们开始在Magento 2中创建新的自定义模块。</p>
<h2>1.创建模块文件夹</h2>
<p>在Magento 2中创建模块的过程与我们在旧版Magento中使用的过程完全不同。在Magento 2中，没有代码池文件夹。并且所有模块都按命名空间分组并放在<code>app/code</code>文件夹中。这意味着您需要在<code>app/code</code>目录中直接创建模块：<code>app/code/&lt;Vendor&gt;/&lt;ModuleName&gt;</code></p>
<h2>1.1模块设置</h2>
<p>要设置模块，我们需要创建模块文件夹和其他基本文件。这一特定步骤将帮助您轻松地为最新版本的Magento注册新模块</p>
<h3>创建这两个文件夹:</h3>
<p><code>app/code/webstore</code></p>
<p><code>app/code/Webstore/HelloWorld</code></p>
<p>注意：这里'Webstore'是模块的命名空间，而'Helloworld'是模块的名称。</p>
<h3>1.1.2创建module.xml文件以声明模块</h3>
<p>创建模块文件夹后，您需要使用以下代码在<code>app/code/Webstore/HelloWorld/etc</code>文件夹中创建<code>module.xml</code>文件：</p>
<pre>
&lt;?xml version="1.0"?&gt;

&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"&gt; 
&lt;module name="webstore_HelloMagento" setup_version="1.0.0" /&gt;
&lt;/module&gt;
&lt;/config&gt;
</pre>
<p>这将在模块etc目录中创建一个配置，让Magento 2轻松识别模块的名称和版本。</p>
<p>在此特定文件中，我们将声明一个名为webstore_Helloworld且版本为1.0.0 的模块</p>
<h3>1.1.3注册模块</h3>
<p>在Magento 2中，您需要通过Magento <code>ComponentRegistrar</code>类在Magento系统中注册所有模块。因此，您需要在<code>app/code/Webstore/Helloworld</code>文件夹中创建<code>registration.php</code>文件：</p>
<pre>
&lt;?php
\Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE,'webstore_Helloworld',__DIR__);
</pre>
<h3>1.1.4启用模块</h3>
<p>注册模块后，您可以在Magento 2环境中启用它。要检查Magento是否已识别新模块，您需要运行以下命令行：</p>
<pre>php bin/magento module:status1</pre>
<p>上面的步骤将显示以下结果：</p>
<pre>
List of disabled modules:
Webstore_HelloWorld
</pre>
<p>这意味着系统已识别该模块，但未在Magento系统中启用。为此，您需要运行以下命令来启用该模块：</p>
<pre>
php bin/magento module:enable Webstore_HelloWorld
</pre>
<p>这将启用系统中的模块，并显示如下结果：</p>
<pre>
The following modules has been enabled:
- Webstore_HelloWorld
</pre>
<p>由于您是第一次在系统中启用此模块，因此请确保运行此命令以让Magento轻松检查和升级模块数据库：</p>
<pre>php bin/magento setup:upgrade</pre>
<p>注意：进入Admin » Stores » Configuration » Advanced » Advanced以检查新模块的可用性</p>
<h2>2.创建控制器</h2>
<h3>2.1为新模块创建routes.xml文件</h3>
<p>
在此步骤中，您需要通过在Magento根目录中创建<code>routes.xml</code>文件来为新模块定义路由器。在<code>app/code/Webstore/HelloWorld/frontend</code>文件夹中添加以下代码：
</p>
<pre>
&lt;?xml version="1.0" ?&gt;  
&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"&gt;
&lt;router id="standard"&gt;
&lt;route id="helloworld" frontName="helloworld"&gt;
&lt;module name="Webstore_Helloworld"/&gt;
&lt;/route&gt;
&lt;/router&gt;
&lt;/config&gt;
</pre>
<p>注意：上面的代码将帮助您定义前端路由器和路由HelloWorld</p>
<p>在Magento 2中，frontName属性成为URL的第一部分。这意味着您的URL将生成如下：</p>
<pre>&lt;frontname&gt;/&lt;controller_folder-name&gt;/&lt;controller_class_name&gt;</pre>
<p>举个例子：</p>
<pre>helloworld/index/index</pre>
<h3>2.2创建index.php控制器文件</h3>
<p>在此步骤中，您将需要创建控制器和action的index.php控制器文件来显示HelloWorld模块。为此，在app/code/Webstore/HelloWorld/Controller/Index文件夹中添加以下代码：</p>
<pre>
&lt;?php

namespace Webstore\Helloworld\Controller\Index;

use Magento\Framework\App\Action\Context;

class Index extends \Magento\Framework\App\Action\Action 
{
    protected $_resultPageFactory;

    public function __construct(Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory){
        $this->_resultPageFactory = $resultPageFactory; 
        parent::__construct($context); 
    }

    public function execute() {
        $resultPage = $this->_resultPageFactory->create(); 
        return $resultPage; 
    }
}
</pre>
<h2>3.创建一个Block块</h2>
<p>你需要创建一个block累，使用<code>getHelloWorldTxt()</code>方法,然后返回“Hello world” 字符串</p>
<h3>3.1创建HelloWorld.php文件</h3>
<p>在<code>app/code/Webstore/HelloWorld/Block </code>文件夹下创建HelloWorld.php，并写入以下代码</p>
<pre>
&lt;?php

namespace Webstore\Helloworld\Block;   

class Helloworld extends \Magento\Framework\View\Element\Template 
{
    public function getHelloWorldTxt(){ 
        return'Hello world!'; 
    } 
}
</pre>
<h2>4.创建一个布局和模板文件</h2>
<p>在Magento 2中，您可以在模块内的视图文件夹中找到布局文件和模板。在此文件夹下，您可以看到三个子文件夹：</p>
<ul>
<li>adminhtml：用于后端文件</li>
<li>frontend文件夹：用于前端文件，和</li>
<li>Base文件夹：用于admin和frontend文件。</li>
</ul>
<p>因此，首先，我们将在前端布局中创建布局和模板文件。</p>
<h3>4.1创建helloworld_index_index.xml文件</h3>
<p>请在<code>app/code/Webstore/Helloworld/view/forntend/layout</code>文件夹中创建布局文件<code>helloworld_index_index.xml</code>并写入以下代码：</p>
<pre>
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd" layout="1column"&gt;
&lt;body&gt;
&lt;referenceContainer name="content"&gt;
&lt;block class="Webstore\Helloworld\Block\Helloworld" name="helloworld" template="helloworld.phtml"/&gt;
&lt;/referenceContainer&gt;
&lt;/body&gt;
&lt;/page&gt;
</pre>
<p>注意：确保将块添加到内容容器并将块的模板设置为helloworld.phtml,然后创建下一步。</p>
<h3>4.2在前端模板文件夹中创建helloworld.phtml文件</h3>
<p>在<code>app/code/Webstore/Helloworld/view/frontend/templates</code>文件夹中创建模板文件<code>helloworld.phtml</code>并写入下面代码：</p>
<pre>
&lt;h1&gt;&lt;?php echo $this->getHelloWorldTxt(); ?>&lt;/h1&gt;
</pre>
<p>注意： $this变量被视为块类，调用方法为getHelloWorldTxt()。</p>
<p>现在，在浏览器中访问/helloworld/index/index URL以在Magento 2中查看您的全新模块。该URL将如下所示：http://xyz.com/helloworld/index/display</p>

<p>如果您仔细遵循上述步骤，在Magento 2中创建新模块可能是一个简单的过程。您可以轻松使用我们的源代码并为您的Magento网上商店开发一流的模块。</p>
<br>
<p>想要为您的Magento2平台增加更多特色功能模块，请<a href="https://www.360magento.com/contacts">提交您的需求</a></p>]]></description>
      <pubDate>Sun, 02 Sep 2018 15:40:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2 获取base url , media url 和 static url]]></title>
      <link>https://www.360magento.com/blog/magento2-get-url/</link>
      <description><![CDATA[<p>在Magento2开发过程中经常会用到Base Url,Media Url,Static Url,下面就讲下在Magento2的不同文件中调用Base Url,Media Url,Static Url</p>
<h2>在phtml文件中获取Base Url,Media Url,Static Url</h2>
<pre>&lt;?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager-&gt;get('\Magento\Store\Model\StoreManagerInterface');
/* Get base url with index When index.php enable at Url */
$baseUrl = $storeManager-&gt;getStore()-&gt;getBaseUrl();
/* Result  http://www.example.com/ or http://www.example.com/index.php  depends SEo rewite settng*/
/* it always give the URL without Index.php either index.php enable for Url */ 
$baseUrlWithOutIndexPhp = $storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);
// $baseUrl  result = http://example.com/

/* It is give url with index.php whenever  seo rewrite not enable mean when  Index.php show at Url  */

$linkUrl= $storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
 
 /* $linkUrl  result = http://example.com/index.php/
 		 whenever  seo rewrite not enable mean when  Index.php show at Url
		
		but when  SEO Rewrite enabled
		
		Then it show result = http://example.com/
 
 */

$statiContenteUrl =$storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
/* Result $statiContenteUrl = http://example.com/pub/static/version1507042743/
 	In this part  version1507042743 is 1507042743 static content version which dynamcically created
*/

$mediaUrl =  $storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
/* Result $mediaUrl = http://example.com/pub/media/

*/</pre>
<p>直接使用对象管理器不是一个好主意</p>
<p>如果在您的Block/helper/controller/Model中有Store Manager Object类，你就可以用下面的代码获取Base Url,Media Url,Static Url，注意，你讲通过Magento\Store\Model\StoreManagerInterface注入类获取商店管理器对象</p>
<h2>获取Base Url</h2>
<pre>/* it always give the URL  Index.php either index.php enable for Url */ 
/*  result   is http://example.com/  or http://example.com/index.php depends Magento Setting SEO Rewrite  */
$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl()
</pre>
<p>你将得到如下结果</p>
<p>http://www.example.com (如果Seo rewrite 开启) 和 http://www.example.com/index.php (如果Seo rewrite 未开启)</p>
<p>如果你想获取的Base Url不带index.php,用下面的代码</p>
<pre>$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB)
</pre>
<h2>获取Media Url</h2>
<pre>$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl()
</pre>
<h2>获取链接 Url</h2>
<pre> /* $linkUrl  result = http://example.com/index.php/ whenever  seo rewrite not enable mean when  Index.php show at Url
		but when  SEO Rewrite enabled Then it show result = http://example.com/
 */
  $this-&gt;_storeManager-&gt;getStore()
               -&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
</pre>
<h2>获取Static Url</h2>
<pre>/* Result $statiContenteUrl = http://example.com/pub/static/version1507042743/
 	In this part  version1507042743 is 1507042743 static content version which dynamcically created

$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
</pre>
<p>在Magento1中你可以用Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB))来获取Base Url，<a href="https://www.360magento.com/blog/magento-get-url" title="Magento1获取Base Url , Skin Url , Media Url , Js Url , Store Url 和 Current Url">Magento1获取Base Url , Skin Url , Media Url , Js Url , Store Url 和 Current Url链接</a></p>
<p>在Magento2中，没有使用工厂模式，所以没有像Mage :: getBaseUrl()的代码，你可以使用StoreManager object，然后用$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl()你就可以获得Base Url了。</p>
<p>Magento2中，使用接口、注入类，你应该注入</p>
<p>Magento\Store\Model\StoreManagerInterface</p>
<p>在Model，Resource model，Helper类中获取Base URL。</p>
<p>在下面的示例类中，我已经为我的类注入了StoreManagerInterface</p>
<pre>&lt;?php
namespace {MyClassNameSpace};
class {ClassName} 
{
    /**
     * @var \Magento\Store\Model\StoreManagerInterface
     */
    protected $_storeManager;
 
    public function __construct(
		 ......
        \Magento\Store\Model\StoreManagerInterface $storeManager
			 .......
    ) {
 		.....
        $this-&gt;_storeManager = $storeManager;
 		.....
    }
 
    public function mygStoreBaseUrl(){
		
		$statiContenteUrl = $this-&gt;_storeManager-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC);
		$mediaUrl = $this-&gt;_storeManager-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
		$linkUrl = $this-&gt;_storeManager-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK);
		$baseUrlwithoutIndexPhp = $this-&gt;_storeManager-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB);

 		return $this-&gt;_storeManager-&gt;getStore()
					-&gt;getBaseUrl();
					
    }
    public function myStoreUrl(){
 
 		return $this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl()
    }
    
}
</pre>
<p>请注意：如果您使用了任何块类扩展基本块模板</p>
<pre>\Magento\Framework\View\Element\Template</pre>
<p>应该避免为该情况注入商店管理器接口，因为extends类已经有商店管理器对象</p>
<pre> \Magento\Store\Model\StoreManagerInterface
</pre>
<p>尝试下面的代码来获取magento2 BaseURL</p>
<pre>$this-&gt;_storeManager-&gt;getStore()-&gt;getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB)</pre>
<p>如何通过对象管理器获取magento2 Base URL 使用对象管理器获取magento2 Base URL然后尝试下面：</p>
<pre>$this-&gt;_objectManager-&gt;get('Magento\Store\Model\StoreManagerInterface')
            -&gt;getStore($storeId)
            -&gt;getBaseUrl();
</pre>
<p>假设您的类具有对象管理器。</p>
<p>如果没有对象管理器，那么试试这个：</p>
<pre>
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
$storeManager->getStore()->getBaseUrl();
</pre>
<p>但是这种类型的对象管理器调用真的很糟糕。</p>]]></description>
      <pubDate>Wed, 29 Aug 2018 08:42:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2如何获取订单商品总数量]]></title>
      <link>https://www.360magento.com/blog/m2-get-order-item/</link>
      <description><![CDATA[<p>电子商务由几个丰富的元素组成，Magento已成功覆盖了所有这些元素，也许这就是为什么它成为世界500强的的选择。但通常情况下，每个Magento项目都会通过定制来为商城提供个性化的功能效果。</p>
<p>从事magento定制开发工作，我们遇到了太多的不同的定制要求，有时我们听到客户的一些需求感到震惊，每个企业都有自己的故事，自己的需求和个性化需求，这就是它独特的原因。</p>
<p>最近，其中一位客户告诉我们，他花了大量时间来确定订单中有多少产品数量。他想节省时间，以便将宝贵的时间投入到其他业务中。也许你也需要知道订单产品总数量，所以这段代码可以帮助你节省时间。因此，我们已经确定了使用以下两种方法快速完成其工作的两种方法。</p>
<h2>方法1：标准Magento方法</h2>
<pre>public function __construct(\Magento\Sales\Model\OrderFactory $orderFactory)
{
    $this-&gt;orderFactory = $orderFactory;
}
 
public function execute()
{
     $orderId = 5;  //PASS YOUR ORDER ID HERE
     $order = $this-&gt;orderFactory-&gt;create()-&gt;load($orderId);
     $orderItems = $order-&gt;getAllItems();
     $total_qty = 0;
     foreach ($orderItems as $item)
     {
          $total_qty = $total_qty + $item-&gt;getQtyOrdered();
     }
     return $total_qty;
}
</pre>
<h2>方法2：使用对象管理器</h2>
<pre>$order_id = 5;  //PASS YOUR ORDER ID HERE
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager-&gt;create('Magento\Sales\Model\Order')-&gt;load($order_id);
$orderItems = $order-&gt;getAllItems();
$total_qty = 0;
foreach ($orderItems as $item)
{
   $total_qty = $total_qty + $item-&gt;getQtyOrdered();
}
 
echo $total_qty;
</pre>]]></description>
      <pubDate>Mon, 27 Aug 2018 12:54:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2命令行大全]]></title>
      <link>https://www.360magento.com/blog/magento2-cli/</link>
      <description><![CDATA[<article class="article-content">
			<p>在本教程中，我们将讨论<strong><a class="no-text-color" href="http://blog.magego.com/m2dev-tutorials15/" data-original-title="" title="">Magento 2中的命令行接口（CLI）</a></strong>。如你所知，Magento 2在<code class="highlighter-rouge">bin/magento</code>添加了许多命令。</p>
<p>当你在终端运行命令时：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento</span></li></ol></pre>
<p>要么</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">bin</span><span class="pun">/</span><span class="pln">magento</span></li></ol></pre>
<p>你将得到可用的Magento 2命令行列表，这个列表包括<a href="/m2dev-tutorials14" data-original-title="" title="">自定义的命令行</a></p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="typ">Usage</span><span class="pun">:</span><span class="pln">                                                                                                                      </span></li><li class="L1"><span class="pln"> command </span><span class="pun">[</span><span class="pln">options</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">arguments</span><span class="pun">]</span><span class="pln">                                                                                              </span></li><li class="L2"><span class="pln">                                                                                                                            </span></li><li class="L3"><span class="typ">Options</span><span class="pun">:</span><span class="pln">                                                                                                                    </span></li><li class="L4"><span class="pln"> </span><span class="pun">--</span><span class="pln">help </span><span class="pun">(-</span><span class="pln">h</span><span class="pun">)</span><span class="pln">           </span><span class="typ">Display</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> help message                                                                            </span></li><li class="L5"><span class="pln"> </span><span class="pun">--</span><span class="pln">quiet </span><span class="pun">(-</span><span class="pln">q</span><span class="pun">)</span><span class="pln">          </span><span class="typ">Do</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> output any message                                                                            </span></li><li class="L6"><span class="pln"> </span><span class="pun">--</span><span class="pln">verbose </span><span class="pun">(-</span><span class="pln">v</span><span class="pun">|</span><span class="pln">vv</span><span class="pun">|</span><span class="pln">vvv</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Increase</span><span class="pln"> the verbosity of messages</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> normal output</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> more verbose output </span><span class="kwd">and</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> debug   </span></li><li class="L7"><span class="pln"> </span><span class="pun">--</span><span class="pln">version </span><span class="pun">(-</span><span class="pln">V</span><span class="pun">)</span><span class="pln">        </span><span class="typ">Display</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> application version                                                                     </span></li><li class="L8"><span class="pln"> </span><span class="pun">--</span><span class="pln">ansi                </span><span class="typ">Force</span><span class="pln"> ANSI output                                                                                    </span></li><li class="L9"><span class="pln"> </span><span class="pun">--</span><span class="kwd">no</span><span class="pun">-</span><span class="pln">ansi             </span><span class="typ">Disable</span><span class="pln"> ANSI output                                                                                  </span></li><li class="L0"><span class="pln"> </span><span class="pun">--</span><span class="kwd">no</span><span class="pun">-</span><span class="pln">interaction </span><span class="pun">(-</span><span class="pln">n</span><span class="pun">)</span><span class="pln"> </span><span class="typ">Do</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> ask any interactive question                                                                  </span></li><li class="L1"><span class="pln">                                                                                                                            </span></li><li class="L2"><span class="typ">Available</span><span class="pln"> commands</span><span class="pun">:</span><span class="pln">                                                                                                         </span></li><li class="L3"><span class="pln"> help                                      </span><span class="typ">Displays</span><span class="pln"> help </span><span class="kwd">for</span><span class="pln"> a command                                                      </span></li><li class="L4"><span class="pln"> list                                      </span><span class="typ">Lists</span><span class="pln"> commands                                                                   </span></li><li class="L5"><span class="pln">admin                                                                                                                       </span></li><li class="L6"><span class="pln"> admin</span><span class="pun">:</span><span class="pln">user</span><span class="pun">:</span><span class="pln">create                         </span><span class="typ">Creates</span><span class="pln"> an administrator                                                         </span></li><li class="L7"><span class="pln"> admin</span><span class="pun">:</span><span class="pln">user</span><span class="pun">:</span><span class="pln">unlock                         </span><span class="typ">Unlock</span><span class="pln"> </span><span class="typ">Admin</span><span class="pln"> </span><span class="typ">Account</span><span class="pln">                                                             </span></li><li class="L8"><span class="pln">cache                                                                                                                       </span></li><li class="L9"><span class="pln"> cache</span><span class="pun">:</span><span class="pln">clean                               </span><span class="typ">Cleans</span><span class="pln"> cache type</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span><span class="pln">                                                             </span></li><li class="L0"><span class="pln"> cache</span><span class="pun">:</span><span class="pln">disable                             </span><span class="typ">Disables</span><span class="pln"> cache type</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span><span class="pln">                                                           </span></li><li class="L1"><span class="pln"> cache</span><span class="pun">:</span><span class="pln">enable                              </span><span class="typ">Enables</span><span class="pln"> cache type</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span><span class="pln">                                                            </span></li><li class="L2"><span class="pln"> cache</span><span class="pun">:</span><span class="pln">flush                               </span><span class="typ">Flushes</span><span class="pln"> cache storage used </span><span class="kwd">by</span><span class="pln"> cache type</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span><span class="pln">                                      </span></li><li class="L3"><span class="pln"> cache</span><span class="pun">:</span><span class="pln">status                              </span><span class="typ">Checks</span><span class="pln"> cache status                                                              </span></li><li class="L4"><span class="pln">catalog                                                                                                                     </span></li><li class="L5"><span class="pln"> catalog</span><span class="pun">:</span><span class="pln">images</span><span class="pun">:</span><span class="pln">resize                     </span><span class="typ">Creates</span><span class="pln"> resized product images                                                   </span></li><li class="L6"><span class="pln"> catalog</span><span class="pun">:</span><span class="pln">product</span><span class="pun">:</span><span class="pln">attributes</span><span class="pun">:</span><span class="pln">cleanup        </span><span class="typ">Removes</span><span class="pln"> unused product attributes</span><span class="pun">.</span><span class="pln">                                               </span></li><li class="L7"><span class="pln">cron                                                                                                                        </span></li><li class="L8"><span class="pln"> cron</span><span class="pun">:</span><span class="pln">run                                  </span><span class="typ">Runs</span><span class="pln"> jobs </span><span class="kwd">by</span><span class="pln"> schedule                                                            </span></li><li class="L9"><span class="pln">customer                                                                                                                    </span></li><li class="L0"><span class="pln"> customer</span><span class="pun">:</span><span class="pln">hash</span><span class="pun">:</span><span class="pln">upgrade                     </span><span class="typ">Upgrade</span><span class="pln"> customer</span><span class="str">'s hash according to the latest algorithm                        </span></li><li class="L1"><span class="str">deploy                                                                                                                      </span></li><li class="L2"><span class="str"> deploy:mode:set                           Set application mode.                                                            </span></li><li class="L3"><span class="str"> deploy:mode:show                          Displays current application mode.                                               </span></li><li class="L4"><span class="str">dev                                                                                                                         </span></li><li class="L5"><span class="str"> dev:source-theme:deploy                   Collects and publishes source files for theme.                                   </span></li><li class="L6"><span class="str"> dev:tests:run                             Runs tests                                                                       </span></li><li class="L7"><span class="str"> dev:urn-catalog:generate                  Generates the catalog of URNs to *.xsd mappings for the IDE to highlight xml.    </span></li><li class="L8"><span class="str"> dev:xml:convert                           Converts XML file using XSL style sheets                                         </span></li><li class="L9"><span class="str">i18n                                                                                                                        </span></li><li class="L0"><span class="str"> i18n:collect-phrases                      Discovers phrases in the codebase                                                </span></li><li class="L1"><span class="str"> i18n:pack                                 Saves language package                                                           </span></li><li class="L2"><span class="str"> i18n:uninstall                            Uninstalls language packages                                                     </span></li><li class="L3"><span class="str">indexer                                                                                                                     </span></li><li class="L4"><span class="str"> indexer:info                              Shows allowed Indexers                                                           </span></li><li class="L5"><span class="str"> indexer:reindex                           Reindexes Data                                                                   </span></li><li class="L6"><span class="str"> indexer:reset                             Resets indexer status to invalid                                                 </span></li><li class="L7"><span class="str"> indexer:set-mode                          Sets index mode type                                                             </span></li><li class="L8"><span class="str"> indexer:show-mode                         Shows Index Mode                                                                 </span></li><li class="L9"><span class="str"> indexer:status                            Shows status of Indexer                                                          </span></li><li class="L0"><span class="str">info                                                                                                                        </span></li><li class="L1"><span class="str"> info:adminuri                             Displays the Magento Admin URI                                                   </span></li><li class="L2"><span class="str"> info:backups:list                         Prints list of available backup files                                            </span></li><li class="L3"><span class="str"> info:currency:list                        Displays the list of available currencies                                        </span></li><li class="L4"><span class="str"> info:dependencies:show-framework          Shows number of dependencies on Magento framework                                </span></li><li class="L5"><span class="str"> info:dependencies:show-modules            Shows number of dependencies between modules                                     </span></li><li class="L6"><span class="str"> info:dependencies:show-modules-circular   Shows number of circular dependencies between modules                            </span></li><li class="L7"><span class="str"> info:language:list                        Displays the list of available language locales                                  </span></li><li class="L8"><span class="str"> info:timezone:list                        Displays the list of available timezones                                         </span></li><li class="L9"><span class="str">maintenance                                                                                                                 </span></li><li class="L0"><span class="str"> maintenance:allow-ips                     Sets maintenance mode exempt IPs                                                 </span></li><li class="L1"><span class="str"> maintenance:disable                       Disables maintenance mode                                                        </span></li><li class="L2"><span class="str"> maintenance:enable                        Enables maintenance mode                                                         </span></li><li class="L3"><span class="str"> maintenance:status                        Displays maintenance mode status                                                 </span></li><li class="L4"><span class="str">module                                                                                                                      </span></li><li class="L5"><span class="str"> module:disable                            Disables specified modules                                                       </span></li><li class="L6"><span class="str"> module:enable                             Enables specified modules                                                        </span></li><li class="L7"><span class="str"> module:status                             Displays status of modules                                                       </span></li><li class="L8"><span class="str"> module:uninstall                          Uninstalls modules installed by composer                                         </span></li><li class="L9"><span class="str">sampledata                                                                                                                  </span></li><li class="L0"><span class="str"> sampledata:deploy                         Deploy sample data modules                                                       </span></li><li class="L1"><span class="str"> sampledata:remove                         Remove all sample data packages from composer.json                               </span></li><li class="L2"><span class="str"> sampledata:reset                          Reset all sample data modules for re-installation                                </span></li><li class="L3"><span class="str">setup                                                                                                                       </span></li><li class="L4"><span class="str"> setup:backup                              Takes backup of Magento Application code base, media and database                </span></li><li class="L5"><span class="str"> setup:config:set                          Creates or modifies the deployment configuration                                 </span></li><li class="L6"><span class="str"> setup:cron:run                            Runs cron job scheduled for setup application                                    </span></li><li class="L7"><span class="str"> setup:db-data:upgrade                     Installs and upgrades data in the DB                                             </span></li><li class="L8"><span class="str"> setup:db-schema:upgrade                   Installs and upgrades the DB schema                                              </span></li><li class="L9"><span class="str"> setup:db:status                           Checks if DB schema or data requires upgrade                                     </span></li><li class="L0"><span class="str"> setup:di:compile                          Generates DI configuration and all missing classes that can be auto-generated    </span></li><li class="L1"><span class="str"> setup:install                             Installs the Magento application                                                 </span></li><li class="L2"><span class="str"> setup:performance:generate-fixtures       Generates fixtures                                                               </span></li><li class="L3"><span class="str"> setup:rollback                            Rolls back Magento Application codebase, media and database                      </span></li><li class="L4"><span class="str"> setup:static-content:deploy               Deploys static view files                                                        </span></li><li class="L5"><span class="str"> setup:store-config:set                    Installs the store configuration                                                 </span></li><li class="L6"><span class="str"> setup:uninstall                           Uninstalls the Magento application                                               </span></li><li class="L7"><span class="str"> setup:upgrade                             Upgrades the Magento application, DB data, and schema                            </span></li><li class="L8"><span class="str">theme                                                                                                                       </span></li><li class="L9"><span class="str"> theme:uninstall                           Uninstalls theme                                                                 </span></li></ol></pre>
<h2 id="command-line-category">命令行类别</h2>
<p>我们可以把这个列表分成以下几类：</p>
<ul>
<li>Cache</li>
<li>Indexer</li>
<li>Cron job</li>
<li>Code compiler</li>
<li>Set the Magento mode</li>
<li>i18n translation</li>
<li>Run unit tests</li>
<li>Maintenance</li>
<li>module management</li>
<li>Setup: Install, Upgrade, Uninstall, Backup , Rollback</li>
<li>Theme</li>
<li>Deployment</li>
</ul>
<p>接下来我们将举几个例子。</p>
<h2 id="cache-command-line">缓存命令行</h2>
<h5 id="how-to-check-status-of-cache-types">如何检查缓存类型的状态</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">status</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">                    config</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L1"><span class="pln">                    layout</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L2"><span class="pln">                block_html</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L3"><span class="pln">               collections</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L4"><span class="pln">                    db_ddl</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L5"><span class="pln">                       eav</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L6"><span class="pln">                 full_page</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L7"><span class="pln">                 translate</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L8"><span class="pln">        config_integration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L9"><span class="pln">    config_integration_api</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li><li class="L0"><span class="pln">         config_webservice</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span></li></ol></pre>
<h5 id="how-to-clean-cache-types">如何清理缓存类型</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">clean</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">clean                  </span></li><li class="L1"><span class="typ">Cleaned</span><span class="pln"> cache types</span><span class="pun">:</span><span class="pln">                           </span></li><li class="L2"><span class="pln">config                                         </span></li><li class="L3"><span class="pln">layout                                         </span></li><li class="L4"><span class="pln">block_html                                     </span></li><li class="L5"><span class="pln">collections                                    </span></li><li class="L6"><span class="pln">reflection                                     </span></li><li class="L7"><span class="pln">db_ddl                                         </span></li><li class="L8"><span class="pln">eav                                            </span></li><li class="L9"><span class="pln">customer_notification                          </span></li><li class="L0"><span class="pln">full_page                                      </span></li><li class="L1"><span class="pln">config_integration                             </span></li><li class="L2"><span class="pln">config_integration_api                         </span></li><li class="L3"><span class="pln">translate                                      </span></li><li class="L4"><span class="pln">config_webservice</span></li></ol></pre>
<h5 id="how-to-flush-cache-types">如何刷新缓存类型</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">flush</span></li></ol></pre>
<h5 id="how-to-check-enable-disable-cache-types">如何检查启用，禁用缓存类型</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">enable</span></li><li class="L1"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">disable</span></li></ol></pre>
<p>高级命令：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">enable </span><span class="pun">[</span><span class="pln">type</span><span class="pun">]</span><span class="pln"> </span><span class="pun">...</span><span class="pln"> </span><span class="pun">[</span><span class="pln">type</span><span class="pun">]</span></li><li class="L1"><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">disable </span><span class="pun">[</span><span class="pln">type</span><span class="pun">]</span><span class="pln"> </span><span class="pun">...</span><span class="pln"> </span><span class="pun">[</span><span class="pln">type</span><span class="pun">]</span></li></ol></pre>
<p>例如禁用整页缓存</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">magento cache</span><span class="pun">:</span><span class="pln">disable full_page</span></li></ol></pre>
<h2 id="indexer-command-line">索引器命令行</h2>
<p>通过以下命令检查索引器状态</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="pln">info</span></li></ol></pre>
<p>我们会得到结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">design_config_grid                       </span><span class="typ">Design</span><span class="pln"> </span><span class="typ">Config</span><span class="pln"> </span><span class="typ">Grid</span></li><li class="L1"><span class="pln">customer_grid                            </span><span class="typ">Customer</span><span class="pln"> </span><span class="typ">Grid</span></li><li class="L2"><span class="pln">catalog_category_product                 </span><span class="typ">Category</span><span class="pln"> </span><span class="typ">Products</span></li><li class="L3"><span class="pln">catalog_product_category                 </span><span class="typ">Product</span><span class="pln"> </span><span class="typ">Categories</span></li><li class="L4"><span class="pln">catalog_product_price                    </span><span class="typ">Product</span><span class="pln"> </span><span class="typ">Price</span></li><li class="L5"><span class="pln">catalog_product_attribute                </span><span class="typ">Product</span><span class="pln"> EAV</span></li><li class="L6"><span class="pln">catalogsearch_fulltext                   </span><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Search</span></li><li class="L7"><span class="pln">cataloginventory_stock                   </span><span class="typ">Stock</span></li><li class="L8"><span class="pln">catalogrule_rule                         </span><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Rule</span><span class="pln"> </span><span class="typ">Product</span></li><li class="L9"><span class="pln">catalogrule_product                      </span><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Product</span><span class="pln"> </span><span class="typ">Rule</span></li></ol></pre>
<h5 id="how-to-reindexe-data">如何重建数据</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="pln">reindex</span></li></ol></pre>
<h5 id="how-to-reset-indexer-status-to-invalid">如何将索引器状态重置为无效</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="pln">reset</span></li></ol></pre>
<h5 id="how-to-show-index-mode">如何显示索引模式</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="pln">show</span><span class="pun">-</span><span class="pln">mode</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="pln">show</span><span class="pun">-</span><span class="pln">mode</span></li><li class="L1"><span class="pln">&nbsp;</span></li><li class="L2"><span class="typ">Design</span><span class="pln"> </span><span class="typ">Config</span><span class="pln"> </span><span class="typ">Grid</span><span class="pun">:</span><span class="pln">                                </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L3"><span class="typ">Customer</span><span class="pln"> </span><span class="typ">Grid</span><span class="pun">:</span><span class="pln">                                     </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L4"><span class="typ">Category</span><span class="pln"> </span><span class="typ">Products</span><span class="pun">:</span><span class="pln">                                 </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L5"><span class="typ">Product</span><span class="pln"> </span><span class="typ">Categories</span><span class="pun">:</span><span class="pln">                                </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L6"><span class="typ">Product</span><span class="pln"> </span><span class="typ">Price</span><span class="pun">:</span><span class="pln">                                     </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L7"><span class="typ">Product</span><span class="pln"> EAV</span><span class="pun">:</span><span class="pln">                                       </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L8"><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Search</span><span class="pun">:</span><span class="pln">                                    </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L9"><span class="typ">Stock</span><span class="pun">:</span><span class="pln">                                             </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L0"><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Rule</span><span class="pln"> </span><span class="typ">Product</span><span class="pun">:</span><span class="pln">                              </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li><li class="L1"><span class="typ">Catalog</span><span class="pln"> </span><span class="typ">Product</span><span class="pln"> </span><span class="typ">Rule</span><span class="pun">:</span><span class="pln">                              </span><span class="typ">Update</span><span class="pln"> on </span><span class="typ">Save</span></li></ol></pre>
<h5 id="how-to-set-index-mode-type">如何设置索引模式类型</h5>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento indexer</span><span class="pun">:</span><span class="kwd">set</span><span class="pun">-</span><span class="pln">mode </span><span class="pun">{</span><span class="pln">realtime</span><span class="pun">|</span><span class="pln">schedule</span><span class="pun">}</span><span class="pln"> </span><span class="pun">[</span><span class="pln">indexer</span><span class="pun">]</span></li></ol></pre>
<p>例如：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">magento indexer</span><span class="pun">:</span><span class="kwd">set</span><span class="pun">-</span><span class="pln">mode schedule catalog_category_product catalog_product_category</span></li></ol></pre>
<h2 id="deploy-command-line">部署命令行</h2>
<p>命令语法：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento setup</span><span class="pun">:</span><span class="kwd">static</span><span class="pun">-</span><span class="pln">content</span><span class="pun">:</span><span class="pln">deploy </span><span class="str">&lt;lang&gt;</span><span class="pln"> </span><span class="pun">...</span><span class="pln"> </span><span class="str">&lt;lang&gt;</span><span class="pln"> </span><span class="pun">[--</span><span class="pln">dry</span><span class="pun">-</span><span class="pln">run</span><span class="pun">]</span></li></ol></pre>
<h4 id="how-to-run-deploy-static-content">如何运行部署静态内容</h4>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento setup</span><span class="pun">:</span><span class="kwd">static</span><span class="pun">-</span><span class="pln">content</span><span class="pun">:</span><span class="pln">deploy</span></li></ol></pre>
<p>它将显示如下：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento setup</span><span class="pun">:</span><span class="kwd">static</span><span class="pun">-</span><span class="pln">content</span><span class="pun">:</span><span class="pln">deploy</span></li><li class="L1"><span class="pln">&nbsp;</span></li><li class="L2"><span class="typ">Requested</span><span class="pln"> languages</span><span class="pun">:</span><span class="pln"> en_US</span></li><li class="L3"><span class="pun">===</span><span class="pln"> frontend </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="typ">Magento</span><span class="pun">/</span><span class="pln">blank </span><span class="pun">-&gt;</span><span class="pln"> en_US </span><span class="pun">===</span></li><li class="L4"><span class="pun">........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................</span></li></ol></pre>
<p>默认情况下，它将运行部署默认语言的静态内容：&nbsp;<code class="highlighter-rouge">en_EN</code></p>
<p>如果您想部署其他语言的静态内容，例如：&nbsp;<code class="highlighter-rouge">pt_BR</code></p>
<p>运行</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento setup</span><span class="pun">:</span><span class="kwd">static</span><span class="pun">-</span><span class="pln">content</span><span class="pun">:</span><span class="pln">deploy pt_BR</span></li></ol></pre>
<p>然后得到结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="typ">Requested</span><span class="pln"> languages</span><span class="pun">:</span><span class="pln"> pt_BR</span></li><li class="L1"><span class="pun">===</span><span class="pln"> frontend </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="typ">Magento</span><span class="pun">/</span><span class="pln">luma </span><span class="pun">-&gt;</span><span class="pln"> pt_BR </span><span class="pun">===</span></li><li class="L2"><span class="pun">...</span><span class="pln"> progress indicator </span><span class="pun">...</span></li><li class="L3"><span class="typ">Successful</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1613</span><span class="pln"> files</span><span class="pun">;</span><span class="pln"> errors</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span></li><li class="L4"><span class="pln">&nbsp;</span></li><li class="L5"><span class="pun">===</span><span class="pln"> frontend </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="typ">Magento</span><span class="pun">/</span><span class="pln">blank </span><span class="pun">-&gt;</span><span class="pln"> pt_BR </span><span class="pun">===</span></li><li class="L6"><span class="pun">...</span><span class="pln"> progress indicator </span><span class="pun">...</span></li><li class="L7"><span class="typ">Successful</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1620</span><span class="pln"> files</span><span class="pun">;</span><span class="pln"> errors</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span></li><li class="L8"><span class="pln">&nbsp;</span></li><li class="L9"><span class="pun">===</span><span class="pln"> adminhtml </span><span class="pun">-&gt;</span><span class="pln"> </span><span class="typ">Magento</span><span class="pun">/</span><span class="pln">backend </span><span class="pun">-&gt;</span><span class="pln"> pt_BR </span><span class="pun">===</span></li><li class="L0"><span class="pun">...</span><span class="pln"> progress indicator </span><span class="pun">...</span></li><li class="L1"><span class="typ">Successful</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1626</span><span class="pln"> files</span><span class="pun">;</span><span class="pln"> errors</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span></li><li class="L2"><span class="pln">&nbsp;</span></li><li class="L3"><span class="pun">===</span><span class="pln"> </span><span class="typ">Minify</span><span class="pln"> templates </span><span class="pun">===</span></li><li class="L4"><span class="pun">...</span><span class="pln"> progress indicator </span><span class="pun">...</span></li><li class="L5"><span class="typ">Successful</span><span class="pun">:</span><span class="pln"> </span><span class="lit">858</span><span class="pln"> files modified</span></li><li class="L6"><span class="pun">---</span></li></ol></pre>
<h2 id="how-to-get-admin-path-via-command-line">如何通过命令行获取管理路径</h2>
<p>你知道吗？您可以获取管理路径而不访问<code class="highlighter-rouge">etc/env.php</code>文件。</p>
<p>运行</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento info</span><span class="pun">:</span><span class="pln">adminuri</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento info</span><span class="pun">:</span><span class="pln">adminuri</span></li><li class="L1"><span class="pln">&nbsp;</span></li><li class="L2"><span class="typ">Admin</span><span class="pln"> URI</span><span class="pun">:</span><span class="pln"> </span><span class="pun">/</span><span class="pln">admin</span></li></ol></pre>
<p>所以<code class="highlighter-rouge">/admin</code>现在的路径是，将您的浏览器导航到domain.com/admin以访问Magento 2后端。</p>
<h2 id="how-to-enable-maintenance-mode-via-command-line">如何通过命令行启用维护模式</h2>
<h4 id="enable-maintenance-mode">启用维护模式</h4>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento maintenance</span><span class="pun">:</span><span class="pln">enable</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento maintenance</span><span class="pun">:</span><span class="pln">enable</span></li><li class="L1"><span class="typ">Enabled</span><span class="pln"> maintenance mode</span></li></ol></pre>
<h4 id="disable-maintenance-mode">禁用维护模式</h4>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento maintenance</span><span class="pun">:</span><span class="pln">disable</span></li></ol></pre>
<h4 id="allow-ips-to-access-to-the-store">允许IP访问商店</h4>
<p>设置维护模式仅允许ip</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento maintenance</span><span class="pun">:</span><span class="pln">allow</span><span class="pun">-</span><span class="pln">ips</span></li></ol></pre>
<p>例如：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento maintenance</span><span class="pun">:</span><span class="pln">allow</span><span class="pun">-</span><span class="pln">ips </span><span class="lit">168.168</span><span class="pun">.</span><span class="lit">168.168</span></li><li class="L1"><span class="typ">Set</span><span class="pln"> exempt IP</span><span class="pun">-</span><span class="pln">addresses</span><span class="pun">:</span><span class="pln"> </span><span class="lit">168.168</span><span class="pun">.</span><span class="lit">168.168</span></li></ol></pre>
<h2 id="how-to-set-magento-developer-mode-or-product-mode">如何设置Magento Developer模式或Product模式</h2>
<p>显示当前的Magento 2模式</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento deploy</span><span class="pun">:</span><span class="pln">mode</span><span class="pun">:</span><span class="pln">show</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento deploy</span><span class="pun">:</span><span class="pln">mode</span><span class="pun">:</span><span class="pln">show</span></li><li class="L1"><span class="typ">Current</span><span class="pln"> application mode</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">default</span><span class="pun">.</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Note</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Environment</span><span class="pln"> variables may </span><span class="kwd">override</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> value</span><span class="pun">.)</span></li></ol></pre>
<p>目前，我们处于默认模式，让我们切换到开发人员模式</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">php bin</span><span class="pun">/</span><span class="pln">magento deploy</span><span class="pun">:</span><span class="pln">mode</span><span class="pun">:</span><span class="kwd">set</span><span class="pln"> developer</span></li></ol></pre>
<p>结果：</p>
<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="pln">$ php bin</span><span class="pun">/</span><span class="pln">magento deploy</span><span class="pun">:</span><span class="pln">mode</span><span class="pun">:</span><span class="kwd">set</span><span class="pln"> developer</span></li><li class="L1"><span class="typ">Enabled</span><span class="pln"> developer mode</span><span class="pun">.</span></li></ol></pre>
<p>恭喜！现在您的商店正在开发人员模式下运行。快乐编码;）</p>
<hr><div style="display:none;" align="center" class="open-message"><i class="fa fa-bullhorn"></i></div>		      
<div class="article-social">
			<a href="javascript:;" data-action="ding" data-id="278" id="Addlike" class="action" data-original-title="" title=""><i class="fa fa-heart-o"></i>喜欢 (<span class="count">0</span>)</a></div>
	</article>]]></description>
      <pubDate>Fri, 24 Aug 2018 11:24:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2.2系统服务器环境要求]]></title>
      <link>https://www.360magento.com/blog/magento2_requires/</link>
      <description><![CDATA[<div class="content-wrap">
<h3 id="operating-systems-linux-x86-64">操作系统（Linux x86-64）</h3>
<p>Linux发行版，如RedHat Enterprise Linux（RHEL），CentOS，Ubuntu，Debian等。</p>
<h3 id="memory-requirement">内存要求</h3>
<p>升级和安装Magento2系统可能需要高达2GB的RAM。如果您使用的RAM少于2GB的系统，我们建议您创建一个<a href="https://devdocs.magento.com/guides/v2.2/comp-mgr/trouble/cman/out-of-memory.html" rel="nofollow">交换文件</a> ; 否则，您的升级可能会失败。</p>
<h3 id="composer-latest-stable-version">Composer（最新稳定版）</h3>
<p><span class="glossary-term" data-toggle="popover"></span> Magento开发人员需要Composer来开发扩展或提交到版本库</p>
<h3 id="web-servers">Web服务器</h3>
<ul>
<li>
<p><a href="http://httpd.apache.org/download.cgi" rel="nofollow" target="_blank">Apache 2.2或2.4</a></p>
<p>此外，您必须启用Apache <code class="highlighter-rouge">mod_rewrite</code>和<code class="highlighter-rouge">mod_version</code>模块。该<code class="highlighter-rouge">mod_rewrite</code>模块使服务器能够执行URL重写。该<code class="highlighter-rouge">mod_version</code>模块为不同<code class="highlighter-rouge">httpd</code>版本提供灵活的版本检查。</p>
</li>
<li>
<p><a href="https://nginx.org/en/download.html" rel="nofollow" target="_blank">nginx 1.x</a></p>
</li>
</ul>
<h3 id="database">数据库</h3>
<p>MySQL 5.6,5.7</p>
<p>Magento还兼容MySQL NDB Cluster 7.4.*，MariaDB 10.0,10.1,10.2，Percona 5.7以及其他二进制兼容的MySQL技术。</p>
<p class="bs-callout">Magento仅使用与MariaDB兼容的MySQL功能。但是，MariaDB可能不兼容MySQL的所有功能，因此在使用Magento模块中的功能之前，请务必研究兼容性问题。</p>
<h3 id="php">PHP支持</h3>
<div>
<table>
<tbody>
<tr>
<td>7.0.0-7.0.12</td>
<td>7.0.13-7.0.x</td>
<td>7.1.x</td>
</tr>
<tr>
<td><img alt="不支持" src="https://devdocs.magento.com/common/images/red-x.png" /></td>
<td><img alt="支持（2.1.2及更高版本）" src="https://devdocs.magento.com/common/images/green-check.png" /></td>
<td><img alt="支持（2.1.2及更高版本）" src="https://devdocs.magento.com/common/images/green-check.png" /></td>
</tr>
</tbody>
</table>
<style><!--
tr td {
    font-size: 14px;
    padding: 13px 14px;
    vertical-align: top;
    border-bottom: 1px solid #ccc;
    word-wrap: break-word;
    vertical-align: initial;
}
--></style>
</div>
<h4 id="required-php-extensions">必需的PHP扩展</h4>
<p class="bs-callout">在CentOS的和Ubuntu的PHP安装说明中包括用于安装这些扩展。</p>
<ul>
<li><a href="http://php.net/manual/en/book.bc.php" rel="nofollow" target="_blank">bc-math</a> (Magento Commerce 仅适用 2.2.0 - 2.2.3. Magento Commerce 和 Magento Open Source 适用 2.2.4.)\</li>
<li><a href="http://php.net/manual/en/book.ctype.php" rel="nofollow" target="_blank">ctype</a></li>
<li><a href="http://php.net/manual/en/book.curl.php" rel="nofollow" target="_blank">curl</a></li>
<li><a href="http://php.net/manual/en/book.dom.php" rel="nofollow" target="_blank">dom</a></li>
<li><a href="http://php.net/manual/en/book.image.php" rel="nofollow" target="_blank">gd</a>, <a href="http://php.net/manual/en/book.imagick.php" rel="nofollow" target="_blank">ImageMagick 6.3.7</a> (或最新)</li>
<li><a href="http://php.net/manual/en/book.intl.php" rel="nofollow" target="_blank">intl</a></li>
<li><a href="http://php.net/manual/en/book.mbstring.php" rel="nofollow" target="_blank">mbstring</a></li>
<li><a href="http://php.net/manual/en/book.mcrypt.php" rel="nofollow" target="_blank">mcrypt</a></li>
<li><a href="http://php.net/manual/en/book.hash.php" rel="nofollow" target="_blank">hash</a></li>
<li><a href="http://php.net/manual/en/book.openssl.php" rel="nofollow" target="_blank">openssl</a></li>
<li><a href="http://php.net/manual/en/ref.pdo-mysql.php" rel="nofollow" target="_blank">PDO/MySQL</a></li>
<li><a href="http://php.net/manual/en/book.simplexml.php" rel="nofollow" target="_blank">SimpleXML</a></li>
<li><a href="http://php.net/manual/en/book.soap.php" rel="nofollow" target="_blank">soap</a></li>
<li><a href="http://php.net/manual/en/book.spl.php" rel="nofollow" target="_blank">spl</a></li>
<li><a href="http://php.net/manual/en/book.libxml.php" rel="nofollow" target="_blank">libxml</a></li>
<li><a href="http://php.net/manual/en/book.xsl.php" rel="nofollow" target="_blank">xsl</a></li>
<li><a href="http://php.net/manual/en/book.zip.php" rel="nofollow" target="_blank">zip</a></li>
<li><a href="http://php.net/manual/en/book.json.php" rel="nofollow" target="_blank">json</a></li>
<li><a href="http://php.net/manual/en/book.iconv.php" rel="nofollow" target="_blank">iconv</a></li>
</ul>
<h4 id="php-opcache">PHP OPcache</h4>
<p>我们强烈建议您出于性能原因验证是否启用了<a href="http://php.net/manual/en/intro.opcache.php" rel="nofollow" target="_blank">PHP OPcache</a>。许多PHP发行版都启用了OPcache。</p>
<p>如果必须单独安装，请参阅<a href="http://php.net/manual/en/opcache.setup.php" rel="nofollow" target="_blank">PHP OPcache文档</a>。</p>
<h4 id="php-settings">PHP设置</h4>
<p>我们建议使用特定的PHP配置设置，例如<code class="highlighter-rouge">memory_limit</code>，可以避免使用Magento时的常见问题。</p>
<p>有关更多信息，请参阅<a href="/guides/v2.2/install-gde/prereq/php-settings.html">必需的PHP设置</a>。</p>
<h3 id="ssl">SSL</h3>
<ul>
<li>HTTPS需要有效的 <span>安全证书</span>。</li>
<li>不支持自签名SSL证书。</li>
<li>
<p>传输层安全性（TLS）要求 - PayPal和<code class="highlighter-rouge">repo.magento.com</code>都需要TLS 1.1或更高版本：</p>
</li>
</ul>
<h3 id="mail-server">邮件服务器</h3>
<p>邮件传输代理（MTA）或SMTP服务器</p>
<h3 id="magento-can-use-the-following-technologies">Magento可以使用以下技术：</h3>
<ul>
<li>Redis版本3.2（与2.4+兼容）用于页面缓存和会话存储</li>
<li>Varnish版本4.x或5.0</li>
<li>用于会话存储的memcached最新稳定版本，带有<code class="highlighter-rouge">memcache</code>或者<code class="highlighter-rouge">memcached</code>PHP扩展（最新的稳定版本）</li>
</ul>
</div>]]></description>
      <pubDate>Thu, 23 Aug 2018 08:01:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[常见的Magento SSL配置问题解决方法]]></title>
      <link>https://www.360magento.com/blog/magento-ssl-issues/</link>
      <description><![CDATA[<div class="post-content description ">
<p>安全套接字层（SSL）已成为电子商务网站的一个重要方面。SSL确保客户与网站之间的双向通信在整个交易期间保持安全。</p><p>使用SSL保护网站表明网站所有者非常重视保护客户的个人信息。就SERP(搜索引擎结果页面)的标准而言，拥有SSL的网站排名越来越高。</p><div class="magtoc"><h2>常见的Magento SSL问题及其解决方案</h2><ol><li><a href="#SSL-Not-Working">Magento SSL无效 </a></li><li><a href="#SSL-Redirects" title="SSL 重定向">Magento SSL将结账重定向到其他页面</a></li><li><a href="#Local-Issuer">无法获得本地颁发者证书</a></li><li><a href="#Installing-Magento-SSL">安装Magento SSL会使管理员无法访问</a></li><li><a href="#Magento-404" title="Magento 404">安装Magento SSL后面临404页面未找到错误</a></li><li><a href="#403-error">在Magento Admin中使用SSL时出现403(Forbidden)错误</a></li><li><a href="#HTTP">HTTP与Https重复内容问题</a></li><li><a href="#Enabling-SSL">在Magento Admin中启用SSL后无限重定向循环</a></li><li><a href="#layout">Magento前端布局问题</a></li><li><a href="#Magento-Admin">安装SSL后无法登录Magento Admin</a></li><li><a href="#Warnings">结帐时Magento SSL相关警告</a></li></ol></div><p>安装和维护SSL证书可能是网站所有者的麻烦。如果处理不当，该问题可能严重妨碍访客的体验。结果是网站的收入和声誉显著降低。</p><p>使用Magento SSL时，网站所有者应确保：</p><ul><li>SSL已正确安装</li><li>安全URL已设置</li><li>安全URL在前端和后端实现</li><li>SSL证书设置为包括www</li><li>网站里没有不安全的链接</li></ul><p>现在将讨论困扰网站的最常见的Magento SSL相关问题。此外，我还将提供解决问题的方法。</p><h2 id="SSL-Not-Working">1. Magento SSL无效</h2><p>按照以下步骤从Magento后台激活SSL ：</p><ul><li>导航到 System > Configuration > General > Web</li><li>单击"Secure"选项卡</li><li>启用"Use Secure URLs in the frontend"选项为"yes"</li><li>启用"Use Secure URLs in the Admin" 选项为"yes"</li><li>检查offload header为"SSL_OFFLOADED"</li></ul><p>激活Magento SSL后，网站的URL将从"HTTP" &nbsp;更改为"HTTPS" </p><p>如果问题仍然存在，则问题可能出在数据库层上。请按照以下步骤来解决问题：</p><ul><li>选择数据库表"core_config_data"</li><li>运行查询："Select * from core_config_data where path = ‘%web/secure/base_url%’;"</li><li>检查列值。如果是"HTTPS"，则表示后台设置已完成。</li></ul><p>如果SSL仍无效，则您的网站的SSL设置存在问题。有时，在成功安装和激活SSL后会出现此问题。Ajax调用或第三方URL调用中的问题也可能导致此问题。以下是如何解决这些问题：</p><p><strong>Ajax 调用</strong></p><p>如果Ajax调用中存在任何设置问题，请更改以下代码：</p><pre>echo Mage::getUrl(‘MYMODULE/MYCONTROLLER/MYACTION’, array(‘_secure’ => Mage::app()->getStore()->isCurrentlySecure()));</pre><p><strong>第三方URL调用</strong></p><p>替换掉不是"https"的第三方URL,比如"HTTPS://www.example.com"，替换成"HTTPS://www.example.com"</p><h2 id="SSL-Redirects">2.Magento SSL结账页面重定向</h2><p>当Magento SSL无法正常工作时，会出现此问题。在许多情况下，结帐页面会被重定向到其他页面，例如主页或index页面。</p><p>以下是修复结帐重定向问题的过程：</p><ul><li>在Magento网站中安装SSL证书。</li><li>导航到 Admin >  System > Configuration > General > Web</li><li>转到"secure settings"并将base URL更改为"HTTPS://"</li><li>保持"Base link URL"为“{{secure_base_url}}”</li><li>保持Skin, Media, and JavaScript设置为“{{secure_base_url}}skin/etc”</li><li>选择“Use Secure URL for frontend”为"yes"</li><li>最后，单击"Save"以应用设置。</li></ul><p>以上过程适用于所有Magento版本。</p><h2 id="Local-Issuer">3.无法获得本地颁发者证书</h2><p>若要解决此问题，请按照下列步骤操作：</p><ul><li>创建证书到本地副本并将其保存在服务器上的安全位置。</li><li>如果您使用的是Linux，请将文件保存在："/etc/ssl/example_com.crt "</li><li>在服务器(以apache为例)中正确配置：<br><pre><VirtualHost *:443> 
ServerName example.com 
DocumentRoot /var/www/

SSLEngine on 
SSLCertificateFile /etc/ssl/example_com.crt 
SSLCertificateKeyFile /etc/ssl/private/example_com.key 
SSLCertificateChainFile /etc/ssl/example_com.ca-bundle 
</VirtualHost></pre></li><li>根据保存文件的位置更新文件。</li><li>最后，重启服务器以更改应用配置。</li></ul><h2 id="Installing-Magento-SSL">4.安装Magento SSL使后台无法访问</h2><p>有两种方法可以解决这个问题：</p><ul><li>手动将"core_config_data"表中的"web/secure/use_in_adminhtml"值更改为"0";或执行SQL语句"INSERT INTO core_config_data (scope,scope_id,path,value) VALUES ('default',0,'web/secure/use_in_adminhtml',1);"<ul><li>改回表中的URL为“HTTP://your.domain.com/”</li></ul><p>通过删除“/var/cache”文件清除magento缓存</p><h2 id="Magento-404">5.使用SSL ，magento页面显示404 Page Not Found</h2><p><em>SSL有自己的配置文件，有时当SSL不能正常工作时，它可能会给出404（Page not found）错误。通常，文件如下：</em></p>“sudonano /etc/apache2/sites-available/default-ssl”</p><p>您需要将“AllowOverride None”更改为“AllowOverride All”，然后重新启动服务器。</p><p><pre>sudo /etc/init.d/apache2 restart</pre></p><p>重新启动服务器后，您将看到所有页面都正常工作。如果您收到任何与页面内容相关的错误，请检查页面上的任何外部URL。尝试消除外部URL并仅包含相对URL。</p><h2 id="403-error">6.在后台使用Magento SSL时出现403（Forbidden）错误</h2><p>在以下情况下，有时会故意返回错误代码403（Forbidden）：</p><ul><li>用户没有进去特定页面的权限。</li><li>用户正在尝试访问已将autoindex设置为<strong>off</strong>的目录。</li><li>用户正在尝试访问只能在内部访问的文件。</li></ul><p>但是，出于本文的目的，我将讨论无意中发生错误的情况。</p><p><strong>权限未正确设置</strong></p><p>这是此问题背后最常见的原因。如果要提供文件，则服务器必须读取并执行文件的分层目录中的权限。例如：</p><p>对于<em>/usr/share/myfiles/image.jpg，</em>服务器应具有<em>/，/ usr，/ usr / share</em>和<em>/ usr / share / myfiles</em>的读取和执行权限。如果您不希望看到此错误，则需要对目录使用标准755，对文件使用644。</p><p>您可以使用<strong><em>namei</em></strong>来检查路径的权限：</p><pre>f: /var/www/vhosts/example.com
 
drwxr-xr-x root     root     /
 
drwxr-xr-x root     rootvar
 
drwxr-xr-x www-data www-data www
 
drwxr-xr-x www-data www-datavhosts
 
drwxr-xr-xmconnectmconnect    example.com</pre><p><strong>目录索引尚未正确定义</strong></p><p>标准PHP设置的索引指令是：</p><p> "index index.html index.htm index.php;"</p><p>在上面的示例中，服务器将首先提供index.html，然后是index.htm，最后是index.php。如果找不到所有上述目录或没有响应，则返回403 forbidden错误。</p><h2 id="HTTP">7. HTTP与Https重复内容问题</h2><p>Http和HTTPS被视为单独的端口。但是，搜索引擎会将这两个版本的内容视为重复内容。从SEO的角度来看，这是一个严重的问题。此问题有3中修复方法：</p><p><strong>规范链接元素</strong></p><p>规范链接元素被添加到网页的head标签中：</p><pre>&lt;link rel="canonical" href="HTTP://www.domain.com/star-wars/toys/cut-outs/luke-skywalker.html"/&gt;</pre><p>这些链接元素突出显示内容的规范位置。因此，当搜索引擎抓取网站时，只有Https版本会显示在搜索结果中。</p><p><strong>为Https提供不同的Robots.txt</strong></p><p>在此解决方案中，您允许搜索引擎抓取网站的HTTPS版本。这是你应该做的：</p><ul><li>使用<strong>.htaccess</strong>提供两个不同的<strong>Robots.txt</strong>文件。将常规非安全HTTP文件另存为<strong>robots.txt</strong>，并将安全HTTPS文件另存为<strong>robots_ssl.txt</strong></li><li>在<strong>htaccess</strong>文件中添加一下代码：</li></ul><p><pre>
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^robots\.txt$ robots_ssl.txt [L]
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^robots\.txt$ robots_ssl.txt [L]</pre></p><ul><li>这将改写服务<strong>robots_ssl.txt</strong>为<strong>robots.txt的</strong>。</li></ul><p><strong>元机器人标签</strong></p><p>如果上述两种方法无法解决问题，可以使用Meta Robots标记。此标记允许对页面进行抓爬但不对其编制索引。要使用该标记，以下代码将添加到网页的<strong>Head</strong>标记中：</p><p><pre>

&lt;?php

if(isset($_SERVER['HTTPS']) &&strtolower($_SERVER['HTTPS']) == 'on') {

echo'<meta name="robots" content="noindex,follow" />'. "\n";

}

?&gt;
&lt;?php
 
if(isset($_SERVER['HTTPS']) &&strtolower($_SERVER['HTTPS']) == 'on') {
 
echo'<meta name="robots" content="noindex,follow" />'. "\n";
 
}
 
?&gt;</pre></p><h2 id="Enabling-SSL">8.在Magento管理区域中启用SSL时的无限重定向循环</h2><p>当您在Magento管理面板中打开SSL时，可能会遇到此问题。</p><p>问题可能出在模型<em>app/code/core/Mage/Core/Model/Store.php</em>中
<pre>
public function isCurrentlySecure()

{  

            if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {

            return true;

            }  

            if (Mage::isInstalled()) {

                        $secureBaseUrl = Mage::getStoreConfig('web/secure/base_route_url');

                        if (!$secureBaseUrl) {

                                    return false;

                        }  

                        $uri = Zend_Uri::factory($secureBaseUrl);

                        $isSecure = ($uri->getScheme() == 'HTTPS' ) &&isset($_SERVER['SERVER_PORT']) && ($uri->getPort() == $_SERVER['SERVER_PORT']);

                        return $isSecure;

             } else {

                        $isSecure = isset($_SERVER['SERVER_PORT']) && (443 == $_SERVER['SERVER_PORT']);

                        return $isSecure;

             }  

}
</pre>
<p>当在"core_config_data"表中没有"web/secure/base_route_url",默认的响应"isCurrentlySecure"总是返回<strong>false</strong> </p><p>您可以通过添加服务器变量"HTTPS" &nbsp;值来修复它&nbsp;  。</p><p>如Nginx与PHP-FPM一起使用，将这些行添加到“nginx.conf”：</p><pre>fastcgi_param HTTPS on;</pre><p>重新加载服务器，一切都应该正常工作。</p><h2 id="layout">9. SSL-HTTPS Magento前端布局问题</h2><p>使用HTTPS对工作站点的更改包括：<br>在配置中，<br>在不安全部分中<br>基本URL：删除"HTTP"</p><p>在安全部分<br>基本URL：添加"HTTPS"</p><p>然后刷新缓存。</p><h2 id="Magento-Admin">10.启用Magento SSL后，管理员登录失败</h2><p>在Magento Admin中启用SSL后，通常会出现此问题。以下步骤将解决此问题：</p><ul><li>进入数据库并进入"core_config_data"表中，&nbsp; 更新"web/secure/use_in_admindata"path中的value为"0"</li><li>将"web/secure/use_in_frontend"path中的"value"设置为"0"</li><li>通过使用SSH，登录到主机帐户，并运行命令"rm -rf ~/public_html/magento/var/cache"</li></ul><p>使用共享服务器或主机时，需要更改缓存目录。</p><p><strong>如何更改Magento基本URL？</strong></p><p>可以根据网站的要求设置Magento基本URL。要更改基本URL，请登录Magento管理面板，导航到"System > Configuration > Web > Unsecure > Base URL  and System > Configuration > Web > Secure > Base URL"</p><p>完成更改后，您需要进入“System > Cache Management”刷新缓存</p><p>如果Magento管理面板无法访问，则需要在数据库中进行更改。登录"phpMyAdmin",导航到"core_config_data"表，改变"web/unsecure/base_url"  和 "web/secure/base_url"中的value值</p><p>要应用更改，请通过删除var/cache目录中的所有内容来刷新Magento中的缓存</p><h2 id="Warnings">11.结帐时Magento SSL相关警告</h2><p>当您使用Magento网站时，结帐过程可能需要多次修复和调试。在测试网页时，请密切关注页眉和页脚中的图像，因为它们可以创建大量问题。</p><p>要解决此问题，您应该使用图像的直接链接，而不是使用参考或源链接。</p><p><imgsrc=/media/wysiwyg/image1.jpg"}}" alt="" />（简写图片源链接）</p><p><imgsrc="//yoursite.com/media/wysiwyg/image1.jpg" alt="" />(接图像源链接)</p><p>这会通知浏览器它应该按照当前区域加载重要的资源。特别是，使用Chrome测试网站，因为它可以检测任何网站中的大多数错误。</p><p>这些是一些常见的Magento SSL相关问题的解决方案。我希望您能够自己应用修复程序而不会出现任何问题。如果您遇到问题，请随时与我们联系。</p><hr><div class="frame"><h2 class="frames">经常问的问题</h2><p><strong>Q1。什么是SSL？<br> </strong></p><p>SSL表示用于使网站安全的安全套接字层。它应该安装在每个电子商务网站中，以确保用户和网站之间的交易过程安全。</p><p><strong>Q2。SSL完全免费使用吗？<br> </strong></p><p>许多SSL证书提供商对此收费，但是如果您想要免费且可靠的SSL证书，那么请选择Let's Encrypt。</p><p><strong>Q3。什么是Robots.txt？</strong></p><p>您网站的一个文本文件，用于与网络抓取工具和其他网络机器人进行通信，称为Robots.txt。</p></div></div>]]></description>
      <pubDate>Tue, 21 Aug 2018 08:50:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento 1和magento2的比较]]></title>
      <link>https://www.360magento.com/blog/m1-m2vs/</link>
      <description><![CDATA[<div class="card-content">
<h2 id="overview">概述</h2>
<p><a href="https://magento.com/" target="_blank" rel="nofollow">Magento</a>是一个开源的电子商务网站系统，于2008年3月31日推出。包括出色的功能，它使网店所有者几乎可以做任何像类型的网店。Magento 1迅速占据电子商务市场的主导地位，市场份额约为26％（2014年）。但是，安装其他应用程序非常复杂，并且经常遇到许多错误。因此，Magento在2015年升级到2.0版本，这使得更多扩展的安装变得更加容易。Magento 2旨在帮助商家实现目标。它允许商家建立在线销售网站，下载和服务等。此外，让我们与以前的版本进行比较，事实是Magento 2升级了技术，改变了目录结构，架构，后端改进了平台的界面以支持移动版本。借助创新技术，它有助于实现性能和安全功能的改进。</p>
<h2 id="comparison">对照</h2>
<h3 id="1-performance">1. 表现</h3>
<p>在页面加载速度或查询执行时间上，由于缓存（Varnish）和数据库优化，Magento完全优于竞争对手。这也是许多用户在Magento 1中面临的问题，而在agento 2中的重大改进。</p>
<ul>
<li>Magento 2支持最新版本的PHP（从PHP 5.5x开始），也包括PHP 7。这些版本包括安全修复程序和新增强功能。</li>
<li>Magento 2的加载时间比标准版本的加载时间快2到3秒。要加载主页，类别页面和产品页面，即使不使用用户界面缓存，Magento 2也会在不到1.5秒的时间内加载。</li>
<li>页面内容显示得更快。在查看主要内容时，用户无需等待加载整个页面。</li>
<li>在服务端，Magento 2添加了一个模块来清除缓存。因此用户无需像Magento 1那样安装第三方模块。</li>
<li>Magento 2最小化并打包Javascript，从而减少客户端请求数。</li>
<li>压缩图像：Magento 2构建工具以直接在服务器上优化图像，而不是像Magento 1手动执行。</li>
<li>使用静态内容改进缓存处理过程。</li>
</ul>
<h3 id="2--admin">2. 管理员</h3>
<p>与Magento 1相比，Magento 2中的管理界面非常直观且用户友好。</p>
<h4 id="21-general-admin-interface">2.1常规管理界面</h4>
<p>管理面板非常易于配置和使用，并包含一个现代且用户友好的界面。它的组织更多，分为主要类别，如销售，产品，客户，营销等。此外，它只需点击主菜单即可查看所有子类别。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/30hMTf3.png" alt="Imgur" class="responsive-img"></p>
<p>Magento 2的另一个重要特性是网格管理。管理员可以主动隐藏网格中的某些列作为网格订单或网格客户。您还可以从管理页面上的可用列表中选择列。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/DtEozef.png" alt="Imgur" class="responsive-img"></p>
<h4 id="22-dashboard">2.2 仪表盘</h4>
<p>在新系统中，您可以在一个地方找到基本信息。“仪表盘”页面概述了终身销售，平均订单金额，最后订单，热门搜索条件，查看次数最多的产品，新客户等。它还显示了财务数据，因此您可以查看业务的总体状态。一目了然。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/Or4Ktcs.png" alt="Imgur" class="responsive-img"></p>
<h4 id="23-manage-products">2.3 管理产品</h4>
<p>创造更多新产品也更简单。新系统将指导您完成一个简单的分步过程。这里的一个突出创新是Magento 2不仅允许管理员上传产品图像，还可以上传该产品的宣传视频。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/arlTYZM.png" alt="Imgur" class="responsive-img"></p>
<h4 id="24-manage-orders">2.4 管理订单</h4>
<p>您的订单页面显示商店中所有订单的列表。您可以按“状态”列中的状态对它们进行排序。如果您想批量更新或查看所有待处理订单或处理订单，您可以快速轻松地找到它们。</p>
<p>您还可以为订单执行某些操作，例如“暂停”，“取消”或“打印订单”。如果您想在电子表格中查看所有订单信息，它还可以通过订单右上角的CSV导出订单。</p>
<p>订单的订单将以0000000001开头，并为每个后续订单增加至1。这使管理员可以轻松找出您收到的订单号。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/XaaxG9Z.png" alt="Imgur" class="responsive-img"></p>
<h4 id="25-manage-customers">2.5 管理客户</h4>
<p>在Magento 2中，您可以将客户列表视为产品或订单列表，添加/删除列，更改默认视图，导出到CSV文件或执行许多操作，例如删除客户或分配客户组。特别是，如果您想通过电话沟通接收订单，也可以手动添加客户。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/PkYEB7j.png" alt="Imgur" class="responsive-img"></p>
<h4 id="26-marketing-section">2.6 营销部分</h4>
<p>在“营销”部分，您可以找到Magento 1中用于促销，通信，搜索引擎优化和搜索，用户内容的所有可用工具。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/Fcwuij0.png" alt="Imgur" class="responsive-img"></p>
<h4 id="27-content">2.7 内容</h4>
<p>内容管理界面还使用Magento 2的指定网格，它可以帮助您更好地管理您的帖子。这有助于管理员创建更多内容页面，而无需将WordPress或Drupal添加到Magento站点。</p>
<p><img src="https://cdn.mageplaza.com/media/general2/37DaL5X.png" alt="Imgur" class="responsive-img"></p>
<h3 id="3-frontend">3. 前端</h3>
<h4 id="31-luma-theme">3.1 Luma主题</h4>
<p>Magento 2中的Luma Theme看起来比Magento 1中的主题更漂亮。</p>
<p>以下是Magento 1中的主题：</p>
<p><img src="https://cdn.mageplaza.com/media/general2/Akh2ILz.png" alt="Imgur" class="responsive-img"></p>
<p>这是Magento 2中的主题：</p>
<p><img src="https://cdn.mageplaza.com/media/general2/6aQ3zIX.png" alt="Imgur" class="responsive-img"></p>
<h4 id="32-responsive-design">3.2 响应式设计</h4>
<p>通过响应式Web设计，Magento 2使用户可以通过任何计算机或移动设备轻松连接到商店。这是一个很大的优势，因为自2015年4月21日起，Google算法已正式优先考虑适合移动设备的网站。</p>
<p>这种响应式设计还极大地增强了用户体验。</p>
<h4>3.3 改善结账（6个步骤 - &gt; 2个步骤</h4>
<p>在Magento 2中，支付流程对客户来说变得更加容易和快捷。Magento 2没有采取6个步骤来结账，而是仅通过2个步骤缩短了流程。
<p>Magento 1包括6个步骤结帐如下：</p>
<p><img src="https://cdn.mageplaza.com/media/general2/vLs1pwC.png" alt="Imgur" class="responsive-img"></p>
<p>Magento 2只需2个步骤即可结账：</p>
<p><img src="https://cdn.mageplaza.com/media/general2/SG346cS.png" alt="Imgur" class="responsive-img"></p>
<p>通过分析客户的电子邮件地址，在填写结帐电子邮件时，Magento 2可以自动识别哪些客户已注册或未注册帐户。对于没有帐户的客户，如果他们想在付款成功后立即创建帐户，则在此运输步骤中输入的信息将成为基础。帐户注册过程比以往更直接。</p>
<h4 id="34-ajax-cart-loading">3.4 Ajax购物车加载</h4>
<p>购物车是一个帮助客户获取有关他们打算快速购买的产品的信息的地方。每次将产品添加到Magento 1中的购物车时，系统都会重新加载页面，从而对其性能产生负面影响。对于脾气暴躁的客户，等待几秒钟就会导致他们放弃购物车。</p>
<p>Magento 2集成了Ajax购物车加载功能，允许用户快速查看购买的商品，而不是等到整个页面重新加载。这也有助于增强用户体验。如果您销售的是价值较低的产品，或者您的客户经常在购物车中添加更多产品，这是一个您不能忽视的问题。</p>
<h3 id="4-seo-and-security">4. SEO和安全</h3>
<h4 id="41-support-seo-better">4.1。更好地支持SEO</h4>
<p>SEO是网上商店的关键因素之一; 你永远不会忘记在你的网站上设置SEO。Magento 1.X在搜索引擎优化中遇到了一些缺陷，其中大部分都是在Magento 2开发时修复的.Magento 2的突出SEO功能包括：</p>
<ul>
<li><strong>重复内容</strong>：Magento 2提供Canonical标签以避免重复内容。它位于<code class="highlighter-rouge">Stores &gt; Configuration &gt; Catalog &gt; Catalog &gt; Search Engine Optimization</code>。</li>
<li><strong>XML站点地图</strong>：XML站点地图是包含站点所有页面的文件。Magento 2配备了更好的XML图形。要启用XML站点地图，请转到<code class="highlighter-rouge">Stores &gt; Settings &gt; Configuration &gt; Catalog &gt; XML Sitemap</code>。</li>
<li><strong>Alt产品图片</strong>：为产品图片添加alt也有助于提升您在搜索引擎上的排名。转到<code class="highlighter-rouge">Catalog &gt; Products &gt; select one Product &gt; add Alt in Images and Videos field</code>。</li>
<li><strong>Robots.txt文件</strong>：帮助网站管理员更灵活地允许或不允许搜索引擎（SE）上的机器人为您网站的某个区域编制索引。要修改Magento 2中的Robots.txt，请转到<code class="highlighter-rouge">Content &gt; Design &gt; Configuration &gt; Edit one Store &gt; Search Engine Robots</code>。</li>
<li><strong>元标题，元描述，元关键字</strong>：Magento 2允许管理员为每个产品/类别添加元标记。管理员只需在编辑或添加新产品/类别时输入搜索引擎优化。</li>
<li><strong>搜索友好的URL</strong>：启用URL友好的最快方法是转到<code class="highlighter-rouge">Stores&gt; Configuration &gt; General &gt; Web &gt; Search Engine Optimization and turn on Use Web Server Rewrites</code>。</li>
</ul>
<p><strong>注意</strong>：如您所知，新手使用Magento 2来实现如何最好地管理SEO是具有挑战性的。因为SEO分散在Magento的不同位置。</p>
<h4 id="42-security">4.2安全</h4>
<p>Magento 2改进了整体架构，尤其是安全性。通过定期更新软件，Magento 2比旧版本更安全。</p>
<p>使用散列算法（SHA-256）还可以改进密码，从而最大限度地降低暴力攻击和其他安全攻击的风险。</p>
</div>]]></description>
      <pubDate>Thu, 16 Aug 2018 09:57:08 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中实现黏性边栏(悬浮边栏)]]></title>
      <link>https://www.360magento.com/blog/sticky-sidebar/</link>
      <description><![CDATA[<p>因为在Magento1上的一个项目激发了我写这篇博客。重要的信息或按钮操作悬浮在电商网站（PC网站和移动网站）中极为重要，他可以提高您的转换率。这篇博客着重讲解magento详细页中将添加购物的选项按钮悬浮在边栏。悬浮边栏的目的是是侧边栏元素始终在视窗口中显示(或者在满足某些条件时)。<span>这是移动产品选项（magento可配置产品的下拉菜单，颜色，尺寸等），添加到购物车按钮或任何其他对您的产品很重要的元素的理想场所。</span><span>也就是说，您的客户可以自由浏览产品上的所有内容，一旦决定购买产品，&ldquo;添加到购物车&rdquo;按钮就显示在眼前等着点击！</span></p>
<p><span><span><span>让我们开始在代码中进行更改以启用此功能。</span><span>为了这篇博文的目的，我创建了一个自定义主题&nbsp; Alwayly</span></span><em><span><span>/StickySidebar</span></span></em><span><span>。</span></span></span></p>
<p><span>LESS代码</span></p>
<p><span>在<span>app/design/frontend/Alwayly/StickySidebar/web/css/source/</span>里面创建_extend.less文件并复制/粘贴下面的代码：</span></p>
<pre class="ish"><code class="language-bookmark">.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
  .box-tocart .action.tocart {
    width: 100%;
    margin-right: 0;
  }
&nbsp;
  .sidebar {
    &amp;.fixed {
      position: fixed;
    }
  }
}</code></pre>
<p><span>确保运行Grunt命令来创建符号链接并编译此代码（仅在PC上，它将侧边栏定位为固定元素，并使"添加到购物车"按钮占用全部宽度）。</span></p>
<p><span>XML代码</span></p>
<p><span>在<span>app/design/frontend/Alwayly/StickySidebar/Magento_Catalog/layout/&nbsp;</span>中创建catalog_product_view.xml，然后复制/粘贴以下代码片段：</span></p>
<pre class="ish"><code class="language-xml"><span class="sc3"><span class="re1">&lt;page</span> <span class="re0">layout</span>=<span class="st0">"2columns-right"</span> <span class="re0">xmlns:xsi</span>=<span class="st0">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="re0">xsi:noNamespaceSchemaLocation</span>=<span class="st0">"urn:magento:framework:View/Layout/etc/page_configuration.xsd"</span><span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;referenceBlock</span> <span class="re0">remove</span>=<span class="st0">"true"</span> <span class="re0">name</span>=<span class="st0">"catalog.compare.sidebar"</span> <span class="re2">/&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;referenceBlock</span> <span class="re0">remove</span>=<span class="st0">"true"</span> <span class="re0">name</span>=<span class="st0">"wishlist_sidebar"</span> <span class="re2">/&gt;</span></span>
&nbsp;
    <span class="sc3"><span class="re1">&lt;move</span> <span class="re0">element</span>=<span class="st0">"product.info"</span> <span class="re0">destination</span>=<span class="st0">"sidebar.additional"</span> <span class="re2">/&gt;</span></span>
&nbsp;
    <span class="sc3"><span class="re1">&lt;referenceContainer</span> <span class="re0">name</span>=<span class="st0">"sidebar.additional"</span><span class="re2">&gt;</span></span>
        <span class="sc3"><span class="re1">&lt;block</span> <span class="re0">class</span>=<span class="st0">"Magento\Framework\View\Element\Template"</span></span>
<span class="sc3">               <span class="re0">name</span>=<span class="st0">"sticky.sidebar.wrapper"</span></span>
<span class="sc3">               <span class="re0">template</span>=<span class="st0">"Magento_Catalog::sticky-sidebar-js.phtml"</span></span>
<span class="sc3">               <span class="re0">after</span>=<span class="st0">"-"</span> <span class="re2">/&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;/referenceContainer<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/page<span class="re2">&gt;</span></span></span></code></pre>
<p><span>这段代码负责以下内容：</span></p>
<ul>
<li><span>将页面布局从一列更改为右栏侧栏的两列</span></li>
<li><span>删除使用此页面布局时包含的两个块（比较和愿望清单块）</span></li>
<li><span>更改包含产品选项的块的位置并将其添加到侧边栏</span></li>
<li><span>添加将用于调用AMD组件的模板文件，以处理悬浮边栏逻辑和计算</span></li>
</ul>
<p><span>PHTML代码</span></p>
<p><span>在<span>app/design/frontend/Alwayly/StickySidebar/Magento_Catalog/templates/</span>中创建sticky-sidebar-js.phtml并复制/粘贴以下代码片段：</span></p>
<pre class="ish"><code class="language-html5"><span class="sc2">&lt;<span class="kw2">script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">"text/javascript"</span> data-mage-init<span class="sy0">=</span><span class="st0">'{"stickySidebar":{}}'</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span></code></pre>
<p><span><span>RequireJS</span>代码</span></p>
<p><span>在<span>app/design/frontend/Alwayly/StickySidebar/</span>内部创建requirejs-config.js并复制/粘贴以下代码片段：</span></p>
<pre class="ish"><code class="language-javascript"><span class="kw1">var</span> config <span class="sy0">=</span> <span class="br0">{</span>
    map<span class="sy0">:</span> <span class="br0">{</span>
        <span class="st0">"*"</span><span class="sy0">:</span> <span class="br0">{</span>
            stickySidebar<span class="sy0">:</span> <span class="st0">"js/sticky-sidebar"</span><span class="sy0">,</span>
        <span class="br0">}</span>
    <span class="br0">}</span>
<span class="br0">}</span><span class="sy0">;</span></code></pre>
<p><span>jQuery代码</span></p>
<p><span>在<span>app/design/frontend/Alwayly/StickySidebar/web/js/sticky-sidebar.js</span>中创建sticky-sidebar.js并粘贴以下代码片段：</span></p>
<pre class="ish"><code class="language-jquery">define<span class="br0">(</span><span class="br0">[</span><span class="st0">"jquery"</span><span class="sy0">,</span> <span class="st0">"matchMedia"</span><span class="sy0">,</span> <span class="st0">"domReady!"</span><span class="br0">]</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">(</span><span class="sy1">$</span><span class="sy0">,</span> mediaCheck<span class="br0">)</span> <span class="br0">{</span>
    <span class="st0">"use strict"</span><span class="sy0">;</span>
&nbsp;
    <span class="kw2">var</span> sidebar <span class="sy0">=</span> <span class="br0">{</span><span class="br0">}</span><span class="sy0">;</span>
    <span class="kw2">var</span> a2c <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".product-add-form"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> a2c_mobile_target <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".product-info-main &gt; .price-box"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="co1">// nodes required to calculate sidebar params: width, left, padding-left</span>
    <span class="kw2">var</span> page_main <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".page-main"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> page_main_w<span class="sy0">;</span>
    <span class="kw2">var</span> main <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".main"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> main_w<span class="sy0">;</span>
    <span class="co1">// nodes required to calculate sidebar params: top</span>
    <span class="kw2">var</span> header <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".page-header"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> nav <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".nav-sections"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> breadcrumbs <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".breadcrumbs"</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="co1">// luma specific css values</span>
    <span class="kw2">var</span> a2c_mb <span class="sy0">=</span> parseInt<span class="br0">(</span><span class="sy1">$</span><span class="br0">(</span><span class="st0">"#product-addtocart-button"</span><span class="br0">)</span>.<span class="kw8">css</span><span class="br0">(</span><span class="st0">"margin-bottom"</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> main_pb <span class="sy0">=</span> parseInt<span class="br0">(</span>main.<span class="kw8">css</span><span class="br0">(</span><span class="st0">"padding-bottom"</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="kw2">var</span> tabs_mb <span class="sy0">=</span> parseInt<span class="br0">(</span><span class="sy1">$</span><span class="br0">(</span><span class="st0">".product.info.detailed"</span><span class="br0">)</span>.<span class="kw8">css</span><span class="br0">(</span><span class="st0">"margin-bottom"</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
    sidebar.<span class="me1">el</span> <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span><span class="st0">".sidebar"</span><span class="br0">)</span><span class="sy0">;</span>
    sidebar.<span class="me1">padding_ratio</span> <span class="sy0">=</span> parseFloat<span class="br0">(</span>sidebar.<span class="me1">el</span>.<span class="kw8">css</span><span class="br0">(</span><span class="st0">"padding-left"</span><span class="br0">)</span><span class="br0">)</span> <span class="sy0">/</span> page_main.<span class="kw8">width</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
    sidebar.<span class="me1">updateHorizontalParams</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
        <span class="kw1">if</span> <span class="br0">(</span>sidebar.<span class="me1">el</span>.<span class="kw5">hasClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
            page_main_w <span class="sy0">=</span> parseFloat<span class="br0">(</span>page_main.<span class="kw8">width</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
            main_w <span class="sy0">=</span> parseFloat<span class="br0">(</span>main.<span class="kw8">width</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
            sidebar.<span class="kw8">width</span> <span class="sy0">=</span> page_main_w <span class="sy0">-</span> main_w<span class="sy0">;</span>
            sidebar.<span class="me1">left</span> <span class="sy0">=</span> <span class="br0">(</span><span class="sy1">$</span><span class="br0">(</span>window<span class="br0">)</span>.<span class="kw8">width</span><span class="br0">(</span><span class="br0">)</span> <span class="sy0">-</span> page_main_w<span class="br0">)</span> <span class="sy0">/</span> <span class="nu0">2</span> <span class="sy0">+</span> main_w<span class="sy0">;</span>
            sidebar.<span class="me1">p_left</span> <span class="sy0">=</span> parseInt<span class="br0">(</span>page_main_w <span class="sy0">*</span> sidebar.<span class="me1">padding_ratio</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
            sidebar.<span class="me1">el</span>.<span class="kw8">css</span><span class="br0">(</span><span class="br0">{</span>
                <span class="st0">"width"</span><span class="sy0">:</span> sidebar.<span class="kw8">width</span> <span class="sy0">+</span> <span class="st0">"px"</span><span class="sy0">,</span>
                <span class="st0">"left"</span><span class="sy0">:</span> sidebar.<span class="me1">left</span> <span class="sy0">+</span> <span class="st0">"px"</span><span class="sy0">,</span>
                <span class="st0">"padding-left"</span><span class="sy0">:</span> sidebar.<span class="me1">p_left</span> <span class="sy0">+</span> <span class="st0">"px"</span>
            <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
    <span class="br0">}</span><span class="sy0">;</span>
    sidebar.<span class="me1">updateVerticalParams</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
        sidebar.<span class="kw8">height</span> <span class="sy0">=</span> sidebar.<span class="me1">el</span>.<span class="kw8">height</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
        <span class="kw2">var</span> scrolled_from_top <span class="sy0">=</span> <span class="sy1">$</span><span class="br0">(</span>window<span class="br0">)</span>.<span class="kw8">scrollTop</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="kw2">var</span> header_h <span class="sy0">=</span> header.<span class="kw8">outerHeight</span><span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span> <span class="sy0">||</span> <span class="nu0">0</span><span class="sy0">;</span>
        <span class="kw2">var</span> nav_h <span class="sy0">=</span> nav.<span class="kw8">outerHeight</span><span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span> <span class="sy0">||</span> <span class="nu0">0</span><span class="sy0">;</span>
        <span class="kw2">var</span> breadcrumbs_h <span class="sy0">=</span> breadcrumbs.<span class="kw8">outerHeight</span><span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span> <span class="sy0">||</span> <span class="nu0">0</span><span class="sy0">;</span>
        <span class="kw2">var</span> content_h <span class="sy0">=</span> main.<span class="kw8">outerHeight</span><span class="br0">(</span><span class="kw2">true</span><span class="br0">)</span> <span class="sy0">||</span> <span class="nu0">0</span><span class="sy0">;</span>
        <span class="kw2">var</span> sidebar_limit_top <span class="sy0">=</span> header_h <span class="sy0">+</span> nav_h <span class="sy0">+</span> breadcrumbs_h<span class="sy0">;</span>
        <span class="kw2">var</span> sidebar_limit_bottom <span class="sy0">=</span> sidebar_limit_top <span class="sy0">+</span> content_h<span class="sy0">;</span>
        <span class="kw2">var</span> sidebar_limit_bottom_criteria <span class="sy0">=</span> scrolled_from_top <span class="sy0">+</span> sidebar.<span class="kw8">height</span> <span class="sy0">+</span> main_pb <span class="sy0">+</span> a2c_mb <span class="sy0">-</span> tabs_mb<span class="sy0">;</span>
&nbsp;
        <span class="kw1">if</span> <span class="br0">(</span>sidebar_limit_bottom <span class="sy0">&lt;</span> sidebar_limit_bottom_criteria<span class="br0">)</span> <span class="br0">{</span>
            <span class="co1">// sidebar should start drifting out of viewport on the top</span>
            sidebar.<span class="me1">top</span> <span class="sy0">=</span> sidebar_limit_bottom <span class="sy0">-</span> sidebar_limit_bottom_criteria<span class="sy0">;</span>
&nbsp;
            sidebar.<span class="me1">el</span>.<span class="kw8">css</span><span class="br0">(</span><span class="br0">{</span><span class="st0">"top"</span><span class="sy0">:</span> sidebar.<span class="me1">top</span> <span class="sy0">+</span> <span class="st0">"px"</span><span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span>scrolled_from_top <span class="sy0">&gt;</span> sidebar_limit_top<span class="br0">)</span> <span class="br0">{</span>
            <span class="co1">// header and breadcrumbs are now above viewport</span>
            <span class="kw1">if</span> <span class="br0">(</span><span class="sy0">!</span>sidebar.<span class="me1">el</span>.<span class="kw5">hasClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
                sidebar.<span class="me1">el</span>.<span class="kw5">addClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span><span class="sy0">;</span>
                sidebar.<span class="me1">updateHorizontalParams</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            <span class="br0">}</span>
            sidebar.<span class="me1">top</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
            sidebar.<span class="me1">el</span>.<span class="kw8">css</span><span class="br0">(</span><span class="br0">{</span><span class="st0">"top"</span><span class="sy0">:</span> sidebar.<span class="me1">top</span> <span class="sy0">+</span> <span class="st0">"px"</span><span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span>
            sidebar.<span class="me1">el</span>.<span class="kw5">removeClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span>.<span class="kw5">removeAttr</span><span class="br0">(</span><span class="st0">"style"</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span>
    <span class="br0">}</span><span class="sy0">;</span>
&nbsp;
    <span class="kw2">var</span> <span class="kw3">onResize</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
        <span class="sy1">$</span><span class="br0">(</span>window<span class="br0">)</span>.<span class="me1">on</span><span class="br0">(</span><span class="st0">"resize"</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
            sidebar.<span class="me1">updateHorizontalParams</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span><span class="sy0">,</span> onScroll <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
        <span class="sy1">$</span><span class="br0">(</span>window<span class="br0">)</span>.<span class="me1">on</span><span class="br0">(</span><span class="st0">"scroll"</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
            sidebar.<span class="me1">updateVerticalParams</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
        <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span><span class="sy0">,</span> onInit <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
        mediaCheck<span class="br0">(</span><span class="br0">{</span>
            media<span class="sy0">:</span> <span class="st0">"(min-width: 768px)"</span><span class="sy0">,</span>
            entry<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
                sidebar.<span class="me1">el</span>
                    .<span class="kw5">addClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span>
                    .<span class="kw7">prepend</span><span class="br0">(</span>a2c.<span class="me1">detach</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
                sidebar.<span class="me1">updateHorizontalParams</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
                sidebar.<span class="me1">updateVerticalParams</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
&nbsp;
                <span class="kw3">onResize</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
                onScroll<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
            <span class="br0">}</span><span class="sy0">,</span>
            exit<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
                a2c.<span class="me1">detach</span><span class="br0">(</span><span class="br0">)</span>.<span class="kw7">insertAfter</span><span class="br0">(</span>a2c_mobile_target<span class="br0">)</span><span class="sy0">;</span>
&nbsp;
                sidebar.<span class="me1">el</span>
                    .<span class="kw5">removeClass</span><span class="br0">(</span><span class="st0">"fixed"</span><span class="br0">)</span>
                    .<span class="kw5">removeAttr</span><span class="br0">(</span><span class="st0">"style"</span><span class="br0">)</span><span class="sy0">;</span>
            <span class="br0">}</span>
        <span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span>
    <span class="br0">}</span><span class="sy0">;</span>
&nbsp;
    onInit<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span></code></pre>
<p><span>下面我为您讲解代码的逻辑：</span></p>
<ul>
<li><span>onInit()方法用于初始化逻辑</span></li>
<li><span><span>通过使用matchMedia库，产品选项可以在移动和pc布局之间切换位置（这种元素的分离是必需的，因为在移动设备上，侧边栏将是页脚之前的最后一个元素，并且不会让页面到达页面的下方）。</span><span>此媒体查询还负责添加（在PC上）或删除（在手机上）CSS类名&ldquo;<span>fixed</span>&rdquo;</span></span></li>
<li><span><span>当只在PC上时，JS会计算四个CSS属性（updateHorizo​​ntalParams（） - &gt; width，left，padding-left属性，updateVerticalParams（） - &gt; top属性）的值。</span><span>并加载事件监听器（在页面调整大小和页面滚动进行相同的计算)</span></span></li>
<li><span>侧栏的显示可以分为三种不同的状态：</span>
<ul>
<li><span>状态＃1 - 只要面包屑在视口中可见，侧栏就会相对定位</span></li>
<li><span>状态＃2 - 一旦面包屑在视口外滚动，侧栏被定位为固定元素并将保持在视口中</span><br /><img alt="悬浮边栏 - 使边栏固定" height="612" src="https://www.360magento.com/media/wysiwyg/blog_200/treshold-1.jpg" /></li>
<li><span>状态＃3 - 一旦侧栏的底部与内容的底部对齐，侧栏开始在视口外滑动，就像页面的其余部分一样</span><img alt="粘滞边栏 - 保持固定，但向上滚动" class="alignnone wp-image-31994 size-full lazyloaded" height="443" src="https://inchoo.net/wp-content/uploads/2018/03/threshold-2.jpg" width="1209" data-src="https://inchoo.net/wp-content/uploads/2018/03/threshold-2.jpg" /></li>
</ul>
</li>
</ul>
<p><span>此代码已经过优化，可与Luma主题一起使用，因此您可能需要添加/清除此处所述的一些代码。</span></p>]]></description>
      <pubDate>Tue, 12 Jun 2018 01:28:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[7种方法让你的Magento 2主题模板速度加快]]></title>
      <link>https://www.360magento.com/blog/make-theme-faster/</link>
      <description><![CDATA[<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>Magento 2作为功能强大且功能丰富的电子商务平台。</span><span>它提供了不错的页面加载速度，但在大量定制下可能会非常缓慢。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>部分性能问题可能是一个开发不标准的自定义主题引起的（在这里重声下，magento有两大主题模板市场，一个$89,一个$179,作为技术的我深知两大模板的优劣，总之不要图一时便宜）。</span><span>一方面，默认的Luma和Blank主题相当快。</span><span>另一方面，一些定制的主题很慢，可能会让你的网上商店成为一个噩梦。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>我将分享一些技巧来优化Magento2主题模板让他更快。</span><span>这些小技巧都是经过实践验证的，他们真的很有用。</span><span>我已经在各个项目中使用它们，以使Magento 2网站有一个不错的页面加载时间速度。</span></span></p>
<h2 style="font-size: 1.5em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>加快Magento 2主题模板的7个技巧</span></h2>
<ol style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<li><span>切勿在循环中加载Magento模型。</span></li>
<li><span>缩小HTML。</span></li>
<li><span>切勿使用JS捆绑。</span></li>
<li><span>合并和缩小CSS / JS。</span></li>
<li><span>避免CSS / JS框架。</span></li>
<li><span>优化图像。</span></li>
<li><span>尽量减少第三方扩展的数量。</span></li>
</ol>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>1.永远不要将Magento模型加载到循环中</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>这事儿常常发生。</span><span>我经常看到这样的PHP代码：</span></span></p>
<pre class="brush: php; gutter: true hljs" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span class="hljs-keyword">foreach</span><span>（$ productCollection </span><span class="hljs-keyword">as</span><span> $ product）{</span><span></span>
<span></span><span>
$ _product = $ productModelFactory-&gt; create（） - &gt; load（$ product-&gt; getId（））</span><span></span>
<span></span><span>
...。</span></pre>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>您可能会</span><span>在Magento 2迭代集合的</span><span>各种</span></span><em>list.phtml</em><span><span>模板中</span><span>看到该结构</span><span>。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>我会解释为什么这对性能不好。</span><span>Magento 2模型负载很重，需要太多时间。</span><span>再加上集合不断的循环可能会显著减慢站点的速度。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>另外，不需要加载模型，因为一个集合已经具有可能需要的所有数据。</span><span>所以你最好检查一下你的主题模板文件和重构代码部分是否包含模型循环。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>如何找出要检查的主题模板？</span><span>使用Magento 2分析器 - 它将显示最慢的代码块。</span><span>要启用Magento 2分析器，只需将以下代码添加到</span></span><em>index.php</em><span>和</span><em>pub/index.php</em><span>：</span></p>
<pre class="brush: php; gutter: true hljs bash" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span class="hljs-variable">$ _SERVER</span><span> ['MAGE_PROFILER'] = 1;</span></pre>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>重新加载网站页面，您将在底部看到配置文件跟踪：</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><img alt="Magento 2探查器跟踪" height="600" src="http://www.360magento.com/media/wysiwyg/blog_199/Magento-2-profiler-trace.png" style="border: 0px; cursor: default; vertical-align: middle;" width="1349" /></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>研究跟踪，你会看到哪些模板花费时间最多。</span></p>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>2.缩小HTML</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>如果可以缩小页面大小，可以使主题更快。</span><span>其中一种方法是缩小HTML。</span></span><br /><span><span>Magento 2支持开箱即用页面缩小。</span><span>您可以转至<em>Stores &gt; Configuration &gt; Advanced &gt; Developer &gt; Template Settings &gt; Minify HTML</em></span></span><span>并将其打开（在Magento 2.2+上，此设置仅在开发人员模式下可见）：</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><img alt="在Magento中缩小HTML" height="744" src="http://www.360magento.com/media/wysiwyg/blog_199/Minify-HTML.png" style="border: 0px; cursor: default; vertical-align: middle;" width="1356" /></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>有一点要记住 - 这种配置更改仅适用于生产和默认模式。</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>你可能会问 - 这些模式是什么？</span><span>Magento 2有三种运行模式：<span>default（默认模式）, developer（开发者模式） 和 production（生产模式）</span>。</span><span>生产模式是最快的，它用于为上线网站提供动力。</span><span>另一方面，为了调整和更改商店，您可能需要打开开发人员模式。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>要了解网站的模式，可以在Magento根文件夹中运行此SSH命令：</span></p>
<pre class="brush: php; gutter: true hljs nginx" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span class="hljs-attribute">php</span> bin/magento deploy:mode:show</pre>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>要切换到生产模式，请运行：</span></p>
<pre class="brush: php; gutter: true hljs bash" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">php bin/magento deploy:mode:<span class="hljs-built_in">set</span> production</pre>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>HTML缩小可以缩小到高达原始页面大小的50％，因此您可以尝试一下。</span></p>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>3.永远不要使用JS捆绑</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>JS捆绑是Magento 2的一个特殊功能，它将JS文件分组在一起，以减少Web浏览器加载页面所需的HTTP请求数量。</span><span>在HTTP1下可以使网站更快，但它对于HTTP2是没有用的。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>由于其他原因，JS捆绑也没用。</span><span>发生的情况是，这个庞大的捆绑</span></span><a href="https://github.com/magento/magento2/issues/4506" rel="noopener" target="_blank">JavaScript文件</a>&nbsp;大小<span>为5-12Mb，显着降低了商店的速度（尤其是在网络较慢的情况下）。</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>所以去<em>Stores &gt; Configuration &gt; Advanced &gt; Developer &gt; Javascript Settings</em></span><span>并且设置启用JS捆绑为NO：</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><img alt="JS捆绑在Magento中 " height="778" src="http://www.360magento.com/media/wysiwyg/blog_199/JS-Bundling.png" style="border: 0px; cursor: default; vertical-align: middle;" width="1361" /></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>我建议使用HTTP / 2的强大功能，而不是JS捆绑。</span><span>HTTP协议的新版本设计时考虑到了性能，并且可以真正加速任何站点，包括Magento。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>另一个解决方法是使用CDN（内容分发网络）。</span><span>用它来加载静态文件比服务器加载的时间快了很多，而且它具有动态图像优化功能和各种缓存选项。</span></span></p>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>4.合并和缩小CSS和JS文件</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>Magento 2具有缩小CSS和JavaScript的内置功能。</span><span>这对性能有好处，因为它可以减少页面负载。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>要设置缩小和合并，请转至后端菜单<span>S</span><em>tores &gt; Configuration &gt; Advanced &gt; Developer &gt; CSS and Javascript settings</em></span><span>：</span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><img alt="在Magento admin中缩小CSS JS" height="779" src="http://www.360magento.com/media/wysiwyg/blog_199/Minify-CSS-JS.png" style="border: 0px; cursor: default; vertical-align: middle;" width="1351" /></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>请注意，JS / CSS minification仅适用于生产和默认运行模式。</span></p>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>5.避免第三方CSS/JS框架</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>我建议在构建Magento 2主题时避免使用任何外部前端库（除了那些最初与M2一起提供的库）。</span><span>第三方框架可能使网站变慢。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>与Magento 2一起提供的jquery应该足以满足任何javascript需求。</span><span><br /></span></span></p>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>6.优化图像</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>电子商务网站往往有很多图像。</span><span>保持它们的优化和尽可能小的尺寸是非常重要的。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>我会在这里强调3种方式来照顾您的目录图片：</span></p>
<ol style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<li><span>CDN（内容分发网络）</span><span><span>&nbsp;- 几乎所有这样的网站都具有某种图像优化功能。</span><span>如果您的预算允许，您可以试一试。</span></span></li>
<li><span><span><a href="https://developers.google.com/speed/pagespeed/module/" rel="noopener" target="_blank">Google PageSpeed Module</a><span>&nbsp;</span>- 此服务器扩展（由Google开发）可以压缩图像并自动执行其他速度优化。</span><span>您可能需要系统管理员帮助进行正确设置和配置。</span></span></li>
<li><span>各种在线工具</span><span><span>&nbsp;- 如果您没有那么多的图片，您可以逐个手动优化它们。</span><span>有不少在线工具可以压缩图片。</span></span></li>
</ol>
<h3 style="font-size: 1.17em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>7.保持第三方扩展的数量最少</span></h3>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>根据我的经验，如果有一个缓慢的Magento网站，在大多数情况下，有很多自定义插件。</span><span>市场上的一些第三方扩展可能会显著影响性能。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>自定义模块的问题在于，它们通常是在没有速度基准的情况下编写的。</span><span>编码质量差是我建议将第三方扩展数量保持在最低限度的首要原因。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>如果你已经安装了一堆插件，那么该做一个审查了。</span><span>逐个禁用它们并测量页面加载时间。</span><span>如果扩展在第一个字节（TTFB）中超过100毫秒的时间，则可能需要联系其供应商并寻求补丁。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span><span>如何找到安装的模块列表？</span><span>在Magento根文件夹中运行这个SSH命令：</span></span></p>
<pre class="brush: php; gutter: true hljs ruby" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">php bin/magento <span class="hljs-class"><span class="hljs-keyword">module</span>:<span class="hljs-title">status</span></span></pre>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>忽略以</span><em>Magento_</em><span><span>开头的模块</span><span>- 这些是核心扩展。</span></span></p>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>要禁用扩展，您可以简单地从app/code中删除它的文件夹并运行：</span></p>
<pre class="brush: php; gutter: true hljs nginx" style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin: 8px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span class="hljs-attribute">php</span> bin/magento setup:upgrade</pre>
<h2 style="font-size: 1.5em; color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>总结</span></h2>
<p style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><span>Magento 2自定义主题可能会很慢，但有一些方法可以使其更快速：</span></p>
<ul style="color: #2f2f2f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
<li><span>注意第一个字节的时间，并尝试使用分析器来降低它。</span></li>
<li><span>保持页面大小最小并始终压缩图像。</span></li>
<li><span>检查主题模板并纠正不良的PHP代码块。</span></li>
<li><span>缩小HTML，CSS，JS。</span></li>
<li><span>不要使用JS捆绑 - 它有害无益。</span></li>
</ul>]]></description>
      <pubDate>Fri, 08 Jun 2018 04:02:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[详细说明Magento2的所有产品类型]]></title>
      <link>https://www.360magento.com/blog/magento-2-product-types/</link>
      <description><![CDATA[<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">默认情况下，Magento 2中有6种产品类型：</span></span><em style="box-sizing: border-box; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">Simple, Configurable, Virtual, Downloadable, Grouped 和 Bundle&nbsp;Products</em><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">。</span><span style="box-sizing: border-box; vertical-align: inherit;">它们与Magento 1中产品类型一样。如果您使用过Magento 1，我想您非常熟悉这些类型的产品。</span><span style="box-sizing: border-box; vertical-align: inherit;">然而，如果你仍然好奇并想更多地了解它们，</span><span style="box-sizing: border-box; vertical-align: inherit;">这篇博客会为您提供每种产品类型的详细说明。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; font-size: 25px;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">1.简单产品(Simple Products)</span></span></strong></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">这是Magento商店中使用最广泛的产品类型。</span><span style="box-sizing: border-box; vertical-align: inherit;">简单产品是具有单个SKU的实物产品。</span><span style="box-sizing: border-box; vertical-align: inherit;">简单产品可以单独销售，也可以作为可配置(Configurable)、分组(Virtual)或捆绑(Bundle)产品的一部分销售。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">实际上，大多数商店都使用简单产品，例如：书，包，手表......</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento产品类型简单的产品" height="764" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-simple-product.png" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="1770" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">&nbsp;</p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; font-size: 25px;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">2.可配置产品(Configurable Products)</span></span></strong></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">一个可配置产品似乎是一个单一产品，每个变体都有选项列表。</span><span style="box-sizing: border-box; vertical-align: inherit;">但是，每个选项代表一个独立的简单产品，具有不同的SKU，这使得可以跟踪每个变体的库存。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">可配置产品的一个最好示例是T恤。</span><span style="box-sizing: border-box; vertical-align: inherit;">购买一件T恤，顾客可以选择不同的颜色或不同的尺寸。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento产品类型可配置产品" height="938" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-configurable-product.png" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="1830" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">&nbsp;</p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; font-size: 25px;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">3.虚拟产品(Virtual Products)</span></span></strong></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">虚拟产品没有实体存在，通常用于诸如服务，保证和订阅等事情。</span><span style="box-sizing: border-box; vertical-align: inherit;">这些类型的产品不需要运输，交付或下载。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento产品类型虚拟产品" height="463" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-virtual-product.png.jpg" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="1280" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">&nbsp;</p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">4.可下载的产品(Downloadable Products)</span></span></strong></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">一个电子下载产品包含一个或多个下载的文件。</span><span style="box-sizing: border-box; vertical-align: inherit;">这些文件可以存储在您的服务器上，也可以从其他服务器提供的URL作为下载。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">示例：软件，视频，电子书，...</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento 2产品类型可下载的产品" height="1028" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-downloadable-product.png" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="1736" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">&nbsp;</p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; font-size: 25px;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">5.分组产品(套)</span></span></strong></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">分组产品只是一组单一产品。</span><span style="box-sizing: border-box; vertical-align: inherit;">您可以提供单个产品的变体，或将它们分组以供升级。</span><span style="box-sizing: border-box; vertical-align: inherit;">产品可以单独购买，也可以分组购买。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">实际上，您可以使用此产品为想要一次购买多种产品的客户提供促销。</span><span style="box-sizing: border-box; vertical-align: inherit;">或者您可以将其用于一组产品。</span><span style="box-sizing: border-box; vertical-align: inherit;">例如：一套家具，一套行李如下：</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento产品类型分组产品" height="421" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-grouped-product.jpg" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="851" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">&nbsp;</p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; font-size: 25px;"><strong style="box-sizing: border-box; font-weight: bold;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">6.捆绑产品(Bundle Products)</span></span></strong></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">一个捆绑产品可以让客户从各种选项中&ldquo;建立自己想要的&rdquo;。</span><span style="box-sizing: border-box; vertical-align: inherit;">该捆绑包可以是礼品篮，电脑或任何可以定制的东西。</span><span style="box-sizing: border-box; vertical-align: inherit;">捆绑包中的每个物品都是独立的产品。</span></span></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><img alt="magento 2产品类型捆绑产品" height="348" src="http://www.360magento.com/media/wysiwyg/blog_198/magento-product-types-bundle-product.png" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; display: block; margin: 0px auto;" width="735" /></p>
<p style="box-sizing: border-box; margin: 0px 0px 24px; color: #303c40; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><span style="box-sizing: border-box; vertical-align: inherit;"><span style="box-sizing: border-box; vertical-align: inherit;">根据具体的商品和服务，每个商店可以使用不同的Magento 2产品类型。</span><span style="box-sizing: border-box; vertical-align: inherit;">如果您仍然对这些Magento 2产品类型感到困惑，请<a href="http://www.360magento.com/contacts/" title="联系我们">联系我们</a>，我们将举出更多例子为您解答，并根据您的产品特性指定不同的产品类型。。</span></span></p>]]></description>
      <pubDate>Thu, 07 Jun 2018 09:03:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何保护Magento 2中的原始产品图像？]]></title>
      <link>https://www.360magento.com/blog/protect-product-images/</link>
      <description><![CDATA[<h2><span>问题：</span></h2>
<p><span>开发人员启用了Magento 2的水印功能，但仍可从URL访问没有水印的原始产品图像。</span></p>
<p><em>例如：</em></p>
<p><span>缓存的带有水印的图片地址：</span></p>
<p><span><span>/pub/media/catalog/product</span><span>/cache/df484df48ez74849c15sd4f7780</span><span>/f/f/dsf-8f48d4f.jpg</span></span></p>
<p></p>
<p><span>没有水印的原始图片地址：</span></p>
<p><span>/pub/media/catalog/product/f/f/dsf-8f48d4f.jpg</span></p>
<p><span><span>因此，如果有人</span><span>&nbsp;从URL中</span><span>删除<span>/</span><span>cache/df484df48ez74849c15sd4f7780/</span><span>&nbsp;</span></span></span><span>仍然可以访问无水印的原始照片来窃取图像。</span></p>
<p><span>开发者如何保护他的原始产品图像？</span></p>
<h2><span>解决方案：</span></h2>
<p><span>这里的简单解决方案是修改和使用以下<span>/var/media/catalog</span>目录中.htaccess文件：</span></p>
<pre>Options <span>+</span>FollowSymLinks
RewriteEngine on

<span>#</span><span>The next coding </span><span>line</span><span> permits the original images to be accessed by admin end directly</span>

RewriteCond <span>%</span><span>{</span>HTTP_REFERER<span>}</span> <span>!</span><span>^</span>http<span>:</span><span>//</span><span>www.yourwebsite.com/</span><span>.*$ [NC]</span>

<span>#</span><span>The next coding </span><span>line</span><span> permits the watermarked images to be accessed directly</span><span>.</span><span> It is according to the rule where the URL does not contain a cache</span><span>.</span>

RewriteCond <span>%</span><span>{</span>REQUEST_URI<span>}</span> <span>!</span><span>(</span><span>/</span>cache<span>/</span><span>)</span> <span>[</span>NC<span>]</span>

<span>#</span><span>It is the page where your store visitor will be redirected </span><span>if</span><span> they will attempt to access images directly</span><span>.</span>

RewriteRule \<span>.</span><span>(</span>gif<span>|</span>jpg<span>)</span>$ http<span>:</span><span>//en.wikipedia.org/wiki/You_shall_not_steal [R,L]</span></pre>
<p></p>
<p><span>上述安全措施将帮助开发人员防止他的Magento产品图像被盗，下载和复制。</span></p>
<p><span><span>我们向您展示了一种简单的方法来保护Magento 2中的原始图像文件。如果您在遵循该指示时遇到任何问题，请联系我们</span><span>！</span></span></p>]]></description>
      <pubDate>Wed, 06 Jun 2018 01:34:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何修复在Magento 2中重新索引时的死锁错误？]]></title>
      <link>https://www.360magento.com/blog/error-reindexing-m2/</link>
      <description><![CDATA[<h2><span>问题：</span></h2>
<p><span>Magento版本：2.1.9&nbsp;</span><br /><span>模式：<span>Production</span></span><br /><span>索引模式：<span>Update on save</span></span></p>
<p><span>总产品：18k&nbsp;</span><br /><span>总客户：54k&nbsp;</span><br /><span>总订单：18k</span></p>
<p><span><span>开发人员尝试重新建立索引后，会生成exception.log文件，其中包含此文件中的以下错误。</span><span>同时，服务器被卡住，需要重新启动。</span><span>然后，该网站才可以照常运行。</span></span></p>
<p><span>&ldquo;PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction&rdquo;</span></p>
<p><span>那么，如何解决这个死锁错误以及手动重新编制索引的最佳方法？</span></p>
<h2><span>解决方案：</span></h2>
<p><span>有3个简单的步骤来处理这个Magento 2死锁错误：</span></p>
<ul>
<li>
<ul>
<li>
<h3><span><em>第1步：在本地打开数据库，然后运行SQL：</em></span></h3>
</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 14px; line-height: 1.2; margin: 0px 0px 11.5px; word-break: normal; word-wrap: break-word; color: #000020; background: #f6f8ff; border: 0px; border-radius: 0px; padding: 11px; hyphens: none; text-shadow: none;">DROP TABLE `catalog_category_product_index`<span style="box-sizing: border-box; color: #406080;">;</span>
DROP TABLE `catalog_category_product_index_tmp`<span style="box-sizing: border-box; color: #406080;">;</span>


CREATE TABLE `catalog_category_product_index` <span style="box-sizing: border-box; color: #308080;">(</span>
  `category_id` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">10</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Category ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `product_id` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">10</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Product ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `position` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">11</span><span style="box-sizing: border-box; color: #308080;">)</span> DEFAULT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Position'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `is_parent` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Is Parent'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `store_id` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Store ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `visibility` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Visibility'</span>
<span style="box-sizing: border-box; color: #308080;">)</span> ENGINE<span style="box-sizing: border-box; color: #308080;">=</span>InnoDB DEFAULT <span style="box-sizing: border-box; color: #003060;">CHARSET</span><span style="box-sizing: border-box; color: #308080;">=</span>utf8 COMMENT<span style="box-sizing: border-box; color: #308080;">=</span><span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Catalog Category Product Index'</span><span style="box-sizing: border-box; color: #406080;">;</span>
ALTER TABLE `catalog_category_product_index`
  ADD PRIMARY KEY <span style="box-sizing: border-box; color: #308080;">(</span>`category_id`<span style="box-sizing: border-box; color: #308080;">,</span>`product_id`<span style="box-sizing: border-box; color: #308080;">,</span>`store_id`<span style="box-sizing: border-box; color: #308080;">)</span><span style="box-sizing: border-box; color: #308080;">,</span>
  ADD KEY `CAT_CTGR_PRD_IDX_PRD_ID_STORE_ID_CTGR_ID_VISIBILITY` <span style="box-sizing: border-box; color: #308080;">(</span>`product_id`<span style="box-sizing: border-box; color: #308080;">,</span>`store_id`<span style="box-sizing: border-box; color: #308080;">,</span>`category_id`<span style="box-sizing: border-box; color: #308080;">,</span>`visibility`<span style="box-sizing: border-box; color: #308080;">)</span><span style="box-sizing: border-box; color: #308080;">,</span>
  ADD KEY `CAT_CTGR_PRD_IDX_STORE_ID_CTGR_ID_VISIBILITY_IS_PARENT_POSITION` <span style="box-sizing: border-box; color: #308080;">(</span>`store_id`<span style="box-sizing: border-box; color: #308080;">,</span>`category_id`<span style="box-sizing: border-box; color: #308080;">,</span>`visibility`<span style="box-sizing: border-box; color: #308080;">,</span>`is_parent`<span style="box-sizing: border-box; color: #308080;">,</span>`position`<span style="box-sizing: border-box; color: #308080;">)</span><span style="box-sizing: border-box; color: #406080;">;</span>
CREATE TABLE `catalog_category_product_index_tmp` <span style="box-sizing: border-box; color: #308080;">(</span>
  `category_id` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">10</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Category ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `product_id` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">10</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Product ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `position` <span style="box-sizing: border-box; color: #200080; font-weight: bold;">int</span><span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">11</span><span style="box-sizing: border-box; color: #308080;">)</span> NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Position'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `is_parent` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Is Parent'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `store_id` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> DEFAULT <span style="box-sizing: border-box; color: #1060b6;">'0'</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Store ID'</span><span style="box-sizing: border-box; color: #308080;">,</span>
  `visibility` smallint<span style="box-sizing: border-box; color: #308080;">(</span><span style="box-sizing: border-box; color: #008c00;">5</span><span style="box-sizing: border-box; color: #308080;">)</span> UNSIGNED NOT <span style="box-sizing: border-box; color: #7d0045;">NULL</span> COMMENT <span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Visibility'</span>
<span style="box-sizing: border-box; color: #308080;">)</span> ENGINE<span style="box-sizing: border-box; color: #308080;">=</span>MEMORY DEFAULT <span style="box-sizing: border-box; color: #003060;">CHARSET</span><span style="box-sizing: border-box; color: #308080;">=</span>utf8 COMMENT<span style="box-sizing: border-box; color: #308080;">=</span><span style="box-sizing: border-box; color: #ffffff; background: #dd9999; font-weight: bold; font-style: italic;">'Catalog Category Product Indexer Temp Table'</span><span style="box-sizing: border-box; color: #406080;">;</span>
ALTER TABLE `catalog_category_product_index_tmp`
  ADD KEY `CAT_CTGR_PRD_IDX_TMP_PRD_ID_CTGR_ID_STORE_ID` <span style="box-sizing: border-box; color: #308080;">(</span>`product_id`<span style="box-sizing: border-box; color: #308080;">,</span>`category_id`<span style="box-sizing: border-box; color: #308080;">,</span>`store_id`<span style="box-sizing: border-box; color: #308080;">)</span><span style="box-sizing: border-box; color: #406080;">;<br /><br /></span></pre>
<ul>
<li>
<ul>
<li>
<h3><span><em>第2步：尝试在本地重新索引</em></span></h3>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>
<h3><span><em>步骤3：如果您可以在本地重新编制索引，然后再在服务器上重新编制索引</em></span></h3>
</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<p><span><span>我们向您展示了3个步骤来解决在Magento CE 2.1.9中重新索引时发生的死锁错误。</span><span>如果您在按照说明进行操作时遇到任何问题，请联系我们</span><span>。</span></span></p>]]></description>
      <pubDate>Tue, 05 Jun 2018 01:33:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[2018年Magento电子商务网站20大免费网站速度测试工具（第2部分）]]></title>
      <link>https://www.360magento.com/blog/website-speed-test-2/</link>
      <description><![CDATA[<p><span>在</span><a href="http://www.360magento.com/blog/website-speed-test/">上一篇博客文章中</a><span><span>，我们向您展示了Magento电子商务商店的前10款免费网站速度测试工具。</span><span>今天，我们将继续推荐给您可以免费获得的剩余10个有用的测试工具。</span><span>让我们开始吧！</span></span></p>
<h2><span>所有Magento电子商务网站都应该知道</span>20个推荐的免费网站速度测试工具...</h2>
<h3><span><a href="https://developer.chrome.com/devtools" rel="nofollow" target="_blank">11. Chrome DevTools</a></span></h3>
<p><img alt="google devtools" height="690" src="http://www.360magento.com/media/wysiwyg/blog_195/chrome-devtools.png" width="1300" /></p>
<p><span>这是开发人员最熟悉的免费网站速度测试工具之一，因为它很容易在本地环境中测试和调试。</span></p>
<p><span>要启动DevTools，只需打开Chrome浏览器，然后按下组合键即可：</span></p>
<ul>
<li><span>对于Window / Linux：Ctrl + Shift + I</span></li>
<li><span>对于Mac：Cmd + Opt + I</span></li>
</ul>
<p><span><span>之后，将会显示您的Magento电子商务网站的详细分析。</span><span>以下是关于Chrome DevTools您可能想要了解的更多信息：</span></span></p>
<ul>
<li><span>通过使用Devetools，您将能够增强您的网络连接，禁用缓存，检测缓慢的第一个字节时间，获取页面渲染截图等。</span></li>
<li><span><span>此外，您可以计算出确切的DOMContentLoaded时间，其总加载时间，或阻止资源以及如何处理它。</span><span>（<span>Network -&gt; Show Overview -&gt; Ctrl+R/ Cmd+R -&gt; refresh</span>）</span></span></li>
<li><span><span>作为Google性能审核的强大自动化工具，Lighthouse已整合到Devtools中。</span><span>因此，您将知道根据糟糕的审核来如何改进您的网站。</span></span></li>
</ul>
<p>&nbsp;</p>
<h3><span><a href="https://ready.mobi/" rel="nofollow" target="_blank">12. MobiReady</a></span></h3>
<p><span>尽管MobiReady是一种新的测试工具，但它已被证明是最有效的免费网站速度测试工具之一，不仅适用于开发人员，设计人员，也适用于营销人员评估移动设备上的网站性能。</span></p>
<p><span>MobiReady的特别之处在于它将根据</span><em>W3C标准Google PageSpeed Insights</em><span>和</span><em>Yahoo YSlow</em><span><span>进行测试</span><span>。</span></span></p>
<p><img alt="mobiready测试网站速度" class="aligncenter size-full wp-image-6049" height="841" src="http://www.360magento.com/media/wysiwyg/blog_195/mobiready-test-website-speed.png" width="1300" /><span>|&nbsp;</span><br /><span>怎么运行的？</span></p>
<ul>
<li><span>MobiReady在4种不同类型的设备（台式机，高端手机，中端手机和低端手机）上实施4项测试，以检查您的网站在同一时间的表现。</span></li>
<li><span>它利用Chrome来下载网页的所有资源并检查尺寸。</span></li>
<li><span>总体而言，MobiReady为我们提供了遵循行业准则的相对准确的分数。</span></li>
</ul>
<p><img alt="mobiready测试网站速度结果" class="aligncenter size-full wp-image-6095" height="1708" src="http://www.360magento.com/media/wysiwyg/blog_195/mobiready-test-website-speed-result-1.png" width="1300" /></p>
<div class="panel panel-default">
<div class="panel-collapse collapse in" id="collapseThree">
<div class="panel-body panel-body-no-border">
<div class="panel panel-default">
<div class="panel-collapse collapse in" id="collapseFive">
<div class="panel-body panel-body-no-border"><span>要根据MobiReady测试增强您的Magento商店，您必须点击每个测试来查看其详细信息以及解决方案。</span></div>
<div class="panel-body panel-body-no-border"></div>
</div>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<h3><span><a href="https://varvy.com/pagespeed/" rel="nofollow" target="_blank">13. Varvy</a></span></h3>
<p><span><span>Varvy是电子商务网站最强大的一站式免费网站速度测试工具之一，可以检查您的速度，移动功能和搜索引擎优化（基于Google网站管理员指南）。</span><span>在进行详细分析后，Varvy将为优化您的网站性能提供大量方便的提示和指导。</span></span></p>
<p><span>更具体地说，测试结果包括摘要，页面资源图，CSS传递，Javascript使用率，速度问题，...</span><br /><img alt="varvy测试网站速度" class="aligncenter size-full wp-image-6040" height="670" src="http://www.360magento.com/media/wysiwyg/blog_195/varvy-test-website-speed.png" width="1300" /><br /><img alt="varvy工具测试网站速度" class="aligncenter size-full wp-image-6041" height="1215" src="http://www.360magento.com/media/wysiwyg/blog_195/varvy-tool-test-website-speed.png" width="1300" /></p>
<p>&nbsp;</p>
<h3><span><a href="https://performance.sucuri.net/" rel="nofollow" target="_blank">14.&nbsp;</a></span><a href="https://performance.sucuri.net/" rel="nofollow" target="_blank">Sucuri Load Time Tester</a></h3>
<h3></h3>
<p><span><span>Sucuri Load Time Tester工具提供了一种简单而快速的方式来评估您的网站在全球不同国家的表现。</span><span>在检查每个区域的总时间（根据连接时间和第一字节的时间）后，Sucuri将分析并给您一个全球绩效等级（A到F）。</span></span></p>
<p><span>更具体地说，这个测试有助于确定连接到您的网站以及您的网页完全加载需要多长时间。</span></p>
<p><img alt="sucuri加载时间测试仪" class="aligncenter size-full wp-image-6044" height="381" src="http://www.360magento.com/media/wysiwyg/blog_195/sucuri-load-time-tester.png" width="1300" /><br /><img alt="sucuri加载时间测试结果" class="aligncenter size-full wp-image-6045" height="581" src="http://www.360magento.com/media/wysiwyg/blog_195/sucuri-load-time-tester-results.png" width="1300" /></p>
<h3><span><a href="https://testmysite.thinkwithgoogle.com/" rel="nofollow" target="_blank">15.</a></span><a href="https://testmysite.thinkwithgoogle.com/" rel="nofollow" target="_blank">Think With Google</a>&nbsp;- 移动端友好测试&nbsp;</h3>
<h3></h3>
<p><span>Think With Google工具将帮助您了解您的网站是否适合移动设备，以及向您提供有用的增强建议。</span></p>
<p><img alt="goodle移动友好测试" class="aligncenter size-full wp-image-6058" height="878" src="http://www.360magento.com/media/wysiwyg/blog_195/goodle-mobile-friendly-test.png" width="1300" /></p>
<p><span>此工具可让您将免费报告发送至您的电子邮件，或者只需点击即可将信息转发给您的网站管理员或开发人员。</span></p>
<p><span><span>此外，Think With Google不仅可以分析您的Magento网站，还可以与同行业的其他网站进行比较。</span><span>从那里，你会知道你如何来尝试克服你的竞争对手。</span></span></p>
<p><img alt="goodle移动友好的测试结果" class="aligncenter size-full wp-image-6099" height="1853" src="http://www.360magento.com/media/wysiwyg/blog_195/goodle-mobile-friendly-test-results-1.png" width="1294" /></p>
<p>&nbsp;</p>
<h3><span><a href="https://www.dareboost.com/" rel="nofollow" target="_blank">16. Dareboost</a></span></h3>
<p><span><span>强烈推荐的另一个有用的免费网站速度测试工具是Dareboost。</span><span>像Varvy一样，Dareboost是一款全面的工具，可以分析您的网站速度，性能监控和搜索引擎优化。</span></span></p>
<p><img alt="dareboost免费工具来测试网站的性能" class="aligncenter size-full wp-image-6060" height="557" src="http://www.360magento.com/media/wysiwyg/blog_195/dareboost-free-tool-to-test-website-performance.png" width="1300" /></p>
<p><span>这个测试工具将分析各种数据点（最多80个），例如：请求数量，可访问性，jQuery，缓存策略，浏览器渲染......</span></p>
<p><span><span>与列表中的其他工具相比，Dareboost的安全报告非常特殊。</span><span>它会显示您的网站是否缺少安全政策标头和SSL证书，或者您的网站是否遭受了点击劫持攻击等等。</span></span><br /><img alt="dareboost免费工具来测试网站的性能结果" class="aligncenter size-full wp-image-6061" height="908" src="http://www.360magento.com/media/wysiwyg/blog_195/dareboost-free-tool-to-test-website-performance-results.png" width="1300" /></p>
<p><span>查看Dareboost报告，您可以快速发现您的Magento网站存在的问题并提出改进建议。</span></p>
<p><span>此外，它还允许您每月进行测试并获得5个网站报告。</span></p>
<p>&nbsp;</p>
<h3><span><a href="http://www.webpagetest.org/" rel="nofollow" target="_blank">17. WebPageTest</a></span></h3>
<p><span>由Google开发和支持的WebPageTest是一个了不起的开源工具，允许您使用浏览器（Chrome和Internet Explorer）在全球范围内的一个或多个地点实施免费速度测试。</span></p>
<p><span>通过使用WebPageTest，您可以进行一些独特的测试，例如内容拦截，多步骤交易，连接速度或视频捕捉......几乎所有网站上的所有内容。</span></p>
<p><span>更重要的是，您可以同时对3个网站进行测试，以便将您的网站与竞争对手的网站进行比较。</span></p>
<p><img alt="webpagetest免费测试工具" class="aligncenter size-full wp-image-6055" height="609" src="http://www.360magento.com/media/wysiwyg/blog_195/webpagetest-free-testing-tool-1.png" width="1300" /><br /><img alt="webpagetest免费测试工具结果" class="aligncenter size-full wp-image-6066" height="847" src="http://www.360magento.com/media/wysiwyg/blog_195/webpagetest-free-testing-tool-result.png" width="1300" /></p>
<p>&nbsp;</p>
<h3><span><a href="http://www.bitcatcha.com/" rel="nofollow" target="_blank">18. Bitcatcha</a></span></h3>
<p><span>由于Bitcatcha，您的Magento网站将在8个地点（USx2，伦敦，新加坡，圣保罗，班加罗尔，悉尼和日本）进行测试。</span></p>
<p><span>一旦测试完成，您将获得每个地区的具体时间，性能等级以及如何提高您网站性能的建议。</span></p>
<p><span>此外，由于Bitcatcha提供的可用链接，您可以轻松分享测试结果。</span></p>
<p>&nbsp;</p>
<p><img alt="bitcatcha网站速度测试工具" class="aligncenter size-full wp-image-6032" height="629" src="http://www.360magento.com/media/wysiwyg/blog_195/bitcatcha-website-speed-testing-tool.png" width="1300" /></p>
<p><img alt="bitcatcha网站速度测试" class="aligncenter size-full wp-image-6033" height="718" src="http://www.360magento.com/media/wysiwyg/blog_195/bitcatcha-website-speed-test.png" width="1300" /></p>
<p>&nbsp;</p>
<h3><span><a href="https://github.com/devbridge/Performance" rel="nofollow" target="_blank">19. PerfTool</a></span></h3>
<p><span><span>PerfTool是测试你的Magento网站速度的另一个开源工具，托管在Github上。</span><span>它提供了大量有关您的网站的有用信息，并以易于理解的方式显示结果。</span></span></p>
<p><span>为了提供详细的报告，PefTool收集3个可信数据源，包括DevPerf，PageSpeed Insights和W3CJS。</span></p>
<p><span><span>您的电子商务网站报告中有超过200个绩效指标。</span><span>只需输入您的网站的网址，让PerfTool完成剩下的工作。</span></span></p>
<p><img alt="perftool-网络性能速度测试" class="aligncenter size-full wp-image-6067" height="1364" src="http://www.360magento.com/media/wysiwyg/blog_195/perftool-web-performance-speed-test.png" width="2103" /></p>
<p>&nbsp;</p>
<h3><span><a href="http://www.monitis.com/" rel="nofollow" target="_blank">20. Monitis</a></span></h3>
<p><span><span>最后一个你不应该忽视的网站速度测试工具是Monitis。</span><span>这个工具很简单，但可以生成快速和可靠的结果。</span></span></p>
<p><span>您的Magento网站将从3个不同的地点进行检查，即美国，欧洲和亚太地区。</span></p>
<p><span>最后但并非最不重要的是，它允许您通过电子邮件，社交媒体或直接信息即时分享测试结果。</span></p>
<p><img alt="monitis web速度测试工具" class="aligncenter size-full wp-image-6031" height="511" src="http://www.360magento.com/media/wysiwyg/blog_195/monitis-web-speed-test-tool.png" width="1300" /></p>
<p>&nbsp;</p>
<h2><span>总结</span></h2>
<p><span><span>如果您希望加速您的网站，首先，花时间找一个可靠的网站速度测试工具来评估您当前的表现，找出哪些需要改进以及如何去做。</span><span>此外，市场上还有很多可用的免费网站速度测试工具，所以不需要你付费。</span><span>希望你在这篇文章中提到的工具能找到一个合适的工具来测试你的网站。</span></span></p>
<p><span><span>此外，在注意到您的问题后，如果您没有足够的知识和专业知识来改进网站，我们可以提供帮助。</span><span>在Magento界拥有6年以上的经验，我们知道如何让任何Magento电子商务网站发挥最佳效果。</span><span>通过发送您的请求到</span></span><a href="mailto:sales@360mageno.com">sales@360magento.com</a>&nbsp;或网站下方的联系方式<span><span>以获得免费咨询，</span><span>与我们联系</span><span>。</span></span></p>]]></description>
      <pubDate>Mon, 04 Jun 2018 01:48:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[2018年Magento电子商务网站20大免费网站速度测试工具（第1部分）]]></title>
      <link>https://www.360magento.com/blog/website-speed-test/</link>
      <description><![CDATA[<p><span><span>对于所有Magento电子商务网站，网站速度在客户体验和销售转化中起着至关重要的作用。</span><span>我们在前面的博客中提到了很多简单的方法来提高您的网站速度。</span></span></p>
<p><span>但是，在知道如何更好更快地创建网站之前，您应该测试当前的性能。</span></p>
<p><span><span>在这个博客中，我们将向您提供20个免费网站速度测试工具的列表，您可以使用它们检查Magento电子商务网站的性能。</span><span>让我们开始吧！</span></span></p>
<h2><span>所有Magento电子商务网站都应该知道</span>20个推荐的免费网站速度测试工具...</h2>
<h3><a href="https://developers.google.com/speed/pagespeed/insights/" rel="nofollow" target="_blank">1. Google Pagespeed Insights</a></h3>
<p><span><span>8年前，谷歌宣布网站页面速度将成为搜索引擎优化排名的重要因素。</span><span>同时，他们推出了Google PageSpeed Insights，一款功能强大的免费网站速度测试工具，可测量移动设备和桌面设备的网站性能，然后提出改进网站的具体方法。</span></span></p>
<p><img alt="谷歌pagespeed的见解" height="465" src="http://www.360magento.com/media/wysiwyg/blog_194/google-pagespeed-insights.png" width="1300" /><span>一旦您提交了需要测试的网站的URL，Google就会同时运行2个分析：</span></p>
<ul>
<li><span><span>第一个将检查上述内容的加载时间。</span><span>换句话说，它衡量从用户请求新页面到浏览器呈现上述内容的那一刻为止所用的时间。</span></span></li>
<li><span>第二个将测量提交网站的整体加载速度，从开始到页面完全呈现时。</span></li>
</ul>
<p><img alt="谷歌pagespeed洞察测试" class="aligncenter size-full wp-image-6035" height="764" src="http://www.360magento.com/media/wysiwyg/blog_194/google-pagespeed-insights-testing.png" width="1300" /></p>
<p><span>正如你所看到的，得分在0-100分的范围内。</span></p>
<p><span><span>分数越高，您的网站的优化效果就越好。</span><span>如果您的分数高于85，恭喜，您的网站表现非常好。</span></span><br /><img alt="谷歌pagespeed洞察测试" class="aligncenter size-full wp-image-6036" height="769" src="http://www.360magento.com/media/wysiwyg/blog_194/google-pagespeed-insights-test.png" width="1300" /></p>
<p><span>与桌面报告相比，移动报告添加了一个名为&ldquo;用户体验&rdquo;的新类别，检查按钮和链接的大小，字体大小等。</span></p>
<p><span>您可能知道，Google PageSpeed Insights一直在不断改进，因此随着新规则和更好的分析，分数将随着时间而改变。</span></p>
<h3><a href="https://gtmetrix.com/" rel="nofollow" target="_blank">2. GTmetrix</a></h3>
<p><span>GTmetrix是另一种流行且易于使用的网站速度测试工具。</span><br /><span>一旦输入您的网站URL，此分析工具将立即扫描该网站，并在几分钟后提供您想要了解的网站性能的所有信息。</span></p>
<p><img alt="gtmetrix网站速度测试" class="aligncenter size-full wp-image-6037" height="492" src="http://www.360magento.com/media/wysiwyg/blog_194/gtmetrix-website-speed-test.png" width="1300" /><br /><span>在结果页面上，GTmetrix在顶部显示摘要，列出您的总体性能分数（PageSpeed＆YSlow分数），满载时间，总页面大小和请求总数。</span></p>
<p><span><span>尤其是，由于该工具在瀑布视图中显示了您的请求列表，因此您可以轻松识别您的站点中当前存在的问题。</span><span>此外，该瀑布图允许下载以进行更深入的分析。</span></span></p>
<p><span>此外，与谷歌PageSpeed Insights类似，GTmetrix测试还提出了一些可能的解决方案，以加快您的Magento电子商务网站。</span></p>
<p><img alt="gtmetrix网站速度测试" class="aligncenter size-full wp-image-6038" height="723" src="http://www.360magento.com/media/wysiwyg/blog_194/gtmetrix-website-speed-testing.png" width="1300" /></p>
<p><span>关于GTmextrix，您可能会感兴趣的还有更多：</span></p>
<p><span>您可以创建一个免费帐户并保存多达20个速度测试，这有助于比较不同浏览器（Chrome / Firefox），位置，连接类型（有线/拨号）等的测试。</span></p>
<h3><a href="https://tools.pingdom.com/" rel="nofollow" target="_blank">3. Pingdom</a></h3>
<p><span>很多人认为Pingdom是近年来领先的免费网站速度测试工具。</span></p>
<p><span>要进行测试，您必须输入URL并选择四个可用位置之一，包括美国（德克萨斯州和加利福尼亚州），澳大利亚和瑞典。</span></p>
<p><span>检查完您的网站后，Pingdom将显示一个摘要，其中包含总体性能等级，总载入时间，页面大小，请求数量以及网站速度与其他网站的比较。</span></p>
<p><span>与PageSpeed Insights一样，Pingdom会将您的Magento电子商务网站的性能评分为100。</span></p>
<p><img alt="pingdom网站速度免费测试" class="aligncenter size-full wp-image-6053" height="557" src="http://www.360magento.com/media/wysiwyg/blog_194/pingdom-website-speed-test-free.png" width="1300" /><br /><span>欲了解更多详情，您必须滚动到性能见解，这些见解表明每个元素的得分，并推荐具体的解决方案来增强您的网站性能。</span><br /><img alt="pingdom网站速度测试免费结果" class="aligncenter size-full wp-image-6063" height="776" src="http://www.360magento.com/media/wysiwyg/blog_194/pingdom-website-speed-test-free-results.png" width="1300" /></p>
<p><span>此外，值得注意的是，随着时间的推移，您可以跟踪您的网站性能，因为所有速度测试都将存储在Pingdom库中。</span></p>
<h3><a href="http://pagelocity.com/" rel="nofollow" target="_blank">4. Pagelocity</a></h3>
<p><span>Pagelocity也是当今最流行的免费网站速度测试工具之一。</span></p>
<p><span>与前三种工具不同，Pagelocity不仅提供关于您的页面速度的见解，还提供关于您的页面SEO（源文件大小，文本大小，文本到HTML比率，URL长度）和代码的信息。</span></p>
<p><span>每个测试方面的最高分数是100。</span></p>
<p>另一个有趣的是，资源视图提供了关于哪些资产正在构成总页面权重以进行适当调整的信息。</p>
<p><img alt="pagelocity网站性能测试" class="aligncenter size-full wp-image-6046" height="563" src="http://www.360magento.com/media/wysiwyg/blog_194/pagelocity-website-performance-test.png" width="1300" /><br /><img alt="pagelocity网站性能测试" class="aligncenter size-full wp-image-6047" height="2018" src="http://www.360magento.com/media/wysiwyg/blog_194/pagelocity-website-performance-testing.png" width="1285" /></p>
<h3><span><a href="https://www.dotcom-tools.com/website-speed-test.aspx" rel="nofollow" target="_blank">5. Dotcom工具</a></span></h3>
<p><span><span>下一个有用的免费网站速度测试工具，我们想为您的Magento电子商务网站建议是Dotcom-Tools。</span><span>它能够同时在全球24个不同地点测试网站的性能。</span><span>因此，获得最终结果需要相当长的时间。</span><span>之后，它将显示平均加载时间，页面大小以及来自这些测试位置的错误数量。</span></span></p>
<p><span>此外，您可以选择特定的浏览器进行测试，例如：Chrome，Firefox，Internet Explorer，和选择一个移动浏览器，例如：Android，iOS，Windows Phone，Blackberry等。</span></p>
<p><span>经过快速检查后，您可以通过瀑布分解了解您的网站性能。</span></p>
<p><img alt="dotcom-tools免费查看网站" class="aligncenter size-full wp-image-6062" height="795" src="http://www.360magento.com/media/wysiwyg/blog_194/dotcom-tools-free-check-website.png" width="1300" /></p>
<p><img alt="dotcom-tools免费查看网站结果" class="aligncenter size-full wp-image-6078" height="745" src="http://www.360magento.com/media/wysiwyg/blog_194/dotcom-tools-free-check-website-results.png" width="1300" /></p>
<h3><span><a href="http://yslow.org/" rel="nofollow" target="_blank">6. YSlow</a></span></h3>
<p><span>与此列表中的其他网站速度测试工具不同，YSlow是一款开源工具，可帮助您根据23雅虎的高性能网站规则评估您的网站速度。</span></p>
<p><span>此外，该工具还需要快速安装，作为浏览器的附件。</span></p>
<p><img alt="yslow测试网站速度" class="aligncenter size-full wp-image-6064" height="721" src="http://www.360magento.com/media/wysiwyg/blog_194/yslow-test-website-speed.png" width="1063" /><br /><span>YSlow将在返回结果之前分三步进行操作：</span></p>
<ul>
<li><span>第1步：抓取DOM以查找您网站中的所有组件（例如：image，script)</span></li>
<li><span>步骤2：收集有关这些组件的大小的信息（例如：gzip，过期头文件）YSlow需要</span></li>
<li><span>第3步：为每条规则以及整体规则提供分数。</span></li>
</ul>
<p><span><span>在使用YSlow测试您的网站表现后，您将获得每个区域的特定等级（从A到F得分）。</span><span>从这一点上，很容易知道哪些领域需要您关注并改进您的网站。</span></span></p>
<p><img alt="yslow测试速度结果" class="aligncenter size-full wp-image-6065" height="787" src="http://www.360magento.com/media/wysiwyg/blog_194/yslow-test-speed-results.png" width="689" /></p>
<h3><span><a href="https://loadimpact.com/" rel="nofollow" target="_blank">7.</a></span><a href="https://loadimpact.com/" rel="nofollow" target="_blank">Load Impact</a></h3>
<h3></h3>
<p><span><span>Load Impact是另一款测试网站速度的免费工具。</span><span>特别的是，该工具将同时从10个检查点生成负载，并且您甚至可以根据要求添加更多区域。</span></span></p>
<p><img alt="负载影响测试网站速度" class="aligncenter size-full wp-image-6048" height="474" src="http://www.360magento.com/media/wysiwyg/blog_194/load-impact-testing-website-speed.png" width="1300" /></p>
<p><span>处理完成后，Load Impact将显示一个信息图，显示当有更多用户访问您的Magento电子商务网站时，您的加载时间的波动。</span></p>
<p><span>为了确保您的测试网站能够满足全球客户的需求，该工具将虚拟用户从多个地点发送到您的网站。</span></p>
<p><span>更重要的是，Load Impact根据带宽使用量，请求数量和每秒请求数量显示了令人惊叹的统计数据。</span><br /><img alt="负载影响测试网站速度结果" class="aligncenter size-full wp-image-6052" height="813" src="http://www.360magento.com/media/wysiwyg/blog_194/load-impact-testing-website-speed-results.png" width="1300" /></p>
<p><span>此外，<span>Load Impact&nbsp;</span>为您提供5个免费网站性能测试和每月报告。</span></p>
<h3><span><a href="https://www.uptrends.com/tools/website-speed-test" rel="nofollow" target="_blank">8.</a></span><a href="https://www.uptrends.com/tools/website-speed-test" rel="nofollow" target="_blank">Uptrends</a></h3>
<h3></h3>
<p><span>Uptrends是您的Magento电子商务网站的另一个便捷的免费网站速度测试，使您能够在全球35个地点进行测试 - 旨在确保您的网站能够快速加载来自世界各地的速度。</span></p>
<p><span><span>就分析而言，Uptrends在瀑布或域中呈现丰富多彩的结果。</span><span>因此，您可以诊断您网站的麻烦问题并快速处理。</span></span></p>
<p><img alt="上升趋势免费网站测试工具" class="aligncenter size-full wp-image-6056" height="544" src="http://www.360magento.com/media/wysiwyg/blog_194/uptrends-free-website-testing-tool.png" width="1300" /></p>
<p><img alt="上升趋势免费网站测试工具结果" class="aligncenter size-full wp-image-6057" height="767" src="http://www.360magento.com/media/wysiwyg/blog_194/uptrends-free-website-testing-tool-results.png" width="1300" /></p>
<h3><span><a href="https://tools.geekflare.com/" rel="nofollow" target="_blank">9.</a></span><a href="https://tools.geekflare.com/" rel="nofollow" target="_blank">Geek Flare</a></h3>
<h3></h3>
<p><span>与以前的一些网站速度测试工具一样，Geek Flare可以让您从一系列不同地点的Magento电子商务网站的性能中立即查看，无论使用哪种设备。</span></p>
<p><span>点击测试按钮后，您将获得第一个字节的时间（TTFB），满载时间，页面大小，请求数量，按类型的请求计数，响应代码和域等的结果。</span></p>
<p><img alt="怪胎flare免费检查网站性能" class="aligncenter size-full wp-image-6069" height="607" src="http://www.360magento.com/media/wysiwyg/blog_194/geek-flare-free-check-website-performance.png" width="1300" /><img alt="怪胎耀斑免费检查网站的性能结果" class="aligncenter size-full wp-image-6070" height="624" src="http://www.360magento.com/media/wysiwyg/blog_194/geek-flare-free-check-website-performance-result.png" width="1300" /></p>
<h3><span><a href="http://yellowlab.tools/" rel="nofollow" target="_blank">10.</a></span><a href="http://yellowlab.tools/" rel="nofollow" target="_blank">Yellow Lab Tools</a></h3>
<h3></h3>
<p><span>与列表中的其他工具相比，Yellow Lab Tools似乎对某些人来说很陌生，但对于网站性能评估来说，它确实是一个不错的选择。</span></p>
<p><span>更具体地说，该工具提供了大量有用的信息和一些独特的功能，例如在页面加载和其他代码验证问题期间查看JavaScript与DOM的交互。</span></p>
<p><span>JavaScript时间轴将向您展示DOM在页面加载时如何精确交互。</span></p>
<p><img alt="黄色实验室工具网站速度" class="aligncenter size-full wp-image-6042" height="586" src="http://www.360magento.com/media/wysiwyg/blog_194/yellow-lab-tools-website-speed.png" width="1300" /></p>
<p><img alt="黄色实验室工具网站速度测试" class="aligncenter size-full wp-image-6043" height="857" src="http://www.360magento.com/media/wysiwyg/blog_194/yellow-lab-tools-website-speed-test.png" width="1300" /></p>]]></description>
      <pubDate>Sun, 03 Jun 2018 13:52:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[50种方法立即提升您的Magento网站性能]]></title>
      <link>https://www.360magento.com/blog/improve-magento-website-performance/</link>
      <description><![CDATA[<p><a href="http://www.360magento.com/blog/improve-magento-website-performance/" title="Magento网站性能提升">Magento网站的性能</a><span><span>对于每个电子商务企业的成功都至关重要。</span><span>如果您的当前网站未进行优化，您的客户很有可能会在网站加载时离开。</span><span>提高网站性能意味着您正在为访问者创造更好的购物体验，因此我们来执行以下方法：</span></span></p>
<h2><span>MAGENTO网站性能增强 - 快速配置</span></h2>
<p><span>1.启用cron和日志清理</span></p>
<p><span>2.启用</span><em>Use Flat Catalog Category和 Use&nbsp;</em><em>Flat Calalog Product</em><span><br /></span></p>
<p><span>3.打开Magento的内置缓存</span></p>
<p><span>4.启用</span><em>合并Javascript文件&nbsp;</em><span>并</span><em>合并CSS文件</em><span>以减少HTTP请求的数量</span></p>
<p><span>5.卸载你不需要的所有扩展</span></p>
<p><span>6.为类别和产品使用规范链接Meta标签</span></p>
<p><span>7.产品URL不要使用类别路径</span></p>
<p><span>8.删除类别URL后缀中的.html</span></p>
<p><span>9.限制类别页面上的产品数量</span></p>
<h2><span>MAGENTO网站性能增强 - 应用程序级别修复</span></h2>
<p><span>推迟解析Javascript</span></p>
<p><span>11.避免AlphaImageLoader过滤器</span></p>
<p><span>12.避免URL重定向</span></p>
<p><span>13.使用外部Javascript和CSS</span></p>
<p><span>14.避免使用CSS表达式</span></p>
<p><span>15.减少DOM元素的数量</span></p>
<p><span>16.利用浏览器缓存</span></p>
<p><span>17.删除重复的Javascript和CSS</span></p>
<p><span>18.缩小Javascript和CSS</span></p>
<p><span>19.启用gzip压缩组件</span></p>
<p><span>20.将CSS放在文档头部的顶部</span></p>
<p><span>21.使用CSS精灵组合图像</span></p>
<p><span>22.优化图像</span></p>
<p><span>23.优化样式和脚本的顺序</span></p>
<p><span>24.避免不好的请求</span></p>
<p><span>25.摆脱静态资源中的查询字符串</span></p>
<p><span>26.避免使用CSS @import</span></p>
<p><span>27.指定</span><em>Vary：Accept-Encoding</em><span>标头</span></p>
<p><span>28.从一致的URL提供资源</span></p>
<p><span>29.指定一个缓存验证器</span></p>
<p><span>30.避免在元标记中设置字符</span></p>
<p><span>31.使Ajax可缓存</span></p>
<p><span>32.倾向于异步资源</span></p>
<p><span>33.把Javascript放在底部</span></p>
<p><span>34.使用内容分发网络（CDN）</span></p>
<p><span>35.减少DNS查找</span></p>
<p><span>36.避免HTTP 404 - 未找到错误</span></p>
<p><span>37.启用gzip压缩</span></p>
<p><span>38.使favicon小而且可缓存</span></p>
<p><span>39.减小cookie的大小</span></p>
<h2><span>MAGENTO网站性能增强 - 配置级别修复</span></h2>
<p><span>40.优化cookie的大小</span></p>
<p><span>41.禁用Magento日志</span></p>
<p><span>42.清理Magento数据库日志</span></p>
<p><span>43.为产品设置唯一的名称</span></p>
<h2><span>MAGENTO网站性能增强 - 服务器级别修复</span></h2>
<p><span>44.使用<span>Varnish</span>缓存</span></p>
<p><span>45.使用Redis</span></p>
<p><span>46.使用专用服务器</span></p>
<p><span>47.使用最新的PHP版本</span></p>
<p><span>48.使用高性能SSD驱动</span></p>
<p><span>49.使用RAM 2GB以上，加上双核CPU</span></p>
<p><span>50.使用单独的Web和数据库服务器</span></p>
<p><span>正如你所看到的，为了保持和增强</span><a href="http://www.360magento.com/" rel="noopener noreferrer" title="Magento网站性能提升">Magento网站的性能</a><span><span>，我们必须做很多事情</span><span>。</span><span>因此，如果您没有足够的时间或技术技能，最好找一个可靠的Magento服务商来提供帮助。</span><span>凭借6年以上的Magento经验，</span></span><span>360Magento电子商务解决方案</span><span>可以帮助您在最短的时间内以合理的价格优化您的Magento网站性能。</span><em><span><a href="https://www.tigren.com/our-services/magento-performance-optimization/" rel="noopener noreferrer" target="_blank"><br /></a></span></em></p>]]></description>
      <pubDate>Mon, 28 May 2018 02:38:15 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Adobe将收购Magento]]></title>
      <link>https://www.360magento.com/blog/adobe-to-acquire-magento/</link>
      <description><![CDATA[<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;"><img alt="Adobe将收购magento" src="http://www.360magento.com/media/wysiwyg/adobe-magento_blog.jpg" title="Adobe将收购magento" /></p>
<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;">据美国财经网站MarketWatch报道，Adobe（NASDAQ:ADBE）周一宣布，该公司将以16.8亿美元的价格收购电商公司Magento Commerce，从而为该公司旗下平台补充一个至关重要的组成部分。</p>
<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;">这项并购交易意味着，Adobe将与客户关系管理（CRM）软件服务提供商Salesforce.com（NSYE:CRM）等公司展开一场&ldquo;肉搏战&rdquo;。Adobe的数字体验执行副总裁布莱德&middot;兰切尔（Brad Rencher）在周一召开的一次电话会议上说道，根据市场研究公司作出的估测，该交易代表着一个130亿美元左右的营收机会。</p>
<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;">在此之前，Magento就已经是Adobe的合作伙伴，该公司在2015年被收购，当时包括Permira、Sterling Partners、Longview Asset Management和Innotrac Corp.在内的一个投资者团体以9.25亿美元的价格从电商公司eBay（NASDAQ:EBAY）手中收购了Magento。同年11月份，Permira获得了Magento的全部股权。</p>
<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;">Magento的客户包括佳能和Rosetta Stone（NYSE:RST）等，另外还有与Adobe重叠的一些客户，如可口可乐（NYSE:KO）和雀巢等。据Permira称，Magento的总商品额（GMV）高达1500亿美元以上。</p>
<p class="text" style="margin: 0px 0px 28px; padding: 0px; word-wrap: break-word; color: #000000; font-family: 'Microsoft Yahei', Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; text-indent: 2em;">根据交易协议，这项并购交易将在第三季度中完成。Adobe称，在交易完成之后，Magento首席执行官马克&middot;拉维尔（Mark Lavelle）将继续领导该公司的大约700名员工，届时Magento将会成为Adobe旗下数字体验业务的一部分。</p>]]></description>
      <pubDate>Wed, 23 May 2018 07:55:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在30天内将Magento 1迁移到Magento 2 ?]]></title>
      <link>https://www.360magento.com/blog/migrate-magento-1-to-magento-2/</link>
      <description><![CDATA[<p><span>毫无疑问，将Magento 1迁移到Magento 2有很多原因，特别是当Magento发布了最新的惊人版本</span>--Magento 2.2.4时<span><span>。</span><span>与Magento 1相比，Magento 2绝对能够带来更好的设计和性能。</span></span></p>
<p><span><span>如果我们回到几年前，由于其不稳定性，很多人都不敢升级到Magento 2。</span><span>Magento 2的第一个版本中有很多bug。但现在，当Magento似乎将所有努力都用于创新，改进和增强Magento 2功能时，情况就不同了。</span></span></p>
<p><span>此外，您应该考虑尽快从Magento 1迁移到Magento 2，因为Magento可能会在不久的将来停止对Magento 1提供支持。</span><span><span><br /></span></span></p>
<p><span><span>除此之外，Magento 2迁移是一个复杂的过程，需要您的时间，金钱和努力。</span><span>对于Magento开发者，他们可能知道它有多复杂;&nbsp;</span><span>因此这篇博客文章并非针对他们，而是Magento店主，他们将把Magento 1迁移到Magento 2.换言之，在今天发布的文章中，我们将向Magento商人展示如何在最佳的时间段内平稳，循序渐进地进行Magento迁移。</span></span></p>
<h2><span>Magento 2迁移前要知道的重要事项</span></h2>
<p><img alt="Magento1迁移到Magento2" height="628" src="http://www.360magento.com/media/wysiwyg/magento-2-migration.png" title="Magento1迁移到Magento2" width="1216" /><br /><span>许多人认为将Magento 1迁移到Magento 2的过程</span><em>与</em><span><span>更新到最新版本的Magento 1&nbsp;</span><em><span>相似</span></em><span>。</span></span></p>
<p><span>但是，这是完全</span><em>错误的</em><span>！</span></p>
<p><span>更具体地说，Magento迁移意味着您将不得不从头开始构建Magento 2上的新网站，仅是从旧网站迁移数据。</span></p>
<p><span><span>您无法继续使用当前的Magento 1主题，扩展和代码。</span><span>我们将在下一部分详细介绍。</span><span>现在，让我们深入Magento 2迁移过程！</span></span></p>
<h2><span>30天将MAGENTO 2移植到MAGENTO 1 ...</span></h2>
<p><span><span>根据我们的经验，平均完成Magento迁移过程需要4-5周（大约30个工作日）。</span><span>但是，如果您的站点需要大量自定义功能和主题自定义以及大量数据迁移，则升级时间会更长。</span><span>我们来看看迁移中会涉及什么：</span></span></p>
<p><a href="#preparation"><span>7天：查看旧网站并准备即将进行的迁移&lt;准备&gt;</span></a></p>
<p><a href="#theme"><span>5天：主题迁移</span></a></p>
<p><a href="#data"><span>5天：数据迁移</span></a></p>
<p><a href="#extension"><span>3天：扩展迁移</span></a></p>
<p><a href="#code"><span>5天：自定义代码</span></a></p>
<p><a href="#configuration"><span>2天：设置并配置新站点&lt;配置&gt;</span></a></p>
<p><a href="#testing"><span><span><span>3天：测试，修复错误并上线！</span><span>&lt;测试&gt;</span></span></span></a></p>
<div id="preparation">
<h3><span>1.准备</span></h3>
</div>
<p><img alt="准备magento 2迁移" height="768" src="http://www.360magento.com/media/wysiwyg/prepare-for-magento-2-migration.png" width="1024" /></p>
<p><span><span>在开始Magento迁移过程之前，请查看现有的Magento 1商店，并确定哪些是您真正需要的，并且需要迁移到新的网站。</span><span>例如，尽管您的网站可能包含巨大的数据库资产，但您需要迁移的内容仅包括产品，类别，客户和订单。</span><span>此外，就扩展而言，只需保留您认为必要的内容并删除冗余内容即可。</span></span></p>
<p><span>之后，强烈建议您为Magento 1网站进行彻底备份，保留所有文件，文件夹和数据库以处理不良情况。</span></p>
<p><span>此外，我们建议您为Magento 1和2商店使用相同的托管服务器（可选）。</span></p>
<div id="theme">
<h3><span>2.主题迁移</span></h3>
</div>
<p><img alt="magento 2主题迁移" height="768" src="http://www.360magento.com/media/wysiwyg/magento-2-theme-migration.png" width="1024" /></p>
<p><span><span>正如我们之前提到的，将主题和模板从Magento 1移至Magento 2新网站是不可能的。</span><span>有几个解决方案：</span></span></p>
<ul>
<li><span>第一种解决方案：</span><span><span>为Magento 2购买现成的主题以应用到您的新网站。在Magento市场,Themeforest,Magego等知名主题市场</span><span>有数百种有吸引力的设计可供您进行选择......</span></span></li>
</ul>
<p><span><span>优点：您将为您的新网站设计有很多选择，节省您的主题设计和编码时间，并显著节省您的预算。</span><span>它仅花费你从100-200美元就可以得到一个精心设计的Magento 2响应主题。</span></span></p>
<p><span><span>缺点：其他Magento电子商务商店也可以购买主题，并且与您的店面外观相同。</span><span>要处理此问题，您可以自定义主题以匹配您的品牌形象。</span><span>主题定制的成本很大程度上取决于您想要定制的程度以及您与哪个Magento开发人员/设计师合作。</span></span></p>
<ul>
<li><span>第二种解决方案：</span><span><span>查找并使用免费下载的Magento 2主题。Google搜索Magento 2 free theme可以找到很多结果。</span><span><br /></span></span></li>
</ul>
<p><span>优点：此解决方案的明显优势是您无需花费一分钱就可以得到一个新颖的外观。</span></p>
<p><span><span>缺点：与第一种解决方案相比，选择的Magento主题数量只有十分之一甚至更少。</span><span>此外，这些免费主题和模板的质量不能保证。</span><span>他们的大部分功能都非常有限。</span><span>因此，您在应用到新网站之前应仔细检查。</span></span></p>
<ul>
<li><span>第三种解决方案：</span><span><span>从头开始创建一个新的网站设计。</span><span>对于这个选项，你可以找一个Magento开发商，或者只是一个有Magento经验的网站设计师根据你的需求进行设计。</span></span></li>
</ul>
<p><span>优点：获得满足您所有需求和要求的独特网站设计。</span></p>
<p><span><span>缺点：您必须投入大量资金才能部署此解决方案。</span><span>此外，完成PSD和前端编程设计可能需要1-2个月的时间。</span></span></p>
<ul>
<li><span>第四种解决方案：</span><span><span>克隆你的Magento 1商店。</span><span>如果你仍然想保持原有商店设计，你可以考虑克隆它，为你的Magento 2商店创造相同的外观界面。</span></span></li>
</ul>
<p><span>优点：保持所有购物者当前熟悉的Magento网站设计。</span></p>
<p><span><span>缺点：网站克隆的时间取决于当前设计的复杂程度。</span><span>但是，克隆一个网站，一般来说，也将花费大量的时间（平均至少1个月）。</span><span><br /></span></span></p>
<ul>
<li><span>第5种解决方案：</span><span>克隆您感兴趣的任何网站，并为您的新Magento 2网站创建类似的界面外观。</span></li>
</ul>
<p><span>优点：创建一个与您最喜欢的类似的新Magento 2网站设计，并为您的买家带来新鲜感。</span></p>
<p><span>缺点：像第四种解决方案一样，这种方法会花费您的时间和成本。</span></p>
<h4><span>Magento主题迁移的最佳解决方案是什么？</span></h4>
<p><span><span>尽管为您解决Magento主题迁移问题引入了许多解决方案，但我们强烈推荐第一种解决方案。</span><span>总的来说，利用现成的Magento 2主题将花费最少的时间（寻找适当的主题），金钱（拥有主题）和努力（用于安装和定制它）。</span><span>我们的大部分中小型客户现在都选择此方案。</span></span></p>
<p><span>此外，在新的Magento 2网站上部署主题的总时间（包括安装，配置和次要定制）平均为4-5天。</span></p>
<div id="data">
<h3><span>3.数据迁移</span></h3>
</div>
<p><img alt="magento数据迁移" height="768" src="http://www.360magento.com/media/wysiwyg/magento-data-migration.png" width="1024" /><span><span>Magento数据迁移是将您的所有数据（包括产品，类别，客户，订单，推荐信，评论......）传输到新的Magento 2站点的过程。</span><span>诚然，这是Magento 2升级过程中最关键的阶段，要求您具备强大的知识和经验来进行迁移。</span><span>否则，一个小错误可能会导致严重的数据丢失而无法恢复。</span></span></p>
<p><span><span>要将您的数据库资产从Magento 1移至Magento 2，我们可以使用</span><span>由Magento提供</span><span>的便捷的</span></span><span><a href="https://devdocs.magento.com/guides/v2.2/migration/migration-tool.html" title="Magento2数据迁移工具" target="_blank">Magento 2数据迁移工具</a></span><span><span>。</span><span>该工具将使用map文件将数据转换到您的Magento 2商店。</span><span>更具体地说，它将验证您的Magento 1和2数据库结构之间的一致性，跟踪数据传输进度，创建日志，然后运行数据验证测试。</span></span></p>
<p><img alt="magento 2数据迁移工具" height="742" src="http://www.360magento.com/media/wysiwyg/magento-2-data-migration-tool.png" width="1264" /><br /><span><span>要执行数据迁移，首先您必须通过composer安装数据迁移工具。</span><span>请记住下载适用于您的Magento 2版本的正确版本的工具。</span><span>例如，如果您在</span></span>Magento 2.2.4<span><span>上构建新网站</span><span>，则必须安装具有相同版本（2.2.4）的数据迁移工具。</span><span>其次，您需要将配置设置从M1迁移到M2，包括商店，网站，系统配置（运输，付款，税收）等。</span><span>第三，是时候迁移数据库中的主要数据了。</span></span></p>
<p><span>除此之外，根据您的产品，订单和客户的现有数量，需要3到5天才能将数据从Magento 1迁移到Magento 2。</span></p>
<div id="extension">
<h3><span>4.扩展迁移</span></h3>
</div>
<p><img alt="magento扩展迁移" height="768" src="http://www.360magento.com/media/wysiwyg/magento-extension-migration.png" width="1024" /><br /><span><span>与主题一样，您不再可以在Magento 2商店中使用Magento 1扩展列表。</span><span>你需要做的是找到提供相同功能Magento 2版本的模块和插件迁移到新站点。</span><span>但是，并非所有Magento 1的扩展都有针对Magento 2开发的。在这种情况下，您可以联系多个Magento扩展提供商，要求他们为您的商店开发自定义模块。</span></span></p>
<p><span>对于某些扩展，我们还需要从M2中迁移M1的数据，例如奖励积分和商店积分。</span></p>
<p><span>平均而言，每个插件迁移需要3-4个小时，包括安装，配置和可能的冲突解决。</span></p>
<p><span>因此，我们建议您选择并&ldquo;迁移&rdquo;到新网站的必要Magento扩展程序，以节省您的时间，金钱和精力。</span></p>
<div id="code">
<h3><span>5.自定义代码（自定义）</span></h3>
</div>
<p><img alt="magento迁移中的自定义代码" height="768" src="http://www.360magento.com/media/wysiwyg/custom-code-in-magento-migration.png" width="1024" /><span><span>幸运的是，大多数Magento 1自定义代码与Magento 2兼容，因此您可以使用多个Magento代码迁移工具重写或迁移代码。</span><span>我们经常使用</span><span>Magento&nbsp;</span><span>的</span></span><a href="https://github.com/magento/code-migration">Code Migration Toolkit</a><span>，使事情变得更简单。</span></p>
<p><span>此外，值得注意的是，M1和M2的结构有几点不同，您需要仔细检查代码以确保它在新店中运行良好。</span></p>
<div id="configuration">
<h3><span>6.配置</span></h3>
</div>
<p><img alt="从magento 1迁移到magento 2进程" height="768" src="http://www.360magento.com/media/wysiwyg/migrate-from-magento-1-to-magento-2-process.png" width="1024" /><br /><span><span>在主题，数据和扩展迁移之后，您已经完成了Magento 2迁移过程的80％。</span><span>现在，您必须在新的Magento 2网站上完成配置，包括语言，货币，税收，电子邮件模板设置等。</span></span></p>
<p><span><span>此外，搜索引擎优化在以后提高网站访问量方面起着重要作用。</span><span>在Magento 2中，它允许您创建适合搜索引擎优化的URL，编辑元标题/描述/标签/关键字，添加图像替代，控制网站索引以及与Google服务（Analytics / Search Console / Adwords）集成。</span><span>因此，不要忘记利用所有这些有价值的功能。</span></span></p>
<div id="testing">
<h3><span>7.测试</span></h3>
</div>
<p><img alt="magento 2迁移和升级" height="768" src="http://www.360magento.com/media/wysiwyg/magento-2-migration-and-upgrade.png" width="1024" /><br /><span><span>Magento迁移过程的最后一个基本阶段是测试。</span><span>您必须彻底检查并测试整个网站，确保所有内容都按照原站运行。</span><span>以下是在Magento升级后测试商店时使用的建议清单：</span></span><br /><span style="text-decoration: underline;"></span></p>
<h4><span>前端测试：</span></h4>
<p><span>店面外观</span></p>
<ul>
<li><span>主页</span></li>
<li><span>CMS页面</span></li>
<li><span>页面内容</span></li>
<li><span>横幅滑块</span></li>
<li><span>页眉和页脚链接</span></li>
</ul>
<p><span>产品列表</span></p>
<ul>
<li><span>类别和子类别</span></li>
<li><span>产品网格/列表模式</span></li>
<li><span>分层导航菜单</span></li>
<li><span>产品分类</span></li>
<li><span>产品添加到购物车</span></li>
<li><span>面包屑</span></li>
<li><span>产品页面</span></li>
</ul>
<p><span>产品页面</span></p>
<ul>
<li><span>产品加入购物车/愿望清单/比较清单</span></li>
<li><span>产品图片和视频</span></li>
<li><span>产品数量</span></li>
<li><span>产品价格</span></li>
<li><span>产品描述</span></li>
<li><span>产品评分和评论</span></li>
</ul>
<p><span>购物车</span></p>
<ul>
<li><span>产品添加到购物车</span></li>
<li><span>数量变化</span></li>
<li><span>产品删除</span></li>
<li><span>折扣应用</span></li>
<li><span>运费和税务计算</span></li>
<li><span>小计和总价</span></li>
</ul>
<p><span>结帐页面</span></p>
<ul>
<li><span>来宾结帐</span></li>
<li><span>帐单和运输</span></li>
<li><span>运输和付款方式</span></li>
</ul>
<p><span>客户账户和信息</span></p>
<ul>
<li><span>客户登录和注册</span></li>
<li><span>忘记密码</span></li>
<li><span>客户帐户页面</span></li>
</ul>
<p><span>电子邮件</span></p>
<ul>
<li><span>注册确认</span></li>
<li><span>重设密码</span></li>
<li><span>订单确认</span></li>
<li><span>联系我们提交</span></li>
<li><span>通讯订阅</span></li>
</ul>
<p>&nbsp;</p>
<h4><span>后端测试：</span></h4>
<p><span>产品目录</span></p>
<ul>
<li><span>产品配置</span></li>
<li><span>类别配置</span></li>
<li><span>属性管理</span></li>
<li><span>评论管理</span></li>
<li><span>Sitemap生成</span></li>
</ul>
<p><span>销售</span></p>
<ul>
<li><span>订单创建</span></li>
<li><span>发票提交</span></li>
<li><span>装运提交</span></li>
<li><span>贷项凭证创建</span></li>
</ul>
<p><span>顾客</span></p>
<ul>
<li><span>用户管理</span></li>
<li><span>客户群体创建</span></li>
</ul>
<p><span>促销</span></p>
<ul>
<li><span>目录价格规则</span></li>
<li><span>购物车价格规则</span></li>
</ul>
<p>&nbsp;</p>
<h2><span>将MAGENTO 1迁移到MAGENTO 2的成本如何？</span></h2>
<p><img alt="magento 1到magento 2的迁移成本" height="768" src="http://www.360magento.com/media/wysiwyg/magento-1-to-magento-2-migration-cost.png" width="1024" /><br /><span><span>Magento 1到Magento 2的迁移成本可能很高，但它值得。</span><span>根据您预期网站的复杂程度，价格可能会或高或低。</span><span>例如，就Magento主题迁移而言，尤其是，您必须花费100-200美元购买现成的主题，或者高达1,000-2,000美元购买独特的设计或克隆旧网站。</span><span>此外，您希望迁移的扩展程序越多，您必须支付的金额也越多。</span></span></p>
<p>如果您不是自己将Magento 1迁移到Magento 2，而是请<a href="http://www.360magento.com/" title="Magento开发服务商" target="_blank">Magento服务商</a>提供的Magento迁移服务，那么您的项目成本也将大大取决于Magento开发者的工时费。例如，美国以及沿海城市的Magento开发公司每个工作小时会收取75-150美元的费用，但您如果选择内的<a href="http://www.360magento.com/" title="Magento开发公司" target="_blank">Magento公司</a>只要一半甚至更少的费用（每工作小时20-50美元）。这个巨大的价格差距仅仅是由于地区劳动力成本的巨大差异。</p>
<h3>360Magento的Magento迁移服务</h3>
<p><span><span>凭借6年以上的Magento开发经验，我们能够以非常合理的价格提供流畅高质量的迁移过程。</span><span>现在就</span></span><a href="http://www.360magento.com/contacts/">联系我们</a><span>，获取Magento 2迁移项目的免费快速报价和咨询！</span><br /><img alt="magento迁移" height="1025" src="http://www.360magento.com/media/wysiwyg/magento-migration.jpg" width="1920" /></p>
<h2><span>总结</span></h2>
<p><span><span>从现在发生的情况来看，Magento 2是&ldquo;现在&rdquo;和&ldquo;未来&rdquo;，而Magento 1已经过时并且远远落后。</span><span>如果您想为您的网站做到最好，请考虑立即实施Magento 2迁移。</span><span>大多数竞争对手可能已经将他们的网站升级到Magento 2。</span></span></p>]]></description>
      <pubDate>Tue, 15 May 2018 11:03:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[选择专业Magento开发者/开发公司的10条准则]]></title>
      <link>https://www.360magento.com/blog/find-magento-develpoer/</link>
      <description><![CDATA[<p>Magento于2008年3月31日发布，已成为全球领先的电子商务平台。 因此，越来越多的电子商务公司需要Magento开发人员来开发新网站或支持其现有网站。</p>
<p>虽然有大量的Magento开发商和Magento开发人员可供选择，但是要找到在Magento开发方面拥有丰富的专业知识和经验，并且提供合理价格的合适合作伙伴还是很难的。</p>
<p><img alt="magento开发公司" src="http://www.360magento.com/media/wysiwyg/bdmg.png" title="magento开发公司" /></p>
<p>假设你要为你的项目寻找Magento开发人员/开发公司，你会怎么做？ 你会在在Google或百度上搜索并从几万个结果中选择一个可靠的结果吗？</p>
<p>事实上，60-70％的公司会这样。 这并非不是一种好的方法，但如果你没有你想要的Magento程序员的选择特定标准，太多的选择最后可能会感到困惑。 因此，为了让事情变得简单，我们为您提供高效率寻找高质量Magento开发人员和开发商的10条基本准则。我们愉快的阅读下面的内容吧。</p>
<h2>1.明确你的需求和Magento开发人员必须需具备的能力。</h2>
<p>首先，你在寻找Magento开发人员和开发服务商之前一定要非常的清楚自己想要什么。关於这点，不妨来自问几个问题：</p>
<p>你是需要这个Magento开发者来帮助你修复一个严重的bug或者处理一些持续存在的严重问题？</p>
<p>您是否想要Magento开发人员开发自定义功能/从头开始构建网站/将网站迁移到Magento 2 /继续未完成的项目？</p>
<p>你需要得到不断的支持，或者只是在紧急情况下才需要？</p>
<p>你期望你的任务/项目多久完成？</p>
<p>你更喜欢与Magento开发者自由职业者还是Magento开发商合作？</p>
<p>您的预算是多少？</p>
<p><img alt="聘请magento开发人员" src="https://www.tigren.com/wp-content/uploads/2018/04/hire-magento-developers-1.jpg" /></p>
<p>当您回答完完上述的问题，寻找合适的Magento开发人员这件事你已经做好了一半。</p>
<p>例如，如果您需要获得帮助来解决网站中的几个主要但不是紧急的错误，您可以与一些Magento自由职业者开发人员合作。 相反，如果您的网站有一些需要尽快解决的关键问题，我们强烈建议您找Magento开发公司获取专业的Magento支持服务。</p>
<p>另外，如果您需要得到持续不断的支持以确保您网站的高性能，建议您与知名的具有完善Magento解决方案的开发公司合作。</p>
<p>此外，根据您的项目大小，您需要考虑是聘请专门的Magento开发人员还是整个Magento开发团队。 原因在于，从头开发新的Magento网站等大型项目工作量大，通常需要多位Magento程序员，您应该考虑雇用一个团队来保证您的项目质量并提高开发效率节约时间成本。</p>
<p>决定谁能成你的合作对象的另一个因素是你的预算。 如，若钱对您来说不是大问题，您可以自由选择任何Magento开发人员或 Magento开发公司来合作。 但如果您的预算是中等偏低，您应该与内陆Magento开发公司合作（例如：武汉，成都，南京等）而非沿海城市的Magento电子商务公司。 通过这种方式，您可以在高质量完成工作的同时节省预算。</p>
<p>&nbsp;</p>
<h2>2.检验Magento开发人员的专业知识和经验</h2>
<p>在明确定义您的期望之后，您现在可以开始在百度或其他搜索引擎上进行搜索，并参照我们的建议标准来寻找专业的Magento开发人员。</p>
<p>总的来说，当你想聘请Magento程序员时，专业和经验似乎是最基本的考量因素。</p>
<p>无论聘用Magento开发人员还是Magento开发公司，您都要选择至少拥有2年以上Magento经验的人一起完成你的项目。凭借一系列高级功能和大规模定制，Magento为其开发人员创造了真正的挑战，特别是初学者。</p>
<p><img alt="magento开发商招聘" src="https://www.tigren.com/wp-content/uploads/2018/04/magento-developers-for-hire.jpg" /></p>
<p>那么，如何检查Magento开发者的经验？ 这很简单。</p>
<p>首先，直接询问他们。 他们从事Magento开发多久了，期间参与了多少个Magento开发项目，他们不得不面对的最严峻的Magento开发问题以及他们的解决方案。</p>
<p>其次，请他们给您的项目提建议。 Magento专业开发公司将能够根据他们的经验为您提供合理的建议。 例如，当你想开发一个复杂的功能时，一个有经验的Magento程序员可以帮助你分析这个功能的哪些部分是Magento默认的，哪些部分需要定制，然后给你一个最佳的解决方案。</p>
<p>此外，当选择Magento开发人员进行大型项目时，建议您了解他们使用版本控制工具的经验。 一般Magento专业开发公司在使用某些版本控制系统（如GIT,SVN）方面拥有丰富的经验。</p>
<p>&nbsp;</p>
<h2>3.检查Magento开发人员的开发案例</h2>
<p>说的多不如做得好，因此不要只听他们说了什么，更要看他们之前做的案例！</p>
<p><img alt="magento网站设计" src="https://www.tigren.com/wp-content/uploads/2018/04/magento-website-design-1.png" /></p>
<p>通过看他们以前的案例，检查他们开发的Magento网站，能评估他们是否能够满足您的要求。可以从前端设计和功能效果两方面入手，我们在同行网站中发现由他们大多数Magento开发项目都使用现成的主题和模板，因此您不需要过多地检查设计，而是专注于功能效果。 例如，您可以查看他们帮客户做了哪些额外功能，网站的速度，结账过程等。</p>
<p>对于Magento网站开发公司，他们经常在自己的网站上展示他们的案例，以便您快速了解。</p>
<p>&nbsp;</p>
<h2>4.找到真实的见证和反馈</h2>
<p>我们想要建议您的下一步是询问您想聘请的Magento开发人员/开发公司的以前客户的真实反馈。 有时候，一个好的案例不能告诉你整个故事。 例如，虽然最终的网站设计是完美的，但程序却无法按时交付。</p>
<p><img alt="magento电子商务审查" src="https://www.tigren.com/wp-content/uploads/2018/04/magento-ecommerce-review-1.jpg" /></p>
<p>&nbsp;要获得以前客户的联系人，您可以直接询问Magento程序员或访问案例上的网站以获取信息。 之后，您可以通过电子邮件或致电这些客户咨询用后的体验从中获得参考。 以下是您可以询问过去客户的一些有效问题：</p>
<p>他们聘请Magento开发人员/公司的项目/服务是什么？</p>
<p>他们为什么选择这个开发商？</p>
<p>项目管理如何安排的，效果如何？</p>
<p>他们觉得这项服务最令人印象深刻/令人失望的是什么？</p>
<p>开发人员是否按时按预算交付了您的项目？ 是否会产生额外费用？</p>
<p>他们有哪些地方可以改进？</p>
<p>确保您聘用的Magento开发公司为其前客户提供高质量的工作，这对聘用者来说是至关重要的。</p>
<p>&nbsp;</p>
<h2>5.询问后期开发支持和维护</h2>
<p align="left">提供项目后的支持和维护至关重要，尤其是当您聘请Magento开发人员开发大型Magento电子商务网站时。&nbsp;例如，在用户验收测试（UAT）之后，您无法找到开发站点中的所有错误，但这些错误发生在站点上线后。&nbsp;在这种情况下，最好与最初的开发人员一起找出原因并解决问题，而不是找到另一位程序员。<br /> <br /> 在360Magento，我们在客户网站上线后（Magento网站开发项目）提供3个月免费支持，以帮助他们避免及时解决任何可能的问题。&nbsp;因此，我们始终能得到我们所有客户的100％满意。&nbsp;经过3个月的免费支持，如果客户希望得到我们的进一步帮助，他们可以考虑使用我们的Magento年度支持服务。</p>
<p align="left">&nbsp;</p>
<h2>6.在寻找Magento开发者之前策划出项目的开发过程</h2>
<p align="left">您可能知道，Magento项目中应用的开发流程和方法将决定它是否成功。 有很多东西可以使Magento开发过程成为可能，但这里有一些您需要关注的主要问题。</p>
<p align="left">首先，Magento开发公司必须为您提供一个详细的开发计划。 在这个计划中，它必须清楚地告诉你他们将在你的网站上做些什么，分成几个主要任务和多个子任务（次要任务）。 此外，每项任务必须有具体的完成时间。 例如，在360Magento，我们经常为每个项目制定详细的时间安排和时间表，包括一些特定的阶段，例如规划/准备，网站设计和网站开发（产品，客户帐户，管理员配置，发货， 付款，搜索引擎优化，数据集成，扩展实现，...），测试和UAT，以及启动。</p>
<p align="left"><img alt="magento开发过程" src="https://www.tigren.com/wp-content/uploads/2018/04/magento-development-process.png" /></p>
<p align="left">此外，大多数开发人员将在他们的开发服务器上部署您的网站，并且只有在您满意产品时才将网站移动到您的服务器。 问题是你必须问他们是否会让你访问他们的服务器。 否则，您很难跟踪和控制开发进度，并及时提出改进意见。</p>
<p align="left">您需要确保的另一件事是，您想合作的Magento开发公司是否有专门的测试人员在向您提供网站之前检查所有功能。 另一方面，要清楚在发现网站上的任何问题时如何报告。</p>
<p align="left">&nbsp;</p>
<h2>7.评估Magento开发人员的沟通技巧</h2>
<p align="left">通常沟通问题是被许多人忽视的，但其实这很重要，尤其是在面对面会议几乎不可能的情况下外包Magento开发项目。 如果您要进行外地Magento开发，我们就必要具备能跟合作伙伴沟通的任何一种方式。 例如，你必须检查他们是否可以使用音频和视频会议，聊天工具如Skype，QQ或任何特殊的应用程序共享工具。</p>
<p align="left">此外，虽然英语现在变得越来越流行，但语言可能成为障碍。 因此，确保您选择的Magento开发人员有一定程度的英语流利度。</p>
<p align="left">&nbsp;</p>
<h2>8.在预算和Magento开发者期望酬劳之间取得平衡</h2>
<p align="left">在美国，英国或澳大利亚，只需点击几下，您就可以轻松找到很多的Magento开发公司。 如果你想让这些公司来完成你的Magento网站项目，你就不得不做出巨大的投资。 他们中的大多数会否定预算低于10k的开发项目，并且最愿意接受大型项目（从4万美元到10万美元）。 因此，如果您有能力聘请当地公司，将Magento项目外包可能是一个理想的选择。</p>
<p align="left">此外，如果您合作一家专业的Magento开发公司，虽然您在工时费上花费较多，但您只需要花费一半甚至更低的成本来完成低价程序员的工作。</p>
<p align="left">&nbsp;</p>
<h2>9.确定开发人员专业程度</h2>
<p align="left">一个常见的情况是，虽然该公司想建立一个Magento网站，但他们只是寻找一般的&ldquo;网站设计和开发公司&rdquo;。 因此，他们可以找到多家关于网站开发为名的公司，但是这些公司都没有专门从事Magento。</p>
<p align="left">你知道吗？ 一家专注于Shopify的大型电子商务开发公司仍然可以帮助您建立一家Magento商店，但他们跟&ldquo;真正的&rdquo;Magento开发公司没法比的。</p>
<p align="left">因此，除了网站开发商的声誉外，您还应该了解他们的重点平台和开发技能。</p>
<h2>10.询问Magento认证（可选）</h2>
<p align="left">现在，Magento为其开发人员和合作伙伴提供了多项认证，如Magento认证解决方案专家，Magento认证专业开发人员，Magento前端开发人员以及Magento认证开发人员和开发人员。</p>
<p align="left">如果Magento开发人员或Magento网页设计和开发公司可以展示他们的认证，那将是一个优势。 但是，我们将此步骤设置为可选，因为您不需要严重依赖它。 在某些情况下，如果你遇到一个认证的Magento开发者并且手头有很多认证，不要急于与他签署合同。 原因是这些认证可能通过作弊获得。</p>
<p align="left">此外，如果您的预算有限，并选择与Magento外包公司合作，即使他们在Magento拥有5-6年的经验，他们中的大多数也不能提供认证。 为什么？ 对于那些程序员来说，加入Magento认证考试的费用和时间都很浪费。 此外，他们已经完成了大量令人惊叹的网站可以向您展示，这些将比这些证书更有价值。</p>
<p align="left">&nbsp;</p>
<h2>总结</h2>
<p align="left">要寻找到一个可以满足您的所有需求并且接受您的预算的Magento开发人员/开发公司不是一件容易的事情。 但是，如果您遵循我们的建议，那么肯定会花费更少的精力为您的项目找到一个出色的合作者。</p>
<p align="left">凭借5年以上的经验，360Magento已经成为中国口碑最好的Magento开发公司品牌。 与一些代理机构不同，我们只专注于使用Magento构建的项目，并为客户提供最佳解决方案。 现在，我们提供广泛的Magento周边服务，从<a href="http://www.360magento.com/">Magento网站开发</a>，<a href="http://www.360magento.com/magento-service/magento-design.html/" title="Magento网站设计策划">Magento网站设计</a>，Magento技术支持，<a href="http://www.360magento.com/magento-service/magento-extensions-custom.html" title="Magento插件开发">Magento扩展开发</a>，<a href="http://www.360magento.com/magento-service/magento-mobile.html" title="Magento移动应用app开发">Magento移动应用app开发</a>，<a href="http://www.360magento.com/magento-service/magento-migration.html" title="magento迁移">Magento迁移</a>到Magento优化。 现在就联系我们，为您的项目免费获得报价和咨询！</p>
<p align="left"></p>]]></description>
      <pubDate>Sun, 29 Apr 2018 13:39:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento开发人员必掌握的SEO技术技巧]]></title>
      <link>https://www.360magento.com/blog/seo-tips/</link>
      <description><![CDATA[<p><img alt="Technical SEO Tips" class="aligncenter size-full wp-image-13158" height="395" src="https://www.interactone.com/wp-content/uploads/2018/03/shutterstock_226628683.jpg" width="640" /></p>
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_1">
<div class="et_pb_text_inner">
<p><span><span><span>在万维网初期，建立网站的想法和标准还处于起步阶段（甚至是萌芽状态），HTML使用的合法性以及在搜索引擎中寻找网站也超出了理解的范围。</span><span>随着HTML开发和元素（即&ldquo;标签&rdquo;）的创建，网页结构变得更加标准化，搜索引擎处理交付高质量网站到桌面的方式也在不断发展。</span><span>开发人员，设计师，内容创建者和搜索引擎都知道如何以及为什么应该构建结构的方式，最终开始成为真正的科学和艺术。</span></span></span></p>
<p><span><span><span>曾几何时，搜索引擎只是寻找&ldquo;关键字&rdquo;来决定你的网页对搜索者是否重要;&nbsp;</span><span>然后考虑了内容和页面上有多少文字（因为如果有人正在为一个主题撰写5页的文章，那么他们的网页必须真的有关于该主题的大量信息并且非常有用，对吗？ ），然后快速进入今天的谷歌化世界，我们有非常智能的搜索引擎，这些搜索引擎由非常复杂的人工智能算法提供支持，一切考虑从关键字到内容长度，以及所有这些关键字和内容是否与文章有关，以及网页内容的结构以及整个网站的结构。</span></span></span></p>
<p><span>这一切都可以回溯到开发人员这个重要的位置，因为他们是那些真正建立起信息丰富而美丽的网站的人，这些网站将为您正在搜索精确主题提供引人注目和有用的网页。</span></p>
<h2><span>来</span>自Magento开发人员的八项SEO技术技巧</h2>
<h3><span>1.页面结构</span></h3>
<p><span><span><span>一个网页有三个主要部分：头部，主体和页脚。</span><span>头部（HTML元素&lt;head&gt;）包含指令其他元素，用于告诉加载页面（您的浏览器）的页面结构，构建页面所需的资源（调用CSS和JavaScript组件）以及在元数据元素&lt;title&gt;，&lt;meta name =&ldquo;keywords&rdquo;&gt;和&lt;meta name =&ldquo;description&rdquo;&gt;中找到的描述您（或网页抓取工具）正在查看的页面的基本信息。</span></span></span></p>
<p><span><span><span>页面的主体（元素&lt;body&gt;）包含页面的主要内容。</span><span>这是内容区，所有这些标题和响亮的段落信息都是为​​了您的阅读享受而制定的。</span><span>本节的结构和重点也非常重要，因为有一种处理人和机器人阅读器（即搜索漫游器）内容的特定方法。</span><span>这篇文章稍后会详细介绍。</span></span></span></p>
<h3><span>2.元数据</span></h3>
<p><span><span><span>正如其标签和属性所暗示的，这些部分提供了页面的主要标题以及简短描述（通常用于搜索引擎）以及帮助将搜索引擎定位到页面的所有关键字。</span><span>这些部分可能是最容易创建的，也是最容易出错的搜索引擎优化。</span><span>事实上，由于滥用关键字meta，现代搜索引擎常常忽略它，但将考虑一些，所以只要设置正确，它仍然有用。</span></span></span></p>
<p>拥有一个正确的关键词仅仅意味着只提供与页面相关的关键词，而且这些信息应该保持在最低限度，因为页面的目标对象不应该超过几个字。另外，要记住，这是相对于页面的，而不是整个网站！</p>
<p>标题和描述元应包含关键词为好，但就像关键词部分本身，他们应该简洁和集中。如果太短了，它们就不能提供有效信息。太长了，它们会分散注意力，容易失去焦点。这些元素看似简单，可能太简单了，对于页面的初始&ldquo;快照&rdquo;，它们是非常重要的。把它们看作是将被搜索引擎索引的&ldquo;名片&rdquo;。</p>
<h3><span>3. HTML标题</span></h3>
<p><span><span><span>这部分似乎困扰了许多网络开发人员和内容创作者的角色，因为这些标题的真实意图经常被误解。</span><span>大多数曾经创建或改变网页的人很快就知道，在页面上放置文本时选择&lt;h1&gt;或&lt;h2&gt;或&lt;h3&gt;标签意味着改变字体的大小，以及粗体（或不粗体）的大小。</span><span>这是一种简单易用的网页设计，因为当需要大胆突出的页面上放置任何内容时，您不必选择字体大小和粗体（取决于设计平台，实际使用的字体）。</span><span>这种快速而肮脏的设计的缺点在于，您可能会在整个页面上放置不正确或多次的标题迭代，甚至没有意识到它，这对读者来说可能看起来很好，</span></span></span></p>
<p><strong><em>所以这里有个秘密</em></strong><span><span><span>：想想你的网页（和整体网站）的结构，比如一本书的内容部分。</span><span>您需要一个干净整洁的标题和小标题列表，以准确，合理地组织您的所有信息。</span></span></span></p>
<p><span><span><span>标题（即标题标签）的重要程度从1到6进行编号。</span><span>您网页的主标题（您文章的&ldquo;标题&rdquo;）应位于&lt;h1&gt;元素内。</span><span>页面上的后续标题应该用下一级重要性来表示：&lt;h2&gt;，&lt;h3&gt;，&lt;h4&gt;等等。</span></span></span><strong><em>除非</em></strong><span><span><span>声明一个全新的节，</span></span><strong><em><span>否则</span></em></strong><span><span>在页面上永远不应该有另一个&lt;h1&gt;&nbsp;</span></span></span><span><span><span>与之前的&lt;h1&gt;具有相同的重要性。</span><span>由于大多数网页几乎不会做到这一点，它实际上不应该存在。</span></span></span></p>
<p><em>&ldquo;......但是如果我想在我的页面中间添加一个非常大而粗体的字体呢？&rdquo;</em></p>
<p><span><span><span>那么，说实话，你没有。</span><span>为什么？</span><span>因为搜索引擎也会将粗体文本视为重要的内容，因为您已尽力使其突出。</span><span>这会引起某些文本突出显示的重要性内容的细微差别。</span><span>不过，这里不要太疯狂，因为这也是一种被大量滥用的旧技术，就像汤一样，太多的好香料可能会破坏一锅好汤。</span></span></span></p>
<p><span>这里给你一个学习者的图片：</span></p>
</div>
</div>
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_2">
<div class="et_pb_text_inner">
<p><img alt="技术SEO技巧" class="aligncenter size-full wp-image-13156" height="323" src="https://www.interactone.com/wp-content/uploads/2018/03/2018-03-28_1525.png" width="338" /></p>
</div>
</div>
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_3">
<div class="et_pb_text_inner">
<p><span>在上面的图片中，您可以看到页面中甚至有多个部分，其中导航菜单和侧栏可能存在于正文的上方或旁边，但是主体的&lt;h1&gt;标题是</span><span>页面</span><strong><em>的</em></strong><span><span><span>主要标题。</span><span>小标题标出主标题下面的每个主要部分，等等。</span><span>作为一个提示，页脚部分不一定需要标题标签，因为这些标签通常只是链接到其他页面，但是如果在这些标题下还有简短的描述（因为某些设计模板提供的框允许缩短内容描述），那么坚持格式是有帮助的。</span></span></span></p>
<h3><span>4.图像的&ldquo;Alt&rdquo;和&ldquo;Title&rdquo;属性</span></h3>
<p><span><span><span>图像上的这些属性至多被滥用（或使用不当），最坏的情况完全被忽视。</span><span>这些对您的搜索引擎优化不仅有帮助，而且对于越来越重要的领域是强制性的</span></span></span><span>。</span></p>
<p><span>&ldquo;alt&rdquo;和&ldquo;title&rdquo;属性可用于所有图像，旨在提供&ldquo;爬虫&rdquo;无法从图像本身收集到的额外信息（因为漫游器无法看见图像）。</span></p>
<p><span>&lt;img src=&rdquo;images/happycat.jpg&rdquo; alt=&rdquo;A happy cat, drinking some milk from a dish.&rdquo; title=&rdquo;Happy cat drinking milk.&rdquo; /&gt;</span></p>
<p><span><span><span>此图像元素示例显示如何正确使用图像的&ldquo;alt&rdquo;和&ldquo;title&rdquo;属性。</span><span>图像文件名本身不仅帮助搜索引擎找出图像可能涉及的内容以及它与它所在的页面是否相关，而且&ldquo;alt&rdquo;属性有助于提供图像的简明描述，而&ldquo;标题&rdquo;属性提供了更加直接和简洁的内容。</span><span>这两个属性都可帮助残疾人士使用&ldquo;<span>web reader</span>&rdquo;查看网页，以便查找这些属性并将页面上的图像描述给最终用户，否则这些用户可能无法清楚地看到图像或难以辨别图像是什么。</span><span>同样，添加这些属性不仅可以帮助网络爬虫确定您的页面及其提供有价值的信息，还表明你花时间去编辑更好页面可以被搜索引擎索引和完全消化，以及所有的最终用户可能会发现你的页面是一个有价值的信息来源，</span></span></span></p>
<h3><span>5.站点地图</span></h3>
<p><span><span><span>站点地图是为网页抓取工具和搜索引擎提供网站&ldquo;地图&rdquo;的文件。</span><span>他们可以告诉搜索引擎您网站上的哪些网页是最重要的，因此首先要抓取什么，以及其他元数据，例如网页上次更新时间，以及何时需要重新索引。</span></span></span></p>
<p><span><span><span>当启动一个没有大量外部链接指向的新网站时，包含网站地图就显得尤为重要，因为网络爬虫在单次访问中花费有限的时间来抓取网站。</span><span>通过提供站点地图，网络爬虫将充分利用来自其中一个外部链接的每次访问，首先抓取优先页面并忽略自上次访问以来尚未更新的页面。</span></span></span></p>
<h3><span>6.网络分析</span></h3>
<p><span><span><span>网络开发人员为他们构建的任何网站设置网站分析，并让适当的个人访问分析仪表板很重要。</span><span>检查用户在查找您的网站时搜索的关键词以及它们如何点击它们可以帮助为搜索引擎和用户剪裁内容。</span></span></span></p>
<h3><span>7. 404错误</span></h3>
<p><span><span><span>网站质量对于高搜索排名非常重要，并且当网站向网页抓取工具编制索引错误时质量受到很大影响。</span><span>一个网站的404页面未找到错误越多，它就越糟糕。</span><span>使用Google的Search Console或网站分析仪表板查找错误，并确保及时删除死链接。</span><span>如果外部链接为您的网站产生大量流量，但是对于死链接或不正确格式的网址，请考虑设置重定向至其打算访问的网页。</span></span></span></p>
<h3><span>8.页面加载时间</span></h3>
<p><span><span><span>跳出率，因为网页加载时间越长，用户在仅查看一个网页后离开网站的几率就会大幅增加，。</span><span>根据谷歌的说法，从一秒到两秒的加载时间增加了两秒，使跳出率增加了32％，而从一秒增加到五秒则增加了90％。</span><span>Web开发人员可以通过优化图像文件大小和压缩CSS和JavaScript文件来减少页面大小。</span></span></span></p>
<p><span><span><span>开发人员的专业知识对于正确的搜索引擎优化网站至关重要。</span><span>如果您认为您的Magento网站需要技术审查，请</span></span></span><a href="http://www.360magento.com/contacts/">联系我们</a><span>以了解更多关于</span><span><span><span>我们提供</span></span><span><span>的</span></span></span><a href="http://www.360magento.com/">SEO服务的信息</a><span>。</span></p>
</div>
</div>]]></description>
      <pubDate>Wed, 11 Apr 2018 02:23:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[关于Magento 2 应用PWA的论述]]></title>
      <link>https://www.360magento.com/blog/m2-pwa/</link>
      <description><![CDATA[<p><strong>什么是PWA?</strong></p>
<p>PWA全称是Progressive Web App，翻译过来即&ldquo;渐进式Web应用程序&rdquo;，我更愿意叫渐进式增强web app,是google在2015年提出，16年6月开始推广的项目。PWA的目的是使web应用通过渐进增强的方式来更接近原生app的体验及功能。</p>
<p></p>
<p><strong>PWA有哪些特点?</strong></p>
<p><strong>1.添加到手机主屏</strong></p>
<p>用户首次用浏览器浏览网站,会提示添加应用到主屏幕,你的手机屏幕上就会出现一个应用图标，这就跟app一样，有app图标和标题,外形上无差别。并且无须在应用商店下载，也不用更新，通过后台可实时更新变更内容。通过图标启动可看设置启动画面。</p>
<p></p>
<p><strong>2.推送通知</strong></p>
<p><span>即使浏览器未打开Magento 2网站上的任何页面，通知也会发送给客户，就像其他app推送通知一样</span></p>
<p></p>
<p><strong>3.在离线模式下仍然可以访问</strong></p>
<p><span>用户在没有网络的情况下，只要是以前浏览过的页面在离线状态下仍可浏览</span></p>
<p></p>
<p><strong>4.速度秒开</strong></p>
<p><span>pwa会将已经浏览过的页面缓存到用户手机本地（当然这个是可以设置缓存的具体页面），这样就享受火箭般的速度。</span></p>
<p>以上4点其实就是原生app所具备的有点，而pwa具备了web应用和原生app的有点，不仅有原生app应用的良好用户体验，还具有web应用的搜索引擎友好性。一句话，既能像app一样用又能在搜索引擎上排名。</p>
<p></p>
<p>复制一下网络上的：</p>
<p>大家都知道Native app体验确实很好，下载到手机上之后入口也方便。它也有一些缺点:</p>
<ul>
<li>开发成本高(ios和安卓)</li>
<li>软件上线需要审核</li>
<li>版本更新需要将新版本上传到不同的应用商店</li>
<li>想使用一个app就必须去下载才能使用，即使是偶尔需要使用一下下</li>
</ul>
<p>而web网页开发成本低，网站更新时上传最新的资源到服务器即可，用手机带的浏览器打开就可以使用。但是出了体验上比Native app还是差一些，还有一些明显的缺点</p>
<ul>
<li>手机桌面入口不够便捷，想要进入一个页面必须要记住它的url或者加入书签</li>
<li>没网络就没响应，不具备离线能力</li>
<li>不像APP一样能进行消息推送</li>
</ul>
<p>复制粘贴结束。</p>
<p>最后说明几点，</p>
<p>1.PWA还是web应用程序，基于浏览器。</p>
<p>2.以上说的pwa特点目前能够完全在安卓手机上使用，而ios目前不支持添加到主屏和消息推送功能。但我相信在强大的压力下，ios也不得不进行妥协。</p>
<p>3.Magento与google合作，计划在magento2.2.4版本加入pwa，这是一个设置接口插件。</p>
<p>如果想要网站页面能有更好的用户体验还是在于设计与编程。响应式流行了几年，但界面的友好性不如app，如果你想做一款如APP界面体验的移动端PWA网站,请<a href="http://www.360magento.com/contacts/">联系我们</a></p>
<p></p>
<p></p>]]></description>
      <pubDate>Mon, 02 Apr 2018 11:06:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为什么Magento仍然是2018年的电商巨头？]]></title>
      <link>https://www.360magento.com/blog/why-m-2018/</link>
      <description><![CDATA[<p class="graf graf--p graf-after--h3"><span>首先，我们要问个问题：这些著名的电子商务品牌有什么共同之处？</span></p>
<ol>
<li>Samsung</li>
<li>Ford</li>
<li>Olympus</li>
<li>Nike</li>
<li>Coca Cola</li>
<li>Christian Louboutin</li>
<li>Lenovo</li>
<li>Warby Parker</li>
<li>Rebecca Minkoff</li>
<li>Nestle Nespresso</li>
<li>Fox Connect</li>
<li>Vizio</li>
</ol>
<p class="graf graf--p graf-after--p" id="706a"><img alt="magento品牌" class="aligncenter size-full wp-image-5854" height="720" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-brands.png" width="1280" /><br /><span></span></p>
<p class="graf graf--p graf-after--p"><span>你有答案吗？</span></p>
<p class="graf graf--p graf-after--p"><span>是的，他们都在使用Magento - 现今最流行的电子商务平台！</span></p>
<p class="graf graf--p graf-after--p"><span>不仅这些著名品牌，有</span><em>超过25万</em><span>电子商务品牌，大小规模，选择Magento作为他们的电子商务网站平台。</span></p>
<p class="graf graf--p graf-after--p"><span>为什么？</span></p>
<p class="graf graf--p graf-after--p"><span><span>Magento无疑是易于应用的，因为它配备了大量专用于电子商务的有用默认功能。</span><span>此外，还有一个大型的Magento社区，这意味着当您的网站出现问题时，您可以轻松获得支持。</span></span></p>
<p class="graf graf--p graf-after--p"><span>尽管越来越多的电子商务平台出现（例如：Shopify，BigCommerce，Volution，3Dcart，...），但预计Magento仍将在2018年取得领先。</span></p>
<p class="graf graf--p graf-after--p"><em>以下是Magento如此独特以及电子商务行业最受欢迎的一些原因：</em></p>
<h2 class="graf graf--h3 graf-after--p" id="ba7b"><span>Magento专为电子商务而设计</span></h2>
<p class="graf graf--p graf-after--p" id="5f8f"><span><span>Magento向我们提供全面的电子商务解决方案，不仅为客户提供良好的体验，还为开发人员和商店管理员提供了绝佳的体验。</span><span>在过去的几年中，从Magento 1到Magento 2，我们都看到了一个功能丰富的电子商务平台，预装了所有基础工具，用于构建完美的电子商务商店。</span></span></p>
<p><img alt="magento电子商务" class="aligncenter size-full wp-image-5852" height="1090" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-ecommerce.jpg" width="1920" /></p>
<h2 class="graf graf--h3 graf-after--p" id="1359"><span>Magento是一个开源的电子商务平台</span></h2>
<p class="graf graf--p graf-after--h3" id="26c0"><span><span>你可能知道，Magento是开源的，这意味着它是一个结合了PHP和其他开源工具的免费平台。</span><span>因此，Magento已经比竞争对手有了巨大的优势。</span></span></p>
<p class="graf graf--p graf-after--h3"><span>此外，由于开源，Magento具有很强的适应性，并且易于定制以满足各种项目需求。</span></p>
<p class="graf graf--p graf-after--p" id="835c"><span>更重要的是，该平台可为商店带来强大的性能和最大的安全性。</span></p>
<p><img alt="magento开源电子商务平台" class="aligncenter size-full wp-image-5858" height="208" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-open-source-e-commerce-platform.png" width="648" /></p>
<h2 class="graf graf--h3 graf-after--p" id="c8dc"><span>Magento是快速和可扩展的</span></h2>
<p class="graf graf--p graf-after--h3"><span>如果您希望网页加载速度很快，那么没有电子商务平台可以比Magento做得更好。</span></p>
<p class="graf graf--p graf-after--p" id="2390"><span>由于高端缓存技术，您的Magento商店将显著加速。</span></p>
<p class="graf graf--p graf-after--p" id="006c"><span><span>有些人认为Magento只适合大中型企业，但事实并非如此。</span><span>该平台适用于所有中小型企业，因为它非常灵活，并且在业务变得巨大时能够与您的业务共同发展。</span><span>您可能会对其性能，稳定性和可靠性感到惊讶。</span></span></p>
<p><img alt="magento快速页面加载" class="aligncenter size-full wp-image-5853" height="623" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-fast-page-load.jpg" width="1540" /></p>
<h2 class="graf graf--h3 graf-after--p" id="e30f"><span>Magento默认响应式</span></h2>
<p class="graf graf--p graf-after--h3" id="aa68"><span>Magento整合了HTML5，使您的商店能够很好地展现在任何客户的设备上，从台式机，笔记本电脑，平板电脑到智能手机。</span></p>
<p><img alt="magento反应" class="aligncenter size-full wp-image-5849" height="550" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-responsive.png" width="1903" /></p>
<h2 class="graf graf--h3 graf-after--p" id="35a0"><span>大量的Magento扩展</span></h2>
<p class="graf graf--p graf-after--p" id="460e"><span><span>所有关注Magento的用户关键之一是巨大的Magento扩展和模块市场。</span><span>很容易找到并安装Magento插件来增强商店功能。</span></span></p>
<p><img alt="magento扩展" class="aligncenter size-full wp-image-5850" height="551" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-extensions.png" width="1904" /></p>
<h2 class="graf graf--h3 graf-after--p" id="7b4e"><span>允许多个商店</span></h2>
<p class="graf graf--p graf-after--h3" id="ff17"><span><span>尽管大多数电子商务平台只允许您每个帐户只有一家商店，但Magento可让您通过一个后端/管理面板进行设置管理多家商店。</span><span>因此，您可以同时控制所有商店的库存，订单，帐单和客户信息。</span></span></p>
<p class="graf graf--p graf-after--p" id="57f1"><span>此外，由于每个商店可能有不同的主题，您可以为每个商店分配一个子域。</span></p>
<p><img alt="magento多个商店" class="aligncenter size-full wp-image-5851" height="250" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-multiple-stores.jpg" width="410" /></p>
<h2 class="graf graf--h3 graf-after--p" id="9cf8"><span>易与第三方集成</span></h2>
<p class="graf graf--p graf-after--h3" id="b0b7"><span>Magento允许无限集成第三方组件，因此有助于大幅缩短开发和部署时间。</span></p>
<p class="graf graf--p graf-after--p" id="05d0"><span><span>此外，由于Magento中的可扩展API，您可以无任何障碍地连接到任何应用程序或插件。</span><span>无论是追踪工具，支付网关还是运输或分析工具，您需要做的只是找到扩展并将其安装到您的Magento商店中。</span></span></p>
<p><img alt="Magento的-API的集成" class="aligncenter size-full wp-image-5848" height="326" src="https://www.tigren.com/wp-content/uploads/2018/03/Magento-API-Integration.jpg" width="848" /></p>
<h2 class="graf graf--h3 graf-after--p" id="29ac"><span>对主机没有限制</span></h2>
<p class="graf graf--p graf-after--h3" id="7ea9"><span><span>与Shopify或Volusion平台不同，Magento可让您自由选择喜欢的托管服务。</span><span>因此，您将能够选择符合您的要求和预算的最佳托管解决方案。</span><span>此外，如果您想迁移现有商店，则无论何时何地都可以，都没有限制。</span></span></p>
<p><img alt="magento托管" class="aligncenter size-full wp-image-5846" height="490" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-hosting.jpg" width="1200" /></p>
<h2 class="graf graf--h3 graf-after--p" id="bbfd"><span>Magento社区令人难以置信</span></h2>
<p class="graf graf--p graf-after--p" id="2a90"><span>由于Magento是一个流行的开源电子商务平台，已经建立了一个巨大的Magento社区，包括开发人员，代理商，店主，设计师，商业顾问，解决方案提供商和全球最终用户。</span></p>
<p><img alt="magento论坛" class="aligncenter size-full wp-image-5857" height="937" src="https://www.tigren.com/wp-content/uploads/2018/03/magento-forum.png" width="1031" /></p>
<h2 class="graf graf--h3 graf-after--p" id="9f2a"><span>结论</span></h2>
<p><span><span>正如你所看到的，Magento为我们提供了广泛的功能，以创建完美的电子商务商店。</span><span>这个平台不仅在2018年，而且在未来几年仍将是无与伦比的电子商务巨头。</span></span></p>
<p><span><span>但值得注意的是，它需要开发人员具有一定的专业开发知识才能实现有效的Magento网站。</span><span>因此，您必须更加努力地选择可靠的Magento开发公司来与之合作。</span></span></p>
<p><span><span>凭借</span><span>在Magento电子商务</span></span><span>方面6年以上的经验</span><span><span>，360Magento能够帮助您</span></span><span><span>建立</span><span><span>出色的</span></span><span>Magento商店</span><span>。</span><span>现在就</span></span><a href="http://www.360magento.com/contacts/"><span>联系我们</span></a><span>，为您的项目获取免费报价。</span></p>]]></description>
      <pubDate>Thu, 29 Mar 2018 02:58:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2开源版(社区版)和商业版(企业版)的区别比较]]></title>
      <link>https://www.360magento.com/blog/ce-vs-ee/</link>
      <description><![CDATA[<div class="et_pb_column et_pb_column_4_4  et_pb_column_0">
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_1">
<h2><span>我们一直听到客户这样的问题：</span></h2>
<p><em>&ldquo;社区版（CE）和企业版（EE）有什么区别？&rdquo;</em></p>
<p><em>&ldquo;Magento2与1有什么关系？&rdquo;</em></p>
<p><em>&ldquo;我需要哪一个？&rdquo;</em></p>
<p><span>一旦我们通过他们的第一组问题来谈论他们，接下来的问题就是：</span></p>
<p><em>&ldquo;使用CE和EE创建Magento2网站各自的成本是多少？&rdquo;</em></p>
<p><em>&ldquo;'我为什么要选择付费版本而不是免费版本呢？&rdquo; &nbsp;</em></p>
<p><em>&ldquo;如果我在CE上使用扩展，可以在EE上使用吗？&rdquo;</em></p>
<p><span><span><span>如果不深入了解您的业务，很难在短时间内回答这些问题。</span><span>每个商家都是独一无二的，每个商家都有一套独特的需求，但我们可以详细介绍CE和EE之间的一些关键区别，因此商家在与我们或其他开发人员进行深入通话之前，可以更好地了解从哪里开始。</span></span></span></p>
</div>
</div>
<div class=" et_pb_row et_pb_row_1">
<div class="et_pb_column et_pb_column_4_4  et_pb_column_1">
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_2">
<h3><span>Magento 1 vs Magento 2</span></h3>
<p><span><span>我们详细介绍了M1与M2的区别，以及为什么M2如此强大并值得升级。阅读关于<a href="http://www.360magento.com/blog/m1-m2/" title="magento1和magento2的区别" target="_blank">这里</a></span><span><span>。</span><span>不过，下面是一张备忘单，比较了Magento 2&nbsp;</span></span></span><strong>在</strong><span><span><span>CE和EE上</span></span><span><span>对Magento 1的主要优势</span></span></span><span>。</span></p>
</div>
<div class="et_pb_module et_pb_toggle et_pb_toggle_open  et_pb_toggle_0 et_pb_toggle_item">
<h5 class="et_pb_toggle_title"><span>新的Magento 2（</span>包括Magento 2 CE和EE）功能优化</h5>
<div class="et_pb_toggle_content clearfix">
<table style="width: 849px;">
<tbody>
<tr>
<td><strong><span><span>功能</span></span></strong></td>
<td><strong><span><span>M2社区版（CE）</span></span></strong></td>
<td><strong><span><span>M2企业版（EE）</span></span></strong></td>
</tr>
<tr>
<td><span><span><span>搜索引擎优化</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>现场管理</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>目录管理</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>目录浏览</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>产品浏览</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>结帐，付款和运送</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>订单管理</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>客户账户</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>客户服务</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>国际支持</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>分析和报告</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>移动商务</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>本机设备应用程序</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>营销，促销和转换工具</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_3">
<h3><span>Magento 2的新扩展程序</span></h3>
<p><span><span><span>当Magento 2推出时，Magento也改变了商家访问扩展的方式。</span><span>商家可以访问</span></span></span><a href="https://marketplace.magento.com/">Magento Marketplace</a><span><span><span>以访问数百个扩展。</span><span>扩展分为以下几类：会计与金融，市场营销，内容与定制，客户支持，付款与安全，报告与分析，销售，运输与配送以及网站优化。 &nbsp;</span></span></span></p>
<p><span><span><span>许多扩展是免费的，但有些可能需要花费数百甚至数千美金。最</span><span>重要是要考虑质量，可靠性和可用性的扩展支持。</span><span>市场的好处是，所有的扩展都通过扩展质量程序进行了审查和测试。</span></span></span></p>
</div>
</div>
</div>
<div class=" et_pb_row et_pb_row_2">
<div class="et_pb_column et_pb_column_4_4  et_pb_column_2">
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_4">
<h2><span>Magento2社区企业版可以提供什么。</span></h2>
<p><span><span><span>站在商家的角度考虑，我们推荐Magento 2企业版而不是Magento 1企业版。</span><span>在Magento 1中，商家购买EE的兴趣不大。</span><span>社区没有足够的额外功能让企业值得投资。</span><span>值得注意的是，我们看到CE上的许多商家利用扩展来获得EE的力量而没有价格标签。</span><span>这对一些人有效，但管理和维护一个健康的网站可能会很棘手。</span><span>那些M1扩展网站可能会造成一些昂贵且耗时问题。</span></span></span></p>
<p><span><span><span>但是，Magento 2 Enterprise并非如此。</span><span>Magento2企业版包含了最新的和许多令人兴奋的开箱即用功能 - 不需要复杂的扩展！</span></span></span></p>
</div>
<div class="et_pb_module et_pb_toggle et_pb_toggle_open  et_pb_toggle_1 et_pb_toggle_item">
<h5 class="et_pb_toggle_title"><span>Magento 2 EE功能与CE版本</span></h5>
<div class="et_pb_toggle_content clearfix">
<table>
<tbody>
<tr>
<td><strong><span><span>功能</span></span></strong></td>
<td><strong><span><span>M2社区版（CE）</span></span></strong></td>
<td><strong><span><span>M2企业版（EE）</span></span></strong></td>
</tr>
<tr>
<td><span><span><span>客户细分，有针对性的促销和销售</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>基于动态规则的产品关系</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>持久购物</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>自动电子邮件营销提醒</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>私人销售</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>礼品登记</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>赠送选项</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>奖励积分</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>商店积分</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>多个愿望清单</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>由SKU添加到购物车</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>退货管理授权（RMA）</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>内容管理系统</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>计划导入/导出功能</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>备份和回滚</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>内容的分段，合并和回滚</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>客户属性管理</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>网站和商店级别的管理员权限角色</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>价格和促销权限</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>记录管理员操作</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>每个客户组的类别查看和购买权限（限制目录访问）</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>订单归档</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>Solr搜索</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>全页面缓存</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>优化索引</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>可配置的订单追踪小工具</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>支持备用媒体存储 - CDN和数据库</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>PA-DSS认证/支付桥梁</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
<tr>
<td><span><span><span>强大的数据加密，散列和密钥管理</span></span></span></td>
<td><span><span><span>没有</span></span></span></td>
<td><span><span><span>是</span></span></span></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_5"><span><span><span>除了上面详细介绍的M2 EE功能之外，商户还可以全天候获得技术支持。</span><span>这包括专注于帮助您从Magento商店获得最佳效果的专门客户经理。</span></span></span></div>
</div>
</div>
<div class=" et_pb_row et_pb_row_3">
<div class="et_pb_column et_pb_column_4_4  et_pb_column_3">
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_6">
<h2><span>Magento2企业版费用及价格如何计算？</span></h2>
<p><span>Community Edition是Magento的免费版本 - 使用该平台不需要额外费用。</span></p>
<p><span>企业版是Magento的付费选项 - 总费用因商家收入而异。</span></p>
<div class="fusion-table table-1">
<table style="width: 100%;">
<tbody>
<tr>
<td width="156"><strong>收入(美元)</strong></td>
<td width="172"><strong>授权费用(每年) (美元)</strong></td>
<td width="139"><strong>百分比</strong></td>
</tr>
<tr>
<td width="156">0 &ndash; 100万</td>
<td width="172">22K</td>
<td width="139">min&nbsp; 2.2%</td>
</tr>
<tr>
<td width="156">1百万 &ndash; 5百万</td>
<td width="172">32K</td>
<td width="139">3.2% &ndash; 0.64%</td>
</tr>
<tr>
<td width="156">5百万 &ndash; 1千万</td>
<td width="172">49K</td>
<td width="139">0.98% &ndash; 0.49%</td>
</tr>
<tr>
<td width="156">1千万 &ndash; 2.5万</td>
<td width="172">75K</td>
<td width="139">0.75% &ndash; 0.3%</td>
</tr>
</tbody>
</table>
</div>
<p><span>特别是EE，</span><span><span><span>商店的商品销售总额（GMV）越高，年费就越高。</span><span>考虑到这一点，大商人通常认为EE的好处值得投资。</span><span>较小的商户通常首先利用免费的社区版，直到他们可以增加销售额，以证明企业的投资。</span></span></span></p>
<p><span><span><span>但是，考虑到CE与EE之间的关系，重要的是还要计算投资扩展的成本。</span><span>不仅要考虑扩展的总体成本，还要考虑安装，设置和配置所需的时间，其中包括确保所有扩展都能很好地协同工作。</span><span>随着时间的推移，更新和维护扩展也要不断的花费。</span></span></span></p>
<p><span><span><span>虽然从CE和一些扩展开始可能更经济，但重要的是要考虑长期的商业计划。</span><span>如果在接下来的几年中，需要安装数十个扩展才能获得所需的完整功能，那么从一开始就投入EE可能是值得的。</span></span></span></p>
</div>
</div>
</div>
<div class=" et_pb_row et_pb_row_4">
<div class="et_pb_column et_pb_column_1_2  et_pb_column_4">
<div class="et_pb_text et_pb_module et_pb_bg_layout_light et_pb_text_align_left  et_pb_text_7">
<h3><span>什么版本的Magento最适合你？</span></h3>
<p><span><span><span>M2 EE和CE的简要概述是为了在早期阶段帮助商家研究和规划。</span><span>我们非常乐意与商家交谈，了解他们的未来个人需求和目标。</span><span>特别是当他们正在考虑重大的M2升级或像企业一样的投资时。</span><span>我们希望帮助确保商家做出他们感到有信心的决定，并且不会后悔。</span><span>Magento是一个明智的商业投资，如果做得适当，可以带来极大的回报。</span></span></span></p>
<p><span><a href="http://www.360magento.com/contacts/"><span><span>联系我们</span></span></a><span><span>&nbsp;&nbsp;以获取更多关于Magento 2 CE和EE的信息，我们将安排时间回答您的所有问题。</span></span></span></p>
</div>
</div>
</div>]]></description>
      <pubDate>Tue, 20 Mar 2018 13:16:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2认证考试已准备就绪]]></title>
      <link>https://www.360magento.com/blog/m2-cert-ready/</link>
      <description><![CDATA[<p>期待已久，Magento2认证专业开发人员考试已经启动。自2016年我们开始第一个magento2项目时，我们就一直等待这个认证考试。所有的客户都希望自己的项目能与magento认证开发人员合作，<span>它为他们提供了可持续性和高质量的感觉。2011年的时候我们公司参与首批Magento认证考试并斩获5位认证开发人员，在他们的带领下，公司声誉及项目质量得到了极大的提高。此外Magento2的认证考试启动，我们将依靠magento认证考试来简化我们的招聘过程。</span></p>
<p><span>Magento 2认证专业开发人员考试是一种主要基于场景的考试，旨在验证在以下领域对Magento 2进行定制所需的技能和知识：UI修改，数据库更改，管理员修改，结帐流程定制，订单管理集成和定制，目录结构和功能的变化。</span><span>这门考试适用于对Magento 2开发概念和经验（推荐1.5年）有深入理解的Magento 2开发人员，可以实现自定义和定制Magento 2。</span></p>
<p></p>
<h4><span>关于考试</span></h4>
<ul>
<li><span>60多项选择项目</span></li>
<li><span>90分钟完成考试</span></li>
<li><span>基于Magento开源（2.2）和Magento Commerce（2.2），适用于那些使用过任何版本的Magento 2。</span></li>
</ul>
<p></p>
<p><span>Magento U已经分享了</span><a href="https://u.magento.com/free-study-guide" title="Magento 2认证专业开发考试学习指南" target="_blank"><span><span>Magento 2认证专业开发考试学习指南</span></span><span class="fa fa-external-link"></span></a></p>
<p><span><span>对于前端开发人员来说，要通过Magento 2 Certified Frontend-Developer考试，你必须等到5月份。</span><span>所以你有一些时间来提高你的技能来实现这个吸引人的徽章。</span></span></p>
<p><span>如此纯粹的指导，购买考试券（260美金），找到一个考试中心，注册参加考试并为自己挑战;）</span></p>
<p><span>PS：你最多可以重试4次这个考试。</span></p>
<p></p>]]></description>
      <pubDate>Mon, 19 Mar 2018 13:11:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为什么要升级到Magento2?]]></title>
      <link>https://www.360magento.com/blog/why-m2/</link>
      <description><![CDATA[<p>1.Magento 1官方将支持到2018年12月。当Magento停止支持Magento 1的过程时，他们将停止发布重要的安全补丁，因此所有安全风险将成为您的责任</p>
<p>2.维护和增强Magento 1商店的成本将在一段时间内增加</p>
<p>3.2016年已停止为Magento 1平台开发新功能</p>
<p>4.与Magento 1相比，Magento 2具有更好的安全性</p>
<p>5.Magento 1基于旧版本的PHP（5.6或更低），而Magento 2支持PHP 7，充分发挥其性能优势。正确的配置和正确的基础架构设置将使Magento 2上的网上商店性能比Magento 1好得多</p>
<p>6.Magento 2的结账速度快了38％，能够比Magento 1的订单多出117％的订单</p>
<p>7.Magento 2内置了全页面缓存和Varnish 4 支持</p>
<p>8.Magento2的后台管理界面人性化，它允许甚至不懂技术的用户处理Web商店管理</p>
<p>9.通过Magento 2管理面板产品创建工作流程更简单</p>
<p>10.主题响应式和移动设备支持是Magento 2的核心</p>
<p>11.Magento 2具有广泛的响应和搜索引擎优化友好的主题和综合视频</p>
<p>12.更方便用户使用Magento 2.结账步骤更少 -顾客完成结账的机会更多</p>
<p>13.Magento 2支持更多支付选项和网关</p>
<h2>这一举措 - 顺利还是痛苦？</h2>
<p>magento官方发布了一个<a href="http://devdocs.magento.com/guides/v2.2/migration/bk-migration-guide.html" rel="nofollow">迁移工具</a>，可以帮你平滑的迁移数据（商店设置，产品，客户，订单，促销规则......）</p>
<p>但是，正如那里清楚地指出的那样，主题和代码自定义（包括第三方扩展）将不可转移，这意味着它们需要在Magento 2上重做。</p>
<p>因此，需要在前端界面和功能开发方面进行额外投资。在我看来，这应该被视为一件好事，因为：</p>
<ol>
<li>它可以给你一些新的想法，让你重新思考你的整个业务</li>
<li>你将能够摆脱一些遗留代码</li>
<li>您可以提高网站的整体可用性</li>
</ol>
<p>让我们面对现实 - 如果您的商店有50多个扩展程序（根据我们近期的一些经验，甚至比这还多），Magento 2可能成为一个救生员，因为它可以让您重新思考和希望以更好的方式重做。带给客户一个崭新的更好用户体验的商店。</p>
<p>如果您需要任何帮助为您的业务计划下一步，请告诉我们。</p>
<h2>我应该什么时候升级到MAGENTO 2？</h2>
<p>这很大程度上取决于您当前的网站和当前的状况 - 底线是，如果您的网站运行良好（顺利运行，订单很多...），并且您使用的版本不是非常过时（任何在CE1.8 和EE1.13之前的版本会被认为相当过时），但并不急于求成，您可以（也应该）开始探索Magento 2，请求您的解决方案合作伙伴结合您自己的想法并开始制定一些基本计划。</p>
<p>如果您使用的是旧版本的软件，甚至是较新的版本，但出现严重的性能问题，并且最重要的是您已经安装了多个第三方扩展程序，现在将是计划进行升级的好时机。</p>
<p>如果您需要认真做一些事情来显著提高商店的性能，那么您绝对应该启动Magento 2升级计划。</p>
<h2>谁在使用Magento 2？</h2>
<p>ninewest.co.uk Shop.landroverusa.com Shop.jaguarusa.com shopworld.seat.de Shop.jazzercise.com Rogersandhollands.com Scufgaming.com Oliversweeney.com Sassandbide.com Pumpunderwear.com Stoneandstrand.com Danarebeccadesigns.com Eberjey.com Shop.dilmahusa.com H2oplus.com alcatelonetouch.us Thehundreds.com Shoei-helmets.com Kingsouq.com graze.com</p>]]></description>
      <pubDate>Thu, 15 Mar 2018 08:55:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2有哪些优势？magento1和magento2有哪些区别不同？]]></title>
      <link>https://www.360magento.com/blog/m1-m2/</link>
      <description><![CDATA[<p>2016年整个圈子都在讨论一个热门话题magento2，我们也完成了比较性能测试并总结了评测结果 - Magento 2与Magento 1相比的优缺点。老实说，在那一刻，我们对结果感到失望，因为所有得出的数字不支持最新版本。但现在，magento已升级到2.2.3,其表现结果是令我们满意的，我们强烈建议考虑迁移到Magento 2。</p>
<h2>性能提升</h2>
<p>页面加载时间减少超过50％。它对那些经常在你的商店浏览购买的顾客有很好的体验。人们对页面加载时间变得越来越敏感，因此Magento 2的性能改进可以让访问者留在网站上。 如果一个电子商务网站每天赚10万美元，1秒的页面延迟可能会让你每年损失250万美元的销售额。- Kissmetrics 此外，它使您的电子商务商店对搜索引擎更具吸引力。</p>
<h2>用户友好方式</h2>
<p>改进了Magento 2后端管理UX界面。如果您熟悉Magento 1.x管理，您将会对新的界面视图感到满意。这个新的管理面板具有用户友好的界面，使管理过程直观清晰和简单。 - 响应式和触摸友好的导航 - 简单的产品创建工作流程 - 拖放布局编辑 - 4倍的产品导入能力</p>
<h2>新购物者体验特性</h2>
<p>实现高度个性化的购物体验是Magento 2平台的主要目标之一。它采用新的响应式设计参考主题，客户购物车中的产品图像以及更多种类的付款方式成功实施。</p>
<h2>简化结账</h2>
<p>以最少的步骤和所需的信息优化结账流程，让您的客户购买更快更轻松。</p>
<h2>灵活的架构</h2>
<p>下一代架构为您的网上商店提供了前所未有的灵活性。因为它具有模块化的代码库，所以很容易定制您的电子商务系统。它节省了上线时间并优化了部署流程。 更快地连接，操作和扩展任何主题或扩展。更广泛和高效的API将关注这些。</p>
<h2>时髦技术</h2>
<ol>
<li>PHP 7</li>
<li>Varnish(全页面缓存可实现更快的开箱即用性能)</li>
<li>Redis</li>
<li>现代JS堆栈</li>
<li>RabbitMQ</li>
<li>Solr</li>
<li>PHPUnit</li>
<li>Composer (用于管理依赖)</li>
</ol>
<h2>框架改进</h2>
<p>主要代码重构，以摆脱系统中的所有混乱 - 主要数据网格增强 - 现在可以为Magento应用程序启用/禁用模块 - 兼容HHVM和PHP 7</p>
<h2>高质量扩展</h2>
<p>Magento将Magento Connect重新整合到只提供高质量扩展的新Magento Marketplace中，因为要成为这个新的magento模块商店的开发公司，所有第三方解决方案都必须通过5级质量检查。</p>
<h2>平台季度更新</h2>
<p>每3个月Magento 2发布社区版和企业版的新功能</p>
<p><a href="http://www.360magento.com" title="magento2定制开发">Magento2定制开发</a>认准老品牌开发商360Magento</p>]]></description>
      <pubDate>Thu, 15 Mar 2018 04:03:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento首席执行官说，“每一个企业战略都是数字战略”]]></title>
      <link>https://www.360magento.com/blog/digital01/</link>
      <description><![CDATA[<p><span class="author vcard hidden"><span class="fn"></span></span><span class="updated hidden"></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">据电子商务平台Magento首席执行官Mark Lavelle称，如果有任何组织没有受到数字化转型的影响，那么很少有公司会这样做。</span><span style="vertical-align: inherit;">他认为，数字化转型现在是每个人都面临的问题，组织采取的良好做法是遵循成功模式。</span></span></p>
<div class="vw-post-content clearfix">
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">正在发生的</span></span>数字转型现正在影响每一个行业，&rdquo;<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavelle</span></span>上周在悉尼举行的澳大利亚Magento Live 2018活动中表示。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;这是因为<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">现在</span></span>吸引和留住客户是数字行为。</span><span style="vertical-align: inherit;">我们把时间花在银幕上，社交媒体上，你的品牌必须超越的各个地方。&ldquo;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavelle还指出节省成本和效率的重大收益，特别是对于B2B企业。</span><span style="vertical-align: inherit;">最终，这意味着数字化转型已成为每个组织的一个问题，成功意味着适应性<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">更</span></span>强，以客户为中心的业务。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavelle表示，Magento电子商务平台每年处理大约1,550亿美元的商品总量，显示出数字化转型的广泛影响和需求。</span></span></p>
<h3><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">按照收入</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">根据引用IDC研究的Lavell的说法，公司正在迎头赶上，他们认为全球2000强企业中超过半数认为其收入依赖于数字体验。</span></span></p>
<img alt="" class=" wp-image-34662" height="348" src="https://images.which-50.com/wp-content/uploads/2016/11/Magento-Mark_Lavelle-COLOR-1.jpg" width="219" /><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Magento首席执行官Mark Lavelle</span></span>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;世界上大多数大的企业都认为这是他们收入的增长点。</span><span style="vertical-align: inherit;">所以，[它]远离实验阶段[它]是非常真实的。</span><span style="vertical-align: inherit;">每个企业都意识到，他们的企业战略实际上是一种数字战略，他们首先得从头开始。&ldquo;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavell说，数字化的焦点正在被买家的期望&ldquo;推向顶峰&rdquo;。</span><span style="vertical-align: inherit;">消费者现在拥有前所未有的信息，包括价格和库存透明度。</span><span style="vertical-align: inherit;">&ldquo;他们希望<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">作为品牌</span></span>能够全天候<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">365</span></span>天与您进行互动。&rdquo;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavell还提到&ldquo;亚马逊效应&rdquo;，供应和交付链已经完善到&ldquo;事情可以立即完成&rdquo;的地步。</span><span style="vertical-align: inherit;">根据Lavell的说法，尽管这在B2C交易中最容易看到，但它对于B2B买家来说日益重要。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">消费者期望值的提高意味着组织必须&ldquo;不断前进&rdquo;并愿意尝试。</span><span style="vertical-align: inherit;">&ldquo;你必须弄清楚你的客户下一步想要什么，他们将采用什么新的创新。</span><span style="vertical-align: inherit;">因为他们将快速采用它们。&ldquo;</span></span></p>
<h3><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">成功模式</span></span></h3>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Magento产品的本质意味着Lavell亲眼目睹数字化转型。</span><span style="vertical-align: inherit;">他说随着时间的推移，他注意到了某些模式和数字转换的真相。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;一旦组织对这四件事情感到满意，那就是当我们看到真正的数字化转变发生时，&rdquo;<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavell</span></span>说。</span></span></p>
<p><strong><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">1.大胆品牌</span></span></strong></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;你必须有一个能够切入的品牌，&rdquo;<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavell</span></span>解释道。</span><span style="vertical-align: inherit;">虽然在数字时代之前这是真的，但是这个要求变得越来越重要，据Lavell说。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;你走进一个组织，你可以判断整个品牌是否将转向数字化转型，或者这只是一个侧面项目。&rdquo;</span></span></p>
<p><strong><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">2.首先拥抱数字</span></span></strong></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Lavell</span></span></span></span>说，真正的转型是文化，它意味着打破孤岛，必须从顶端来。</span><span style="vertical-align: inherit;">Lavelle表示，这是一项重要的事业，为其中之一就是公司丛生存到快速发展。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;你可能必须改变你组织的方式，以便进行完整的数字化转型。</span><span style="vertical-align: inherit;">当我们看到公司接受它时，它很快就会成为一种竞争优势。&ldquo;</span></span></p>
<p><strong><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">3.增加业务灵活性。</span></span></strong></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&ldquo;你不会购买某些技术或平台期望它保持相同的方式。</span><span style="vertical-align: inherit;">这是一个错误。</span><span style="vertical-align: inherit;">这就是我们10-15年前做事情的方式，&ldquo;拉维尔说。</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">根据lavelle的说法，当今的趋势意味着选择灵活和可扩展技术至关重要。</span><span style="vertical-align: inherit;">在Magento，他们称之为&ldquo;拥有玻璃&rdquo; - 参考客户的互动主要在屏幕上出现。</span><span style="vertical-align: inherit;">根据拉维尔的说法，灵活性意味着他们可以通过各种渠道满足客户的需求，包括那些尚不明显的渠道。</span></span></p>
<p><strong><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">4.通过独创性创新</span></span></strong></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">拉维尔说，最终的数字化转型事实是&ldquo;人为因素&rdquo;。</span><span style="vertical-align: inherit;">拉维尔说，企业迫切需要创新和创造力。</span><span style="vertical-align: inherit;">&ldquo;我们发现，这些开放式的创新方法往往会使大企业通过这些类型的变革。&rdquo;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">他说，虽然公司通常没有这种内部人力资源，但Magento开发商提供解决方案的社区平台是一个很好的选择。比如360Magento专注Magento开发长达10年，其技术实力和信誉值得信赖。</span></span></p>
</div>]]></description>
      <pubDate>Wed, 14 Mar 2018 02:54:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[发现最新的Magento Imagine 2018发言人]]></title>
      <link>https://www.360magento.com/blog/imagine2018/</link>
      <description><![CDATA[<div class="row-fluid">
<h1><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">发现最新的Imagine 2018发言人</span></span></h1>
</div>
<div class="row-fluid">
<div class="span12">
<p class="blog-date"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">&nbsp;</span></span></p>
</div>
</div>
<div class="row-fluid">
<div class="span7">
<div class="field-name-field-blog-tags field-label-inline"></div>
</div>
<div class="span5">
<div class="share-buttons"><!-- ShareThis Button BEGIN --> <span class="st_facebook_custom"> <span class="fa-stack fa-lg"> <em class="fa fa-circle fa-stack-2x"></em> <em class="fa fa-facebook fa-stack-1x"></em> </span> </span> <span class="st_twitter_custom"> <span class="fa-stack fa-lg"> <em class="fa fa-circle fa-stack-2x"></em> <em class="fa fa-twitter fa-stack-1x"></em> </span> </span> <span class="st_linkedin_custom"> <span class="fa-stack fa-lg"> <em class="fa fa-circle fa-stack-2x"></em> <em class="fa fa-linkedin fa-stack-1x"></em> </span> </span> <span class="st_googleplus_custom"> <span class="fa-stack fa-lg"> <em class="fa fa-circle fa-stack-2x"></em> <em class="fa fa-google-plus fa-stack-1x"></em> </span> </span> <span class="st_email_custom"> <span class="fa-stack fa-lg"> <em class="fa fa-circle fa-stack-2x"></em> <em class="fa fa-envelope fa-stack-1x"></em> </span> </span> <!-- ShareThis Button END --></div>
</div>
</div>
<div class="row-fluid">
<div class="span12 article-image">
<div class="video-wrapper">
<div class="field field-name-field-video field-type-video-embed-field field-label-hidden">
<div class="field-items">
<div class="field-item even">
<div class="embedded-video">
<div class="player">
<script src="//fast.wistia.com/embed/medias/2jgzrbtay1.jsonp" type="text/javascript"></script>
<script src="//fast.wistia.com/assets/external/E-v1.js" type="text/javascript"></script>
<div class="wistia_responsive_padding wistia_embed" style="padding: 56.25% 0 0 0; position: relative;">
<div class="wistia_responsive_wrapper" style="height: 100%; left: 0; position: absolute; top: 0; width: 100%;">
<div class="wistia_embed wistia_async_2jgzrbtay1 videoFoam=true wistia_embed_initialized" id="wistia-2jgzrbtay1-1" style="height: 433px; width: 770px;">
<div class="w-chrome" id="wistia_chrome_29" style="display: inline-block; height: 433px; margin: 0px; padding: 0px; position: relative; vertical-align: top; width: 770px; zoom: 1; outline: none; overflow: hidden; box-sizing: content-box;">
<div id="wistia_grid_35_wrapper" style="display: block; width: 770px; height: 433px;">
<div id="wistia_grid_35_above" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
<div id="wistia_grid_35_main" style="width: 770px; left: 0px; height: 433px; margin-top: 0px;">
<div id="wistia_grid_35_behind"></div>
<div id="wistia_grid_35_center" style="width: 100%; height: 100%;">
<div class="w-video-wrapper w-css-reset" style="height: 100%; position: absolute; top: 0px; width: 100%; background-color: #000000;"><video id="wistia_simple_video_69" width="320" height="240" style="background: transparent; display: block; height: 100%; position: static; visibility: visible; width: 100%; object-fit: fill;" crossorigin="anonymous" poster="https://fast.wistia.com/assets/images/blank.gif" src="blob:https://magento.com/f6407030-9d87-496e-9683-e60661f54159" controlslist="nodownload" playsinline="" preload="metadata" type="video/m3u8" x-webkit-airplay="allow"></video></div>
<div class="w-ui-container" style="height: 100%; left: 0px; position: absolute; top: 0px; width: 100%;">
<style type="text/css"><!--
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset{font-size:14px;}
#wistia_chrome_29 #wistia_grid_35_wrapper div.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper span.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper ul.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper li.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper label.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper button.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper img.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper a.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper svg.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper p.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper a.w-css-reset{border:0;}
#wistia_chrome_29 #wistia_grid_35_wrapper p.w-css-reset{margin:1.4em 0;}
#wistia_chrome_29 #wistia_grid_35_wrapper a.w-css-reset{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper span.w-css-reset{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper svg.w-css-reset{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper ul.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper ol.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper li.w-css-reset{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper ul:before.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper ol:before.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper li:before.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper ul:after.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper ol:after.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper li:after.w-css-reset{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper label.w-css-reset{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:no-repeat;background-size:100% 100%;float:none;outline:none}
#wistia_chrome_29 #wistia_grid_35_wrapper button.w-css-reset{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:no-repeat;background-size:100% 100%;border:0;border-radius:0;outline:none;position:static}
#wistia_chrome_29 #wistia_grid_35_wrapper img.w-css-reset{border:0;display:inline-block;vertical-align:top;border-radius:0;outline:none;position:static}
      #wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree {font-size:14px;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree div{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree span{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ul{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree li{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree label{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree button{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree img{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree a{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree svg{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree p{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree a{border:0;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree p{margin:1.4em 0;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree a{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree span{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree svg{display:inline;}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ul{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ol{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree li{box-sizing:inherit;box-shadow:none;color:inherit;display:block;float:none;font:inherit;font-family:inherit;font-style:normal;font-weight:normal;font-size:inherit;letter-spacing:0;line-height:inherit;margin:0;max-height:none;max-width:none;min-height:none;min-width:none;padding:0;position:static;text-decoration:none;text-transform:none;text-shadow:none;transition:none;word-wrap:normal;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-webkit-font-smoothing:antialiased;list-style-type:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ul:before{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ol:before{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree li:before{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ul:after{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree ol:after{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree li:after{display:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree label{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:no-repeat;background-size:100% 100%;float:none;outline:none}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree button{background-attachment:scroll;background-color:transparent;background-image:none;background-position:0 0;background-repeat:no-repeat;background-size:100% 100%;border:0;border-radius:0;outline:none;position:static}
#wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-tree img{border:0;display:inline-block;vertical-align:top;border-radius:0;outline:none;position:static}
      #wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-max-width-none-important{max-width:none!important}
      #wistia_chrome_29 #wistia_grid_35_wrapper .w-css-reset-button-important{border-radius:0!important;color:#fff!important;}
--></style>
<div class="w-vulcan-v2 w-css-reset" id="w-vulcan-v2-34" style="box-sizing: border-box; cursor: default; height: 100%; left: 0px; position: absolute; visibility: visible; top: 0px; width: 100%;">
<div class="w-vulcan--background w-css-reset" style="height: 100%; left: 0px; position: absolute; top: 0px; width: 100%;">
<div class="w-css-reset" style="pointer-events: auto;" data-handle="statusBar"></div>
<div class="w-css-reset" style="pointer-events: auto;" data-handle="thumbnail"><img alt="视频缩略图" class="w-css-reset" src="https://embedwistia-a.akamaihd.net/deliveries/aae13a4c189da94604c47bfe36536131261e2177.jpg?image_crop_resized=960x540" style="border-width: 0px; border-style: solid; border-color: #000000; box-sizing: content-box; height: 433px; left: 0px; top: 0px; width: 770px; display: none; visibility: hidden;" /></div>
</div>
<div class="w-vulcan-overlays-table w-css-reset" style="display: table; pointer-events: none; position: absolute; width: 100%;">
<div class="w-vulcan-overlays--left w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 0px;">
<div class="w-css-reset" style="height: 399px;"></div>
</div>
<div class="w-vulcan-overlays--center w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 100%;">
<div class="w-css-reset" style="height: 399px;">
<div class="w-css-reset" style="pointer-events: auto;" data-handle="bigPlayButton">
<div class="w-bpb-wrapper w-css-reset w-css-reset-tree" style="display: none; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%);"></div>
</div>
<div class="w-css-reset" style="pointer-events: auto;" data-handle="clickForSoundButton">
<div class="w-css-reset w-css-reset-tree" style="display: none; height: 100%; left: 0px; pointer-events: none; position: absolute; top: 0px; width: 100%;">
<style><!--
@keyframes VOLUME_SMALL_WAVE_FLASH {
          0% { opacity: 0; }
         33% { opacity: 1; }
         66% { opacity: 1; }
        100% { opacity: 0; }
      }

      @keyframes VOLUME_LARGE_WAVE_FLASH {
          0% { opacity: 0; }
         33% { opacity: 1; }
         66% { opacity: 1; }
        100% { opacity: 0; }
      }

      .volume__small-wave {
        animation: VOLUME_SMALL_WAVE_FLASH 2s infinite;
        opacity: 0;
      }

      .volume__large-wave {
        animation: VOLUME_LARGE_WAVE_FLASH 2s infinite .3s;
        opacity: 0;
      }
--></style>
<div style="color: white; display: inline; font-family: WistiaPlayerOverpass, Helvetica, sans-serif; font-size: 13px; margin-left: -4px; width: 36%;">Click for sound<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">点击声音</span></span></div>
</div>
</div>
<div class="w-css-reset" style="pointer-events: auto;" data-handle="loadingIndicator">
<div style="display: none; height: 80px; width: 125px;">
<div style="height: 80px; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 125px;">
<style type="text/css"><!--
#wistia_loading_svg_98 path {
        stroke-width: 2px;
        stroke-dasharray: 36.299235026041664, 72.59847005208333;
        -webkit-animation: wistia_dash 1s infinite linear forwards;
      }
      @-webkit-keyframes wistia_dash {
        from { stroke-dashoffset: 108.897705078125; }
        to { stroke-dashoffset: 0; }
      }
--></style>
</div>
</div>
</div>
<div class="w-css-reset" style="pointer-events: auto;" data-handle="playPauseNotifier">
<div class="w-play-pause-notifier" style="height: 72px; left: 50%; pointer-events: none; position: absolute; opacity: 0; top: 50%; transform: translate(-33%, -50%) scale(1.5); width: 60px; transition: opacity 0.6s, transform 0.6s;"></div>
</div>
</div>
</div>
<div class="w-vulcan-overlays--right w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 0px;">
<div class="w-css-reset" style="height: 399px;"></div>
</div>
</div>
<div class="w-bottom-bar w-css-reset" style="bottom: 0px; border-collapse: collapse; display: none; height: 34px; left: 0px; opacity: 0; pointer-events: none; position: absolute; table-layout: auto; transition: opacity 0.2s; width: 100%;">
<div class="w-bottom-bar-upper w-css-reset" style="display: none;">
<div class="w-css-reset" style="height: 100%; pointer-events: auto;" data-handle="upperPlaybar">
<div class="w-playbar-wrapper w-css-reset w-css-reset-tree" style="cursor: pointer; height: 100%; outline: none; position: relative;">
<div style="display: block; height: 100%; overflow: hidden; pointer-events: none; position: relative; width: 770px;"></div>
<div class="w-storyboard-anchor" style="height: 0px; left: 0px; position: absolute; top: 0px; width: 100%;">
<div class="w-storyboard" style="bottom: 24px; display: none; height: 84.6144px; left: 0px; overflow: hidden; pointer-events: none; position: absolute; width: 149.76px;"><img class="w-css-reset-max-width-none-important" src="https://embedwistia-a.akamaihd.net/deliveries/4c8e9b321e2973d82df8a78607762a5cd280f194.bin" style="height: 1438.44px; left: 0px; position: absolute; top: 0px; vertical-align: top; width: 1497.6px;" />
<div class="w-storyboard-time" style="background: rgba(0, 0, 0, 0.5); bottom: 0px; color: #ffffff; font-family: WistiaPlayerOverpassNumbers, Helvetica, sans-serif; font-size: 13px; height: 30px; left: 0px; line-height: 34px; position: absolute; text-align: center; width: 100%;">0:00<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:00</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:00</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:00</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:00</span></span></div>
</div>
</div>
<div class="w-playbar__hoverMarker" style="background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.12) 100%); display: none; height: 100%; left: -36px; pointer-events: none; position: absolute; top: 0px; width: 36px;"></div>
<div class="w-playbar__focus-border" style="border: 2px solid #ffffff; display: none; height: 100%; left: 0px; pointer-events: none; position: absolute; top: 0px; width: 100%;"></div>
</div>
</div>
</div>
<div class="w-bottom-bar-lower w-css-reset">
<div class="w-bottom-bar-left w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 0px;">
<div class="w-bottom-bar-left-inner w-css-reset" style="height: 34px; position: relative; white-space: nowrap;">
<div class="w-css-reset" style="display: inline-block; vertical-align: top; pointer-events: auto;" data-handle="smallPlayButton">
<div class="w-vulcan-button-wrapper w-css-reset" style="display: inline-block; height: 34px; position: relative; vertical-align: top; width: 50px;">
<div class="w-vulcan-icon-wrapper" style="box-sizing: border-box; height: 100%;" data-handle="smallPlayButton"></div>
</div>
</div>
</div>
</div>
<div class="w-bottom-bar-middle w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 100%;">
<div class="w-bottom-bar-middle-inner w-css-reset" style="height: 34px; position: relative; white-space: nowrap;">
<div class="w-css-reset" style="height: 100%; pointer-events: auto;" data-handle="lowerPlaybar">
<div class="w-playbar-wrapper w-css-reset w-css-reset-tree" style="cursor: pointer; height: 100%; outline: none; position: relative;">
<div style="display: block; height: 100%; overflow: hidden; pointer-events: none; position: relative; width: 600px;"></div>
<div class="w-storyboard-anchor" style="height: 0px; left: 0px; position: absolute; top: 0px; width: 100%;">
<div class="w-storyboard" style="bottom: 24px; display: none; height: 84.6144px; left: 139.636px; overflow: hidden; pointer-events: none; position: absolute; width: 149.76px;"><img class="w-css-reset-max-width-none-important" src="https://embedwistia-a.akamaihd.net/deliveries/4c8e9b321e2973d82df8a78607762a5cd280f194.bin" style="height: 1438.44px; left: -1347.84px; position: absolute; top: -423.072px; vertical-align: top; width: 1497.6px;" />
<div class="w-storyboard-time" style="background: rgba(0, 0, 0, 0.5); bottom: 0px; color: #ffffff; font-family: WistiaPlayerOverpassNumbers, Helvetica, sans-serif; font-size: 13px; height: 30px; left: 0px; line-height: 34px; position: absolute; text-align: center; width: 100%;">0:30<span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:32</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">0:27</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">1:17</span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">1:17</span></span></div>
</div>
</div>
<div class="w-playbar__hoverMarker" style="background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.12) 100%); display: none; height: 100%; left: 178.516px; pointer-events: none; position: absolute; top: 0px; width: 36px;"></div>
<div class="w-playbar__focus-border" style="border: 2px solid #ffffff; display: none; height: 100%; left: 0px; pointer-events: none; position: absolute; top: 0px; width: 100%;"></div>
</div>
</div>
</div>
</div>
<div class="w-bottom-bar-right w-css-reset" style="display: table-cell; vertical-align: top; position: relative; width: 0px;">
<div class="w-bottom-bar-right-inner w-css-reset" style="height: 34px; position: relative; white-space: nowrap;">
<div class="w-css-reset" style="display: inline-block; vertical-align: top; pointer-events: auto;" data-handle="volumeButton">
<div class="w-vulcan-button-wrapper w-css-reset" style="display: inline-block; height: 34px; position: relative; vertical-align: top; width: 40px;">
<div class="w-vulcan-icon-wrapper" style="box-sizing: border-box; height: 100%;" data-handle="volumeButton"></div>
</div>
</div>
<div class="w-css-reset" style="display: inline-block; vertical-align: top; pointer-events: auto;" data-handle="settingsButton">
<div class="w-vulcan-button-wrapper w-css-reset" style="display: inline-block; height: 34px; position: relative; vertical-align: top; width: 40px;">
<div class="w-vulcan-icon-wrapper" style="box-sizing: border-box; height: 100%;" data-handle="settingsButton"></div>
</div>
</div>
<div class="w-css-reset" style="display: inline-block; vertical-align: top; pointer-events: auto;" data-handle="fullscreenButton">
<div class="w-vulcan-button-wrapper w-css-reset" style="display: inline-block; height: 34px; position: relative; vertical-align: top; width: 40px;">
<div class="w-vulcan-icon-wrapper" style="box-sizing: border-box; height: 100%;" data-handle="fullscreenButton"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="w-foreground w-css-reset" style="height: 100%; left: 0px; pointer-events: none; position: absolute; top: 0px; width: 100%;">
<div class="w-css-reset" style="pointer-events: auto;" data-handle="contextMenu"></div>
<div class="w-css-reset" style="pointer-events: auto;" data-handle="loadingHourglass"></div>
</div>
<div class="w-focus-border" style="border: 2px solid #ffffff; box-sizing: border-box; display: none; height: 100%; left: 0px; pointer-events: none; position: absolute; top: 0px; width: 100%;"></div>
</div>
</div>
</div>
<div id="wistia_grid_35_front"></div>
<div id="wistia_grid_35_top_inside">
<div id="wistia_grid_35_top" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
</div>
<div id="wistia_grid_35_bottom_inside">
<div id="wistia_grid_35_bottom" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
</div>
<div id="wistia_grid_35_left_inside">
<div id="wistia_grid_35_left" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
</div>
<div id="wistia_grid_35_right_inside">
<div id="wistia_grid_35_right" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
</div>
</div>
<div id="wistia_grid_35_below" style="height: 0px; font-size: 0px; line-height: 0px;"></div>
<style type="text/css"><!--
#wistia_grid_35_wrapper{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Arial,sans-serif;font-size:14px;height:100%;position:relative;text-align:left;width:100%;}
#wistia_grid_35_wrapper *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}
#wistia_grid_35_above{position:relative;}
#wistia_grid_35_main{display:block;height:100%;position:relative;}
#wistia_grid_35_behind{height:100%;left:0;position:absolute;top:0;width:100%;}
#wistia_grid_35_center{height:100%;overflow:hidden;position:relative;width:100%;}
#wistia_grid_35_front{display:none;height:100%;left:0;position:absolute;top:0;width:100%;}
#wistia_grid_35_top_inside{position:absolute;left:0;top:0;width:100%;}
#wistia_grid_35_top{width:100%;position:absolute;bottom:0;left:0;}
#wistia_grid_35_bottom_inside{position:absolute;left:0;bottom:0;width:100%;}
#wistia_grid_35_bottom{width:100%;position:absolute;top:0;left:0;}
#wistia_grid_35_left_inside{height:100%;position:absolute;left:0;top:0;}
#wistia_grid_35_left{height:100%;position:absolute;right:0;top:0;}
#wistia_grid_35_right_inside{height:100%;right:0;position:absolute;top:0;}
#wistia_grid_35_right{height:100%;left:0;position:absolute;top:0;}
#wistia_grid_35_below{position:relative;}
--></style>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<div class="field field-name-body field-type-text-with-summary field-label-hidden">
<div class="field-items">
<div class="field-item even">
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">看看一些精彩的主题演讲和分组会议发言人以及品牌，在这个新的视频卷轴中分享他们在Imagine 2018上的成功故事。&nbsp;</span></span></p>
<p><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span>Imagine 2018</span>是Magento专家和创新者最大的聚会，将于4月23 - 25日在拉斯维加斯举行。</span><span style="vertical-align: inherit;">此活动是与3000多名商业专家和创新者联系的绝佳机会。</span><span style="vertical-align: inherit;">加入我们。</span></span><a href="https://imagine.magento.com/" target="_blank"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">立即注册</span></span></a><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">。</span></span></p>
<p><img alt="" src="https://static.magento.com/sites/default/files/images/8822_baked_by_melissa_announcement_social_images_blog_cta_r2_v1.jpg" style="width: 770px; height: 216px;" /></p>
</div>
</div>
</div>
</div>
</div>]]></description>
      <pubDate>Tue, 13 Mar 2018 02:49:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[论magento1和magento2的速度性能优化问题]]></title>
      <link>https://www.360magento.com/blog/magento-speed-up/</link>
      <description><![CDATA[<p>magento从2007年发展至今，也经历了十余年的磨练，如今也迎来了magento的换代产品magento2,无论从安全性，稳定性还是速度，其实都已经做的很好了。但现如今还有客户说magento速度很慢，那这类客户肯定是道听途说，自己根本就还没有搭建一个magento网站，网上说magento慢的帖子那都是10年左右的老帖子了。</p>
<p>当然了，无论是magento 1还是magento 2,它可扩展性，灵活性，系统安全性和可靠性方面处于领先地位,但是所有Magento的高级功能和特性都是以拥有大量文件和大型数据库为代价的，也正因此，从理论上来说要比其他平台速度相对慢点，微不足道的。也可以从以下方面做一些优化。</p>
<p>一、服务器的选择</p>
<p>迈向优化Magento性能的第一步应该是找到一个适合的好的Magento服务器，magento对服务器的要求一向很高，所以我建议选择独立云服务器，服务器内部优化配置自己掌控，当然这也需要专业的技术做支撑。如果有成本的限制，比如刚创业的小商家，可以找一家可靠的共享托管服务器，针对magento优化的共享服务器。我可以推荐一家专门针对magento优化的服务器托管商<a href="https://www.siteground.com/go/host-features" title="SiteGround链接地址" target="_blank">SiteGround</a>。推荐选择GoGeek套餐。这样后期如果做的好可以升级独立云服务器，节省成本。</p>
<p></p>
<p>二、数据库服务器</p>
<p>大部分网站直接把网站程序服务器和数据库服务器共用，当然这在数据量小，请求量少的情况下还是可行的，一旦数据量和数据请求量上去了，那网站的速度是非常慢的。如果遇到这种情况，我的建议是直接上RDS，不懂的可以搜索RDS,可以称之为云数据库。前不久接手了一个二手项目，用的是magento2.1.5,我还记得3月份开发的一个2.1.5版本的项目，那个痛苦啊简直不敢想象，无论是线上还是本地刷新一个页面比蜗牛还慢，而接手的这个项目竟然秒开，原来一看配置是用了RDS，这就是花了钱的区别啊。当然现在的magento1.9和magento2.1.6以上版本都还是非常快的。</p>
<p></p>
<p>三、CDN加速</p>
<p>我们打开浏览器按"F12"选择"Network",然后运行网站，我们会看到加载这个网站的静态文件所需的时间（比如：图片，js，css），插一句，如果有的图片加载时间过长，可以用工具适当压缩图片。当然，无论你的网站有大型图片还是居多的css和js文件，都可以通过cdn来加载，这意味着你的图片和css，js文件将从另外一台服务器上加载，并且可以在加载页面时防止服务器上出现不必要的压力。从而提高加载速度。</p>
<p></p>
<p>以上三点都是需要Money，当然这些Money花的是值得的，而且是物美价廉。下面我简单介绍下通过magento后台设置来进一步优化速度。</p>
<p></p>
<p>1.进入到<em>System &gt; Configuration &gt; Catalog &gt; FrontEnd，在 &lsquo;Use Flat Catalog Category&rsquo; 和 &lsquo;Use Flat Catalog Product&rsquo;.选择<em>&ldquo;Yes&rdquo;。</em></em>我解释下，magento数据库采用EAV模型，说简单点就是要想查询一个数据，得从好几个表里面联合查询才能得到你想要的数据，而上面设置后，那么我们的程序在加载分类和产品相关的数据时就直接单表查询，单表查询和多表查询哪个速度快就不用我说了吧。</p>
<p>2.禁用日志记录，&nbsp;进入到System -&gt; Configuration -&gt; Advanced -&gt; Developer -&gt; Log Settings&nbsp;来禁用</p>
<p>3.另一个重要的步骤是定期清理cron和日志。进入到<em>System &gt; Configuration &gt; Advanced &gt; System -&gt; Log Cleaning</em>，在这里你应该启用日志清理，并设置尽可能最小的时间。</p>
<p>4.&nbsp;合并css和js文件，进入到<em>System &gt; Configuration &gt; Developer进行设置</em>.合并意味着减少请求，从而提升速度。在此提醒，如果是经过二次开发的网站谨慎操作，合并之后可能会出现问题，我建议在具有丰富经验的magento开发人员的指导下进行。</p>
<p>5.运行预编译，进入到&nbsp;<em>System &gt; Tools &gt; Compilation，</em>运行预编译，这将提升网站加载速度高达50%以上。但因为一些用户操作不当导致网站无法访问，我之前写过一篇文章，<a href="http://www.360magento.com/blog/error-compilation/" title="解决magento开启Compilation预编译网站无法访问" target="_blank">解决magento开启Compilation预编译网站无法访问</a></p>
<p>6.最后一步就是开启缓存,进入到System &gt; Cache Management</p>
<p></p>
<p>以上六点为magento 1的后台操作指导，magento2方法一样，只是路径不同，我就不再赘述。magento2更多的时候需要去运行命令,这就需要更专业的人士啦。magento2对技术的要求性还是很高的。另外magento 2如果切换到生产环境模式速度也是非常快的。在网站的根目录下再行如下命令:</p>
<pre><code>php bin/magento deploy:mode:set production<br /></code></pre>
<p><br />最后补充一点，能花钱解决的就花钱解决，自己去折腾肯定是浪费时间的，最后还解决不好，时间就是金钱，找专业的人做专业的事才是最划算的</p>]]></description>
      <pubDate>Thu, 25 Jan 2018 10:42:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 2.2软件的更新版本现已推出]]></title>
      <link>https://www.360magento.com/blog/magento22-updated/</link>
      <description><![CDATA[<table border="0" cellpadding="0" cellspacing="0" class="table100 mktoContainer" id="emailContainer">
<tbody>
<tr>
<td class="mktEditable" id="bodyCopy2"><span><span>Magento 2.2已经达到了另一个重要的里程碑，这要归功于几个小时的测试和您的大量投入。</span><span>随着Magento 2.2发布的更新版本，几乎所有的主要问题已经解决，代码现在稳定，并准备好开始提交您的扩展到市场。</span><span>我们也对您的反馈感兴趣，请继续提交您在未来几周内发现的任何问题。&nbsp;</span></span><br /><br /><span><span>接下来的步骤，我们鼓励您：&nbsp;</span></span><br /><br />
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="top">&bull;</td>
<td><strong>查看Magento 2.2发布信息。</strong><span><span>&nbsp;Magento 2.2&nbsp;&nbsp;</span></span><a href="http://email2.magento.com/x0G0000x2N90XqG0Qs5hwDF" id="" target="_blank">快速入门网站</a><span><span>&nbsp;&nbsp;包括发行说明，文档，向后不兼容的更改列表，以及更多帮助您准备发布。&nbsp;</span></span></td>
</tr>
<tr>
<td valign="top">&bull;</td>
<td><strong>下载该软件的更新版本。</strong><span><span>&nbsp;Magento开源（以前的社区版）软件可用于</span></span><a href="http://email2.magento.com/kG0RX0q00xh02GsFw90O50D" id="" target="_blank">GitHub上的</a><span><span>所有开发者&nbsp;</span><span>。</span><span>解决方案，技术和托管合作伙伴可以通过签署</span></span><a href="http://email2.magento.com/iSxG0qG9hPX00s000wF2D05" id="" target="_blank">在线协议</a><span><span>&nbsp;&nbsp;并提供GitHub帐户信息</span><span>来访问私人存储库中的Magento Commerce（以前的企业版）软件&nbsp;&nbsp;</span><span>。</span><span>查看我们以前的&nbsp;&nbsp;</span></span><a href="http://email2.magento.com/a0200X09FG0w00TDQGqx5hs" id="" target="_blank">论坛帖子</a><span><span>&nbsp;&nbsp;，了解更多关于这个过程</span></span></td>
</tr>
<tr>
<td valign="top"><span><span>&bull;</span></span></td>
<td><strong>测试版本。</strong><span><span>&nbsp;请继续测试此最新版本，并在2017年8月21日之前通过GitHub提交任何问题。在该日期之后提交的问题很可能会在GA发布后得到解决。</span><span>请注意，技术支持不适用于预发布软件。</span><span>如果在网站上线之前计划/完成对GA的升级，开发人员可能会根据预发布代码启动客户构建。</span></span></td>
</tr>
<tr>
<td valign="top">&bull;</td>
<td><strong>测试并提交您的Marketplace扩展。</strong><span><span>&nbsp;从今天开始，我们鼓励您提交已通过新版本测试的扩展程序。</span><span>要在GA中及时列出您的扩展，我们建议您将更新限制在composer.json和module.xml文件中。</span><span>这将允许您的扩展程序通过加快的审查过程。</span><span>有关</span><span>&nbsp;该过程的更多信息，</span><span>请参阅我们最新的关于</span></span><a href="http://email2.magento.com/XsX0hUG0q000Dx5wF029GR0" id="" target="_blank">更新Magento 2.2的扩展和主题的</a><span><span>博客文章&nbsp;&nbsp;</span><span>。</span></span></td>
</tr>
</tbody>
</table>
<br /><span><span>再次感谢您的支持和反馈。</span><span>请务必定期检查，因为我们将继续每周更新代码。&nbsp;</span></span><br /><br /><span><span>最好的问候，&nbsp;&nbsp;</span></span><br /><span><span>Magento团队</span></span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>]]></description>
      <pubDate>Tue, 15 Aug 2017 14:39:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2定制布局示例]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-practice/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>本文将一步一步演示如何进行布局的定制任务。也就是说，将演示如何改变Magento页面头部中顾客账户链接的布局。</p>
<h2>移动顾客账户链接</h2>
<p>在Orange主题中，OrangeCo想要把头部链接转换成下拉菜单，Magento Luma主题中完成的方式是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_customizing_layout1.png" width="610px" /></div>
<p>要实现该效果，需要将头部链接用一个容器包住并在列表前添加一个箭头。</p>
<p>默认的头部链接看起来是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_customizing_layout2.png" width="425px" /></div>
<p>需要变成这样：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_customizing_layout3.png" width="455px" /></div>
<h3>步骤1：定义块</h3>
<p>OrangeCo应用了Luma主题。使用<a href="http://www.360magento.com/blog/magento2-locate-files/">《Magento2定位模板，布局和样式》</a>中的方法。找到显示头部链接的块被定义在：</p>
<p><code>&lt;Magento_Customer_module_dir&gt;/view/frontend/layout/default.xml:</code></p>
<pre><code>...
&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;referenceBlock name="top.links"&gt;
            &lt;block class="Magento\Customer\Block\Account\Link" name="my-account-link"&gt;
                &lt;arguments&gt;
                    &lt;argument name="label" xsi:type="string" translate="true"&gt;My Account&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/block&gt;
            &lt;block class="Magento\Customer\Block\Account\RegisterLink" name="register-link"&gt;
                &lt;arguments&gt;
                    &lt;argument name="label" xsi:type="string" translate="true"&gt;Register&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/block&gt;
            &lt;block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link" template="account/link/authorization.phtml"/&gt;
        &lt;/referenceBlock&gt;
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<h3>步骤2：定义模板</h3>
<p>与上一步定义布局的同样方法相同，OrangeCo定义用来重新排列链接的模板：</p>
<p><code>&lt;Magento_Customer_module_dir&gt;/view/frontend/templates/account/customer.phtml</code></p>
<pre><code>&lt;?php if($this-&gt;customerLoggedIn()): ?&gt;
    &lt;li class="customer welcome customer-welcome"&gt;
        &lt;span class="customer name" data-mage-init='{"dropdown":{}}' data-toggle="dropdown"&gt;
            &lt;span&gt;&lt;?php echo $this-&gt;getCustomerName(); ?&gt;&lt;/span&gt;
            &lt;button type="button" class="action switch"&gt;&lt;span&gt;&lt;?php echo __('Change')?&gt;&lt;/span&gt;&lt;/button&gt;
        &lt;/span&gt;
        &lt;?php if($this-&gt;getChildHtml()):?&gt;
        &lt;div class="customer menu customer-menu" data-target="dropdown"&gt;
            &lt;?php echo $this-&gt;getChildHtml();?&gt;
        &lt;/div&gt;
        &lt;?php endif; ?&gt;
    &lt;/li&gt;
&lt;?php endif; ?&gt;
</code></pre>
<h3>步骤3：扩展base布局来增加一个块</h3>
<p>OrangeCo需要在容器<code>header.panel</code>中新建一个名为<code>header.links</code>的块用来移动链接。由于链接可以在不同模型中被添加，最好是在<code>Magento_Theme</code>模型的页面配置<code>default.xml</code>中添加这个块。</p>
<p>所以下面的扩展布局被添加在Orange主题中：</p>
<p><code>app/design/frontend/OrangeCo/orange/Magento_Theme/layout/default.xml</code></p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;referenceContainer name="header.panel"&gt;
            &lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;
                &lt;arguments&gt;
                    &lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;
                &lt;/arguments&gt;
            &lt;/block&gt;
        &lt;/referenceContainer&gt;
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<h3>步骤4：移动链接</h3>
<p>要移动链接到<code>header.links</code>块，OrangeCo添加一个扩展布局：</p>
<p><code>app/design/frontend/OrangeCo/orange/Magento_Customer/layout/default.xml</code></p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
        &lt;body&gt;
            &lt;referenceBlock name="header.links"&gt;
                &lt;block class="Magento\Customer\Block\Account\Customer" name="customer" template="account/customer.phtml" before="-"/&gt;
                &lt;block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login" template="account/link/authorization.phtml"/&gt;
            &lt;/referenceBlock&gt;
            &lt;move element="register-link" destination="header.links"/&gt;
            &lt;move element="top.links" destination="customer"/&gt;
            &lt;move element="authorization-link" destination="top.links" after="-"/&gt;
        &lt;/body&gt;
    &lt;/page&gt;
</code></pre>
<p>现在，顾客链接看起来如下：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_customizing_layout4.png" width="784px" /></div>
<p>最后是添加样式：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_customizing_layout5.png" width="784px" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 27 Feb 2016 15:20:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2通用布局定制任务]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-tasks/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>这篇文章描述了下面这些典型布局定制任务：</p>
<ul>
<li><a href="#set-page-layout">设置页面布局</a></li>
<li><a href="#include-static-resources"> 在&lt;head&gt;里加载静态资源（JavaScript, CSS, fonts）</a></li>
<li><a href="#remove-static-resources"> 移除&lt;head&gt;中的静态资源（JavaScript, CSS, fonts）</a></li>
<li><a href="#create-container">创建一个容器</a></li>
<li><a href="#reference-container">引用一个容器</a></li>
<li><a href="#create-block">创建一个块</a></li>
<li><a href="#block-sets-template">使用块来设置模板</a></li>
<li><a href="#modify-block-arguments">修改块参数</a></li>
<li><a href="#reference-block">引用一个块</a></li>
<li><a href="#methods-set-properties">使用块对象方法来设置块性能</a></li>
<li><a href="#rearrange-elements">元素重新排序</a></li>
<li><a href="#remove-elements">移除元素</a></li>
<li><a href="#replace-elements">替换元素</a></li>
</ul>
<p>提示：为保证你定制内容的稳定性和安全性，避免在升级中被删除。请不要改变Magento的模型和主题布局。要定制布局可以在你的自定义主题中扩展和重写主题文件。</p>
<h2 id="set-page-layout">设置页面布局</h2>
<p>特定页面的布局在页面配置文件中被定义，在根<code>&lt;page&gt;</code>结点的layout属性中。</p>
<p>例如：将Advanced Search页面的布局由一列布局改为带左侧栏的两列布局：<code>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_CatalogSearch/layout/catalogsearch_advanced_index.xml</code></p>
<pre><code>&lt;page layout="2columns-left" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
...
&lt;/page&gt;
</code></pre>
<h2 id="include-static-resources">在&lt;head&gt;里加载静态资源（JavaScript, CSS, fonts）</h2>
<p>JavaScript, CSS和其它静态资产在页面配置文件的<code>&lt;head&gt;</code>区域被添加，默认地<code>&lt;head&gt;</code>在<code>app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml</code>中被定义。建议在你自定义的主题中扩展该文件来加载JavaScript, CSS和其它静态资产。下面的文件包含了一些你必须添加的文件的示例：</p>
<p><code>&lt;theme_dir&gt;/Magento_Theme/layout/default_head_blocks.xml</code></p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;head&gt;
        &lt;!-- Add local resources --&gt;
    	&lt;css src="css/my-styles.css"/&gt;
    
        &lt;!-- The following two ways to add local JavaScript files are equal --&gt;
        &lt;script src="Magento_Catalog::js/sample1.js"/&gt;
        &lt;link src="js/sample.js"/&gt;
		
    	&lt;!-- Add external resources --&gt;
	    &lt;css src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" src_type="url" /&gt;
        &lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" /&gt;
        &lt;link src="http://fonts.googleapis.com/css?family=Montserrat" src_type="url" /&gt; 
    &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<p>要添加外部资源时，必须要指明<code>src_type="url"</code>参数。</p>
<p>你可以使用<code>&lt;link src="js/sample.js"/&gt;或<code>&lt;script src="js/sample.js"/&gt;指令来添加本地存储的JavaScript文件到你的主题。</code></code></p>
<p>指定资源的路径必须是以下中的一个：</p>
<ul>
<li>&lt;theme_dir&gt;/web</li>
<li>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web</li>
</ul>
<h3>添加条件注释</h3>
<p>条件注释意味着针对Internet Explorer给出特殊的指令。你可以给特定版本的Internet Explorer添加CSS文件。以下是一个示例：</p>
<pre><code>&lt;head&gt;
        &lt;css src="css/ie-9.css" ie_condition="IE 9" /&gt;
    &lt;/head&gt;
&lt;/page&gt;
</code></pre>
<p>这样就能在生成的HTML中增加一个IE条件注释，如下：</p>
<pre><code>&lt;!--[if IE 9]&gt;
&lt;link rel="stylesheet" type="text/css" media="all" href="&lt;your_store_web_address&gt;/pub/static/frontend/OrangeCo/orange/en_US/css/ie-9.css" /&gt;
&lt;![endif]--&gt;
</code></pre>
<p>上面例子中的<code>orange</code>是被OrangeCo创建的自定义主题。</p>
<h2 id="remove-static-resources">移除&lt;head&gt;中的静态资源（JavaScript, CSS, fonts）</h2>
<p>要移除页面&lt;head&gt;中的静态资源，按照下面的扩展文件做些类似的修改即可：</p>
<p><code>app/design/frontend/&lt;Vendor&gt;/&lt;theme&gt;/Magento_Theme/layout/default_head_blocks.xml</code></p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
   &lt;head&gt;
        &lt;!-- Remove local resources --&gt;
        &lt;remove src="css/styles-m.css" /&gt;
        &lt;remove src="my-js.js"/&gt;
        &lt;remove src="Magento_Catalog::js/compare.js" /&gt;
								
	&lt;!-- Remove external resources --&gt;
        &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"/&gt;
        &lt;remove src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"/&gt;
        &lt;remove src="http://fonts.googleapis.com/css?family=Montserrat" /&gt; 
   &lt;/head&gt;
</code></pre>
<p>注意，如果在初始文件中静态块带有模型路径（例如：<code>Magento_Catalog::js/sample.js</code>），那么在移除时也应指明模型路径。</p>
<h2 id="create-container">创建一个容器</h2>
<p>使用下面的例子来创建（声明）一个容器</p>
<p><code>&lt;container name="some.container" as="someContainer" label="Some Container" htmlTag="div" htmlClass="some-container" /&gt;</code></p>
<h2 id="reference-container">引用一个容器</h2>
<p>要更新一个容器，使用<code>&lt;referenceContainer&gt;</code>指令。</p>
<p>示例：添加链接到页面头部面板</p>
<pre><code>&lt;referenceContainer name="header.panel"&gt;
        &lt;block class="Magento\Framework\View\Element\Html\Links" name="header.links"&gt;
            &lt;arguments&gt;
                &lt;argument name="css_class" xsi:type="string"&gt;header links
            &lt;/arguments&gt;
        &lt;/block&gt;
&lt;/referenceContainer&gt;
</code></pre>
<h2 id="create-block">创建一个块</h2>
<p>块的创建（声明）使用<code>&lt;block&gt;</code>指令。</p>
<p>示例：增加一个产品SKU信息的块</p>
<pre><code>&lt;block class="Magento\Catalog\Block\Product\View\Description" name="product.info.sku" template="product/view/attribute.phtml" after="product.info.type"&gt;
    &lt;arguments&gt;
        &lt;argument name="at_call" xsi:type="string"&gt;getSku&lt;/argument&gt;
        &lt;argument name="at_code" xsi:type="string"&gt;sku&lt;/argument&gt;
        &lt;argument name="css_class" xsi:type="string"&gt;sku&lt;/argument&gt;
    &lt;/arguments&gt;
&lt;/block&gt;
</code></pre>
<h2 id="reference-block">引用一个块</h2>
<p>要更新一个块，使用<code>&lt;referenceBlock&gt;</code>指令。</p>
<p>示例：向<code>logo</code>块传送图片</p>
<pre><code>&lt;referenceBlock name="logo"&gt;
        &lt;arguments&gt;
            &lt;argument name="logo_file" xsi:type="string"&gt;images/logo.png&lt;/argument&gt;
        &lt;/arguments&gt;
&lt;/referenceBlock&gt;
</code></pre>
<h2 id="block-sets-template">使用块来设置模板</h2>
<p>要设置模板的块，使用<code>&lt;argument&gt;</code>指令来传递。</p>
<p>示例：改变page模板的title块</p>
<pre><code>&lt;referenceBlock name="page.main.title"&gt;
        &lt;arguments&gt;
            &lt;argument name="template" xsi:type="string"&gt;Namespace_Module::title_new.phtml&lt;/argument&gt;
        &lt;/arguments&gt;
 &lt;/referenceBlock&gt;
</code></pre>
<p>模型的路径被指明关系到模型的<code>view/&lt;area&gt;/templates/</code>目录。<code>&lt;area&gt;</code>对应布局文件被使用的地方。</p>
<h2 id="modify-block-arguments">修改块参数</h2>
<p>要修改块参数，使用<code>&lt;referenceBlock&gt;</code>指令</p>
<p>示例：改变已存在块中的参数并添加一个新参数。</p>
<p>初始块声明：</p>
<pre><code>...
&lt;block class="Namespace_Module_Block_Type" name="block.example"&gt;
    &lt;arguments&gt;
        &lt;argument name="label" xsi:type="string"&gt;Block Label&lt;/argument&gt;
    &lt;/arguments&gt;
&lt;/block&gt;
...
</code></pre>
<p>扩展布局：</p>
<pre><code>...
&lt;referenceBlock name="block.example"&gt;
    &lt;arguments&gt;
        &lt;!-- Modified block argument --&gt;
        &lt;argument name="label" xsi:type="string"&gt;New Block Label&lt;/argument&gt;
        &lt;!- Newly added block argument --&gt;
        &lt;argument name="custom_label" xsi:type="string"&gt;Custom Block Label&lt;/argument&gt;
    &lt;/arguments&gt;
&lt;/referenceBlock&gt; 
...
</code></pre>
<h2 id="methods-set-properties">使用块对象方法来设置块性能</h2>
<p>有两种方式访问块对象方法：</p>
<ul>
<li>对<code>&lt;block&gt;</code>或<code>&lt;referenceBlock&gt;</code>使用&lt;argument&gt;指令</li>
<li>使用&lt;action&gt;指令。不推荐使用该方法，不过可以用来调用未被重构，不能用<code>&lt;argument&gt;</code>的方法。</li>
</ul>
<p>示例1：使用<code>&lt;argument&gt;</code>为产品页面设置CSS类并添加一个属性</p>
<p>扩展布局：</p>
<pre><code>&lt;referenceBlock name="page.main.title"&gt;
		&lt;arguments&gt;
		    &lt;argument name="css_class" xsi:type="string"&gt;product&lt;/argument&gt;
		    &lt;argument name="add_base_attribute" xsi:type="string"&gt;itemprop="name"&lt;/argument&gt;
		&lt;/arguments&gt;
	&lt;/referenceBlock&gt;
</code></pre>
<p>示例2：使用<code>&lt;action&gt;</code>设置页面标题</p>
<p>扩展布局：</p>
<pre><code>...
	&lt;referenceBlock name="page.main.title"&gt;
	    &lt;action method="setPageTitle"&gt;
	        &lt;argument translate="true" name="title" xsi:type="string"&gt;Catalog Advanced Search&lt;/argument&gt;
	    &lt;/action&gt;
	&lt;/referenceBlock&gt;
	...
</code></pre>
<h2 id="rearrange-elements">元素重新排序</h2>
<p>在布局文件中你可以改变页面中元素的顺序，使用下面的方法即可实现：</p>
<ul>
<li><code>&lt;move&gt;</code>指令：允许改变元素的顺序和父亲。</li>
<li><code>&lt;block&gt;</code>的<code>before</code>和<code>after</code>属性：允许改变有同一父亲的元素的顺序。</li>
</ul>
<p><code>&lt;move&gt;</code>使用示例：将产品页面中的stock availability和SKU块放在产品价格旁边。</p>
<p>在Magento Blank主题中这些元素的位置如下：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization before" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_layout_customization1.png" width="840px" /></div>
<p>让我们将产品库存和SKU块放到产品价格块的后面，将review块从product-info-price容器中移出。要实现这些，在<code>app/design/frontend/OrangeCo/orange/Magento_Catalog/layout/</code>目录下添加<code>catalog_product_view.xml</code>。</p>
<pre><code>&lt;page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;move element="product.info.stock.sku" destination="product.info.price" after="product.price.final"/&gt;
        &lt;move element="product.info.review" destination="product.info.main" before="product.info.price"/&gt;
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p>这将使得产品页面看起来像这样：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 layout customization after" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_layout_customization2.png" width="840px" /></div>
<h2 id="remove-elements">移除元素</h2>
<p>使用<code>&lt;referenceBlock&gt;</code>和<code>&lt;referenceContainer&gt;</code>的<code>remove</code>属性可移除元素。</p>
<p>示例：移除店铺页面中的Compare Products侧边栏</p>
<p>这个块在<code>app/code/Magento/Catalog/view/frontend/layout/default.xml</code>中被声明：</p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
...
        &lt;referenceContainer name="sidebar.additional"&gt;
            &lt;block class="Magento\Catalog\Block\Product\Compare\Sidebar" name="catalog.compare.sidebar" template="product/compare/sidebar.phtml"/&gt;
        &lt;/referenceContainer&gt;
...
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p>要移除这个块，你需要在你的主题中扩展<code>default.xml</code>：</p>
<p><code>&lt;theme_dir&gt;/Magento_Catalog/layout/default.xml</code></p>
<p>在这个文件中，引用已被添加了<code>remove</code>属性的元素：</p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
...
        &lt;referenceBlock name="catalog.compare.sidebar" remove="true" /&gt;
...
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<h2 id="replace-elements">替换元素</h2>
<p>要替换元素，你可以移除它然后添加一个新的。</p>
<h3>相关文章：</h3>
<ul>
<li><a href="http://www.360magento.com/blog/magento2-xml-instructions/">Magento2布局指令</a></li>
<li><a href="http://www.360magento.com/blog/magento2-layout-extend/">Magento2如何扩展一个布局</a></li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 25 Feb 2016 08:16:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何更新Magento插件]]></title>
      <link>https://www.360magento.com/blog/magento-update-modules/</link>
      <description><![CDATA[<p>要确认Magento插件的更新，首先你需要登录到后台。然后进入<strong>System -&gt; Magento Connect -&gt; Magento Connect Manager</strong>。在Extensions标签中点击<strong>Check for Upgrades</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento update modules" src="http://7xjryy.com1.z0.glb.clouddn.com/update-modules-1.jpg" width="auto" /></div>
<p>Magento连接管理器会自动连接到服务器并检查可用的升级。如果你的插件中有已发布的升级版，它们的背景色会被标记为黄色，你可以将升级应用到你的插件。注意！在升级前对你的Magento网上商店进行备份是十分重要的。在<strong>Action</strong>的下拉列表里你可以选择想要升级到的版本。然后点击<strong>Commit Changes</strong>进行升级。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento after update modules" src="http://7xjryy.com1.z0.glb.clouddn.com/update-modules-2.jpg" width="auto" /></div>
<p>你所选择的升级包将被自动下载并应用。</p>
<p>插件升级完成后你可以通过Refresh按钮来刷新页面。然后检测插件的状态，你会发现升级后的插件的黄色背景色消失了。Installed列中也会变为你刚才所安装的版本。</p>
<p>现在你可以点击Return to Admin，检查你的插件是否有新的可用配置。当然，也要确认你的网上商店工作正常，没有错误。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 19 Feb 2016 13:56:25 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2布局的覆盖]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-override/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>并不是所有的自定义布局都能通过扩展现有布局来实现。如果自定义的量很大时，可以覆盖所需的布局文件。这就意味着你在主题中新建的布局文件将被用来代替默认的主题布局文件。</p>
<p>在这篇文章中，页面布局，页面配置和通用布局被称为布局文件，它们的覆盖是一样的。</p>
<p>这类覆盖了默认或父主题的布局文件被称为覆盖布局文件。</p>
<h2>关于自定义覆盖布局的例子</h2>
<ul>
<li>抑制方法调用（如果块里有取消原始调用的方法，覆盖就没有必要了。这种情况下，你可以通过在取消方法调用的位置添加布局文件来自定义布局。）</li>
<li>修改方法参数</li>
<li>使用<code>remove</code>属性取消块/容器的输出</li>
<li>为块和容器设置XML属性</li>
<li>移除块参数</li>
<li>修改并抑制句柄包容</li>
<li>移除所有句柄指令，通过声明一个空句柄覆盖布局文件</li>
</ul>
<h2>如何覆盖一个布局</h2>
<h3>覆盖base布局</h3>
<p>在如下位置放置一个同名的布局文件：</p>
<pre><code>&lt;theme_dir&gt;
  |__/&lt;Namespace_Module&gt;
    |__/layout
      |__/override
         |__/base
           |--&lt;layout1&gt;.xml
           |--&lt;layout2&gt;.xml
</code></pre>
<p>这些文件覆盖如下布局：</p>
<ul>
<li><code>&lt;module_dir&gt;/view/frontend/layout/&lt;layout1&gt;.xml</code></li>
<li><code>&lt;module_dir&gt;/view/frontend/layout/&lt;layout2&gt;.xml</code></li>
</ul>
<h3>覆盖主题布局</h3>
<p>在如下位置放置一个同名的布局文件：</p>
<pre><code>&lt;theme_dir&gt;
  |__/&lt;Namespace_Module&gt;
    |__/layout
      |__/override
         |__/theme
            |__/&lt;Parent_Vendor&gt;
               |__/&lt;parent_theme&gt;
                  |--&lt;layout1&gt;.xml
                  |--&lt;layout2&gt;.xml
</code></pre>
<p>这些文件覆盖如下布局：</p>
<ul>
<li><code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout1&gt;.xml</code></li>
<li><code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/&lt;layout1&gt;.xml</code></li>
</ul>
<p>注意：要覆盖页面布局文件时将文件名'layout'替换为'page_layout'</p>
<h2>自定义错误</h2>
<p>虽然布局覆盖机制提供了极大的定制灵活性，它也可以进行逻辑相关的改变。我们强烈建议你不要做以下修改：</p>
<ul>
<li>更改块名或别名。块的名字不应该被修改，块的别名也应该与父元素中的保持一致。</li>
<li>更改句柄继承。例如，你不应该修改页面类型的父句柄。</li>
</ul>
<h3>相关文章</h3>
<ul>
<li><a href="http://www.360magento.com/blog/layout-extend/">Magento2如何扩展一个布局</a></li>
<li><a href="http://www.360magento.com/blog/magento2-theme-create/">创建magento2主题</a></li>
<li><a href="http://www.360magento.com/blog/magento2-xml-instructions/">Magento2布局指令</a></li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 16 Feb 2016 14:09:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何安装Magento模型/插件]]></title>
      <link>https://www.360magento.com/blog/magento_connect/</link>
      <description><![CDATA[<p>Magento具有内置的为线上店铺安装附加模型的功能。基本上，你所需要的就是插件的key以及点击几下。在这篇教程中，我们将详细解释如何通过Magento Connet为Magento安装附加的模型/插件。另外，我们也将说明如何升级已有的模型/插件。首先，你需要进入Magento的管理员区域。然后进入 <strong>System -&gt; Magento Connect -&gt; Magento Connect Manager。</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento connet" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-1.jpg" width="auto" /></div>
<p>Magento Connect Manager页面打开后你将被要求再次提供管理凭据。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento connet admin" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-2.jpg" width="auto" /></div>
<p>登录后你将看到两个区域：<strong>Extensions</strong>和<strong>Settings</strong>。建议首先在Settings区域验证被选择的设置。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento connet setting" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-3.jpg" width="auto" /></div>
<p>在<strong>Setting</strong>区域，有几个选项你可以按需配置。当然，前提是你知道你正在做什么。保持默认值是安全的。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento connet setting state" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-4.jpg" width="auto" /></div>
<p>Preferred State选项控制你安装的插件状态。有三个状态：稳定，测试和阿尔法。针对在线网站推荐选择稳定版。设置为测试/阿尔法能让你检查插件是否为最新版本，但是一般不推荐测试版插件，尤其是阿尔法状态的插件可能有bug并可能破坏你线上网店的功能。在插件下载和升级前做备份是非常重要的。这样的话，在下载安装插件后发生冲突的情况下，你可以运行备份进行恢复。做好备份后你就可以进入Magento Connect Manager-&gt; Extensions标签，点击Magento Connect链接。</p>
<p>这将为Magento Connect打开一个新的窗口并让你浏览可用的插件。这里有搜索功能，而且模型分为几类。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento available extensions" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-5.jpg" width="auto" /></div>
<p>这里有各种插件，有些是免费的。不论哪种情况都需要注册来获取插件key。指令是根据特定的插件。当你选择一个插件，点击<strong>Install Now</strong>按钮并选择相匹配的Magento Connect版本（Magento1.5以上选择版本2.0，其它保持1.0）。阅读插件许可协议，勾选"I agree to the extension license agreement"。最后点击<strong>Get Extension Key</strong>按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento extensions version" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-6.jpg" width="auto" /></div>
<p>你将获取插件的key。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento extensions key" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-7.jpg" width="auto" /></div>
<p>这就是你需要复制并粘贴到你Magento Connect区域的key。然后点击<strong>Install</strong>按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento extensions install" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-8.jpg" width="auto" /></div>
<p>新的插件会自动下载和安装。如果安装过程出现问题，将会显示相关信息，以便你知道如何去解决它。插件安装完成后，成功安装界面将会出现：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento extensions install success" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-connect-9.jpg" width="auto" /></div>
<p>插件安装完成后返回Magento后台并按需调整设置是很重要的。当然也要确保你网上店铺有正确的功能并不存在错误。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 09 Feb 2016 14:44:44 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2如何扩展一个布局]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-extend/</link>
      <description><![CDATA[<h2>创建一个布局扩展文件</h2>
<p>在Magento系统中扩展布局你只需要创建一个包含修改内容的扩展布局文件，而不是复制大量的页面布局或页面配置代码并修改你想要改变的部分。</p>
<p>要添加一个扩展页面配置或通用布局文件：</p>
<p>将布局文件放在如下位置：</p>
<pre><code>&lt;theme_dir&gt;
 |__/&lt;Namespace&gt;_&lt;Module&gt;
   |__/layout
     |--&lt;layout1&gt;.xml
     |--&lt;layout2&gt;.xml
</code></pre>
<p>例如，自定义<code>&lt;Magento_Catalog_module_dir&gt;/view/frontend/layout/catalog_product_view.xml</code>布局，你需要在你自定义的主题中添加一个同样名字的布局，就像这样：<code>&lt;theme_dir&gt;/Magento_Catalog/layout/catalog_product_view.xml</code></p>
<p>要添加一个扩展页面布局文件：</p>
<p>将文件放在如下位置：</p>
<pre><code>&lt;theme_dir&gt;
 |__/&lt;Namespace&gt;_&lt;Module&gt;
   |__/page_layout
     |--&lt;layout1&gt;.xml
     |--&lt;layout2&gt;.xml
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 18 Jan 2016 14:14:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2布局文件类型]]></title>
      <link>https://www.360magento.com/blog/magento2-layout-types/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>对于一个特定的页面，其布局主要被两个重要的布局组件定义：页面布局文件和页面配置文件。</p>
<p>一个页面布局文件定义页面线框，例如，一列布局。技术页面布局是.xml文件，定义html页面<code>&lt;body&gt;</code>区域内的结构。页面布局功能只是容器。所有的页面布局声明应在页面布局声明文件中声明。</p>
<p>页面配置也是一个.xml文件。它定义详细的结构（页面头部，底部等），内容和页面元信息，包括使用的页面布局。页面配置功能包括主元素和块（尤其是类和容器）。</p>
<p>我们还区分了第三类布局文件，通用布局。它们是定义内容和HTML页面组成中<code>&lt;body&gt;</code>区域详细结构的.xml文件。这些文件用于返回Ajax请求，电子邮件，HTML片段等页面。</p>
<p>本文给出了每种布局文件类型的详细描述。</p>
<h2>页面布局</h2>
<p>页面布局声明页面区域内的线框，如一列布局或者两列布局。</p>
<p>允许的布局指令：</p>
<ul>
<li>&lt;container&gt;</li>
<li>&lt;referenceContainer&gt;</li>
<li>&lt;move&gt;</li>
<li>&lt;update&gt;</li>
</ul>
<p>页面布局示例：</p>
<p><code>&lt;Magento_Theme_module_dir&gt;/view/frontend/page_layout/2columns-left.xml</code></p>
<pre><code>&lt;layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd"&gt;
    &lt;update handle="1column"/&gt;
    &lt;referenceContainer name="columns"&gt;
        &lt;container name="div.sidebar.main" htmlTag="div" htmlClass="sidebar sidebar-main" after="main"&gt;
            &lt;container name="sidebar.main" as="sidebar_main" label="Sidebar Main"/&gt;
        &lt;/container&gt;
        &lt;container name="div.sidebar.additional" htmlTag="div" htmlClass="sidebar sidebar-additional" after="div.sidebar.main"&gt;
            &lt;container name="sidebar.additional" as="sidebar_additional" label="Sidebar Additional"/&gt;
       &lt;/container&gt;
    &lt;/referenceContainer&gt;
&lt;/layout&gt;
</code></pre>
<h3>页面布局文件常规位置</h3>
<p>常规页面布局位置如下：</p>
<ul>
<li>Module page layouts（模型页面布局）：<code>&lt;module_dir&gt;/view/frontend/page_layout</code></li>
<li>Theme page layouts:（主题页面布局）：<code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/page_layout</code></li>
</ul>
<h3>页面布局声明</h3>
<p>要能够使用一个布局为实际的页面进行渲染，你需要在<code>layouts.xml</code>中声明它。</p>
<p>常规布局声明文件可能位于下面位置之一：</p>
<ul>
<li>Module layout declarations（模型布局声明）：<code>&lt;module_dir&gt;/view/frontend/layouts.xml</code></li>
<li>Theme layout declaration（主题布局声明）：<code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layouts.xml</code></li>
</ul>
<p>使用<code>&lt;layout&gt;&lt;/layout&gt;</code>指令声明布局文件，如下指定：</p>
<ul>
<li><code>&lt;layout id="layout_file_name"&gt;</code>例如，<code>2columns-left.xml</code>页面布局如下声明：<code>&lt;layout id = "2columns-left"/&gt;</code></li>
<li><code>&lt;label translate="true|false"&gt;{Label_used_in_Admin}&lt;/label&gt;</code></li>
</ul>
<p>页面布局声明文件示例：</p>
<p><code>&lt;Magento_Theme_module_dir&gt;/view/frontend/layouts.xml</code></p>
<pre><code>&lt;page_layouts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/PageLayout/etc/layouts.xsd"&gt;
    &lt;layout id="1column"&gt;
        &lt;label translate="true"&gt;1 column
    &lt;/layout&gt;
    &lt;layout id="2columns-left"&gt;
        &lt;label translate="true"&gt;2 columns with left bar
    &lt;/layout&gt;
    &lt;layout id="2columns-right"&gt;
        &lt;label translate="true"&gt;2 columns with right bar
    &lt;/layout&gt;
    &lt;layout id="3columns"&gt;
        &lt;label translate="true"&gt;3 columns
   &lt;/layout&gt;
&lt;/page_layouts&gt;
</code></pre>
<h2>页面配置</h2>
<p>页面配置在一个页面布局文件中定义添加到线框的内容。一个页面配置也包含页面元信息和<code>&lt;head&gt;</code>内容。</p>
<h3>页面配置文件常规位置</h3>
<p>常规页面配置文件位于下面位置：</p>
<ul>
<li>Module page configurations（模型页面配置）： <code>&lt;module_dir&gt;/view/frontend/layout</code></li>
<li>Theme page configurations（主题页面配置）： <code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout</code></li>
</ul>
<h3>页面配置结构和允许的布局指令</h3>
<p>下表描述了页面配置文件的指令。要查看通用布局指令请看<a href="http://www.360magento.com/blog/magento2-xml-instructions/ target=">《Magento2布局指令》</a></p>
<table>
<tbody>
<tr><th>Element</th><th colspan="1">Attributes</th><th colspan="1">Parent of</th><th>Description</th></tr>
<tr>
<td><code><span>&lt;page&gt;&lt;/page&gt;</span></code></td>
<td colspan="1">
<ul>
<li><code>layout = {layout}</code></li>
<li><code>xsi:noNamespaceSchemaLocation ="{path_to_schema}"</code></li>
</ul>
</td>
<td colspan="1">
<ul>
<li><code>&lt;html&gt;</code></li>
<li><code>&lt;head&gt;</code></li>
<li><code>&lt;body&gt;</code></li>
<li><code>&lt;update&gt;</code></li>
</ul>
</td>
<td>Mandatory root element.</td>
</tr>
<tr>
<td colspan="1"><code>&lt;html&gt;&lt;/html&gt;</code></td>
<td colspan="1">
<p>none</p>
</td>
<td colspan="1">
<ul>
<li><code>&lt;attribute&gt;</code></li>
</ul>
</td>
<td colspan="1"><span>Mandatory element.</span></td>
</tr>
<tr>
<td colspan="1"><code>&lt;head&gt;&lt;/head&gt;</code></td>
<td colspan="1">none</td>
<td colspan="1">
<ul>
<li><code>&lt;title&gt;</code></li>
<li><code>&lt;meta&gt;</code></li>
<li><code>&lt;link&gt;</code></li>
<li><code>&lt;css&gt;</code></li>
<li><code>&lt;script&gt;</code></li>
</ul>
</td>
<td colspan="1">&nbsp;</td>
</tr>
<tr>
<td colspan="1"><code>&lt;body&gt;&lt;/body&gt;</code></td>
<td colspan="1">none</td>
<td colspan="1">
<ul>
<li><code>&lt;block&gt;</code></li>
<li><code>&lt;container&gt;</code></li>
<li><code>&lt;move&gt;</code></li>
<li><code>&lt;attribute&gt;</code></li>
<li><code>&lt;referenceBlock&gt;</code></li>
<li><code>&lt;referenceContainer&gt;</code></li>
<li><code>&lt;action&gt;</code></li>
</ul>
</td>
<td colspan="1">&nbsp;</td>
</tr>
<tr>
<td colspan="1"><code>&lt;attribute&gt;</code></td>
<td colspan="1">
<ul>
<li><code>name = {arbitrary_name}</code></li>
<li><code>value = {arbitrary_value}</code></li>
</ul>
</td>
<td colspan="1">&nbsp;</td>
<td colspan="1">
<p>Specified for <code>&lt;html&gt;</code>, rendered like following:</p>
<p><code>&lt;html name="value'&gt;</code></p>
</td>
</tr>
<tr>
<td colspan="1">
<p><code>&lt;title&gt;</code></p>
</td>
<td colspan="1">none</td>
<td colspan="1">none</td>
<td colspan="1">Page title</td>
</tr>
<tr>
<td colspan="1">
<p><code>&lt;meta&gt;</code></p>
</td>
<td colspan="1">
<ul>
<li><span><code>content</code></span></li>
<li><span><code>charset</code></span></li>
<li><span><code>http-equiv</code></span></li>
<li><span><code>name</code></span></li>
<li><span><code>scheme</code></span></li>
</ul>
</td>
<td colspan="1"><span>none</span></td>
<td colspan="1">&nbsp;</td>
</tr>
<tr>
<td colspan="1">
<p><code>&lt;link&gt;</code></p>
</td>
<td colspan="1">
<ul>
<li><span><code>src</code></span></li>
<li><span><code>defer</code></span></li>
<li><span><code>ie_condition</code></span></li>
<li><span><code>charset</code></span></li>
<li><span><code>hreflang</code></span></li>
<li><span><code>media</code></span></li>
<li><span><code>rel</code></span></li>
<li><span><code>rev</code></span></li>
<li><span><code>sizes</code></span></li>
<li><span><code>target</code></span></li>
<li><span><code>type</code></span></li>
</ul>
</td>
<td colspan="1"><span>none</span></td>
<td colspan="1">&nbsp;</td>
</tr>
<tr>
<td colspan="1"><span><code>&lt;css&gt;</code></span></td>
<td colspan="1">
<ul>
<li><span><code>src</code></span></li>
<li><span><code>defer</code></span></li>
<li><span><code>ie_condition</code></span></li>
<li><span><code>charset</code></span></li>
<li><span><code>hreflang</code></span></li>
<li><span><code>media</code></span></li>
<li><span><code>rel</code></span></li>
<li><span><code>rev</code></span></li>
<li><span><code>sizes</code></span></li>
<li><span><code>target</code></span></li>
<li><span><code>type</code></span></li>
</ul>
</td>
<td colspan="1"><span>none</span></td>
<td colspan="1">&nbsp;</td>
</tr>
<tr>
<td colspan="1">
<p><code>&lt;script&gt;</code></p>
</td>
<td colspan="1">
<ul>
<li><span><code>src</code></span></li>
<li><span><code>defer</code></span></li>
<li><span><code>ie_condition</code></span></li>
<li><span><code>async</code></span></li>
<li><span><code>charset</code></span></li>
<li><span><code>type</code></span></li>
</ul>
</td>
<td colspan="1"><span>none</span></td>
<td colspan="1">&nbsp;</td>
</tr>
</tbody>
</table>
<h2>通用布局</h2>
<p>通用布局定义HTML页面<code>&lt;body&gt;</code>区域内的内容和详细结构。</p>
<h3>通用布局文件常规位置</h3>
<p>常规通用布局文件位于以下位置：</p>
<ul>
<li>Module generic layouts（模型通用布局）：<code>&lt;module_dir&gt;/view/frontend/layout</code></li>
<li>Theme generic layouts（主题通用布局）：<code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout</code></li>
</ul>
<h3>通用布局结构和允许的布局指令</h3>
<p>下表描述了页面配置文件的指令。要查看通用布局指令请看<a href="http://www.360magento.com/blog/magento2-xml-instructions/ target=">《Magento2布局指令》</a></p>
<table>
<tbody>
<tr><th>Element</th><th colspan="1">Attributes</th><th colspan="1">Parent of</th><th>Description</th></tr>
<tr>
<td><code> &lt;layout&gt;&lt;/layout&gt; </code></td>
<td colspan="1">
<ul>
<li><code> xsi:noNamespaceSchemaLocation="{path_to_schema}" </code></li>
</ul>
</td>
<td colspan="1">
<ul>
<li><code>&lt;container&gt;</code></li>
<li><code>&lt;update&gt;</code></li>
</ul>
</td>
<td>Mandatory root element.</td>
</tr>
<tr>
<td><code> &lt;update&gt; </code></td>
<td colspan="1">
<ul>
<li><code>handle="{name_of_handle_to_include}"</code></li>
</ul>
</td>
<td colspan="1">none</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="1"><code>&lt;container&gt;</code></td>
<td colspan="1">
<ul>
<li><code>name="root"</code></li>
<li>For complete list of attributes, see <a href="http://www.360magento.com/blog/magento2-xml-instructions/ 

target=">Layout instructions</a></li>
</ul>
</td>
<td colspan="1">
<ul>
<li><code>&lt;block&gt;</code></li>
<li><code>&lt;container&gt;</code></li>
<li><code>&lt;referenceBlock&gt;</code></li>
<li><code>&lt;referenceContainer&gt;</code></li>
</ul>
</td>
<td colspan="1">Mandatory element</td>
</tr>
</tbody>
</table>
<p>通用布局示例：</p>
<pre><code>&lt;layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd"&gt;
    &lt;update handle="formkey"/&gt;
    &lt;update handle="adminhtml_googleshopping_types_block"/&gt;
    &lt;container name="root"&gt;
        &lt;block class="Magento\Backend\Block\Widget\Grid\Container" name="googleshopping.types.container" template="Magento_Backend::widget/grid/container/empty.phtml"/&gt;
    &lt;/container&gt;
&lt;/layout&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 08 Jan 2016 15:21:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento主题安装]]></title>
      <link>https://www.360magento.com/blog/magento_themes_install/</link>
      <description><![CDATA[<p>当你选好一个主题，进入它的详细页，点击<strong>Install Now</strong>，选择<strong>Magento Connect</strong>版本（Magento1.5以上选择2.0版本，其它的保持默认的1.0），同意扩展协议并点击<strong>Get Extension Key</strong>按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento theme extension key" src="http://7xjryy.com1.z0.glb.clouddn.com/install_magento_theme1.jpg" width="auto" /></div>
<p>扩展密钥将会呈现出来，所以你可以选择和复制它。然后，打开Magento后台，进入<strong>System -&gt; Magento Connect -&gt; Magento Connect Manager</strong>。再次输入管理员登录信息并在<strong>Paste extension key to install</strong>区域粘贴密钥。最后点击Install按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento theme install" src="http://7xjryy.com1.z0.glb.clouddn.com/install_magento_theme2.jpg" width="auto" /></div>
<p>安装完成后返回后台，进入<strong>System -&gt; Configuration -&gt; Design -&gt; Themes</strong>。在<strong>Default</strong>区域输入主题名并点击<strong>Save Config</strong>按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento theme change" src="http://7xjryy.com1.z0.glb.clouddn.com/install_magento_theme3.jpg" width="auto" /></div>
<p>前台页面也许没能正确地加载。原因可能是新主题的首页布局列数。你可以在<strong>CMS -&gt; Pages</strong>中解决这个问题。一个是两列，其它的都是一列。通过点击它们的status禁用第一个和启用第二个。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento cms page" src="http://7xjryy.com1.z0.glb.clouddn.com/install_magento_theme4.jpg" width="auto" /></div>
<p>现在前端页面就正确地显示新的主题了。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento new theme" src="http://7xjryy.com1.z0.glb.clouddn.com/install_magento_theme5.jpg" width="auto" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 04 Jan 2016 15:59:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento谷歌分析设置]]></title>
      <link>https://www.360magento.com/blog/magento_google_analytics/</link>
      <description><![CDATA[<p>谷歌分析是谷歌的一项免费服务，它可以让网站的拥有者和管理员监控他们网站的流量和转化率。Magento支持两种类型的跟踪：</p>
<ul>
<li>页面视图跟踪：列出访客的链接起源，即访客是从哪个链接进入你的店铺的。</li>
<li>电子商务跟踪：列出达成交易的客户极其购买的商品。</li>
</ul>
<p>首先，你需要在http://www.google.com/analytics/sign_up.html注册。你将收到一个谷歌分析帐号。把它记下来，因为你会在Magento设置时需要它。</p>
<p>现在，你需要在你的店铺里配置谷歌分析。登录你的Magento后台，进入<strong>System -&gt; Configuration -&gt; Sales -&gt; Google API</strong>，展开<strong>Google Analytics</strong>区域。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento google analytics.jpg" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_google_analytics.jpg" width="auto" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 31 Dec 2015 15:05:57 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2布局指令]]></title>
      <link>https://www.360magento.com/blog/magento2-xml-instructions/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>改变布局是Magento中自定义页面布局的两种方式之一（第二种方式是改变模板文件）。改变页面线框，修改页面布局文件；所有其它自定义的设置在页面配置或通过布局文件来执行。</p>
<p>使用布局指令来：</p>
<ul>
<li>移动页面元素到另一个父元素</li>
<li>添加内容</li>
<li>删除页面元素</li>
</ul>
<p>对于所有类型的布局文件来说基础指令集是相同的。这篇文章描述这些基本指令；至于如何在特定布局文件类型中使用的细节，请参阅下一篇文章。</p>
<h2>常用布局指令</h2>
<p>使用下面的布局指令来自定义你的布局：</p>
<ul>
<li><code>&lt;block&gt;</code></li>
<li><code>&lt;container&gt;</code></li>
<li><code>before</code>和<code>after</code>属性</li>
<li><code>&lt;action&gt;</code></li>
<li><code>&lt;referenceBlock&gt;</code>和<code>&lt;referenceContainer&gt;</code></li>
<li><code>&lt;move&gt;</code></li>
<li><code>&lt;update&gt;</code></li>
<li><code>&lt;argument&gt;</code></li>
</ul>
<h3>&lt;block&gt;</h3>
<p>定义一个块</p>
<p>详细信息：块是页面输出呈现出不同内容的单元-一片信息，一个用户界面元素-任何客户视觉上可见的东西。块使用模板来生成HTML。模块的例子有：分类列表，迷你购物车，产品标签和产品列表。</p>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>class（类）</td>
<td>生成特定块的类名，这个类对应一个实际输出的块。</td>
<td>类名</td>
<td>是的</td>
</tr>
<tr class="odd">
<td>name（名字）</td>
<td>用于处理分配到该属性的块，在每个生成的页面中名字必须是唯一的。 如果没有指定就会自动以 <code>ANONYMOUS_<em>n</em></code>的格式分配一个名字</td>
<td>0-9, A-Z, a-z, 下划线 (_), 点(.),破折号(-)。必须以字母开头。区分大小写。</td>
<td>否</td>
</tr>
<tr class="even">
<td>before(在&hellip;&hellip;之前）</td>
<td>用于块的位置。在相同父元素下，出于一个元素之前。在这个值中元素的名字或别名是指定的。使用破折号(-)将元素放在其他 元素之前。详细信息请看<a href="#fedg_xml-instrux_before-after">before和after属性</a></td>
<td>可能值:元素名或破折号(-)</td>
<td>否</td>
</tr>
<tr class="odd">
<td>after（在&hellip;&hellip;之后）</td>
<td>用于块的位置。在相同父元素下，出于一个元素之后。在这个值中元素的名字或别名是指定的。使用破折号(-)将元素放在其他 元素之后。详细信息请看<a href="#fedg_xml-instrux_before-after">before和after属性</a></td>
<td>可能值:元素名或破折号(-)</td>
<td>否</td>
</tr>
<tr class="even">
<td>模板</td>
<td>模板用来呈现该属性分配的块的功能。</td>
<td>模板文件名</td>
<td>否</td>
</tr>
<tr class="odd">
<td>as（别名）</td>
<td>作为父元素范围内的标识</td>
<td>0-9，A-Z，a-z，下划线(_)，点(.)，破折号(-)。区分大小写。</td>
<td>否</td>
</tr>
<tr class="odd">
<td>cacheable（可缓存）</td>
<td>定义块元素是否可缓存。这可以用于卡发目的并为页面动态元素提供服务</td>
<td><code>true（真）</code>或<code>false（假）</code></td>
<td>否</td>
</tr>
</tbody>
</table>
<p>要传递参数，使用<a href="#argument"><code>&lt;argument&gt;&lt;/argument&gt;</code></a>指令。</p>
<h3>&lt;container&gt;</h3>
<p>用于支持其它元素（如块和容器）的没有内容的结构。</p>
<p>详细信息：在视图输出生成时容器渲染子元素。它可以为空或包含一组<code>&lt;container&gt;</code>和<code>&lt;block&gt;</code> 元素。</p>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>名字</td>
<td>用于处理分配到该属性的容器，在每个生成的页面中名字必须是唯一的。</td>
<td>0-9, A-Z, a-z, 下划线 (_), 点(.),破折号(-)。必须以字母开头。区分大小写。</td>
<td>是</td>
</tr>
<tr class="odd">
<td>标签</td>
<td>用于在浏览器展示的任意名字</td>
<td>任何</td>
<td>否</td>
</tr>
<tr class="even">
<td>before</td>
<td>用于块的位置。在相同父元素下，出于一个元素之前。在这个值中元素的名字或别名是指定的。使用破折号(-)将元素放在其他 元素之前。详细信息请看<a href="#fedg_xml-instrux_before-after">before和after属性</a></td>
<td>可能值:元素名或破折号(-)</td>
<td>否</td>
</tr>
<tr class="odd">
<td>after（在&hellip;&hellip;之后）</td>
<td>用于块的位置。在相同父元素下，出于一个元素之后。在这个值中元素的名字或别名是指定的。使用破折号(-)将元素放在其他 元素之后。详细信息请看<a href="#fedg_xml-instrux_before-after">before和after属性</a></td>
<td>可能值:元素名或破折号(-)</td>
<td>否</td>
</tr>
<tr class="odd">
<td>as（别名）</td>
<td>作为父元素范围内的标识</td>
<td>0-9，A-Z，a-z，下划线(_)，点(.)，破折号(-)。区分大小写。</td>
<td>no</td>
</tr>
<tr class="odd">
<td>output</td>
<td>定义是否输出根元素。如果指定元素将被添加到输出列表。（如果没有指定，父元素渲染他的子元素）</td>
<td>除<code>toHtml</code>外的任何值。推荐值为<code>1</code>。</td>
<td>否</td>
</tr>
<tr class="even">
<td>htmlTag（html标签）</td>
<td>输出参数。如果指定，输出被抱进指定的Html标签中</td>
<td>&nbsp;</td>
<td>任何可用的html5标签</td>
<td>否</td>
</tr>
<tr class="odd">
<td>htmlId</td>
<td>输出参数。如果指定，参数值被添加到包着的元素。如果没有包着的元素，该属性就没有效果。</td>
<td>任何可用的html5标签<code>&lt;id&gt;</code>值。</td>
<td>否</td>
</tr>
<tr class="even">
<td>htmlClass（html类）</td>
<td>输出参数。如果指定，参数值被添加到包着的元素。如果没有包着的元素，该属性就没有效果。</td>
<td>任何可用的html5标签<code>&lt;class&gt;</code> 值。</td>
<td>否</td>
</tr>
</tbody>
</table>
<p>布局中使用的示例：</p>
<pre><code>...
&lt;container name="div.sidebar.additional" htmlTag="div" htmlClass="sidebar sidebar-additional" after="div.sidebar.main"&gt;
    &lt;container name="sidebar.additional" as="sidebar_additional" label="Sidebar Additional"/&gt;
&lt;/container&gt;
...
</code></pre>
<p>这将在页面布局中新加一行</p>
<h2 id="fedg_xml-instrux_before-after">before和after属性</h2>
<p>为帮助你按特定的顺序排列元素以满足设计，搜索引擎优化，实用或其它要求，Magento提供了<code>before</code>和<code>after</code>布局属性。</p>
<p>这些可选属性可被用在布局XML文件中，在公用的父元素中控制顺序。下面的表格给出你使用<code>before</code>和<code>after</code>属性后的结果。第一张表使用一个块作为定位元素。</p>
<table>
<tbody>
<tr><th>属性</th><th>值</th><th>描述</th></tr>
<tr class="even">
<td>before</td>
<td>破折号(-)</td>
<td>在父节点中显示在其它元素之前。</td>
</tr>
<tr class="odd">
<td>before</td>
<td>元素名字</td>
<td>块在该名字的元素之前显示。</td>
</tr>
<tr class="even">
<td>before</td>
<td>空值或元素名不存在</td>
<td>使用值<code>after</code>。如果值为空或者元素名不存在则被视为未被定位。</td>
</tr>
<tr class="even">
<td>after</td>
<td>破折号(-)</td>
<td>在父节点中显示在其它元素之后。</td>
</tr>
<tr class="odd">
<td>after</td>
<td>元素名字</td>
<td>块在该名字的元素之后显示。</td>
</tr>
<tr class="even">
<td>after</td>
<td>空值或元素名不存在</td>
<td>使用值<code>before</code>。如果值为空或者元素名不存在则被视为未被定位。</td>
</tr>
</tbody>
</table>
<h3>示例：</h3>
<table>
<tbody>
<tr><th>情况</th><th>结果</th></tr>
<tr class="even">
<td><code>before</code>和<code>after</code>属性都存在</td>
<td><code>after</code>优先。</td>
</tr>
<tr class="odd">
<td>Both <code>before</code> and <code>after</code>属性都不存在或为空</td>
<td>元素被视为未定位。其它元素按指定位置定位。未被定位的元素随机出现在与其它元素定位不冲突的位置。</td>
</tr>
<tr class="even">
<td>几个元素属性值<code>before</code> or <code>after</code>被设置为破折号(-)</td>
<td>所有元素显示在顶部 (或底部，属性为after时)，但该组顺序未被定义。</td>
</tr>
<tr class="odd">
<td>The <code>before</code>或<code>after</code>属性值中的元素不位于与该元素不在同一父节点中</td>
<td>元素处在一个随机位置但不与正确的元素位置冲突</td>
</tr>
</tbody>
</table>
<h3>&lt;action&gt;</h3>
<p><code>&lt;action&gt;</code>指令已被废弃。如果方法生成允许，使用<code>&lt;argument&gt;</code>来访问<code>&lt;block&gt;</code>或<code>&lt;referenceBlock&gt;</code>的公共API。</p>
<p>调用块API的公共方法：</p>
<p>详细信息：在块的生成过程中设置某个方法的执行。<code>&lt;action&gt;</code>结点必须位于块的结点范围。</p>
<p>示例：</p>
<pre><code>
&lt;block class="Magento\Module\Block\Class" name="block"&gt;
    &lt;action method="setText"&gt;
        &lt;argument name="text" translate="true" xsi:type="string"&gt;Text&lt;/argument&gt;
    &lt;/action&gt;
    &lt;action method="setEnabled"&gt;
        &lt;argument name="enabled" xsi:type="boolean"&gt;true&lt;/argument&gt;
    &lt;/action&gt;
&lt;/block&gt;
</code></pre>
<p><code>&lt;action&gt;</code>子节点被翻译成块的方法参数。子节点的名称是任意的。如果<code>&lt;action&gt;</code>下有多个同名的子节点，那么这些子节点会作为数组被传递。</p>
<p>在上面的例子中<code>&lt;arg1&gt;</code>的值作为和<code>&lt;arg2&gt;</code>的值组成的<code>array('one', 'two')</code>中的第一个参数被传递。所有可用的方法取决于块的实现。</p>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>method</td>
<td>块的公用方法类名，在块的生成过程中被调用。</td>
<td>块方法名</td>
<td>是</td>
</tr>
</tbody>
</table>
<p>要传递参数，使用<a href="#argument"><code>&lt;argument&gt;&lt;/argument&gt;</code></a>指令。</p>
<h3>&lt;referenceBlock&gt;和&lt;referenceContainer&gt;</h3>
<p>使用<code>&lt;referenceBlock&gt;</code>和<code>&lt;referenceContainer&gt;</code>来更新对应的<code>&lt;block&gt;</code>或<code>&lt;container&gt;</code>。例如，你如果使用<code>&lt;referenceBlock name="right"&gt;</code>，那么你指向的目标块就是<code>&lt;block name="right"&gt;</code>。</p>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>remove（移除）</td>
<td>允许移除或取消元素的输出，如果一个容器被移除，其子元素也被去除。</td>
<td>真/假</td>
<td>否</td>
</tr>
<tr class="even">
<td>display（显示）</td>
<td>允许禁用特定块或容器及其孩子的渲染(都是通过引用直接设置)。块/容器及它们的孩子各自的PHP对象仍然被生产并可供操作 。</td>
<td>真/假</td>
<td>否</td>
</tr>
</tbody>
</table>
<p><code>remove</code>属性是可选的，默认值为false。在你的布局中设置<code>remove</code>属性值为false来取消块或容器的输出。例如：</p>
<pre><code>&lt;referenceBlock name="block.name" remove="true" /&gt;</code></pre>
<p><code>display</code>属性是可选的，默认值为true。你可以在你的布局中重写这个值。当remove属性为true时，display属性被忽略。例如：</p>
<pre><code>&lt;referenceContainer name="container.name" display="false" /&gt;</code></pre>
<h3>&lt;ltmove&gt;</h3>
<p>设定声明的块或元素以特定的顺序作为另一个元素的子元素。</p>
<p>示例：</p>
<pre><code>&lt;move element="name.of.an.element" destination="name.of.destination.element" as="new_alias" after="name.of.element.after" before="name.of.element.before"/&gt;
</code></pre>
<ul>
<li>如果被移动的元素未被定义，则<code>&lt;move&gt;</code>被跳过。</li>
<li>如果<code>as</code>属性没有被定义，使用现有的元素别名。如果值不可用则用那么值来代替。</li>
<li>在布局生成过程中<code>&lt;move&gt;</code>指令在<code>&lt;remove&gt;</code>指令之前执行。这意味着任何元素移动到预定位置后都将被移除。</li>
</ul>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>element（元素）</td>
<td>要移动的元素的名称。</td>
<td>元素名</td>
<td>是</td>
</tr>
<tr class="odd">
<td>destination（目的地）</td>
<td>目标父元素的名称</td>
<td>元素名</td>
<td>是</td>
</tr>
<tr class="even">
<td>as（别名）</td>
<td>元素在新位置的别名。</td>
<td>0-9，A-Z，a-z，下划线(_)，点(.)，破折号(-)。区分大小写。</td>
<td>否</td>
</tr>
<tr class="odd">
<td>after | before</td>
<td>指定元素相对同级元素的位置。使用破折号（-）时元素在其它元素之后或之前。如果省略该值则元素在其它同级元素之后。</td>
<td>元素名</td>
<td>否</td>
</tr>
</tbody>
</table>
<h3>&lt;update&gt;</h3>
<p>包含一个特定的布局文件，如下使用：</p>
<pre><code>&lt;update handle="{name_of_handle_to_include}"/&gt;</code></pre>
<p>指定的句柄被包括并递归执行。</p>
<h3 id="argument">&lt;argument&gt;</h3>
<p>用于传递参数。</p>
<table>
<tbody>
<tr><th>属性</th><th>描述</th><th>值</th><th>必须性</th></tr>
<tr class="even">
<td>名称</td>
<td>参数名</td>
<td>唯一</td>
<td>是</td>
</tr>
<tr class="odd">
<td>xsi:type</td>
<td>参数类型</td>
<td>string|boolean|object|number|null|array</td>
<td>是</td>
</tr>
<tr class="even">
<td>translate</td>
<td>&nbsp;</td>
<td>真|假</td>
<td>否</td>
</tr>
</tbody>
</table>
<p>要传递多个参数时，使用下面的指令：</p>
<pre><code>&lt;arguments&gt;
   &lt;argument&gt;&lt;/argument&gt;
   &lt;argument&gt;&lt;/argument&gt;
   ...
&lt;/arguments&gt;
</code></pre>
<p>传递的参数为数组时，使用下面的指令：</p>
<pre><code>&lt;argument&gt;
   &lt;item&gt;&lt;/item&gt;
   &lt;item&gt;&lt;/item&gt;
   ...
&lt;/argument&gt;
</code></pre>
<p>在布局中设置的参数值可以在模块中使用<code>get{ArgumentName}()</code>和<code>has{ArgumentName}()</code>方法调用。无论是否有值被设置，最终返回一个布尔值。从<code>name</code>属性获取<code>{ArgumentName}</code>的方法是：获取<code>&lt;argument name="some_string"&gt;</code>值的方法名是<code>getSomeString()</code>。例如：在<code>app/code/Magento/Theme/view/frontend/layout/default.xml</code>布局文件中设置<code>css_class</code>的值：</p>
<pre><code>...
&lt;arguments&gt;
    &lt;argument name="css_class" xsi:type="string"&gt;header links&lt;/argument&gt;
&lt;/arguments&gt;
...
</code></pre>
<p>在<code>app/code/Magento/Theme/view/frontend/templates/html/title.phtml</code>文件中使用<code>css_class</code>的值：</p>
<pre><code>...
$cssClass = $this-&gt;getCssClass() ? ' ' . $this-&gt;getCssClass() : '';
...
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 30 Dec 2015 16:53:01 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento通讯管理]]></title>
      <link>https://www.360magento.com/blog/magento_newsletter/</link>
      <description><![CDATA[<p>告诉你的客户最新促销和折扣活动是很重要的。Magento通讯功能允许店铺管理员给订阅客户发送这些信息。 首先你需要开启客户同意接收订阅，该功能可以在Magento后台<strong>System-&gt; Configuration-&gt; Customers-&gt; Newsletter</strong>区域被打开。展开<strong>Subscription Options</strong>区域，修改<strong>Need to Confirm</strong>值为<strong>Yes</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="enable magento newsletter" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_newsletter1.jpg" width="auto" /></div>
<p>客户可以退订新闻。管理员可以通过下拉列表菜单定义退订电子邮件的发件人和模板。对于成功订阅和确认邮件发送者和模板也可以进行同样的操作。你可以使用同一个，也可以根据自己需求自定义它们。点击保存以确认修改。</p>
<p>下一步，你应该设置通讯模板。进入后台<strong>Newsletter -&gt; Newsletter Templates -&gt; Add New Template</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento new newsletter template" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_newsletter2.jpg" width="auto" /></div>
<p>输入模板名，邮件将被送达的对象，发送者姓名和邮箱以及通讯模板内容。填写完毕后可点击<strong>Preview Template</strong>进行预览，点击<strong>Save Template</strong>按钮保存模板。模板将被添加到对应的列表，你将能够编辑它。</p>
<p>当你计划发送信息给很多收件人时，你应该把列表分成小部分。你可以通过后台<strong>Newsletter -&gt; Newsletter Templates-&gt; Action -&gt; Queue Newsletter</strong>来配置和管理这个功能。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magentoqueue newsletter" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_newsletter3.jpg" width="auto" /></div>
<p>在<strong>Queue Date Start</strong>区域填写邮件发送的时间。这些信息将小批量地离开电子邮件服务器。确认其它选项，准备好后点击<strong>Save Newsletter</strong>按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento newsletter queue information" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_newsletter4.jpg" width="auto" /></div>
<p>你可以找到不同的通讯报道。在后台<strong>Newsletter-&gt; Newsletter Queue</strong>你可以监视通讯队列的进展。你可以在后台Newsletter -&gt; Newsletter Subscribers查看订阅邮件的客户列表。你可以手动取消它们。后台<strong>Newsletter-&gt; Newsletter Problem Reports</strong>区域显示在通讯发送过程中出现的错误，你可以采取必要的步骤来解决它们。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 29 Dec 2015 16:04:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento客户管理]]></title>
      <link>https://www.360magento.com/blog/magento_customer_manager/</link>
      <description><![CDATA[<p>新客户可以通过首页<strong>My Account</strong>或者下单过程来注册到你的网站。他们应该点击<strong>Create an Account</strong>按钮并填写详细信息：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento customer create" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_customer_manager1.jpg" width="auto" /></div>
<p>你可以通过后台Customers区域来创建新客户或者管理已有客户：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento customer manager" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_customer_manager2.jpg" width="auto" /></div>
<p>点击<strong>Edit</strong>按钮可改变客户详细信息。你可以改变所有的客户详细信息，包括用户名和密码，地址，监控订单，购物车，收藏产品，产品评价和标签，订阅的管理。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento customer edit" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_customer_manager3.jpg" width="auto" /></div>
<p>你可以通过后台<strong>Customers-&gt;Customer Groups</strong>来创建和管理客户组：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento customer group manager" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_customer_manager4.jpg" width="auto" /></div>
<p>你可以从后台<strong>Customers-&gt;Online Customers</strong>来观察在线的用户。你将要发送个客户的订阅信息在后台<strong>Newsletter</strong>处被撰写和管理。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento newsletter" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_customer_manager5.jpg" width="auto" /></div>
<p>你可以创建模板，管理订阅信息邮件传出的队列，订阅发送对象和问题报告的检查。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 28 Dec 2015 15:23:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2定位模板，布局和样式]]></title>
      <link>https://www.360magento.com/blog/magento2-locate-files/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>当你创建一个Magento主题时，你可能需要为默认主题和模型视图文件创建重写文件。那么在此之前，你必须决定Magento使用的是哪个模板，布局和样式文件。本文就描述如何做到这一点。</p>
<h2>定位模板</h2>
<p>要定位特定部分对应的前端或后台模块，你可以使用Magento内置的模板提示。</p>
<p>开启模板提示：</p>
<ol>
<li>点击<strong>Stores &gt; Configuration &gt; ADVANCED &gt; Developer</strong>。</li>
<li>在左上角的<strong>Scope</strong>下拉列表里选择你想要开启模板提示的视图。</li>
<li>在<strong>Debug</strong>标签里，设置<strong>Template Path Hints for storefront</strong>为<strong>Yes</strong>。要开启后台通道提示，设置<strong>Template Path Hints for Admin</strong>为<strong>Yes</strong>。</li>
<li>保存更改，点击右上角的<strong>Save Config</strong>。</li>
</ol>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 templates path hint" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-locate-files1.png" width="860px" /></div>
<p>现在，你已经开启了模板提示，刷新你想要修改的页面，查看模板文件路径或者模板提示显示的文件。</p>
<p>例如，开启模板提示后的产品详细页看起来是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 category page hint" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-locate-files2.png" width="860px" /></div>
<p>在本示例中，迷你购物车页面元素被定义在<code>&lt;Magento_Checkout_module_dir&gt;/view/frontend/templates/cart/minicart.phtml</code>模板。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 mini cart page" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-locate-files3.png" width="860px" /></div>
<p>（模板名称在元素上面）</p>
<p>开启模板提示的后台Customer页面看起来是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 admin template hints" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-locate-files4.png" width="860px" /></div>
<p>另外，你可以在文件系统中通过搜索系统生成的标题，CSS类名，块标题，标签或链接文字来找到对应的模块。例如，使用一个浏览器调试工具，你可以看到迷你购物车块的css类是<code>minicart-wrapper</code>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 minicart block css" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-locate-files5.png" width="860px" /></div>
<p>在app目录下搜索&ldquo;minicart-wrapper&rdquo;，得到的<code>.phtml</code>文件是<code>app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml</code>。由于不推荐修改默认文件，如果你想要修改这个模板就需要添加重写文件。重写模板的细节将会在后面的《自定义主题模板》中讲解。</p>
<h2>定位布局</h2>
<p>和模板一样，布局被存储在每个模型基础文件中。根据你感兴趣的元素位于哪个模板的模型，你可以轻松地定位布局文件。要定位模板，你可以使用模板提示或者在app目录下使用文本搜索。</p>
<p>在你决定模型以后，你可以在下面的位置中搜索布局：</p>
<ol>
<li><code>&lt;current_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/</code></li>
<li><code>&lt;parent_theme(s)_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/layout/</code></li>
<li><code>&lt;module_dir&gt;/frontend/layout/</code></li>
<li><code>&lt;module_dir&gt;/view/base/layout/</code></li>
</ol>
<p>这里没有直接的算法来发现准确的布局文件，但是大部分情况下，布局文件名是自我描述性的。你也可以搜索它们提到的对应模块。</p>
<p>示例：</p>
<p>比方说，当Blank主题被Magento应用为店铺视图时，你要定位在前端显示迷你购物车的布局文件。</p>
<p>使用模板提示我们发现对应的模板是<code>app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml</code>，由路径我们发现它是属于<code>Magento_Checkout</code>模型的。</p>
<p>让我们根据回退计划来寻找布局：</p>
<ol>
<li>检查<code>app/design/frontend/Magento/blank/Magento_Checkout/layout</code>，在这个目录中搜索模板名称&ldquo;minicart.phtml&rdquo;。没有找到相匹配的文件，所以我们进行回退级别的下一级，父主题布局。</li>
<li>在主题配置文件<code>theme.xml</code>中我们可以找到父主题的信息，父主题的名字在<code>&lt;parent&gt;&lt;/parent&gt;</code>节点指定。在<code>app/design/frontend/Magento/blank/theme.xml</code>中没有<code>&lt;parent&gt;节点，这意味着Blank主题没有父主题。所以我们该搜索回退等级的下一级：模型布局。</code></li>
<li>Magento_Checkout布局位于<code>app/code/Magento/Checkout/view/frontend/layout/</code>。在这个目录中搜索&ldquo;<code>minicart.phtml</code>&rdquo;，我们找到了要寻找的布局<code>app/code/Magento/Checkout/view/frontend/layout/default.xml</code>。</li>
</ol>
<p>在定位了必要的布局文件，你可以在你的主题文件夹中创建对应名字的主题来重写或者扩展主题的内容。</p>
<h2>定位样式</h2>
<p>要定位一个被应用到特定元素的CSS规则，找到包含这个元素页面的模板。或者你可以使用浏览器调试工具来定位类名。找到类名之后，在主题和模型样式目录中使用文本搜索来定位要找的<code>.less</code>或<code>.css</code>文件。根据下面的回退计划来搜索：</p>
<ol>
<li>主题样式 <code>&lt;current_theme_dir&gt;/web/css/</code></li>
<li>模型主题样式 <code>&lt;current_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web/css/</code></li>
<li>父主题样式 <code>&lt;parent_theme_dir&gt;/web/css/</code></li>
<li>前端模型样式 <code>&lt;module_dir&gt;/view/frontend/web/css/</code></li>
<li>base模型样式 <code>&lt;module_dir&gt;/view/base/web/css/</code></li>
</ol>
<p>示例：</p>
<p>当Blank主题被Magento应用为店铺视图时，让我们找出用于前端显示迷你购物车的CSS类。 在迷你购物车模板<code>app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml</code>中最高级的元素有<code>minicart-wrapper</code>类。所以，我们根据回退计划搜索&ldquo;<code>minicart-wrapper</code>&rdquo;。</p>
<ol>
<li>在<code>app/design/frontend/Magento/blank/web/css</code>搜索，返回无结果。</li>
<li>搜索<code>app/design/frontend/Magento/blank/Magento_Checkout/web/css</code>。&ldquo;<code>minicart-wrapper</code>&rdquo;样式被定义在<code>app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less</code>。</li>
</ol>
<p>在确定定义类的<code>.css</code>或<code>.less</code>文件后，你可以在你自定义的<code>.css</code>或<code>.less</code>中重写默认的类。详细的信息会在后面的CSS文章中讲解。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 27 Dec 2015 13:02:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2主题继承]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-inherit/</link>
      <description><![CDATA[<h2>本章内容</h2>
<p>主题继承使你可以轻松地扩展主题和减少维护工作。你可以使用现有的主题作为定制开发的基础，或者细微的店面设计更新，像节假日装饰。你可以添加重写和扩展文件，而不是复制原主题文件做修改。</p>
<p>主题继承的级别是不限定的。</p>
<p>主题继承是基于回退机制（保证如果一个视图文件没有在当前主题中被找到，系统就会在祖先主题，模型视图文件或者库中搜索）。 回退的顺序与静态文件（CSS，JavaScript，字体和图像），其它类型主题文件略有不同。本文描述每种主题文件的回退并提供如何重写祖先主题和模型设计的概念。</p>
<p>有关开发主题组件的全面信息，请参阅Magento2教程的后续章节。</p>
<h2>设置一个父主题</h2>
<p>一个父主题在子主题的<code>theme.xml</code>声明文件中被指明。</p>
<p>例如：OrangeCo的Orange主题继承自Magento的Blank主题。继承被声明在<code>app/design/frontend/OrangeCo/orange/theme.xml</code>，代码如下：</p>
<pre><code>&lt;theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd"&gt;
     &lt;title&gt;Orange&lt;/title&gt;
     &lt;parent&gt;Magento/blank&lt;/parent&gt; 
     &lt;media&gt;
         &lt;preview_image&gt;media/preview.jpg&lt;/preview_image&gt; 
     &lt;/media&gt;
&lt;/theme&gt;
</code></pre>
<p>父主题和子主题可以属于不同的供应商。例如，你自定义的主题可以继承Magento的Blank主题。</p>
<h2>重写静态资产</h2>
<p>静态资产，或静态视图文件，是样式，JavaScript，图像和字体。</p>
<p>要自定义父主题、模型视图或库文件里的视图文件，你可以通过添加一个相同名字的文件到相关位置来重写它们。特定的目录（系统在回退过程中搜索的地方）取决于模型内容是否对文件已知。下面是对两种情况的描述：</p>
<p>如果模型内容没有为文件做定义：</p>
<ol>
<li>当前主题静态文件：<code>&lt;theme_dir&gt;/web/</code></li>
<li>祖先静态文件，递归，直到到达一个没有父类的主题：<code>&lt;parent_theme_dir&gt;/web/</code></li>
<li>库静态视图文件：<code>lib/web/</code></li>
</ol>
<p>如果模型内容为文件做了定义：</p>
<ol>
<li>当前主题模型静态文件：<code>&lt;ttheme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web/</code>. 例如：<code>app/design/frontend/OrangeCorp/orange/Magento_Catalog/web/</code></li>
<li>祖先静态文件，递归，直到到达一个没有父类的主题：<code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/web/</code></li>
<li>前端模型静态视图文件：<code>&lt;module_dir&gt;/view/frontend/web/</code></li>
<li>base区域模型静态视图文件：<code>&lt;module_dir&gt;/view/base/web/</code></li>
</ol>
<p>示例：</p>
<p>一家名为OrangeCo的公司有一个名为Orange的主题。主题文件位于：<code>app/design/frontend/OrangeCo/orange</code>。Orange继承自Magento的Blank主题。</p>
<p>让我们想像一下，OrangeCo需要添加一些冬季假期装饰。所以它创建以一个继承自Orange的新主题<code>orange_winter</code>，位于<code>app/design/frontend/OrangeCo/orange_winter</code>。在Orange主题中底部背景图位于<code>app/design/frontend/OrangeCo/orange/web/images/background.jpg</code>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 theme background1" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-theme-inherit1.jpg" width="auto" /></div>
<p>OrangeCo希望它被替换成一个节日的背景。于是一个有同样名字的新的背景图被放在<code>app/design/frontend/OrangeCo/orange_winter/web/images/background.jpg</code></p>
<p>当Orange Winter主题被应用，新的节日图片就会重写Orange主题中的图片，那么前台效果就是这样：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 theme background2" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-theme-inherit2.jpg" width="auto" /></div>
<h2>重写模板</h2>
<p>模板的回退计划如下（模型内容对它们来说是已知的）：</p>
<ol>
<li>当前主题模块：<code>&lt;theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/templates</code></li>
<li>祖先主题模块，递归，直到到达一个没有父类的主题：<code>&lt;parent_theme_dir&gt;/&lt;Namespace&gt;_&lt;Module&gt;/templates</code></li>
<li>模型模板： <code>&lt;module_dir&gt;/view/frontend/templates</code></li>
</ol>
<p>所以如果你需要自定义一个特定的模板，你需要创建一个同样名字的模板放在主题模型文件<code>../templates/&lt;path_to_template&gt;</code> 目录下。其中，<code>&lt;path_to_template&gt;</code>是原始模板的路径。</p>
<p>例如：你想要重写<code>&lt;Magento_Catalog_module_dir&gt;/view/frontend/templates/category/widget/link/link_block.phtml</code>，那么<code>&lt;path_to_template&gt;</code>就是<code>category/widget/link/</code>。</p>
<p>示例：在默认情况下，根据模型文件，迷你购物车中的产品是在Checkout按钮之下的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 theme minicart1" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-theme-inherit3.png" width="auto" /></div>
<p>顺序是在<code>&lt;Magento_Checkout_module_dir&gt;/view/frontend/templates/cart/minicart.phtml</code>模型文件中被定义的。Blank主题没有重写这个模板。OrangeCo希望他们的产品展示在Go to Checkout按钮之前。他们需要在Orange主题文件夹内为对应的模型添加一个重写模板：<code>app/design/frontend/OrangeCo/orange/Magento_Checkout/templates/cart/minicart.phtml</code>。注意，主题<code>templates</code>目录中的模块路径与模型相对应。改变顺序之后，OrangeCo的购物车看起来是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 theme minicart2" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-theme-inherit4.png" width="auto" /></div>
<p>你可以在之后的文章中找到详细的代码和其它任务。</p>
<h2>扩展布局</h2>
<p>布局进程机制不涉及回退。系统按下面的顺序收集主题文件：</p>
<ol>
<li>当前主题布局：<code>&lt;theme_dir&gt;/&lt;Vendor&gt;_&lt;Module&gt;/layout/</code></li>
<li>祖先主题布局，递归，直到到达一个没有父类的主题：<code>&lt;parent_theme_dir&gt;/&lt;Vendor&gt;_&lt;Module&gt;/layout/</code></li>
<li>前端区域的模型主题：<code>&lt;module_dir&gt;/view/frontend/layout/</code></li>
<li>Base区域的模型主题：<code>&lt;module_dir&gt;/view/base/layout/</code></li>
</ol>
<p>与模板、图片不同，主题不仅能被重写还能被扩展。推荐的自定义布局是通过创建主题扩展布局文件来扩展它。 要添加一个扩展布局文件：把你自定义的布局文件放在：<code>&lt;theme_dir&gt;/&lt;Vendor&gt;_&lt;Module&gt;/layout/</code>目录下。</p>
<p>例如：</p>
<p>OrangeCo决定移除<code>&lt;Magento_Theme_module_dir&gt;/view/frontend/layout/default.xml</code>中定义的底部&ldquo;Report bugs&rdquo;链接。要实现它，他们添加了一个扩展主题文件在<code>app/design/frontend/OrangeCo/orange/Magento_Theme/layout/default.xml</code>。</p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;remove name="report.bugs"/&gt;
   &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p>更多关于主题扩展的知识将会在《扩展主题》中提到。</p>
<h3>重写布局</h3>
<p>虽然不推荐重写布局，但这也是特定自定义任务的一种解决方式。要重写祖先主题的布局文件：</p>
<ul>
<li>创建同样名字的布局文件到<code>&lt;theme_dir&gt;/&lt;Vendor&gt;_&lt;Module&gt;/layout/override/theme/&lt;Vendor&gt;/&lt;ancestor_theme&gt;</code>目录下</li>
</ul>
<p>要重写模型布局文件（base布局）</p>
<ul>
<li>创建同样名字的布局文件到<code>&lt;theme_dir&gt;/&lt;Vendor&gt;_&lt;Module&gt;/layout/override/base</code></li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 25 Dec 2015 15:57:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为Magento2主题配置图片性能]]></title>
      <link>https://www.360magento.com/blog/magento2-images-properties/</link>
      <description><![CDATA[<h2>为Magento2主题配置图片性能</h2>
<p>Magento2中用于前台的产品图片性能都被存储在<code>view.xml</code>配置文件中。本文提供所有的可用性能细节及配置方法。</p>
<h2>在view.xml中配置图片性能</h2>
<p><code>view.xml</code>通常位于主题的：</p>
<pre><code>&lt;theme_dir&gt;/etc/view.xml</code></pre>
<p>例如，<code>view.xml</code>在Magento Blank主题中的位置是：</p>
<pre><code>app/design/frontend/Magento/blank/etc/view.xml</code></pre>
<p>在<code>view.xml</code>中，图片性能被配置在<code>&lt;images module="Magento_Catalog"&gt;</code>元素内：</p>
<pre><code>&lt;images module="Magento_Catalog"&gt;
...
&lt;images/&gt;
</code></pre>
<p>每种被图片性能配置的类型图片是通过<code>&lt;image&gt;</code>元素的<code>id</code>和<code>type</code>属性定义的：</p>
<pre><code>&lt;images module="Magento_Catalog"&gt;
	&lt;image id="unique_image_id" type="image_type"&gt;
	...
	&lt;/image&gt;
&lt;images/&gt;
</code></pre>
<p>下面的表格描述属性的详情：</p>
<table>
<tbody>
<tr><th>属性</th><th>类型</th><th>描述</th></tr>
<tr>
<td><code> id（标识） </code></td>
<td>string（字符串）</td>
<td>
<p>图片标识，主题中是唯一的</p>
<p>可以是任何值，但在Magento主题中<code>ID</code>是有意义的并描述图像的位置。</p>
<p>例如，购物车中的交叉销售产品图片&lt;code&gt;ID是<code>cart_cross_sell_products</code>.</p>
<p><code>ID</code>被用在<code>.phtml</code>模版来给特定网页特定位置的图片定义类型和性能。</p>
</td>
</tr>
<tr>
<td><code> type（类型） </code></td>
<td>string（字符串）</td>
<td>通过指定的&lt;code&gt;ID来定义图片的类型。允许值为：
<ul>
<li><code>image</code> - 对应Magento2后台中的Base Image</li>
<li><code>small_image</code> - 对应Magento2后台中的Small Image</li>
<li><code>swatch_image</code> - 对应Magento2后台中的Swatch Image</li>
<li><code>swatch_thumb</code> - 对应Magento2后台中的Swatch Image</li>
<li><code>thumbnail</code> - 对应Magento2后台中的Thumbnail Image</li>
</ul>
下面的图片说明了Magento2后台中的各种图片角色:<br /> <img class="attachment-full wp-post-image" alt="magento2 cache" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_image_roles.png" width="232px" /></td>
</tr>
</tbody>
</table>
<p>图片性能通过对应的元素而被定义，例如：</p>
<pre><code>&lt;images module="Magento_Catalog"&gt;
    &lt;image id="unique_image_id" type="image"&gt;
        &lt;width&gt;100&lt;/width&gt; &lt;!-- Image width in px --&gt; 
        &lt;height&gt;100&lt;/height&gt; &lt;!-- Image height in px --&gt;
    &lt;/image&gt;
&lt;/images&gt;
</code></pre>
<p>下面表格是所有可配置性能的列表：</p>
<table>
<tbody>
<tr><th>元素</th><th>属性值类型</th><th>描述</th><th>属性值必须性</th></tr>
<tr>
<td><code> width</code></td>
<td>整型</td>
<td>以像素为单位的图像宽度。</td>
<td>可选填</td>
</tr>
<tr>
<td><code> height</code></td>
<td>整型</td>
<td>以像素为单位的图像高度。</td>
<td>可选填</td>
</tr>
<tr>
<td><code> constrain</code></td>
<td>布尔型</td>
<td>如果被设置为<code>true</code>时，当图像小于配置值时不会扩大。默认值为：<code>true</code>。</td>
<td>可选填</td>
</tr>
<tr>
<td><code> aspect_ratio</code></td>
<td>布尔型</td>
<td>如果被设置为<code>true</code>，图片比例不会改变即使配置中需求。默认值为：<code>true</code>.</td>
<td>可选填</td>
</tr>
<tr>
<td><code> frame</code></td>
<td>布尔型</td>
<td>如果被设置为<code>true</code>, 图片不被裁剪。默认值为：<code>true</code>。只有当<code>aspect_ratio</code>被设置为 <code>true</code>时才可被应用。</td>
<td>可选填</td>
</tr>
<tr>
<td><code> 透明度 </code></td>
<td>布尔型</td>
<td>如果被设置为<code>true</code>，图片的透明背景被保存。如果设置为<code>false</code>，图片背景为白色（默认的)。你可以使用 <code>background</code>字段来设置背景色。默认值为：<code>true</code>。</td>
<td>可选填</td>
</tr>
<tr>
<td><code> 背景 </code></td>
<td>数组</td>
<td>图片的背景色。如果<code>transparency</code>被设置为<code>true</code>时，不被应用到透明背景图。</td>
<td>可选填</td>
</tr>
</tbody>
</table>
<h3>目录图片大小调整命令</h3>
<p>Magento_Catalog模型提供调整所有产品图片的Magento CLI命令。调整后的图片被存储在<code>/pub/media/catalog/product/cache</code>目录下。</p>
<p>catalog:images:resize命令没有选项和参数。</p>
<p>基本语法：<code>bin/magento catalog:images:resize</code></p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 21 Dec 2015 14:36:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento2后台应用和配置一个主题]]></title>
      <link>https://www.360magento.com/blog/theme-apply-configure/</link>
      <description><![CDATA[<h2>在Magento2后台应用和配置一个主题</h2>
<p>本文描述如何将一个主题应用到你的商店，禁用缓存和添加一个与主题无关的logo。</p>
<h2>禁用系统缓存</h2>
<p>当Magento系统缓存开启时，你必须每次都清理缓存来查看你的设计给前端带来的改变。为了避免这种情况，在更改设计的同时禁用某些系统缓存。你需要要这么做：</p>
<ol>
<li>后台进入<strong> System &gt; Tools &gt; Cache Management</strong>。</li>
<li>选择Layouts, Blocks HTML output, View files fallback, View files pre-processing and Page Cache cache types。</li>
<li>在<strong>Action</strong>选项中选择<strong>Disable</strong>并点击<strong>Submit</strong>。选择的缓存类型会显示成红色的DISABLED。</li>
</ol>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 cache" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2_cache.png" width="840px" /></div>
<p>如果你第二次应用一个主题，你可能需要手动清除<code>pub/static/frontend/&lt;Vendor&gt;/&lt;theme&gt;</code>目录。这个目录存储已发布的静态文件。</p>
<h2>应用一个主题</h2>
<p>在将你的主题添加到文件系统以后，你可以将它应用到你的店铺。去应用一个主题：</p>
<ol>
<li>进入后台<strong> CONTENT &gt; Design &gt; Themes</strong> 。确认你的主题在主题列表里。</li>
<li>进入<strong> Stores &gt; Configuration &gt; Design</strong> 。</li>
<li>在Scope下拉框里选择你主题想要应用的店视图。</li>
<li>在<strong> Design Theme</strong> 标签的<strong> Design Theme</strong> 下拉框里选择你最新创建的主题。</li>
<li>点击<strong> Save Config</strong> 。</li>
<li>查看效果，重载前端页面。</li>
</ol>
<p>如果在你的Magento后台面板中缓存是可用的，那么你必须清理缓存来查看效果。你可能还需要手动清理<code>pub/static/frontend</code>文件夹中已发布的静态文件。</p>
<h2>添加一个设计例外</h2>
<p>你可以为特定的用户代理设置指定的主题，而不用创建一个独立的店铺视图。要添加设计例外：</p>
<ol>
<li>进入后台<strong> CONTENT &gt; Design &gt; Themes</strong> 。确认你的主题在主题列表里。</li>
<li>进入<strong> Stores &gt; Configuration &gt; Design</strong> 。</li>
<li>在<strong> Scope下</strong> 拉框里选择你主题想要应用的店视图。</li>
<li>点击<strong> Design Theme</strong> 标签<strong> User-Agent Exceptions</strong> 旁的<strong> Add</strong> 。</li>
<li>在<strong> Search String</strong> 框里指明用户代理使用普通字符串或常规异常（PCRE)。在<strong> Design Theme</strong> 下拉列表里选择与代理匹配的主题。</li>
<li>点击<strong>Save Config</strong>。</li>
</ol>
<p>如果在你的Magento后台面板中缓存是可用的，那么你必须清理缓存来查看效果。</p>
<h2>添加一个与主题无关的logo</h2>
<p>你可能想要设置一个永久性的店铺logo，不论应用哪个主题它都会显示在店铺前端。要添加一个与主题无关的永久性logo</p>
<ol>
<li>进入后台<strong>Stores &gt; Configuration &gt; Design</strong>。</li>
<li>在<strong>Scope</strong>下拉框里选择你主题想要应用的店视图。</li>
<li>在<strong>Design</strong>的<strong>General</strong>区域展开<strong>Header</strong>标签。</li>
<li>在<strong>Logo Image</strong>处选择在文件系统中存储的logo图片。</li>
<li>上传文件。</li>
<li>点击<strong>Save Config</strong>。</li>
</ol>
<p>你在这里添加的logo被存储在<code>/pub/media/logo/default/</code>目录下。</p>
<p>如果在你的Magento后台面板中缓存是可用的，那么你必须清理缓存来查看效果。</p>
<p>要删除永久性logo，只需到相同位置，点击右侧的Delete即可。</p>
<h2>清除缓存</h2>
<p>如果在你的Magento后台面板中缓存是可用的，那么在你应用主题，添加主题例外，添加logo以及执行其他任务后都需要清理缓存。会有一条系统信息提醒你，无效的缓存类型应该被刷新。</p>
<ol>
<li>点击<strong>System &gt; Cache Management</strong>。</li>
<li>清除无效的缓存类型。</li>
</ol>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 19 Dec 2015 14:38:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2主题结构]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-structure/</link>
      <description><![CDATA[<h2>Magento2主题结构</h2>
<p>店面的主题通常位于<code>app/design/frontend/&lt;Vendor&gt;（供应商）/</code>之下。虽然在技术上它们可以放在其它目录。例如Magento2的内置主题在<code>vendor/magento/theme-frontend-&lt;theme_code&gt;</code>之下，这是因为Magento2的实例是从Composer部署的。</p>
<p>每个主题必须存储在单独的目录：</p>
<pre><code>app/design/frontend/&lt;Vendor&gt;/
├── &lt;theme1&gt;
├── &lt;theme2&gt;/
├── &lt;theme3&gt;
├--...
</code></pre>
<h2>主题组件</h2>
<p>Magento的主题目录结构通常是这样的：</p>
<pre><code>&lt;theme_dir&gt;/
├── &lt;Vendor&gt;_&lt;Module&gt;/ 
│	├── web/
│	│	├── css/
│	│	│	├── source/
│	├── layout/
│	│	├── override/
│	├── templates/
├── etc/
├── i18n/ 
├── media/
├── web/
│	├── css/
│	│	├── source/ 
│	├── fonts/
│	├── images/
│	├── js/
├── composer.json 
├── registration.php 
├── theme.xml 
</code></pre>
<p>让我们仔细看看每一个特定的子目录。</p>
<table>
<tbody>
<tr><th>目录</th><th colspan="1">必须性</th><th>描述</th></tr>
<tr>
<td colspan="1"><code> /&lt;Vendor&gt;_&lt;Module&gt; </code></td>
<td colspan="1">非必须</td>
<td colspan="1">指定模型的样式，布局和模板.</td>
</tr>
<tr>
<td colspan="1"><code>/&lt;Vendor&gt;_&lt;Module&gt;/web/css/source</code></td>
<td colspan="1">非必须</td>
<td colspan="1">指定模型的样式（.css或.less）。一般模型样式在<code>module.less</code>中，挂件（widgets）的样式在 <code>widgets.less</code>中。</td>
</tr>
<tr>
<td colspan="1"><code>/&lt;Vendor&gt;_&lt;Module&gt;/layout</code></td>
<td colspan="1">非必须</td>
<td colspan="1">扩展默认模型或父主题的布局文件</td>
</tr>
<tr>
<td colspan="1"><code>/&lt;Vendor&gt;_&lt;Module&gt;/layout/override/base</code></td>
<td colspan="1">非必须</td>
<td colspan="1">重写默认模型布局的布局文件</td>
</tr>
<tr>
<td colspan="1"><code>/&lt;Vendor&gt;_&lt;Module&gt;/layout/override/&lt;parent_theme&gt;</code></td>
<td colspan="1">非必须</td>
<td colspan="1">重写父主题中模型布局的布局文件</td>
</tr>
<tr>
<td colspan="1"><code>/&lt;Vendor&gt;_&lt;Module&gt;/templates</code></td>
<td colspan="1">非必须</td>
<td colspan="1">该目录包含重写默认模型模版或父主题模版的主题模板。自定义模版也在该目录下。</td>
</tr>
<tr>
<td colspan="1"><code> /etc/view.xml </code></td>
<td colspan="1">对单个主题必须, 若有父主题则为非必须</td>
<td colspan="1">该文件包含店铺前端产品图片和缩略图的配置。</td>
</tr>
<tr>
<td colspan="1">/<code>i18n</code></td>
<td colspan="1">非必须</td>
<td colspan="1">带有翻译的.csv文件</td>
</tr>
<tr>
<td colspan="1"><code>/media</code></td>
<td colspan="1">必须</td>
<td colspan="1">该目录包含一个主题预览(你主题的一张截图)。</td>
</tr>
<tr>
<td colspan="1"><code>/web</code></td>
<td colspan="1">非必须</td>
<td colspan="1">可被前端直接读取的静态文件</td>
</tr>
<tr>
<td colspan="1"><code>/web/css/source</code></td>
<td colspan="1">非必须</td>
<td colspan="1">该目录包含主题<code>less</code>配置文件（从Magento UI库里调用全局文件），和<code>theme.less</code>（重 写默认变量值）</td>
</tr>
<tr>
<td colspan="1"><code>/web/css/source/lib</code></td>
<td colspan="1">非必须</td>
<td colspan="1">重写UI库的视图文件存储在<code>lib/web/css/source/lib</code></td>
</tr>
<tr>
<td colspan="1"><code>/web/fonts</code></td>
<td colspan="1">非必须</td>
<td colspan="1">主题字体。</td>
</tr>
<tr>
<td colspan="1"><code>/web/images</code></td>
<td colspan="1">非必须</td>
<td colspan="1">主题中使用的图片。</td>
</tr>
<tr>
<td colspan="1"><code>/web/js</code></td>
<td colspan="1">非必须</td>
<td colspan="1">主题JavaScript文件。</td>
</tr>
<tr>
<td colspan="1"><code> /composer.json </code></td>
<td colspan="1">非必须</td>
<td colspan="1">描述主题依赖关系和一些元信息。如果你的主题是composer包的话，就在这里。</td>
</tr>
<tr>
<td colspan="1"><code>/registration.php</code></td>
<td colspan="1">必须</td>
<td colspan="1">将你的主题注册到系统。</td>
</tr>
<tr>
<td colspan="1"><code>/theme.xml</code></td>
<td colspan="1">必须</td>
<td colspan="1">由于该文件声明一个主题作为系统部件，所以它是强制性的。它包含基本元信息，如主题名和父主题名（主题继承自已有主题）。该文件让Magento识别你的主题。</td>
</tr>
</tbody>
</table>
<h2>主题文件</h2>
<p>除了配置文件和主题的元数据文件，所有主题文件分为以下两类：</p>
<ul>
<li>静态视图文件</li>
<li>动态视图文件</li>
</ul>
<h3>静态视图文件</h3>
<p>一组是由服务器返回到浏览器，不进行任何处理的主题文件，被称为一个主题的静态文件。</p>
<p>静态文件可以位于一个主题目录如下：</p>
<pre><code>&lt;theme_dir&gt;/
├── media/
├── web
│	├── css/ (except the "source" sub-directory)
│	├── fonts/
│	├── images/
│	├── js/
</code></pre>
<p>静态文件和其他主题文件之间的主要区别是，静态文件出现在网页作为引用的文件，而其它主题文件参加页面生成，但并未明确地被引用。</p>
<p>静态视图的文件可以通过从店面的直接链接进行访问，以此与公共主题文件区分开。</p>
<h3>动态视图文件</h3>
<p>被服务器处理或执行用来返回结果给客户的视图文件。它们是： .less 文件，模板（templates），布局（layouts）。 动态视图文件在一个主题目录中的位置，如下所示：</p>
<pre><code>&lt;theme_dir&gt;/
├── Magento_&lt;module&gt;/ 
│	├── web/
│	│	├── css/
│	│	│	├── source/
│	├── layout/
│	│	├── override/
│	├── templates/
├── web/
│	├── css/
│	│	├── source/
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 18 Dec 2015 14:05:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[创建magento2主题]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-create/</link>
      <description><![CDATA[<h2>创建一个主题</h2>
<p>本文讨论如何创建一个主题，怎么为主题添加一个logo，如何定义图片尺寸。</p>
<h3>文章内容</h3>
<ul>
<li><a href="#create-theme-directory">创建一个主题目录</a></li>
<li><a href="#declare-your-theme">声明你的主题</a></li>
<li><a href="#make-theme-composer">为你的主题写一个Composer包（可选）</a></li>
<li><a href="#add-registration">添加registration.php</a></li>
<li><a href="#configure-images">配置图片</a></li>
<li><a href="#create-static-directories">创建静态文件目录</a></li>
<li><a href="#theme-directory-structure">当前你主题的目录结构</a></li>
<li><a href="#declaring-theme-logo">声明主题logo</a></li>
</ul>
<h2 id="create-theme-directory">创建一个主题目录</h2>
<p>为你的主题创建目录：</p>
<p>1.进入<code>/app/design/frontend.</code></p>
<p>2.根据你供应商的名字创建一个新的目录<code>/app/design/frontend/</code></p>
<p>3.在vendor目录下，根据你的主题创建一个目录</p>
<pre><code>/app/design/frontend/
├── &lt;Vendor&gt;/
│   │   ├──...&lt;theme&gt;/
│   │   │   ├── ...
│   │   │   ├── ...
</code></pre>
<p>文件夹名称通常匹配主题代码的命名：供应商认可的任何字幕数字字符集。该公约仅仅是一个建议，并未阻止以另一种方式命名。</p>
<h2 id="declare-your-theme">声明你的主题</h2>
<p>在创建了主题目录以后，你必须创建包含至少主题名和父主题名（如果主题继承自一个主题）的<code>theme.xml</code>。你也可以指定主题预览图的存储位置。</p>
<p>1.添加或者拷贝已有的<code>theme.xml</code>到你的主题目录<code>app/design/frontend//</code>下。</p>
<p>2.用下面的示例来配置<code>theme.xml</code>：</p>
<pre><code>&lt;theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd"&gt;
     &lt;title&gt;New theme &lt;!-- your theme's name --&gt;
     &lt;parent&gt;Magento/blank&lt;/parent&gt; &lt;!-- the parent theme, in case your theme inherits from an existing theme --&gt;
     &lt;media&gt;
         &lt;preview_image&gt;media/preview.jpg&lt;/preview_image&gt; &lt;!-- the path to your theme's preview image --&gt;
     &lt;/media&gt;
 &lt;/theme&gt;
</code></pre>
<h2 id="make-theme-composer">为你的主题写一个Composer包（可选）</h2>
<p>Magento默认的主题被创建为Composer包。要把你的主题写成一个包，添加一个<code>composer.json</code>文件到主题目录下并在包服务器上注册这个包。默认的公共包装服务器https://packagist.org/。</p>
<pre><code>composer.json</code></pre>
<p>提供主题相关信息。下面是一个主题code&gt;composer.json的示例：</p>
<pre><code>
{
    "name": "magento/theme-frontend-luma",
    "description": "N/A",
    "require": {
        "php": "~5.5.0|~5.6.0|~7.0.0",
        "magento/theme-frontend-blank": "100.0.*",
        "magento/framework": "100.0.*"
    },
    "type": "magento2-theme",
    "version": "100.0.1",
    "license": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "autoload": {
        "files": [
            "registration.php"
        ]
    }
}
</code></pre>
<h2 id="add-registration">添加registration.php</h2>
<p>要在系统中注册你的主题，你需要用下面的内容在你的主题目录下创建一个<code>registration.php</code>：</p>
<pre><code>&lt;?php
/**
* Copyright &copy; 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::THEME,
    'frontend/&lt;Vendor&gt;/&lt;theme&gt;',
    __DIR__
);
</code></pre>
<p>这里的<code></code>是你供应商的名字，<code>theme</code>是你主题的名字。你可以查看Luma主题的registration.php文件。</p>
<h2 id="configure-images">配置图片</h2>
<p>产品图片大小和其它店铺前端性能在<code>view.xml</code>里被配置。它需要一个主题，但是否有父主题都可。 如果你主题里的产品图片与父主题不同，或者你的主题没有继承任何主题，用下面的步骤添加一个<code>view.xml</code></p>
<p>1.以可以创建文件夹权限的用户（通常情况下，是Magento的文件系统的所有者）登录到Magento服务器中。</p>
<p>2.在你的主题目录下创建etc文件夹</p>
<p>3.从已有主题中拷贝view.xml文件（例如，从Blank主题）到你主题的etc文件夹中。</p>
<p>4.在view.xml中配置所有店铺前端产品图片尺寸。例如，你可以指定分类网格视图产品图片为250x250像素，相应的配置会是这样：</p>
<pre><code>...
    &lt;image id="category_page_grid" type="small_image"&gt;
        &lt;width&gt;250&lt;/width&gt;
        &lt;height&gt;250&lt;/height&gt;
    &lt;/image&gt;
...
</code></pre>
<h2 id="create-static-directories">创建静态文件目录</h2>
<p>你的主题将包含几种静态文件：样式，字体，JavaScript和图片。每种类型的图片都被存储在<code>web</code>目录下的独立子目录中：</p>
<pre><code>app/design/&lt;area&gt;/&lt;Vendor&gt;/&lt;theme&gt;/
├── web/
│ ├── css/
│ │ ├── source/ 
│ ├── fonts/
│ ├── images/
│ ├── js/
</code></pre>
<h2 id="theme-directory-structure">当前你主题的目录结构</h2>
<p>当前，你的主题目录看起来是这样的：</p>
<pre><code>app/design/frontend/&lt;Vendor&gt;/
├── /
│   ├── etc/
│   │   ├── view.xml
│   ├── web/
│   │   ├── images
│   │   │   ├── logo.svg
│   ├── theme.xml
│   ├── composer.json
</code></pre>
<h2>主题logo</h2>
<p>在Magento2中，默认的logo名字和格式是<code>logo.svg</code>。当你把一个<code>logo.svg</code>放在常规位置（<code>&lt;theme_dir&gt;/web/images</code>目录）中，它就会被自动识别为主题logo。主题被应用时就会出现在店铺页面的头部。</p>
<p>在你自定义的主题中，你可以使用不同名字和格式的logo，但是你可能需要声明它。</p>
<p>是否需要声明取决于你的主题是否有父主题以及它的logo图片。可能是下面的情况：</p>
<ul>
<li>你的主题没有父主题：
<ul>
<li>如果你的logo图片名字和格式是默认的，<code>logo.svg</code>，那么就不需要声明它。</li>
<li>如果你的logo图片名字和格式不是默认的就需要声明它。</li>
</ul>
</li>
<li>不的主题有父主题
<ul>
<li>如果你的主题logo图片名字和格式与父主题的logo一样，那么就不需要声明它。</li>
<li>如果你的logo图片有不同的名字和格式就需要声明它。</li>
</ul>
</li>
</ul>
<h2 id="declaring-theme-logo">声明主题图片</h2>
<p>要声明一个主题logo，需要添加一个扩展的<code>&lt;theme_dir&gt;/Magento_Theme/layout/default.xml</code>布局。</p>
<p>例如，如果你的logo文件是<code>my_logo.png</code>，尺寸为300x300像素，你可以如下声明它：</p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"&gt;
    &lt;body&gt;
        &lt;referenceBlock name="logo"&gt;
            &lt;arguments&gt;
                &lt;argument name="logo_file" xsi:type="string"&gt;images/my_logo.png&lt;/argument&gt;
                &lt;argument name="logo_img_width" xsi:type="number"&gt;300&lt;/argument&gt; 
                &lt;argument name="logo_img_height" xsi:type="number"&gt;300&lt;/argument&gt;
            &lt;/arguments&gt;
        &lt;/referenceBlock&gt;
    &lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p>声明logo尺寸是可选的。更多关于主题的布局，会在之后的文章中详细讲解。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Dec 2015 13:44:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento订单创建和管理]]></title>
      <link>https://www.360magento.com/blog/magento_orders/</link>
      <description><![CDATA[<h1>如何配置Magento订单选项</h1>
<p>要修改Magento订单选项（结账设置，邮寄设置，支付方式等等）你需要进入后台-&gt;System-&gt;Configuration。我们要设置的选项在左侧菜单栏的Sales区域。让我们简短地看下这些选项：</p>
<ul>
<li><strong>Sales（销售）</strong>-通过这个选项你可以配置支付总额的排序，是否允许再次下单，为PDF和HTML打印输出（发票和装箱单的设计）设置logo，设置最小订单金额和礼物信息。</li>
<li><strong>Sales Email（销售电子邮件）</strong>-在这里你可以为订单，发票，运输和信用备忘录配置不同的邮箱。更多相关信息你可以在下面的Magento订单邮件部分中到。</li>
<li><strong>PDF Print-outs（PDF打印）</strong>-这个选项允许你设置是否在发票，装运和信用备忘录的头部显示订单ID。</li>
<li><strong>Tax（税）</strong>-这里你可以设置不同的税选项-税类，计算设置，税务显示设置和固定产品税。</li>
<li><strong>Checkout（结账）</strong>-这个重要的选线允许你配置你的结账设置，购物车和侧边栏，支付失败的邮件。</li>
<li><strong>Shipping Settings（运输设置）</strong>-这里你可以设置你的运输来源和选项。</li>
<li><strong>Shipping Method（运输方式）</strong>-顾名思义，在这里你可以配置你的运输方式；可用的运输方式有：扁平率，表率，免费送货，UPS，USPS，联邦快递。</li>
<li><strong>Google API（谷歌API）</strong>-这里你可以为Magento配置谷歌服务-谷歌分析和谷歌结账。</li>
<li><strong>Paypal（贝宝）</strong>-这个选项允许你为店铺配置贝宝。</li>
<li><strong>Payment Method（支付方式）</strong>-最重要的选项，这里你应该配置你将接受的支付方式。</li>
<li><strong>Payment Services（支付服务）</strong>-这里只有一个选项来配置-3D信用卡安全验证 - 这是作为一个额外的安全层，用于网上信用交易的基于XML的协议。</li>
<li><strong>Moneybookers </strong>-在你的店铺中为Moneybookers配置一个独立的区域。</li>
</ul>
<h1>如何管理订单邮件</h1>
<p>正如在Magento订单选项中提到的，Magento有一个非常棒的内置的电子邮件功能。这个邮件功能被称作销售电子邮件，允许你管理订单邮件。在配置你的电子邮件之前，你也许需要添加一个新的电子邮件模版。你可以进入后台System -&gt; Transactional Emails来实现。现在，让我们仔细看看每个Sales Email（销售电子邮件）选项：</p>
<ul>
<li><strong>Order and Order Comments（订单和评论）</strong>-在这里你可以启用/禁用包含订单和评论信息的客户电子邮件通知。在这里，你可以设置新的订单提交邮件发送者，新的订单确认模版（针对已注册的用户），新的订单确认模版（针对访客用户）。你还可以设置邮件接收订单电子邮件的副本，并选择如何复制邮件发 - 作为密件抄送或作为一个单独的电子邮件。</li>
<li><strong>Invoice and Invoice Comments（发票及发票评论）</strong>-这里可以启用/禁用包含发票和发票评论的客户电子邮件通知。其他选项与Order相同。</li>
<li><strong>Shipment and Shipment Comments （发货和发货评论）</strong>-这里可以启用/禁用包含发货和发货评论的客户电子邮件通知。其他选项与Order相同。</li>
<li><strong>Credit Memo and Credit Memo Comments（贷项通知单和贷项通知单评论）</strong>-这里可以启用/禁用包含贷项通知单和贷项通知单评论的客户电子邮件通知。其他选项与Order相同。</li>
</ul>
<h1>如何在Magento中下订单</h1>
<p>下订单包含几个简单的步骤。以添加产品到购物车开始，然后进行结账，选择结帐方式，填写一些账单和发货信息，选择付款方式，然后下订单。整个流程表现为：</p>
<pre><code>Add to Cart -&gt; Process Checkout (Billing/Shipping/Payment) -&gt; Place Order</code></pre>
<p>一旦订单被下达，它会显示在Magento后台的Sales -&gt; Orders中。</p>
<h1>在Magento中如何管理订单</h1>
<p>当客户成功完成订购过程中，您将收到有关新订单的邮件通知。您可以在后台Sales -&gt; Orders中查看所有的订单。在上一部分中，我们下了订单，让我们点击它，看看它的样子。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Sales Order" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_sales_order_1.jpg" width="auto" /></div>
<p>你会在屏幕的右上角发现几个橙色按钮。这些都是你可以对订单进行的操作：</p>
<ul>
<li><strong>Edit（编辑）</strong>-该操作会取消当前订单并创建一个有同样细节的订单供你编辑和再次提交。</li>
<li><strong>Cancel（取消）</strong>-取消订单。</li>
<li><strong>Send Email（发送邮件）</strong>-重新发送订单电子邮件给客户。</li>
<li><strong>Hold（挂起）</strong>-将订单挂起，在其它时间进行处理。处理前需（Unhold）恢复。</li>
<li><strong>Invoice（发票）</strong>-你需要点击（Submit Invoice）提交发票来创建它。这将使得订单状态从待定变为进行中。</li>
<li><strong>Credit Memo（贷项通知单）</strong>- 只会在发票创建后出现。允许你创建一个线下退款的订单。</li>
<li><strong>Ship（发货）</strong>-订单管理的最后一步，这是产品的实际交付。你需要点击Submit Shipment（提交发货）来完成订单。它使得订单状态从进行中变为完成。</li>
<li><strong>Reorder（再次下单）</strong>-允许你再次提交订单。</li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Dec 2015 14:26:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento产品价格管理]]></title>
      <link>https://www.360magento.com/blog/magento_price/</link>
      <description><![CDATA[<p>Magento为你的产品价格提供了很多选项。你可以设置特价，定时促销等等。要编辑你的产品价格，首先登录你的Magento后台，然后进入<strong>Catalog-&gt;Manage Products</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento manage product" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_1.jpg" width="auto" /></div>
<p>现在定位你要修改价格的产品上，点击它边上的Edit链接。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento product edit" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_2.jpg" width="auto" /></div>
<p>这里你将看到许多用来修改产品的选项。在左侧菜单选择Prices标签。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento product price" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_3.jpg" width="auto" /></div>
<p>在这里你可以修改产品的价格，下面是一些比较重要选项的说明：</p>
<ul>
<li><strong>Price</strong>（价格）：你要出售产品的价格，必填项，最重要的信息</li>
<li><strong>Cost</strong>（成本）：你购买产品的价格</li>
<li><strong>Tier Price</strong>（阶梯价格）：可根据购买数量设定折扣</li>
<li><strong>Special Price</strong>（特价）：可设置特价及特价的起止事件，此选项不受购买数量的限制</li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 14 Dec 2015 10:50:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento社区版本下载]]></title>
      <link>https://www.360magento.com/blog/magento-community-download/</link>
      <description><![CDATA[<h2>最新最全magento社区版下载链接<a href="http://blog.magego.com/magento-download/" target="_blank">http://blog.magego.com/magento-download/</a></h2>
<h2>magento 社区版2.x下载列表</h2>
<ul>
<li><a href="http://www.360magento.com/magento-community/Magento-CE-2.0.0-2015-11-17-05-53-58.tar.gz">magento 社区版 2.0.0 下载</a></li>
<li><a href="http://www.360magento.com/magento-community/Magento-CE-2.0.0+Samples-2015-11-17-06-24-03.tar.gz">magento 社区版 2.0.0 + 示例数据 下载</a></li>
<li><a href="http://www.360magento.com/magento-community/Composer-Setup.exe">Composer 下载</a></li>
</ul>
<h2>magento 社区版1.x下载列表</h2>
<ul>
<li><a href="http://www.360magento.com/magento-community/magento-1.9.2.2-2015-10-27-03-14-30.zip">magento community ver 1.9.2.2 下载</a></li>
<li><a href="http://www.360magento.com/magento-community/magento-1.9.1.1-2015-04-30-12-49-08.zip">magento community ver 1.9.1.1 下载</a></li>
<li><a href="http://www.360magento.com/magento-community/magento-1.8.1.0-2015-02-10-10-06-27.zip">magento community ver 1.8.1.0 下载</a></li>
<li><a href="http://www.360magento.com/magento-community/magento-1.7.0.2-2015-02-11-09-59-20.zip">magento community ver 1.7.0.2 下载</a></li>
</ul>]]></description>
      <pubDate>Mon, 30 Nov 2015 08:52:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento 2.0发布及介绍]]></title>
      <link>https://www.360magento.com/blog/magento-2-launched/</link>
      <description><![CDATA[<p>magento官方于2015年11月17日宣布他们的下一代开源电子商务平台magento 2.0正式发布上市。新的平台让品牌商，零售商和企业可以跨越B2C，B2B行业来快速且经济高效的参与全渠道的购物体验。magento 2.0还提供了增强的性能和扩展性，新的功能更能提高转化率和和业务灵活性，以及生产率的提高。magento 2.0还是建立在开源的基础上，并提供无与伦比的灵活性和创新的空间。</p>
<p>magento基于magento 2.0推出了出了两个版本：magento 2.0企业版 和 magento 2.0社区版，当然还是一样企业版还是每年要收费的。</p>
<h2>开放、灵活的体系结构</h2>
<p>magento 2.0是是下一代平台，全新的架构体系。拥有无与伦比的灵活性，是你的商业眼界和思想能够得以实现。magento 2.0采用模块化的代码库，使自定义更为容易，更快速的推向市场。更强大的部署灵活性使其能够运行在公有云和私有云的环境中。更广泛和更有效的API允许您与任何第三方解决方案连接和操作，主体化的功能使得网站建设随新的产品线或者地域的变化比以往更容易。广泛的turnkey扩展还能够快速、经济的增强你的网店</p>
<h2>吸引人的购物体验</h2>
<p>无论通过任何设备都可以创建一个吸引人的、无缝的和个性化的客户体验是magento 2.0的核心。全新的响应式的参考主题，可以快速的创建一个支持在任何时间、任何地点都可以销售的站点。并且你可以通过集成视频更逼真的方式分享你的产品。全新的结账通过最大限度的减少支付步骤和所需的信息是的更容易定制和进一步提高转化率。您也可以提供一键创建账户来保存未来采购的客户档案。</p>
<h2>增强业务得灵活性和效率</h2>
<p>magento电子商务正在革新商人的体验，使您能够更有效地运作和处理快速增长、不扩大你的团队。新的管理面板的设计提供了一个简化，消费者一样的界面，节省了管理每天的日常任务并且直观的看到新的团队成员学习时的时间。他对触摸屏也是非常有好的，所以无论你去哪儿你都可以更新和跟踪销售订单。改进的业务工具，使您能够不断优化您的操作来推动增长。你现在可以通过后台管理面板轻松的自定义和保存商店视图。创建新的产品也比较快，通过一步步的产品创建向导工具并且产品导入功能比以前快四倍</p>
<h2>企业级可扩展性和性能</h2>
<p>magento平台已经增压，提供更快的超过50%的页面加载时间，在目录页和结账页上有明显体现。以帮助您的客户和提高转换率。它预先集成了 Apache Varnish来缓存页面内容。 Magento企业版2.0还提供了企业级的可扩展性和高可用性与多个从数据库关键子系统独立的主数据库</p>
<h2>安全支付</h2>
<p>此外，magento本身自带的可用PayPal, Braintree, and Authorize.net的支付网关。Magento企业版2.0还集成WorldPay和CyberSource支付网关。所有版本提供更好的安全性和追求PCI合规性的最简单的级别，根据所选择的付款方式</p>
<h2>易于维护和升级</h2>
<p>最后，这个现代化的，模块化的架构降低了复杂性和维护网站的成本。他的升级也很简单，因为他是开源的，这意味着你可以将创新性的功能整合进去。通过magento电商平台来实现每季更高的销售和更高的效率。</p>
<p>&nbsp;</p>
<p><a href="http://www.360magento.com/blog/magento-community-download/">下载magento 2.0</a></p>]]></description>
      <pubDate>Wed, 18 Nov 2015 11:31:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento创建、修改分类]]></title>
      <link>https://www.360magento.com/blog/magento_category/</link>
      <description><![CDATA[<h1>如何在Magento中创建分类</h1>
<p>要为产品创建一个分类，你需要进入Magento后台Catalog &gt; Manage Categories。在左侧你将看到已有的分类（如果有的话），在此之上你可以看到两个按钮Add Root Category（添加主分类）和Add Subcategory（添加子分类）。由于我们装了Magento数据，所以有几个分类。让我们通过选择主分类，再通过点击 Add Subcategory来创建新的子分类吧。</p>
<p>你应该填写它的名字，描述，添加一幅图片，一些有利于搜索引擎优化的Meta数据，设置它为Active来使它显示在前台并且将它包含在导航菜单中。</p>
<p>最后一个URL关键字，如果设置了就将用来链接到这个分类。这对于SEO来说非常有用，链接中考虑使用一些关键词。如果分类被称为PC，那么你可以考虑在这个区域填上"personal-computers" 。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento catalog General Information" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_category_1.jpg" width="auto" /></div>
<p>上图是分类的General Information Settings（一般设置），另外还有3个标签你可以设置：</p>
<p><strong>Display Settings</strong>（显示设置）：这里你可以设置显示的模式，它的CMS块和产品排列选项。</p>
<p><strong>Custom Design</strong>（自定义设计）：这里你可以选择分类的设计，它的布局。</p>
<p><strong>Category Products</strong>（分类产品）：这个标签允许你将已有的产品添加到分类中。</p>
<p>当你设置完成后点击Save按钮来创建它。</p>
<h1>如何在Magento中添加分类图片</h1>
<p>添加Magento分类图片很简单。进入Magento后台Catalog &gt; Manage Categories，选择你要添加图片的分类，选择General Information 标签，点击Image边上的Browse 按钮。选择你要添加的图片，点击Save Category保存。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento catalog Image" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_category_2.jpg" width="auto" /></div>
<h1>如何在Magento中列出所有可用的分类</h1>
<p>如果你想要查看Magento中分类的列表，进入Magento后台Catalog &gt; Manage Categories，在左侧分类菜单中点击Expand All即可。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento catalog list" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_category_3.jpg" width="auto" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 14 Nov 2015 16:04:49 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento2对商家的意味着什么？]]></title>
      <link>https://www.360magento.com/blog/magento2-to-merchants/</link>
      <description><![CDATA[<p>Magento开发团队已经公布了Magento2 Develop版本，里面包含完整的代码和架构。所有的Magento开发者都能深入了解Magento2了。那么，这对于商家来说意味着什么呢？</p>
<h2>什么是Magento2？</h2>
<p>你肯定知道Magento 1.x。Magento2是对之前的一个重构。大部分的代码已经以一种避免问题的方式重写。特别是，插件冲突，性能，代码质量和当前技术的更新。Magento2承诺满足商家更强大的功能需求。它的变化和提升是建立在过去5年客户的反馈之上的。</p>
<h2>Magento2历程-这一路，它如何走来</h2>
<p>Magento2的发布使得Magento2团队刚刚达到了一座新的里程碑。这意味着架构和代码更加稳定，更多新的功能，稳定性和错误修正。然而商家完全不会受此影响。如今开放的商家测试版大家可以看看，相信2016年你将看到在线网站。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Export Success" src="http://7xjryy.com1.z0.glb.clouddn.com/magento2-to-merchants.png" width="auto" /></div>
<h2>它怎么影响我的Magento店铺？</h2>
<p>Magento将继续支持Magento 1.x产品至2018年并停止对当前版本增加新功能。你的商店也许在2015年不受影响。如果在2015年不升级到magento2，那么在2016或者2017年就要计划了。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 03 Nov 2015 15:59:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento产品数量]]></title>
      <link>https://www.360magento.com/blog/magento-quantity/</link>
      <description><![CDATA[<p>Magento提供了一种简单又强大的方式来让你管理产品数量。那么我们该如何做呢？首先，登录Magento后台，进入<strong>Catalog -&gt; Manage Products</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Manage Products" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-quantity-1.jpg" width="auto" /></div>
<p>在下面的页面中，你将看到Magento商店中已有的所有产品。找到你想要修改数量的产品，点击它的<strong>Edit</strong>链接。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Products Edit" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-quantity-2.jpg" width="auto" /></div>
<p>之后你将进入产品页面，点击左侧菜单中的<strong>Inventory</strong> 。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Products Inventory" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-quantity-3.jpg" width="auto" /></div>
<p>现在，定位到<strong>Qty</strong>区域，加上你想要修改的产品数量。最后点击Save按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Products Qty" src="http://7xjryy.com1.z0.glb.clouddn.com/magento-quantity-4.jpg" width="auto" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 03 Nov 2015 15:50:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento由Permira基金支持成为独立公司]]></title>
      <link>https://www.360magento.com/blog/magento-independent/</link>
      <description><![CDATA[<p>The Permira Funds&rsquo; Investment in Leading Worldwide Commerce Platform to Fuel Global Expansion and Product Innovation</p>
<p>CAMPBELL, Calif. &mdash; (Nov. 2, 2015) &mdash; Magento Commerce, the leading provider of open omnichannel innovation, announced today that it has launched as an independent company, backed by the Permira funds. The launch marks the close of the acquisition of Magento Commerce Technologies by companies owned by the Permira funds from eBay, Inc. Mark Lavelle, formerly senior vice president at eBay Enterprise, will lead the company as its new CEO.</p>
<p>&ldquo;Magento is at the forefront of a tremendous market opportunity. As an independent company, with the full support and global resources of the Permira funds, we are poised to accelerate our leadership as innovators, creating products that drive exceptional experiences across every stage of the commerce lifecycle,&rdquo; said Mark Lavelle, CEO of Magento Commerce. &ldquo;During our time as a division of eBay, Inc., we grew revenue fivefold, made significant investments in our core platform and added innovative mobile and omnichannel products. Now, we will build on this momentum--continuing to innovate with speed and at scale while we put renewed focus on expanding our market leadership with stronger emphasis on our global network of system integrators, technology partners and developer community.&rdquo;</p>
<p>&ldquo;We are excited to support Mark and his outstanding team as they build on Magento&rsquo;s product leadership and rich ecosystem,&rdquo; said Phil Guinand, Principal at Permira. &ldquo;Given the Permira funds&rsquo; experience backing some of the world&rsquo;s leading brands and retailers, we know first-hand how Magento provides these companies with distinct advantages over their competitors in terms of owning the customer experience, future-proofing their business by leveraging the power of an open architecture, and achieving superior ROI from their omnichannel investments. As the importance of the digital commerce experience expands over the next decade we believe Magento will continue to be the partner of choice for the world&rsquo;s leading brands and retailers.&rdquo;</p>
<p>The flagship open-source Magento platform is already the worldwide leader in eCommerce, powering more than 240,000 sites globally and supporting over $50 billion in gross merchandise volume annually. Magento is the dominant platform to the Internet Retailer Top 1000, and the Internet Retailer B2B 300, counting more than double the number of retailers using the platform to the next closest competitor, as well as to the Internet Retailer Hot 100 which represents retailers who deliver the most innovative and best new ideas in commerce. Additionally, Forrester Research recently cited Magento as a Strong Performer &ldquo;blending strong strategy with a maturing product" among the eight most significant B2B commerce suite vendors in its industry benchmark report, &ldquo;The Forrester Wave&trade;: B2B Commerce Suites, Q2 2015.&rdquo; Magento was also cited as a Challenger in the 2014 Gartner Magic Quadrant for Digital Commerce.</p>
<p>Emerging as an independent company, Magento Commerce boasts a strong portfolio of open-source and cloud-based omnichannel solutions designed to disrupt the legacy technologies that have siloed the consumer experience between digital and physical:</p>
<ul>
<li><strong>Magento Community Edition</strong> is a modular and customizable eCommerce platform that ideally suits the needs of small businesses, and provides core commerce capabilities that can be extended though a wealth of extensions on the Magento Marketplace.</li>
<li>The <strong>Magento Enterprise Edition</strong> is a high performance, scalable eCommerce solution for fast-growing and large businesses. Magento Enterprise Edition provides a rich, robust feature set that can be tailored in order to accelerate business growth across digital and physical channels.</li>
<li><strong>Magento Commerce Order Management</strong> is a product suite at the core of retail distribution, connecting supply and demand side channels, gathering information from each and facilitating the choices for each individual order. Whether integrated with Magento Enterprise Edition or stand-alone, this modular, cloud-based suite of software, tools, and services, is designed to manage your orders, inventory and fulfillment.</li>
<li><strong>Magento Retail Commerce</strong> is a product suite designed to provide a more engaging and relevant experience within the retail environment. Magento's Point-of-Service gives store associates a mobile platform to deliver on all of a customer's in store needs, from commerce to clienteling. Magento Retail Commerce blurs the line between online and &ldquo;offline&rdquo; in a way the world has never seen before.</li>
<li>The <strong>Magento Marketplace</strong> is the largest commerce application marketplace. The Marketplace provides merchants with a curated user experience for easy discovery of high quality products and services, while providing developers with a vibrant Magento community and the tools and marketing resources to monetize their application business.</li>
</ul>
<h2>About Magento Commerce</h2>
<p>Trusted by more than 240,000 businesses worldwide, Magento Commerce is the leading provider of open omnichannel innovation to retailers, brands and branded manufacturers across retail B2C and B2B industries. In addition to its flagship open source eCommerce platform, Magento Commerce boasts a strong portfolio of cloud-based omnichannel solutions empowering merchants to successfully integrate digital and physical shopping experiences. With over $50B in gross merchandise volume transacted on the platform annually, Magento Commerce is the dominant provider to the Internet Retailer Top 1000, counting more than double the clients to the next closest competitor, and to the Internet Retailer Hot 100. Magento Commerce is supported by a vast global network of solution and technology partners, a highly active global developer community and the largest eCommerce marketplace for extensions available for download on the Magento Marketplace. More information can be found at <a title="Magento" href="www.magento.com" rel="nofollow">www.magento.com</a>.</p>
<h2>About Permira</h2>
<p>Permira is a global investment firm that finds and backs successful businesses with ambition. Founded in 1985, the firm advises funds with a total committed capital of approximately $28 billion. The Permira funds make long-term investments in companies with the objective of transforming their performance and driving sustainable growth. In the past 30 years, the Permira funds have made over 200 private equity investments in five key sectors: Consumer, Financial Services, Healthcare, Industrials and Technology. Permira employs over 200 people in 14 offices across North America, Europe, the Middle East and Asia. For more information visit: <a title="Permira" href="www.permira.com" rel="nofollow">www.permira.com</a>.</p>
<p>Permira established itself in North America in 2002 and today has offices in New York and Menlo Park. The Permira funds have a long track record of successfully investing in technology companies around the world including Informatica, Magento Commerce, eBay Marketing Solutions, NDS, Genesys, Ancestry.com, TeamViewer, Renaissance Learning, Metalogix, LegalZoom.com, and Teraco. Since 1997, over 33% of the Permira funds' investments have been in the core sector of Technology.</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 03 Nov 2015 02:59:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在不同的商店获取被重写后的产品网址]]></title>
      <link>https://www.360magento.com/blog/magento-rewritten-url/</link>
      <description><![CDATA[<p>在之前一篇在不同店铺获取产品网址的文章中，有人指出，如果当你想要获取的产品已经被重写那么将很麻烦。我想到一个返回被重写产品网址的方法。你将需要添加一个店铺的基本网址来返回一个完整网址的值。</p>
<p>要注意的是：这个方法只有在设置了网址关键字(URL key)属性集范围的店视图(store view)才有效。这意味着一件商品在不同店视图中的网址是不一样的。例如：一个产品在英文店铺中的网址关键字(URL key)是'nokia-blue'，在德文店铺中的网址关键字(URL key)是'nokia blau'。这将作用于你正在编辑产品的重写。如果你决定在网址重写中添加一个你自己的网址重写，也许你有一个很好的理由，但是我们不会被这种情况覆盖。</p>
<p>这次我不会去创建和注册一个模块。让我们以加入这个方法到你的模块助手中开始。</p>
<p><strong>app/code/community/Alwayly/Rewrites/Helper/Data.php</strong></p>
<pre><code>&lt;?php
class Alwayly_Rewrites_Helper_Data extends Mage_Core_Helper_Abstract
{
    public function rewrittenProductUrl($productId, $categoryId, $storeId)
    {
        $coreUrl = Mage::getModel('core/url_rewrite');
        $idPath = sprintf('product/%d', $productId);
        if ($categoryId) {
            $idPath = sprintf('%s/%d', $idPath, $categoryId);
        }
        $coreUrl-&gt;setStoreId($storeId);
        $coreUrl-&gt;loadByIdPath($idPath);
 
        return $coreUrl-&gt;getRequestPath();
    }
}
?&gt;
</code></pre>
<p>现在我们将做一个小的试演。如你所见，这个方法中接收productId, $categoryId 和 $storeId作为参数。要了解网址（URLS）在被重写前是什么样的，我们一起看下我们数据库中<strong>core_url_rewrite</strong>的这张表。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="core_url_rewrite表" src="http://7xjryy.com1.z0.glb.clouddn.com/rewritten-product-url-1.png" width="auto" /></div>
<p>一个不在任何类别中产品的id_path表现形式为<strong>product/productId</strong>，如果它属于任意的类别，它将表现为<strong>product/productId/categoryId</strong>。</p>
<p>让我们回到我们的方法。我们将用Magento注册表中的数据创建一个id_path的结构体。在我们寻找重写前我们需要为模型用setStoreId()设置店铺的Id。在这之后，我们将用<strong>loadByIdPath()</strong>读取我们重写了的地址列。现在剩下的就是获取一个请求通道，也就是产品网址中重写的部分。我们将用Magento中的<strong>core/url_rewrite</strong>模型来实现这些。</p>
<p>一个例子是，指向你正在寻找的同一产品的语言切换器，但在不同的店视图中。只需将下面的代码放入你的languages.phtml文件。<strong>app/design/base/default/template/page/html/switch/languages.phtml</strong></p>
<pre><code>&lt;?php if(count($this-&gt;getStores())&gt;1): ?&gt;
    &lt;?php
    $helper = Mage::helper('inchoo_rewrites');
    $prod = Mage::registry('current_product');
    $categ = Mage::registry('current_category');
    $categId = $categ ? $categ-&gt;getId() : null;
 
    ?&gt;
    &lt;div class="form-language"&gt;
        &lt;label for="select-language"&gt;&lt;?php echo $this-&gt;__('Your Language:') ?&gt;&lt;/label&gt;
        &lt;select id="select-language" title="&lt;?php echo $this-&gt;__('Your Language') ?&gt;" onchange="window.location.href=this.value"&gt;
            &lt;?php foreach ($this-&gt;getStores() as $_lang): ?&gt;
                &lt;?php $_selected = ($_lang-&gt;getId() == $this-&gt;getCurrentStoreId()) ? ' selected="selected"' : '' ?&gt;
                &lt;option value="&lt;?php
                    if($prod) {
                        echo $_lang-&gt;getBaseUrl() . $helper-&gt;rewrittenProductUrl($prod-&gt;getId(), $categId, $_lang-&gt;getId()) . '?___store=' . $_lang-&gt;getCode();
                    }else{
                        echo $_lang-&gt;getCurrentUrl(false);
                    }
                ?&gt;"&lt;?php echo $_selected ?&gt;&gt;&lt;?php echo $this-&gt;escapeHtml($_lang-&gt;getName()) ?&gt;&lt;/option&gt;
            &lt;?php endforeach; ?&gt;
        &lt;/select&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>你的语言切换器源码应该有些像这样（只要你的产品至少在一个店铺中有不同的网址）</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="language switcher" src="http://7xjryy.com1.z0.glb.clouddn.com/rewritten-product-url-2.png" width="auto" /></div>
<p>希望这将对你们掌握多店铺中网址重写的概念有所帮助。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 02 Nov 2015 15:38:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中导入产品]]></title>
      <link>https://www.360magento.com/blog/magento-import-products/</link>
      <description><![CDATA[<p>在Magento中以手动的方式添加大量产品是很不方便的。一件一件地添加产品会消耗很长的时间，特别是当你有成百上千的产品。这种情况，你就需要一种自动的方式添加所有的产品到你的Magento店铺。按照下面的步骤就能成功导入。</p>
<p>首先，从Magento后台进入<strong>Catalog -&gt; Manage Categories</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Manage Categories" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-1.jpg" width="auto" /></div>
<p>填写如下的内容来创建所有你需要的分类：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Categories Information" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-2.jpg" width="auto" /></div>
<p>填写所有的信息以后，点击Save Catagory按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Save Catagory" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-3.jpg" width="auto" /></div>
<p>注意，记下新创建的分类的id。最好以文本的形式，如下：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Catagory id" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-4.jpg" width="auto" /></div>
<p>如果需要，你还可以通过<strong>Catalog -&gt;Attributes -&gt;Manage Attributes -&gt; Add new Attribute</strong>.创建产品的额外属性。当然，在创建简单产品的时候你也可以创建属性。什么时候创建由你决定。</p>
<p>下一步是在Magento中手动添加一个产品。之后用来导出作为大量数据导入的模版。确保已经创建了所有需要的属性，是否删除已有的商品。当你创建并保存一个新产品以后，它将出现在Magento店铺的产品列表里。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento product list" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-5.jpg" width="auto" /></div>
<p>现在导出作为样本的模版。在Magento后台<strong>System -&gt; Import/Export -&gt; Dataflow - Profiles -&gt; Export All Products</strong>。在<strong>Profile Information -&gt; Store</strong>选择你刚才创建产品所在的店铺。在<strong>Data Transfer</strong>下拉菜单选择<strong>Local/Remote Server</strong>。在<strong>Data Format</strong>这栏选择<strong>CSV/ Tab Separated</strong>，点击<strong>Save</strong>按钮。接着再次点击<strong>export all products</strong>，点击<strong>Run Profile in Popup</strong>按钮。</p>
<p>在你的项目的<strong>var/export/</strong>文件夹里将有一个名为<strong>export_all_products.csv</strong>的文件。导出成功的界面看起来是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Export Success" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-6.jpg" width="auto" /></div>
<p>使用FTP将文件下载到本地。文件里每一列对应你要定义产品的属性。用电子表格程序打开它，添加你要导入的产品。确保复制/粘贴属性到对应的列。记得添加上分类的id。</p>
<p>完成这些之后，返回Magento后台，进入<strong>System -&gt; Import/Export -&gt; Dataflow - Profiles -&gt; Import All Products</strong>。之后选择<strong>Upload</strong>，上传要导入的.csv文件。上传完以后再次点击<strong>Import All Products</strong>，之后<strong>Run Profile</strong>，从下拉框选择你刚才上传的文件，点击<strong>Run Profile in Popup</strong>按钮。一个导入状态的窗口就弹出了。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Import process" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-7.jpg" width="auto" /></div>
<p>导入成功后会有提示信息。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Import Success" src="http://7xjryy.com1.z0.glb.clouddn.com/import-products-8.jpg" width="auto" /></div>
<p>现在，你可以到后台产品页面查看导入的产品了。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 02 Nov 2015 13:08:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[更新购物车中的可配置产品]]></title>
      <link>https://www.360magento.com/blog/updating-cart-configurable/</link>
      <description><![CDATA[<p>假设我们的购物车中有Magento可配置产品，我们想要修改它的选项但又不愿意删除或者重新添加它，那么怎么办呢？其实，按照下面的步骤，实现起来还是很简单的。</p>
<p>首先，打开你主题文件夹下的<strong>template/checkout/cart/item/default.phtml</strong>,找到下面的代码：</p>
<pre><code>&lt;?php if ($_options = $this-&gt;getOptionList()):?&gt;
</code></pre>
<p>在这行代码下面添加：</p>
<pre><code>&lt; ?php
if($this-&gt;getProduct()-&gt;isConfigurable()){
$_product = Mage::getModel('catalog/product')-&gt;load($this-&gt;getProduct()-&gt;getId());
Mage::getBlockSingleton('catalog/product_view_type_configurable')-&gt;unsetData();
$_configurable = Mage::getBlockSingleton('catalog/product_view_type_configurable')-&gt;setData('product', $_product);
$_cdata = json_decode($_configurable-&gt;getJsonConfig());
$_current = array();
foreach((array)$this-&gt;getOptionList() as $_option) {
$_current[$_option['label']]=$_option['value'];
}
foreach($_cdata-&gt;attributes as $attribute) {
?&gt;
&lt;strong&gt;&lt; ?php echo $attribute-&gt;label; ?&gt;&lt;/strong&gt;
&lt;select style="width:150px;" name="cart[&lt;?php echo $_item-&gt;getId() ?&gt;][option][&lt; ?php echo $attribute-&gt;id ?&gt;]"&gt;
&lt; ?php
foreach($attribute-&gt;options as $option) {
?&gt;
&lt;option &lt;?php echo ($_current[$attribute-&gt;label]==$option-&gt;label) ? ' selected' : '' ?&gt; value="&lt; ?php echo $option-&gt;id ?&gt;"&gt;&lt; ?php echo $option-&gt;label ?&gt; &lt; ?php echo $this-&gt;helper('checkout')-&gt;formatPrice($option-&gt;price+$_item-&gt;getProduct()-&gt;getPrice()) ?&gt;&lt;/option&gt;
&lt; ?php
}
?&gt;
&lt;/select&gt;
&lt; ?php
}
} else {
// THIS IS PLACE WHERE EXISTING CODE from [*] goes
}
?&gt;</code></pre>
<p>现在你已经完成了模板，你可以以你喜欢的方式来装饰它。下一步，你需要在local下创建你的&ldquo;Model&rdquo;和&ldquo;etc&rdquo;。etc中的config.xml代码是：</p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;config&gt;
&lt;frontend&gt;
&lt;events&gt;
&lt;checkout_cart_update_items_before&gt;
&lt;observers&gt;
&lt;your_firm_module_name_event&gt;
&lt;type&gt;singleton&lt;/type&gt;
&lt;class&gt;YOUR_FIRM_MODULE_NAME_Model_Card&lt;/class&gt;
&lt;method&gt;update&lt;/method&gt;
&lt;/your_firm_module_name_event&gt;
&lt;/observers&gt;
&lt;/checkout_cart_update_items_before&gt;
&lt;/events&gt;
&lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>&ldquo;Model&rdquo;中的Card.php代码为：</p>
<pre><code>&lt; ?php
 
class YOUR_FIRM_MODULE_NAME_Model_Card
{
public function update($e)
{
$_this = $e-&gt;cart;
$data = $e-&gt;info;
 
foreach ($data as $itemId =&gt; $itemInfo) {
$item = $_this-&gt;getQuote()-&gt;getItemById($itemId);
 
if (!$item) continue;
if (!isset($itemInfo['option']) or empty($itemInfo['option'])) continue;
 
foreach ($item-&gt;getOptions() as $option){
 
if($option-&gt;getCode()=='info_buyRequest'){
 
$unserialized = unserialize($option-&gt;getValue());
$unserialized['super_attribute'] = $itemInfo['option'];
$option-&gt;setValue(serialize($itemInfo['option']));
 
}elseif ($option-&gt;getCode()=='attributes'){
$option-&gt;setValue(serialize($itemInfo['option']));
}
 
}
$item-&gt;save();
}
}
 
}
?&gt;
</code></pre>
<p>最后在app/etc中用下面的代码创建YOUR_FIRM_MODULE_NAME.xml。</p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;config&gt;
&lt;modules&gt;
&lt;your_firm_module_name&gt;
&lt;codepool&gt;local&lt;/codepool&gt;
&lt;active&gt;true&lt;/active&gt;
&lt;/your_firm_module_name&gt;
&lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 01 Nov 2015 11:16:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 创建、修改CMS]]></title>
      <link>https://www.360magento.com/blog/magento_home_design/</link>
      <description><![CDATA[<p>为了管理网站页面，你需要进入后台CMS区域。点击Pages链接进入页面修改。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento CMS" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_home_design1.jpg" width="auto" /></div>
<p>通过点击页面，你就可以修改它。修改页面将展开下面这样的窗口：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Page" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_home_design2.jpg" width="auto" /></div>
<p>你可以按你的喜好来进行修改。Static block是另一种非常有用的选项。例如，你可以编辑页面底部包含链接的footer块：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Static Block" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_home_design3.jpg" width="auto" /></div>
<p>Polls区域允许你创建和修改投票：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Poll" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_home_design4.jpg" width="auto" /></div>
<p>事实上，Magento集成了一个功能齐全的CMS系统。你可以添加不同的元素到你的网站里。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 01 Nov 2015 11:10:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento2中创建主题（第二部分）]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-2/</link>
      <description><![CDATA[<h2>2.配置和创建主题文件夹</h2>
<p>&middot;按<strong>app/design/&lt;area&gt;/&lt;vendorName&gt;/&lt;newTheme&gt;/</strong>的结构在design文件夹下创建主题文件夹</p>
<p>例如：<strong>/app/design/frontend/Magento/magestore</strong></p>
<h3>声明主题</h3>
<p>在刚创建的magestore主题文件夹里创建theme.xml文件。声明信息包括：主题，版本，父类主题（如果是继承主题）</p>
<pre><code>&lt;theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Config/etc/theme.xsd"&gt;
&lt;title&gt;Alwaylystore Theme&lt;/title&gt;
&lt;media&gt;
&lt;preview_image&gt;media/preview.jpg&lt;/preview_image&gt;
&lt;/media&gt;
&lt;/theme&gt;
</code></pre>
<p>为新主题创建一张图片：magestore.png，它的文件位置是：<strong>/app/design/frontend/Magento/magestore/media/theme/preview/magestore.png</strong>。如果路径不对会找不到图片的。</p>
<h3>在主题文件夹里创建composer.json文件</h3>
<pre><code>{
    "name": "magento/theme-frontend-blank",
    "description": "N/A",
    "require": {
        "php": "~5.4.11|~5.5.0",
        "magento/framework": "0.42.0-beta1",
        "magento/magento-composer-installer": "*"
    },
    "type": "magento2-theme",
    "version": "0.42.0-beta1",
    "license": [
        "OSL-3.0",
        "AFL-3.0"
    ],
    "extra": {
        "map": [
            [
                "*",
                "frontend/Magento/blank"
            ]
        ]
    }
}
</code></pre>
<p>在后台，进入<strong> Content &gt; Design &gt; Themes</strong>，可以看到新主题；</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2新主题" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-1.png" width="1000px" /></div>
<h3>配置图片（可选）</h3>
<p>在view.xml中，图片的尺寸将被配置。在新主题中新的文件夹被创建在<strong> app/design/&lt;area&gt;/&lt;vendorName&gt;/&lt;newTheme&gt;/etc/</strong></p>
<p>例如： <strong> /app/design/frontend/Magento/magestore/etc/</strong></p>
<p>把默认主题中的view.xml文件拷贝到&lt;etc&gt;文件夹中</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2etc" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-2.png" width="auto" /></div>
<p>在view.xml中配置前端显示设置。例如，设置图片的尺寸到120px</p>
<pre><code>&lt;var name="new_products_content_widget_grid:type"&gt;small_image&lt;/var&gt;
&lt;var name="new_products_content_widget_grid:width"&gt;120&lt;/var&gt;
&lt;var name="new_products_content_widget_grid:ratio"&gt;1&lt;/var&gt;
&lt;var name="new_products_content_widget_grid:height"&gt;120&lt;/var&gt;
</code></pre>
<h3>创建图片文件夹</h3>
<p>在主题中，创建&lt;web&gt;文件夹，并在&lt;web&gt;文件夹内创建&lt;image&gt;文件夹：</p>
<p><strong>App/design/&lt;area&gt;/&lt;vendorName&gt;/&lt;newTheme&gt;web/images/</strong></p>
<p>例如：<strong> /app/design/frontend/Magento/alwaylystore/web/images/</strong></p>
<h3>为主题添加一个logo图片</h3>
<p>进入app/design/&lt;area&gt;/&lt;vendorName&gt;/&lt;newTheme&gt;web/images/</p>
<p>例如：<strong>/app/design/frontend/Magento/mageystore/web/images/</strong></p>
<p>拷贝名为logo.png的图片到文件夹中。 Magento默认设置logo.gif图片作为logo图片。如果你想要修改，那么拷贝默认主题里的<strong>/Magento_Theme/layout/default.xml</strong>到你的主题中。</p>
<p>例如：/app/design/frontend/Magento/magestore/Magento_Theme/layout/default.xml</p>
<p>添加下面的代码：</p>
<pre><code>&lt;referenceBlock name="logo"&gt;
&lt;arguments&gt;
&lt;argument name="logo_file" xsi:type="string"&gt;images/logo.png&lt;/argument&gt;
&lt;/arguments&gt;
&lt;/referenceBlock&gt;
</code></pre>
<p>现在，我们的文件结构看起来像是这样的：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 default.xml" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-3.png" width="auto" /></div>
<h3>使用创建的主题：</h3>
<p>进入后台<strong>Store &gt; Configuration &gt; Design</strong>在Design Theme里选择我们创建的主题，然后保存。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2使用新主题" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-4.png" width="1000px" /></div>
<p>我们已经创建了一个新主题的文件结构，下面的部分将一步一步地配置你的主题。</p>
<h1>3.基础元素定制</h1>
<h3>定制CSS：</h3>
<p>到<strong>/app/design/frontend/Magento/blank</strong>文件夹中拷贝web/css文件夹</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 web/css" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-5.png" width="auto" /></div>
<p>粘贴到你的主题相应的文件夹中（<strong>/app/design/frontend/Magento/magestore/web</strong>）：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 new web" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-6.png" width="auto" /></div>
<p>到文件夹<strong>/lib/web/css/source/lib</strong>中拷贝lib.css文件到Magestore主题中</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 lib.css" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-7.png" width="auto" /></div>
<p>打开<strong>app/design/frontend/Magento/magestore/web/css/</strong>中的style.less文件，如下编辑代码：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 style.less" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-8.png" width="auto" /></div>
<p>之后，在你的source文件夹里创建mytheme.less。</p>
<p>我们就有了这样的文件路径：<strong>app/design/frontend/Magento/magestore/web/css/source/mytheme.less</strong>,将下面的代码加入到mytheme.less中：</p>
<pre><code>body {
  margin: 0px!important;
  padding: 0px!important;
}
 
.page-wrapper {
  background-color: #333;
}
 
 
.mycustom-class {
  color: red;
}
</code></pre>
<p>删除Var/cache文件夹，刷新你的浏览器，你将看到：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 mytheme修改效果" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-9.png" width="auto" /></div>
<h3>定制模版模块：</h3>
<p>你还可以定制任何模块的html，例如，如果你想定制前端的<strong>Magento_Catalog</strong>模块，到模块的<strong>app/code/Magento/Catalog/view/frontend/</strong>文件夹中，拷贝layout, templages, web文件到你的主题中并放置到和模块一样名字的<strong>Magento_catalog</strong>文件夹中，例如：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 Magento_Catalog" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-10.png" width="auto" /></div>
<p>让我们把&ldquo;Buy this product now&rdquo;加入到&ldquo;Add to Cart&rdquo;之下。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 添加语句到Add to cart下效果" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-11.png" width="auto" /></div>
<p>进入<strong>app/design/frontend/Magento/magestore/Magento_Catalog/templates/product/view/addto.phtml</strong>文件，在第31行的位置，如下编辑：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento2 添加语句到Add to cart下代码" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-2-12.png" width="auto" /></div>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 31 Oct 2015 14:25:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento邮寄方式的设置和修改]]></title>
      <link>https://www.360magento.com/blog/magento_shipping_methods/</link>
      <description><![CDATA[<p>要配置你的Magento邮寄方式，你需要登录后台，然后进入<strong>System -&gt; Configuration -&gt; Sales -&gt;Shipping Methods.</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Shipping Methods" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_shipping_methods_1.jpg" width="auto" /></div>
<p>在开启邮寄方式前你需要完成邮寄方式的设置，在<strong>System -&gt; Configuration -&gt; Sales -&gt; Shipping Settings.</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Shipping Setting" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_shipping_methods_2.jpg" width="auto" /></div>
<p>展开Origin区域。输入产品的发货地址，通常是产品存储的仓库。之后展开Option区域。开启<strong>Allow Shipping to Multiple Addresses</strong>就允许一个订单中的货物发送到多个地址。这是很实用的，比如一个客户买了很多明信片或者钢笔之类的东西，他想要发给不同的地址。你可以在<strong>Maximum Qty Allowed for Shipping to Multiple Addresses</strong>这一栏定义允许邮寄的地址的最大数量。</p>
<p>例如，要开启USPS邮寄方式，你可以进入<strong>System -&gt; Configuration -&gt; Sales -&gt; Shipping Methods</strong>，转到USPS区域：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Shipping USPS" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_shipping_methods_3.jpg" width="auto" /></div>
<p>开启邮寄方式，输入Gateway URL和UserID。下面的选项允许你描述包裹的信息（大小，重量等等&hellip;&hellip;）。然后你可以定义handling fee（手续费），可以是固定值也可以按百分比计算。之后你可以选择运输方式，你也可以配置一个到多少金额免运费的方法。</p>
<p>最后，你可以定义支持运输的国家和运输服务出错时的报错信息。在Sort order选项你应该输入这个运输方法相对其它运输方法的位置。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 31 Oct 2015 14:25:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento支付方法的设置和修改]]></title>
      <link>https://www.360magento.com/blog/magento_payment_methods/</link>
      <description><![CDATA[<p>Magento提供不同的支付方法来支持各种支付方式。例如：Paypal,Authorize.net和其它的支付方式。客户也能通过普通信用卡（如Visa，Master Card，American Express等&hellip;&hellip;）来完成支付。</p>
<p>要在Magento中配置你的支付方式，你需要先进入后台，接着<strong>System -&gt; Configuration -&gt; Sales -&gt; Payment Methods</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Payment Methods" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_payment_methods_1.jpg" width="auto" /></div>
<p>在这篇教程里，我们将开启信用卡支付方法。这个方法可以在Saved CC区域配置：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Saved CC" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_payment_methods_2.jpg" width="auto" /></div>
<p>开启方法，输入标题，设置新的订单状态，挑选支持的信用卡，决定是否需要信用卡验证，通过设置允许支付的国家来限定支付的范围。</p>
<p>填写Sort order可调整与其它支付方式的相对位置。好了，你已经为客户开启了这种支付方法。由于所有的支付方法都有不同的配置，我没办法在这里逐个详细说明，只要按照特定页面的说明，它们就应该可以工作。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 30 Oct 2015 12:37:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento2中创建主题（第一部分）]]></title>
      <link>https://www.360magento.com/blog/magento2-theme-1/</link>
      <description><![CDATA[<p>嘿，伙计。你已经积累多少Magento2知识了，有没有想要和大家分享的？我在Magento2中发现了一些有趣的功能。不论你是插件或主题开发人员，你都应该花时间读读这篇文章。因为你将明白更多关于Magento2主题和模版结构的知识。</p>
<p>我把这个教程分成了两个部分。今天的这篇是第一部分，关于主题包中的基础元素。第二部分将展示如何在Magento2中自定义它。</p>
<h2>1、主题包中的基础元素</h2>
<h3>a.Magento2中的主题结构</h3>
<p>Magento2的MVC结构比Magento1中更加明了。Magento2模块将添加View元素到模块文件结构里。以Catalog为例：<strong>app/code/Magento/Catalog/</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Catalog" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-1.png" width="auto" /></div>
<p>注意，View元素和Controller，Model在同一位置。展开View文件夹，你将看到：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Catalog View" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-2.png" width="auto" /></div>
<p>你可以看到，这个结构下有3个元素，他们是从 
<area />
 标签移出来的。 
<area />
 文件结构展开以后包含layout, templates, web。例如，frontend有3个基础文件夹：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento Catalog View frontend web" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-3.png" width="auto" /></div>
<p><strong>Layout（布局）</strong>文件夹包含所有模块的布局文件（类似于Magento 1.x，布局文件包含在主题文件夹的Layout里）。当然，这些布局的代码有不同的结构。我将在后面具体的部分说明。</p>
<p><strong>Template（模板）</strong>文件夹有所有的.phtml文件，和Magento1中一样由php和html代码混合而成，用来渲染成html。</p>
<p>Web文件夹是Magento2中新出现的文件夹，你可以从下图看到它的组成：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="web文件夹结构" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-4.png" width="auto" /></div>
<p>不难看出，它里面包含了CSS，JS和Images文件夹。也就是说，在Magento2中，旧的skin文件夹被划分到每个模块中去了，使得模块更加独立。</p>
<h3>b.Layout</h3>
<p>在Magento2中，每个模块有默认的布局，可以被重写或被另一个布局扩展。</p>
<p>例如：<strong>app/code/Magento/Catalog/view/frontend/layout/default.xml</strong></p>
<p>Magento用特别的句柄来分离布局文件。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="layout" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-5.png" width="auto" /></div>
<p>句柄的声明和之前规则一样catalog_product_view是一个根据模块和控制器动作命名的句柄。定义页面则需要更加具体的声明：<strong>catalog_product_view_type_simple_id_128</strong>。或者我们可以调用其它句柄。这里是关于Catalog模块布局文件位置的示例：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="Magento2 Catalog模块布局文件" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-6.png" width="auto" /></div>
<p>模块中有两种布局，<strong>Base layout</strong>和<strong>Theme layout</strong>。</p>
<p><strong>Base layout</strong>是每个模块默认的布局区域。如果不是你自定义的模块，我们是不建议你直接修改这些文件的。</p>
<p>例如：<strong>app/design/frontend/Magento/blank/Magento_Checkout/layout/</strong></p>
<pre><code>__app/code/&lt;Namespace&gt;/&lt;Module&gt;|__/view|__/&lt;area&gt;|__/layout|&ndash;&lt;layout_file1&gt;.xml|&ndash;&lt;layout_file2&gt;.xml</code></pre>
<p><strong>Theme layouts</strong>是模块的外部主题，允许通过报告主题文件中对应的&lt;Namespace&gt;_&lt;lModule&gt;来定制默认的主题布局。</p>
<p>例如：<strong>app/design/frontend/Magento/blank/Magento_Checkout/layout/</strong></p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="Magento2 Checkout布局" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-7.png" width="auto" /></div>
<p><strong>创建一个布局文件要遵循下面的规则：</strong></p>
<ul>
<li>每个布局文件调用一个句柄，其它被调用；</li>
<li>布局文件的名字就是布局句柄的名字，例如：checkout_cart_index</li>
<li>布局文件在布局文件夹中被调用</li>
</ul>
<p>例如：</p>
<pre><code>&lt;layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
&lt;update handle="page_one_column" /&gt;
   &lt;referenceContainer name="content"&gt;
   &lt;!-- ... --&gt;
   &lt;/referenceContainer&gt;
&lt;/layout&gt;
</code></pre>
<p><strong>下面描述布局文件的读取和处理顺序</strong>：</p>
<ul>
<li>如果布局文件属于不同的模块，那么执行的顺序将是：独立模块，相关模块，然后按字母顺序排列；</li>
<li>如果文件属于同一个模块，那么就按文件名字的字母顺序排列。</li>
</ul>
<p><strong>布局系统执行的步骤</strong></p>
<ul>
<li>读取所有默认布局文件组（base），包括关联的那个；</li>
<li>决定继承和重写文件的顺序；</li>
<li>添加所有被展开的布局，替换掉base中的布局，获取父类布局，替换被子类重写的父类布局。</li>
</ul>
<p>下面是布局进程的模型：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="Magento2布局进程" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-8.png" width="auto" /></div>
<p>由此看以看出，布局文件是由上自下被重写的，父类主题重写模块中的base主题，子主题（一般是我们定义的主题）重写父类。例如：Module_One模块的布局文件layout_2在重写文件夹中的父类主题parent_theme里被声明。因此，系统会用parent_theme &gt; Module_One &gt; override &gt; layout_2.xml替换掉Module_One &gt; layout_2.xml。</p>
<p><strong>布局/块区域：</strong></p>
<p>和magento1一样，它分为基础的布局区域：</p>
<p><strong>Container（容器）</strong>：分配页面元素的区域</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="Magento2容器" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-9.png" width="auto" /></div>
<p><strong>Block（块）</strong>：容器中默认Magento块元素所在的区域</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="Magento2块" src="http://7xjryy.com1.z0.glb.clouddn.com/create-magento2-custom-theme-1-10.png" width="auto" /></div>
<p>下面是一个布局内容示例：</p>
<pre><code>&lt;container name="container.1" label="Container 1"
as="container_1" output="1" htmlTag="div" htmlId="container-1"
htmlClass="container"&gt;
&lt;block class="Magento\Module\Block\Class" name="block.1"&gt;
&lt;container name="child.container" label="Child Container" as="child"&gt;
&lt;block type="Magento\Module\Block\Class" name="block.2"&gt;
&lt;/container&gt;
&lt;block class="Magento\Module\Block\Class" name="block.3"/&gt;
&lt;/container&gt;
&lt;container name="container.2" as="container_2" htmlTag="div"
htmlId="container-2" htmlClass="container"/&gt;
</code></pre>
<h2>c.新语言风格LESS介绍</h2>
<p>在定义主题元素之前，我们需要学习新的语言风格-LESS。在Magento2中这个语言很有趣。由于有一些高级的功能，LESS的添加级别要高于CSS。它被翻译成CSS得益于php中的LESS库。我们仍然允许在源码中添加CSS URL直接使用。</p>
<p>LESS语言的预处理是通过<strong>lib/internal/Magento/Css/PreProcesso</strong>中的库完成的。在LESS文件中的导入方式是：</p>
<p><strong>file.less</strong></p>
<pre><code>@magento_import &ldquo;&lt;some_id&gt;&rdquo;;
@import &ldquo;path/to/dir1/some_file&rdquo;;@import &ldquo;path/to/file/file1.less&rdquo;;@import &ldquo;path/to/file/file2.less&rdquo;;
</code></pre>
<p>想要了解更多关于LESS语言，你可以访问<a href="http://lesscss.org/">http://lesscss.org/</a>或者<a href="http://less.eten.vn/">http://less.eten.vn/</a></p>
<p>默认的LESS库文件结构是：</p>
<p><strong>lib/web/ ├── css/<br /> <br /> │ ├── docs/ (Library documentation)<br /> <br /> │ ├── source/<br /> <br /> │ │ ├── lib/ (Library source files)<br /> <br /> │ │ │ ├── abstract.less<br /> <br /> │ │ │ ├── actions-toolbar.less<br /> <br /> │ │ │ ├── breadcrumbs.less<br /> <br /> │ │ │ ├── buttons.less<br /> <br /> │ │ │ ├── dropdowns.less<br /> <br /> │ │ │ ├── forms.less<br /> <br /> │ │ │ ├── icons.less<br /> <br /> │ │ │ ├── layout.less<br /> <br /> │ │ │ ├── lib.less<br /> <br /> │ │ │ ├── loaders.less<br /> <br /> │ │ │ ├── messages.less<br /> <br /> │ │ │ ├── navigation.less<br /> <br /> │ │ │ ├── pages.less<br /> <br /> │ │ │ ├── popups.less<br /> <br /> │ │ │ ├── rating.less<br /> <br /> │ │ │ ├── resets.less<br /> <br /> │ │ │ ├── responsive.less<br /> <br /> │ │ │ ├── sections.less<br /> <br /> │ │ │ ├── tables.less<br /> <br /> │ │ │ ├── tooltips.less<br /> <br /> │ │ │ ├── typography.less<br /> <br /> │ │ │ ├── utilities.less<br /> <br /> │ │ │ └── variables.less<br /> <br /> │ │ └── theme.less<br /> <br /> │ └── styles.less<br /> <br /> ├── fonts/<br /> <br /> │ └── Blank-Theme-Icons/ (Library custom icons font)<br /> <br /> ├── images/<br /> <br /> │ └── blank-theme-icons.png (Library icons sprite)<br /> <br /> └── jquery/ (Library javascript files)</strong></p>
<h3>&nbsp;</h3>
<h3>d.Mage_page元素</h3>
<p>之前Magento版本中的Mage_page元素被Mangento_Theme模块替代了。</p>
<p>现在，准备好学习下一章了吗？那么开始<a title="如何在Magento2中创建主题（第二部分）" href="https://www.360magento.com/blog/magento2-theme-2/">第二部分</a>吧！</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 30 Oct 2015 12:24:27 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento产品教程]]></title>
      <link>https://www.360magento.com/blog/magento_product/</link>
      <description><![CDATA[<p>在这篇教程中我们将讨论网店中最重要的一个方面--你的产品。一旦你读了这篇教程，你将知道如何添加、管理产品，给产品添加图片和标签。</p>
<h1>1、在Magento中如何添加产品</h1>
<p>进入Magento后台-&gt; Catalog -&gt; Manage Products -&gt; Add Product</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento产品添加" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_1.jpg" height="346" width="609" /></div>
<p>选择产品设置（属性组和产品类型），点击Continue按钮；</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento产品属性组和类型选择" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_2.jpg" height="346" width="609" /></div>
<p>在接下来的页面里，你需要填写产品的相关信息（Name, SKU (Stock Keeping Unit), Weight, Status (Enabled/Disabled), Tax Class等等&hellip;&hellip;）你也可以通过Create New Attribute按钮为产品添加自定义属性。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento产品基本信息" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_3.jpg" height="346" width="609" /></div>
<p>填好以后，点击Save and Continue Edit按钮，在下一个选项卡里你将为产品定价。你也可以添加像Tier Price和Special Price这样的特殊价格。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento产品价格" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_4.jpg" height="346" width="609" /></div>
<p>点击Save and Continue Edit按钮保存产品，如果想让产品在前端显示，请务必设置Inventory为In Stock。</p>
<h1>2、如何为产品添加图片</h1>
<p>在Magento中为产品添加图片是很容易的。在后台-&gt; Catalog -&gt; Manage Products出现的网格中选择你要添加图片的产品，然后在左侧选择Images选项。点击Browse Files按钮，然后选中你要上传的图片，再点击Upload Files上传图片到服务器。最后，选择用点选按钮选择图片出现的位置，点击Save按钮。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento图片上传" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_6.jpg" height="346" width="609" /></div>
<h1>3、如何管理产品属性</h1>
<p>点击Create New Attribute按钮可为产品创建属性</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento添加属性" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_7.jpg" height="346" width="609" /></div>
<p>属性填写完以后点击Save Attribute按钮，在category选项卡里可为产品选择一个分类。最后点击Save按钮保存产品信息。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento产品加入分类" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_8.jpg" height="346" width="609" /></div>
<h1>4、如何管理产品标签</h1>
<p>默认地，Magento允许顾客对产品进行标记。当客户给某个产品标记以后，标签会变为待定状态，只有被批准以后才会显示在产品页面。</p>
<p>让我们给产品添加标签，批准它，然后看它在产品详细页是如何显示的。添加产品标签只需要简单地在Add Your Tags区域填写、提交即可。我们添加"Great"标签，点击Add Tags，之后会出现一条提示信息，说明标签已经被接收。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento标签添加" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_9.jpg" height="346" width="609" /></div>
<p>接着，进入后台-&gt; Catalog -&gt; Tags -&gt; Pending Tags，这里可以看到所有的标签。在我们这种情况下，只有一个出于"Pending"状态下名为"Great"的标签。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento标签列表" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_10.jpg" height="346" width="609" /></div>
<p>点击它，你就会看到下面的界面，在这里将"pending"改为"Approved",点击Save Tag。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento标签状态修改" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_11.jpg" height="346" width="609" /></div>
<p>现在，这个标签就被批准了，其它客户可以在对应产品的详细页看到这个标签了。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 29 Oct 2015 15:57:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在Magento2中创建一个简单的模块]]></title>
      <link>https://www.360magento.com/blog/create-magento2-module/</link>
      <description><![CDATA[<p>本示例中命名空间为：Magento，模块名为：Hello，示例链接为http://localhost/magento20/hello/index/index。</p>
<h1>1、创建<strong>app/code/Magento/Hello/etc/module.xml</strong>文件来声明模块</h1>
<pre><code>&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"&gt;
   &lt;module name="Magento_Hello" schema_version="0.0.1"/&gt;
&lt;/config&gt;
</code></pre>
<h1>2、创建控制器和动作：</h1>
<p>创建<strong>app/code/Magento/Hello/Controller/Index/Index.php</strong>，其中Index扮演控制器的角色，Index.php是动作。Index.php中执行的方法是execute()。</p>
<pre><code>namespace Magento\Hello\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action
{
  public function execute()
{
     $this-&gt;_view-&gt;loadLayout();
       $this-&gt;_view-&gt;getLayout()-&gt;initMessages();
    $this-&gt;_view-&gt;renderLayout();
}
}
</code></pre>
<p>创建一个块：<strong>app/code/Magento/Hello/Block/Hello.php</strong></p>
<pre><code>namespace Magento\Hello\Block;
class Hello extends \Magento\Framework\View\Element\Template
{
public function _prepareLayout()
{
    return parent::_prepareLayout();
}
}
</code></pre>
<p>写配置文件<strong>/app/code/Magento/Hello/etc/frontend/routes.xml</strong>。</p>
<p>在Magento2中config.xml 只配置默认&lt;default&gt;标签中的配置值。前端路由的信息会在<strong>Magento/Hello/etc/frontend/routes.xml</strong>中（后台也是类似的）。前端事件会被声明在<strong>Magento/Hello/ect/frontend/events.xml</strong>（后台类似）。我们这里只是一个简单的示例，只在<strong>Magento/Hello/etc/frontend/routes.xml</strong>中声明路由。</p>
<pre><code>&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd"&gt;
&lt;router id="standard"&gt;
    &lt;route id="hello" frontName="hello"&gt;
        &lt;module name="Magento_Hello" /&gt;
    &lt;/route&gt;
&lt;/router&gt;
&lt;/config&gt;</code></pre>
<h1>3、创建前端模板</h1>
<p>这一步中布局的名字很重要，它将被命名在结构后：<strong>router name_controller namer_action name</strong>（路由器名_控制器名_动作名）。</p>
<pre><code>&lt;page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"&gt;
&lt;body&gt;
    &lt;referenceContainer name="content"&gt;
        &lt;block class="Magento\Hello\Block\Hello" name="hello" template="success.phtml"&gt;
        &lt;/block&gt;
    &lt;/referenceContainer&gt;
&lt;/body&gt;
&lt;/page&gt;
</code></pre>
<p>接着，我们创建布局文件中调用的<strong>success.phtml</strong>文件。</p>
<pre><code>&lt;?php echo &lsquo;Successful! This is a simple module in Magento 2.0&prime;; ?&gt;
</code></pre>
<h1>4、打开<strong>app/etc/config.xml</strong>，在&lsquo;module&rsquo;数组里添加元素&lsquo;Magento_Hello&rsquo; =&gt; 1,</h1>
<p>最后访问http://localhost/magento20/hello/index/index，查看结果。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 28 Oct 2015 12:27:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento的安装]]></title>
      <link>https://www.360magento.com/blog/magento-installation/</link>
      <description><![CDATA[<p>1.从官网下载最新的Magento安装包：<a title="magento 下载" href="http://www.magentocommerce.com/download">http://www.magentocommerce.com/download</a>；</p>
<p>2.将下载的安装包放到安装环境下，本地使用wamp或者xamp，在线则需要使用cPanel或者FTP工具；</p>
<p>3.本地进入phpmyadmin（线上则用cPanel的MySQL管理），创建一个数据库和用户，在安装过程中会用到。</p>
<p>4.在浏览器中输入Magento安装包地址就会进入安装步骤，会看到如下界面：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento安装协议" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_installation_1.jpg" height="346" width="609" /></div>
<p>勾选"I agree to the above terms and conditions"，点击Continue按钮；</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento安装语言环境" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_installation_2.jpg" height="346" width="609" /></div>
<p>选择时区和货币类型，点击Continue按钮；</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento安装数据库配置" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_installation_3.jpg" height="346" width="609" /></div>
<p>进入数据库安装页面，输入之前创建的数据库名和用户名，密码，勾选"Skip Base URL validation before next step"选项，点击Continue按钮；</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento安装个人设置" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_installation_4.jpg" height="346" width="609" /></div>
<p>最后进入个人信息和后台登录详情页面，按要求填写信息，点击Continue按钮即可。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento安装数据库成功" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_installation_5.jpg" height="346" width="609" /></div>
<p>安装成功，可点击对应的按钮进入前端或者后台。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 28 Oct 2015 12:13:51 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ 如何重写Magento模型类？]]></title>
      <link>https://www.360magento.com/blog/override_magento_model/</link>
      <description><![CDATA[<p>很多时候当我想要实现新功能，但又不想修改核心类。对于控制器来说，这很简单。从核心文件中拷贝控制器，放到local中同样的位置，然后修改就可以了。但这不适用于模型，那么如何在不修改核心文件的前提下重写Magento模型呢？</p>
<p>幸运的是，这并不难。让我们一起做个插件吧。我们以<strong>app/code/core/Mage/Wishlist/Model/Item.php</strong>中的<strong>Mage_Wishlist_Model_Item</strong>为例。我们想要添加新的功能，所以创建新的模块。<strong>app/code/local/Alwayly/Wishlist/Model/Item.php</strong>。现在将<strong>Mage_Wishlist_Model_Item</strong>重命名为<strong>Alwayly_Wishlist_Model_Item</strong>并在<strong>loadByProductWishlist</strong>方法加入下面一行代码：</p>
<pre><code>var_dump(get_class($this)); exit();
</code></pre>
<p>现在，在<strong>app/etc/modules/</strong>中创建<strong>Alwayly_Wishlist.xml</strong>，代码如下：</p>
<pre><code>&lt; ?xml version="1.0"?&gt;  
&lt;config&gt;  
    &lt;modules&gt;  
        &lt;alwayly_wishlist&gt;  
            &lt;active&gt;true&lt;/active&gt;  
            &lt;codepool&gt;local&lt;/codepool&gt;  
        &lt;/alwayly_wishlist&gt;  
    &lt;/modules&gt;  
&lt;/config&gt; 
</code></pre>
<p>接着用下面的代码创建<strong>app/code/local/Alwayly/Wishlist/etc/Config.xml</strong>：</p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;alwayly_wishlist&gt;
            &lt;version&gt;0.1&lt;/version&gt;
        &lt;/alwayly_wishlist&gt;
    &lt;/modules&gt;
    &lt;global&gt;
       &lt;models&gt;
          &lt;wishlist&gt;
              &lt;rewrite&gt;
                  &lt;item&gt;Alwayly_Wishlist_Model_Item&lt;/item&gt;
              &lt;/rewrite&gt;
          &lt;/wishlist&gt;
       &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 27 Oct 2015 12:19:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[以编程的方式创建Magento并与布局关联]]></title>
      <link>https://www.360magento.com/blog/programatically-blocks-layout/</link>
      <description><![CDATA[<p>想像一下，当你要创建一个简单的视图文件（例如，custom-note.phtml）并在Magento的一些新链接中展示出来。一种方式是创建CMS页面，在CMS页面中调用这个块。但是当你想要让这个块在Magento布局的其它部分，或者说后台CMS修改不了的地方？如果我想在面包屑导航下面添加新的div元素或者新的块，又该如何做？</p>
<p>Magento的理念是在你模块的/Block文件夹下创建块类，/layout文件夹下创建xml布局文件，等等。总之，你要么需要创建Block文件或添加/修改布局文件入口。</p>
<p>一切都确定好了，如果你要在多店铺中开发一个模块，我首要关心的就是将必要模块文件的数量降到最低。下面的代码将让你知道调用Core/Template块到任何Magento布局区域是多么简单。</p>
<p><strong>app/code/local/ActiveCodeline/CustomOutputs/controllers/IndexController.php</strong></p>
<pre><code>public function indexAction()
{
//Get current layout state
$this-&gt;loadLayout();
 
$block = $this-&gt;getLayout()-&gt;createBlock(
'Mage_Core_Block_Template',
'my_block_name_here',
array('template' =&gt; 'activecodeline/developer.phtml')
);
 
$this-&gt;getLayout()-&gt;getBlock('content')-&gt;append($block);
 
//Release layout stream... lol... sounds fancy
$this-&gt;renderLayout();
}
</code></pre>
<p>值得注意的是，当你提交一个无效的块到<strong>-&gt;append()</strong>时，可能什么也不会发生。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 27 Oct 2015 12:14:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento自定义邮件]]></title>
      <link>https://www.360magento.com/blog/magento-custom-emails/</link>
      <description><![CDATA[<p>是否曾想过用Magento内置的电子邮件功能发送邮件？是否想在Magento中做些什么的时候碰壁？好吧，我已经知道答案了。总之，Magento发送邮件被证实只要几个小时跟踪Magento代码。那么，我要创建名为activecodeline_custom_email1.html电子邮件，我想在它运行时传几个变量给它，我要以编程的方式发送电子邮件。</p>
<p>下面就是：</p>
<pre><code>...
/*
 * Loads the html file named 'custom_email_template1.html' from
 * app/locale/en_US/template/email/activecodeline_custom_email1.html
 */ 
$emailTemplate  = Mage::getModel('core/email_template')
						->loadDefault('custom_email_template1');					

//Create an array of variables to assign to template
$emailTemplateVariables = array();
$emailTemplateVariables['myvar1'] = 'Branko';
$emailTemplateVariables['myvar2'] = 'Ajzele';
$emailTemplateVariables['myvar3'] = 'ActiveCodeline';
 
/**
 * The best part :)
 * Opens the activecodeline_custom_email1.html, throws in the variable array 
 * and returns the 'parsed' content that you can use as body of email
 */
$processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables);
 
/*
 * Or you can send the email directly, 
 * note getProcessedTemplate is called inside send()
 */
$emailTemplate->send('john@someemail.com','John Doe', $emailTemplateVariables);
...
</code></pre>
<p>为了让上面的代码工作，你需要在<strong>config.xml</strong>中添加下面的代码：</p>
<pre><code>...
&lt;global>      
	&lt;template>
		&lt;email>
			&lt;custom_email_template1 module="SampleModule1">
				&lt;label>ActiveCodeline custom email module&lt;/label>
				&lt;file>activecodeline_custom_email1.html&lt;/file>
				&lt;type>html&lt;/type>
			&lt;/custom_email_template1>
		&lt;/email>
	&lt;/template>
&lt;/global>  
...
</code></pre>
<p>不要忘了邮件模版<strong>app/locale/en_US/template/email/activecodeline_custom_email1.html.</strong></p>
<pre><code>&lt;!--@subject ActiveCodeline custom email module @-->
 
&lt;div>
&lt;h1>ActiveCodeline custom email example by Branko Ajzele&lt;/h1>
&lt;p>Hi there {{var myvar1}} {{var myvar2}} from {{var myvar3}}. This is just some example template to test custom email module.&lt;/p>
&lt;/div>
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 26 Oct 2015 12:57:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何用前端模版代码删除Magento产品]]></title>
      <link>https://www.360magento.com/blog/delete-magento-product/</link>
      <description><![CDATA[<p>由于某些原因，你可能需要在视图文件中用自定义代码删除产品。但是你会惊讶的看到 &ldquo;Cannot complete this operation from non-admin area.&rdquo;这样的报错。下面有些小技巧让你实现它。</p>
<p>这里是奏效的代码部分：</p>
<pre><code>$_authors_product = new Mage_Catalog_Model_Product();
	$_authors_product-&gt;load($_item_val_id);
 
	//echo "DELETED... ".$_POST['submit_item4sale_remove_by_entity_id'];
	$_item_val_id = $_POST['submit_item4sale_remove_by_entity_id']; 
	$_item_val_id = (int)str_replace('entity_id_', '', $_item_val_id);
 
	$_authors_product = new Mage_Catalog_Model_Product();
	$_authors_product-&gt;load($_item_val_id);
 
	$_current_customer_id = Mage::getSingleton('customer/session')-&gt;getCustomer()-&gt;getId();
 
	//Allow deletion only if product is from author
	if($_authors_product-&gt;submited_by_author == $_current_customer_id) 
	{
		//var_dump(Mage::registry('isSecureArea'));
 
		Mage::register('isSecureArea', true);
		//$_authors_product-&gt;delete();
		echo 'ALLOWED DELETED OH YEAAAAAA....';
		Mage::unregister('isSecureArea');	
	}
</code></pre>
<p>上面的代码是我最近项目中的一部分，其中最重要的是：</p>
<pre><code>Mage::register('isSecureArea', true);
echo 'ALLOWED DELETED OH YEAAAAAA....';
Mage::unregister('isSecureArea');
</code></pre>
<p>基本的想法是在注册表中写入合适的值Mage::register(&lsquo;isSecureArea&rsquo;, true)，删除产品后移除它。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 26 Oct 2015 12:52:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何获取Magento中所有启用的支付模块]]></title>
      <link>https://www.360magento.com/blog/active-payment-modules/</link>
      <description><![CDATA[<p>下面的代码将获取你所有启用的Magento支付模块。下面的例子返回一个数组，你可以用它在Magento的前后台创建一个下拉框或者别的东西。</p>
<pre><code>class Alwayly_Vendor_Model_Activpayment
{
 
 
	public function getActivPaymentMethods()
	{
	   $payments = Mage::getSingleton('payment/config')-&gt;getActiveMethods();
 
	   $methods = array(array('value'=&gt;'', 'label'=&gt;Mage::helper('adminhtml')-&gt;__('--Please Select--')));
 
	   foreach ($payments as $paymentCode=&gt;$paymentModel) {
            $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title');
            $methods[$paymentCode] = array(
                'label'   =&gt; $paymentTitle,
                'value' =&gt; $paymentCode,
            );
        }
 
        return $methods;
 
	} 
 
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 25 Oct 2015 12:31:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[更改Magento后台网格行数]]></title>
      <link>https://www.360magento.com/blog/admin-grid-rows/</link>
      <description><![CDATA[<p>我们从客户那里接到一个需求，让我们更改Magento后台网格显示的行数。现在，这非常简单，我们知道如何做。下面的例子中，我们将使用Magento观测者模型和事件<strong>&ldquo;core_block_abstract_prepare_layout_before&rdquo;</strong>。</p>
<p>首先，给你的文件做好备份。</p>
<p>这是事件的例子，将下面的代码放入到<strong>config.xml</strong>：</p>
<pre><code>&lt;adminhtml&gt;
        &lt;events&gt;            
            &lt;core_block_abstract_prepare_layout_before&gt;
    		&lt;observers&gt;
                    &lt;reward&gt;
                        &lt;class&gt;grid/observer&lt;/class&gt;
                        &lt;method&gt;applyLimitToGrid&lt;/method&gt;
                    &lt;/reward&gt;
                &lt;/observers&gt;
    	    &lt;/core_block_abstract_prepare_layout_before&gt;
        &lt;/events&gt;
&lt;/adminhtml&gt;
</code></pre>
<p>第二步</p>
<p>创建模型类<strong>observer.php</strong></p>
<pre><code>class Alwayly_Grid_Model_Observer
{
 
    public function applyLimitToGrid(Varien_Event_Observer $observer)
    {
    	$block = $observer-&gt;getEvent()-&gt;getBlock();
    	if(($block instanceof Mage_Adminhtml_Block_Widget_Grid) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; !($block  instanceof Mage_Adminhtml_Block_Dashboard_Grid))
    	$block-&gt;setDefaultLimit(200);
 
    }
 
}
</code></pre>
<p>如果你知道如何创建Magento模块，那么最好将这些代码写入你自己的模块。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 25 Oct 2015 12:28:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为Magento网格中的自定义列添加自定义渲染器]]></title>
      <link>https://www.360magento.com/blog/magento-custom-renderer/</link>
      <description><![CDATA[<p>有时你会需要在Magento的一些网格中添加新列，这是个很简单的任务。但是你可能想按你的方式格式化值或者别的什么。那么写你自己的渲染器就十分有用和简单了。</p>
<p>那么实际情况该如何做呢？让我们看看后台产品列表网格。在<strong>/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php</strong>文件中被称为<strong>Mage_Adminhtml_Block_Catalog_Product_Grid</strong>的类。在这篇文章中我们不重写这个块，但是让你知道如何做到这一点。用新的数据修改<strong>_prepareCollection()</strong>方法，例如，让我们为一个产品添加短描述。</p>
<pre><code>protected function _prepareCollection()
{
$store = $this-&gt;_getStore();
$collection = Mage::getModel('catalog/product')-&gt;getCollection()
-&gt;addAttributeToSelect('sku')
-&gt;addAttributeToSelect('name')
-&gt;addAttributeToSelect('short_description') // THIS IS WHAT WE HAVE ADDED
-&gt;addAttributeToSelect('attribute_set_id')
-&gt;addAttributeToSelect('type_id')
-&gt;joinField('qty',
'cataloginventory/stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left');
 
if ($store-&gt;getId()) {
//$collection-&gt;setStoreId($store-&gt;getId());
$collection-&gt;addStoreFilter($store);
$collection-&gt;joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store-&gt;getId());
$collection-&gt;joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store-&gt;getId());
$collection-&gt;joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store-&gt;getId());
$collection-&gt;joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store-&gt;getId());
}
else {
$collection-&gt;addAttributeToSelect('price');
$collection-&gt;addAttributeToSelect('status');
$collection-&gt;addAttributeToSelect('visibility');
}
 
$this-&gt;setCollection($collection);
 
parent::_prepareCollection();
$this-&gt;getCollection()-&gt;addWebsiteNamesToResult();
return $this;
}
</code></pre>
<p>现在，让我们把这些添加到一个新的列：</p>
<pre><code>*You will find some more code inside this method, but for readability purposes, I'll just say you need to add code you find 

here at beginning of this method...*/
 
protected function _prepareColumns()
{
$this-&gt;addColumn('Short description',
array(
'header'=&gt; Mage::helper('catalog')-&gt;__('Short description'),
'index' =&gt; 'short_description',
'renderer'  =&gt; 'Mage_Adminhtml_Block_Catalog_Product_Renderer_Red',// THIS IS WHAT THIS POST IS ALL ABOUT
));
 
}
</code></pre>
<p>创建<strong>Mage_Adminhtml_Block_Catalog_Product_Renderer_Red </strong>类，其代码如下</p>
<pre><code>&lt; ?php
class Mage_Adminhtml_Block_Catalog_Product_Renderer_Red extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
 
public function render(Varien_Object $row)
{
$value =  $row-&gt;getData($this-&gt;getColumn()-&gt;getIndex());
return '&lt;span style="color:red;"&gt;'.$value.'';
 
}
 
}
?&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 24 Oct 2015 14:31:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用PHP-ExcelReader类来读取XLS文件到Magento模块]]></title>
      <link>https://www.360magento.com/blog/excelreader-load-xls/</link>
      <description><![CDATA[<p>最近遇上一个不小的问题，我要读取XLS（Microsoft Excel文件）到PHP。在我花了近两个小时在网上搜索以后，我发现了一个开源的&ldquo;PHP-ExcelReader class&rdquo;很不错。它有所有我需要的东西（多表支持，可读取EXCEL 2000和2007的数据），另一方面，Magento不支持XLS。我决定些一个小的方法，这样你就可以在任何Magento的类里执行了。</p>
<p>那么，下面就是代码了：</p>
<pre><code>public function loadXML($path_to_XML)
{
$include_path = dirname(__FILE__);
$path_to_PHP_ExcelReader = $include_path."/read_xls/Excel/reader.php";
 
require_once $path_to_PHP_ExcelReader;
 
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
 
// Set output Encoding.
$data-&gt;setOutputEncoding('utf-8');
/* if you want you can change 'iconv' to mb_convert_encoding:*/
 
$data-&gt;setUTFEncoder('mb');
 
/*
* By default rows &amp; cols indeces start with 1
* For change initial index use:
*/
$index = 0;
 
$data-&gt;setRowColOffset($index);
/* setDefaultFormat - set format for columns with unknown formatting*/
 
$data-&gt;setDefaultFormat('%.2f');
 
/* setColumnFormat - set format for column (apply only to number fields)*/
$data-&gt;setColumnFormat(4, '%.3f');
/*Do the actual reading of file*/
 
$data-&gt;read($path_to_XML);
return $data;
}
</code></pre>
<p>下面是你的Excel文件数据化为PHP数组后可以调用的方法：</p>
<pre><code>$data-&gt;sheets[0]['numRows']
//count rows
 
$data-&gt;sheets[0]['numCols']
//count columns
 
$data-&gt;sheets[0]['cells'][$i][$j]
//data from $i-row $j-column
 
$data-&gt;sheets[0]['cellsInfo'][$i][$j]
//extended info about cell
 
$data-&gt;sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
//if 'type' == "unknown" - use 'raw' value, because  cell contain value with format '0.00';
$data-&gt;sheets[0]['cellsInfo'][$i][$j]['raw'] = value
//if cell without format
 
$data-&gt;sheets[0]['cellsInfo'][$i][$j]['colspan']
//gets colspan value
 
$data-&gt;sheets[0]['cellsInfo'][$i][$j]['rowspan']
//gets rowspan value
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 24 Oct 2015 14:12:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento核心动作前后调用事件]]></title>
      <link>https://www.360magento.com/blog/before-after-events/</link>
      <description><![CDATA[<p>正如我们所知的，Magento中有些事件被默认地调度。我们可以轻易地挂钩这些事件，但这不是这篇文章的主题。我们要尝试的是在一些Magento控制器的一些动作前后添加自定义事件。</p>
<p>这样，我们就不需要事件被默认调度。当然，有些事件需要多做一点处理（例如，如果你需要一些session的东西，session在动作之后要被清除），但是大部分情况，有一种方法可以从事件中获取我们想要的。</p>
<p>例如，<strong>&ldquo;Mage_Checkout_CartController&rdquo;</strong>中的&ldquo;addAction()&rdquo;方法，我们可以用标准的方式重写这个方法并在重写的类里调度我们的事件。但我们可以做些类似这样的事情。</p>
<p>添加下面的代码到你模块的<strong>config.xml</strong>文件：</p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;dispatcher&gt;
                &lt;class&gt;Alwayly_Dispatcher_Model&lt;/class&gt;
            &lt;/dispatcher&gt;
        &lt;/models&gt;
    &lt;/global&gt;
    &lt;frontend&gt;
        &lt;events&gt;
            &lt;!-- Hooking to Magento's default event "controller_action_predispatch" --&gt;
            &lt;controller_action_predispatch&gt;
                &lt;observers&gt;
                    &lt;controller_action_before&gt;
                        &lt;class&gt;dispatcher/observer&lt;/class&gt;
                        &lt;method&gt;hookToControllerActionPreDispatch&lt;/method&gt;
                    &lt;/controller_action_before&gt;
                &lt;/observers&gt;
            &lt;/controller_action_predispatch&gt;
            &lt;!-- Hooking to Magento's default event "controller_action_postdispatch" --&gt;
            &lt;controller_action_postdispatch&gt;
                &lt;observers&gt;
                    &lt;controller_action_after&gt;
                        &lt;class&gt;dispatcher/observer&lt;/class&gt;
                        &lt;method&gt;hookToControllerActionPostDispatch&lt;/method&gt;
                    &lt;/controller_action_after&gt;
                &lt;/observers&gt;
            &lt;/controller_action_postdispatch&gt;
            &lt;!-- Hooking to our own event "add_to_cart_before" --&gt;
            &lt;add_to_cart_before&gt;
                &lt;observers&gt;
                    &lt;add_to_cart_before&gt;
                        &lt;class&gt;dispatcher/observer&lt;/class&gt;
                        &lt;method&gt;hookToAddToCartBefore&lt;/method&gt;
                    &lt;/add_to_cart_before&gt;
                &lt;/observers&gt;
            &lt;/add_to_cart_before&gt;
            &lt;!-- Hooking to our own event "add_to_cart_after" --&gt;
            &lt;add_to_cart_after&gt;
                &lt;observers&gt;
                    &lt;add_to_cart_after&gt;
                        &lt;class&gt;dispatcher/observer&lt;/class&gt;
                        &lt;method&gt;hookToAddToCartAfter&lt;/method&gt;
                    &lt;/add_to_cart_after&gt;
                &lt;/observers&gt;
            &lt;/add_to_cart_after&gt;
        &lt;/events&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>添加下面的代码到你模块的<strong>Observer.php</strong></p>
<pre><code>class Alwayly_Dispatcher_Model_Observer
{
    //this is hook to Magento's event dispatched before action is run
    public function hookToControllerActionPreDispatch($observer)
    {
        //we compare action name to see if that's action for which we want to add our own event
        if($observer-&gt;getEvent()-&gt;getControllerAction()-&gt;getFullActionName() == 'checkout_cart_add') 
        {
            //We are dispatching our own event before action ADD is run and sending parameters we need
            Mage::dispatchEvent("add_to_cart_before", array('request' =&gt; $observer-&gt;getControllerAction()-&gt;getRequest()));
        }
    }
 
    public function hookToControllerActionPostDispatch($observer)
    {
         //we compare action name to see if that's action for which we want to add our own event 
        if($observer-&gt;getEvent()-&gt;getControllerAction()-&gt;getFullActionName() == 'checkout_cart_add') 
        {
            //We are dispatching our own event before action ADD is run and sending parameters we need
            Mage::dispatchEvent("add_to_cart_after", array('request' =&gt; $observer-&gt;getControllerAction()-&gt;getRequest()));
        }
    }
 
 	public function hookToAddToCartBefore($observer) 
	{   
            //Hooking to our own event
	    $request = $observer-&gt;getEvent()-&gt;getRequest()-&gt;getParams();
            // do something with product
	    Mage::log("Product ".$request['product']." will be added to cart.");
	}
 
	public function hookToAddToCartAfter($observer) 
	{
            //Hooking to our own event
	    $request = $observer-&gt;getEvent()-&gt;getRequest()-&gt;getParams();
            // do something with product
	    Mage::log("Product ".$request['product']." is added to cart.");
	}
}
</code></pre>
<p>最后，我要指出的是：这段代码没有在产品环境中做测试，我们只是添加了两个自定义事件在Magento核心动作的前后，而不必重写这个类。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 23 Oct 2015 11:49:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何扩展Magento核心控制器]]></title>
      <link>https://www.360magento.com/blog/extend-magento-controller/</link>
      <description><![CDATA[<p>今天我将演示如何在不弄乱核心文件本身的前提下编辑Magento核心模块。</p>
<p>我选择Magento Customer模块下的Account控制器作为本文的示例。你要先找出它在Magento核心文件夹里的路径（完整路径是：<strong>app/code/core/Mage/Customer/controllers/AccountController.php</strong>）。</p>
<p>首先创建有类似文件结构的文件：</p>
<p><strong>app/code/local/Alwayly/Coreextended/controllers/Frontend/Customer/AccountController.php</strong>。（当然，你可以把Alwayly替换成你想要的命名空间，Coreextended换成其它模块名，但你需要对其它部分做相应的修改）。</p>
<p>接着创建我们模块的xml文件：app/code/local/Alwayly/Coreextended/etc/config.xml。将下面的代码写入对应的文件中：</p>
<h1>1.AccountController.php:</h1>
<pre><code>&lt; ?php
require_once Mage::getModuleDir('controllers', 'Mage_Customer').DS.'AccountController.php';
//we need to add this one since Magento wont recognize it automatically

class Alwayly_Coreextended_Frontend_Customer_AccountController extends Mage_Customer_AccountController
{//here, you extended the core controller with our public function indexAction()
{
parent::indexAction();
//you can always use default functionality
}

public function myactionAction()
{
//my code
//you can write your own methods / actions
}

public function mymethod()
{
//my code
//you can write your own methods
}

public function loginAction()
{
//finally you can write your code that will rewrite the whole core method
//and you can call for your own methods, as you have full control over core controller
}
}
</code></pre>
<h1>2.config.xml:</h1>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;alwayly_coreextended&gt;
            &lt;version&gt;0.2.0&lt;/version&gt;
        &lt;/alwayly_coreextended&gt;
    &lt;/modules&gt;
    &lt;frontend&gt;
        &lt;routers&gt;
            &lt;customer&gt;
                &lt;args&gt;
                    &lt;modules&gt;
                        &lt;alwayly_coreextended before="Mage_Customer_AccountController"&gt;
                               Alwayly_Coreextended_Frontend_Customer
                        &lt;/alwayly_coreextended&gt;
                    &lt;/modules&gt;
                &lt;/args&gt;
            &lt;/customer&gt;
        &lt;/routers&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<h1>3.Alwayly_Coreextended.xml：</h1>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;!--we need to enable this module as any other if--&gt;
&lt;!--you wish to do it as standalone module extension--&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;alwayly_coreextended&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codepool&gt;local&lt;/codepool&gt;
        &lt;/alwayly_coreextended&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 23 Oct 2015 11:42:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[以编程的方式修改magento核心配置数据]]></title>
      <link>https://www.360magento.com/blog/programmatically-core-config/</link>
      <description><![CDATA[<p>Magento安装完成后一定有一些设置好的核心配置。当你从后台面板更新这些值的时候，数据会被保存到<strong>core_config_data到</strong>这张数据表。这看起来很重要，也是你不会去碰触的，是嘛？在有些情况下，你想要用代码直接修改设置，这篇文章就将演示如何去做。
</p>
<p>假设我们想将<strong>“demo store notice” </strong>(on/off)的值从0改为1。你可以打开你的数据库，进入<strong>“core_config_data“</strong>表，改变这个数据的值，然后保存。好吧，下面就是我要讲的代码，你可以在你代码的任何一位置调用它：</p>
<pre><code>$alwaylySwitch = new Mage_Core_Model_Config();
/*
*turns notice on
*/
$alwaylySwitch ->saveConfig('design/head/demonotice', "1", 'default', 0);
/*
*turns notice off
*/
$alwaylySwitch ->saveConfig('design/head/demonotice', "0", 'default', 0);
</code></pre>
<p>实现这一神奇功能的代码是：</p>
<pre><code>class Mage_Core_Model_Config
{
	.
	.
	.
 
	/**
     * Save config value to DB
     *
     * @param string $path
     * @param string $value
     * @param string $scope
     * @param int $scopeId
     * @return Mage_Core_Store_Config
     */
    public function saveConfig($path, $value, $scope = 'default', $scopeId = 0)
    {
        $resource = $this->getResourceModel();
        $resource->saveConfig(rtrim($path, '/'), $value, $scope, $scopeId);
 
        return $this;
    }
 
	.
	.
	.
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 22 Oct 2015 11:23:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[给Magento PDF发票添加自定义属性]]></title>
      <link>https://www.360magento.com/blog/magentos-invoice-attribute/</link>
      <description><![CDATA[<p>今天我将用短短的几步添加自定义属性到Magento的PDF发票。最近我有个任务是为产品创建一个名称为<strong>&ldquo;alwayly_warehouse_location&rdquo;</strong>的自定义属性，当点击&ldquo;打印&rdquo;（在后台发票区域）事件时输出它。由于发票打印是Magento核心功能，所以我们需要重写它。</p>
<h1>第一步</h1>
<p>在你的Magento项目中创建下面的文件：</p>
<ul>
<li>app/code/local/Alwayly/Invoice/Model/Order/Pdf/Items/Invoice/Default.php</li>
<li>app/code/local/Alwayly/Invoice/Model/Order/Pdf/Invoice.php</li>
<li>app/code/local/Alwayly/Invoice/etc/config.xml</li>
</ul>
<p>这些是用来修改Magento核心功能的。</p>
<h1>第二步</h1>
<p>将下面代码加入到对应的文件中去： <strong>config.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Invoice&gt;
            &lt;version&gt;0.1.0&lt;/version&gt;
        &lt;/Alwayly_Invoice&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;sales&gt;
                &lt;rewrite&gt;
                    &lt;order_pdf_invoice&gt;Alwayly_Invoice_Model_Order_Pdf_Invoice&lt;/order_pdf_invoice&gt;                &lt;order_pdf_items_invoice_default&gt;Alwayly_Invoice_Model_Order_Pdf_Items_Invoice_Default&lt;/order_pdf_items_invoice_default&gt;
                &lt;/rewrite&gt;
            &lt;/sales&gt;
        &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p><strong>Default.php</strong></p>
<pre><code>&lt;?php
/**
 * Alwayly PDF rewrite for custom attribute
 * Attribute "alwayly_warehouse_location" has to be set manually
 * Original: Sales Order Invoice Pdf default items renderer
 *
 * @category   Alwayly
 * @package    Inhoo_Invoice
 */
 
class Alwayly_Invoice_Model_Order_Pdf_Items_Invoice_Default extends Mage_Sales_Model_Order_Pdf_Items_Invoice_Default
{
    /**
     * Draw item line
	 **/
    public function draw()
    {
        $order  = $this-&gt;getOrder();
        $item   = $this-&gt;getItem();
        $pdf    = $this-&gt;getPdf();
        $page   = $this-&gt;getPage();
        $lines  = array();
 
		//Alwayly - Added custom attribute to PDF, first get it if exists
		$WarehouseLocation = $this-&gt;getWarehouseLocationValue($item);
 
        // draw Product name
        $lines[0] = array(array(
            'text' =&gt; Mage::helper('core/string')-&gt;str_split($item-&gt;getName(), 60, true, true),
            'feed' =&gt; 35,
        ));
 
		//Alwayly - Added custom attribute
		//draw Warehouse Location
        $lines[0][] = array(
            'text'  =&gt; Mage::helper('core/string')-&gt;str_split($WarehouseLocation, 25),
            'feed'  =&gt; 245
        );
 
        // draw SKU
        $lines[0][] = array(
            'text'  =&gt; Mage::helper('core/string')-&gt;str_split($this-&gt;getSku($item), 25),
            'feed'  =&gt; 325
        );
 
        // draw QTY
        $lines[0][] = array(
            'text'  =&gt; $item-&gt;getQty()*1,
            'feed'  =&gt; 435
        );
 
        // draw Price
        $lines[0][] = array(
            'text'  =&gt; $order-&gt;formatPriceTxt($item-&gt;getPrice()),
            'feed'  =&gt; 395,
            'font'  =&gt; 'bold',
            'align' =&gt; 'right'
        );
 
        // draw Tax
        $lines[0][] = array(
            'text'  =&gt; $order-&gt;formatPriceTxt($item-&gt;getTaxAmount()),
            'feed'  =&gt; 495,
            'font'  =&gt; 'bold',
            'align' =&gt; 'right'
        );
 
        // draw Subtotal
        $lines[0][] = array(
            'text'  =&gt; $order-&gt;formatPriceTxt($item-&gt;getRowTotal()),
            'feed'  =&gt; 565,
            'font'  =&gt; 'bold',
            'align' =&gt; 'right'
        );
 
        // custom options
        $options = $this-&gt;getItemOptions();
        if ($options) {
            foreach ($options as $option) {
                // draw options label
                $lines[][] = array(
                    'text' =&gt; Mage::helper('core/string')-&gt;str_split(strip_tags($option['label']), 70, true, true),
                    'font' =&gt; 'italic',
                    'feed' =&gt; 35
                );
 
                if ($option['value']) {
                    $_printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
                    $values = explode(', ', $_printValue);
                    foreach ($values as $value) {
                        $lines[][] = array(
                            'text' =&gt; Mage::helper('core/string')-&gt;str_split($value, 50, true, true),
                            'feed' =&gt; 40
                        );
                    }
                }
            }
        }
 
        $lineBlock = array(
            'lines'  =&gt; $lines,
            'height' =&gt; 10
        );
 
        $page = $pdf-&gt;drawLineBlocks($page, array($lineBlock), array('table_header' =&gt; true));
        $this-&gt;setPage($page);
 
    }
 
	/*
	 * Return Value of custom attribute
	 * */
	private function getWarehouseLocationValue($item)
	{
		$prod = Mage::getModel('catalog/product')-&gt;load($item-&gt;getProductId());
 
		if(!($return_location = $prod-&gt;getAlwaylyWarehouseLocation()))
			return 'N/A';
		else
			return $return_location;
	}
}
</code></pre>
<p><strong>Invoice.php</strong></p>
<pre><code>&lt;?php
/**
 * Alwayly PDF rewrite for custom attribute
 * * Attribute "alwayly_warehouse_location" has to be set manually
 * Original: Sales Order Invoice PDF model
 *
 * @category   Alwayly
 * @package    Alwayly_Invoice
 */
class Alwayly_Invoice_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice
{
	public function getPdf($invoices = array())
    {
        $this-&gt;_beforeGetPdf();
        $this-&gt;_initRenderer('invoice');
 
        $pdf = new Zend_Pdf();
        $this-&gt;_setPdf($pdf);
        $style = new Zend_Pdf_Style();
        $this-&gt;_setFontBold($style, 10);
 
        foreach ($invoices as $invoice) {
            if ($invoice-&gt;getStoreId()) {
                Mage::app()-&gt;getLocale()-&gt;emulate($invoice-&gt;getStoreId());
            }
            $page = $pdf-&gt;newPage(Zend_Pdf_Page::SIZE_A4);
            $pdf-&gt;pages[] = $page;
 
            $order = $invoice-&gt;getOrder();
 
            /* Add image */
            $this-&gt;insertLogo($page, $invoice-&gt;getStore());
 
            /* Add address */
            $this-&gt;insertAddress($page, $invoice-&gt;getStore());
 
            /* Add head */
            $this-&gt;insertOrder($page, $order, Mage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID, $order-&gt;getStoreId()));
 
            $page-&gt;setFillColor(new Zend_Pdf_Color_GrayScale(1));
            $this-&gt;_setFontRegular($page);
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Invoice # ') . $invoice-&gt;getIncrementId(), 35, 780, 'UTF-8');
 
            /* Add table */
            $page-&gt;setFillColor(new Zend_Pdf_Color_RGB(0.93, 0.92, 0.92));
            $page-&gt;setLineColor(new Zend_Pdf_Color_GrayScale(0.5));
            $page-&gt;setLineWidth(0.5);
 
            $page-&gt;drawRectangle(25, $this-&gt;y, 570, $this-&gt;y -15);
            $this-&gt;y -=10;
 
            /* Add table head */
            $page-&gt;setFillColor(new Zend_Pdf_Color_RGB(0.4, 0.4, 0.4));
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Products'), 35, $this-&gt;y, 'UTF-8');
			//Added for custom attribute "alwayly_warehouse_location"
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Warehouse Location'), 245, $this-&gt;y, 'UTF-8');
			$page-&gt;drawText(Mage::helper('sales')-&gt;__('SKU'), 325, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Price'), 380, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Qty'), 430, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Tax'), 480, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Subtotal'), 535, $this-&gt;y, 'UTF-8');
 
            $this-&gt;y -=15;
 
            $page-&gt;setFillColor(new Zend_Pdf_Color_GrayScale(0));
 
            /* Add body */
            foreach ($invoice-&gt;getAllItems() as $item){
                if ($item-&gt;getOrderItem()-&gt;getParentItem()) {
                    continue;
                }
 
                if ($this-&gt;y &lt; 15) {
                    $page = $this-&gt;newPage(array('table_header' =&gt; true));
                }
 
                /* Draw item */
                $page = $this-&gt;_drawItem($item, $page, $order);
            }
 
            /* Add totals */
            $page = $this-&gt;insertTotals($page, $invoice);
 
            if ($invoice-&gt;getStoreId()) {
                Mage::app()-&gt;getLocale()-&gt;revert();
            }
        }
        $this-&gt;_afterGetPdf();
 
        return $pdf;
    }
 
	public function newPage(array $settings = array())
    {
        /* Add new table head */
        $page = $this-&gt;_getPdf()-&gt;newPage(Zend_Pdf_Page::SIZE_A4);
        $this-&gt;_getPdf()-&gt;pages[] = $page;
        $this-&gt;y = 800;
 
        if (!empty($settings['table_header'])) {
            $this-&gt;_setFontRegular($page);
            $page-&gt;setFillColor(new Zend_Pdf_Color_RGB(0.93, 0.92, 0.92));
            $page-&gt;setLineColor(new Zend_Pdf_Color_GrayScale(0.5));
            $page-&gt;setLineWidth(0.5);
            $page-&gt;drawRectangle(25, $this-&gt;y, 570, $this-&gt;y-15);
            $this-&gt;y -=10;
 
            $page-&gt;setFillColor(new Zend_Pdf_Color_RGB(0.4, 0.4, 0.4));
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Product'), 35, $this-&gt;y, 'UTF-8');
			//Added for custom attribute "alwayly_warehouse_location"
			$page-&gt;drawText(Mage::helper('sales')-&gt;__('Warehouse Location'), 245, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('SKU'), 325, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Price'), 380, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Qty'), 430, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Tax'), 480, $this-&gt;y, 'UTF-8');
            $page-&gt;drawText(Mage::helper('sales')-&gt;__('Subtotal'), 535, $this-&gt;y, 'UTF-8');
 
            $page-&gt;setFillColor(new Zend_Pdf_Color_GrayScale(0));
            $this-&gt;y -=20;
        }
        return $page;
    }
}
</code></pre>
<h1>第三步</h1>
<p>进入后台 <strong>&ldquo;Sales-&gt;Invoices-&gt;(View any of them)-&gt;Print&rdquo;</strong>。下载PDF后可在每个订单物品中看到<strong>&ldquo;Warehouse Location&rdquo;<strong> 。</strong></strong></p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 22 Oct 2015 11:17:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为你的Magento插件创建配置]]></title>
      <link>https://www.360magento.com/blog/magento-extension-configuration/</link>
      <description><![CDATA[<p>今天，我想讲讲初学者如何在Magento配置区域创建一个简单的插件配置。首先，你需要一个插件。如果你是初学者，不知道如果创建你自己的插件，你可以看看网站里的其它文章。但我建议从一个新的插件开始，用于测试&hellip;&hellip;</p>
<p>第一步，添加（或者修改）你的<strong>system.xml</strong>文件：</p>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;config&gt;
    &lt;tabs&gt;
        &lt;alwayly translate="label" module="mymodule"&gt;
            &lt;label&gt;Alwayly Extensions&lt;/label&gt;
            &lt;sort_order&gt;100&lt;/sort_order&gt;
        &lt;/alwayly&gt;
    &lt;/tabs&gt;
    &lt;sections&gt;
        &lt;alwayly translate="label" module="mymodule"&gt;
            &lt;label&gt;Extension Options&lt;/label&gt;
            &lt;tab&gt;alwayly&lt;/tab&gt;
            &lt;sort_order&gt;1000&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
 
            &lt;groups&gt;
                &lt;alwayly_group translate="label" module="mymodule"&gt;
                    &lt;label&gt;My Extension Options&lt;/label&gt;
                    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                    &lt;sort_order&gt;1000&lt;/sort_order&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;1&lt;/show_in_store&gt;
 
                    &lt;fields&gt;
                        &lt;alwayly_input translate="label"&gt;
                            &lt;label&gt;My Input Field: &lt;/label&gt;
                            &lt;comment&gt;My Comment&lt;/comment&gt;
                            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                            &lt;sort_order&gt;20&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/alwayly_input&gt;
                        &lt;alwayly_select translate="label"&gt;
                            &lt;label&gt;My Dropdown: &lt;/label&gt;
                            &lt;comment&gt;Source model provider Magento's default Yes/No values&lt;/comment&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;sort_order&gt;90&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_yesno&lt;/source_model&gt;
                        &lt;/alwayly_select&gt;
                    &lt;/fields&gt;
                &lt;/alwayly_group&gt;
            &lt;/groups&gt;
        &lt;/alwayly&gt;
    &lt;/sections&gt;
&lt;/config&gt;
</code></pre>
<p>第二步，为了使用Magento配置区域，你需要编辑你的<strong>config.xml</strong>文件并定义模型和助手：</p>
<pre><code>&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Mymodule&gt;
            &lt;version&gt;0.1.0&lt;/version&gt;
        &lt;/Alwayly_Mymodule&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;mymodule&gt;
                &lt;class&gt;Alwayly_Mymodule_Model&lt;/class&gt;
            &lt;/mymodule&gt;
        &lt;/models&gt;
        &lt;helpers&gt;
            &lt;mymodule&gt;
                &lt;class&gt;Alwayly_Mymodule_Helper&lt;/class&gt;
            &lt;/mymodule&gt;
        &lt;/helpers&gt;
     &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>最后你需要再次编辑插件的config.xml文件，加入 &ldquo;&rdquo;标签：</p>
<pre><code>&lt;adminhtml&gt;
    &lt;acl&gt;
        &lt;resources&gt;
            &lt;all&gt;
                &lt;title&gt;Allow Everything&lt;/title&gt;
            &lt;/all&gt;
            &lt;admin&gt;
                &lt;children&gt;
                    &lt;system&gt;
                        &lt;children&gt;
                            &lt;config&gt;
                                &lt;children&gt;
                                    &lt;alwayly&gt;
                                        &lt;title&gt;Alwayly - All&lt;/title&gt;
                                    &lt;/alwayly&gt;
                                &lt;/children&gt;
                            &lt;/config&gt;
                        &lt;/children&gt;
                    &lt;/system&gt;
                &lt;/children&gt;
            &lt;/admin&gt;
        &lt;/resources&gt;
    &lt;/acl&gt;
&lt;/adminhtml&gt;
</code></pre>
<p>要检索你保存的配置，你应该使用像这样的代码：</p>
<pre><code>Mage::getStoreConfig('alwayly/alwayly_group/alwayly_input',Mage::app()-&gt;getStore());
</code></pre>
<p>或者这样：</p>
<pre><code>Mage::getStoreConfig('alwayly/alwayly_group/alwayly_select',Mage::app()-&gt;getStore());
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 21 Oct 2015 12:15:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中为自定义控制器布局]]></title>
      <link>https://www.360magento.com/blog/layout-magento-controller/</link>
      <description><![CDATA[<p>当你用到Magento中的自定义控制器（不论前台还是后台）时，你可能会使用现有的块和模型，或者需要重写类。但当你想要移动、删除常见块的时候会发生什么呢？你真的能设计你的网页视图而不需要触及层叠样式表（CSS）？</p>
<p>事实上，是的你可以以一种相当简单的方式做到。前提是你知道你控制器的句柄。</p>
<p>要获取你控制器的句柄，你需要一些调试技术。在你控制器的动作里加入下面代码：</p>
<pre><code> Zend_Debug::dump($this-&gt;getLayout()-&gt;getUpdate()-&gt;getHandles());
</code></pre>
<p>它以同样的方式作用于前端和后台。你自定义的动作看起来像这样：</p>
<pre><code>public function indexAction()
{
        $this-&gt;loadLayout();
        $this-&gt;renderLayout();
        Zend_Debug::dump($this-&gt;getLayout()-&gt;getUpdate()-&gt;getHandles());
}
</code></pre>
<p>在你的浏览器输出，你可能会得到这样的结果：</p>
<p>前端控制器：</p>
<pre><code>array(5) {
  [0] =&gt; string(7) "default"
  [1] =&gt; string(13) "STORE_default"
  [2] =&gt; string(29) "THEME_frontend_default_hybrid"
  [3] =&gt; string(29) "alwayly_developers_index_index"
  [4] =&gt; string(19) "customer_logged_out"
}
</code></pre>
<p>后台控制器：</p>
<pre><code>array(4) {
  [0] =&gt; string(7) "default"
  [1] =&gt; string(11) "STORE_admin"
  [2] =&gt; string(30) "THEME_adminhtml_default_inchoo"
  [3] =&gt; string(28) "adminhtml_switch_index_index"
}
</code></pre>
<p>你需要数组中第四项的值。</p>
<p>前端：</p>
<pre><code> [3] =&gt; string(29) "alwayly_developers_index_index"
</code></pre>
<p>后台：</p>
<pre><code> [3] =&gt; string(28) "adminhtml_switch_index_index"
</code></pre>
<p>现在，你了解了句柄之后，我们开始你的布局文件。在你主题的布局文件夹里创建&ldquo;local.xml&rdquo;布局文件。在我简单的例子里，我移除头部和底部，前端和后台。</p>
<p>前端示例：<strong>app/design/frontend/default/default/layout/local.xml</strong></p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;!--
/**
 * Magento
 *
 * @category    Alwayly
 * @package     Alwayly_Developers
 */
--&gt;
&lt;layout&gt;
 
    &lt;alwayly_developers_index_index&gt;
	&lt;remove name="header" /&gt;
    	&lt;remove name="footer" /&gt;
    &lt;/alwayly_developers_index_index&gt;
 
&lt;/layout&gt;
</code></pre>
<p>后台示例:<strong>app/design/adminhtml/default/default/layout/local.xml</strong></p>
<pre><code>&lt; ?xml version="1.0"?&gt;
&lt;!--
/**
 * Magento
 *
 * @category    Alwayly
 * @package     Alwayly_Developers
 */
--&gt;
&lt;layout&gt;
 
    &lt;adminhtml_switch_index_index&gt;
	&lt;remove name="header" /&gt;
    	&lt;remove name="footer" /&gt;
    &lt;/adminhtml_switch_index_index&gt;
 
&lt;/layout&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 21 Oct 2015 12:05:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何扩展Magento订单网格]]></title>
      <link>https://www.360magento.com/blog/extend-order-grid/</link>
      <description><![CDATA[<p>这里是一个小示例来解释如何修改订单网格。订单网格的主类是<strong>&ldquo;Mage_Adminhtml_Block_Sales_Order_Grid&rdquo;</strong>，如果你想添加一些列，你必须重写这个类（块）。</p>
<p>如何重写magento块</p>
<pre><code>&lt;blocks&gt;
    &lt;adminhtml&gt;
        &lt;rewrite&gt;
            &lt;sales_order_grid&gt;Alwayly_Test_Block_Adminhtml_Order_Grid&lt;/sales_order_grid&gt;
        &lt;/rewrite&gt;
    &lt;/adminhtml&gt;
&lt;/blocks&gt;
</code></pre>
<p>如果你调用<strong>&ldquo;adminhtml/sales_order_grid&rdquo;</strong>，你将获取<strong>Alwayly_Test_Block_Adminhtml_Order_Grid</strong>，那么创建<strong>Alwayly_Test_Block_Adminhtml_Order_Grid</strong>吧。下面是我的代码：</p>
<pre><code>&lt; ?php
class Alwayly_Test_Block_Adminhtml_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
     public function __construct()
    {
        parent::__construct();
        $this-&gt;setId('sales_order_grid');
        $this-&gt;setUseAjax(true);
        $this-&gt;setDefaultSort('created_at');
        $this-&gt;setDefaultDir('DESC');
        $this-&gt;setSaveParametersInSession(true);
    }
 
    /**
     * Retrieve collection class
     *
     * @return string
     */
    protected function _getCollectionClass()
    {
        return 'sales/order_grid_collection';
    }
 
    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this-&gt;_getCollectionClass());
 
        //we changed mysql query, we added inner join to order item table
        $collection-&gt;join('sales/order_item', 'order_id=entity_id', array('name'=&gt;'name', 'sku' =&gt;'sku', 'qty_ordered'=&gt;'qty_ordered' ), null,'left');
        $this-&gt;setCollection($collection);
        return parent::_prepareCollection();
    }
 
    protected function _prepareColumns()
    {
 
        $this-&gt;addColumn('real_order_id', array(
            'header'=&gt; Mage::helper('sales')-&gt;__('Order #'),
            'width' =&gt; '80px',
            'type'  =&gt; 'text',
            'index' =&gt; 'increment_id',
        ));
 
        if (!Mage::app()-&gt;isSingleStoreMode()) {
            $this-&gt;addColumn('store_id', array(
                'header'    =&gt; Mage::helper('sales')-&gt;__('Purchased from (store)'),
                'index'     =&gt; 'store_id',
                'type'      =&gt; 'store',
                'store_view'=&gt; true,
                'display_deleted' =&gt; true,
                'filter_index' =&gt; 'main_table.store_id'
            ));
        }
 
        $this-&gt;addColumn('created_at', array(
            'header' =&gt; Mage::helper('sales')-&gt;__('Purchased On'),
            'index' =&gt; 'created_at',
            'type' =&gt; 'datetime',
            'width' =&gt; '100px',
            'filter_index' =&gt; 'main_table.created_at'
        ));
 
        $this-&gt;addColumn('billing_name', array(
            'header' =&gt; Mage::helper('sales')-&gt;__('Bill to Name'),
            'index' =&gt; 'billing_name',
        ));
 
        $this-&gt;addColumn('qty_ordered', array(
            'header'    =&gt; Mage::helper('sales')-&gt;__('Items Ordered'),
            'index'     =&gt; 'qty_ordered',
            'type'      =&gt; 'number',
            'total'     =&gt; 'sum'
        ));
 
        $this-&gt;addColumn('sku', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('SKU'),
            'index'     =&gt; 'sku',
			'type' =&gt; 'text'
        ));
 
        $this-&gt;addColumn('base_grand_total', array(
            'header' =&gt; Mage::helper('sales')-&gt;__('G.T. (Base)'),
            'index' =&gt; 'base_grand_total',
            'type'  =&gt; 'currency',
            'currency' =&gt; 'base_currency_code',
        ));
 
        $this-&gt;addColumn('grand_total', array(
            'header' =&gt; Mage::helper('sales')-&gt;__('G.T. (Purchased)'),
            'index' =&gt; 'grand_total',
            'type'  =&gt; 'currency',
            'currency' =&gt; 'order_currency_code',
        ));
 
        $this-&gt;addColumn('status', array(
            'header' =&gt; Mage::helper('sales')-&gt;__('Status'),
            'index' =&gt; 'status',
            'type'  =&gt; 'options',
            'width' =&gt; '70px',
            'options' =&gt; Mage::getSingleton('sales/order_config')-&gt;getStatuses(),
        ));
 
 
        return $this;
    }
 
    protected function _prepareMassaction()
    {
        $this-&gt;setMassactionIdField('entity_id');
        $this-&gt;getMassactionBlock()-&gt;setFormFieldName('order_ids');
        $this-&gt;getMassactionBlock()-&gt;setUseSelectAll(false);
 
        if (Mage::getSingleton('admin/session')-&gt;isAllowed('sales/order/actions/cancel')) {
            $this-&gt;getMassactionBlock()-&gt;addItem('cancel_order', array(
                 'label'=&gt; Mage::helper('sales')-&gt;__('Cancel'),
                 'url'  =&gt; $this-&gt;getUrl('*/sales_order/massCancel'),
            ));
        }
 
        if (Mage::getSingleton('admin/session')-&gt;isAllowed('sales/order/actions/hold')) {
            $this-&gt;getMassactionBlock()-&gt;addItem('hold_order', array(
                 'label'=&gt; Mage::helper('sales')-&gt;__('Hold'),
                 'url'  =&gt; $this-&gt;getUrl('*/sales_order/massHold'),
            ));
        }
 
        if (Mage::getSingleton('admin/session')-&gt;isAllowed('sales/order/actions/unhold')) {
            $this-&gt;getMassactionBlock()-&gt;addItem('unhold_order', array(
                 'label'=&gt; Mage::helper('sales')-&gt;__('Unhold'),
                 'url'  =&gt; $this-&gt;getUrl('*/sales_order/massUnhold'),
            ));
        }
 
        $this-&gt;getMassactionBlock()-&gt;addItem('pdfinvoices_order', array(
             'label'=&gt; Mage::helper('sales')-&gt;__('Print Invoices'),
             'url'  =&gt; $this-&gt;getUrl('*/sales_order/pdfinvoices'),
        ));
 
        $this-&gt;getMassactionBlock()-&gt;addItem('pdfshipments_order', array(
             'label'=&gt; Mage::helper('sales')-&gt;__('Print Packingslips'),
             'url'  =&gt; $this-&gt;getUrl('*/sales_order/pdfshipments'),
        ));
 
        $this-&gt;getMassactionBlock()-&gt;addItem('pdfcreditmemos_order', array(
             'label'=&gt; Mage::helper('sales')-&gt;__('Print Credit Memos'),
             'url'  =&gt; $this-&gt;getUrl('*/sales_order/pdfcreditmemos'),
        ));
 
        $this-&gt;getMassactionBlock()-&gt;addItem('pdfdocs_order', array(
             'label'=&gt; Mage::helper('sales')-&gt;__('Print All'),
             'url'  =&gt; $this-&gt;getUrl('*/sales_order/pdfdocs'),
        ));
 
        return $this;
    }
 
    public function getRowUrl($row)
    {
        if (Mage::getSingleton('admin/session')-&gt;isAllowed('sales/order/actions/view')) {
            return $this-&gt;getUrl('*/sales_order/view', array('order_id' =&gt; $row-&gt;getId()));
        }
        return false;
    }
    public function getGridUrl()
    {
        return $this-&gt;getUrl('*/*/grid', array('_current'=&gt;true));
    }
}
</code></pre>
<p>如果你想添加一些列，你需要添加下面的代码到<strong> _prepareColumns</strong>方法：</p>
<pre><code>$this-&gt;addColumn('sku', array(
'header'    =&gt; Mage::helper('catalog')-&gt;__('SKU'),
'index'     =&gt; 'sku',
'type' =&gt; 'text'
));
</code></pre>
<p>如你所见，我们修改了<strong>_prepareCollection()</strong>方法。我们改变了SQL语句，连接了第二张数据表。这只是我的例子，你可以根据你的需求来修改SQL语句。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 20 Oct 2015 13:03:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[插入动态菜单到Magento后台]]></title>
      <link>https://www.360magento.com/blog/dynamical-menu/</link>
      <description><![CDATA[<p>最近Magento的一个核心功能（后台管理员菜单需要XML定义）让我觉得沮丧。我想要加一些快速的网站/店铺链接到后台。解决方法是重写Magento的一个后台块，然后连接我的动态菜单（没有XML）。如果你对此感兴趣，那么读下去。</p>
<p>为了让它可升级，我决定做成插件。它值包含2个文件，<strong>config.xml</strong>和一个重写块。</p>
<p>首先，创建<strong>config.xml</strong>，我的是这样的：</p>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_ExtendedMenu&gt;
            &lt;version&gt;0.1.0&lt;/version&gt;
        &lt;/Alwayly_ExtendedMenu&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;configurable&gt;
                &lt;class&gt;Alwayly_Configurable_Block&lt;/class&gt;
            &lt;/configurable&gt;
            &lt;adminhtml&gt;
                &lt;rewrite&gt;
                    &lt;page_menu&gt;Alwayly_ExtendedMenu_Block_Adminhtml_Menu&lt;/page_menu&gt;
                &lt;/rewrite&gt;
            &lt;/adminhtml&gt;
        &lt;/blocks&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>由于Magento一如既往地解析XML，对我来说理想的解决方法就是在输出菜单前与解析数据挂钩。所以，我之前提到的块是<strong>&ldquo;Mage_Adminhtml_Block_Page_Menu&rdquo;</strong>。我对<strong>getMenuArray</strong>方法比较感兴趣，它是这样的：</p>
<pre><code> /**
     * Retrieve Adminhtml Menu array
     *
     * @return array
     */
    public function getMenuArray()
    {
        return $this-&gt;_buildMenuArray();
    }

</code></pre>
<p>这是最合适的地方来修改Magento核心，我用下面的代码创建了<strong>&ldquo;Alwayly_ExtendedMenu_Block_Adminhtml_Menu&rdquo;：</strong></p>
<pre><code>&lt;?php
class Alwayly_ExtendedMenu_Block_Adminhtml_Menu extends Mage_Adminhtml_Block_Page_Menu
{
	public function getMenuArray()
	{
		//Load standard menu
		$parentArr = parent::getMenuArray();
 
		//Prepare "View Sites" menu
		$parentArr['view_sites'] = array(
			'label' =&gt; 'View Sites',
			'active'=&gt;false ,
			'sort_order'=&gt;0,
			'click' =&gt; 'return false;',
			'url'=&gt;'#',
			'level'=&gt;0,
			'last'=&gt; true,
			'children' =&gt; array()
		);
 
		$app = Mage::app();
 
		$j = 0;
 
		$allWebsites = $app-&gt;getWebsites();
		$totalWebsiteCount = count($allWebsites) - 1;
 
		foreach ($allWebsites as $_eachWebsiteId =&gt; $websiteVal){
			$_storeName = $app-&gt;getWebsite($_eachWebsiteId)-&gt;getName();
			$_websiteUrl = array(
					'label' =&gt; $_storeName,
					'active' =&gt; false ,
					'url' =&gt; '#',
					'click' =&gt; "return false",
					'sort_order' =&gt; $j++ * 10,
					'level' =&gt; 1,
					'children' =&gt; array()
					);
 
			if(count($parentArr['view_sites']['children']) == $totalWebsiteCount){
				$_websiteUrl['last'] = true;
			} else {
				$_websiteUrl['last'] = false;
			}
 
			$parentArr['view_sites']['children'][$j - 1] = $_websiteUrl;
 
			$allStores = $app-&gt;getWebsite($app-&gt;getWebsite($_eachWebsiteId)-&gt;getId())-&gt;getStores();
			$totalCount = count($allStores);
			$i = 0;
			foreach ($allStores as $_eachStoreId =&gt; $val){
				$_websiteId = $app-&gt;getStore($_eachStoreId)-&gt;getWebsiteId();
				if($_websiteId == $j){
					$_storeName = $app-&gt;getStore($_eachStoreId)-&gt;getName();
					$baseUrl = $app-&gt;getStore($_eachStoreId)-&gt;getUrl();
					$_websiteUrl = array(
							'label' =&gt; $_storeName,
							'active' =&gt; false ,
							'click' =&gt; "window.open(this.href, 'Website - ' + this.href); return false;",
							'sort_order' =&gt; $i++ * 10,
							'level' =&gt; 2,
							'url' =&gt; $baseUrl
							);
 
					if(count($parentArr['view_sites']['children'][$j - 1]['children']) + 1 == $totalCount or $totalCount == 0)
						$_websiteUrl['last'] = true;
						else
						$_websiteUrl['last'] = false;
 
					$parentArr['view_sites']['children'][$j - 1]['children'][$i] = $_websiteUrl;
				}
			}
		}
		return $parentArr;
    }
}
</code></pre>
<p>我这里重写了父类方法<strong>&ldquo;getMenuArray()&rdquo;</strong>，我的动态菜单也在结果数组中。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 20 Oct 2015 12:52:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为Magento数量框添加“+”,“-”功能]]></title>
      <link>https://www.360magento.com/blog/magentos-quantity-increment/</link>
      <description><![CDATA[<p>你也许注意到了Magento的数量输入只是普通的输入框，当你想要修改它的值时必须先手动删除现有值，然后输入新的值。今天我将展示添加加号和减号来修改数量。感兴趣的话就继续往下阅读吧。</p>
<p>这是一项非常简单的工作，但又与Magento中的其它东西不一样，它需要些时间（我花了2小时测试）。我所做的就是创建一个连接JavaScript的插件。我动态地创建了div元素并用包含&ldquo;+&rdquo;和&ldquo;-&rdquo;号的段落标签来填充。</p>
<p>负责执行的代码是这样的：</p>
<pre><code>var parentTD;
	var newDiv;
	var navigationDiv;
	var i = 1;
	var currentElement = null;
 
	$$('input.qty').each(function(el){
		parentTD = el.parentNode;
 
		newDiv = document.createElement('div');
		Element.extend(newDiv);
		newDiv.id = i++;
		newDiv.update(parentTD.innerHTML).innerHTML; //set new input inside new div
		parentTD.update().innerHTML; //erase old input
		parentTD.appendChild(newDiv); //show new div
 
		navigationDiv = document.createElement('div');
		Element.extend(navigationDiv);
		navigationDiv.update('&lt;p class="up">+&lt;/p>&lt;p class="dn">-&lt;/p>').innerHTML;
		newDiv.appendChild(navigationDiv);
	});
 
	$$('p.up').each(function(el){
		el.observe('click',function(event){
			currentElement = el.parentNode.previous();
			i = 0; //In case we get in to infinite loop
			while(currentElement.type != 'text' && i &lt; 5){
				currentElement = currentElement.previous();
				i++;
			}
			currentElement.value = parseInt(currentElement.value) + 1;
		});
	});
 
	$$('p.dn').each(function(el){
		el.observe('click',function(event){
			currentElement = el.parentNode.previous();
			i = 0; //In case we get in to infinite loop
			while(currentElement.type != 'text' && i &lt; 5){
				currentElement = currentElement.previous();
				i++;
			}
			if(parseInt(currentElement.value) > 0){
				currentElement.value = parseInt(currentElement.value) - 1;
			}
		});
	});
</code></pre>
<p>为安全起见，请先做好备份。执行之后是没有样式的，但是你可以随时添加一些CSS样式。生成的HTML结构大概是这样的：</p>
<pre><code>&lt;div id="1"&gt;
	&lt;label for="qty"&gt;
		Qty:
	&lt;/label&gt;
	&lt;input name="qty" id="qty" maxlength="12" value="1" title="Qty" class="input-text qty" type="text"&gt;
	&lt;button type="button" title="Add to Cart" class="button btn-cart" onclick="productAddToCartForm.submit(this)"&gt;
		&lt;span&gt;
			&lt;span&gt;
				Add to Cart
			&lt;/span&gt;
		&lt;/span&gt;
	&lt;/button&gt;
	&lt;div&gt;
		&lt;p class="up"&gt;
			+
		&lt;/p&gt;
		&lt;p class="dn"&gt;
			-
		&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 19 Oct 2015 12:46:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中如何添加新的自定义类别属性]]></title>
      <link>https://www.360magento.com/blog/custom-category-attribute/</link>
      <description><![CDATA[<p>有时候你需要扩展Magento的类别功能。有几种方法你可以达到目的，你可以直接修改和添加数据到表里，但如果你不知道怎么做的话就会浪费时间。这篇文章将演示如何通过sql_setup脚本来给你的Magento店铺添加新的自定义类别属性。</p>
<p>示例Mysql setup脚本是这样的，你需要根据你的需求来修改新属性的配置。</p>
<pre><code>$installer = $this;
$installer-&gt;startSetup();
 
$entityTypeId     = $installer-&gt;getEntityTypeId('catalog_category');
$attributeSetId   = $installer-&gt;getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $installer-&gt;getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
 
$installer-&gt;addAttribute('catalog_category', 'new_cat_attrb',  array(
    'type'     =&gt; 'int',
    'label'    =&gt; 'New Category Attribute',
    'input'    =&gt; 'text',
    'global'   =&gt; Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
    'visible'           =&gt; true,
    'required'          =&gt; false,
    'user_defined'      =&gt; false,
    'default'           =&gt; 0
));
 
 
$installer-&gt;addAttributeToGroup(
    $entityTypeId,
    $attributeSetId,
    $attributeGroupId,
    'new_cat_attrb',
    '11'					//last Magento's attribute position in General tab is 10
);
 
$attributeId = $installer-&gt;getAttributeId($entityTypeId, 'new_cat_attrb');
 
$installer-&gt;run("
INSERT INTO `{$installer-&gt;getTable('catalog_category_entity_int')}`
(`entity_type_id`, `attribute_id`, `entity_id`, `value`)
    SELECT '{$entityTypeId}', '{$attributeId}', `entity_id`, '1'
        FROM `{$installer-&gt;getTable('catalog_category_entity')}`;
");
 
 
//this will set data of your custom attribute for root category
Mage::getModel('catalog/category')
    -&gt;load(1)
    -&gt;setImportedCatId(0)
    -&gt;setInitialSetupFlag(true)
    -&gt;save();
 
//this will set data of your custom attribute for default category
Mage::getModel('catalog/category')
    -&gt;load(2)
    -&gt;setImportedCatId(0)
    -&gt;setInitialSetupFlag(true)
    -&gt;save();
 
$installer-&gt;endSetup();
</code></pre>
<p>在你模块的<strong>config.xml</strong>中你需要添加下面的代码来使新的类别属性正确安装：</p>
<pre><code>&lt;resources&gt;
	&lt;new_attribute_csv_setup&gt;
	  &lt;setup&gt;
		&lt;module&gt;New_Attribute&lt;/module&gt;
		&lt;class&gt;Mage_Catalog_Model_Resource_Eav_Mysql4_Setup&lt;/class&gt;
	  &lt;/setup&gt;
	  &lt;connection&gt;
		&lt;use&gt;core_setup&lt;/use&gt;
	  &lt;/connection&gt;
	&lt;/new_attribute_setup&gt;
	&lt;new_attribute_setup_write&gt;
	  &lt;connection&gt;
		&lt;use&gt;core_write&lt;/use&gt;
	  &lt;/connection&gt;
	&lt;/new_attribute_setup_write&gt;
	&lt;new_attribute_setup_read&gt;
	  &lt;connection&gt;
		&lt;use&gt;core_read&lt;/use&gt;
	  &lt;/connection&gt;
	&lt;/new_attribute_setup_read&gt;
&lt;/resources&gt;
</code></pre>
<p>注意，这里的类标签必须是<strong> &ldquo;Mage_Catalog_Model_Resource_Eav_Mysql4_Setup&rdquo;</strong>。</p>
<p>正确安装后，进入后台类别中，你可以看到在General Information中出现了"New Category Attribute"。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 19 Oct 2015 12:43:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[分层导航]]></title>
      <link>https://www.360magento.com/blog/magento-layered-navigation/</link>
      <description><![CDATA[<p>最近，有个客户想要让所有&ldquo;筛选器&rdquo;一直显示。例如，当你想要通过颜色筛选器筛选产品时，发现所有的筛选器都在，那么你就可以轻松地按其它条件筛选而不必返回类别页。</p>
<p>分层导航的文件默认在<strong>app/design/frontend/base/default/template/catalog/layer/</strong>下。分层导航的模版文件是<strong>view.phtml</strong>，用来显示筛选器。筛选器状态模版是<strong>state.phtml</strong>，当我们点击一个筛选器时，他响应结果。我们就要编辑<strong>state.phtml</strong>。将这个文件拷贝到你的包或主题中。</p>
<p>这是默认的state.phtml文件：</p>
<pre><code>&lt;?php $_filters = $this-&gt;getActiveFilters() ?&gt;
&lt;?php if(!empty($_filters)): ?&gt;
&lt;div class="currently"&gt;
    &lt;p class="block-subtitle"&gt;&lt;?php echo $this-&gt;__('Currently Shopping by:') ?&gt;&lt;/p&gt;
    &lt;ol&gt;
    &lt;?php foreach ($_filters as $_filter): ?&gt;
        &lt;li&gt;
            &lt;a href="&lt;?php echo $_filter-&gt;getRemoveUrl() ?&gt;" title="&lt;?php echo $this-&gt;__('Remove This Item') ?&gt;" class="btn-remove"&gt;&lt;?php echo $this-&gt;__('Remove This Item') ?&gt;&lt;/a&gt;
            &lt;span class="label"&gt;&lt;?php echo $this-&gt;__($_filter-&gt;getName()) ?&gt;:&lt;/span&gt; &lt;?php echo $this-&gt;stripTags($_filter-&gt;getLabel()) ?&gt;
        &lt;/li&gt;
    &lt;?php endforeach; ?&gt;
    &lt;/ol&gt;
    &lt;div class="actions"&gt;&lt;a href="&lt;?php echo $this-&gt;getClearUrl() ?&gt;"&gt;&lt;?php echo $this-&gt;__('Clear All') ?&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>我们将要在&ldquo;currently&rdquo;div块前面添加当前类别的url通道。代码如下：</p>
<pre><code>&lt;?php $obj = new Mage_Catalog_Block_Navigation(); ?&gt;
&lt;?php $_current_category=$obj-&gt;getCurrentCategory()-&gt;getUrlPath(); ?&gt; //getting url path of current category
&lt;?php $subs = $obj-&gt;getCurrentCategory()-&gt;getAllChildren(true); ?&gt; //getting ids of subcategories of current category
</code></pre>
<p>现在，我们编辑 &ldquo;currently&rdquo;div块。我将它重新命名为state。因为它不再显示当前筛选器。</p>
<pre><code>&lt;?php if(!empty($_filters)): ?>
&lt;div class="state">
    &lt;p class="block-subtitle">&lt;?php echo $this->__('Currently Shopping by:') ?>&lt;/p>
    &lt;dl>
    &lt;?php foreach ($_filters as $_filter): ?>
            &lt;dd>
                &lt;ol>
                    &lt;?php $attributemodel=$_filter->filter->_data["attribute_model"]; ?>    // getting attribute model that has all filter options in it from currently active filter
                    &lt;?php $attroptions=$attributemodel->getSource()->getAllOptions();?>   // getting attribute options (filters) from attribute model
                    &lt;?php $_categ= Mage::getModel('catalog/category');?>   // object  containing all categories and their information
 
                &lt;?php foreach($subs as $cat_id): ?>
                        &lt;?php $_categ->load($cat_id)?>           //get the subcategory you need
                        &lt;?php $collection = $_categ->getProductCollection(); ?>  //get the product collection (object containing all product information)
                        &lt;?php $collection->addAttributeToSelect('color')?>   // get the desired attribute
                &lt;?php endforeach; ?>
</code></pre>
<p>接下来，我们需要提取属性模型的信息和组合链接。每一个属性选项 ($attroptions)都包含属性值和属性标签。</p>
<pre><code>&lt;?php foreach($attroptions as $attr): ?&gt;   // get value and label of each attribute
                        &lt;?php $count=0; ?&gt;
                        &lt;?php if($attr["value"]!=""): ?&gt;
                               &lt;?php $val=$attr["value"] ?&gt;
                                &lt;?php $collection-&gt;addFieldToFilter(array(array('attribute'=&gt;'themes','gt'=&gt;10)))?&gt;  // collection of attribute values and labels for all values

//greater then 10 (in this case attribute values range was 18-39)
                                &lt;?php $proddata=$collection-&gt;getData() ?&gt;  // get product data for all attribute values
                                &lt;?php if($attr["label"]!= $this-&gt;stripTags($_filter-&gt;getLabel())): ?&gt;  // make a nice looking label
                                    &lt;?php foreach($proddata as $prod):?&gt;
                                        &lt;?php if($prod["type_id"]=="configurable"): ?&gt;    // in this store all products were configurable
                                            &lt;?php $split=split(",", $prod["color"]);?&gt;     // get the attribute values that correspond with one product (a product may have more

// then one attribute value and they're separated by commas that's why we split the string with "," as deliminator)
</code></pre>
<p>即使你设置属性Filterable(with results) ，你仍然需要统计产品，这样只显示有产品的属性值。</p>
<pre><code> &lt;?php foreach($split as $color): ?&gt;  //check out how many products have the same attribute value
                                                &lt;?php if($color==$attr["value"]): ?&gt;
                                                    &lt;?php $count++;?&gt;
                                                &lt;?php endif; ?&gt;
                                            &lt;?php endforeach; ?&gt;
 
                                        &lt;?php endif;?&gt;
 
                                    &lt;?php endforeach; ?&gt;
 
                                    &lt;?php if($count&gt;0):?&gt;  // check if any product has that attribute value
                                        &lt;li&gt;&lt;a href="&lt;?php echo $this-&gt;getUrl('').$_current_category ?&gt;?color=&lt;?php echo $attr["value"]?&gt;" &gt;&lt;?php echo  $attr["label"]; ?&gt;&lt;/a&gt;&lt;/li&gt;  // if not currently active filter make a link
                                    &lt;?php endif; ?&gt;
 
                                &lt;?php else:?&gt;
                                    &lt;li class="current"&gt; &lt;?php echo $this-&gt;stripTags($_filter-&gt;getLabel()); ?&gt;&lt;/li&gt;  // if currently active filter write out the label
                                &lt;?php endif;?&gt;
                        &lt;?php endif; ?&gt;
&lt;?php endforeach;  ?&gt;
 
&lt;?php endforeach; ?&gt; // ending the first for loop (foreach($filters as $filter))
                &lt;/ol&gt;
 
            &lt;/dd&gt;
    &lt;/dl&gt;
    &lt;a class="all" style="float:right;" href="&lt;?php echo $this-&gt;getClearUrl()?&gt;"&gt;All&lt;/a&gt;    // show all products, return from current state back to category view
&lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 18 Oct 2015 14:39:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ 如何创建自定义属性源类型]]></title>
      <link>https://www.360magento.com/blog/attribute-source-type/</link>
      <description><![CDATA[<p>你是否曾经需要创建自定义属性源类型？下面的小示例可能会对你有所帮助。</p>
<p>首先你需要创建sql安装文件，这个文件将把源类型的属性加入到你的系统中。源类型定义在数组： <strong>&lsquo;source&rsquo; =&gt; &lsquo;sourcetype/attribute_source_type&rsquo;</strong>。</p>
<pre><code>startSetup();
 
$installer-&gt;addAttribute('catalog_product', 'product_type', array(
        'group'             =&gt; 'Product Options',
		'label'             =&gt; 'Product Type',
		'note'              =&gt; '',
        'type'              =&gt; 'int',	//backend_type
		'input'             =&gt; 'select',	//frontend_input
		'frontend_class'	=&gt; '',
		'source'			=&gt; 'sourcetype/attribute_source_type',
        'backend'           =&gt; '',
        'frontend'          =&gt; '',
        'global'            =&gt; Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
		'required'          =&gt; true,
        'visible_on_front'  =&gt; false,
        'apply_to'          =&gt; 'simple',
        'is_configurable'   =&gt; false,
        'used_in_product_listing'	=&gt; false,
        'sort_order'        =&gt; 5,
    ));
 
$installer-&gt;endSetup();
</code></pre>
<p>接着你需要创建自定义源类型或者名为<strong>Alwayly_Sourcetype_Model_Attribute_Source_Type</strong>的类，下面是我的例子：</p>
<pre><code>class Alwayly_Sourcetype_Model_Attribute_Source_Type extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
	const MAIN = 1;
	const OTHER = 2;
 
    public function getAllOptions()
    {
        if (is_null($this-&gt;_options)) {
            $this-&gt;_options = array(
                array(
                    'label' =&gt; Mage::helper('sourcetype')-&gt;__('Main Product'),
                    'value' =&gt;  self::MAIN
                ),
                array(
                    'label' =&gt; Mage::helper('sourcetype')-&gt;__('Other Product'),
                    'value' =&gt;  self::OTHER
                ),
            );
        }
        return $this-&gt;_options;
    }
 
    public function toOptionArray()
    {
        return $this-&gt;getAllOptions();
    }
 
    public function addValueSortToCollection($collection, $dir = 'asc')
    {
        $adminStore  = Mage_Core_Model_App::ADMIN_STORE_ID;
        $valueTable1 = $this-&gt;getAttribute()-&gt;getAttributeCode() . '_t1';
        $valueTable2 = $this-&gt;getAttribute()-&gt;getAttributeCode() . '_t2';
 
        $collection-&gt;getSelect()-&gt;joinLeft(
            array($valueTable1 =&gt; $this-&gt;getAttribute()-&gt;getBackend()-&gt;getTable()),
            "`e`.`entity_id`=`{$valueTable1}`.`entity_id`"
            . " AND `{$valueTable1}`.`attribute_id`='{$this-&gt;getAttribute()-&gt;getId()}'"
            . " AND `{$valueTable1}`.`store_id`='{$adminStore}'",
            array()
        );
 
        if ($collection-&gt;getStoreId() != $adminStore) {
            $collection-&gt;getSelect()-&gt;joinLeft(
                array($valueTable2 =&gt; $this-&gt;getAttribute()-&gt;getBackend()-&gt;getTable()),
                "`e`.`entity_id`=`{$valueTable2}`.`entity_id`"
                . " AND `{$valueTable2}`.`attribute_id`='{$this-&gt;getAttribute()-&gt;getId()}'"
                . " AND `{$valueTable2}`.`store_id`='{$collection-&gt;getStoreId()}'",
                array()
            );
            $valueExpr = new Zend_Db_Expr("IF(`{$valueTable2}`.`value_id`&gt;0, `{$valueTable2}`.`value`, `{$valueTable1}`.`value`)");
 
        } else {
            $valueExpr = new Zend_Db_Expr("`{$valueTable1}`.`value`");
        }
 
 
 
        $collection-&gt;getSelect()
            -&gt;order($valueExpr, $dir);
 
        return $this;
    }
 
    public function getFlatColums()
    {
        $columns = array(
            $this-&gt;getAttribute()-&gt;getAttributeCode() =&gt; array(
                'type'      =&gt; 'int',
                'unsigned'  =&gt; false,
                'is_null'   =&gt; true,
                'default'   =&gt; null,
                'extra'     =&gt; null
            )
        );
        return $columns;
    }
 
 
    public function getFlatUpdateSelect($store)
    {
        return Mage::getResourceModel('eav/entity_attribute')
            -&gt;getFlatUpdateSelect($this-&gt;getAttribute(), $store);
    }
}
</code></pre>
<p>如果安装正确地完成，进入Magento后台admin -&gt; Catalog -&gt; Product，你会看到一个名为&ldquo;Product Options&rdquo;的选项。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 18 Oct 2015 14:18:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中“Google +1”插件]]></title>
      <link>https://www.360magento.com/blog/magento-google-1/</link>
      <description><![CDATA[<p>嵌入谷歌+1按钮很简单，你所要做的就是在你的网页里加两段代码。一个在网页的头部，还有一个在你想要呈现的地方。你需要按照Google官方的指引来做：<a title="google+1" href="http://www.google.com/intl/en/webmasters/+1/button/index.html">http://www.google.com/intl/en/webmasters/+1/button/index.html</a>。</p>
<p>我们把插件的名字定为&ldquo;GPlusOne&rdquo;，在&ldquo;Alwayly&rdquo;命名空间里。让我们用下面的代码创建<strong>/app/etc/modules/Alwayly_GPlusOne.xml</strong>。</p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_GPlusOne&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;community&lt;/codePool&gt;
        &lt;/Alwayly_GPlusOne&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>接着，用下面的代码创建我们的第二个文件<strong>app/code/community/Alwayly/GPlusOne/etc/config.xml</strong>：</p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_GPlusOne&gt;
            &lt;version&gt;1.0.0.0&lt;/version&gt;
        &lt;/Alwayly_GPlusOne&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;alwayly_gplusone&gt;
                &lt;class&gt;Alwayly_GPlusOne_Block&lt;/class&gt;
            &lt;/alwayly_gplusone&gt;
        &lt;/blocks&gt;      
    &lt;/global&gt;
 
    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;alwayly_gplusone&gt;
                    &lt;file&gt;alwayly/gplusone.xml&lt;/file&gt;
                &lt;/alwayly_gplusone&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;        
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>如你所见，我们声明了<strong>gplusone.xml</strong>这个布局文件，<strong>app/design/frontend/default/default/layout/alwayly/gplusone.xml</strong>的代码：</p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;layout version="1.0.0"&gt;
    &lt;catalog_product_view&gt;
        &lt;reference name="head"&gt;
            &lt;block type="core/template" name="alwayly_gplusone_head" template="alwayly/gplusone_head.phtml" /&gt;
        &lt;/reference&gt;        
        &lt;reference name="alert.urls"&gt;
            &lt;block type="alwayly_gplusone/PlusButton" name="alwayly_gplusone" /&gt;
        &lt;/reference&gt;
    &lt;/catalog_product_view&gt;
&lt;/layout&gt;
</code></pre>
<p>仔细观察，你会发现gplusone.xml更新产品详细页。由于嵌入谷歌+1按钮需要在页面读取两个脚本，我们就将它们分别放到下面两个文件中：</p>
<p><strong>app/design/frontend/default/default/template/alwayly/gplusone_head.phtml</strong></p>
<p><strong>app/design/frontend/default/default/template/alwayly/gplusone_button.phtml</strong></p>
<p><strong>app/design/frontend/default/default/template/alwayly/gplusone_head.phtml</strong>文件通过<strong>&lsquo;reference name=&rdquo;head&rdquo;&lsquo;</strong>来更新布局，代码如下：</p>
<pre><code>&lt;script type="text/javascript" src="https://apis.google.com/js/plusone.js"&gt;&lt;/script&gt;
</code></pre>
<p><strong>app/design/frontend/default/default/template/alwayly/gplusone_button.phtml</strong>通过<strong>&lsquo;reference name=&rdquo;alert.urls&rdquo;</strong>'载入到页面的alert.urls块中。<strong>gplusone_button.phtml</strong>的代码如下：</p>
<pre>&lt;code&lt;&lt;g:plusone &lt;?php if($size = $this-&gt;getSize()) { echo ' size="'.$size.'"'; } ?&gt;&gt;&lt;/g:plusone&gt;
</pre>
<p>最后，用下面的代码创建<strong>app/code/community/Alwayly/GPlusOne/Block/PlusButton.php</strong></p>
<pre><code>&lt;?php
 
class Alwayly_GPlusOne_Block_PlusButton extends Mage_Core_Block_Template
{
    /**
     * Constructor. Set template.
     */
    protected function _construct()
    {
        parent::_construct();
        $this-&gt;setTemplate('inchoo/gplusone_button.phtml');
    }
 
    public function getSize() 
    {
        //Here we can implement the code to read the config values for sizes
        return '';
    }
}
</code></pre>
<p>如果你观察gplusone_button.phtml文件，你会发现它调用<strong>Alwayly_GPlusOne_Block_PlusButton</strong>类里的<strong>getSize()</strong>方法。目前，这个方法没有什么作用，是为了以后扩展用的。鉴于谷歌+1按钮支持多钟尺寸（小，中等，高以及标准大小），你可以在插件里添加些简单的逻辑来获取Magento后台中输入的值。</p>
<p>本文不是给你一个不成熟的插件，而是向你展示以Magento的方式实现一个简单的谷歌+插件需要哪些东西。（这不一样是最好的方法）</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 17 Oct 2015 10:16:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[获取Magento中属性的值，名字和其它信息]]></title>
      <link>https://www.360magento.com/blog/magento-attribute-info/</link>
      <description><![CDATA[<p>产品的属性是一个非常重要的功能，我们经常会用到。在这篇文章中我将总结的一些产品属性信息的输出方法跟大家分享一下。</p>
<p>1、获取属性集合 </p>
<pre><code>$attribute = $_product-&gt;getResource()-&gt;getAttribute(&lsquo;attribute_code&rsquo;); </code></pre>
<p>2、获取属性类型</p> 
<pre><code>$attribute-&gt;getAttributeType(); </code></pre>
<p>3、获取属性Label</p>
<pre><code> $attribute-&gt;getFrontendLabel(); </code></pre>
<p>4、获取属性默认值 </p>
<pre><code>$attribute-&gt;getDefaultValue(); </code></pre>
<p>5、获取属性设置值 </p>
<pre><code>$attribute-&gt;getFrontend()-&gt;getValue($_product); </code></pre>
<p>6、检查属性是否可见 </p>
<pre><code>$attribute-&gt;getIsVisible(); </code></pre>
<p>7、检查属性是否是必填项 </p>
<pre><code>$attribute-&gt;getIsRequired();</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 17 Oct 2015 10:05:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何禁用Magento事件]]></title>
      <link>https://www.360magento.com/blog/disable-magento-event/</link>
      <description><![CDATA[<p>有些情况下你希望禁用Magento事件。例如，在一个我们的项目中，我们决定禁用所有的&ldquo;Mage_Log&rdquo;事件来减少数据库的sql查询。我们将在这篇文章中描述我们是怎么做的，但我相信这个方法可以在很多场景中应用。</p>
<p>Magento事件是怎么定义的呢？例如，你到Magento模型<strong>&ldquo;Mage_Log&rdquo;</strong>的<strong>config.xml</strong>文件中，你会发现下一个内容在&ldquo;events&rdquo;标签里。</p>
<p>&ldquo;Events&rdquo;标签包含子事件，你可以看<strong>config.xml</strong>文件中的块。</p>
<pre><code>&lt;frontend&gt;
	&lt;events&gt;
            &lt;controller_action_predispatch&gt;
                &lt;observers&gt;
                    &lt;log&gt;
                        &lt;class&gt;log/visitor&lt;/class&gt;
                        &lt;method&gt;initByRequest&lt;/method&gt;
                    &lt;/log&gt;
                &lt;/observers&gt;
            &lt;/controller_action_predispatch&gt;
            .... other events
        &lt;/events&gt;
&lt;/frontend&gt;
</code></pre>
<p>例如，如果你想要禁用<strong> &ldquo;controller_action_predispatch&rdquo; </strong>事件，你需要创建自己的模型并将它放到你的<strong>config.xml</strong>文件中。</p>
<pre><code>&lt;frontend&gt;
	&lt;events&gt;
		&lt;controller_action_predispatch&gt;
			&lt;observers&gt;&lt;log&gt;&lt;type&gt;disabled&lt;/type&gt;&lt;/log&gt;&lt;/observers&gt;
		&lt;/controller_action_predispatch&gt;
	&lt;/events&gt;
&lt;/frontend&gt;
</code></pre>
<p>也许你注意到了，我们添加值为&ldquo;disable&ldquo;的&ldquo;type&rdquo;标签。进入Magento类<strong> &ldquo;Mage_Core_Model_App&rdquo;</strong> ，在&ldquo;dispatchEvent&rdquo;方法中，你将看到：</p>
<pre><code> foreach ($events[$eventName]['observers'] as $obsName=&gt;$obs) {
                $observer-&gt;setData(array('event'=&gt;$event));
                Varien_Profiler::start('OBSERVER: '.$obsName);
                switch ($obs['type']) {
                    case 'disabled': // if we set disabled type, event will not be executed.
                        break;
                    case 'object': case 'model':
                        $method = $obs['method'];
                        $observer-&gt;addData($args);
                        $object = Mage::getModel($obs['model']);
                        $this-&gt;_callObserverMethod($object, $method, $observer);
                        break;
                    default:
                        $method = $obs['method'];
                        $observer-&gt;addData($args);
                        $object = Mage::getSingleton($obs['model']);
                        $this-&gt;_callObserverMethod($object, $method, $observer);
                        break;
                }
                Varien_Profiler::stop('OBSERVER: '.$obsName);
            }
</code></pre>
<p>如果设置事件type为&ldquo;disabled&rdquo;，事件将不会被执行。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 16 Oct 2015 12:15:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[编辑Magento中的PDF地址]]></title>
      <link>https://www.360magento.com/blog/edit-pdf-address/</link>
      <description><![CDATA[<p>在Magento中编辑PDF是受限制的，但是如果你需要编辑的只是一个地址，你可以使用事件。</p>
<p>首先在config.xml中设置你的观测者：</p>
<pre><code>&lt;adminhtml&gt;
    	&lt;events&gt;
    	    &lt;customer_address_format&gt;
    		&lt;observers&gt;
                    &lt;alwayly_sales_customer_address_format_observer&gt;
                        &lt;type&gt;model&lt;/type&gt;
                        &lt;class&gt;alwayly_sales/observer&lt;/class&gt;
                        &lt;method&gt;addAdditionalDataToAddress&lt;/method&gt;
                    &lt;/alwayly_sales_customer_address_format_observer&gt;
                &lt;/observers&gt;
    	    &lt;/customer_address_format&gt;
    	&lt;/events&gt;
&lt;/adminhtml&gt;
</code></pre>
<p>在设置完观测者之后，你需要写代码来编辑地址模版：</p>
<pre><code>/**
 * Observer printing invoices in PDF
 *
 * @category    Alwayly
 * @package     Alwayly_Sales
 */
class Alwayly_Sales_Model_Observer
{
    public function addAdditionalDataToAddress(Varien_Event_Observer $address)
    {
    	$data = $address-&gt;getEvent();
    	if($data-&gt;type['code']=="pdf")
    	{
    		$customerData = $data["address"]-&gt;getOrder()-&gt;getData();
    		$customerId = $customerData['customer_id'];
    		//we are using customer object because it give us latest user data, if you want data from user on order creation use $customerData
			$customer = Mage::getModel('customer/customer')-&gt;load($customerId);
			$customerVariable = $customer-&gt;get?????;
 
			//prevent of multiple insertion
    		if(strpos($data-&gt;type['default_format'],"Customer Variable")===false)
    		{
    		 	$stringToInsert = "{{var company}}|{{/depend}}|Customer Variable: ".$customerVariable."|";
    		 	$data-&gt;type['default_format'] = str_replace("{{var company}}|{{/depend}}",$stringToInsert, $data-&gt;type['default_format']);
    		};
    	};
    }
}
</code></pre>
<p>如果你想要获取最后一个用户的数据，你要使用<strong>Mage::getModel(&lsquo;customer/customer&rsquo;) </strong>对象。注意，用你自己的数据替换?????。我们获取地址模版并做修改。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 16 Oct 2015 12:05:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中展示产品选项的HTML代码（块）]]></title>
      <link>https://www.360magento.com/blog/product-options-html/</link>
      <description><![CDATA[<p>这个简单的助手可以帮你显示产品选项的html代码。它适用于简单（simple）, 虚拟（virtual）和可配置（configurable）产品。我相信你也可以将同样的方法应用到其它产品上。获取可配置产品选项的HTML代码会一点。</p>
<p>对于简单产品，我们有一种非常&ldquo;干净的方法&rdquo;。</p>
<p>首先，我们为产品设置一个块，接着我们添加物品渲染器（template和type）到产品选项块。最后一步就是创建迭代选择并与我们的产品选项块一起显示。</p>
<p>我们可以看到一些不错的松耦合和代码分离。另一方面，获取可配置产品选项的html代码并不这么灵活。实例块，实例化产品。我们获取选项的html。</p>
<h1>抽样：</h1>
<pre><code>echo Mage::helper("alwayly_checkout")-&gt;getProductOptionsHtml(Mage::getModel("catalog/product")-&gt;load(171));</code></pre>
<h1>助手：</h1>
<pre><code>&lt;!--?php &lt;br ?--&gt;/**
 * @category    Alwayly
 * @package     Alwayly_Checkout
 * @author      Alwayly
 */
class Alwayly_Checkout_Helper_Data extends Mage_Core_Helper_Abstract
{
	/**
	 * 
	 * getting html for options of products
	 * @param Mage_Catalog_Model_Product $product
	 */
	public function getProductOptionsHtml(Mage_Catalog_Model_Product $product)
	{ 
		$blockOption = Mage::app()-&gt;getLayout()-&gt;createBlock("Mage_Catalog_Block_Product_View_Options");
                $blockOption-&gt;addOptionRenderer("default","catalog/product_view_options_type_default","catalog/product/view/options/type/default.phtml");
		$blockOption-&gt;addOptionRenderer("text","catalog/product_view_options_type_text","alwayly_catalog/product/view/options/type/text.phtml");
		$blockOption-&gt;addOptionRenderer("file","catalog/product_view_options_type_file","catalog/product/view/options/type/file.phtml");
		$blockOption-&gt;addOptionRenderer("select","inchoo_checkout/product_view_options_type_select","catalog/product/view/options/type/select.phtml");
		$blockOption-&gt;addOptionRenderer("date","catalog/product_view_options_type_date","catalog/product/view/options/type/date.phtml") ;
 
 
		$blockOptionsHtml = null;
 
		 if($product-&gt;getTypeId()=="simple"||$product-&gt;getTypeId()=="virtual"||$product-&gt;getTypeId()=="configurable")
		 {  
		 	$blockOption-&gt;setProduct($product);
			if($product-&gt;getOptions())
			{  
				foreach ($product-&gt;getOptions() as $o) 
	    		{     
	    			$blockOptionsHtml .= $blockOption-&gt;getOptionHtml($o); 
	    		};    
			}  
		 }  
 
		 if($product-&gt;getTypeId()=="configurable")
		 {   
		 	$blockViewType = Mage::app()-&gt;getLayout()-&gt;createBlock("Mage_Catalog_Block_Product_View_Type_Configurable");
		 	$blockViewType-&gt;setProduct($product);   
		 	$blockViewType-&gt;setTemplate("inchoo_catalog/product/view/type/options/configurable.phtml");
			$blockOptionsHtml .= $blockViewType-&gt;toHtml(); 
		 }  
		 return $blockOptionsHtml; 
	}
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 15 Oct 2015 09:50:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[删除Magento中的测试订单]]></title>
      <link>https://www.360magento.com/blog/delete-magento-orders/</link>
      <description><![CDATA[<p>当你开发一个Magento项目，你会创建一个Magento主题，放置初始产品和类别，还放置一些订单来测试送货方式和支付方法的正常运行。一切都很好，客户也想要看看网站。可是运行中，你将看到一些本应该删除的测试订单。</p>
<p>当你想在后台删除订单的时候你会发现，你只能将订单状态改为&ldquo;取消&rdquo;，而订单仍然在那里。Magento不允许我们通过后台来删除这些，所以你看不到任何&ldquo;删除订单&rdquo;按钮。这对商家和开发人员来说都是让人沮丧的。来自SAP的人发现不能删除订单有些好处，但是应该有一个状态来从报告中消除销售、库存等信息的销售计数。</p>
<p>那么，怎么做呢？</p>
<p>你可以在你的Magento根目录下创建一个php脚本，粘贴下面的代码：</p>
<pre><code>&lt;?php
/**
* @copyright Alwayly
*/

if (version_compare(phpversion(), '5.2.0', '&lt;')===true) {
echo '&lt;div style="font:12px/1.35em arial, helvetica, sans-serif;"&gt;&lt;div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;"&gt;&lt;h3 style="margin:0; font-size:1.7em; font-weight:normal; text-transform:none; text-align:left; color:#2f2f2f;"&gt;Whoops, it looks like you have an invalid PHP version.&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;Magento supports PHP 5.2.0 or newer. &lt;a href="http://www.magentocommerce.com/install" target=""&gt;Find out&lt;/a&gt; how to install&lt;/a&gt; Magento using PHP-CGI as a work-around.&lt;/p&gt;&lt;/div&gt;';
exit;
}

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

$mageFilename = 'app/Mage.php';

if (!file_exists($mageFilename)) {
echo $mageFilename." was not found";
exit;
}

require_once $mageFilename;

Mage::app();

$executionPath = null;

/*
* determine Magento Edition
*/
if (file_exists('LICENSE_EE.txt')) {
$edition = 'EE';
}elseif (file_exists('LICENSE_PRO.html')) {
$edition = 'PE';
} else {
$edition = 'CE'; 
}

if(($edition=='EE' &amp;&amp; version_compare(Mage::getVersion(), '1.11.0.0.', '&lt;')===true)
|| ($edition=='PE' &amp;&amp; version_compare(Mage::getVersion(), '1.11.0.0.', '&lt;')===true)
|| ($edition=='CE' &amp;&amp; version_compare(Mage::getVersion(), '1.6.0.0.', '&lt;')===true)
){
$executionPath = 'old'; 
} else {
$executionPath = 'new'; 
}

$xpathEntity = 'global/models/sales_entity/entities//table';

if ($executionPath == 'old') {
$xpathResource = 'global/models/sales_mysql4/entities//table';
} else {
$xpathResource = 'global/models/sales_resource/entities//table';
}

$salesEntitiesConf = array_merge(
Mage::getSingleton('core/config')-&gt;init()-&gt;getXpath($xpathEntity), 
Mage::getSingleton('core/config')-&gt;init()-&gt;getXpath($xpathResource)
);

$resource = Mage::getSingleton('core/resource');
$connection = $resource-&gt;getConnection('core_write');


/*
* If you want delete System/Order Statuses (Status and State) you
* should comments below lines (46-51)
*/
$skipTables = array (
$resource-&gt;getTableName('sales_order_status'),
$resource-&gt;getTableName('sales_order_status_state'),
$resource-&gt;getTableName('sales_order_status_label')
);
$salesEntitiesConf = array_diff($salesEntitiesConf, $skipTables);


/*

Multiple RDBMS Support in Magento CE 1.6+ / EE 1.11+
http://www.magentocommerce.com/images/uploads/RDBMS_Guide2.pdf

2.2. Adapters:

... The new Varien_DB_Adapter_Interface was added to sign a contract that all 
developed adapters must execute in order to get Magento working on an actual 
database. The interface describes the list of methods and constants that can be used by resource models...

Used below in the loop:

* If $executionPath == 'old'
* Varien_Db_Adapter_Pdo_Mysql::showTableStatus()
* Varien_Db_Adapter_Pdo_Mysql::truncate() 
* Else
* Varien_Db_Adapter_Interface::isTableExists()
* Varien_Db_Adapter_Interface::truncateTable()

*/

while ($table = current($salesEntitiesConf) ){
$table = $resource-&gt;getTableName($table);

if ($executionPath == 'old') {
$isTableExists = $connection-&gt;showTableStatus($table);
} else {
$isTableExists = $connection-&gt;isTableExists($table);
}
if ($isTableExists) {
try {
if ($executionPath == 'old') {
$connection-&gt;truncate($table);
} else {
$connection-&gt;truncateTable($table);
}

printf('Successfully truncated the &lt;i style="color:green;"&gt;%s&lt;/i&gt; table.&lt;br /&gt;', $table);
} catch(Exception $e) {
printf('Error &lt;i style="color:red;"&gt;%s&lt;/i&gt; occurred truncating the &lt;i style="color:red;"&gt;%s&lt;/i&gt; table.&lt;br /&gt;', $e-&gt;getMessage(), $table);
}
}

next($salesEntitiesConf);
}

exit('All done...');
</code></pre>
<p>代码执行后，数据库里再也不会有测试订单了。记住，这将删除所有数据库中订单。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 15 Oct 2015 09:45:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用自定义输入渲染器添加Magento属性]]></title>
      <link>https://www.360magento.com/blog/attribute-input-renderer/</link>
      <description><![CDATA[<p>这个例子将给你解释如何用自定义输入渲染添加新属性。你将修改已有的功能，添加JavaScript，一些其它的选项或者改变默认的输入渲染。</p>
<p>你可能会问什么是Magento输入渲染器。这是一个负责呈现HTML表单元素的Magento php类。在Magento里有不同的渲染类，你可以在<strong>/lib/Varien/Data/Form/Element</strong>的文件夹里找到它们。</p>
<p>让我们开始我们的示例吧。</p>
<p>首先创建Magento安装文件，下面是示例：</p>
<pre><code>&lt;?php
$installer = $this;
 
$installer-&gt;startSetup();
 
$installer-&gt;addAttribute(Mage_Catalog_Model_Product::ENTITY, 'example_field', array(
    'group'             =&gt; 'General',
    'type'              =&gt; 'text',
    'backend'           =&gt; '',
    'input_renderer'    =&gt; 'test/catalog_product_helper_form_example',//definition of renderer
    'label'             =&gt; 'Example field',
    'class'             =&gt; '',
    'global'            =&gt; Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
    'visible'           =&gt; true,
    'required'          =&gt; false,
    'user_defined'      =&gt; true,
    'searchable'        =&gt; false,
    'filterable'        =&gt; false,
    'comparable'        =&gt; false,
    'visible_on_front'  =&gt; false,
    'unique'            =&gt; false,
    'apply_to'          =&gt; 'simple,configurable,bundle,grouped',
    'is_configurable'   =&gt; false,
));
 
$installer-&gt;endSetup();
</code></pre>
<p>你可以看到，我们用&ldquo;addAttribute&rdquo;方法来添加属性，变量<strong>&ldquo;$installer&rdquo;是&ldquo;Mage_Catalog_Model_Resource_Setup&rdquo</strong>;的实例，前端输入渲染定义在数组<strong> &lsquo;input_renderer&rsquo; =&gt; &lsquo;test/catalog_product_helper_form_example&rsquo;</strong></p>
<p>下一步，你需要创建自己的输入渲染器。下面是我的例子<strong>(Alwayly_Test_Block_Catalog_Product_Helper_Form_Price)</strong>，一个简单的类，为了用来演示。</p>
<pre><code>&lt;?php
class Alwayly_Test_Block_Catalog_Product_Helper_Form_Example extends Varien_Data_Form_Element_Text
{
    public function getAfterElementHtml()
    {
        $html = parent::getAfterElementHtml();
        return $html."
<script type="text/javascript">// <![CDATA[
$('".$this->getHtmlId()."').disable();
// ]]]]><![CDATA[></script>
"; } <br />} </code></pre>
<p>在我的例子里，我添加java代码来禁用输入元素，管理员用户无法编辑此字段。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 14 Oct 2015 11:15:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[来自Magento的苹果推送通知]]></title>
      <link>https://www.360magento.com/blog/apple-push-notifications/</link>
      <description><![CDATA[<p>不是每个人都对这个标题很熟悉，苹果推送通知服务（APNS）是苹果公司为其移动设备(iPhone, iPad …) 提供的基础服务，可以给特定的监听应用发送特定的信息。</p>
<p>对于APNS的正确用法，他们可能需要集成到移动应用程序里，也需要苹果移动层面上发送信息的证书。</p>
<p>我不是一个IOS开发人员，所以我没有资格去写这个故事的移动端，但是，这里还有另一个方面需要被覆盖。我会尽量解释如何利用Magento来发送推送信息到目标移动设备。</p>
<p>使用Magento时思路可以是多样的：当新订单被创建或者客户注册我们可以发推送信息，或者我们可以用在Magento移动端来发送类似通讯的消息……</p>
<p>这篇教程假设你已经参加了苹果开发计划，注册了APNS并集成APNS功能到你的移动应用。</p>
<p>为了在Magento中使用APNS我先要做点准备工作。</p>
<h1>从源代码中准备可用的APNS证书</h1>
<p>登录到你的苹果开发者网站，下载APNS使用证书。将证书拷贝到你插件文件系统中的，另外记得写下证书的密码。</p>
<h1>在数据库中创建自定义的表单来存储独特的标记和其它APNS需要的参数</h1>
<p>在我们的APNS表中，我们将为每一个接收推送信息的设备保存独特的标记。这个设备的标记可能是应用启动时移动设备发出的。为了在数据库保存device_token。我们需要创建独立的Magento web服务方法，当移动应用启动时被调用。</p>
<p>我们需要从移动应用发送APNS设备标记到apns_save Web服务方法。在web服务方法中我们应该要对设备标记添加/更新来避免重复。</p>
<p>下面是一个web服务API方法的示例：</p>
<pre><code>&lt;!--?php &lt;br ?-->
/*
 * @license http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 
class Alwayly_Mapy_Model_Core_Apns_Api_V2 extends Mage_Api_Model_Resource_Abstract {
 
    public function setParams($token, $events, $appversion, $period) {
 
        $api_user = Mage::getSingleton('api/session')->getUser();
        $userExists = ($api_user && $api_user->getId()) ? true : false;
 
        if (!$userExists) {
            $this->_fault('not_exists', 'User does not exist!');
        }
        if (!$token) {
            $this->_fault('data_invalid', 'Device token not set!');
        }
        if ($token == '') {
            $this->_fault('data_invalid', 'Device token invalid!');
        }
 
        $collection = Mage::getSingleton('inchoo_mapy/core_apns')->getCollection();
 
        $collection->addFieldToFilter('user_id', $api_user->getId());
        $collection->addFieldToFilter('device_token', $token);
 
        $app = explode('-', $appversion);
        if (count($app) > 0) {
            $collection->addFieldToFilter('app_version',array('like'=>$app[0] . '%'));
        } else {
            $this->_fault('data_invalid', 'App version not supported!');
        }
        $param = $collection->getFirstItem();
 
        $currentTime = now();
 
        if ($period < 60) {             $period = 60;         }         $sess_id = Mage::getSingleton('api/session')-

>getSessionId();
 
        $param->setUserId($api_user->getId());
        $param->setAppVersion($appversion);
        $param->setDeviceToken($token);
        $param->setEvents($events);
        $param->setStatus('active');
        $param->setNotificationPeriod($period);
        $param->setUpdatedAt($currentTime);
        $param->setLastSession($sess_id);
 
        $param->save();
 
        return true;
    }
</code></pre>
<h1>创建用于发送推送信息的助手</h1>
<p>当我们存储设备标记到我们的表里时，我们决定从Magento中何时，发送什么，发送给哪些设备信息的逻辑。当然，也要实现发送-间隔的逻辑来避免垃圾信息。</p>
<pre><code>&lt;!--?php &lt;br ?-->
/*
 * @license http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
 
class Alwayly_Mapy_Helper_ApnsLite extends Mage_Core_Helper_Abstract {
 
    const CONFIG_XML_PATH_APPLE_SSL = 'inchoo_mapy/settings/apnsssl';
    const CONFIG_XML_PATH_APPLE_FEEDBACK = 'inchoo_mapy/settings/apnsfeedback';
 
    private function _getCertificate() {
        return Mage::getBaseDir() . DS . 'app' . DS . 'code' . DS . 'community' . DS .
                'Inchoo' . DS . 'Mapy' . DS . 'lib' . DS . 'apple' .
                DS . 'certificate' . DS . 'ck_production_lite.pem';
    }
 
    public function sendPushNotifications() {
 
        $certificate = $this->_getCertificate();
        $devices = $this->_getDevicesForNotification();
 
        $messages = array();
        foreach ($devices as $device) {
 
            if ($device['received_at'] == null) {
                $now = Zend_Date::now();
                $now->sub(1, Zend_Date::HOUR);
 
                $from_time = $now;
            } else {
                $from_time = new Zend_Date($device['received_at'], Varien_Date::DATETIME_INTERNAL_FORMAT);
            }
 
            $data = array();
            if (strpos($device['events'], 'new_orders') !== false) {
                $result = $this->_getNewOrders($from_time);
                $data['orders_sum'] = $result['sales_total'];
                $data['orders_count'] = $result['num_orders'];
            }
            if (strpos($device['events'], 'new_customers') !== false) {
                $result = $this->_getNewCustomers($from_time);
                $data['customers_count'] = $result['new_customers'];
            }
 
            $message = $this->_prepareMessage($data);
 
            if (md5($message) == $device['last_msg_hash']) {
                $message = null;
            }
 
            $sess_id = $device['last_session'];
            $session = Mage::getSingleton('api/session');
 
            $user = Mage::getModel('api/user')->loadBySessId($sess_id);
 
            $user = Mage::getModel('api/user')->loadBySessId($sess_id);
            if ((!$session->isLoggedIn($sess_id))||(!$user->hasUserId())) {
                $message = null;
                $collection = Mage::getModel('inchoo_mapy/core_apns')->getCollection();
                $collection->addFieldToFilter('last_session', $sess_id);
 
                foreach ($collection as $val) {
                    if ($val->getId()) {
                        $val->setStatus('inactive');
                        $val->save();
                    }
                }
            }
 
            if ($message != null) {
                $messages[] = array(
                    'msg' => $message,
                    'device' => $device['device_token'],
                );
            }
        }
 
        if (count($messages) > 0) {
            $this->_pushMessage($messages, $certificate);
        }
    }
 
    private function _prepareMessage($data) {
 
        $helper = Mage::helper('inchoo_mapy');
 
        $message = '';
        $badge = 0;
        $mage_events = array();
 
        if (isset($data['orders_sum'])) {
            if ($data['orders_sum'] > 0) {
                $message.='Sales total: ' . $helper->currencyToBaseFormat($data['orders_sum']);
            }
        }
 
        if (isset($data['orders_count'])) {
            if ($data['orders_count'] > 0) {
                $message.=' Orders count: ' . $data['orders_count'];
                $badge+=$data['orders_count'];
                $mage_events[] = array('mage_event' => 'new_orders', 'count' => $data['orders_count']);
            }
        }
 
        if (isset($data['customers_count'])) {
            if ($data['customers_count'] > 0) {
                $message.=' New customers count: ' . $data['customers_count'];
                $badge+=$data['customers_count'];
                $mage_events[] = array('mage_event' => 'new_customers', 'count' => $data['customers_count']);
            }
        }
 
        if ($badge == 0) {
            return;
        }
 
        $body['aps'] = array(
            'sound' => 'tick.caf',
            'alert' => $message,
            'badge' => (int) $badge,
            'mage-events' => $mage_events
        );
 
        $payload = json_encode($body);
 
        return $payload;
    }
 
    private function _getDevicesForNotification() {
 
        $collection = Mage::getModel('inchoo_mapy/core_apns')->getCollection();
        $collection->addFieldToFilter('status', 'active');
 
        $where_expr = 'DATE_ADD(IFNULL(sent_at, DATE_SUB(UTC_TIMESTAMP(), INTERVAL 3600 SECOND )),INTERVAL notification_period 

SECOND)                 $param->save();
            }
        }
    }
 
}
</code></pre>
<p>如果你阅读了代码，你会发现我们有些公用的方法来发送通知。这些方法里我们先读取设备，然后我们再读取个准备信息的数据并在条件满足时发送它们。</p>
<ul>
<li>_prepareMessage方法是用来将数据加入到合适的json信息格式</li>
<li>_pushMessage是信息发送方法</li>
<li>_checkFeedback用来列出关闭推送信息的苹果设备，我们需要在表中把它们标记为inactive。</li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 14 Oct 2015 11:07:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[注入变量到Magento CMS静态块]]></title>
      <link>https://www.360magento.com/blog/injecting-variables-static/</link>
      <description><![CDATA[<p>在这篇教程中我将演示如何注入你需要的自定义变量到一个cms静态块，使用{{var variable_name}}标签。如果你正在处理email模版，那么你会看到这个。（本质是我们使用和email模版同样的用来注入变量的筛选器。</p>
<p>首先，让我们假设几件事情：</p>
<ol>
</li>包命名为'Company'，模块命名为'Module'<li>
</li>你知道如何创建一个php模型和新的块类。例子中的块别名是‘module/dynamic’<li>
</li>动态块的模版是dynamic.phtml<li>
</li>静态cms块的id是‘static_block’（你需要在后台创建它）<li>
</li>你需要添加当前用户的email到静态块。什么时候显示模块和文本范围的逻辑。<li>
</ol>
<p>第一步，我们看下模版文件，里面只使用我们想要创建块类的方法：</p>
<pre><code>&lt;?php if(Mage::getSingleton('customer/session')->getCustomer()->getId()) : ?>
	&lt;?php echo $this->getStaticBlock();?>
&lt;?php endif;?>
</code></pre>
<p>如你所见，我们只检查客户是否存在。下面我们看动态块类里的逻辑：</p>
<pre><code>&lt;?php
/**
 * Just another block class
 */
class Company_Module_Block_Dynamic extends Mage_Core_Block_Template
{
	/**
	 * This getter will return the html of your static block
	 * @return string
	 */
	public function getStaticBlock()
	{
		// loading the static block
		$block = Mage::getModel('cms/block')
		->setStoreId(Mage::app()->getStore()->getId())
		->load('static_block');
		/* @var $block Mage_Cms_Model_Block */
 
		// setting the assoc. array we send to the filter.
		$array = array();
		// the array keys are named after the tags in the static block. let's say $array['customer_email'] is {{var customer_email}} in the static block. you can set as many variables you need.
		$array['customer_email'] = Mage::getSingleton('customer/session')->getCustomer()->getEmail();
 
		// loading the filter which will get the array we created and parse the block content
		$filter = Mage::getModel('cms/template_filter');
		/* @var $filter Mage_Cms_Model_Template_Filter */
		$filter->setVariables($array);
 
		// return the filtered block content.
		return $filter->filter($block->getContent());
 
	}
}
?>
</code></pre>
<p>现在，在你CMS中的static_block块中添加 {{var customer_email}}标签，它将被动态地添加到CMS块。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>
]]></description>
      <pubDate>Tue, 13 Oct 2015 10:53:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[使用xpath和varien_object运行模块xml文件中指定的方法]]></title>
      <link>https://www.360magento.com/blog/xpath-varien_object/</link>
      <description><![CDATA[<p>去年，我们为用户开发了一些定制的EPR系统。客户的文件中指出他们需要运行一些在config.xml中定义的方法，在出口订单的时候用方法代码作为ID。很快，根据订单的付款代码他们想在出口订单时添加一些自定义计算。如果你对我们如何实现的感兴趣，那么继续阅读吧。</p>
<p>举例会让解释变得简单。首先创建我们的config.xml，最后我们将让Magento呼应我们的模块。</p>
<h1>Step 1: Creating module&rsquo;s configuration（创建模型配置）</h1>
<p>这里只是个简单的示例代码，你可以用它创建<strong>app/code/local/Alwayly/XmlMethodCall/etc/config.xml </strong></p>
<pre><code>&lt; ?xml version="1.0"?&gt;
 
&lt;config&gt;
 
    &lt;modules&gt;
       &lt;alwayly_xmlmethodcall&gt;
           &lt;version&gt;1.0.0.0&lt;/version&gt;
       &lt;/alwayly_xmlmethodcall&gt;
    &lt;/modules&gt;
 
    &lt;global&gt;
       &lt;xml_method_call&gt;
           &lt;payment_checkmo&gt;
               &lt;name&gt;Check / Money order &lt;/name&gt;
               &lt;code&gt;checkmo&lt;/code&gt;
               &lt;add&gt;
                   &lt;model&gt;alwayly_xmlmethodcall/checkmoAddVal&lt;/model&gt;
                   &lt;method&gt;addValue&lt;/method&gt;
               &lt;/add&gt;
               &lt;return&gt;
                   &lt;model&gt;alwayly_xmlmethodcall/checkmoGetCod&lt;/model&gt;
                   &lt;method&gt;getCode&lt;/method&gt;
               &lt;/return&gt;
           &lt;/payment_checkmo&gt;
       &lt;/xml_method_call&gt;
       &lt;xml_method_call&gt;
           &lt;payment_ccsave&gt;
               &lt;name&gt;Credit Card (saved) &lt;/name&gt;
               &lt;code&gt;ccsave&lt;/code&gt;
               &lt;add&gt;
                   &lt;model&gt;alwayly_xmlmethodcall/ccsaveAddVal&lt;/model&gt;
                   &lt;method&gt;addValue&lt;/method&gt;
               &lt;/add&gt;
               &lt;return&gt;
                   &lt;model&gt;alwayly_xmlmethodcall/ccsaveGetCod&lt;/model&gt;
                   &lt;method&gt;getCode&lt;/method&gt;
               &lt;/return&gt;
           &lt;/payment_ccsave&gt;
       &lt;/xml_method_call&gt;
       &lt;models&gt;
           &lt;alwayly_xmlmethodcall&gt;
               &lt;class&gt;Alwayly_XmlMethodCall_Model&lt;/class&gt;
               &lt;resourcemodel&gt;alwayly_xmlmethodcall_mysql4&lt;/resourcemodel&gt;
           &lt;/alwayly_xmlmethodcall&gt;
       &lt;/models&gt;
    &lt;/global&gt;
 
    &lt;frontend&gt;
       &lt;routers&gt;
           &lt;alwayly_xmlmethodcall&gt;
               &lt;use&gt;standard&lt;/use&gt;
               &lt;args&gt;
                   &lt;module&gt;Alwayly_XmlMethodCall&lt;/module&gt;
                   &lt;frontname&gt;xmlmethodcall&lt;/frontname&gt;
               &lt;/args&gt;
           &lt;/alwayly_xmlmethodcall&gt;
       &lt;/routers&gt;
    &lt;/frontend&gt;
 
&lt;/config&gt;
</code></pre>
<p>深入研究下xml_method_call结点和全球结点的第一子节点。你会看到两兄弟有同样的名字， xml_method_call结点。</p>
<p>让我们描述下下一个xml块：</p>
<pre><code>&lt;payment_checkmo>
    &lt;name>Check / Money order &lt;/name>
    &lt;code>checkmo&lt;/code>
    &lt;add>
        &lt;model>alwayly_xmlmethodcall/checkmoAddVal&lt;/model>
        &lt;method>addValue&lt;/method>
    &lt;/add>
    &lt;return>
        &lt;model>alwayly_xmlmethodcall/checkmoGetCod&lt;/model>
        &lt;method>getCode&lt;/method>
    &lt;/return>
&lt;/payment_checkmo>
</code></pre>
<ul>
<li>payment_checkmo 包含一些数据的唯一结点</li>
<li>name 这个唯一结点的名字，与代码无关</li>
<li>code 支付方式的代码（id）</li>
<li>add,return 两种方法定义他们应该调用的东西（模块/模型和方法调用的定义）</li>
</ul>
<p>现在我希望你对我们需要怎么实现有一个清晰的认识。在订单出口的时候我们调用一些方法做计算并返回结果。要求是方法需要是可配置的，这样非开发人员可以通过配置文件来改变它们。当然，你可以在system.xml中做到这点。</p>
<h1>Step 2: Creating module&rsquo;s models, described in config.xml（创建模块的模型，在config.xml中写描述）</h1>
<p>Create files:</p>
<ul>
<li>&ndash; app/code/local/Alwayly/XmlMethodCall/Model/CheckmoAddVal.php</li>
<li>&ndash; app/code/local/Alwayly/XmlMethodCall/Model/CheckmoGetCod.php</li>
<li>&ndash; app/code/local/Alwayly/XmlMethodCall/Model/CcsaveAddVal.php</li>
<li>&ndash; app/code/local/Alwayly/XmlMethodCall/Model/CcsaveGetCod.php</li>
</ul>
<p>分别添加下面的代码到对应的文件中：</p>
<pre><code>&lt; ?php
 
/**
*
*/
class Alwayly_XmlMethodCall_Model_CheckmoAddVal extends Mage_Core_Model_Abstract
{
 
   public function addValue()
   {
       return 1;
   }
}
</code></pre>
<pre><code>&lt; ?php
 
/**
*
*/
class Alwayly_XmlMethodCall_Model_CheckmoGetCod extends Mage_Core_Model_Abstract
{
 
   public function getCode()
   {
       return 'a';
   }
}
</code></pre>
<pre><code>&lt; ?php
 
/**
*/
class Alwayly_XmlMethodCall_Model_CcsaveAddVal extends Mage_Core_Model_Abstract
{
 
   public function addValue()
   {
       return 2;
   }
}
</code></pre>
<pre><code>&lt; ?php
 
/**
*
*/
class Alwayly_XmlMethodCall_Model_CcsaveGetCod extends Mage_Core_Model_Abstract
{
 
   public function getCode()
   {
       return 'b';
   }
}
</code></pre>
<p>因为是一个简单的教学示例，我们将只创建控制器并在里面的几个列数组里的订单。</p>
<h1>Step 3: Creating controller（创建控制器）</h1>
<pre><code>&lt; ?php
 
/**
*
*/
class Alwayly_XmlMethodCall_IndexController extends Mage_Core_Controller_Front_Action
{
 
   public function indexAction()
   {
       $orders = array();
       $orders[] = array (
           'order_no'    =&gt; 101,
           'method'    =&gt; 'checkmo',
           'amount'    =&gt; 99
       );
       $orders[] = array (
               'order_no'    =&gt; 102,
               'method'    =&gt; 'ccsave',
               'amount'    =&gt; 100
       );
       $orders[] = array (
               'order_no'    =&gt; 101,
               'method'    =&gt; 'checkmo',
               'amount'    =&gt; 199
       );
 
       foreach ($orders as $row) {
           $orderNo = $row['order_no'];
           $conf = Mage::getSingleton('core/config')-&gt;init()
               -&gt;getXpath('global/xml_method_call//code[.="' . $row['method'] . '"]/..');
 
           if ($conf) {
               $conf = new Varien_Object(current($conf)-&gt;asArray());
               $add = new Varien_Object($conf-&gt;getAdd());
               $code = new Varien_Object($conf-&gt;getReturn());
 
               if (method_exists(Mage::getModel($add-&gt;getModel()), $add-&gt;getMethod())) {
                   $amountValue = $row['amount'] + Mage::getModel($add-&gt;getModel())-&gt;{$add-&gt;getMethod()}();
               }
               if (method_exists(Mage::getModel($code-&gt;getModel()), $code-&gt;getMethod())) {
                   $codeValue = Mage::getModel($code-&gt;getModel())-&gt;{$code-&gt;getMethod()}();
               }
           } else {
               //throw an error
               die("or exit... or something goes wrong...");
           }
           echo "&lt;pre&gt;"                     . PHP_EOL;
           echo 'ID: '     . $orderNo         . PHP_EOL;
           echo 'VALUE: '     . $amountValue     . PHP_EOL;
           echo 'CODE: '     . $codeValue     . PHP_EOL;
       }
       print_r($orders);
   }
}
</code></pre>
<p>首先，我们创建了包含一些$orders里数据的订单集合。这可能是一个真实的集合，但是现在为了简化，我决定用个简单的二维数组。</p>
<p>下一个重要的部分是：</p>
<pre><code>$conf = Mage::getSingleton('core/config')-&gt;init()-&gt;getXpath('global/xml_method_call//code[.="' . $row['method'] . '"]/..');
</code></pre>
<p>如你所见，我们调用code/config模型里的XPath。如果你不知道this -&gt;getXpath(&lsquo;global/xml_method_call//code[.=&rdquo;&lsquo; . $row[&lsquo;method&rsquo;] . &lsquo;&rdquo;]/..&rsquo;)的意思，那么你可以去w3schools/XPath学些新东西。</p>
<p>我们将要实例化$conf对象，把xml_method_call作为根节点。我们不知道哪一个是它，但我们知道方法的代码并可以在config.xml搜索它。</p>
<p>"//"意味着同一级别。比temp结点深，确认你所能找到的所有结点然后挑选出含有你所需值的那个。</p>
<p>"/.."意味着返回当前位置的上一级结点，获取你想要的xml_method_call结点。这样所有事情就变得简单了。</p>
<p>下一个有趣的部分是：</p>
<pre><code> $conf = new Varien_Object(current($conf)-&gt;asArray());
 $add = new Varien_Object($conf-&gt;getAdd());
 $code = new Varien_Object($conf-&gt;getReturn());
</code></pre>
<p>设置我们的$conf, $add和$code作为Varien_Object实例（我们将有自己的getter和setter）。</p>
<p>最后确认我们的方法是否存在。如果存在就在显示器上打印出结果。</p>
<p>那么让Magento配置对象呼应我们的模块，接着访问我们的控制器。</p>
<h1>Step 4: Magento, we are here!（Magento，我们在这儿！）</h1>
<p>用下面的代码创建文件<strong>app/etc/modules/Alwayly_Xmlmethodcall.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;config&gt;
	&lt;modules&gt;
		&lt;Alwayly_XmlMethodCall&gt;
			&lt;active&gt;true&lt;/active&gt;
			&lt;codePool&gt;local&lt;/codePool&gt;
		&lt;/Alwayly_XmlMethodCall&gt;
	&lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<h1>Step 5: Visit something like: <strong>http://magento1510.loc/index.php/xmlmethodcall</strong>（访问类似http://magento1510.loc/index.php/xmlmethodcall的地址）</h1>
<p>你会看到类似这样的结果：</p>
<pre><code>ID: 101
VALUE: 100
CODE: a
 
ID: 102
VALUE: 102
CODE: b
 
ID: 101
VALUE: 200
CODE: a
Array
(
    [0] =&gt; Array
        (
            [order_no] =&gt; 101
            [method] =&gt; checkmo
            [amount] =&gt; 99
        )
 
    [1] =&gt; Array
        (
            [order_no] =&gt; 102
            [method] =&gt; ccsave
            [amount] =&gt; 100
        )
 
    [2] =&gt; Array
        (
            [order_no] =&gt; 101
            [method] =&gt; checkmo
            [amount] =&gt; 199
        )
 
)
</code></pre>
<p>我希望你们中的一些人能看到如何使用Varien_Object以及使用XPath表达式会让事情变得多么有趣。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 13 Oct 2015 10:42:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用*s实现通过Magento后台网格进行搜索]]></title>
      <link>https://www.360magento.com/blog/search-through-grids/</link>
      <description><![CDATA[<p>为什么在Magento后台列里搜索某些值时不能使用索引？（例如order#）</p>
<p>当你的网站有几个管理员的时候，这篇简短的文章将非常有用。我在一个项目中有超过2000个有不同角色的管理员（这个数字还在增长）。你可以想像下当大量管理员在使用后台时是有多慢，特别是他们在搜索或者为数据排序时。</p>
<p>2000名管理员对Magento来说是个大数字吗？取决于他们如何使用后台部分，但是他们中的大部分要排列东西，搜索些有时他们并不需要的东西。</p>
<p>在实现新功能前，我们做了一次测试。试图在Magento后台寻找你的销售订单网格中的#: 10。记住有多少搜索结果，花了多长时间。</p>
<p><strong>为什么通过Magento网格搜索花费如此大？</strong></p>
<p>因为当你在搜索语句两侧都使用Like语句时MySQL服务不能使用索引。记住MySQL（innodb）有B-Tree索引。</p>
<p>一个例子，当你想要找出所有使用gmail作为邮箱的客户。你可以搜索Magento后台客户网格的邮箱列，像&ldquo;@gmail&rdquo;这样。结果是你找出了所有的gmail邮箱地址。在这个过程中，MySQL浏览所有的客户行和所有的customer_email区域字符在你得到结果前。这种特殊的情况没什么问题，但是当你搜索订单#: 10001时呢？</p>
<p>同样的事情，因为Magento针对特定的列时，经常在你的字符串前后添加"%"。所以如果你想要搜索#: 10001订单，Magento会转换成&ldquo;%10001%&rdquo;并在你的字符串前加Like语句。所以在最后Magento会发送这样的语句到MySQL&ldquo;SELECT customer_email FROM&hellip;. WHERE customer_email LIKE &lsquo;%10001%';这可能不是你所期待的，但它就是这么实现的。</p>
<p>如果我们想要改变这种行为并给MySQL（Magento）索引提速。我们需要在后台网格搜索时做些改变。最通用和用户友好的方式就是使用"*"字符替换MySQL的特殊字符"%"。</p>
<p>现在如果你想要使用&ldquo;like&rdquo;操作符，你将需要在字符串前、后或两侧添加。所以在我们改变后，你讲能找到所有的gmail通过在你的字符串前后添加"*"。所以，&ldquo;@gmail&rdquo;将变成&ldquo;*@gmail*&rdquo;。我希望你能看到这背后的思想。</p>
<p>让我们用下面的内容替换<strong>app/code/core/Mage/Adminhtml/Block/Widget/Grid.php</strong>中的私有方法<strong>_addColumnFilterToCollection($column)</strong>。我们只影响sales_order网格。</p>
<pre><code>/**
 *
 */
protected function _addColumnFilterToCollection($column)
    {
       if ($this-&gt;getCollection()) {
           $field = ( $column-&gt;getFilterIndex() ) ? $column-&gt;getFilterIndex() : $column-&gt;getIndex();
           if ($column-&gt;getFilterConditionCallback()) {
               call_user_func($column-&gt;getFilterConditionCallback(), $this-&gt;getCollection(), $column);
           } else {
               $cond = $column-&gt;getFilter()-&gt;getCondition();
               /**  START WITH CODE FOR A NEW WAY OF SEARCHING
                * - if you look in app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Filter/Abstract.php
                * - you'll see that -&gt;getCondition(); returns an array:
                * public function getCondition()
                * {
                *      return array('like'=&gt;'%'.$this-&gt;_escapeValue($this-&gt;getValue()).'%');
                * }
                * - and _escapeValue returns:
                * protected function _escapeValue($value)
                * {
                *     return str_replace('_', '\_', $value);
                * }
                * - so we'll "unescape" it in case where we have [$cond['eq'] and unset($cond['like']);]
                */
               if ($field &amp;&amp; isset($cond)) {
                   if($this-&gt;getAction() instanceof Mage_Adminhtml_Sales_OrderController) {
                       if (isset($cond['like'])) {
 
                           //cover case where like should go to equal; else means that we have at least one * so like should stay...
                           if (!(substr($cond['like'], -2) === '*%') &amp;&amp; !(substr($cond['like'], 0,2) === '%*')) {
                               $cond['eq'] = str_replace('%', '', $cond['like']);
                               $cond['eq'] = str_replace('\_', '_', $cond['eq']); //This line was added with new revision
                               unset($cond['like']);
                           } else {
                               if (substr($cond['like'], 0,2) !== '%*') {
                                   $cond['like'] = substr($cond['like'],1);
                               } else {
                                   $cond['like'] = '%' . substr($cond['like'],2);
                               }
                               if (substr($cond['like'], -2) !== '*%') {
                                   $cond['like'] = substr($cond['like'], 0, -1);
                               } else {
                                   $cond['like'] = substr($cond['like'], 0, -2) . '%';
                               }
                           }
                       }
                   }
                   /*END WITH CODE FOR A NEW WAY OF SEARCHING*/
                   $this-&gt;getCollection()-&gt;addFieldToFilter($field , $cond);
               }
           }
       }
       return $this;
    }
</code></pre>
<p>在我们改变Magento核心文件后，再次尝试搜索订单#: 10。现在你能看到多少结果？花了多长时间呢？Magento现在使用order#索引。现在你所能搜索的数字10的类型是：&ldquo;10&rdquo;, &ldquo;*10&Prime;, &ldquo;*10*&rdquo;和&ldquo;10*&rdquo;。注意，只有第一个是同等的，其它的使用了Like语句。</p>
<p>注意，你可以去掉&ldquo;<strong>if($this-&gt;getAction() instanceof Mage_Adminhtml_Sales_OrderController) { &hellip; }</strong>&rdquo;这个判断来将改变应用到整个后台。</p>
<p>你也可以选择重写<strong>Mage_Adminhtml_Block_Widget_Grid</strong>类而不是修改Magento核心文件。这个小技巧可以有效地提高我们客户的MySQL服务，</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 12 Oct 2015 12:09:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在单个店铺用所有语言和本地日期打印信息]]></title>
      <link>https://www.360magento.com/blog/print-languages-date/</link>
      <description><![CDATA[<p>你是否尝试过在单个页面用所有语言打印一条信息？</p>
<p>首先，让我来告诉你何时我需要这么做。最近我需要开发一个发送些定制邮件的功能。你已经知道我们可以在网站/店铺设置交易邮件并将这些邮件在administration/db翻译。我所要面对的挑战就是需要翻译一些交易邮件中的随机句子，所以使用预定义的模版是不可能的。在email模版我们是可以用and/or连接变量，但对我来说没什么帮助。</p>
<p>如果你安装的Magento社区版在1.4.2.0以上，那么我可以开始我们的翻译模块了。</p>
<ol>
<li>告诉Magento我们模块的信息；</li>
<li>创建模块结构；</li>
<li>编写config.xml；</li>
<li>编写Translate.php模型；</li>
<li>编写Locale.php模型；</li>
<li>编写Data.phph助手；</li>
<li>编写index.php。</li>
</ol>
<h2>1.用下面的代码创建app/etc/modules/Alwayly_Translation.xml:</h2>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
       &lt;Alwayly_Translate&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_Translate&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<h2>2.创建app/code/local/Alwayly/Translate下的文件夹: etc, controllers, Model, Helper</h2>
<h2>3.用下面的代码创建app/code/local/Alwayly/Translate/config.xml:</h2>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
 
	&lt;modules&gt;
		&lt;Alwayly_Translate&gt;
			&lt;version&gt;0.1.0&lt;/version&gt;
		&lt;/Alwayly_Translate&gt;
	&lt;/modules&gt;
 
	&lt;frontend&gt;
		&lt;routers&gt;
			&lt;Alwayly_Translate&gt;
				&lt;use&gt;standard&lt;/use&gt;
				&lt;args&gt;
					&lt;module&gt;Alwayly_Translate&lt;/module&gt;
					&lt;frontName&gt;Alwayly&lt;/frontName&gt;
				&lt;/args&gt;
			&lt;/Alwayly_Translate&gt;
		&lt;/routers&gt;
	&lt;/frontend&gt;
 
	&lt;global&gt;
		&lt;models&gt;
			&lt;Alwayly_translate&gt;
				&lt;class&gt;Alwayly_Translate_Model&lt;/class&gt;
			&lt;/Alwayly_translate&gt;
 
			&lt;core&gt;
				&lt;rewrite&gt;
					&lt;locale&gt;Alwayly_Translate_Model_Mage_Core_Model_Locale&lt;/locale&gt;
					&lt;translate&gt;Alwayly_Translate_Model_Mage_Core_Model_Translate&lt;/translate&gt;
				&lt;/rewrite&gt;
			&lt;/core&gt;
		&lt;/models&gt;
 
		&lt;helpers&gt;
			&lt;Alwayly_translate&gt;
				&lt;class&gt;Alwayly_Translate_Helper&lt;/class&gt;
			&lt;/Alwayly_translate&gt;
		&lt;/helpers&gt;
	&lt;/global&gt;
 
&lt;/config&gt;
</code></pre>
<p>如你所见，我们需要重写两个Magento模型。我们需要删除一个Translate模型中的if语句，在Locale模型中添加几个&ldquo;*ByLocaleCode&rdquo;方法，这样就可以在我们所有的Action里使用商店代码。</p>
<p>在助手文件中我们将添加方法处理日期（关于本地化）。因为当Magento初始化，一些请求会为特定的本地读取内存中的各种缓存。当你尝试想要做类似的事情：Mage::helper(&lsquo;core&rsquo;)-&gt;__(&ldquo;translate me&rdquo;)Magento将使用cache/memory。你可以看到：</p>
<pre><code>/**
 * Translate model
 *
 * @author      Magento Core Team &lt;core@magentocommerce.com&gt;
 */
class Mage_Core_Model_Translate
//...
 
/**
     * Return translated string from text.
     *
     * @param string $text
     * @param string $code
     * @return string
     */
    protected function _getTranslatedString($text, $code)
    {
        $translated = '';
        if (array_key_exists($code, $this-&gt;getData())) {
            $translated = $this-&gt;_data[$code];
        }
        elseif (array_key_exists($text, $this-&gt;getData())) {
            $translated = $this-&gt;_data[$text];
        }
        else {
            $translated = $text;
        }
        return $translated;
    }
</code></pre>
<h2>4.用下面的代码创建app/code/local/app/code/local/Alwayly/Translate/Model/Mage/Core/<br />Model/Locale.php/Translate/Model/Mage/Core/Model/Translate.php</h2>
<pre><code>&lt;?php
 
/**
 * Translate model
 *
 */
class Alwayly_Translate_Model_Mage_Core_Model_Translate extends Mage_Core_Model_Translate
{
     /**
     * Retrieve locale
     *
     * @return string
     */
    public function getLocale()
    {
		$this-&gt;_locale = Mage::app()-&gt;getLocale()-&gt;getLocaleCode();
		return $this-&gt;_locale;
	}
}
</code></pre>
<p>我们只是移除了getLocale()方法中的if语句。</p>
<h2>5.创建app/code/local/Alwayly/Translate/Model/Mage/Core/Model/Locale.php</h2>
<pre><code>&lt;?php
/**
 * Locale model
 * 
 */
 
class Alwayly_Translate_Model_Mage_Core_Model_Locale extends Mage_Core_Model_Locale
{
    /**
     * Create Zend_Date object with date converted to store timezone and store Locale
     *
     * @param   mixed $store Information about store
     * @param   string|integer|Zend_Date|array|null $date date in UTC
     * @param   boolean $includeTime flag for including time to date
     * @return  Zend_Date
     */
    public function getStoreDate($store=null, $date=null, $includeTime=false)
    {
        $timezone = Mage::app()-&gt;getStore($store)-&gt;getConfig(self::XML_PATH_DEFAULT_TIMEZONE);
        $locale = Mage::app()-&gt;getStore($store)-&gt;getConfig(self::XML_PATH_DEFAULT_LOCALE);
        $date = new Zend_Date($date, null, $locale);
        $date-&gt;setTimezone($timezone);
        if (!$includeTime) {
            $date-&gt;setHour(0)
                -&gt;setMinute(0)
                -&gt;setSecond(0);
        }
        return $date;
    }
 
    /**
	 * Returns a localized information string, supported are several types of informations.
	 * For detailed information about the types look into the documentation
	 *
	 * @param  string             $value  Name to get detailed information about
	 * @param  string             $path   (Optional) Type of information to return
	 * @return string|false The wished information in the given language
	 */
	public function getTranslationByLocaleCode($value = null, $path = null, $localeCode = null)
	{
		return $this-&gt;getLocale()-&gt;getTranslation($value, $path, $localeCode/*$this-&gt;getLocale()*/);
	}
	/**
	 * Retrieve ISO date format
	 *
	 * @param   string $type
	 * @return  string
	 */
	public function getDateFormatByLocaleCode($type=null, $localeCode)
	{
		return $this-&gt;getTranslationByLocaleCode($type, 'date', $localeCode);
	}
 
	/**
	 * Retrieve ISO time format
	 *
	 * @param   string $type
	 * @return  string
	 */
	public function getTimeFormatByLocaleCode($type=null, $localeCode)
	{
		return $this-&gt;getTranslationByLocaleCode($type, 'time', $localeCode);
	}
 
	/**
	 * Retrieve ISO datetime format
	 *
	 * @param   string $type
	 * @return  string
	 */
	public function getDateTimeFormatByLocaleCode($type, $localeCode)
	{
		return $this-&gt;getDateFormatByLocaleCode($type, $localeCode) . ' ' . $this-&gt;getTimeFormatByLocaleCode($type, $localeCode);
	}
}
</code></pre>
<p>注意，我添加了几个&ldquo;*ByLocaleCode&rdquo; 方法，这样能使得Magento核心文件不被修改。</p>
<h2>6、创建助手文件在app/code/local/Alwayly/Translate/Helper/Data.php</h2>
<pre><code>&lt;?php
 
/**
 * Translate helper
 *
 */
class Alwayly_Translate_Helper_Data extends Mage_Core_Helper_Abstract
{
 
	/**
	 * Format date using specifed locale
	 *
	 * @param   date|Zend_Date|null $date in GMT timezone
	 * @param   string $format
	 * @param   bool $showTime
	 * @return  string
	 */
	public function formatDateByLocaleCode($date=null, $format='short', $showTime=false, $localeCode=null)
	{
		if ($localeCode === null || !is_string($localeCode)) {
			$localeCode = Mage::getStoreConfig('general/locale/code');
		}
		if (Mage_Core_Model_Locale::FORMAT_TYPE_FULL    	!==$format &amp;&amp;
				Mage_Core_Model_Locale::FORMAT_TYPE_LONG    !==$format &amp;&amp;
				Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM  !==$format &amp;&amp;
				Mage_Core_Model_Locale::FORMAT_TYPE_SHORT   !==$format) {
			return $date;
		}
		if (!($date instanceof Zend_Date) &amp;&amp; $date &amp;&amp; !strtotime($date)) {
			return '';
		}
		if (is_null($date)) {
			$date = Mage::app()-&gt;getLocale()-&gt;date(Mage::getSingleton('core/date')-&gt;gmtTimestamp(), null, null);
		}
		elseif (!$date instanceof Zend_Date) {
			$date = Mage::app()-&gt;getLocale()-&gt;date(strtotime($date), null, null, $showTime);
		}
 
		if ($showTime) {
			$format = Mage::app()-&gt;getLocale()-&gt;getDateTimeFormatByLocaleCode($format, $localeCode);
		}
		else {
			$format = Mage::app()-&gt;getLocale()-&gt;getDateFormatByLocaleCode($format, $localeCode);
		}
		return $date-&gt;toString($format);
	}
}
</code></pre>
<p>注意，我们最后在if/else判断里调用-&gt;getDate(Time/Format)ByLocaleCode方法来替换我们的Locale模型。</p>
<h2>7、创建控制器文件app/code/local/Alwayly/Translate/controllers/IndexController.php</h2>
<pre><code>&lt;?php
 
/**
 * http://films.local/index.php/ExpiringFilmsNotifier/index/notify
 */
class Alwayly_Translate_IndexController extends Mage_Core_Controller_Front_Action
{
    public function translateAction()
    {
    	echo "</code></pre>
<pre>";
 
    	$defaultStore = Mage::app()-&gt;getStore()-&gt;getCode();
    	$defaultLocale = Mage::app()-&gt;getLocale()-&gt;getLocaleCode();
    	$stores = array(1,2,3);
 
    	foreach ($stores as $storeId) {
    		Mage::app()-&gt;setCurrentStore($storeId);
    		$currentStore 	= Mage::app()-&gt;getStore()-&gt;getCode();
    		$currentLocale 	= Mage::getModel('core/locale')-&gt;getLocaleCode();
    		Mage::app()-&gt;getLocale()-&gt;setLocale($currentLocale);
    		// reinitialize translation cache
    		Mage::app()-&gt;getTranslator()-&gt;init('frontend', true);
 
    		echo Mage::helper('core')-&gt;__("Welcome, %s!", Mage::helper('alwayly_translate')
    			-&gt;formatDateByLocaleCode('2012-05-05 00:00:00', 'medium', false, $currentLocale))  . PHP_EOL;
    	}
    	//restore app to default values
    	Mage::app()-&gt;setCurrentStore($defaultStore);
    	Mage::app()-&gt;getLocale()-&gt;setLocale($defaultLocale);
    	Mage::app()-&gt;getTranslator()-&gt;init('frontend', true);
 
    	echo 'Did system restore default initialization?' . PHP_EOL;
    	echo Mage::helper('core')-&gt;__("Welcome, %s!", Mage::helper('alwayly_translate')
    			-&gt;formatDateByLocaleCode('2012-05-05 00:00:00', 'medium', false, $currentLocale))  . PHP_EOL;
    	exit;
    }
}
</pre>
<p>注意，我们先创建了两个变量$defaultStore和$defaultLocale，这样我妈就可以在customer页面回复Magento自定义。如果你有三个店铺确认为它们设置了本地化。</p>
<p>我在in app/etc/locale/de_DE/和app/etc/locale/fr_FR/ 创建了Mage_Page.csv ，代码如下：</p>
<pre><code>For German:
&ldquo;Welcome, %s!&rdquo;,&rdquo;de_DE Welcome, %s!&rdquo;
For France :
&ldquo;Welcome, %s!&rdquo;,&rdquo;fr_FR Welcome, %s!&rdquo;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 12 Oct 2015 11:49:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[编程的方式创建，应用和删除Magento中的购物车价格规则]]></title>
      <link>https://www.360magento.com/blog/price-rule-magento/</link>
      <description><![CDATA[<p>默认的Magento中有个很棒的功能叫做&ldquo;促销&rdquo;。有两种类型的促销：目录价格跪着和购物车价格规则。这篇文章中我将演示如何以编程的方式来创建，应用和删除购物车价格规则。</p>
<p>有很多理由让你使用它。例如：你想模拟某种奖励功能，对达到要求的客户进行打折。除非正在使用Magento　EE就不用了（带有奖励积分的功能），那么你将编写代码或者购买第三方插件。我个人不太喜欢用第三方插件，除非它是必须的或者能达到功能需求的90-95%。否则你将花费时间在修改插件上。让我们看看我们如何自己实现这个功能。一种方式是用代码粉方式创建和应用购物车价格规则，然后在执行的时候删除购物车价格规则。</p>
<p>首先，我们创建购物车价格规则。我们将以手动创建一个规则，然后学习后台进程来以编程的方式来复制它。我们将进入Magento后台，在&ldquo;Promotions &gt; Shopping Cart Price Rules&rdquo;下，点击&ldquo;Add New Rule&rdquo;右上角按钮。在这个例子中，我们将限制一个客户每次只能使用一个优惠券。我们填上必须字段并用POST变量提交数据，最后的url会像这样：http://shop.net/index.php/admin/promo_quote/save/</p>
<pre><code>form_key =&gt; YYhUwcLXX6sezYPY
product_ids =&gt; 
name =&gt; CUSTOMER_1 - 30% Summer discount
description =&gt; 
is_active =&gt; 1
website_ids[] =&gt; 1
customer_group_ids[] =&gt; 3
coupon_type =&gt; 2
coupon_code =&gt; leIYc4g1dbCCOlT1
uses_per_coupon =&gt; 1
uses_per_customer =&gt; 1
from_date =&gt; 
to_date =&gt; 
sort_order =&gt; 
is_rss =&gt; 1
rule[conditions][1][type] =&gt; salesrule/rule_condition_combine
rule[conditions][1][aggregator] =&gt; all
rule[conditions][1][value] =&gt; 1
rule[conditions][1][new_child] =&gt; 
simple_action =&gt; by_percent
discount_amount =&gt; 30
discount_qty =&gt; 0
discount_step =&gt; 
apply_to_shipping =&gt; 0
simple_free_shipping =&gt; 0
stop_rules_processing =&gt; 0
rule[actions][1][type] =&gt; salesrule/rule_condition_product_combine
rule[actions][1][aggregator] =&gt; all
rule[actions][1][value] =&gt; 1
rule[actions][1][new_child] =&gt; 
store_labels[0] =&gt; 
store_labels[1] =&gt; 
</code></pre>
<p>现在，如果我们研究http://shop.net/index.php/admin/promo_quote/save/ 后面的Mage_Adminhtml_Promo_QuoteController -&gt; saveAction()，我们可以看到规则的创建：</p>
<pre><code>$data = array(
    'product_ids' =&gt; null,
    'name' =&gt; sprintf('AUTO_GENERATION CUSTOMER_%s - 30%% Summer discount', Mage::getSingleton('customer/session')-&gt;getCustomerId()),
    'description' =&gt; null,
    'is_active' =&gt; 1,
    'website_ids' =&gt; array(1),
    'customer_group_ids' =&gt; array(1),
    'coupon_type' =&gt; 2,
    'coupon_code' =&gt; Mage::helper('core')-&gt;getRandomString(16),
    'uses_per_coupon' =&gt; 1,
    'uses_per_customer' =&gt; 1,
    'from_date' =&gt; null,
    'to_date' =&gt; null,
    'sort_order' =&gt; null,
    'is_rss' =&gt; 1,
    'rule' =&gt; array(
        'conditions' =&gt; array(
            array(
                'type' =&gt; 'salesrule/rule_condition_combine',
                'aggregator' =&gt; 'all',
                'value' =&gt; 1,
                'new_child' =&gt; null
            )
        )
    ),
    'simple_action' =&gt; 'by_percent',
    'discount_amount' =&gt; 30,
    'discount_qty' =&gt; 0,
    'discount_step' =&gt; null,
    'apply_to_shipping' =&gt; 0,
    'simple_free_shipping' =&gt; 0,
    'stop_rules_processing' =&gt; 0,
    'rule' =&gt; array(
        'actions' =&gt; array(
            array(
                'type' =&gt; 'salesrule/rule_condition_product_combine',
                'aggregator' =&gt; 'all',
                'value' =&gt; 1,
                'new_child' =&gt; null
            )
        )
    ),
    'store_labels' =&gt; array('30% Summer discount')
);
 
$model = Mage::getModel('salesrule/rule');
$data = $this-&gt;_filterDates($data, array('from_date', 'to_date'));
 
$validateResult = $model-&gt;validateData(new Varien_Object($data));
 
if ($validateResult == true) {
 
    if (isset($data['simple_action']) &amp;&amp; $data['simple_action'] == 'by_percent'
            &amp;&amp; isset($data['discount_amount'])) {
        $data['discount_amount'] = min(100, $data['discount_amount']);
    }
 
    if (isset($data['rule']['conditions'])) {
        $data['conditions'] = $data['rule']['conditions'];
    }
 
    if (isset($data['rule']['actions'])) {
        $data['actions'] = $data['rule']['actions'];
    }
 
    unset($data['rule']);
 
    $model-&gt;loadPost($data);
 
    $model-&gt;save();
}
</code></pre>
<p>上面涵盖了&ldquo;create&rdquo;部分，现在让我们转到应用部分。想法是：在执行chechout之前以编程的方式来应用优惠券。如果我们在像http://shop.net/checkout/cart/这样的url里应用优惠券，表单可能提交数据到http://shop.net/checkout/cart/couponPost/的controller动作。</p>
<p>提交数据非常简单：</p>
<pre><code>remove =&gt; 0
coupon_code =&gt; da4K53cGuhNoTc10
</code></pre>
<p>现在，让我们看看http://shop.net/checkout/cart/couponPost/后面的controller动作。我们要看得更远点，我们将先寻找之前我们创建的特殊规则名。当筛选出特殊的数据check等等时。你留下类似&ldquo;apply Shopping Cart Price Rule&rdquo;代码的东西。</p>
<pre><code>/* START This part is my extra, just to load our coupon for this specific customer */
$model = Mage::getModel('salesrule/rule')
        -&gt;getCollection()
        -&gt;addFieldToFilter('name', array('eq'=&gt;sprintf('AUTO_GENERATION CUSTOMER_%s - 30%% Summer discount', Mage::getSingleton

('customer/session')-&gt;getCustomerId())))
        -&gt;getFirstItem();
 
$couponCode = $model-&gt;getCouponCode();
/* END This part is my extra, just to load our coupon for this specific customer */
 
Mage::getSingleton('checkout/cart')
    -&gt;getQuote()
    -&gt;getShippingAddress()
    -&gt;setCollectShippingRates(true);
 
Mage::getSingleton('checkout/cart')
    -&gt;getQuote()
    -&gt;setCouponCode(strlen($couponCode) ? $couponCode : '')
    -&gt;collectTotals()
    -&gt;save();
</code></pre>
<p>现在我们需要做的就是这个代码转移到合适的位置，像事件观察。最后一旦客户结账完成，我们就用一个简单的代码删除这个规则。</p>
<pre><code>$model = Mage::getModel('salesrule/rule')
        -&gt;getCollection()
        -&gt;addFieldToFilter('name', array('eq'=&gt;sprintf('AUTO_GENERATION CUSTOMER_%s - 30%% Summer discount', Mage::getSingleton('customer/session')-&gt;getCustomerId())))
        -&gt;getFirstItem();
 
$model-&gt;delete();
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 11 Oct 2015 15:44:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento前台隐藏送货方式，但在后台保留]]></title>
      <link>https://www.360magento.com/blog/hide-shipping-method/</link>
      <description><![CDATA[<p>对于你们中的某些人，这可能是个惊喜，但是Magento不支持在前台禁止Magento方法但在后台保留。你也许可以做些调整配置来达到效果，但那不是100%正确的。虽然Magento支持&ldquo;global/website/store&rdquo;设置，在全球和网站级别，运输方法被打开或者关闭。在商店级别，你可以简单的编辑运输方式的title和其它东西，但你不能打开/关闭运输方式。</p>
<p>现在，想像下你Magento系统里只有一个网站，如果你在后台&ldquo;Sales &gt; Orders&rdquo;点击&ldquo;Create New Order&rdquo;按钮。下面你将看到&ldquo;please select a customer&rdquo;来选择你想要创建订单的客户。但当你的Magento系统中有两个或更多网站时，你在后台&ldquo;Sales &gt; Orders&rdquo;点击&ldquo;Create New Order&rdquo;按钮，下一个出来的就是&ldquo;please select a website&rdquo; ，之后才会看到&ldquo;please select a customer&rdquo;。这意味着Magento使用默认的网站或者你选择的网站来创建用户订单。无论哪种方式，它都从网站读取配置和运输数据。这意味着这种设置没办法在后台只显示某某运输方式&hellip;&hellip;</p>
<p>我们如何绕过这点？简单，只需要重写Mage_Shipping_Model_Config和Mage_Sales_Model_Quote_Address。注意，这不一定是最好或者最优的方法，但却是一个可行的方法。</p>
<p><strong>app/code/local/Mycompany/Myextension/etc/config.xml</strong></p>
<pre><code>&lt;models&gt;
    &lt;shipping&gt;
        &lt;rewrite&gt;
            &lt;config&gt;Mycompany_Myextension_Model_Shipping_Config&lt;/config&gt;
        &lt;/rewrite&gt;                
    &lt;/shipping&gt;
    &lt;sales&gt;
        &lt;rewrite&gt;
            &lt;quote_address&gt;Mycompany_Myextension_Model_Sales_Quote_Address&lt;/quote_address&gt;
        &lt;/rewrite&gt;
    &lt;/sales&gt;
&lt;/models&gt;
</code></pre>
<p><strong>app/code/local/Mycompany/Myextension/Model/Adminhtml/System/Config/Source/Shipping/Methods.php</strong></p>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Model_Adminhtml_System_Config_Source_Shipping_Methods 
{
    protected $_options;
 
    public function toOptionArray()
    {
        $carriers = Mage::getSingleton('shipping/config')-&gt;getAllCarriers();
 
        $carriersActive = Mage::getSingleton('shipping/config')-&gt;getActiveCarriers();
        $carriersActive = array_keys($carriersActive);
 
        if (!$this-&gt;_options) {
            foreach ($carriers as $carrier) {
                $carrierCode = $carrier-&gt;getId();
                $carrierTitle = Mage::getStoreConfig('carriers/'.$carrierCode.'/title', Mage::app()-&gt;getStore()-&gt;getId());
                $carrierTitle = trim($carrierTitle);
 
                if (empty($carrierTitle)) {
                    continue;
                }
 
                if (in_array($carrierCode, $carriersActive)) {
                    $carrierTitle = sprintf('%s (currently active)', $carrierTitle);
                } else {
                    $carrierTitle = sprintf('%s (currently inactive)', $carrierTitle);
                }
 
                $this-&gt;_options[] = array('value'=&gt;$carrierCode, 'label'=&gt;$carrierTitle);
            }
        }
 
        $options = $this-&gt;_options;
 
        array_unshift($options, array('value'=&gt;'', 'label'=&gt; ''));
 
        return $options;
    }
}
</code></pre>
<p>这个文件被systemxml的&ldquo;source_model&rdquo;定义调用</p>
<pre><code>&lt;fields&gt;
    &lt;frontend_hidden_methods&gt;
        &lt;label&gt;Hide Shipping Methods on Frontend&lt;/label&gt;
        &lt;comment&gt;<![CDATA[If a shipping method has been enabled under its settings, you can choose to hide it on the frontend by selecting it here from the list. This way, the shipping method would be available from the admin area but not from the frontend.]]]]><![CDATA[>&lt;/comment&gt;
        &lt;frontend_type&gt;multiselect&lt;/frontend_type&gt;
        &lt;source_model&gt;mycompany_myextension/adminhtml_system_config_source_shipping_methods&lt;/source_model&gt;
        &lt;sort_order&gt;2&lt;/sort_order&gt;
        &lt;show_in_default&gt;1&lt;/show_in_default&gt;
        &lt;show_in_website&gt;1&lt;/show_in_website&gt;
        &lt;show_in_store&gt;1&lt;/show_in_store&gt;
    &lt;/frontend_hidden_methods&gt;
&lt;/fields&gt;
</code></pre>
<p>注意！上面的system.xml只是部分的，只用于实际字段的配置定义。</p>
<p><strong>app/code/local/Mycompany/Myextension/Helper/Data.php</strong></p>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Helper_Data extends Mage_Core_Helper_Abstract
{
    const CONFIG_PATH_HIDE_FRONTEND_SHIPPING_METHODS = 'some-path-to-system-xml-field';
 
    public function getHiddenFrontendShippingMethods()
    {
        $methods = Mage::getStoreConfig(self::CONFIG_PATH_HIDE_FRONTEND_SHIPPING_METHODS);
        $methods = explode(',', $methods);
 
        return $methods;
    }
}
</code></pre>
<p><strong>app/code/local/Mycompany/Myextension/Model/Shipping/Config.php</strong></p>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Model_Shipping_Config extends Mage_Shipping_Model_Config
{
    public function getActiveCarriers($store = null)
    {
        $carriers = parent::getActiveCarriers($store);
 
        if (Mage::getDesign()-&gt;getArea() === Mage_Core_Model_App_Area::AREA_FRONTEND) {
 
            $carriersCodes = array_keys($carriers);
            $hiddenShippingMethods = Mage::helper('mycompany_myextension')-&gt;getHiddenFrontendShippingMethods();
 
            foreach ($carriersCodes as $carriersCode) {
                if (in_array($carriersCode, $hiddenShippingMethods)) {
                    unset($carriers[$carriersCode]);
                }
            }            
        }
 
        return $carriers;
    }
}
</code></pre>
<p><strong>app/code/local/Mycompany/Myextension/Model/Sales/Quote/Address.php</strong></p>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Model_Sales_Quote_Address extends Mage_Sales_Model_Quote_Address
{
    public function getShippingRatesCollection()
    {
        parent::getShippingRatesCollection();
 
        $hiddenFrontendShippingMethods = Mage::helper('mycompany_myextension')-&gt;getHiddenFrontendShippingMethods();
 
        $removeRates = array();
 
        foreach ($this-&gt;_rates as $key =&gt; $rate) {
            if (in_array($rate-&gt;getCarrier(), $hiddenFrontendShippingMethods)) {
                $removeRates[] = $key;
            }   
        }
 
        foreach ($removeRates as $key) {
            $this-&gt;_rates-&gt;removeItemByKey($key);
        }
 
        return $this-&gt;_rates;
    }
}
</code></pre>
<p>基本上就是这样了。现在你的后台里有了多选框来选择特定的方法在前台隐藏后台保留。记住，运输方式必须是开启的，不要和启用/禁止&ldquo;hide on frontend&rdquo;相混淆。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 11 Oct 2015 15:39:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中自定义路由器]]></title>
      <link>https://www.360magento.com/blog/custom-router-magento/</link>
      <description><![CDATA[<p>当我们想要分开同一路由的一些业务逻辑而又不想重定向到控制器里的其它路由时，创建自定义路由器是非常有的。</p>
<p>为什么我们不为不同的逻辑创建分开的独立的路由呢？</p>
<p>我来稍微解释下：我结合一个我们项目中的OneStepCheckout插件（已经重写了Core Checkout路由）来谈下。我需要重写路由，根据URL中的字段将它们分到两个不同的控制器中。我发现最好的方法就是创建一个新的路由器重定向到由字段决定的不同控制器。</p>
<p>在&ldquo;&hellip;/app/code/local/Mynamespace/Myextension/etc/config.xml&rdquo;创建我们自己的路由器</p>
<pre><code>&lt;default&gt;
    &lt;web&gt;
      &lt;routers&gt;
         &lt;myextension_myrouter&gt;
             &lt;area&gt;frontend&lt;/area&gt;
             &lt;class&gt;Mynamespace_Myextension_Controller_Router&lt;/class&gt;
         &lt;/myextension_myrouter&gt;
     &lt;/routers&gt;
    &lt;/web&gt;
   &lt;/default&gt;
 &lt;/stores&gt;
</code></pre>
<p>在 &ldquo;&hellip;/app/code/local/Mynamespace/Myextension&rdquo;新建Controller文件夹，在文件夹里新建Mynamespace_Myextension_Controller_Router.php文件：</p>
<pre><code>&lt;?php
//Mynamespace_Myextension_Controller_Router.php
 
/**
 * Router for deciding to go on party checkout or regular onestepcheckout
 */
class Mynemaspace_Myextension_Controller_Router extends 

Mage_Core_Controller_Varien_Router_Standard {
 
 
}
?&gt;
</code></pre>
<p>拷贝Mage_Core_Controller_Varien_Router_Standard.php中对应的方法到我们的类，进行修改：</p>
<pre><code>/**
     * Match the request
     *
     * @param Zend_Controller_Request_Http $request
     * @return boolean
     */
    public function match(Zend_Controller_Request_Http $request)
    {
        //checking before even try to find out that current module
        //should use this router
        if (!$this-&gt;_beforeModuleMatch()) {
            return false;
        }
 
        $this-&gt;fetchDefault();
 
        $front = $this-&gt;getFront();
        $path = trim($request-&gt;getPathInfo(), '/');
 
        if ($path) {
            $p = explode('/', $path);
        } else {
            $p = explode('/', $this-&gt;_getDefaultPath());
        }
 
        // get module name
        if ($request-&gt;getModuleName()) {
            $module = $request-&gt;getModuleName();
        } else {
            if (!empty($p[0])) {
                $module = $p[0];
            } else {
                $module = $this-&gt;getFront()-&gt;getDefault('module');
                $request-&gt;setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, '');
            }
        }
        if (!$module) {
            if (Mage::app()-&gt;getStore()-&gt;isAdmin()) {
                $module = 'admin';
            } else {
                return false;
            }
        }
 
        /**
         * Searching router args by module name from route using it as key
         */
        $modules = $this-&gt;getModuleByFrontName($module);
 
        if ($modules === false) {
            return false;
        }
 
        //checkings after we foundout that this router should be used for current module
        if (!$this-&gt;_afterModuleMatch()) {
            return false;
        }
 
        /**
         * Going through modules to find appropriate controller
         */
        $found = false;
        foreach ($modules as $realModule) {
            $request-&gt;setRouteName($this-&gt;getRouteByFrontName($module));
 
            // get controller name
            if ($request-&gt;getControllerName()) {
                $controller = $request-&gt;getControllerName();
            } else {
                if (!empty($p[1])) {
                    $controller = $p[1];
                } else {
                    $controller = $front-&gt;getDefault('controller');
                    $request-&gt;setAlias(
                        Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
                        ltrim($request-&gt;getOriginalPathInfo(), '/')
                    );
                }
            }
 
            // get action name
            if (empty($action)) {
                if ($request-&gt;getActionName()) {
                    $action = $request-&gt;getActionName();
                } else {
                    $action = !empty($p[2]) ? $p[2] : $front-&gt;getDefault('action');
                }
            }
 
            //checking if this place should be secure
            $this-&gt;_checkShouldBeSecure($request, '/'.$module.'/'.$controller.'/'.$action);
 
            $controllerClassName = $this-&gt;_validateControllerClassName($realModule, $controller);
            if (!$controllerClassName) {
                continue;
            }
 
            // instantiate controller class
            $controllerInstance = Mage::getControllerInstance($controllerClassName, $request, 

$front-&gt;getResponse());
 
            if (!$controllerInstance-&gt;hasAction($action)) {
                continue;
            }
 
            $found = true;
            break;
        }
 
        /**
         * if we did not found any siutibul
         */
        if (!$found) {
            if ($this-&gt;_noRouteShouldBeApplied()) {
                $controller = 'index';
                $action = 'noroute';
 
                $controllerClassName = $this-&gt;_validateControllerClassName($realModule, 

$controller);
                if (!$controllerClassName) {
                    return false;
                }
 
                // instantiate controller class
                $controllerInstance = Mage::getControllerInstance($controllerClassName, $request,
                    $front-&gt;getResponse());
 
                if (!$controllerInstance-&gt;hasAction($action)) {
                    return false;
                }
            } else {
                return false;
            }
        }
 
        // set values only after all the checks are done
        $request-&gt;setModuleName($module);
        $request-&gt;setControllerName($controller);
        $request-&gt;setActionName($action);
        $request-&gt;setControllerModule($realModule);
 
        // set parameters from pathinfo
        for ($i = 3, $l = sizeof($p); $i &lt; $l; $i += 2) {
            $request-&gt;setParam($p[$i], isset($p[$i+1]) ? urldecode($p[$i+1]) : '');
        }
 
        // dispatch action
        $request-&gt;setDispatched(true);
        $controllerInstance-&gt;dispatch($action);
 
        return true;
    }
</code></pre>
<p>例如，现在我想重定向路由到&ldquo;Party&rdquo;控制器。我们可以给控制器名添加前缀。一般控制器是：Mynamespace/Myextension/controllers/Somecontrollername.php，&ldquo;Party&rdquo;控制器就是：Mynamespace/Myextension/controllers/Party/Somecontrollername.php。要实现这个，那么我们需要在上面代码的57行到62行之间添加些代码：</p>
<pre><code>$party_prefix = '';
 
        if ($this-&gt;isPartyOrder($request)) {
            foreach ($modules as $key =&gt; $realModule) {
                $modules[$key].='_Party';
            }
 
            $party_prefix = '_party';
        }
</code></pre>
<p>当然，我们的isParty方法是这样的：</p>
<pre><code>..
    /**
     * Determine if order is "Party order"
     * @param Mage_Core_Controller_Request_Http $request
     * @return boolean
     */
    private function isPartyOrder($request) {
 
        if (isset($_SESSION['is_party_checkout']) &amp;&amp; $_SESSION['is_party_checkout']) {
            return true;
        }
 
        $pathInfo = $request-&gt;getPathInfo();
 
        if (stristr($pathInfo, 'onestepcheckout/index/index')) {
            $params = Mage::app()-&gt;getRequest()-&gt;getParams();
            if (isset($params['id'])) {
                return true;
            }
        }
 
        return false;
    }
..
</code></pre>
<p>这里，我们检查Party是否在session或者URL的GET参数里。</p>
<p>下一步，让我们修改一个将被layout.xml文件使用的路由名，替换这段代码</p>
<pre><code>/**
         * Going through modules to find appropriate controller
         */
        $found = false;
        foreach ($modules as $realModule) {
            $request-&gt;setRouteName($this-&gt;getRouteByFrontName($module));
</code></pre>
<p>为</p>
<pre><code>//...
        /**
         * Going through modules to find appropriate controller
         */
        $found = false;
        foreach ($modules as $realModule) {
            $request-&gt;setRouteName('ourextension_' . $this-&gt;getRouteByFrontName($module) . 

$party_prefix);
        ...
//...
</code></pre>
<p>现在我们可以在布局xml文件里定义布局句柄来将&ldquo;Party&rdquo; 和其它路由区分开。</p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;layout version="0.1.0"&gt;
    &lt;&lt;ourmodule_controllername_actionname&gt;
      &lt;block ....... some layout updates ... etc
    &lt;/ourmodule_controllername_actionname&gt;
 
   &lt;ourmodule_party_controllername_actionname&gt;
      &lt;block ....... some different layout updates ... etc
   &lt;/ourmodule_party_controllername_actionname&gt;
&lt;/layout&gt;
</code></pre>
<p>这样我们就可以单独实现两种完全不同的布局。这只是个简单的例子来创建和修改路由器。你可以定制自己的路由器来实现你的需求。</p>
<p>下面让我们看看onestepcheckout的config.xml文件，看它的路由器是如何设置模块的：</p>
<pre><code>&lt;frontend&gt;
        &lt;routers&gt;
            &lt;onestepcheckout&gt;
                &lt;use&gt;myextension_myrouter&lt;/use&gt;
                &lt;args&gt;
                   &lt;modules&gt;
                        &lt;Mynamespace_Mymodule before="Idev_OneStepCheckout"&gt;Mynamespace_Mymodule_Onestepcheckout&lt;/Mynamespace_Mymodule&gt;
                    &lt;/modules&gt;
                &lt;/args&gt;
            &lt;/onestepcheckout&gt;
        &lt;/routers&gt;
</code></pre>
<p>Onestepcheckout模块重写一些Magento核心路由，这样当客户访问checkout/onepage地址时，他们会得到 onestepcheckout地址。</p>
<p>当我们创建像上面的自定义路由器时，客户仍然会访问onestepcheckout路由，但会根据isParty的判断结果来执行不同的控制器。</p>
<p>由于同样的URL分为Party和regular支付，我们在路由里为每个支付状态(Party and regular) 设置自定义路由名而更新xml句柄。</p>
<p>虽然第一次读起来可能会有些乱，但我希望在某些人的项目，插件和定制中起到作用。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 10 Oct 2015 13:11:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ 在Magento的销售网格中添加“用户组”列]]></title>
      <link>https://www.360magento.com/blog/customer-group-sales/</link>
      <description><![CDATA[<p>令人惊讶的是Magento后台的&ldquo;Sales &gt; Orders&rdquo;和&ldquo;Sales &gt; Orders &gt; Create New Order&rdquo; 网格里没有&ldquo;用户组&rdquo;这一列。为什么我们需要这一列呢？也许你需要在网格中列出/筛选&ldquo;经销商&rdquo;组支付的订单。也许你能够筛选 &ldquo;Sales &gt; Orders &gt; Create New Order&rdquo; 网格通过在创建订单前的用户组来查看&ldquo;经销商&rdquo;客户数量。</p>
<p>默认情况下&ldquo;Sales &gt; Orders&rdquo; 网格使用&ldquo;sales_flat_order_grid&rdquo;进行渲染。这个表基本上是&ldquo;sales_flat_order&rdquo;表的冗余子组。令人惊讶的是&ldquo;sales_flat_order&rdquo; 表里有&ldquo;customer_group_id&rdquo;列，而&ldquo;sales_flat_order_grid&rdquo;表中没有。所以我们第一步就是要添加&ldquo;customer_group_id&rdquo;列到&ldquo;sales_flat_order_grid&rdquo;表中。</p>
<p>我们通过一个类似这样的简单升级脚本来实现：</p>
<pre><code>$installer-&gt;getConnection()
        -&gt;addColumn($installer-&gt;getTable('sales/order_grid'), 'customer_group_id', array(
            'TYPE' =&gt; Varien_Db_Ddl_Table::TYPE_SMALLINT,
            'NULLABLE'  =&gt; false,
            'DEFAULT'   =&gt; '0',
            'COMMENT' =&gt; 'Customer Group'
        ));
</code></pre>
<p>如果这个安装/升级脚本执行成功，我们就会在&ldquo;sales_flat_order_grid&rdquo;表中看到&ldquo;customer_group_id&rdquo;列。注意，Magento会在新订单保存时自动填充&ldquo;sales_flat_order_grid.customer_group_id&rdquo;中的数据。</p>
<p>然后我们将重写Mage_Adminhtml_Block_Sales_Order_Grid和Mage_Adminhtml_Block_Sales_Order_Create_Customer_Grid。但只做些小的修改来让我们的&ldquo;Customer Group&rdquo;显示。</p>
<p>我们通过config.xml来添加合适的入口：</p>
<pre><code>&lt;global&gt;
    &lt;blocks&gt;
        &lt;adminhtml&gt;
            &lt;rewrite&gt;      &lt;sales_order_create_customer_grid&gt;Mycompany_Myextension_Block_Adminhtml_Sales_Order_Create_Customer_Grid&lt;/sales_order_create_customer_grid&gt;
                &lt;sales_order_grid&gt;Mycompany_Myextension_Block_Adminhtml_Sales_Order_Grid&lt;/sales_order_grid&gt;
            &lt;/rewrite&gt;
        &lt;/adminhtml&gt;
    &lt;/blocks&gt;
&lt;/global&gt;
</code></pre>
<p>最后，添加重写模块</p>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid 
{
    protected function _prepareColumns()
    {
        $groups = Mage::getResourceModel('customer/group_collection')
            -&gt;addFieldToFilter('customer_group_id', array('gt'=&gt; 0))
            -&gt;load()
            -&gt;toOptionHash();
 
        $this-&gt;addColumn('customer_group_id', array(
            'header'    =&gt;  Mage::helper('customer')-&gt;__('Customer Group'),
            'width'     =&gt;  '100',
            'index'     =&gt;  'customer_group_id',
            'type'      =&gt;  'options',
            'options'   =&gt;  $groups,
        ));
 
        $this-&gt;addColumnsOrder('customer_group_id', 'shipping_name');
 
        return parent::_prepareColumns();
    }
}
</code></pre>
<pre><code>&lt;?php
 
class Mycompany_Myextension_Block_Adminhtml_Sales_Order_Create_Customer_Grid extends 

Mage_Adminhtml_Block_Sales_Order_Create_Customer_Grid
{
    protected function _prepareColumns()
    {
        $groups = Mage::getResourceModel('customer/group_collection')
            -&gt;addFieldToFilter('customer_group_id', array('gt'=&gt; 0))
            -&gt;load()
            -&gt;toOptionHash();
 
        $this-&gt;addColumn('group', array(
            'header'    =&gt;  Mage::helper('customer')-&gt;__('Group'),
            'width'     =&gt;  '100',
            'index'     =&gt;  'group_id',
            'type'      =&gt;  'options',
            'options'   =&gt;  $groups,
        ));
 
        $this-&gt;addColumnsOrder('group', 'email');
 
        return parent::_prepareColumns();
    }
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 10 Oct 2015 12:52:38 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中创建简单的社交链接]]></title>
      <link>https://www.360magento.com/blog/simple-social-sharing/</link>
      <description><![CDATA[<p>有很多方法来添加社交共享按钮到你的Magento商店。你可以选择几种不同的免费或者付费的插件，创建自己的，使用AddThis服务或者从官方粘贴脚本（像 Facebook Like）。然而，在设置样式是会收到一些限制。如果你需要一个简单的解决方法，那么这篇文章适用于你。</p>
<p>我将指出一些你应该知道的官方按钮潜在问题。首先，你生成的每个按钮有一些JavaScript代码。这些代码在远程服务器上，每次用户打开一个页面时被读取。虽然这些代码的读取是异步的，但是当你有很多这些代码时会影响页面读取速度。另一方面，如果这些按钮有些复杂（或者写得不好的）JavaScript可能会弄乱你的商店。有一次我用AddThis插件在Magento产品页面添加社交按钮时，可配置产品因为Twitter按钮而失效，总价不更新，&ldquo;添加产品到购物车&rdquo;无效。我记不清具体的报错JavaScript代码但是我认为和全局变量名或者类似的东西相关。重点是，这些按钮会产生一些问题，让你话费不必要的时间去调试。我已经记不清多少次因为Facebook Like按钮失效而让我绝望了。</p>
<h1>把事情简单化</h1>
<p>我总是让喜欢让事情简单地工作。每一个社交网站都有一个简单的接受一些基础参数的&ldquo;共享地址&rdquo;，允许你分享任何URL。因为这是一个简单的URL，你能以你喜欢的风格做一个链接或者任何类型的按钮。另外一个好处就是，使用简单&ldquo;共享地址&rdquo;是没有外部脚本的。</p>
<p>下面是一些流行的社交网站共享URL：</p>
<ul>
<li><strong>Google Plus:</strong> https://plus.google.com/share?url=[URL TO SHARE]</li>
<li><strong>Facebook: </strong>https://www.facebook.com/sharer/sharer.php?u=[URL TO SHARE]&amp;t=[TITLE]</li>
<li><strong>Twitter: </strong>http://twitter.com/home/?status=[TITLE] ([URL TO SHARE])</li>
<li><strong>Pinterest: </strong>https://pinterest.com/pin/create/button/?url=[LINKBACK URL]&amp;media=[IMAGE TO SHARE]&amp; description=[DESCRIPTION]</li>
</ul>
<h1>实现</h1>
<p>如果你关注可用性，那么利用打开新窗口的方式来远离简单链接元素并不是一个完美的解决方案。最简单的方式就是以弹窗的方式打开链接。如果你的网站里有些这样的JavaScript模式，你可以使用它们。但为了简单起见，我将使用默认的Magento弹出窗口。</p>
<p>社交按钮最合理的位置当然是产品页面了，所以我们以此为例。我将添加Google Plus, Facebook, Twitter 和Pinterest按钮，但我不确定你能轻易地添加其它社交网站。为了与文章标题一致，我将添加简单的链接而不是按钮，但是你可以用一些基础的CSS来创建按钮。</p>
<p>跟着下面这些简单的步骤你就能轻易地拥有社交共享链接。</p>
<p>打开<strong>app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/catalog/product/view.phtml</strong>找到你要添加链接/按钮的位置，添加下面的代码：</p>
<pre><code>&lt;?php $productName = $_helper-&gt;productAttribute($_product, $_product-&gt;getName(), 'name'); ?&gt;
&lt;?php $productUrl = $_helper-&gt;productAttribute($_product, $_product-&gt;getProductUrl(), 'product_url'); ?&gt;
&lt;?php $productImage = $_product-&gt;getImageUrl() ?&gt;
</code></pre>
<p>我们将使用这些变量来设置URL，标题，描述或者其它需要的字段。在我们刚才添加的代码后面添加：</p>
<pre><code>// Google Plus
&lt;a href="javascript:popWin('https://plus.google.com/share?url=&lt;?php echo urlencode($productUrl); ?&gt;', 'google', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="&lt;?php echo $this-&gt;__('Share on Google Plus') ?&gt;"&gt;Google Plus&lt;/a&gt;
// Facebook
&lt;a href="javascript:popWin('https://www.facebook.com/sharer/sharer.php?u=&lt;?php echo urlencode($productUrl); ?&gt;&amp;t=&lt;?php echo urlencode($productName); ?&gt;', 'facebook', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="&lt;?php echo $this-&gt;__('Share on Facebook') ?&gt;"&gt;Facebook&lt;/a&gt;
// Twitter
&lt;a href="javascript:popWin('http://twitter.com/home/?status=&lt;?php echo urlencode($productName . ' (' . $productUrl . ')'); ?&gt;', 'twitter', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="&lt;?php echo $this-&gt;__('Tweet') ?&gt;"&gt;Twitter&lt;/a&gt;
// Pinterest
&lt;a href="javascript:popWin('https://pinterest.com/pin/create/button/?url=&lt;?php echo urlencode($productUrl); ?&gt;&amp;media=&lt;?php echo urlencode($productImage); ?&gt;&amp;description=&lt;?php echo urlencode($productName); ?&gt;', 'pinterest', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="&lt;?php echo $this-&gt;__('Pin it') ?&gt;"&gt;Pinterest&lt;/a&gt;
</code></pre>
<p>尽管所有社交网站都善于提取你共享链接的内容（产品名称，图片，描述&hellip;&hellip;）但尽可能地帮助它们也是很好的做法。最常用的做法就是为你的页面添加meta标签。你有许多不同的方法可用，但是为了简单起见，我将使用OpenGraph，因为Facebook在用它。如果你的页面有些复杂的改变，它将不会正确地提取产品信息。</p>
<p>另一方面，使用分享链接在Google Plus提取产品信息时我没遇到过任何问题。Twitter简单些，因为你只分享了定义的文本。Pinterest要求你指定所有的信息，所以这些站不需要meta标签。</p>
<p>添加OpenGraph meta标签到你的Magento商店非常简单。只要添加下面的代码到<strong>app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/page/html/head.phtml</strong>的最后一个meta标签后面（如果你用Magento默认的head文件就是名为&ldquo;robots&rdquo;meta标签）。</p>
<pre><code>&lt;?php $product = Mage::registry('current_product');
if ($product): ?&gt;
&lt;meta property="og:title" content="&lt;?php echo $product-&gt;getName(); ?&gt;" /&gt;
&lt;meta property="og:type" content="product" /&gt;
&lt;meta property="og:url" content="&lt;?php echo $this-&gt;helper('catalog/product')-&gt;getProductUrl($product); ?&gt;" /&gt;
&lt;meta property="og:image" content="&lt;?php echo $this-&gt;helper('catalog/image')-&gt;init($product, 'image')-&gt;resize(300, 300); ?&gt;" /&gt;
&lt;meta property="og:description" content="&lt;?php echo strip_tags($product-&gt;getShortDescription()); ?&gt;" /&gt;
&lt;meta property="og:site_name" content="&lt;?php echo Mage::app()-&gt;getStore()-&gt;getName() ?&gt;" /&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>我们共享一个产品，所以我们需要在meta标签添加到唯一的产品页面，但head.phtml的每一页上加载。这意味着，我们需要检查，如果当前页面是产品页面，然后才加入我们的meta标签。同时，我们需要得到的产品对象，所以我们可以提取我们需要投入meta标签中的数据。在上面的代码中的前两行会做到这一点。我们创建一个变量$product来获取当前的产品。如果我们在产品页面，这个变量将包含当前产品的对象。如果不是，$product会被设置为false。我用一些标准的meta标签去描述产品，但你可以按需使用更多标签。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 09 Oct 2015 13:13:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[选择一个合适的事件去监听]]></title>
      <link>https://www.360magento.com/blog/right-event-observe/</link>
      <description><![CDATA[<p>当你开发你的Magento模块或者通过事件监听做修改时，选对合适的事件是非常重要的。</p>
<p>一个方法是在你的PHP IDE里搜索Magento核心文件<strong>&ldquo;Mage::dispatchEvent(&ldquo;</strong>，结果大概会出现400处。大部分这些方法调用静态字符串作为事件名称，如：</p>
<pre><code>Mage::dispatchEvent('catalog_product_is_salable_before', array('product' =&gt; $this));</code></pre>
<p>也有些事件的名字是由一些变量串联到静态字符串组成的，如：</p>
<pre><code>Mage::dispatchEvent($this-&gt;_eventPrefix.'_validate_before', array($this-&gt;_eventObject=&gt;$this));</code></pre>
<p>在这种情况下，我们不能确定最终的事件名称。由于Magento不允许我们同时观察超过一个事件，我们要想办法得到一个确定需求的所有事件。</p>
<p>如果我们查看<strong>app/Mage.php</strong>中声明的<strong>Mage::dispatchEvent</strong>，你可以看到以下代码：</p>
<pre><code>public static function dispatchEvent($name, array $data = array())
    {
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()-&gt;dispatchEvent($name, $data);
        #$result = self::registry('events')-&gt;dispatch($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }</code></pre>
<p>我们不能重写Mage类去添加事件名称抓取功能。<strong>Mage::dispatchEvent</strong>方法从<strong>Mage_Core_Model_App</strong>调用<strong>dispatchEvent</strong>方法。我们也不能重写<strong>Mage_Core_Model_App</strong>，因为应用程序对象被直接实例化，而不是从<strong>Mage::getModel</strong>工厂方法。所以，获取指定需求的所有事件名称的唯一方法就是在<strong>Mage::dispatchEvent</strong>中添加一个简单的硬编码行。我们可以加类似这样的东西：</p>
<pre><code>Mage::log($name, null, 'events.log', true);</code></pre>
<p>它记录需求中被调用的每一个事件的名称。<strong>app/Mage.php</strong>里的<strong>dispatchEvent</strong>方法被修改后看起来像是这样的：</p>
<pre><code>public static function dispatchEvent($name, array $data = array())
    {
        // log event name
        Mage::log($name, null, 'events.log', true);
 
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()-&gt;dispatchEvent($name, $data);
        #$result = self::registry('events')-&gt;dispatch($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 09 Oct 2015 13:02:28 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento自动识别性别的插件]]></title>
      <link>https://www.360magento.com/blog/magento-automatic-gender/</link>
      <description><![CDATA[<p>今天我们要为客户创建一个Magento自动识别性别的插件。插件基于Rapleaf的个性化API。Rapleaf公司提供人口统计和消费者个人数据（年龄，性别，婚姻状况，收入等），不能用作商业电子邮件。他们的合作伙伴，一些大（小）型数据公司将数据汇总并绑定到邮箱地址。你可以创建一个免费的Rapleaf账户来获取API。 让我们开始吧。</p>
<h1>Alwayly_Autogender.xml</h1>
<p>首先，我们要在/app/etc/modules文件夹里创建Alwayly_Autogender.xml</p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Autogender&gt;
           &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_Autogender&gt;
   &lt;/modules&gt;
&lt;/config&gt;</code></pre>
<h1>config.xml</h1>
<p>第二步是在 /app/code/local/Alwayly/Autogender/etc文件夹里创建config.xml</p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Autogender&gt;
            &lt;version&gt;0.1.0&lt;/version&gt;
        &lt;/Alwayly_Autogender&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;alwayly_autogender&gt;
                &lt;class&gt;Alwayly_Autogender_Model&lt;/class&gt;
            &lt;/alwayly_autogender&gt;
        &lt;/models&gt;
        &lt;events&gt;
            &lt;customer_register_success&gt;
                &lt;observers&gt;
                    &lt;alwayly_autogender_add_email&gt;
                        &lt;class&gt;alwayly_autogender/observer&lt;/class&gt;
                        &lt;method&gt;getGender&lt;/method&gt;
                    &lt;/alwayly_autogender_add_email&gt;
                &lt;/observers&gt;
            &lt;/customer_register_success&gt;
        &lt;/events&gt;
    &lt;/global&gt;
&lt;/config&gt;</code></pre>
<h1>Observer.php</h1>
<p>最后一步是/app/code/local/Alwayly/Autogender/Model文件夹里创建Observer.php</p>
<pre><code>&lt;?php
 
class Alwayly_Autogender_Model_Observer
{
    public function getGender($observer = null)
    {
        if($observer)
        {
            try
            {
                $customer = $observer-&gt;getCustomer();
 
                $api_key = '... your api key ...';
 
                $client = new Zend_Http_Client();
 
                $client-&gt;setUri('https://personalize.rapleaf.com/v4/dr?api_key=' . $api_key .
                                '&amp;email=' . urlencode($customer-&gt;getEmail()) .
                                '&amp;first=' . urlencode($customer-&gt;getFirstname()) .
                                '&amp;last=' . urlencode($customer-&gt;getLastname())
                );
 
                $client-&gt;setConfig(array('maxredirects' =&gt; 0, 'timeout' =&gt; 2));
 
                $response = $client-&gt;request();
 
                if ($response-&gt;getStatus() &lt; 200 || $response-&gt;getStatus() &gt;= 300)
                {
                    Mage::log(
                        sprintf("Rapleaf query failed. (status: %s), (message: %s)",
                            $response-&gt;getStatus(),
                            strip_tags($response-&gt;getBody())),
                        null,
                        'rapleaf_api.log',
                        false);
                }
                else
                {
                    $data = json_decode($response-&gt;getBody(), true);
                    if(array_key_exists('gender', $data))
                    {
                        $customer-&gt;setGender(
                            Mage::getResourceSingleton('customer/customer')
                                -&gt;getAttribute('gender')
                                -&gt;getSource()
                                -&gt;getOptionId($data['gender'])
                        );
                    }
                }
            }
            catch (Exception $e)
            {
                Mage::log(
                    sprintf("Exception in Rapleaf query. (message: %s)",
                       strip_tags($e-&gt;getMessage())),
                    null,
                    'rapleaf_api.log',
                    false);
            }
        }
    }
}</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 08 Oct 2015 13:16:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[为你的Magento项目创建Windows虚拟主机]]></title>
      <link>https://www.360magento.com/blog/vhosts-for-ymagento/</link>
      <description><![CDATA[<p>这篇文章是为那些准备或者刚刚开始网站开发冒险的初学者而写的。这不是唯一一种管理你本地环境的方式，但是是比较好的一种。</p>
<p>如果长期在一个本地Windows机器上开发Magento项目，你会注意到很严重的性能下降。这是因为Magento是一个有很多小文件和大量数据表/项的巨大系统。例如，最新的Magento CE有11900多个文件，默认有4435个以上的文件夹（不包含SVN文件，如果你必须用它或者没意识到git的优势）。将其乘以一打项目（活跃的和处于支持状态的），你就会有严重的碎片问题。SSD磁盘是不错，但就个人而言，我觉得这并不是一个可靠的解决方案。</p>
<h1>创建Windows虚拟主机</h1>
<p>在一个独立的分区里为你正在开发的Magento项目创建虚拟主机。使用分区还有个好处：在系统故障时有更高的可能性恢复数据。（墨菲定律：没有被版本控制系统跟踪的重要文件会先丢失）。下面是步骤：</p>
<p>1.用你喜欢的分区工具创建一个新的分区。使它的大小比你预估的项目大小大两倍（如果使用SVN就大三倍）。创建一个新文件夹来保留你的Magento项目（例如，X:\yourmagentoproject\）</p>
<p>2.关闭Apache服务并显示Windows隐藏文件。</p>
<p>3.以管理员身份打来你最喜欢的文本编辑工具。记事本就可以完成这个工作。如果你不知道怎么做，即便有管理员权限也不会自动拥有所有文件的编辑权限。使用Windows搜索找到记事本，在右键菜单中选择&ldquo;以管理员身份运行&rdquo;。</p>
<p>4.用文本编辑器打开hosts文件（默认在"Windows\System32\drivers\etc\"），在文件的最后添加新的域名</p>
<pre><code>127.0.0.1 yourmagentoproject.loc</code></pre>
<p>5.打开Apache的主要配置文件httpd.conf。默认在Apache安装目录的conf文件夹内。找到下面一行</p>
<pre><code># This should be changed to whatever you set DocumentRoot to.</code></pre>
<p>这是定义默认文件目录的块。添加下面的代码：</p>
<pre><code>&lt;Directory "X:/yourmagentoproject/"&gt;
   Options Indexes FollowSymLinks
   AllowOverride All
   Order Deny,Allow
   Allow from all

</code></pre>
<p>6.打开Apache虚拟主机配置文件，一般在Apache文件的\extra\httpd-vhosts.conf，在文件最后添加下面的代码：</p>
<pre><code>	DocumentRoot "X:/yourmagentoproject/"
	ServerName yourmagentoproject.loc
	ServerAlias yourmagentoproject.loc
	DirectoryIndex index.php index.html index.htm not-a-file

</code></pre>
<p>如果你想知道&hellip;&hellip;是的，目录索引在虚拟主机文件中被定义。</p>
<h1>移动MySQL数据文件到独立分区</h1>
<p>Magento数据库中有大量的表，每张表都存储在对应的.frm文件放置在一个以数据库命名的文件夹里。你在Magento后台对数据进行的增删改查操作都会跟前端访问日志，统计信息一起保存在数据库中。当一个已经存在的网站不再被需要或是要被替换时，你还得处理客户数据库。那么就有很多的文件管理任务等着你的磁盘来处理。这意味着大量的文件碎片随着时间堆积起来。</p>
<p>将MySQL数据文件移到一个独立分区的步骤：</p>
<p>1.为你的MySQL数据文件创建一个独立的分区。记得要能满足你的数据库大小需求。</p>
<p>2.关闭MySQL服务</p>
<p>3.找到你的MySQL数据文件，默认在你MySQL安装目录的data文件夹里。拷贝整个文件夹到你新分区里。新的路径应该看起来是这样：Y:\data\。打开my.ini文件，添加或者修改下面的代码：</p>
<pre><code>#Path to the database root
datadir="Y:/data/"</code></pre>
<p>以及</p>
<pre><code>#*** INNODB Specific options ***
innodb_data_home_dir="Y:/data/"</code></pre>
<p>4.开启MySQL服务。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 08 Oct 2015 13:07:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[选择Magento的十大理由]]></title>
      <link>https://www.360magento.com/blog/top-10-magento/</link>
      <description><![CDATA[<p>自Magento发布以来，因其作为电商平台展现出的强大受到了开发人员和商人的极大关注。开发人员喜欢它的模块化，因为他们可以利用模块化几乎完成客户的所有需求。商人则喜欢它提供的多种多样的功能。</p>
<p>下面我总结了下，选择Magento的十大理由：</p>
<ol>
<li><strong>SEO友好</strong>：搜索引擎友好，Google站地图，产品，类别和内容的meta信息，等等&hellip;&hellip;</li>
<li><strong>国际化支持</strong>：支持本地化，多货币和税率。支持重音符号和从右到左文字。允许针对某些国家的配置。欧盟增值税ID验证，欧盟cookie通知，等等&hellip;&hellip;</li>
<li><strong>内置大量电商相关功能（相比其它任何PHP开源竞争对手）</strong>：支持多站点和多域名设置。你可以在http://www.magentocommerce.com/images/uploads/magento-feature-list.pdf下载功能列表。</li>
<li><strong>高度模块化设计</strong>：使得前端（布局和模版）和后端（事件，观察者，重写，网格等..）的深度定制成为可能。</li>
<li><strong>Magento专家咨询小组（不是免费服务，但是对于需要的人来说还是很重要的）</strong>：官方培训&amp;专业认证开发：为后端开发人员，前端开发人员和商家等培训。Magento认证工程师，Magento认证高级工程师，Magento认证目录（搜集全球Magento认证工程师）</li>
<li><strong>安全</strong>：Magento高度重视安全并给予高优先级。Magento EE（企业版）更是提供为安全支付桥提供PCI数据安全标准（PCI PA-DSS）。</li>
<li><strong>Magento的连接</strong>：世界上最大的电子商务应用市场。</li>
<li><strong>开源</strong>：让你可以玩转PHP代码。</li>
<li><strong>Web服务API</strong>：内置支持SOAP v1, SOAP v2, XMLRPC，REST with 3-legged OAuth 1.0a.</li>
<li><strong>因为它真的很棒 :)</strong></li>
</ol>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 07 Oct 2015 15:57:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[跟踪Magento“添加产品到购物车”动作]]></title>
      <link>https://www.360magento.com/blog/tracking-magento-addtocart/</link>
      <description><![CDATA[<p>最近，我一直在忙一个关于第三方客户分析和定位服务的插件，考虑替换Google分析。其中一个要被实现的电商追踪功能是&ldquo;添加产品到购物车&rdquo;动作。由于这种追踪服务是使用JavaScript来触发它们的追踪代码，在Magento中何时何地嵌套追踪JavaScript是由我们决定的。有趣的是，&ldquo;添加产品到购物车&rdquo;动作不是你想执行JavaScript就执行的普通页面。</p>
<p>在Magento中，当你点击任何&ldquo;添加产品到购物车&rdquo;页面，通常会以像<strong>http://magentoce1800.loc/index.php/checkout/cart/add/uenc/aHR0&hellip;0bWw,/product/16/form_key/oTSbNJ4ZIUC46W0R/</strong>的链接结束。其中<strong>checkout/cart/add</strong>是最有趣的一部分，由于它指向Mage_Checkout模型，它的CartController和对应的addAction()。第二个有趣的部分是<strong>product/16</strong>，它告诉Magento，ID为16的产品被添加到了购物车。此外，addAction()方法里进行了很多事情。比较重要，需要你记住的是：当Magento中addAction()方法添加产品到购物车的时候，它指向它本身的购物车页面。也就是说，实际的checkout/cart/add页面从不呈现在浏览器，所以你无法在这个页面是执行任何JavaScript。</p>
<p>那么，我们要从哪里开始呢？好了，Magento一个比较炫酷的功能就是定义它的事件/监听系统。如果你仔细想想，每一个控制器动作支持<strong>controller_action_predispatch</strong>事件（定义在<strong>app/code/core/Mage/Core/Controller/Varien/Action.php</strong> 527行左右）。之后一些具体的时间匹配到它的模块前端名，控制器和动作。在这里，解析为前端事件<strong>controller_action_predispatch_checkout_cart_add</strong>。</p>
<p>考虑到这一点，这里有了个通过JavaScript追踪&ldquo;添加产品到购物车&rdquo;行动的简单想法。</p>
<ol>
<li>为定义<strong>controller_action_predispatch_checkout_cart_add</strong>事件定义事件监听方法；</li>
<li>在事件监听方法中，当添加产品到购物车时做个记录。例如<strong>Mage::getModel(&lsquo;core/session&rsquo;)-&gt;setProductToShoppingCart(&hellip;)</strong>这样的东西。</li>
<li>写个布局更新<strong>checkout_cart_index</strong>句柄，读取一个自定义的.phtml模版文件，你可以用core/template或者你自己的模块类来定义块的类型。</li>
<li>在自定义的.phtml文件中使用<strong>Mage::getModel(&lsquo;core/session&rsquo;)-&gt;getProductToShoppingCart()</strong>来生成你的&ldquo;添加产品到购物车&rdquo;追踪点，获取刚刚添加到购物车的产品的信息。在完成这些之后，使用<strong>Mage::getModel(&lsquo;core/session&rsquo;)-&gt;unsProductToShoppingCart()</strong>清除session。</li>
</ol>
<p>下面是代码示例：</p>
<p>第一步中描述的 <strong>app/code/community/Alwayly/Test/etc/config.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Test&gt;
            &lt;version&gt;1.0.0.0&lt;/version&gt;
        &lt;/Alwayly_Test&gt;
    &lt;/modules&gt;
    &lt;&lt;global&gt;
        &lt;models&gt;
            &lt;alwayly_test&gt;
                &lt;class&gt;Alwayly_Test_Model&lt;/class&gt;
            &lt;/alwayly_test&gt;
        &lt;/models&gt;
    &lt;/global&gt;
    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;alwayly_test&gt;
                    &lt;file&gt;alwayly_test.xml&lt;/file&gt;
                &lt;/alwayly_test&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;
        &lt;events&gt;
            &lt;controller_action_predispatch_checkout_cart_add&gt;
                &lt;observers&gt;
                    &lt;alwayly_test_log_cart_add&gt;
                        &lt;class&gt;alwayly_test/observer&lt;/class&gt;
                        &lt;method&gt;logCartAdd&lt;/method&gt;
                    &lt;/alwayly_test_log_cart_add&gt;
                &lt;/observers&gt;
            &lt;/controller_action_predispatch_checkout_cart_add&gt;
        &lt;/events&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>第二步中描述的：<strong>app/code/community/Alwayly/Test/Model/Observer.php</strong></p>
<pre><code>&lt;?php
 
class Alwayly_Test_Model_Observer
{
    public function logCartAdd() {
 
        $product = Mage::getModel('catalog/product')
                        -&gt;load(Mage::app()-&gt;getRequest()-&gt;getParam('product', 0));
 
        if (!$product-&gt;getId()) {
            return;
        }
 
        $categories = $product-&gt;getCategoryIds();
 
        Mage::getModel('core/session')-&gt;setProductToShoppingCart(
            new Varien_Object(array(
                'id' =&gt; $product-&gt;getId(),
                'qty' =&gt; Mage::app()-&gt;getRequest()-&gt;getParam('qty', 1),
                'name' =&gt; $product-&gt;getName(),
                'price' =&gt; $product-&gt;getPrice(),
                'category_name' =&gt; Mage::getModel('catalog/category')-&gt;load($categories[0])-&gt;getName(),
            ))
        );
    }
}
</code></pre>
<p>很显然，上面的代码比较基础。不包括Magento各种产品类型，因为它直接从产品模块获取产品价格。所以，当有捆绑或者批量销售产品时，你需要做一点扩展。你可以用产品id引到产品表，以此来找到子产品。</p>
<p>第三步所描述的：<strong>app/design/frontend/default/default/layout/alwayly_test.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;layout version="0.1.0"&gt;
    &lt;checkout_cart_index&gt;
        &lt;reference name="before_body_end"&gt;
            &lt;block type="alwayly_test/event_checkout_cart_index" name="alwayly_test_event_checkout_cart_index" template="alwayly/test/event/checkout/cart/index.phtml" /&gt;
        &lt;/reference&gt;
    &lt;/checkout_cart_index&gt;
&lt;/layout&gt;</code></pre>
<p>第四部所描述的：<strong>app/design/frontend/default/default/template/alwayly/test/event/checkout/cart/index.phtml</strong></p>
<pre><code>&lt;?php $_product = Mage::getModel('core/session')-&gt;getProductToShoppingCart() ?&gt;
&lt;<!--?php if ($_product && $_product--->getId()): ?&gt;
    &lt;&lt;script type="text/javascript"&gt;
        //Some 3rd party JS tracking code
    &lt;/script&gt;
    &lt;?php Mage::getModel('core/session')-&gt;unsProductToShoppingCart(); ?&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>这就是一个简单的为你的分析服务追踪&ldquo;添加产品到购物车&rdquo;动作的方式。</p>
<p>好处是：你不需要更改已有的.phtml文件增加JS点击事件或者类似的事情。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 07 Oct 2015 15:51:59 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento允许的最大订单金额]]></title>
      <link>https://www.360magento.com/blog/magento-maximumr-amount/</link>
      <description><![CDATA[<p>最近我在做的一个项目中，有一个小的防欺诈功能。这个功能就是允许的最大订单金额。也许一开始听起来很奇怪，怎么会有人想限制订单的最大金额呢？鉴于该商店销售产品的性质（这里不能透露），这个功能要求似乎很合理。如果你看下Magento后台管理，你会在<strong>System &gt; Configuration &gt; Sales &gt; Sales &gt; Minimum Order Amount</strong>看到与它相反的功能。</p>
<p>最小订单金额功能和我们最大订单金额略有不同。最大的区别就是，你无法添加超出金额的商品到购物车。那么我们该如何做呢？答案很简单事件/监听（event/observer）系统。我们所要做的是找到相对应的时间并挂钩一个观测者。经过仔细追查，一些尝试和失败以后，最合乎逻辑的事件似乎是：sales_quote_save_before。此外，只实现最大订单金额功能在前端是有道理的，因为我们不希望限制管理员创建订单。考虑到这一点，我们只需要添加以下代码到我们扩展的config.xml文件中：</p>
<pre><code>&lt;config&gt;
    &lt;frontend&gt;
        &lt;events&gt;
            &lt;sales_quote_save_before&gt; 
                &lt;observers&gt;
                    &lt;alwayly_maxorderamount_enforceSingleOrderLimit&gt;
                        &lt;class&gt;alwayly_maxorderamount/observer&lt;/class&gt;
                        &lt;method&gt;enforceSingleOrderLimit&lt;/method&gt;
                    &lt;/alwayly_maxorderamount_enforceSingleOrderLimit&gt;
               &lt;/observers&gt;
            &lt;/sales_quote_save_before&gt;
        &lt;/events&gt;
    &lt;/frontend&gt;
&lt;config&gt;
</code></pre>
<p>创建我们<strong>Observer.php</strong>，在类中添加逻辑：</p>
<pre><code>class Alwayly_MaxOrderAmount_Model_Observer
{
    private $_helper;
 
    public function __construct() 
    {
        $this-&gt;_helper = Mage::helper('alwayly_maxorderamount');
    }
 
    /**
     * No single order can be placed over the amount of X
     */
    public function enforceSingleOrderLimit($observer)
    {
        if (!$this-&gt;_helper-&gt;isModuleEnabled()) {
            return;
        }
 
        $quote = $observer-&gt;getEvent()-&gt;getQuote();
 
        if ((float)$quote-&gt;getGrandTotal() &gt; (float)$this-&gt;_helper-&gt;getSingleOrderTopAmount()) {
 
            $formattedPrice = Mage::helper('core')-&gt;currency($this-&gt;_helper-&gt;getSingleOrderTopAmount(), true, false);
 
            Mage::getSingleton('checkout/session')-&gt;addError(
                $this-&gt;_helper-&gt;__($this-&gt;_helper-&gt;getSingleOrderTopAmountMsg(), $formattedPrice));
 
            Mage::app()-&gt;getFrontController()-&gt;getResponse()-&gt;setRedirect(Mage::getUrl('checkout/cart'));
            Mage::app()-&gt;getResponse()-&gt;sendResponse();
            exit;
        }
    }
}
</code></pre>
<p>这个方法的实现在代码的<strong>&ldquo;Mage::getSingleton(&lsquo;checkout/session&rsquo;)-&gt;addError() &hellip;&rdquo;</strong>这行。这里触发<strong>sales_quote_save_before</strong>事件，当新添加的商品超过最大订单金额时，Magento不更新购物车。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 06 Oct 2015 13:09:31 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[重写Magento块，模型，助手和控制器]]></title>
      <link>https://www.360magento.com/blog/overriding-magento/</link>
      <description><![CDATA[<p>没有一个项目是使用原有的框架，都是时不时地要修改些东西。增加新的东西或者重写已经写好的东西。由于很多原因，修改核心文件是一个坏习惯，不被推荐。因此，Magento带来一种很好的方式来重写/覆盖这些文件。</p>
<p>我们已经写过如何重写Magento模型类，但需要修改助手,块和控制器，不论是前端还是后台。</p>
<h2>重写Magento块</h2>
<p>让我们以重写核心标签块开始。假设要对<strong>Mage_Tag_Block_Product_List</strong>类做些改变。我们要做的是在这个类的基础上添加我们自己的文件来扩展它。所有要做的就是添加下面的代码到当前模块的<strong>config.xml</strong>文件中。</p>
<pre><code>&lt;config&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;tag&gt;
               &lt;rewrite&gt;
                    &lt;product_list&gt;Alwayly_Tag_Block_Product_List&lt;/product_list&gt;
                &lt;/rewrite&gt;
           &lt;/tag&gt;
        &lt;/blocks&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>由类名可以得出，文件要被创建在<strong>app/code/local/Alwayly/Tag/Block/Product/List.php</strong>，其中要定义类：</p>
<pre><code>class Alwayly_Tag_Block_Product_List extends Mage_Tag_Block_Product_List
{
// some code
}
</code></pre>
<p>等效于上面的例子，同样的规则可以应用在aminhtml中，当我们想要重写<strong>Mage_Adminhtml_Block_Tag_Edit</strong>类时。</p>
<pre><code>&lt;config&gt;
    &lt;global&gt;
       &lt;blocks&gt;
            &lt;adminhtml&gt;
                &lt;rewrite&gt;
                    &lt;tag_edit&gt;Alwayly_Tag_Block_Adminhtml_Tag_Edit&lt;/tag_edit&gt;
                &lt;/rewrite&gt;
            &lt;/adminhtml&gt;
        &lt;/blocks&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>那么需要创建<strong>app/code/local/Alwayly/Tag/Block/Adminhtml/Tag/Edit.php</strong>，在文件中写下类的代码：</p>
<pre><code>class Alwayly_Tag_Block_Adminhtml_Tag_Edit extends Mage_Adminhtml_Block_Tag_Edit
{
// some code
}
</code></pre>
<h2>重写Magento助手</h2>
<p>按照同样的规则，Magento助手也可以轻松地被重写。config.xml中的代码：</p>
<pre><code>&lt;config&gt;
    &lt;global&gt;
        &lt;helpers&gt;
            &lt;tag&gt;
                &lt;rewrite&gt;
                   &lt;data&gt;Alwayly_Tag_Helper_Data&lt;/data&gt;
               &lt;/rewrite&gt;
            &lt;/tag&gt;
        &lt;/helpers&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>创建<strong>app/code/local/Alwayly/Tag/Helper/Data.php</strong>文件并定义类：</p>
<pre><code>class Alwayly_Tag_Helper_Data extends Mage_Tag_Helper_Data
{
// some code
}
</code></pre>
<h2>重写Magento模型</h2>
<p>我们已经重写过Magento模型，但是资源文件和集合文件呢？和核心模型文件一样，资源和集合文件的重写和其它文件一样。文件将扩展：</p>
<ul>
<li>Mage_Tag_Model_Tag</li>
<li>Mage_Tag_Model_Resource_Tag</li>
</ul>
<p>Config.xml代码：</p>
<pre><code>&lt;config&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;tag&gt;
                &lt;rewrite&gt;
                    &lt;!-- Model --&gt;
                    &lt;tag&gt;Alwayly_Tag_Model_Tag&lt;/tag&gt;
                &lt;/rewrite&gt;
            &lt;/tag&gt;
            &lt;tag_resource&gt;
               &lt;rewrite&gt;
                    &lt;!-- Resource --&gt;
                    &lt;tag&gt;Alwayly_Tag_Model_Resource_Tag&lt;/tag&gt;
                    &lt;!-- Collection --&gt;
                    &lt;tag_collection&gt;Alwayly_Tag_Model_Resource_Tag_Collection&lt;/tag_collection&gt;
                &lt;/rewrite&gt;
            &lt;/tag_resource&gt;
        &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>接着，创建下面这些文件：</p>
<ul>
<li>app/code/local/Alwayly/Tag/Model/Tag.php</li>
<li>app/code/local/Alwayly/Tag/Model/Resource/Tag.php</li>
<li>app/code/local/Alwayly/Tag/Model/Resource/Tag/Collection.php.</li>
</ul>
<p><strong>注意：这里只是个示例，在你的项目里只重写你需要的类。</strong></p>
<h2>重写Magento控制器</h2>
<p>重写控制器比上面的示例要难一点，和我们之前例子中看到的Magento重写规则不一样。那如何重写Mage_Tag控制器呢？让我们看看代码吧。在config.xml中：</p>
<pre><code>&lt;config&gt;
    &lt;frontend&gt;
        &lt;routers&gt;
           &lt;tag&gt;
                &lt;args&gt;
                    &lt;modules&gt;
                        &lt;alwayly_tag before="Mage_Tag"&gt;Alwayly_Tag&lt;/alwayly_tag&gt;
                    &lt;/modules&gt;
                &lt;/args&gt;
            &lt;/tag&gt;
        &lt;/routers&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>在配置结点的孩子定义我们是否正在改变前端或者管理文件。我们定义的路由器结点将用它的参数重写核心标签模型。在底部结点出现当前模块前端的域名（alwayly_tag)和我们的模块名(Alwayly_Tag)。</p>
<p>你注意到，这里没有严格定义的文件。这样我们需要由控制器名定义这个路径下的文件。如果我们要重写<strong>app/code/core/Mage/Tag/controllers/TagController.php</strong>，那么具有相同名称的文件将被创建在<strong>app/code/local/Alwayly/Tag/controllers/TagController.php</strong>。</p>
<p>在新文件中定义类：</p>
<pre><code>require_once(Mage::getModuleDir('controllers','Mage_Tag').DS.'TagController.php');
 
class Alwayly_Tag_TagController extends Mage_Tag_TagController
{
// some code
}
</code></pre>
<p>类似地，要修改后台控制器的话。Config.xml代码：</p>
<pre><code>&lt;config&gt;
    &lt;admin&gt;
        &lt;routers&gt;
            &lt;adminhtml&gt;
                &lt;args&gt;
                    &lt;modules&gt;
                        &lt;alwayly_tag before="Mage_Adminhtml"&gt;Alwayly_Tag_Adminhtml&lt;/alwayly_tag&gt;
                    &lt;/modules&gt;
                &lt;/args&gt;
            &lt;/adminhtml&gt;
        &lt;/routers&gt;
    &lt;/admin&gt;
&lt;/config&gt;
</code></pre>
<p>创建<strong>app/code/local/Alwayly/Tag/controllers/Adminhtml/TagController.php</strong>文件并定义类：</p>
<pre><code>require_once(Mage::getModuleDir('controllers','Mage_Adminhtml').DS.'TagController.php');
 
class Alwayly_Tag_Adminhtml_TagController extends Mage_Adminhtml_TagController
{
// some code
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 06 Oct 2015 13:05:06 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[对Magento进行shell语言]]></title>
      <link>https://www.360magento.com/blog/php-shell-magento/</link>
      <description><![CDATA[<p>有时候我们需要从Magento外部访问Magento系统。一种方式是使用PHP shell语言引导Magento。一个普通PHP开发者会在自己代码的底部创建一个引导文件来访问Magento根目录。如你猜测的一样，有两种引导Magento的方式，常用方式和Magento方式。在这篇文章中，我们将概述如何以Magento的方式创建PHP shell脚本来引导Magento。</p>
<p>对于初学者来说，这里是引导Magento的常规方法（Magento中index.php中使用的）：</p>
<pre><code>require_once 'app/Mage.php';
Mage::app();
 
// Our own code goes here
</code></pre>
<p>虽然这种方法没有错误，但是和Magento方式相比有些不足。</p>
<h2>The Magento way</h2>
<p>现在，让我们看看用Magento方式来实现。如果你访问Magento根目录下shell文件夹，你会发现一些"Magento方式的"shell语言。比如，你有index.php可以使用所选的索引来重建索引，或者compiler.php去控制Magento编译器功能状态。如果你看了PHP shell脚本，你会看到在abstract.php文件包含Mage_Shell_Abstract类和其所包含、扩展Mage_Shell_Abstract类。</p>
<p>有些人想知道这样比单纯请求Mage.php好在哪。特别是当你看到Mage_Shell_Abstract结构体后，发现做的同样的事情。</p>
<p>使用Magento方式的有点之一是Mage_Shell_Abstract类提供解析命令行参数。第二，Mage_Shell_Abstract结构体会调用Mage_Shell_Abstract::__applyPhpVariables() function函数来解析.htaccess文件并应用php设置到shell脚本。</p>
<p>执行过程很明显。我将粘贴出Magento PHP shell脚本的骨架类：</p>
<pre><code>&lt;?php
require_once 'abstract.php';
 
class Inchoo_Shell_Myscript extends Mage_Shell_Abstract
{
    protected $_argname = array();
 
    public function __construct() {
        parent::__construct();
 
        // Time limit to infinity
        set_time_limit(0);     
 
        // Get command line argument named "argname"
        // Accepts multiple values (comma separated)
        if($this-&gt;getArg('argname')) {
            $this-&gt;_argname = array_merge(
                $this-&gt;_argname,
                array_map(
                    'trim',
                    explode(',', $this-&gt;getArg('argname'))
                )
            );
        }
    }
 
    // Shell script point of entry
    public function run() {
 
    }
 
    // Usage instructions
    public function usageHelp()
    {
        return &lt;&lt;       Argument description
 
  help                   This help
 
USAGE;
    }
}
// Instantiate
$shell = new Inchoo_Shell_Myscript();
 
// Initiate script
$shell-&gt;run();
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 05 Oct 2015 01:50:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[禁用Magento默认的通讯交易邮件]]></title>
      <link>https://www.360magento.com/blog/disabling-newsletter-emails/</link>
      <description><![CDATA[<p>并不是每个人对Magento中的通讯选项满意，所以他们选择第三方服务。在这种情况下，关闭Magento默认的通讯交易邮件并让第三方服务来接管电子邮件是一个好主意。在这篇文章中我将演示如何关闭Magento中默认的通讯交易邮件。</p>
<p>首先，我们重写核心文件中的<strong>config.xml</strong></p>
<pre><code>&lt;newsletter&gt;
	&lt;rewrite&gt;
		&lt;subscriber&gt;Alwayly_Newsletter_Model_Newsletter_Subscriber&lt;/subscriber&gt;
	&lt;/rewrite&gt;
&lt;/newsletter&gt;
</code></pre>
<p>创建system.xml，把下面的代码放进去：</p>
<pre><code>&lt;?xml version="1.0"?&gt;
 
&lt;config&gt;
   &lt;tabs&gt;
        &lt;alwayly_tab translate="label"&gt;
            &lt;label&gt;Alwayly&lt;/label&gt;
            &lt;sort_order&gt;200&lt;/sort_order&gt;
        &lt;/alwayly_tab&gt;
    &lt;/tabs&gt;
 
    &lt;sections&gt;
        &lt;alwayly_newsletter translate="label"&gt;
            &lt;label&gt;Newsletter Configuration&lt;/label&gt;
            &lt;tab&gt;alwayly_test_tab&lt;/tab&gt;
           &lt;frontend_type&gt;text&lt;/frontend_type&gt;
            &lt;sort_order&gt;1&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
            &lt;groups&gt;
                &lt;newsletter_subscription_transactional_mails&gt;
                   &lt;label&gt;Newsletter Subscription Transactional Mails&lt;/label&gt;
                    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                    &lt;sort_order&gt;120&lt;/sort_order&gt;
                    &lt;fields&gt;
                        &lt;enabled translate="label"&gt;
                           &lt;label&gt;Enable&lt;/label&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_yesno&lt;/source_model&gt;
                            &lt;sort_order&gt;40&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/enabled&gt;
                    &lt;/fields&gt;
                &lt;/newsletter_subscription_transactional_mails&gt;
            &lt;/groups&gt;
        &lt;/alwayly_newsletter&gt;
    &lt;/sections&gt;
&lt;/config&gt;
</code></pre>
<p>下一步，我们将添加我们的配置路径到Helper类和一个获取值的方法：</p>
<pre><code>class Alwayly_Newsletter_Helper_Data extends Mage_Core_Helper_Abstract
{
    const XML_PATH_NEWSLETTER_MAILS  = 'alwayly_newsletter/newsletter_subscription_transactional_mails/enabled';
 
    public function getNewsletterSubscriptionMailEnabled()
    {
        return Mage::getStoreConfig(self::XML_PATH_NEWSLETTER_MAILS);
    }
}
</code></pre>
<p>最后一步就是编辑几个以前我们改写过的核心方法。我们新的模型类是<strong>Alwayly_Newsletter_Model_Newsletter_Subscriber</strong>，它扩展自<strong>Mage_Newsletter_Model_Subscriber</strong>类。类名取决于你的模块，我们经常要扩展核心类，否则将无法正常工作。</p>
<p>你将需要从核心类里拷贝3个方法到我们的新类中并做一些调整。</p>
<ul>
<li>公用方法subscribe($email)</li>
<li>公用方法subscribeCustomer($customer)</li>
<li>公用方法unsubscribe()</li>
</ul>
<p>在subscribe方法中找到：</p>
<pre><code>if ($isConfirmNeed === true
	&amp;&amp; $isOwnSubscribes === false
) {
	$this-&gt;sendConfirmationRequestEmail();
} else {
	$this-&gt;sendConfirmationSuccessEmail();
}
</code></pre>
<p>用下面的代码替换：</p>
<pre><code>if ((bool) Mage::helper('alwayly_newsletter')-&gt;getNewsletterSubscriptionMailEnabled()) {
    if ($isConfirmNeed === true &amp;&amp; $isOwnSubscribes === false) {
        $this-&gt;sendConfirmationRequestEmail();
    } else {
        $this-&gt;sendConfirmationSuccessEmail();
    }
}
</code></pre>
<p>在subscribeCustomer方法中找到：</p>
<pre><code>if ($this-&gt;getIsStatusChanged() &amp;&amp; $status == self::STATUS_UNSUBSCRIBED) {
    $this-&gt;sendUnsubscriptionEmail();
} elseif ($this-&gt;getIsStatusChanged() &amp;&amp; $status == self::STATUS_SUBSCRIBED) {
    $this-&gt;sendConfirmationSuccessEmail();
}
</code></pre>
<p>替换成：</p>
<pre><code>if ((bool) Mage::helper('alwayly_newsletter')-&gt;getNewsletterSubscriptionMailEnabled()) {
    if ($this-&gt;getIsStatusChanged() &amp;&amp; $status == self::STATUS_UNSUBSCRIBED) {
        $this-&gt;sendUnsubscriptionEmail();
    } elseif ($this-&gt;getIsStatusChanged() &amp;&amp; $status == self::STATUS_SUBSCRIBED) {
        $this-&gt;sendConfirmationSuccessEmail();
    }
}
</code></pre>
<p>最后一个unsubscribe方法中：</p>
<pre><code>$this-&gt;sendUnsubscriptionEmail();
</code></pre>
<p>替换为：</p>
<pre><code>if ((bool) Mage::helper('alwayly_newsletter')-&gt;getNewsletterSubscriptionMailEnabled()) {
    $this-&gt;sendUnsubscriptionEmail();
}
</code></pre>
<p>这意味着，我们首先检查我们的配置选项设置为启用或禁用。如果设置为禁用则不执行if语句里的代码。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 05 Oct 2015 01:36:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento配置计划任务]]></title>
      <link>https://www.360magento.com/blog/magento-configurable-cron/</link>
      <description><![CDATA[<p>Magento中的计划任务很容易配置。<strong>config.xml</strong>中的几行代码加一个方法就完成了。但如果你想更有意思点，创建一个日程计划任务呢？幸运的是，Magento系统中已经有了这个功能，实现起来也很简单。</p>
<p>计划任务本身比较直接。正如下面代码所见，它在<strong>config.xml</strong>中由两部分被定义：日程和一个被执行的方法。下面的例子展示了一个名为"my_cron"的计划任务，每5分钟执行观测者文件中的<strong>"doSomething"</strong>方法。如果你不熟悉计划任务的格式，网上有一堆关于计划任务的文章。</p>
<pre><code>&lt;config&gt;
    &lt;crontab&gt;
        &lt;jobs&gt;
            &lt;my_cron&gt;
                &lt;schedule&gt;
                    &lt;cron_expr&gt;*/5 * * * *&lt;/cron_expr&gt;
               &lt;/schedule&gt;
                &lt;run&gt;
                    &lt;model&gt;mymodule/observer::doSomething&lt;/model&gt;
                &lt;/run&gt;
            &lt;/my_cron&gt;
        &lt;/jobs&gt;
   &lt;/crontab&gt;
&lt;/config&gt;
</code></pre>
<p>计划任务不能被配置。在计划任务被生成的<strong>Mage_Cron_Model_Observer</strong>类里，有一个生成方法，以同样的方式检查<strong>core_config_data</strong>表中的值和<strong>configxml</strong>文件。知道了这一点，我们就可以保存路径和设置我们想要的值。让我们开始吧。</p>
<h2>Admin configuration（管理员配置）</h2>
<p>因为我们想要日程配置计划任务，所以我们需要有一个对应的管理员配置。你可以随你喜欢地完成它，但是我将使用Magento中提供给我们的。</p>
<p>在<strong>system.xml</strong>中会有Magento中封装好的时间（小时，分钟和秒）和频率选择器（每日，每周和每月）。代码所要完成的是创建我们的后台块来格式化和保存我们想要的路径值。在这里，它将在<strong>mymodule/adminhtml_system_config_backend_mymodel_cron</strong>。</p>
<pre><code>&lt;config&gt;
    &lt;sections&gt;
        &lt;catalog&gt;
          &lt;groups&gt;
                &lt;configurable_cron translate="label"&gt;
                    &lt;label&gt;Cron Schedule&lt;/label&gt;
                    &lt;sort_order&gt;100&lt;/sort_order&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;0&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;0&lt;/show_in_store&gt;
                    &lt;fields&gt;
                        &lt;time translate="label"&gt;
                            &lt;label&gt;Start Time&lt;/label&gt;
                            &lt;frontend_type&gt;time&lt;/frontend_type&gt;
                            &lt;sort_order&gt;10&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                           &lt;show_in_website&gt;0&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;0&lt;/show_in_store&gt;
                        &lt;/time&gt;
                        &lt;frequency translate="label"&gt;
                            &lt;label&gt;Frequency&lt;/label&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_cron_frequency&lt;/source_model&gt;
                            &lt;backend_model&gt;mymodule/adminhtml_system_config_backend_mymodel_cron&lt;/backend_model&gt;
                            &lt;sort_order&gt;20&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;0&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;0&lt;/show_in_store&gt;
                        &lt;/frequency&gt;
                    &lt;/fields&gt;
                &lt;/configurable_cron&gt;
            &lt;/groups&gt;
        &lt;/catalog&gt;
    &lt;/sections&gt;
&lt;/config&gt;
</code></pre>
<h2>Backend model（后台模块）</h2>
<p>管理员配置中的前端类型不保存计划任务选择器读取的输入类型。由于这个，我们必须后台模块来填补我们想要的输入类型。</p>
<p>从上面设置普通计划任务的示例代码中，同样的路径也被<strong>core_config_data</strong>表使用，我们将要处理它。由上面的代码可知，我们日程的路径是<strong>"crontab/jobs/my_cron/schedule/cron_expr"</strong>。下面的代码格式化输入并保存值到表。</p>
<pre><code>class Alwayly_MyModule_Model_Adminhtml_System_Config_Backend_MyModel_Cron extends Mage_Core_Model_Config_Data
{
    const CRON_STRING_PATH = &lsquo;crontab/jobs/my_cron/schedule/cron_expr';
 
    protected function _afterSave()
    {
        $time = $this-&gt;getData('groups/configurable_cron/fields/time/value');
 
        $frequencyDaily = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_DAILY;
        $frequencyWeekly = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_WEEKLY;
        $frequencyMonthly = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_MONTHLY;
 
        $cronDayOfWeek = date('N');
 
        $cronExprArray = array(
            intval($time[1]),                                   # Minute
            intval($time[0]),                                   # Hour
            (frequency == $frequencyMonthly) ? '1' : '*',       # Day of the Month
            '*',                                                # Month of the Year
            (frequency == $frequencyWeekly) ? '1' : '*',        # Day of the Week
        );
        $cronExprString = join(' ', $cronExprArray);
 
        try {
            Mage::getModel('core/config_data')
                -&gt;load(self::CRON_STRING_PATH, 'path')
                -&gt;setValue($cronExprString)
                -&gt;setPath(self::CRON_STRING_PATH)
                -&gt;save();
        }
        catch (Exception $e) {
            throw new Exception(Mage::helper('cron')-&gt;__('Unable to save the cron expression.'));
 
        }
    }
}
</code></pre>
<p>计划任务生成器浏览计划任务，选择日程被定义的那个。从config表中读取日程，日程调度结点必须从config.xml中被移除，仅定义了模型，如下所示：</p>
<pre><code>
&lt;config&gt;
    &lt;crontab&gt;
        &lt;jobs&gt;
            &lt;my_cron&gt;
                &lt;run&gt;
                    &lt;model&gt;mymodule/observer::doSomething&lt;/model&gt;
                &lt;/run&gt;
            &lt;/my_cron&gt;
        &lt;/jobs&gt;
    &lt;/crontab&gt;
&lt;/config&gt;
</code></pre>
<p>后台发生了什么？计划任务生成器浏览<strong>config.xml</strong>文件和<strong>config</strong>表，寻找计划任务日程并填充计划日程表。此时和模型是不相关的。没有被定义日程的计划任务被跳过。另一种方法，从计划日程表中读取计划任务，从<strong>config.xml</strong>文件和<strong>config</strong>表中收集方法并执行。</p>
<h2>Observer（观测者）</h2>
<p>观测者中是将被计划任务执行的方法。这里的代码由你决定。</p>
<pre><code>
class Alwayly_MyModule_Model_Observer
{
    public function doSomething()
    {
	// do something
    }
}
</code></pre>
<p>这只是个使用日程计划任务的例子。当你理解它如何工作后，这里还有很大的提升空间。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 04 Oct 2015 11:31:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[根据多个ID筛选订单网格]]></title>
      <link>https://www.360magento.com/blog/filter-order-ids/</link>
      <description><![CDATA[<p>我们都知道Magento的网格很棒，是有效显示数据的不二选择。</p>
<p>我们的客户在选择Magento后有时（基本是经常）会有些特殊的需求。其中有人提出通过订单ID来过滤订单网格。</p>
<p>当你有大批订单要跟踪的时候就显得很有用了。一个一个筛选是个繁琐而又耗时的任务。</p>
<p>我要告诉你的诀窍可以处理几乎所有的网格，只要你知道它是如何做的。</p>
<p>首先，重写你的订单网格块<strong>(app\code\core\Mage\Adminhtml\Block\Sales\Order\Grid.php)<strong>&mdash;&mdash;我想你知道怎么做。</strong></strong></p>
<p>在你的<strong> _prepareColumns() </strong>方法里，向数组里添加一个元素，如下：</p>
<pre><code>protected function _prepareColumns()
{
	$this-&gt;addColumn('real_order_id', array(
		'header'=&gt; Mage::helper('sales')-&gt;__('Order #'),
		'width' =&gt; '250px',
		'type'  =&gt; 'text',
		'index' =&gt; 'increment_id',
		'filter_condition_callback' =&gt; array($this, 'spaceSeparatedFilter')//calling spaceSeparatedFilter method
	));
....
}
</code></pre>
<p>在我们网格中一行被渲染时，渲染器被调用。通过cell被渲染成一个字段。过滤器回调，另一方面，调用整个列和集合作为字段。结果是，我们可以创建自己的方法，调用变量filter_condition_callback元素，向数据库执行自定义查询语句，获取我们网格中的输入框等等&hellip;&hellip;</p>
<p>这正是我们要做的&hellip;&hellip;</p>
<p>我们的过滤器回调将调用spaceSeparatedFilter()方法并把real_order_id列作为一个参数。让我们声明我们的方法（在Grid.php文件中）：</p>
<pre><code>protected function spaceSeparatedFilter($collection, $column)
{
	if (!$value = $column-&gt;getFilter()-&gt;getValue()) {
		return $this;
	}
	//if there was a space input
		else if(preg_match('/\s+/', $value))
	{
		//explode by space, getting array of IDs
		$val = explode(" ", $value);
		//filter the collection, where collection index (order_id) is present in $val array
		$this-&gt;getCollection()-&gt;addAttributeToFilter($column-&gt;getData('index'), array('in'=&gt;$val));
	}
	else
	{
	//else use default grid filter functionality (like $value input)
	$this-&gt;getCollection()-&gt;addAttributeToFilter($column-&gt;getData('index'), array('like' =&gt; '%'.$value.'%'));
	}
	return $this;
}
</code></pre>
<p>这两段代码可以让你通过多个订单ID来过滤订单，只要你用空间将他们分开。如果你没有进入一个空间，那么会按默认的工作。</p>
<p>你也可以使用网格的所有功能：排序，筛选，导出。没有任何问题。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 04 Oct 2015 11:18:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento中用getModel和getData方法来获取东西]]></title>
      <link>https://www.360magento.com/blog/magento-getmodel-getdata/</link>
      <description><![CDATA[<p>如果你正在Magento中开发，迟早有一天你会需要从数据库中获取信息。这篇文章将会给你展示用getModel,getData和getter方法获取几乎任何东西。</p>
<p>例如：假设你正在尝试找出产品名字，描述和价格。首先你要做的就是获取产品模型：</p>
<p><strong>$productModel = Mage::getModel('catalog/product');</strong></p>
<p>通过调用<strong>getModel('catalog/product')</strong>，你将<strong>Mage_Catalog_Model_Product</strong>类（定义在<strong>app/code/core/Mage/Catalog/Model/Product.php</strong>）实例化。但是Magento如何知道这个类在哪呢？</p>
<p>参数<strong>&lsquo;catalog/product&rsquo;</strong>的第一部分来自模块配置，通常和模块文件夹名一样。如果你看了<strong>app/code/core/Mage/Catalog/etc/config.xml</strong>文件，你将会看到：</p>
<pre><code>&lt;config&gt;
    &hellip;
    &lt;global&gt;
        &lt;models&gt;
            &lt;catalog&gt;
                &lt;class&gt;Mage_Catalog_Model&lt;/class&gt;
                &hellip;
            &lt;/catalog&gt;
            &hellip;
        &lt;/models&gt;
        &hellip;
    &lt;/global&gt;
    &hellip;
&lt;/config&gt;
</code></pre>
<p>从这里，你可以看到，所有名字以<strong>Mage_Catalog_Model</strong>开始的模块都被定义在Model文件夹下。参数<strong>&lsquo;catalog/product&rsquo;</strong>的第二部分告诉Magento定义类的文件。在这里，是Product.php。</p>
<p>现在，我们有了对的模型，下一步就是告诉我们的模块，哪个产品要被读取。用load($id)方法很容易实现。</p>
<pre><code>$product = $productModel-&gt;load(42);</code></pre>
<p>注意，这里的42只是个id的例子，应该被你需要读取的产品id替换。</p>
<p>在读取我们的产品之后，这里有两种方法从对象里读取数据。</p>
<pre><code>$name = $product-&gt;getName(); // same as $product-&gt;getData('name');
$description = $product-&gt;getData('description'); // same as $product-&gt;getDescription();
</code></pre>
<p>两种方法都很好。但是当读取价格时就有点不一样了。</p>
<pre><code>$price = $product-&gt;getPrice(); // same as $product-&gt;getData('price');
$finalPrice = $product-&gt;getFinalPrice();
</code></pre>
<p>万一我们的产品在任何价格规则下，这两个变量就会有不一样的值。有什么不一样呢？$price变量会显示后台被你编辑过的产品原价。 $finalPrice变量在这里是经过价格规则处理后的价格。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 03 Oct 2015 07:55:41 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中的畅销产品]]></title>
      <link>https://www.360magento.com/blog/bestseller-magento/</link>
      <description><![CDATA[<p>畅销产品是一类人逛Magento商店时会询问和浏览的。默认安装就已经有畅销产品这个功能&hellip;&hellip;但是需要在CMS页面定义一个静态块。我们打算把它提升一下。</p>
<p>Magento已经使用了畅销产品的聚合，你可以在Admin-&gt;Reports-&gt;Products-&gt;Bestsellers下确认。得益于这个被聚合的数据，我们不再需要确认所有订单来知道哪件产品卖得最多。通过各种聚合数据，我们能够获取从开始或者特定时间最受欢迎的产品。</p>
<p>有很多实现的方法。我找到对我最有用的就是每月畅销产品的集合。这个方法快速而且即使聚合表为空时也可以访问产品。</p>
<pre><code>class Alwayly_Luckcy_Block_Bestsellers extends Mage_Core_Block_Template
{
    public function getBestsellerProducts()
    {
        $storeId = (int) Mage::app()-&gt;getStore()-&gt;getId();
 
        // Date
        $date = new Zend_Date();
        $toDate = $date-&gt;setDay(1)-&gt;getDate()-&gt;get('Y-MM-dd');
        $fromDate = $date-&gt;subMonth(1)-&gt;getDate()-&gt;get('Y-MM-dd');
 
        $collection = Mage::getResourceModel('catalog/product_collection')
            -&gt;addAttributeToSelect(Mage::getSingleton('catalog/config')-&gt;getProductAttributes())
            -&gt;addStoreFilter()
            -&gt;addPriceData()
            -&gt;addTaxPercents()
            -&gt;addUrlRewrite()
            -&gt;setPageSize(6);
 
        $collection-&gt;getSelect()
            -&gt;joinLeft(
                array('aggregation' =&gt; $collection-&gt;getResource()-&gt;getTable('sales/bestsellers_aggregated_monthly')),
                "e.entity_id = aggregation.product_id AND aggregation.store_id={$storeId} AND aggregation.period BETWEEN '{$fromDate}' AND '{$toDate}'",
                array('SUM(aggregation.qty_ordered) AS sold_quantity')
            )
            -&gt;group('e.entity_id')
            -&gt;order(array('sold_quantity DESC', 'e.created_at'));
 
        Mage::getSingleton('catalog/product_status')-&gt;addVisibleFilterToCollection($collection);
        Mage::getSingleton('catalog/product_visibility')-&gt;addVisibleInCatalogFilterToCollection($collection);
 
        return $collection;
    }
}
</code></pre>
<p>这段代码的作用是返回上月卖得最多的产品的集合。如果这个逻辑将是或者被使用超过一次，推荐将逻辑加入到分类产品集合文件（扩展这个文件或者使用事件）并在构建集合时作为方法来调用。现在，当产品集合准备好了，这里有更多的方法来将它们展示到前台。我们就以修改首页为例。后台进入CMS-&gt;Page，选择Identifier为'home'的那项。用下面的代码替代content。</p>
<pre><code>&lt;div class="col-left side-col"&gt;
    &lt;p class="home-callout"&gt;&nbsp;
    &lt;p class="home-callout"&gt;&lt;img src="<span>{</span>{skin url='images/ph_callout_left_rebel.jpg'}}" alt="" border="0" /&gt;&lt;/p&gt;
    <span>{</span>{block type="tag/popular" template=&ldquo;tag/popular.phtml"}}
&lt;/div&gt;
&lt;div class="home-spot"&gt;
    &lt;p class="home-callout"&gt;&lt;img src="<span>{</span>{skin url='images/home_main_callout.jpg'}}" alt="" width="470" border="0" /&gt;&lt;/p&gt;
    &lt;p class="home-callout"&gt;&lt;img src="<span>{</span>{skin url='images/free_shipping_callout.jpg'}}" alt="" width="470" border="0" /&gt;&lt;/p&gt;
    <span>{</span>{block type="damir/bestsellers" template=&ldquo;luckcy/bestsellers.phtml"}}
</code></pre>
<p>上面的代码包含了畅销产品块。最后一件事就是创建模版文件。模版文件使用了CMS页面同样的html结构：</p>
<pre><code>
&lt;div class="box best-selling"&gt;
&lt;h3&gt;Best Selling Products&lt;/h3&gt;
&lt;table border="0" cellspacing="0"&gt;
    &lt;tbody&gt;
    &lt;?php $counter=0; foreach ($this-&gt;getBestsellerProducts() as $product): ?&gt;
        &lt;?php if ($counter%2 == 0): ?&gt;&lt;tr class="&lt;?php echo $counter%4 ? 'even' : 'odd'; ?&gt;"&gt;&lt;?php endif ?&gt;
        &lt;td&gt;
            &lt;a href="&lt;?php echo $product-&gt;getProductUrl() ?&gt;"&gt;&lt;img class="product-img" src="&lt;?php echo $this-&gt;helper('catalog/image')-&gt;init($product, 'small_image')-&gt;resize(99); ?&gt;" alt="&lt;?php echo $this-&gt;stripTags($this-&gt;getImageLabel($product, 'small_image'), null, true) ?&gt;" width="95" border="0" /&gt;&lt;/a&gt;
            &lt;div class="product-description"&gt;
                &lt;p&gt;&lt;a href="&lt;?php echo $product--&amp;gtgetProductUrl() ?&gt;"&gt;&lt;?php echo $this-&gt;stripTags($product-&gt;getName(), null, true); ?&gt;&lt;/a&gt;&lt;/p&gt;
            &lt;/div&gt;
        &lt;/td&gt;
        &lt;?php if ($counter++%2): ?&gt;&lt;/tr&gt;&lt;?php endif ?&gt;
    &lt;?php endforeach; ?&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</code></pre>
<p>这个例子使用的是每月聚合，我觉得是最实用的。这里也有每日聚合和每年聚合，但是使用得并不多。许多插件都有同样的功能，只是进行了些包装，最底层的逻辑都是一样的。</p>
<p>由于强烈不推荐修改核心文件，所以每个项目必须至少有一个模型来放置自己的块。如果你对如何创建模块不熟悉，那么可以看看<a href="www.360magento.net" title="magento建站开发">360magento.net</a>中插件开发文章。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 03 Oct 2015 07:40:04 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[以编程的方式添加一个新的客户到Magento商店]]></title>
      <link>https://www.360magento.com/blog/programmaticaly-customers-magento/</link>
      <description><![CDATA[<p>我们程序员喜欢以编程的方式来添加东西。虽然你可以通过一个注册表单或者管理界面来创建一个新的客户。在某些情况下，这可能需要很长时间。如果你有一群来自不同国家的客户要分配给不同的群体，那你最好选择用代码来实现。</p>
<p>首先，我们添加一个带有一些基础信息的客户。</p>
<pre><code>$websiteId = Mage::app()-&gt;getWebsite()-&gt;getId();
$store = Mage::app()-&gt;getStore();
 
$customer = Mage::getModel("customer/customer");
$customer   -&gt;setWebsiteId($websiteId)
            -&gt;setStore($store)
            -&gt;setFirstname('John')
            -&gt;setLastname('Doe')
            -&gt;setEmail('jd1@ex.com')
            -&gt;setPassword('somepassword');
 
try{
    $customer-&gt;save();
}
catch (Exception $e) {
    Zend_Debug::dump($e-&gt;getMessage());
}
</code></pre>
<p>正如我们所见，上面的代码添加的用户只有姓、名、邮箱和密码。有时这些就够了，但我们可以做到更多。你可以添加中间名，把客户分配到特定的客户群，甚至给他们的名字加前缀或后缀。</p>
<pre><code>$customer   -&gt;setWebsiteId($websiteId)
            -&gt;setStore($store)
            -&gt;setGroupId(2)
            -&gt;setPrefix('Sir')
            -&gt;setFirstname('John')
            -&gt;setMiddleName('2')
            -&gt;setLastname('Doe')
            -&gt;setSuffix('II')
            -&gt;setEmail('jd2@ex.com')
            -&gt;setPassword('somepassword');
</code></pre>
<p>为了让客户能下订单，我们需要添加一个地址并分配给客户。让我们实现它吧。</p>
<pre><code>$address = Mage::getModel("customer/address");
$address-&gt;setCustomerId($customer-&gt;getId())
        -&gt;setFirstname($customer-&gt;getFirstname())
        -&gt;setMiddleName($customer-&gt;getMiddlename())
        -&gt;setLastname($customer-&gt;getLastname())
        -&gt;setCountryId('HR')
		//-&gt;setRegionId('1') //state/province, only needed if the country is USA
        -&gt;setPostcode('31000')
        -&gt;setCity('Osijek')
        -&gt;setTelephone('0038511223344')
        -&gt;setFax('0038511223355')
        -&gt;setCompany('Inchoo')
        -&gt;setStreet('Kersov')
        -&gt;setIsDefaultBilling('1')
        -&gt;setIsDefaultShipping('1')
        -&gt;setSaveInAddressBook('1');
 
try{
    $address-&gt;save();
}
catch (Exception $e) {
    Zend_Debug::dump($e-&gt;getMessage());
}
</code></pre>
<p>要注意的是，setCountryID需要国家代码来作为值（你可以在后台通过检索客户创建页面'Country'输入框来获值）。上面的setGroupId方法也一样，你需要获取客户群的ID。</p>
<p>我希望大部分代码是不言自明的，由于我们从管理页面添加客户时知道哪些是必填项。唯一你要注意的就是必填项。</p>
<p>万一你有多个用户要添加，你可以花几秒钟为这段代码添加一个循环。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 02 Oct 2015 10:57:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中以编程的方式创建捆绑产品]]></title>
      <link>https://www.360magento.com/blog/programmatically-magento-bundle/</link>
      <description><![CDATA[<p>如果说这是一个系列文章，那么这就是第三个了。如果你之前看过了Magento中简单产品和可配置产品的创建，那你已经了解了基础。</p>
<p>这篇文章中我们将扩展知识，学习如何用编程的方式创建Magento的捆绑产品。</p>
<p>捆绑产品就是你想要批量销售的产品。从图片中可能会让你有更好的了解。我们以Magento示例数据中的一个产品为例：</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento在首页显示登陆注册框，创建magento下拉登陆框" src="http://7xjryy.com1.z0.glb.clouddn.com/bundle-sample1-600x362.png" height="362" width="600" /></div>
<p>我们可以看到这个产品的每个自定义选项值都会对应一个捆绑相关的简单产品。例如，Camera选项有 Madison LX2200和Madison RX3400，它们对应不同的简单产品。现在我们跳过基础部分，我们将创建一个捆绑产品必要的两个选项，每一个选项有两个值来表示不同的产品。</p>
<pre><code>$bundleProduct = Mage::getModel('catalog/product');
    $bundleProduct
    -&gt;setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) //you can set data in store scope
        -&gt;setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
        -&gt;setAttributeSetId(20) //ID of a attribute set named 'default'
        -&gt;setTypeId('bundle') //product type
        -&gt;setCreatedAt(strtotime('now')) //product creation time
//    -&gt;setUpdatedAt(strtotime('now')) //product update time
        -&gt;setSkuType(0) //SKU type (0 - dynamic, 1 - fixed)
        -&gt;setSku('bundlexx1') //SKU
        -&gt;setName('test bundle product96') //product name
        -&gt;setWeightType(0) //weight type (0 - dynamic, 1 - fixed)
//        -&gt;setWeight(4.0000)
        -&gt;setShipmentType(0) //shipment type (0 - together, 1 - separately)
        -&gt;setStatus(1) //product status (1 - enabled, 2 - disabled)
        -&gt;setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
        -&gt;setManufacturer(28) //manufacturer id
        -&gt;setColor(24)
        -&gt;setNewsFromDate('06/26/2014') //product set as new from
        -&gt;setNewsToDate('06/30/2014') //product set as new to
        -&gt;setCountryOfManufacture('AF') //country of manufacture (2-letter country code)
        -&gt;setPriceType(0) //price type (0 - dynamic, 1 - fixed)
        -&gt;setPriceView(0) //price view (0 - price range, 1 - as low as)
        -&gt;setSpecialPrice(00.44) //special price in form 11.22
        -&gt;setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY)
        -&gt;setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY)
        /*only available if price type is 'fixed'*/
//        -&gt;setPrice(11.22) //price, works only if price type is fixed
//        -&gt;setCost(22.33) //price in form 11.22
//        -&gt;setMsrpEnabled(1) //enable MAP
//        -&gt;setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config)
//        -&gt;setMsrp(99.99) //Manufacturer's Suggested Retail Price
//        -&gt;setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
        /*only available if price type is 'fixed'*/
        -&gt;setMetaTitle('test meta title 2')
        -&gt;setMetaKeyword('test meta keyword 2')
        -&gt;setMetaDescription('test meta description 2')
        -&gt;setDescription('This is a long description')
        -&gt;setShortDescription('This is a short description')
        -&gt;setMediaGallery(array('images' =&gt; array(), 'values' =&gt; array())) //media gallery initialization
        -&gt;setStockData(array(
                'use_config_manage_stock' =&gt; 1, //'Use config settings' checkbox
                'manage_stock' =&gt; 1, //manage stock
                'is_in_stock' =&gt; 1, //Stock Availability
            )
        )
        -&gt;setCategoryIds(array(4, 10)); //assign product to categories
 
    $bundleOptions = array();
    $bundleOptions = array(
        '0' =&gt; array( //option id (0, 1, 2, etc)
            'title' =&gt; 'item01', //option title
            'option_id' =&gt; '',
            'delete' =&gt; '',
            'type' =&gt; 'select', //option type
            'required' =&gt; '1', //is option required
            'position' =&gt; '1' //option position
        ),
        '1' =&gt; array(
            'title' =&gt; 'item02',
            'option_id' =&gt; '',
            'delete' =&gt; '',
            'type' =&gt; 'multi',
            'required' =&gt; '1',
            'position' =&gt; '1'
        )
    );
 
    $bundleSelections = array();
    $bundleSelections = array(
        '0' =&gt; array( //option ID
            '0' =&gt; array( //selection ID of the option (first product under this option (option ID) would have ID of 0, second an ID of 1, etc)
                'product_id' =&gt; '554', //if of a product in selection
                'delete' =&gt; '',
                'selection_price_value' =&gt; '10',
                'selection_price_type' =&gt; 0,
                'selection_qty' =&gt; 1,
                'selection_can_change_qty' =&gt; 0,
                'position' =&gt; 0,
                'is_default' =&gt; 1
            ),
 
            '1' =&gt; array(
                'product_id' =&gt; '553',
                'delete' =&gt; '',
                'selection_price_value' =&gt; '10',
                'selection_price_type' =&gt; 0,
                'selection_qty' =&gt; 1,
                'selection_can_change_qty' =&gt; 0,
                'position' =&gt; 0,
                'is_default' =&gt; 1
            )
        ),
        '1' =&gt; array( //option ID
            '0' =&gt; array(
                'product_id' =&gt; '552',
                'delete' =&gt; '',
                'selection_price_value' =&gt; '10',
                'selection_price_type' =&gt; 0,
                'selection_qty' =&gt; 1,
                'selection_can_change_qty' =&gt; 0,
                'position' =&gt; 0,
                'is_default' =&gt; 1
            ),
 
            '1' =&gt; array(
                'product_id' =&gt; '551',
                'delete' =&gt; '',
                'selection_price_value' =&gt; '10',
                'selection_price_type' =&gt; 0,
                'selection_qty' =&gt; 1,
                'selection_can_change_qty' =&gt; 0,
                'position' =&gt; 0,
                'is_default' =&gt; 1
            )
        )
    );
    //flags for saving custom options/selections
    $bundleProduct-&gt;setCanSaveCustomOptions(true);
    $bundleProduct-&gt;setCanSaveBundleSelections(true);
    $bundleProduct-&gt;setAffectBundleProductSelections(true);
 
    //registering a product because of Mage_Bundle_Model_Selection::_beforeSave
    Mage::register('product', $bundleProduct);
 
    //setting the bundle options and selection data
    $bundleProduct-&gt;setBundleOptionsData($bundleOptions);
    $bundleProduct-&gt;setBundleSelectionsData($bundleSelections);
 
    $bundleProduct-&gt;save();
    echo 'success';
} catch (Exception $e) {
    Mage::log($e-&gt;getMessage());
    echo $e-&gt;getMessage();
}
</code></pre>
<p>你可以在每行代码找到注释。我尽可能多地注释，这样有利于你们去理解。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 01 Oct 2015 09:31:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[实现Magento中的rel备用链接]]></title>
      <link>https://www.360magento.com/blog/magento-rel-links/</link>
      <description><![CDATA[<p>随着电子商务的发展，商品销往全球比以前容易多了。互联网没有界限，任何人都可以在舒适的家里访问你的商店。对于多店铺的需求也是日益明显。也许你希望让你的客户访问你的网站时看到的是自己的语言。</p>
<p>当你设置你的多店铺时，Google有些指导和建议。这样能让你的网站索引更正确，排名更高。其中一条建议就是：如果你有翻译成其它语言的页面，使用rel="alternate"的链接。</p>
<p>我们使用的语法看起来就像这样：</p>
<pre><code>&lt;link rel="alternate" hreflang="es" href="http://es.example.com/" /&gt;
</code></pre>
<p>如果把这个语法应用到Magento里，那看起来就像这样：</p>
<pre><code>
<link href="url-of-the-page-in-other-language" rel="alternate" />
</code></pre>
<p>现在我们就有了思路。让我们以注册我们的模块开始。</p>
<p><strong>app/etc/modules/Alwayly_Alternate.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Alternate&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_Alternate&gt;
   &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>让我们谈下模块的设置。我们需要做的就是把alternate链接放到每个页面的头部。一种方法就是在head.phtm文件里创建逻辑请求。更好的方式是，使用观测者监听一些时间，然后使用Magento中已经存在的addLinkRel（）方法加入到head里。</p>
<p>在这个例子里，我们将使用<strong>controller_action_layout_generate_blocks_after</strong>事件。也许这儿还有些更合适的事件，但这一次就用它了。</p>
<p><strong>app/code/local/Alwayly/Alternate/etc/config.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Alternate&gt;
            &lt;version&gt;1.0.0&lt;/version&gt;
        &lt;/Alwayly_Alternate&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;helpers&gt;
            &lt;alwayly_alternate&gt;
                &lt;class&gt;Alwayly_Alternate_Helper&lt;class&gt;
            &lt;/alwayly_alternate&gt;
        &lt;/helpers&gt;
    &lt;/global&gt;
    &lt;frontend&gt;
        &lt;events&gt;
            &lt;controller_action_layout_generate_blocks_after&gt;
                &lt;observers&gt;
                    &lt;alwayly_alternate&gt;
                        &lt;type&gt;singleton&lt;/type&gt;
                        &lt;class&gt;Alwayly_Alternate_Model_Observer&lt;/class&gt;
                        &lt;method&gt;alternateLinks&lt;/method&gt;
                    &lt;/alwayly_alternate&gt;
                &lt;/observers&gt;
            &lt;/controller_action_layout_generate_blocks_after&gt;
        &lt;/events&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>我们只是定义了观测者的名字和方法，现在来创建它。</p>
<p><strong>app/code/local/Alwayly/Alternate/Model/Observer.php</strong></p>
<pre><code>
class Alwayly_Alternate_Model_Observer
{
 public function alternateLinks()
 {
   $headBlock = Mage::app()-&gt;getLayout()-&gt;getBlock('head');
 
   $stores = Mage::app()-&gt;getStores();
   $prod = Mage::registry('current_product');
   $categ = Mage::registry('current_category');
 
   if($headblock)
   {
     foreach ($stores as $store)
     {
       if($prod){
         $categ ? $categId=$categ-&gt;getId() : $categId = null;
         $url = $store-&gt;getBaseUrl() . Mage::helper('alwayly_alternate')-&gt;rewrittenProductUrl($prod-&gt;getId(), $categId, $store-&gt;getId());
       }else{
         $store-&gt;getCurrentUrl();
       }
       $storeCode = substr(Mage::getStoreConfig('general/locale/code', $store-&gt;getId()),0,2);
       $headBlock-&gt;addLinkRel('alternate"' . ' hreflang="' . $storeCode, $url);
     }
   }
   return $this;
 }
}
</code></pre>
<p>如你所见，我们循环所有的商店。当一个产品被设置，我们检查它的URL是否被重写。这是我们的助手要做的。如果一个产品没被设置，用getCurrentUrl()方法，我们能获取不同商店中的当前URL。</p>
<p>例如我们现在的URL是 www.example.com/shirts.html，在德语版的商店，它会是www.example.com/shirts.html?___store=german或者是www.example.com/de/shirts.html，这取决于你的Magento设置。</p>
<p>下一步，我们将获取区域代码的前一到两个字母。如果你有两个英文商店，一个为英国，一个为美国，那就完美了。在得到我们所要的信息后，我们将调用head块，使用addLinRel()方法将链接加到head。</p>
<p>现在，创建你的助手。</p>
<pre><code>
&lt;?php
class Alwayly_Alternate_Helper_Data extends Mage_Core_Helper_Abstract
{
    public function rewrittenProductUrl($productId, $categoryId, $storeId)
    {
        $coreUrl = Mage::getModel('core/url_rewrite');
        $idPath = sprintf('product/%d', $productId);
        if ($categoryId) {
            $idPath = sprintf('%s/%d', $idPath, $categoryId);
        }
        $coreUrl-&gt;setStoreId($storeId);
        $coreUrl-&gt;loadByIdPath($idPath);
        return $coreUrl-&gt;getRequestPath();
    }
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 01 Oct 2015 09:23:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在Magento网格列表中展示产品缩略图]]></title>
      <link>https://www.360magento.com/blog/grids-show-thumbnail/</link>
      <description><![CDATA[<p>编辑产品和改变产品在类别中的位置是一项不小的任务。特别是有一大堆产品需要编辑和排列，而且其中有些又很相似。</p>
<p>当然，你可以通过SKU，ID，价格或者其它的一些东西来区别它们。但是都不会比在网格列表中展示缩略图好。</p>
<p>在产品网格列表里展示缩略图并不复杂。有几种方法可以实现这个功能，但是几乎所有的方法都用到了渲染器去展示产品图片，就和我们即将做的一样。</p>
<p>在这个例子中，我们将注册我们的模块，重写一个Magento后太网格的块&mdash;&mdash;特别是<strong>&ldquo;Manage Categories&rdquo;</strong>，还要添加我们的代码来显示缩略图这个附加列。</p>
<p>让我们开始吧！</p>
<p>首先，注册我们的模块</p>
<p><strong>app/etc/modules/Alwayly_Thumbnail.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Thumbnail&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_Thumbnail&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>现在，配置你的模块，用你自己的版本来重写 <strong>&lsquo;catalog_category_tab_product&lsquo; </strong>块。</p>
<p><strong>app/code/local/Alwayly/Thumbnail/etc/config.xml</strong></p>
<pre><code>&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Thumbnail&gt;
            &lt;version&gt;1.0.0&lt;/version&gt;
        &lt;/Alwayly_Thumbnail&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;adminhtml&gt;
                &lt;rewrite&gt;                    &lt;catalog_category_tab_product&gt;Alwayly_Thumbnail_Block_Adminhtml_Catalog_Category_Tab_Product&lt;/catalog_category_tab_product&gt;
                &lt;/rewrite&gt;
            &lt;/adminhtml&gt;
        &lt;/blocks&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>将<strong>app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php</strong>中的代码粘贴到<strong>app/code/local/Alwayly/Thumbnail/Block/Adminhtml/Catalog/Category/Tab/Product.php</strong></p>
<pre><code>&lt;?php
class Alwayly_Thumbnail_Block_Adminhtml_Catalog_Category_Tab_Product extends Mage_Adminhtml_Block_Widget_Grid
{
    public function __construct()
    {
        parent::__construct();
        $this-&gt;setId('catalog_category_products');
        $this-&gt;setDefaultSort('entity_id');
        $this-&gt;setUseAjax(true);
    }
 
    public function getCategory()
    {
        return Mage::registry('category');
    }
 
    protected function _addColumnFilterToCollection($column)
    {
        // Set custom filter for in category flag
        if ($column-&gt;getId() == 'in_category') {
            $productIds = $this-&gt;_getSelectedProducts();
            if (empty($productIds)) {
                $productIds = 0;
            }
            if ($column-&gt;getFilter()-&gt;getValue()) {
                $this-&gt;getCollection()-&gt;addFieldToFilter('entity_id', array('in'=&gt;$productIds));
            }
            elseif(!empty($productIds)) {
                $this-&gt;getCollection()-&gt;addFieldToFilter('entity_id', array('nin'=&gt;$productIds));
            }
        }
        else {
            parent::_addColumnFilterToCollection($column);
        }
        return $this;
    }
 
    protected function _prepareCollection()
    {
        if ($this-&gt;getCategory()-&gt;getId()) {
            $this-&gt;setDefaultFilter(array('in_category'=&gt;1));
        }
        $collection = Mage::getModel('catalog/product')-&gt;getCollection()
                          -&gt;addAttributeToSelect('name')
                          -&gt;addAttributeToSelect('sku')
                          -&gt;addAttributeToSelect('price')
                          -&gt;addAttributeToSelect('thumbnail')
                          -&gt;addStoreFilter($this-&gt;getRequest()-&gt;getParam('store'))
                          -&gt;joinField('position',
                                      'catalog/category_product',
                                      'position',
                                      'product_id=entity_id',
                                      'category_id='.(int) $this-&gt;getRequest()-&gt;getParam('id', 0),
                                      'left');
        $this-&gt;setCollection($collection);
 
        if ($this-&gt;getCategory()-&gt;getProductsReadonly()) {
            $productIds = $this-&gt;_getSelectedProducts();
            if (empty($productIds)) {
                $productIds = 0;
            }
            $this-&gt;getCollection()-&gt;addFieldToFilter('entity_id', array('in'=&gt;$productIds));
        }
 
        return parent::_prepareCollection();
    }
 
    protected function _prepareColumns()
    {
        if (!$this-&gt;getCategory()-&gt;getProductsReadonly()) {
            $this-&gt;addColumn('in_category', array(
                'header_css_class' =&gt; 'a-center',
                'type'      =&gt; 'checkbox',
                'name'      =&gt; 'in_category',
                'values'    =&gt; $this-&gt;_getSelectedProducts(),
                'align'     =&gt; 'center',
                'index'     =&gt; 'entity_id'
            ));
        }
        $this-&gt;addColumn('entity_id', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('ID'),
            'sortable'  =&gt; true,
            'width'     =&gt; '60',
            'index'     =&gt; 'entity_id'
        ));
        $this-&gt;addColumn('name', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Name'),
            'index'     =&gt; 'name'
        ));
        $this-&gt;addColumn('image', array(
            'header' =&gt; Mage::helper('catalog')-&gt;__('Image'),
            'align' =&gt; 'left',
            'index' =&gt; 'image',
            'width'     =&gt; '97',
            'renderer' =&gt; 'Alwayly_Thumbnail_Block_Adminhtml_Template_Grid_Renderer_Image'
        ));
        $this-&gt;addColumn('sku', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('SKU'),
            'width'     =&gt; '80',
            'index'     =&gt; 'sku'
        ));
        $this-&gt;addColumn('price', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Price'),
            'type'  =&gt; 'currency',
            'width'     =&gt; '1',
            'currency_code' =&gt; (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
            'index'     =&gt; 'price'
        ));
        $this-&gt;addColumn('position', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Position'),
            'width'     =&gt; '1',
            'type'      =&gt; 'number',
            'index'     =&gt; 'position',
            'editable'  =&gt; !$this-&gt;getCategory()-&gt;getProductsReadonly()
            //'renderer'  =&gt; 'adminhtml/widget_grid_column_renderer_input'
        ));
 
        return parent::_prepareColumns();
    }
 
    public function getGridUrl()
    {
        return $this-&gt;getUrl('*/*/grid', array('_current'=&gt;true));
    }
 
    protected function _getSelectedProducts()
    {
        $products = $this-&gt;getRequest()-&gt;getPost('selected_products');
        if (is_null($products)) {
            $products = $this-&gt;getCategory()-&gt;getProductsPosition();
            return array_keys($products);
        }
        return $products;
    }
}
</code></pre>
<p>现在，插入上面的代码，这将选择一个产品的附加属性&mdash;&mdash;&ldquo;thumbnail&rdquo;，创建一个名为&ldquo;Image&rdquo;的列。注意到，你可以在任何包含产品的网格里做这些，只需要重写一个不同的块。</p>
<p>最后，我们将创建一个在89行被调用的自己的渲染器。</p>
<pre><code>
'renderer' =&gt; 'Alwayly_Thumbnail_Block_Adminhtml_Template_Grid_Renderer_Image'

app/code/local/Alwayly/Thumbnail/Block/Adminhtml/Template/Grid/Renderer/Image.php
&lt;?php
class Alwayly_Thumbnail_Block_Adminhtml_Template_Grid_Renderer_Image extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        $val = Mage::helper('catalog/image')-&gt;init($row, 'thumbnail')-&gt;resize(97);
        $out = "&lt;img src=". $val ." width='97px'/&gt;";
        return $out;
    }
}
</code></pre>
<p>这个渲染器获取了一行对象作为一个参数。它调用的图像助手初始化缩略图大小并重新调整为97像素（你可以改成你需要或喜欢的大小）。之后，它返回出现在你网格里的图像标签。我们还需要考虑到产品没有图片的情况。</p>
<p>最快捷的方式是复制产品占位符（placeholder）图像。我将Magento默认的占位符图像<strong>（skin\adminhtml\default\default\images\placeholder\thumbnail.jpg）</strong>拷贝到<strong>skin\adminhtml\default\default\images\catalog\product\placeholder\thumbnail.jpg</strong></p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 30 Sep 2015 08:07:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用编程的方式创建一个可配置产品]]></title>
      <link>https://www.360magento.com/blog/programmatically-magento-configurable/</link>
      <description><![CDATA[<p>之前写过一篇关于在Magento中用编程创建简单产品的文章。那么，对于可配置产品来说，事情就变得复杂了点。</p>
<p>如你所知，可配置产品就是由配置了不同选项（属性）的简单产品组成的。我们可以用这个结论来扩展我们创建简单产品的代码来进行配置。</p>
<pre><code>Mage::app()-&gt;setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$simpleProduct = Mage::getModel('catalog/product');
try {
$simpleProduct
//    -&gt;setStoreId(1) //you can set data in store scope
    -&gt;setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
    -&gt;setAttributeSetId(20) //ID of a attribute set named 'default'
    -&gt;setTypeId('simple') //product type
    -&gt;setCreatedAt(strtotime('now')) //product creation time
//    -&gt;setUpdatedAt(strtotime('now')) //product update time
    -&gt;setSku('simple99y') //SKU
    -&gt;setName('test simple product99') //product name
    -&gt;setWeight(4.0000)
    -&gt;setStatus(1) //product status (1 - enabled, 2 - disabled)
    -&gt;setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
    -&gt;setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
    -&gt;setManufacturer(28) //manufacturer id
    -&gt;setColor(24)
    -&gt;setNewsFromDate('06/26/2014') //product set as new from
    -&gt;setNewsToDate('06/30/2014') //product set as new to
    -&gt;setCountryOfManufacture('AF') //country of manufacture (2-letter country code)
    -&gt;setPrice(11.22) //price in form 11.22
    -&gt;setCost(22.33) //price in form 11.22
    -&gt;setSpecialPrice(00.44) //special price in form 11.22
    -&gt;setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY)
    -&gt;setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY)
    -&gt;setMsrpEnabled(1) //enable MAP
    -&gt;setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config)
    -&gt;setMsrp(99.99) //Manufacturer's Suggested Retail Price
    -&gt;setMetaTitle('test meta title 2')
    -&gt;setMetaKeyword('test meta keyword 2')
    -&gt;setMetaDescription('test meta description 2')
    -&gt;setDescription('This is a long description')
    -&gt;setShortDescription('This is a short description')
    -&gt;setMediaGallery(array('images' =&gt; array(), 'values' =&gt; array())) //media gallery initialization
    -&gt;setStockData(array(
            'use_config_manage_stock' =&gt; 0, //'Use config settings' checkbox
            'manage_stock' =&gt; 1, //manage stock
            'min_sale_qty' =&gt; 1, //Minimum Qty Allowed in Shopping Cart
            'max_sale_qty' =&gt; 2, //Maximum Qty Allowed in Shopping Cart
            'is_in_stock' =&gt; 1, //Stock Availability
            'qty' =&gt; 999 //qty
        )
    )
    -&gt;setCategoryIds(array(3, 10)); //assign product to categories
    $simpleProduct-&gt;save();
} catch (Exception $e) {
    Mage::log($e-&gt;getMessage());
    echo $e-&gt;getMessage();
}
</code></pre>
<p>上面的代码将创建一个简单产品，这里我就不详细讲了。如果你想要深入了解，你可以点击<a title="电商网站建设" href="http://www.360magento.com/blog/programmatically-magento-simple">这个链接</a>看看我之前的那篇文章。</p>
<p>现在我们要做的就是创建一个可配置产品并把这个简单产品指向它。</p>
<pre><code>$configProduct = Mage::getModel('catalog/product');,
try {
$configProduct
//    -&gt;setStoreId(1) //you can set data in store scope
        -&gt;setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
        -&gt;setAttributeSetId(20) //ID of a attribute set named 'default'
        -&gt;setTypeId('configurable') //product type
        -&gt;setCreatedAt(strtotime('now')) //product creation time
//    -&gt;setUpdatedAt(strtotime('now')) //product update time
        -&gt;setSku('configurable96') //SKU
        -&gt;setName('test config product96') //product name
        -&gt;setWeight(4.0000)
        -&gt;setStatus(1) //product status (1 - enabled, 2 - disabled)
        -&gt;setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
        -&gt;setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
        -&gt;setManufacturer(28) //manufacturer id
        -&gt;setNewsFromDate('06/26/2014') //product set as new from
        -&gt;setNewsToDate('06/30/2014') //product set as new to
        -&gt;setCountryOfManufacture('AF') //country of manufacture (2-letter country code)
        -&gt;setPrice(11.22) //price in form 11.22
        -&gt;setCost(22.33) //price in form 11.22
        -&gt;setSpecialPrice(00.44) //special price in form 11.22
        -&gt;setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY)
        -&gt;setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY)
        -&gt;setMsrpEnabled(1) //enable MAP
        -&gt;setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config)
        -&gt;setMsrp(99.99) //Manufacturer's Suggested Retail Price
        -&gt;setMetaTitle('test meta title 2')
        -&gt;setMetaKeyword('test meta keyword 2')
        -&gt;setMetaDescription('test meta description 2')
        -&gt;setDescription('This is a long description')
        -&gt;setShortDescription('This is a short description')
        -&gt;setMediaGallery(array('images' =&gt; array(), 'values' =&gt; array())) //media gallery initialization
        -&gt;setStockData(array(
                'use_config_manage_stock' =&gt; 0, //'Use config settings' checkbox
                'manage_stock' =&gt; 1, //manage stock
                'is_in_stock' =&gt; 1, //Stock Availability
            )
        )
        -&gt;setCategoryIds(array(3, 10)) //assign product to categories
    ;
    /**/
    /** assigning associated product to configurable */
    /**/
    $configProduct-&gt;getTypeInstance()-&gt;setUsedProductAttributeIds(array(92)); //attribute ID of attribute 'color' in my store
    $configurableAttributesData = $configProduct-&gt;getTypeInstance()-&gt;getConfigurableAttributesAsArray();
 
    $configProduct-&gt;setCanSaveConfigurableAttributes(true);
    $configProduct-&gt;setConfigurableAttributesData($configurableAttributesData);
 
    $configurableProductsData = array();
    $configurableProductsData['920'] = array( //['920'] = id of a simple product associated with this configurable
        '0' =&gt; array(
            'label' =&gt; 'Green', //attribute label
            'attribute_id' =&gt; '92', //attribute ID of attribute 'color' in my store
            'value_index' =&gt; '24', //value of 'Green' index of the attribute 'color'
            'is_percent' =&gt; '0', //fixed/percent price for this option
            'pricing_value' =&gt; '21' //value for the pricing
        )
    );
    $configProduct-&gt;setConfigurableProductsData($configurableProductsData);
    $configProduct-&gt;save();
 
    echo 'success';
} catch (Exception $e) {
    Mage::log($e-&gt;getMessage());
    echo $e-&gt;getMessage();
}
</code></pre>
<p>就是这样了！你的可配置产品被合理设置并在前台可见。值得注意的是，你需要分配同样的属性集到可配置产品和它相关的产品。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 30 Sep 2015 07:33:53 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[以编程方式（手动）创建Magento中的简单产品]]></title>
      <link>https://www.360magento.com/blog/programmatically-magento-simple/</link>
      <description><![CDATA[<p>在开发过程中，你经常需要一些可用的数据来做测试。Magento提供了包含一些产品的示例数据。可事实是，当你创建了自己的属性集或者产品类型，想要加入到你的产品里去时，这个示例数据就显得没什么用了。针对这点，你需要自己添加一些商品。</p>
<p>有时在后台添加就可以了，但当你要添加多种产品、继续开发新特征或者做一些大的改动时，用后台操作就变得很痛苦了。这个问题用编程方式来添加产品就能轻松解决了。我将用这种方法来添加一个简单产品。你可以修改一下这个代码来适应其它产品类型，也可以用它来作为产品导入脚本。</p>
<p>你可以通过一个observer来调用，设置为一个控制器方法，或者从一个视图文件中调用，随你喜欢。要注意的是，当你观测一些事件时不要使用调用每个控制器方法的那个。如果你使用了，那么确定产品中是否存在同样的SKU。针对这种情况，你可以用下面代码中第四行的&ldquo;if&rdquo;判断。</p>
<p>如果你没有按照我说的做，那么会出现下面的SQL报错：</p>
<pre><code>SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '193-1' for key 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID'
</code></pre>
<p>下面就是我提到的代码：</p>
<pre><code>&lt;?php
Mage::app()-&gt;setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product');
//    if(!$product-&gt;getIdBySku('testsku61')):
 
try{
$product
//    -&gt;setStoreId(1) //you can set data in store scope
    -&gt;setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
    -&gt;setAttributeSetId(9) //ID of a attribute set named 'default'
    -&gt;setTypeId('simple') //product type
    -&gt;setCreatedAt(strtotime('now')) //product creation time
//    -&gt;setUpdatedAt(strtotime('now')) //product update time
 
    -&gt;setSku('testsku61') //SKU
    -&gt;setName('test product21') //product name
    -&gt;setWeight(4.0000)
    -&gt;setStatus(1) //product status (1 - enabled, 2 - disabled)
    -&gt;setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
    -&gt;setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
    -&gt;setManufacturer(28) //manufacturer id
    -&gt;setColor(24)
    -&gt;setNewsFromDate('06/26/2014') //product set as new from
    -&gt;setNewsToDate('06/30/2014') //product set as new to
    -&gt;setCountryOfManufacture('AF') //country of manufacture (2-letter country code)
 
    -&gt;setPrice(11.22) //price in form 11.22
    -&gt;setCost(22.33) //price in form 11.22
    -&gt;setSpecialPrice(00.44) //special price in form 11.22
    -&gt;setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY)
    -&gt;setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY)
    -&gt;setMsrpEnabled(1) //enable MAP
    -&gt;setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config)
    -&gt;setMsrp(99.99) //Manufacturer's Suggested Retail Price
 
    -&gt;setMetaTitle('test meta title 2')
    -&gt;setMetaKeyword('test meta keyword 2')
    -&gt;setMetaDescription('test meta description 2')
 
    -&gt;setDescription('This is a long description')
    -&gt;setShortDescription('This is a short description')
 
    -&gt;setMediaGallery (array('images'=&gt;array (), 'values'=&gt;array ())) //media gallery initialization
    -&gt;addImageToMediaGallery('media/catalog/product/1/0/10243-1.png', array('image','thumbnail','small_image'), false, false) //assigning image, thumb and small image to media gallery
 
    -&gt;setStockData(array(
                       'use_config_manage_stock' =&gt; 0, //'Use config settings' checkbox
                       'manage_stock'=&gt;1, //manage stock
                       'min_sale_qty'=&gt;1, //Minimum Qty Allowed in Shopping Cart
                       'max_sale_qty'=&gt;2, //Maximum Qty Allowed in Shopping Cart
                       'is_in_stock' =&gt; 1, //Stock Availability
                       'qty' =&gt; 999 //qty
                   )
    )
 
    -&gt;setCategoryIds(array(3, 10)); //assign product to categories
$product-&gt;save();
//endif;
}catch(Exception $e){
Mage::log($e-&gt;getMessage());
}</code></pre>
<p>我们设定这款产品在&ldquo;默认值&rdquo;范围。您可以为一个特定的商店取消第5行的代码来设置产品数据，。例如，你可以这样做：</p>
<pre><code>...
    -&gt;setMetaTitle('test meta title 2')
    -&gt;setMetaKeyword('test meta keyword 2')
    -&gt;setMetaDescription('test meta description 2')
    -&gt;setStoreId(2)
    -&gt;setMetaTitle('Some other meta title')
    -&gt;setMetaKeyword('Some other meta keyword')
    -&gt;setMetaDescription('Some other meta description')
$product-&gt;save();
</code></pre>
<p>上面的代码将为ID为2的商店设置不同的meta name。</p>
<p>你可以通过登录到产品存储传输数据来找到所有你能设置的产品值。我在考虑当你存储商品是后台调用的ProductController里的saveAction方法。 <strong>app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php</strong></p>
<pre><code>public function saveAction()
{
    $storeId        = $this-&gt;getRequest()-&gt;getParam('store');
    $redirectBack   = $this-&gt;getRequest()-&gt;getParam('back', false);
    $productId      = $this-&gt;getRequest()-&gt;getParam('id');
    $isEdit         = (int)($this-&gt;getRequest()-&gt;getParam('id') != null);
 
    $data = $this-&gt;getRequest()-&gt;getPost();
    if ($data) {
        Mage::log($data);</code></pre>
<p>只需要把最后一行代码加入到相应的位置。当你完成开发以后记得删除。这将获取一个你存储的数据的数组。例如，为了设置 [meta_title]，你会使用setMetaTitle(&lsquo;somevalue&rsquo;)魔术方法。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 29 Sep 2015 03:16:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[获取magento可配置产品里被选中的简单产品]]></title>
      <link>https://www.360magento.com/blog/simple-id-in-configurable/</link>
      <description><![CDATA[<p>如果你想在Magento客户端获取可配置产品里被选中的简单产品，你有很多种不同的方法。</p>
<p>这里有一种简单的方法，不用代码修改，不要新的模版甚至模。值需要一个Java脚本和布局更新。</p>
<pre><code>
Product.Config.prototype.getIdOfSelectedProduct = function()
{
     var existingProducts = new Object();
 
     for(var i=this.settings.length-1;i&gt;=0;i--)
     {
         var selected = this.settings[i].options[this.settings[i].selectedIndex];
         if(selected.config)
         {
         	for(var iproducts=0;iproducts&lt;selected.config.products.length;iproducts++)
         	{
         		var usedAsKey = selected.config.products[iproducts]+"";
         		if(existingProducts[usedAsKey]==undefined)
         		{
         			existingProducts[usedAsKey]=1;
         		}
         		else
         		{
         			existingProducts[usedAsKey]=existingProducts[usedAsKey]+1;
         		}
             }
         }
     }
 
     for (var keyValue in existingProducts)
     {
     	for ( var keyValueInner in existingProducts)
         {
         	if(Number(existingProducts[keyValueInner])&lt;Number(existingProducts[keyValue]))
         	{
         		delete existingProducts[keyValueInner];
         	}
         }
     }
 
     var sizeOfExistingProducts=0;
     var currentSimpleProductId = "";
     for ( var keyValue in existingProducts)
     {
     	currentSimpleProductId = keyValue;
     	sizeOfExistingProducts=sizeOfExistingProducts+1
     }
 
     if(sizeOfExistingProducts==1)
     {
    	 alert("Selected product is: "+currentSimpleProductId)
     }
}
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 29 Sep 2015 01:38:21 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[中国2015上半年跨境电商交易额达7.64万亿 ]]></title>
      <link>https://www.360magento.com/blog/news-ecommerce-china/</link>
      <description><![CDATA[<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>交易规模：2015上半年<a title="magento跨境电商系统" href="http://www.360magento.com/">中国跨境电商</a>交易规模达2万亿</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">2015年上半年，中国跨境电商交易规模为2万亿，同比增长42.8%，占我国进出口总值的17.3%。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">从上述数据分析可以知道，上半年中国对外贸易呈现低迷态势，而跨境电子商务则呈现出蓬勃的发展态势。未来会有更多企业加入跨境电子商务行列，中国跨境电子商务从规模到质量都会有大幅度的提高，在国际市场的影响力会进一步增强。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">随着跨境电商试点城市数量的增多，电商平台跨境业务将借机不断扩大，地方政府也将加速建设自有电商服务平台，由此产生的大量跨境贸易交易规模将在未来予以呈现。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>进出口比例：出口84.8% 进口比例15.2%</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">2015年上半年，中国跨境电商的进出口结构出口占比达到84.8%，进口比例15.2%。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">&ldquo;目前，中国出口电商仍为跨境电商的主角，随着政策的推动以及消费需求的旺盛，进口电商得到了快速的发展，占比比例有所上升，但幅度不大。试点政策的逐步放开以及更多企业的参与，都将推动进口电商的发展。&rdquo;中国电子商务研究中心高级分析师张周平表示。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>模式结构：跨境电商B2B占比91.9% B2C占比8.1%</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">2015年上半年，中国跨境电商的交易模式跨境电商B2B交易占比达到91.9%，跨境电商B2B交易占据绝对优势，跨境电商B2C交易占比8.1%。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">对此，中国电子商务研究中心高级分析师张周平认为，B2B模式的交易方式始终占据行业主流，这跟两种模式针对的对象有关。B2B交易量级大、且订单稳定， 所以该种方式在未来仍是主流。B2C模式下订单趋向碎片化和小额化，但需求强劲，在未来几年，B2C占比比例也将会逐步提升。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>市场趋势</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>　　趋势一：<a title="magento跨境电商系统" href="http://www.360magento.com/">跨境电商</a>成为对外贸易&ldquo;新增长点&rdquo;</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">2015年是中国跨境电商的转折年。激烈的价格战和同质化竞争，传统跨境电商的经营模式和增长模式受到严峻考验。以草根创业和价格战为特色的第一波跨境电 商已经过去，未来一段时期将迎来第二波跨境电商热潮。传统企业和品牌商的觉醒和爆发，中小制造型企业面对买家需求封闭、订单周期长、汇率风险高、利润空间 低等传统外贸限制，对跨境电子商务的需求更为迫切。出口易在原来的基础上更要抓住机遇发展自身，满足市场对新型跨境电商的需求。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>趋势二：产品品类和销售市场更加多元化</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">随着<a title="magento跨境电商系统" href="http://www.360magento.com/">跨境电商</a>的发展，跨境电商交易呈现新的特征：交易产品向多品类延伸、交易对象向多区域拓展。从销售产品品类看，跨境电商企业销售的产品品类从服装服饰、3C电子、计算机及配件、家居园艺、珠宝、汽车配件、食品药品等便捷运输产品向家居、汽车等大型产品扩展。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>趋势三：跨境进口电商将集中爆发</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">未来跨境进口电商将集中爆发，随着政策倾斜进入快速&ldquo;成长期&rdquo;。2014年，在&ldquo;跨境交易&rdquo;与&ldquo;电子商务&rdquo;双引擎的拉动下，跨境进口型电商风生水起。先是 天猫、亚马逊中国，继而是苏宁、聚美优品纷纷挤进跨境电商2.0时代，进入产业信息化时代，即结合传统资源，打造海外供应链，多渠道运营(自营或招商的形 式)，拉开了品牌国际化战略的序幕。</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><strong>趋势四：品牌争夺战打响，成关键转折点</strong></p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;">各大电商平台开始盯上有限的品牌资源，中小电商也在激烈的价格战中意识到品牌的重要性。但品牌建立需要一定的历史背景，市场条件等多种因素，中国跨境电商 创牌之路将会异常艰辛，但机会尚存，如在新兴市场国家创牌就相对较易，比如M2C供销平台的品质供销品牌聚焦，为各大电商卖家提供了更多机会。在技术日新 月异的电子产品、智能产品方面，中国和发达国家之间其实处于同一起跑线，更加容易创牌成功，中国跨境电商的发展其实已经到了一个非常关键的转折点。（来 源：<span style="color: #333333; font-family: 宋体; font-size: 14px; line-height: 26px; background-color: #ffffff;">中国电子商务研究中心</span>）</p>
<p style="color: #333333; font-family: 宋体; font-size: 14px; text-indent: 2em; background-color: #ffffff;"><a title="magento跨境电商系统" href="http://www.360magento.com/">360Magento</a>为中国大中小企业的跨境电商提供有力的技术支持后盾，为中国创建跨境<a title="magento跨境电商系统" href="http://www.360magento.com/">电商独立品牌</a>做出重要贡献，请联系我们，竭诚为您服务，祝君生意红红火火</p>]]></description>
      <pubDate>Mon, 28 Sep 2015 14:15:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中上一个/下一个产品按钮]]></title>
      <link>https://www.360magento.com/blog/magento-prevnext-extension/</link>
      <description><![CDATA[<p>现在，已经有好几个Magento的上一个/下一个插件。说实话，我并不知道它们功能如何，因为我没用过。我打算自己写这个功能，依靠分层导航筛选并按网格列表中的顺序排列。这儿是插件代码的示例（部分但是功能齐全）</p>
<p>首先我们创建Alwayly_Prevnext插件的config.xml</p>
<pre><code>...
    &lt;frontend&gt;         
        &lt;events&gt;
            &lt;controller_action_postdispatch&gt;
                &lt;observers&gt;
                    &lt;alwayly_prevnext_set_filtered_category_product_collection&gt;
                        &lt;class&gt;alwayly_prevnext/observer&lt;/class&gt;
                        &lt;method&gt;setAlwaylyFilteredCategoryProductCollection&lt;/method&gt;
                    &lt;/alwayly_prevnext_set_filtered_category_product_collection&gt;
                &lt;/observers&gt;                
            &lt;/controller_action_postdispatch&gt;
        &lt;/events&gt;   
    &lt;/frontend&gt;
...

</code></pre>
<p>现在，我们实现观测方法。在这里，我抓取已经读取的产品集合，产品网格网格列表的最后一个产品。如你所见，我注重 &ldquo;category&rdquo; 控制器, &ldquo;view&rdquo;动作，从集合中提取产品ID并将它们设置到alwayly_filtered_category_product_collection的session关键字下。这样一来我就能获取最后被详细页最后被浏览的产品，然后确定它的前一个和后一个产品。</p>
<pre><code>class Alwayly_Prevnext_Model_Observer
{
    public function setAlwaylyFilteredCategoryProductCollection()
    {
        /**
         * There might be some illogical buggy behavior when coming directly 
         * from "Related products" / "Recently viewed" products block. 
         * Nothing that should break the page however.
         */
	if (Mage::app()-&gt;getRequest()-&gt;getControllerName() == 'category' &amp;&amp; Mage::app()-&gt;getRequest()-&gt;getActionName() == 'view') {
 
		$products = Mage::app()-&gt;getLayout()
				-&gt;getBlockSingleton('Mage_Catalog_Block_Product_List')
				-&gt;getLoadedProductCollection()
				-&gt;getColumnValues('entity_id');
 
		Mage::getSingleton('core/session')
				-&gt;setAlwaylyFilteredCategoryProductCollection($products);
 
		unset($products);
	}
 
	return $this;        
    }
} 
</code></pre>
<p>最后，助手类支持getPreviousProduct和getNextProduct方法</p>
<pre><code>class Alwayly_Prevnext_Helper_Data extends Mage_Core_Helper_Abstract
{
    /**
     * @return Mage_Catalog_Model_Product or FALSE
     */
    public function getPreviousProduct()
    {
            $prodId = Mage::registry('current_product')-&gt;getId();
 
            $positions = Mage::getSingleton('core/session')-&gt;getAlwaylyFilteredCategoryProductCollection();
 
            if (!$positions) {
                $positions = array_reverse(array_keys(Mage::registry('current_category')-&gt;getProductsPosition()));
            }
 
            $cpk = @array_search($prodId, $positions);
 
            $slice = array_reverse(array_slice($positions, 0, $cpk));
 
            foreach ($slice as $productId) {
                    $product = Mage::getModel('catalog/product')
                                                    -&gt;load($productId);
 
                    if ($product &amp;&amp; $product-&gt;getId() &amp;&amp; $product-&gt;isVisibleInCatalog() &amp;&amp; $product-&gt;isVisibleInSiteVisibility()) {
                            return $product;
                    }
            }
 
            return false;
    }
 
    /**
     * @return Mage_Catalog_Model_Product or FALSE
     */
    public function getNextProduct()
    {
            $prodId = Mage::registry('current_product')-&gt;getId();
 
            $positions = Mage::getSingleton('core/session')-&gt;getAlwaylyFilteredCategoryProductCollection();
 
            if (!$positions) {
                $positions = array_reverse(array_keys(Mage::registry('current_category')-&gt;getProductsPosition()));
            }            
 
            $cpk = @array_search($prodId, $positions);
 
            $slice = array_slice($positions, $cpk + 1, count($positions));
 
            foreach ($slice as $productId) {
                    $product = Mage::getModel('catalog/product')
                                                    -&gt;load($productId);
 
                    if ($product &amp;&amp; $product-&gt;getId() &amp;&amp; $product-&gt;isVisibleInCatalog() &amp;&amp; $product-&gt;isVisibleInSiteVisibility()) {
                            return $product;
                    }
            }
 
            return false;
    }
}
</code></pre>
<p>这个方法里有个问题，它不能弥补剩余类别产品中可能的页。事实是，抓去类别产品ID的时候我们仍然不知道其它可能页面中这个产品的ID。然而，这将要求在服务器上更多的负载，因为它需要一个或两个额外的数据库查询。此外，时不时地可能出现一些不合逻辑的上一个/下一个。因此，这个方法还有提升的空间。但要知道的是，这种方法并不会破坏什么。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 28 Sep 2015 11:00:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[15分钟内创建一个magento"Facebook like"按钮插件]]></title>
      <link>https://www.360magento.com/blog/facebook-like-button-extension/</link>
      <description><![CDATA[<p>Facebook Like按钮很简单，也容易实现。你所要做的只是从Facebook开发者的网站粘贴2-3节，然后调整下。</p>
<p>既然我们要给Magento编代码，那么何不做一个插件呢，Alwayly_Flike。考虑到工作的预算和时间，我要尽可能快地完成编码，但是任然要按照&ldquo;Magento规则&rdquo;。考虑到这一点，下面是我插件的config.xml内容：</p>
<pre><code>&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Flike&gt;
            &lt;version&gt;1.0.0.0&lt;/version&gt;
        &lt;/Alwayly_Flike&gt;
    &lt;/modules&gt;
    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;alwayly_flike&gt;
                    &lt;file&gt;alwayly/flike/flike.xml&lt;/file&gt;
                &lt;/alwayly_flike&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;        
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>由于上面的配置中包含了flike.xml，所以我们需要添加<strong>alwayly/flike/flike.xml</strong>到我能的主题布局文件夹下。这是flike.xml代码：</p>
<pre><code>&lt;layout version="0.1.0"&gt;
   &lt;catalog_product_view&gt;
        &lt;reference name="head"&gt;
            &lt;block type="core/template" name="alwayly_flike_tags" template="alwayly/flike/tags.phtml" before="-" /&gt;
        &lt;/reference&gt;        
        &lt;reference name="after_body_start"&gt;
            &lt;block type="core/template" name="alwayly_flike_js" template="alwayly/flike/js.phtml" before="-" /&gt;          
        &lt;/reference&gt;
        &lt;reference name="alert.urls"&gt;
            &lt;block type="core/template" name="alwayly_flike_button" template="alwayly/flike/button.phtml" before="-" /&gt;
        &lt;/reference&gt;
    &lt;/catalog_product_view&gt;
&lt;/layout&gt;
</code></pre>
<p>为了简单起见和预算的限制，我决定用&ldquo;core/template&rdquo;模块。现在我们就要开始写flike.xml中提到的tags.phtml，js.phtml和button.phtml文件了。</p>
<p>tags.phtml文件包含&ldquo;开放图形标签&rdquo;，当我们Like我们的产品时，我们要获取正确的产品图片描述等等。由于这些都需要在网页的&ldquo;head&rdquo;下，所以我引用了head模块。下面是tags.phtml的代码：</p>
<pre><code>&lt;?php $_product = Mage::registry('current_product') ?&gt;
&lt;?php if ($_product &amp;&amp; $_product-&gt;getId()): ?&gt;
&lt;meta property="og:title" content="&lt;?php echo $this-&gt;stripTags($_product-&gt;getName(), null, true) ?&gt;" /&gt;
&lt;meta property="og:type" content="product" /&gt;
&lt;meta property="og:image" content="&lt;?php echo $this-&gt;helper('catalog/image')-&gt;init($_product, 'small_image')-&gt;resize(130, 110); ?&gt;" /&gt;
&lt;meta property="og:url" content="&lt;?php echo $_product-&gt;getProductUrl() ?&gt;" /&gt;
&lt;meta property="og:site_name" content="&lt;?php echo Mage::app()-&gt;getStore()-&gt;getName() ?&gt;" /&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>注意图片大小周围的细节。这符合Facebook官方对og的定义：图像作为Feed链接。缩略图的宽和高超过50像素，不超过130x110像素。高和宽的比或者宽和高的比不超过3.例如139x39像素的图片就不会显示，宽和高的比为3.23超过了3。图片会被重新定义成合适的大小。</p>
<p>js.phtml文件包含Like按钮的JAVA脚本：</p>
<pre><code>&lt;?php $_product = Mage::registry('current_product') ?&gt;
&lt;?php if ($_product &amp;&amp; $_product-&gt;getId()): ?&gt;
&lt;div id="fb-root"&gt;&lt;/div&gt;
&lt;script&gt;
(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
&lt;/script&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>最后，button.phtml包含实际的按钮：</p>
<pre><code>&lt;?php $_product = Mage::registry('current_product') ?&gt;
&lt;?php if ($_product &amp;&amp; $_product-&gt;getId()): ?&gt;
&lt;div class="fb-like" data-href="&lt;?php echo $_product-&gt;getProductUrl() ?&gt;" data-send="true" data-width="450" data-show-faces="true"&gt;&lt;/div&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>就是这样了。如果你没有在你的主题你做过多的修改，更确切地说删除产品详细页的&ldquo;alert.urls&rdquo; 块。那么你就能在产品名字附近看到Facebook Like按钮了。</p>
<p>鉴于这是一个简单的例子，它还有很大的空间可供你开发。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 28 Sep 2015 08:47:33 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[管理Magento账户面板的导航链接]]></title>
      <link>https://www.360magento.com/blog/managing-navigation-links/</link>
      <description><![CDATA[<p>在本文中，我将演示如何管理用户账户面板里的导航链接：一种去掉账户面板链接时要避免的方式和另一种要执行的方式。</p>
<p>一种删除指定链接的方法是注释掉显示这个链接的动作。我将以账户面板的 &ldquo;Account Information&rdquo;链接为例，这个链接位于<strong> app/design/frontend/base/default/layout/customer.xml</strong>。</p>
<pre><code>&lt;action method="addLink" translate="label" module="customer"&gt;
  &lt;name&gt;account&lt;/name&gt;
  &lt;path&gt;customer/account/&lt;/path&gt;
  &lt;label&gt;Account Dashboard&lt;/label&gt;
&lt;/action&gt;
</code></pre>
<p>然而，编辑Magento的核心文件从来都不是一个好的想法。我们将用些不一样的东西来替代这个方法。</p>
<p>首先，我们必须编辑我们的config.xml文件，我们要重写Magento的核心文件。</p>
<pre><code>
&lt;global&gt;
    &lt;blocks&gt;
        &lt;customer&gt;
            &lt;rewrite&gt;
                &lt;account_navigation&gt;Alwayly_Core_Block_Customer_Account_Navigation&lt;/account_navigation&gt;
            &lt;/rewrite&gt;
        &lt;/customer&gt;
    &lt;/blocks&gt;
&lt;/global&gt;
</code></pre>
<p>接着，我们要定义我们的布局文件：</p>
<pre><code>    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;alwayly_core&gt;
                    &lt;file&gt;alwayly_core.xml&lt;/file&gt;
                &lt;/alwayly_core&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;
    &lt;/frontend&gt;
</code></pre>
<p>下一步就是用下面的代码创建<strong>Block/Customer/Account/Navigation.php</strong></p>
<pre><code>class Alwayly_Core_Block_Customer_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    public function removeLinkByName($name) {
        unset($this-&gt;_links[$name]);
    }
}
</code></pre>
<p>最后要做的就是创建布局文件<strong>app/design/frontend/default/default/layout/alwayly_core.xml</strong></p>
<pre><code>
&lt;?xml version="1.0" ?&gt;
&lt;layout version="0.1.0"&gt;
    &lt;customer_account translate="label"&gt;
        &lt;reference name="customer_account_navigation"&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;billing_agreements&lt;/name&gt;&lt;/action&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;recurring_profiles&lt;/name&gt;&lt;/action&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;tags&lt;/name&gt;&lt;/action&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;my_wishlist&lt;/name&gt;&lt;/action&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;OAuth Customer Tokens&lt;/name&gt;&lt;/action&gt;
            &lt;action method="removeLinkByName"&gt;&lt;name&gt;my_downloadable_products&lt;/name&gt;&lt;/action&gt;
        &lt;/reference&gt;
    &lt;/customer_account&gt;
&lt;/layout&gt;
</code></pre>
<p>现在，对于每个我们想要移除的导航链接，我们需要加上连接名并把链接名写入名字标签。</p>
<p>下面列举出账户面板导航链接名（按默认显示排列）</p>
<ul>
<li>Account Dashboard</li>
<li>Account Information</li>
<li>Address Book</li>
<li>My Orders</li>
<li>Billing Agreements</li>
<li>Recurring Profiles</li>
<li>My Product Reviews</li>
<li>My Wishlist</li>
<li>My Applications</li>
<li>Newsletter Subscriptions</li>
<li>My Downloadable Products</li>
</ul>
<p>添加一个新的导航链接相对来说简单一些。我们要做的只是将以下代码加到我们的布局文件中</p>
<pre><code>&lt;?xml version="1.0" ?&gt;
&lt;layout version="0.1.0"&gt;
   &lt;customer_account translate="label"&gt;
        &lt;reference name="customer_account_navigation"&gt;
            &lt;action method="addLink"&gt;
                &lt;name&gt;test checkout&lt;/name&gt;
                &lt;path&gt;checkout&lt;/path&gt;
                &lt;label&gt;Alwayly Checkout&lt;/label&gt;
            &lt;/action&gt;
        &lt;/reference&gt;
    &lt;/customer_account&gt;
&lt;/layout&gt;
</code></pre>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 28 Sep 2015 04:43:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中产品库存不报警解决方案]]></title>
      <link>https://www.360magento.com/blog/product-stock-alerts/</link>
      <description><![CDATA[<p>最近我们的一个客户联系我们，告诉我们产品报警功能不再工作。在调查后，我发现最后的一封产品报警邮件是几个月前的。在此期间，我们已经在网站升级到Magento的EE，起初我想，也许在升级过程中出了问题。另一种可能是，客户也许修改了Transactional Email Template。在看完日志文件后，我没发现任何相关的邮件。系统虽然没有发送其它电子邮件。</p>
<p>在调查过程中，我看论坛上的其它开发者有相似的问题也没解决的。在追寻和查找后，我们发现问题所在。</p>
<p>简单说来，这个事件在Magento处理产品报库存警的集合方法里。我们的客户有超过40000封订阅和超过30000个需要将&ldquo;缺货&rdquo;状态改为&ldquo;有货&rdquo;。所以当Magento尝试从product_alert_stock表读取40000条记录到集合里的时候，由于内存限制而失败了。可能你的product_alert_stock表有超过20000记录时，产品库存报警功能就失效了。</p>
<p>解决方案相对简单。通过以1000为集合创建分页来遍历超过30000条记录。正如Magento在系统中所做的那样。新的功能是通过遍历所有的这些记录，循环出status=0（未处理）的记录，检查产品现在是否有货。当true=&gt; set status=1就发送电子邮件通知客户。</p>
<p>那么，让我们创建我们的模块，Alwayly_ProductAlert，这将提高Magento方法。</p>
<h2>1. Create file in app/etc/modules/ Alwayly_ProductAlert.xml with the following content:</h2>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_ProductAlert&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_ProductAlert&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<h2>2. Create file in app/code/local/Alwayly/ProductAlert/etc/ config.xml with the following content:</h2>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_ProductAlert&gt;
            &lt;version&gt;1.0.0.0&lt;/version&gt;
        &lt;/Alwayly_ProductAlert&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;models&gt;
            &lt;productalert&gt;
                &lt;rewrite&gt;
                    &lt;observer&gt;Alwayly_ProductAlert_Model_Observer&lt;/observer&gt;
                &lt;/rewrite&gt;
            &lt;/productalert&gt;
        &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>你可以看到我们重写了Mage_ProductAlert_Model_Observer类</p>
<h2>Create file in /www/app/code/local/Alwayly/ProductAlert/Model/ Observer.php with the following content:</h2>
<pre><code>
&lt;?php
 
/*
 * ProductAlert observer
*/
class Alwayly_ProductAlert_Model_Observer extends Mage_ProductAlert_Model_Observer
{
     /**
     * Process stock emails
     *
     * @param Mage_ProductAlert_Model_Email $email
     * @return Mage_ProductAlert_Model_Observer
     */
    protected function _processStock(Mage_ProductAlert_Model_Email $email)
    {
 
        $email-&gt;setType('stock');
 
        foreach ($this-&gt;_getWebsites() as $website) {
 
            /* @var $website Mage_Core_Model_Website */
 
            if (!$website-&gt;getDefaultGroup() || !$website-&gt;getDefaultGroup()-&gt;getDefaultStore()) {
 
                continue;
            }
            if (!Mage::getStoreConfig(
                self::XML_PATH_STOCK_ALLOW,
                $website-&gt;getDefaultGroup()-&gt;getDefaultStore()-&gt;getId()
            )) {
 
                continue;
            }
            try {
 
                $wholeCollection = Mage::getModel('productalert/stock')
                    -&gt;getCollection()
//                   -&gt;addWebsiteFilter($website-&gt;getId())
                    -&gt;addFieldToFilter('website_id', $website-&gt;getId())
                    -&gt;addFieldToFilter('status', 0)
                ;
//                $wholeCollection-&gt;getSelect()-&gt;order('alert_stock_id DESC');
 
                /*       table: !product_alert_stock!
                alert_stock_id: 1
                   customer_id: 1
                    product_id: 1
                    website_id: 1
                      add_date: 2013-04-26 12:08:30
                     send_date: 2013-04-26 12:28:16
                    send_count: 2
                        status: 1
                */
            }
            catch (Exception $e) {
                Mage::log('error-1-collection $e=' . $e-&gt;getMessage(), false, 'product_alert_stock_error.log', true);
                $this-&gt;_errors[] = $e-&gt;getMessage();
                return $this;
            }
 
            $previousCustomer = null;
            $email-&gt;setWebsite($website);
 
            try {
 
                $originalCollection = $wholeCollection;
                $count = null;
                $page  = 1;
                $lPage = null;
                $break = false;
 
                while ($break !== true) {
                    $collection = clone $originalCollection;
                    $collection-&gt;setPageSize(1000);
                    $collection-&gt;setCurPage($page);
                    $collection-&gt;load();
                    if (is_null($count)) {
                        $count = $collection-&gt;getSize();
                        $lPage = $collection-&gt;getLastPageNumber();
                    }
                    if ($lPage == $page) {
                        $break = true;
                    }
 
                    Mage::log('page=' . $page, false, 'check_page_count.log', true);
                    Mage::log('collection=' . (string)$collection-&gt;getSelect(), false, 'check_page_count.log', true);
 
                    $page ++;
 
                    foreach ($collection as $alert) {
 
                        try {
 
                            if (!$previousCustomer || $previousCustomer-&gt;getId() != $alert-&gt;getCustomerId()) {
 
                                $customer = Mage::getModel('customer/customer')-&gt;load($alert-&gt;getCustomerId());
                                if ($previousCustomer) {
                                    $email-&gt;send();
                                }
                                if (!$customer) {
                                    continue;
                                }
                                $previousCustomer = $customer;
                                $email-&gt;clean();
                                $email-&gt;setCustomer($customer);
 
                            }
                            else {
 
                                $customer = $previousCustomer;
                            }
 
                            $product = Mage::getModel('catalog/product')
                                -&gt;setStoreId($website-&gt;getDefaultStore()-&gt;getId())
                                -&gt;load($alert-&gt;getProductId());
                            /* @var $product Mage_Catalog_Model_Product */
                            if (!$product) {
 
                                continue;
                            }
 
                            $product-&gt;setCustomerGroupId($customer-&gt;getGroupId());
 
                            if ($product-&gt;isSalable()) {
 
                                $email-&gt;addStockProduct($product);
 
                                $alert-&gt;setSendDate(Mage::getModel('core/date')-&gt;gmtDate());
                                $alert-&gt;setSendCount($alert-&gt;getSendCount() + 1);
                                $alert-&gt;setStatus(1);
                                $alert-&gt;save();
 
                            }
                        }
                        catch (Exception $e) {
                            Mage::log('error-2-alert $e=' . $e-&gt;getMessage(), false, 'product_alert_stock_error.log', true);
                            $this-&gt;_errors[] = $e-&gt;getMessage();
                        }
                    }
                }
 
                Mage::log("\n\n", false, 'check_page_count.log', true);
 
            } catch (Exception $e) {
                Mage::log('error-3-steps $e=' . $e-&gt;getMessage(), false, 'product_alert_stock_error.log', true);
            }
 
            if ($previousCustomer) {
                try {
                    $email-&gt;send();
                }
                catch (Exception $e) {
                    $this-&gt;_errors[] = $e-&gt;getMessage();
                }
            }
        }
 
        return $this;
    }
 
    /**
     * Run process send product alerts
     */
    public function process()
    {
        Mage::log('ProductAlert started @' . now(), false, 'product_alert_workflow.log', true);
 
        $email = Mage::getModel('productalert/email');
        /* @var $email Mage_ProductAlert_Model_Email */
        $this-&gt;_processPrice($email);
        $this-&gt;_processStock($email);
        $this-&gt;_sendErrorEmail();
 
        Mage::log('ProductAlert finished @' . now(), false, 'product_alert_workflow.log', true);
 
        return $this;
    }
}
</code></pre>
<p>你可以看到，我们重写了process()和 _processStock()方法。在process()方法中，我们添加了Mage::log()创建起止时间到var/log/product_alert_workflow.log。这样我们就能知道脚本是否执行完成。同样的，我们增强_processStock()方法的功能，我们增加了一些Mage:log()调用来跟踪，看所有的行为是否按期待的方式表现。</p>
<p>最后，如果你不想等待你的Cron被触发，你可以在Magento根目录下创建一个文件，让我们调用它。</p>
<h2>Alwayly_cron.php</h2>
<pre><code>
&lt;?php

require_once 'app/Mage.php';
Mage::app();
 
try {
    Mage::getModel('productalert/observer')-&amp;gtprocess();
} catch (Exception $e) {
    Mage::log('error-0-start $e=' . $e-&amp;gtgetMessage() . ' @' . now(), false, 'product_alert_stock_error.log', true);
}
</code></pre>
<p>就是这些了，这个解决思路同样适用于产品价格报警。</p>
<p><span>360magento提供专业的基于magento系统的</span><a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a><span>，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></p>]]></description>
      <pubDate>Sun, 27 Sep 2015 15:10:56 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[向magento顶部菜单添加链接]]></title>
      <link>https://www.360magento.com/blog/adding-links-to-topmenu/</link>
      <description><![CDATA[<p>向顶部菜单或者主菜单中添加东西听起来很简单。但是，我们这里谈论的是<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">Magento</a>，它并不像听起来的那么容易。一种特殊的方式创建菜单项（不使用后台categories）让这个听起来简单的任务成了一场噩梦。幸运的是，Magento中藏有这么一个方法。</p>
<p>Magento的逻辑只允许类别（categories）出现在顶部导航。当创建一个类别的时候只要设置Include in Navigation Menu就会显示在导航里。Magento已经解释了通过创建一个假的类别和重定向一个特殊的页面来添加一个菜单项。但他们也给了个事件挂钩去对顶部菜单做更灵活的事情。</p>
<h2>Config</h2>
<p>首先，在config.xml中通过添加下面的代码来定义挂钩。通过这个我们简单地添加当一个时间，当挂钩、模型、方法名被请求时调度事件就会去掉它。</p>
<pre><code>
&lt;config&gt;
    &lt;frontend&gt;
        &lt;events&gt;
            &lt;page_block_html_topmenu_gethtml_before&gt;
                &lt;observers&gt;
                    &lt;my_module&gt;
                        &lt;class&gt;my_module/observer&lt;/class&gt;
                        &lt;method&gt;addToTopmenu&lt;/method&gt;
                    &lt;/my_module&gt;
                &lt;/observers&gt;
            &lt;/page_block_html_topmenu_gethtml_before&gt;
        &lt;/events&gt;
   &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<h2>Observer</h2>
<p>现在，一个包含addTopmenu方法的观察者已经在config.xml中被定义。下面的代码只是个例子，添加一个名为 &ldquo;Categories&rdquo;的顶部菜单项以及子分类项，类别名。好了，这样我们就能创建嵌套菜单项。</p>
<pre><code>
public function addToTopmenu(Varien_Event_Observer $observer)
{
    $menu = $observer-&gt;getMenu();
    $tree = $menu-&gt;getTree();
 
    $node = new Varien_Data_Tree_Node(array(
            'name'   =&gt; 'Categories',
            'id'     =&gt; 'categories',
            'url'    =&gt; Mage::getUrl(), // point somewhere
    ), 'id', $tree, $menu);
 
    $menu-&gt;addChild($node);
 
    // Children menu items
    $collection = Mage::getResourceModel('catalog/category_collection')
            -&gt;setStore(Mage::app()-&gt;getStore())
            -&gt;addIsActiveFilter()
            -&gt;addNameToResult()
            -&gt;setPageSize(3);
 
    foreach ($collection as $category) {
        $tree = $node-&gt;getTree();
        $data = array(
            'name'   =&gt; $category-&gt;getName(),
            'id'     =&gt; 'category-node-'.$category-&gt;getId(),
            'url'    =&gt;&gt; $category-&gt;getUrl(),
        );
 
        $subNode = new Varien_Data_Tree_Node($data, 'id', $tree, $node);
        $node-&gt;addChild($subNode);
    }
}
</code></pre>
<p><span>360magento提供专业的基于magento系统的</span><a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a><span>，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></p>]]></description>
      <pubDate>Sun, 27 Sep 2015 13:46:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中如何给特定对象创建布局句柄]]></title>
      <link>https://www.360magento.com/blog/layout-update-handles/</link>
      <description><![CDATA[<p>Magento中每个Http请求结果中都会有一些布局句柄，这些句柄可以用来定制所需页面的布局。如果你曾经尝试找出magento中的布局句柄，你会发现有很多。这些句柄基于不同的变量，不同的计算。</p>
<p>根据用户是否登录，magento使用customer_logged_in和customer_logged_out句柄。不同的店铺也有不同的布局更新（例如STORE_default，STORE_cars，STORE_fashion ...）。主题有自己的布局句柄（例如THEME_frontend_default_default，THEME_frontend_enterprise_default）。</p>
<p>当一个网站使用&ldquo;Shop by Brand&rdquo;插件的时候，客户问我们是否能改变一个brand页面的布局。为了实现这个功能，我们必须扩展这个插件，让每个brand页面有它自己的更新句柄。</p>
<p>你可能注意到Magento使用这个功能创建唯一的布局句柄给不同的类别（如CATEGORY_96，CATEGORY_35）和产品（如PRODUCT_22735，PRODUCT_225）。</p>
<p>下面我将演示如何创建一个特定对象的布局句柄功能。句柄将由对象的ID（如OUR_COOL_OBJECT_535，OUR_COOL_OBJECT_863）字符串组成。</p>
<h2>1、创建观察者</h2>
<p>为了避免增加句柄到Magento布局更新对象过晚，我们需要观察controller_action_layout_load_before时间。</p>
<pre><code>
&lt;config&gt;
    &lt;frontend&gt;
        &lt;events&gt;
            &lt;controller_action_layout_load_before&gt;
                &lt;observers&gt;
                    &lt;alwayly_controller_action_layout_load_before&gt;
                        &lt;class&gt;alwayly_layouthandle/observer&lt;/class&gt;
                        &lt;method&gt;controllerActionLayoutLoadBefore&lt;/method&gt;
                    &lt;/alwayly_controller_action_layout_load_before&gt;
                &lt;/observers&gt;
            &lt;/controller_action_layout_load_before&gt;
        &lt;/events&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<h2>2、添加句柄</h2>
<p>现在我们必须计算布局更新句柄并将它添加到布局更新对象里。</p>
<pre><code>
&lt;?php
 
    class Alwayly_LayoutHandle_Model_Observer
    {
        public function controllerActionLayoutLoadBefore(Varien_Event_Observer $observer)
        {
            /** @var $layout Mage_Core_Model_Layout */
            $layout = $observer-&gt;getEvent()-&gt;getLayout();
 
            $id = Mage::app()-&gt;getRequest()-&gt;getParam('id');
 
            /* or */
 
            if($ourCoolObject = Mage::registry('our_cool_object'))
            {
                $id = $ourCoolObject-&gt;getId();
            }
 
            $layout-&gt;getUpdate()-&gt;addHandle('OUR_COOL_OBJECT_'.$id);
        }
    }
</code></pre>
<p><span>360magento提供专业的基于magento系统的</span><a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a><span>，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></p>]]></description>
      <pubDate>Sat, 26 Sep 2015 14:16:36 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento2中的路由]]></title>
      <link>https://www.360magento.com/blog/routing-in-magento2/</link>
      <description><![CDATA[<p>我们可以说路由，是Magento中最重要的部分。Magento2中完整的进程流取决于URL进程请求和路由器类（用来响应匹配和执行请求）。这篇文章包含了Magento2中路由器流并分析一些默认的路由器。当然，这里也会演示怎么去常见一个自定义的路由器，提到路由器是如何匹配到方法（控制器类），更多关于控制器的信息将会在其它文章中提到。</p>
<h2>路由流</h2>
<p>首先，我们需要分析完整的路由流，这样我们就能为后面的部分了解更多的细节。我们之前就知道，Magento2在请求启动的流类（launch method）里创建HTTP进程。我们的流以创建前端控制器开始。</p>
<pre><code>$frontController = $this-&gt;_objectManager-&gt;get('Magento\Framework\App\FrontControllerInterface');
</code></pre>
<p>前端控制器对循环槽中所有可用的路由器和当前请求匹配的路由进行响应。稍后我们将详细讲解前端路由。现在，还是先理解整个流程，其中进程如何匹配路由器是重点。路由器列表被创建在RouterList（在前端控制器路由器循环里被调用）类里，位于<strong>Magento\Framework\App</strong>中。这个类用来排列和迭代路由器列表。路由器类负责匹配响应当前请求的路由器。让我们看看Magento2的流程。</p>
<p>index.php (runs bootstrap and create HTTP application) &rarr; HTTP app &rarr; FrontController &rarr; Routing &rarr; Controller processing &rarr; etc</p>
<p>现在我们将分析路由流程的每个部分以便更好地理解Magento2的路由。</p>
<h2>前端控制器</h2>
<p>和Magento1中一样，这是路由入口，被HTTP启动进程（launch method）调用。负责对当前请求路由进行匹配。它位于<strong>lib/internal/Magento/Framework/App/FrontController.php</strong>。你可以在HTTP启动方法FrontControllerInterface里找到。让我们看看这段代码吧。</p>
<pre><code>class Http implements \Magento\Framework\AppInterface
{
    public function launch()
    {
        ...
        	//Here Application is calling front controller and it's dispatch method
        $frontController = $this-&gt;_objectManager-&gt;get('Magento\Framework\App\FrontControllerInterface');
        $result = $frontController-&gt;dispatch($this-&gt;_request);
        ...
    }
}
</code></pre>
<p>现在，我们知道了前端控制器何时、如何被调用，让我们看看前端控制器类（Front controller class）和它的调度方法： <strong>lib/internal/Magento/Framework/App/FrontController.php</strong></p>
<pre><code>
class FrontController implements FrontControllerInterface
{
    public function dispatch(RequestInterface $request)
    {
        \Magento\Framework\Profiler::start('routers_match');
        $routingCycleCounter = 0;
        $result = null;
        while (!$request--&gt;isDispatched() &amp;&amp; $routingCycleCounter++ &lt; 100) {
            /** @var \Magento\Framework\App\RouterInterface $router */
            foreach ($this--&gt;_routerList as $router) {
                try {
                    $actionInstance = $router--&gt;match($request);
                    if ($actionInstance) {
                        $request--&gt;setDispatched(true);
                        $actionInstance--&gt;getResponse()--&gt;setNoCacheHeaders();
                        $result = $actionInstance--&gt;dispatch($request);
                        break;
                    }
                } catch (\Magento\Framework\Exception\NotFoundException $e) {
                    $request--&gt;initForward();
                    $request--&gt;setActionName('noroute');
                    $request--&gt;setDispatched(false);
                    break;
                }
            }
        }
        \Magento\Framework\Profiler::stop('routers_match');
        if ($routingCycleCounter &gt; 100) {
            throw new \LogicException('Front controller reached 100 router match iterations');
        }
        return $result;
    }
}
</code></pre>
<p>如你所见，调度方法将循环所有的路由器（可用的）直到一个路由被匹配，需求被调度($request&rarr;setDispatched(true);) ，或者路由计数器执行到100。路由器可以被匹配，但是如果没有调度，就会重复路由器循环。此外，路由器可以被重定向调度，或者它可以被匹配和处理。路由器列表类在请求流中被解析。现在，我们再看看路由器是如何匹配（匹配方法）的以及究竟什么是路由器。</p>
<h2>路由器</h2>
<p>简单来说，路由器就是负责匹配执行URL请求的PHP类。默认的Magento框架和核心里有些Base、DefaultRouter、Cms和UrlRewrite这样的路由器。所有这些我们都将讨论，解释它们的目标和如何工作的。路由器正在执行RouterInterface。现在让我们看看默认的路由器流：</p>
<p>Base Router &rarr; CMS Router &rarr; UrlRewrite Router &rarr; Default Router (这是路由器环路&mdash;&mdash; FrontController::dispatch())</p>
<h3>Base Router</h3>
<p>Base Router位于<strong>lib/internal/Magento/Framework/App/Router/Base.php</strong>，它是环路中的第一个。如果你是magento1开发者的话，你知道它作为标准路由器。匹配方法是parseRequest和matchAction，在第二个方法中会设置前端模块名，控制器路径名，动作名，控制器模和路由名。在基础路由器中标准Magento URL(front name/action path/action/param 1/etc params/) 被匹配。</p>
<h3>CMS Router</h3>
<p>CMS Router位于<strong>app/code/Magento/Cms/Controller/Router.php</strong>，用于处理CMS页面。它设置cms模块名（模块前端名），page控制器名（控制器路径名）和view（<strong>app/code/Magento/Cms/Controller/Page/View.php</strong>）动作名。为Base controller设置好格式后，它将设置页面ID并转发这个ID，但不会调度它。转发意味着它会破坏现有的路由器循环，再次开始循环（最多可执行100次）。这个路由器循环将匹配激活View controller（<strong>Cms/Controller/Page</strong>）的基础路由器，显示被存储的页面ID（根据url找到的页面ID）。</p>
<h3>UrlRewrite Router</h3>
<p>在Magento2中，UrlRewrite有了它自己的路由器。熟悉Magento1的朋友知道UrlRewrite是Standard路由器的一部分。它位于<strong>app/code/Magento/UrlRewrite/Controller/Router.php</strong>使用Url Finder获取数据库中匹配的url重写。</p>
<pre><code>$rewrite = $this-&gt;urlFinder-&gt;findOneByData(
                    [
                        UrlRewrite::ENTITY_TYPE =&gt; $oldRewrite-&gt;getEntityType(),
                        UrlRewrite::ENTITY_ID =&gt; $oldRewrite-&gt;getEntityId(),
                        UrlRewrite::STORE_ID =&gt; $this-&gt;storeManager-&gt;getStore()-&gt;getId(),
                        UrlRewrite::IS_AUTOGENERATED =&gt; 1,
                    ]
                );
</code></pre>
<p>它会转向CMS router这样的动作。</p>
<h3>Default Router</h3>
<p>它位于<strong>lib/internal/Magento/Framework/App/Router/DefaultRouter.php</strong>是路由器循环的最后一个。当其它路由都不匹配的时候才使用它。在Magento2中，我们可以为"404找不到"页面创建一个自定义的句柄来展示自定义内容。下面是DefaultRouter中没有路由处理情况下的循环。</p>
<pre><code>
foreach ($this-&gt;noRouteHandlerList-&gt;getHandlers() as $noRouteHandler) {
            if ($noRouteHandler-&gt;process($request)) {
                break;
            }
        }
</code></pre>
<h3>Custom Router (附带示例)</h3>
<p>前端控制器会浏览所有路由器列表中的路由（由routes.xml配置创建），所以我们需要将di.xml模块中新加路由器的配置添加到<strong>lib/internal/Magento/Framework/App/RouterList.php</strong>，由此来增加自定义路由器。我们将创建一个新的模块（例：Alwayly/CustomRouter），之后我们添加心得路由器到路由器列表，最后创建路由器类。</p>
<p>自定义路由器只是一个例子，在这个例子中你能了解Base router是如何匹配和跳转需求的。首先，我们需要在<strong>app/code/Alwayly/CustomRouter</strong>中为我们的模块创建一个文件夹结构，接着我们将在etc文件夹中创建modules.xml，在模块根目录下创建composer.json（带有模块信息）。现在，我们可以通过添加配置到di.xml（etc/frontend）来创建自定义路由器，这里我们的路由器只针对与前端。最后，我们将在Controller文件夹里创建Router.php来编写匹配路由器的逻辑。我们将扫描URL，确认是否有特定字，然后根据这些字简历前端模块名、控制器路径和给默认控制器的跳转请求。作为示例，我们要搜索的两个字是"examplerouter"和"exampletocms"。当搜索到"examplerouter"时，我们将跳转到Base router匹配格式（这里，我们设置前端模块名为"alwaylytest"，控制器路径名为"test"，动作名为"test"），当搜索到"exampletocms"时，我们通过Base router跳转到About us页面。</p>
<h4>di.xml(位于<strong>etc/frontend</strong>)</h4>
<pre><code>&lt; ?xml version="1.0"?&gt; 
&lt; config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"&gt; 
    &lt; type name="Magento\Framework\App\RouterList"&gt; 
        &lt; arguments&gt; 
            &lt; argument name="routerList" xsi:type="array"&gt; 
                &lt; item name="alwaylycustomrouter" xsi:type="array"&gt; 
                    &lt; item name="class" xsi:type="string"&gt; Alwayly\CustomRouter\Controller\Router&lt; /item&gt; 
                    &lt; item name="disable" xsi:type="boolean"&gt; false&lt; /item&gt; 
                    &lt; item name="sortOrder" xsi:type="string"&gt; 22&lt; /item&gt; 
                &lt; /item&gt; 
            &lt; /argument&gt; 
        &lt; /arguments&gt; 
    &lt; /type&gt; 
&lt; /config&gt; 
</code></pre>
<h4>Router.php (位于<strong>Controller</strong>文件夹)</h4>
<pre><code>&lt;?php
namespace Alwayly\CustomRouter\Controller;
 
class Router implements \Magento\Framework\App\RouterInterface
{
    /**
     * @var \Magento\Framework\App\ActionFactory
     */
    protected $actionFactory;
 
    /**
     * Response
     *
     * @var \Magento\Framework\App\ResponseInterface
     */
    protected $_response;
 
    /**
     * @param \Magento\Framework\App\ActionFactory $actionFactory
     * @param \Magento\Framework\App\ResponseInterface $response
     */
    public function __construct(
        \Magento\Framework\App\ActionFactory $actionFactory,
        \Magento\Framework\App\ResponseInterface $response
    ) {
        $this-&gt;actionFactory = $actionFactory;
        $this-&gt;_response = $response;
    }
 
    /**
     * Validate and Match
     *
     * @param \Magento\Framework\App\RequestInterface $request
     * @return bool
     */
    public function match(\Magento\Framework\App\RequestInterface $request)
    {
        /*
         * We will search &ldquo;examplerouter&rdquo; and &ldquo;exampletocms&rdquo; words and make forward depend on word
         * -examplerouter will forward to base router to match alwaylytest front name, test controller path and test controller 

class
         * -exampletocms will set front name to cms, controller path to page and action to view
         */
        $identifier = trim($request-&gt;getPathInfo(), '/');
        if(strpos($identifier, 'exampletocms') !== false) {
            /*
             * We must set module, controller path and action name + we will set page id 5 witch is about us page on
             * default magento 2 installation with sample data.
             */
            $request-&gt;setModuleName('cms')-&gt;setControllerName('page')-&gt;setActionName('view')-&gt;setParam('page_id', 5);
        } else if(strpos($identifier, 'examplerouter') !== false) {
            /*
             * We must set module, controller path and action name for our controller class(Controller/Test/Test.php)
             */
            $request-&gt;setModuleName('alwaylytest')-&gt;setControllerName('test')-&gt;setActionName('test');
        } else {
            //There is no match
            return;
        }
 
        /*
         * We have match and now we will forward action
         */
        return $this-&gt;actionFactory-&gt;create(
            'Magento\Framework\App\Action\Forward',
            ['request' =&gt; $request]
        );
    }
}
</code></pre>
<h4>routes.xml (位于<strong>etc/frontend</strong>)</h4>
<pre><code>&lt;?xml version="1.0"?&gt; 

&lt;config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd"&gt; 
    &lt; router id="standard"&gt; 
        &lt;route id="alwaylytest" frontName="alwaylytest"&gt; 
            &lt;module name="Alwayly_CustomRouter" /&gt; 
        &lt;/route&gt; 
    &lt;/router&gt; 
&lt;/config&gt; 
</code></pre>
<h4>Test.php (test controller action class)</h4>
<pre><code>&lt;?php
namespace Alwayly\CustomRouter\Controller\Test;
 
class Test extends \Magento\Framework\App\Action\Action
{
    public function execute()
    {
        die("Alwayly\\CustomRouter\\Controller\\Test\\Test controller execute()");
    }
}</code></pre>
<p>360magento提供专业的基于magento系统的<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a>，如有需求或相关咨询，<a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 26 Sep 2015 12:30:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用magento布局给特定CMS页面添加静态块]]></title>
      <link>https://www.360magento.com/blog/layout-special-block/</link>
      <description><![CDATA[<p>有次在做一个项目的时候，我需要在头部和某些页面内容中间加入一个独有的静态块。元素必须完全在magento后台定义，而且能很轻易地在一个新的CMS页面创建、定义和移除。因此，元素必须被放置在主内容之外，不可能用后台CMS添加，而是要用magento布局添加。下面是我如何实现的：</p>
<p>正如你所知的，magento只为CMS页面提供下面的句柄</p>
<ul>
<li>首页句柄和404页面句柄</li>
<li>一个所有CMS页面公用的句柄</li>
</ul>
<p>如果一个CMS块要显示在首页，我们会在local.xml文件里使用首页句柄。同样的，如果要在所有CMS页面显示，我们可以使用所有CMS页面通用的句柄。但是，用户创建的个人CMS页面又该怎么办呢？</p>
<p>幸运的是：Magento允许我们通过后台CMS编辑器为每一个CMS页面定义一个自定义布局。这样的话，一个CMS页面的布局就被数据库中为这个特殊页面定义的值修改。</p>
<p>首先，我们为名为"static-block-1"特殊CMS页面创建一个静态块，加入下面的简单样式：</p>
<pre><code>&lt;div class=&rdquo;element-blue&rdquo;&gt;
        &lt;h3&gt;Static Block 1&lt;/h3&gt;
        &lt;p&gt;This is blue static element 1 &lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>接着，我们将创建一个包含了刚才创建的静态块的CMS页面。通过这个页面的Design标签更新布局XML，里面有头部和一个段落。今天以一列布局为例。</p>
<pre><code>&lt;reference name="root"&gt;
        &lt;block type="cms/block" name="myelement"&gt;
            &lt;action method="setBlockId"&gt;&lt;block_id&gt;static-block-1&lt;/block_id&gt;&lt;/action&gt;
        &lt;/block&gt;
&lt;/reference&gt;
</code></pre>
<p>最后，我们要更新我们的模板文件，添加一行调用我们元素的代码。打开1colum.phtml文件(app/design/frontend/default/你的主题/template/page/1column.phtml),按下面代码进行修改：</p>
<pre><code>&hellip;
&lt;div class="page"&gt;
        &lt;?php echo $this-&gt;getChildHtml('header') ?&gt;
        &lt;?php echo $this-&gt;getChildHtml('myelement') ?&gt;
&hellip;
</code></pre>
<p>虽然这个方法很快速，效果也不错，但是用同样的步骤添加元素会让人觉得乏味，特别是一个项目有6、7个这样的CMS页面。你觉得这个方法怎么样呢？你又是如何解决这个问题的呢？欢迎你和我们分享。</p>
<p>360magento提供专业的基于magento系统的<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a>，如有需求或相关咨询，<a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 26 Sep 2015 03:35:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何在magento产品详细页展示video]]></title>
      <link>https://www.360magento.com/blog/magento-product-video/</link>
      <description><![CDATA[<p>在实际情况中，有些特殊的产品需要用video来演示。Magento商店里有不少拥有video功能的插件，但是有时这些插件因为改变了你网站的布局而不符合你的需求。读完这篇文章后你就可以在magento产品详细页的任意位置添加你需要的video。</p>
<p>好了，让我们开始吧。Youtube让分享变得很简单，你只需要将video的iframe代码拷贝、粘贴到产品描述里就行了。 是不是觉得太简单了呢？那么让我们来点有难度的吧。在magento后台创建一个名为"video"的text属性(Catalog-&gt;Attributes-&gt;Manage Attributes)，再将这个属性放到一个合适的产品属性集里，刷新索引(System-&gt;Index Management)。接着打开产品详细页的phtml文件：app/design/frontend/default/你的主题名/template/catalog/product/view.phtml。下面的例子中，我把video放在产品名字的下面。找到产品名字的代码：</p>
<pre><code>&lt;div class="product-name"&gt;
     &lt;h1&gt;&lt;?php echo $_helper-&gt;productAttribute($_product, $_product-&gt;getName(), 'name') ?&gt;&lt;/h1&gt;
&lt;/div&gt;
</code></pre>
<p>在下面添加这段代码：</p>
<pre><code>&lt;?php if($_product-&gt;getVideo()): ?&gt;
       &lt;iframe width="560" height="315" src="http://www.youtube.com/embed/&lt;?php echo $_product-&gt;getVideo() ?&gt;" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;?php endif; ?&gt;
</code></pre>
<p>最后，我们需要把video的UID填到产品中的"video"属性框里，也就是之前添加的新属性。例如http://www.youtube.com/watch?v=U0CGsw6h60k的UID就是U0CGsw6h60k。</p>
<p>还想来点更难的吗？想把video放在侧边栏？没问题。我们需要为video创建一个模块即.phtml文件。文件路径是：app/design/frontend/default/你的主题名/template/catalog/product/video.phtml。再把video放进去。代码是：</p>
<pre><code>&lt;div class="block block-video"&gt;
    &lt;div class="block-title"&gt;
        &lt;strong&gt;&lt;span&gt;&lt;?php echo $this-&gt;__('Product Video') ?&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br&gt;    <br />    &lt;/div&gt;&lt;br&gt;    <br />    &lt;div class="block-content"&gt;
        &lt;object width="193" height="130"&gt;&lt;param name="movie" value="http://www.youtube.com/v/&lt;?php echo $this-&gt;__($this-&gt;getLinkUrl()) ?&gt;?hl=en_US&amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/&lt;?php echo $this-&gt;__($this-&gt;getLinkUrl()) ?&gt;?hl=en_US&amp;version=3" type="application/x-shockwave-flash" width="193" height="130" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;
    &lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p><br />360magento提供专业的基于magento系统的<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a>，如有需求或相关咨询，<a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 25 Sep 2015 11:51:15 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento模型集合常用过滤条件]]></title>
      <link>https://www.360magento.com/blog/addFieldToFilter/</link>
      <description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a title="magento建站开发" href="https://www.360magento.com/">Magento</a>的MVC模式为大家所熟悉，其中的Model作为数据处理的模型，其集合中的方法是大家开发时必不可少的。最近，我总结了下Magento模型集合中的addFieldToFilter常用过滤条件，希望对大家的开发起到一定的帮助作用。</p>
<pre><code>
//Equals: eq
$_products-&gt;addAttributeToFilter('status', array('eq' =&gt; 1));
 
//Not Equals - neq
$_products-&gt;addAttributeToFilter('sku', array('neq' =&gt; 'test-product'));
 
//Like - like
$_products-&gt;addAttributeToFilter('sku', array('like' =&gt; 'UX%'));
 
//Not Like - nlike
$_products-&gt;addAttributeToFilter('sku', array('nlike' =&gt; 'err-prod%'));
 
//In - in
$_products-&gt;addAttributeToFilter('id', array('in' =&gt; array(1,4,98)));
 
//Not In - nin
$_products-&gt;addAttributeToFilter('id', array('nin' =&gt; array(1,4,98)));
 
//NULL - null
$_products-&gt;addAttributeToFilter('description', 'null');
 
//Not NULL - notnull
$_products-&gt;addAttributeToFilter('description', 'notnull');
 
//Greater Than - gt
$_products-&gt;addAttributeToFilter('id', array('gt' =&gt; 5));
 
//Less Than - lt
$_products-&gt;addAttributeToFilter('id', array('lt' =&gt; 5));
 
//Greater Than or Equals To- gteq
$_products-&gt;addAttributeToFilter('id', array('gteq' =&gt; 5));
 
//Less Than or Equals To - lteq
$_products-&gt;addAttributeToFilter('id', array('lteq' =&gt; 5));
</code></pre>
<p><span>360magento提供专业的基于magento系统的</span><a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a><span>，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></p>]]></description>
      <pubDate>Thu, 24 Sep 2015 15:45:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento修改后台密码]]></title>
      <link>https://www.360magento.com/blog/change-password/</link>
      <description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp;今天，我要跟大家交流的是magento后台密码的修改。在某些情况下我们需要对magento后台密码修改，那么对magento后台密码的修改有哪些方法呢？</p>
<ol>
<li>magento后台登录框左下角的忘记密码(Forgot your password?)，按照提示完成密码的修改；</li>
<li>通过数据库修改 此方法的前提是你有数据库的访问权限！从phpmyadmin进入到网站的数据库中，打开"admin_user"这张表，找到'username'等于你用户名的那条记录。在修改密码之前，你先要准备好你的新密码和识别码，这里我以新密码：admin123，识别码AL为例。之后在网上找一个可以生产MD5的网站，将你的新密码进行MD5加密，我生成以后的结果是:7a01b04183e3534bd0a6be7ff822784e。接着回到刚才的数据表，在数据的password列，将新密码和识别码以新密码:识别码的形式插入表中。我这里的是7a01b04183e3534bd0a6be7ff822784e:AL。点击保存。稍后，你就可以用你新设置的密码进行登录了。</li>
<li>通过修改源码进入后台修改 此方法的前提是你有ftp的访问权限！通过ftp进入网站，打开文件app\code\core\Mage\Admin\Model\User.php，在333行左右的位置找到authenticate()方法。在
<pre><code>$this-&gt;loadByUsername($username);</code></pre>
这段代码下增加返回True值的代码，即：
<pre><code>
$this-&gt;loadByUsername($username);
return true;
</code></pre>
现在你可以用任何密码进入后台了，登录后按照System-&gt;Permission-&gt;User，进入到用户管理页面。按照表格内容修改新的密码。最后，回到User.php文件，将刚才添加的代码删除。</li>
</ol>
<p><span>360magento提供专业的基于magento系统的</span><a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a><span>，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></p>]]></description>
      <pubDate>Wed, 23 Sep 2015 15:59:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用命令操作Magento预编译的开启和关闭 ]]></title>
      <link>https://www.360magento.com/blog/implement-magento-compiler-mode/</link>
      <description><![CDATA[<p>提高Magento性能的一个很重要的方法是开启<a title="magento开发建站" href="https://www.360magento.com/">Magento</a>的编译模式，可以在后台System>Tools>Compilation，点击Run Compilation Process按钮，一段时间后，我们发现Compiler Status由Disabled变为Enabled，已经编译成功了，打开/includes/src目录，会发现生成了很多文件。</p>
<p>
因为在<a title="magento开发建站" href="https://www.360magento.com/">Magento</a>中，我们模块的代码可以放在/app/code/local，/app/code/community，以及/app/code/core这三个目录下，如果Magento需要包含某个文件，系统会依次搜索这三个目录，直到找到这个文件为止，这为我们重写系统的某些文件提供了方便，比如需要修改core目录下的Mage/Catalog/Model/Product.php文件，只需要复制这个文件到local目录下的Mage/Catalog/Model/Product.php，然后修改这个文件即可，这样无需修改核心文件，为我们以后升级系统提供了方便，但由于系统需要在不同的目录中搜索文件，所以效率比较低，使用Compiler功能，系统将把这三个目录下的文件按照优先级顺序复制到/includes/src目录，比如Mage/Catalog/Model/Product.php文件将复制为Mage_Catalog_Model_Product.php，这样系统能够很快的找到需要包含的文件，大幅的提高了效率。
</p>
<p>如果我们需要安装新的模块，或者修改已有的模块，我们需要关闭<a title="magento开发建站" href="https://www.360magento.com/">Magento</a>的编译模式，可以在后台System>Tools>Compilation，点击Disable按钮，Compiler Status将由Enabled变为Disabled，添加或修改好模块之后，需要点击Run Compilation Process按钮重新生成编译文件。</p>
<p>此外，Magento提供了一个脚本工具使我们无需进入后台就可以查看和切换编译模式，该脚本位于根目录下的/shell/compiler.php</p>
<p>打开命令行，切换至shell目录：</p>
<pre>
    $cd shell
    $ls
    abstract.php compiler.php indexer.php log.php
</pre>
<p>查看使用compiler.php的方法：</p>
<pre>    $php -f compiler.php help
    Usage: php -f compiler.php -- [options]
      state Show Compilation State
      compile Run Compilation Process
      clear Disable Compiler include path and Remove compiled files
      enable Enable Compiler include path
      disable Disable Compiler include path
      help This help</pre>
<p>查看当前的编译状态：</p>
<pre>    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Not Compiled
    Collected Files Count: 0
    Compiled Scopes Count: 0</pre>
<p开始编译:></p>
<pre>
    $php -f compiler.php compile
    Compilation successfully finished
    $php -f compiler.php state
    Compiler Status: Enabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4
</pre>
<p>关闭和开启编译:</p>
<pre>    $php -f compiler.php disable
    Compiler include path disabled
    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4
    $php -f compiler.php enable
    Compiler include path enabled
    $php -f compiler.php state
    Compiler Status: Enabled
    Compilation State: Compiled
    Collected Files Count: 6000
    Compiled Scopes Count: 4</pre>
<p>清除编译</p>
<pre>    $php -f compiler.php clear
    Compilation successfully cleared
    $php -f compiler.php state
    Compiler Status: Disabled
    Compilation State: Not Compiled
    Collected Files Count: 0
    Compiled Scopes Count: 0</pre>
<p>我们还可以通过修改/includes/src/config.php文件开启和关闭编译模式，在编译成功后config.php将变为：</p>
<pre>define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');</pre>
<p>此时只需要注释掉这个语句就可以关闭编译模式：</p>
<pre> #define('COMPILER_INCLUDE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR.'src');</pre>
<p>在Mage.php文件中我们可以看到下面一段代码：</p>
<pre>    Mage::register('original_include_path', get_include_path()); // 保存当前的include_path

    if (defined('COMPILER_INCLUDE_PATH')) { // 如果设置为编译模式
        $appPath = COMPILER_INCLUDE_PATH;
        set_include_path($appPath . PS . Mage::registry('original_include_path')); // 添加includes/src为include_path
        include_once "Mage_Core_functions.php";
        include_once "Varien_Autoload.php";
    } else { // 没有设置为编译模式
        $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
        $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
        $paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
        $paths[] = BP . DS . 'lib';

        $appPath = implode(PS, $paths);
        set_include_path($appPath . PS . Mage::registry('original_include_path')); // 添加以上四个目录为include_path
        include_once "Mage/Core/functions.php";
        include_once "Varien/Autoload.php";
    }</pre>
<p>我们可以发现，<a title="magento开发建站" href="https://www.360magento.com/">Magento</a>通过检查是否定义COMPILER_INCLUDE_PATH常量来切换编译模式并设置对应模式的文件包含路径。</p>]]></description>
      <pubDate>Wed, 23 Sep 2015 12:47:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[跨境电商在中美市场碰撞火花]]></title>
      <link>https://www.360magento.com/blog/china-america/</link>
      <description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;中国国家主席习近平23日将在西雅图出席中美商界科技论坛，在与会的中美两国各15位顶级商界领袖中，亚马逊创始人杰夫&middot;贝佐斯和阿里巴巴创始人马云作为<a title="magento开发" href="https://www.360magento.com/">全球电子商务</a>两大巨头同时出席，让为<a title="magento开发" href="https://www.360magento.com/">跨境电商</a>在中美市场碰撞出火花。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 虽然亚马逊与阿里巴巴的细分目标市场并不完全一样，但两者不乏短兵相接的交叉地带。阿里巴巴在美国上市后，面对强劲对手，奋力开拓北美市场；北美电商巨头亚马逊则看准中国市场，为抢占市场份额频出高招。</p>
<p>　　总部位于西雅图市中心、占地400多万平方英尺的亚马逊，在电子商务领域已历经风雨20载，其今年第二季度，北美销售额达138亿美元，比去年同期强劲增长25.5%。在中国市场，亚马逊瞄准消费者，近来接连亮剑，推出&ldquo;海外购&middot;直采&rdquo;&ldquo;海外购&middot;直邮&rdquo;&ldquo;海外购&middot;闪购&rdquo;等新业务，体现对中国市场十分重视。</p>
<p>　　亚马逊全球资深副总裁迭戈&middot;皮亚琴帝尼近日对《环球时报》记者表示，&ldquo;市场变化迅速，对亚马逊而言，应对的关键在于灵活快速地响应市场变化。中国有很强的本土电商，竞争激烈，亚马逊中国应找到跟竞争对手的区隔点、我们的优势和定位。&rdquo;</p>
<p>　　皮亚琴帝尼所说的&ldquo;区隔点&rdquo;，是亚马逊中国的国际品牌战略，包括目前引入亚马逊美国300万同质同价产品的&ldquo;海外购&rdquo;商店、进口直采、以及在此基础上今年8月推出的&ldquo;海外购&middot;闪购&rdquo;创新业务。消费者不仅可以网购海外正品，更可享受全面本地化的物流配送和购物体验，商品从保税区、自贸区直接发货，平均3天就可收到订购的商品。</p>
<p>　　产品的正品保证，是亚马逊又一与竞争对手的区隔点。亚马逊全球副总裁冯思哲对《环球时报》记者说，&ldquo;中国市场发展迅速，对本土和外国电商都非常有吸引。我们在全球有专门的供应商管理团队，同时中国建立了自己的团队，团队大部分是中国人，非常了解本地市场，与全球团队紧密配合。我们在中国一直努力提供给消费者最好的正品、最好的价格和最好的配送服务。&rdquo;</p>
<p>据介绍，亚马逊中国的出口业务正加大力度帮助中国卖家走向全球，中国卖家已成为亚马逊&ldquo;全球开店&rdquo;的生力军，并取得良好的业务表现。2015年上半年，中国卖家销售额同比增长翻番。</p>
<p>　　另一方面，亚马逊的对手阿里巴巴也毫不示弱。今年以来，阿里巴巴因为旗下网站被指涉嫌售卖假货，被欧美多家奢侈品制造商诉诸法庭。面对社会舆论对&ldquo;出售假货&rdquo;的指责，阿里巴巴已重拳出击，修改假货下架程序。</p>
<p>　　同时，阿里巴巴今年还计划在美国兴建运营配送中心，构建其跨境电商平台，使中国消费者能网上跨境购物。与亚马逊有所区别的是，阿里巴巴着重构建为买卖双方提供第三方交易平台，收取2%至5%的佣<span>金，所以在仓储基建方面的投入相对较少，因而利润</span><span>空间相对高些。</span></p>
<p><span>&nbsp; &nbsp; &nbsp; &nbsp; 中国商务部统计显示，跨境电商在2014年的交易额达到718亿美元，同比增长44%。虽然亚马逊、阿里巴巴两巨头依然难分高下，但毋庸置疑，中国跨境电子商务行业前景看好，将吸引更多海内外商家。</span></p>
<p><span><span>&nbsp; &nbsp; &nbsp; &nbsp;360magento提供专业的基于magento系统的</span><a title="magento电商网站开发" href="http://www.360magento.com/">电商网站开发</a><span>服务，如有需求或相关咨询，</span><a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a><span>。</span></span></p>]]></description>
      <pubDate>Wed, 23 Sep 2015 12:47:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[解决magento开启Compilation预编译网站无法访问]]></title>
      <link>https://www.360magento.com/blog/error-compilation/</link>
      <description><![CDATA[<p>一般来说，开启<a title="magento建站" href="https://www.360magento.com/">magento</a>的Compilation预编译功能，可以使magento的访问速度提高25%。 但由于首次用这个功能操作不当，导致<a title="magento建站" href="https://www.360magento.com/">magento网站</a>崩溃，网站前后台都访问不了，这已经有好几个客户遇到这样的问题了。那么下面介绍既简单又快捷的方法。 </p>
<p>方法一：访问phpmyadmin，进入网站数据库的core_config_data表，搜索字段"path"的值为&ldquo;advanced/modules_disable_output/Mage_Compiler&rdquo;的数据，如果查找出来的该条数据的表字段&ldquo;value&rdquo;='1',那么改成&ldquo;value&rdquo;='0' </p>
<p>方法二： 打开/includes/config.php，手动注释掉最后两行 将</p>
<pre> define(&lsquo;COMPILER_INCLUDE_PATH&rsquo;, dirname(__FILE__).DIRECTORY_SEPARATOR.&rsquo;src&rsquo;);
define(&lsquo;COMPILER_COLLECT_PATH&rsquo;, dirname(__FILE__).DIRECTORY_SEPARATOR.&rsquo;stat&rsquo;);</pre>
<p>改成</p>
<pre> #define(&lsquo;COMPILER_INCLUDE_PATH&rsquo;, dirname(__FILE__).DIRECTORY_SEPARATOR.&rsquo;src&rsquo;);
#define(&lsquo;COMPILER_COLLECT_PATH&rsquo;, dirname(__FILE__).DIRECTORY_SEPARATOR.&rsquo;stat&rsquo;);
</pre>
<p>如果 开启预编译（Compilation）后，后台插件管理（Magento Connect Manager）不能访问。 解决方法： 把 /downloader/pearlib/php 文件夹拷贝到 /includes/downloader/pearlib/php/,这样可以解决问题。 </p>
<p>正确的操作方法是，第一次开启预编译，要先运行预编译（Run Compilation Process），然后再开启(Enable)</p>]]></description>
      <pubDate>Wed, 23 Sep 2015 11:09:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento产品详细页调用系统属性]]></title>
      <link>https://www.360magento.com/blog/magento-detail/</link>
      <description><![CDATA[<p>在<a title="magento网站开发" href="https://www.360magento.com/">电子商务平台</a>中，产品的详细页是重中之重。一些刚接触<a title="magento网站开发" href="https://www.360magento.com/">magento</a>不久的朋友对详细页中的一些系统属性并不太熟悉，今天我就给大家说明下magento详细页中的一些系统属性调用方法。</p>
<p>magento详细页的文件路径：/app/design/frontend/default/你的主题/template/catalog/product/view.phtml</p>
<p>常见的几种属性代码如下：</p>
<p>简单描述(short description)：</p>
<pre><code>&lt;?php echo&nbsp;$this-&gt;helper('catalog/output')-&gt;productAttribute($this-&gt;getProduct(), nl2br($_product-&gt;getShortDescription()), 'short_description') ?&gt;</code></pre>
<p>描述(description)：</p>
<pre><code>&lt;?php echo $this-&gt;helper('catalog/output')-&gt;productAttribute($this-&gt;getProduct(), nl2br($this-&gt;getProduct()-&gt;getDescription()), 'description') ?&gt;</code></pre>
<p>产品名称(name)：</p>
<pre><code>&gt;&lt;?php echo &nbsp;$this-&gt;helper('catalog/output')-&gt;<span>productAttribute</span>(<span>$_product</span><span>, </span><span>$_product</span>-&gt;<span>getName</span>()<span>, </span><span>'name'</span>) <span>?&gt;</span></code></pre>
<p>产品编号(sku)：</p>
<pre><code>&lt;?php echo $this-&gt;htmlEscape($_product-&gt;getSku()) ?&gt;</code></pre>
<p>产品价格(price)：</p>
<pre><code>&lt;?php echo $_coreHelper-&gt;currency($_finalPrice,true,false) ?&gt;<br /></code></pre>
<p>&nbsp;360magento提供专业的基于magento系统的<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a>，如有需求或相关咨询，<a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Tue, 22 Sep 2015 16:00:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[兰亭集势员工大批离职,“中国外贸电商第一股”怎么了？]]></title>
      <link>https://www.360magento.com/blog/lightinthebox-plight/</link>
      <description><![CDATA[<p><span class="text-remarks"><span class="text-remarks">兰亭集势对于外贸人已经很熟悉了，曾一度被模仿，尤其是很多<a title="magento公司,360magento" href="http://www.360magento.com/">magento公司</a>或个人也一度仿制<a title="magento兰亭模板" href="http://www.360magento.com/magento-theme.html">magento兰亭模板</a>,而今年在 纽交所上市的&ldquo;中国外贸电商第一股&rdquo;&mdash;&mdash;兰亭集势，看起来已经陷入资金 困境。这家公司不仅员工大批离职，与供应商矛盾也在激化。&ldquo;整个部门95%的同事从6月15日至今只发底薪，提成为零。&rdquo;兰亭集势北京一位在线销售告诉 《中国经营报》记者。兰亭集势每月15日发工资，2015年6、7、8月大部分员工都是只发底薪，因此员工对公司前景的悲观情绪正在加重。</span></span></p>
<p>兰亭集势员工正在加速离职，该公司一个离职员工微信群的成员数已经接近500人。以该公司位于北京望京地区包含在线销售以及客服在内接近50人规模的eBay销售团队为例，2015年以来离职员工已在20人左右。</p>
<p>兰亭集势在2015年6月份刚刚获得A股上市公司&mdash;&mdash;奥康国际<span class="text-remarks">（603001.SH）</span>大约7700万美元战略投资，为何还如此缺钱？兰亭集势<span class="text-remarks">（北京）</span>科技有限公司相关部门负责人在接受本报记者采访时表示，资金状况属于商业秘密、无可回复。</p>
<p class="text-big-title">现实困境</p>
<p>兰亭集势北京一位在线客服2015年6月和7月的工资条显示，其实发工资只有3200元-3500元；此前，其每月平均工资水平在7000元~8000元，每月提成在3000元~4000元，6月以来的收入水平仅相当于此前的1/2。</p>
<p>据记者了解，兰亭集势销售团队按照利润计算提成，每月提成的总体规模大约为销售利润的15%，然后按照每个销售小组的排名情况以及每个员工当月的绩效考核情况，核算个人的业绩提成。</p>
<p>在2015年6月的时候，发现工资少了的员工曾向人事部门询问相关情况，得到的答复是，此前几个月的工资&ldquo;算错账了，所以要从今后几个月的工资中扣掉&rdquo;。</p>
<p>前述兰亭集势北京员工透露，从2015年6月开始，&ldquo;销售部门计算利润的公式变了，说是之前运费一直算低了，所以从2015年开始到现在大家的提成为零&rdquo;。</p>
<p>兰亭集势一位离职管理人员认为，&ldquo;应该是公司觉得提成不合理，所以重新弄了一个算法。&rdquo;</p>
<p>兰亭集势<span class="text-remarks">（北京）</span>科技有限公司相关部门负责人在接受本报记者采访时官方否认了&ldquo;只发底薪&rdquo;的现象；而对于员工离职的问题，该负责人表示，每个公司都有离职员工，这是正常情况。</p>
<p class="text-big-title">增收瓶颈</p>
<p>成立于2007年3月的兰亭集势，基本商业模型是：跨国B2C，用Google推广，用Paypal支付，用UPS和DHL发货。其实，就是通过自有电商平台，也通过在eBay和亚马逊等<a title="海外电商" href="http://www.360magento.com/">海外电商</a>平台上开店的方式，将中国商品卖到海外市场，当然主要是北美和欧洲市场。</p>
<p>兰亭集势在经历徐小平等人的天使投资，又经过2008年500万美元、2009年1127万美元、2010年3500万美元三轮融资后，于2013年6月6日登陆纽约交易所。</p>
<p>背靠着&ldquo;世界工厂&rdquo;的中国，头顶着&ldquo;中国外贸电商第一股&rdquo;的光环，兰亭集势IPO发行价为9.5美元，第一个交易日收盘价为11.61美元；在上市初期的连 续7个交易日，兰亭集势一举涨到16.98美元，较发行价涨幅达78.73%；该公司股价在2013年8月曾经触及最高点23.38美元，此后一路下跌， 截至2015年9月8日的收盘价为2.96美元，仅相当于发行价的31%，为上市以来最低值。</p>
<p>股价低迷的背后，是兰亭集势收入增速大幅放缓、支出大幅增加、亏损幅度不断扩大的现实。</p>
<p>对 于增长乏力、亏损扩大的原因，兰亭集势内部人士认为，没能找到新的卖点是兰亭集势收入增长乏力的主要原因，虽然一直在尝试把安防等电子产品发展成为新卖 点，但目前的主打产品仍然是创业时期以婚纱为代表的服装产品，服装品类在净营收中的占比还在40%左右。数据显示，在2015财年第一季度8760万美元 的净营收中，3170万美元的服装品类占比达36.18%。</p>
<p>一位国内电商人士分析，商品定位和品牌定位决定了其只能卖低毛利产品，然后花费大把的营销费用去做搜索引擎营销；除此以外，兰亭集势近几年没有储备优势资源，没能建立自己的行业壁垒，失去了发展机遇。</p>
<p>另一位内部员工表示，兰亭集势主要是把廉价国产货卖到海外，要想赢得回头客难度很大，所以只能拼命打广告、拼流量，这只能让营销成本居高不下。</p>
<p class="text-big-title">外部压力</p>
<p>增收瓶颈、资金困境之外，兰亭集势在自身所处的<a title="跨境出口电商网站建设" href="http://www.360magento.com/">跨境B2C出口电商</a>业务领域也面临越来越严峻的外部竞争。</p>
<p>前 述国内电商人士认为，相对于国内电商平台而言，亚马逊中国凭借海外市场上无人能比的电商网络与渠道，在面向中国企业的跨境出口电商业务领域显然拥有更多、 更大的优势；只要亚马逊中国能够解决物流问题，能让国内出口企业通过其平台上规模即可获利，而不是利润被物流吃掉，其前景不可小觑。</p>
<p>阿里巴巴B2C模式的全球速卖通在强大资本支持下已经迅速成为中国跨境出口电商领域的老大。</p>
<p>&ldquo;阿里巴巴鼓励卖家直接从淘宝搬过去做外贸，所以在其他<a title="跨境电商平台" href="http://www.360magento.com/">跨境电商平台</a>上还没看到的产品种类，速卖通已第一时间与淘宝同步。&rdquo;上述电商人士表示，速卖通不仅抢到了客源和新兴市场，而且占领了更多的品类，这就是平台的优势，同时也推高了广告费用、增加了竞争对手的反击门槛。</p>
<p>数据显示，兰亭集势2014财年的订单总量达到970万份，而速卖通在2014年&ldquo;双11&rdquo;期间的总订单数就超过680万份。上述电商人士认为，如果兰亭集势不能在热卖品类或者优势资源上形成独特优势，那么肯定会越来越边缘化。</p>
<p>为了塑造自身优势，兰亭集势已于2015年年初推出&ldquo;兰亭智通&rdquo;全球跨境物流开放平台。但兰亭集势内部人士担心，自建物流的结果可能使该公司资金上承受更大压力，&ldquo;京东为什么一直亏，就是因为不断自建物流&rdquo;。</p>
<p><span class="text-remarks">&nbsp;360magento提供专业的基于magento系统的<a title="跨境电商平台开发与托管" href="http://www.360magento.com/">跨境电商平台网站开发和托管服务</a>，如有需求或相关咨询，<a title="magento开发" href="http://www.360magento.com/contacts/">请与我们联系</a>。</span></p>]]></description>
      <pubDate>Tue, 22 Sep 2015 14:11:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[SEO 也分三层境界]]></title>
      <link>https://www.360magento.com/blog/seo-three/</link>
      <description><![CDATA[<p>没有人会手把手教你创业，别人没这个义务，很多东西你必须自己去研究。</p>
<p>流量获取的通道，就大方向而言，包括广告采购，搜索优化，社交营销，广告采购最大的一块是 SEM，其他还有很多；搜索优化目前包括 SEO 和 ASO，前者是针对搜索引擎，后者针对各种移动市场，但其实只要涉及搜索的平台，包括淘宝在内，都有搜索优化的空间。社交营销主要平台是微博，微信，朋友圈，陌陌等，海外是 Facebook，Twitter，YouTube，Instagram，以及 Snapchat 等。</p>
<p>SEM 这块，很早之前 Google 和百度的广告系统还不够完善的时候，有很大的空子可以钻，2004年 吴京川老师（百度元老，百度联盟的创始人，最早发现 hao123 巨大价值的人，当年我做统计系统也是受他影响和指点）讲 Google SEM 搜索套利模式的时候，我听的一愣一愣的，完全没听懂，等 2007年 我听明白的时候，这个市场已经过去了。简单点说就是，寻找 Google 搜索广告中价格被低估而转化效果好的长尾词，买这些广告，但不用做网站，直接放 ebay 的效果广告，说白了就是替 eBay 买 Google 的广告，但是如果你数据玩的好，对转化率跟踪比较做的透，就可以赚钱，这个生意有多大呢？有个公司靠做这个后来卖了几个亿美金（有意思么，那时候几亿美金绝对不是小数字，但是国内的媒体上基本没人报）。但随着 Google 和百度广告系统的不断完善，这个空子基本没有了。</p>
<p>目前依靠 SEM 的很多是<a href="https://www.360magento.com/ title=">跨境电商</a>，典型如做到上市的兰亭集势，此外香港上市的 dx.com。不确定对 SEM 的依赖度高不高。 想要具体了解 SEM 的有关数据，semrush.com 是一个非常不错的数据网站。</p>
<p>下面说一下 SEO，很多人对 SEO 有一种误解，认为追寻 SEO 就是骗取搜索引擎流量，是不入流的做法，特别是一些精英背景的创业者，往往听到 SEO 就嗤之以鼻，这是非常不对的。</p>
<p>SEO 我讲过，分三层境界，获得热门词的前几名，是第一层境界，也就是大部分人对 SEO 的理解，提升搜索引擎的收录和权值，让网站在搜索引擎中有非常多的收录，每天获得大量的长尾词来路，是第二层境界，也是通常一些专业 SEO 服务公司的目标。而第三层境界是，让自己的品牌词成为热门词，在指数上有显著的体现，达到这一境界，你就不用担心搜索引擎会封掉你的站，典型如淘宝，很早就主动屏蔽了百度的蜘蛛，但是每天通过品牌词从百度搜索过去的用户多达数百万，这就是品牌的极端案例。</p>
<p>下面说几个关于 SEO 比较成功的案例，先说重量级的，在上市公司里，汽车之家是非常非常重视 SEO 的一个典范，58 同城和赶集网当年在 SEO 上的争夺和投入都是非常巨大的，此外，同程旅游网对外接受采访的时候也公开说 SEO 是他们的核心竞争力。看到这些案例，还会觉得这是小儿科的东西么？</p>
<p>未上市公司里，4399 的品牌强度是首屈一指的，去年估值几个亿卖掉的欣欣旅游早期在 SEO 优化上也是成绩斐然，当时著名站长夏天天给他们做过一次培训，边悦同学贯彻和操盘了优化的过程，（边悦后来自己出去创业，是个典型的实用主义创业者，靠 SEM 赚的风声水气，当然，媒体上看不到他。）</p>
<p>另外两个值得一提的案例，一个是麦包包，一个是名鞋库。这涉及一个 &ldquo;出淘&rdquo; 的概念，很多淘品牌发现淘宝上运营成本越来越高，对淘宝依赖性越来越强，所以很多商家也希望自建官网，减少对淘宝的依赖度，但是官网流量和用户哪里来？在移动互联网到来之前，只有百度是最大的流量入口，但大部分淘品牌，自建官网的流量运营并不顺利，而麦包包和名鞋库则是两个非常成功的范例，在三年前的样子，麦包包是所有淘品牌里百度指数最高的一个，而且是遥遥领先于所有其他淘品牌，操盘手是柳焕斌，柳焕斌离职后，目前似乎已经不再具有如此明显的领先优势，有兴趣的同学可以到百度指数上查询一下，时间轴拉长，对比麦包包和其他淘品牌关键词，看看当年的趋势变化。<span>名鞋库我记得在 11年 还是 12年 的时候，当时每天百度来路只有 1000 多而已，我跟他们市场副总裁韩步勇一向关系不错，还拿这个取笑过他们，但转年人家知耻而后勇，定下了每天百度来路 6 万的指标，通过和刑天 SEO 团队的深度合作，到年底的时候，竟然真的实现了。成为所有鞋类电商百度来路最多的平台，是的，超过了好乐买，也超过了当时的乐淘。仅此一项，每年节省广告费数千万，形成销售额数亿。而成本真的并不高。</span></p>
<p>SEO 这个话题如果扯开实在太大，有兴趣的同学，除了多去看百度指数，百度热榜外，建议学习使用&nbsp;aizhan.com，我前几年几乎每天都在 aizhan.com 上分析关键词，分析竞争对手的搜索来路构成。</p>
<p>说一个观点，我们天天讲产品要满足用户需求，什么是用户需求？产品经理拍拍脑袋就是用户需求么？为什么用户会去搜索引擎搜索？搜索行为不就是用户需求么？搜索的频率不就是需求的强度么？按照用户的搜索词频度去设计网站，定义网站的架构，不就是满足用户需求么？你连用户搜索行为都不分析，摆出一副高高在上，我只关心用户，不关心搜索的态度，你真的关心的是用户么？</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 21 Sep 2015 15:59:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[谷歌：下一个十年 跨境电商路在何方？]]></title>
      <link>https://www.360magento.com/blog/next-step-ecomerce/</link>
      <description><![CDATA[<p>9月19日，2015第五届中国跨境电商大会暨海贸会5周年在广州召开。Google出口业务总经理黄秀兰出席并与现场嘉宾分享了Google对跨境电商未来趋势的解读。她提到，市场洞察、数据分析、营销策略将在未来<a title="magento电商网站开发'" href="https://www.360magento.com/">跨境电商</a>领域的竞争中起到越来越重要的作用。</p>
<p>10年前的2005年，中国外贸电商的一个重要品类&mdash;&mdash;婚纱悄然兴起。在著名的虎丘婚纱一条街，几十元到一两百就能买到相当不错的婚纱，而欧美市场的一条婚纱价格至少在三五百美金以上。巨大的价差促成了一大批企业通过网络将婚纱卖到海外，赢得了外贸电商的第一桶金。</p>
<p>十年来，互联网已成为<a title="magento电商网站开发'" href="https://www.360magento.com/">跨境电商</a>发展的重要驱动力。Google作为全球互联网行业的先行者，坚持为中国的企业提供前沿的数字营销理念以及全方位的数字营销解决方案和服务，帮助中国企业精准定位国际市场，推动中国跨境电商的整体成长。</p>
<p>全球与&ldquo;进出口&rdquo;相关的搜索中，中国拔得头筹</p>
<p>十年来，跨境电商也逐步从小打小闹的作坊式生意开始向资本市场靠拢。2007年成立的兰亭集势，2013年登陆纽交所。2014年，百圆裤业10亿元收购跨境电商环球易购，后来改名为跨境通，市值接近200亿。</p>
<p>从07年至今，在Google上与&ldquo;进出口&rdquo;相关的搜索中，中国最受关注。这体现了世界对一个国家进出口的关注程度。在过去几年中，&ldquo;中国&rdquo;很明显的形成了一条上扬的曲线。它的关注度，是位于第二名的美国的八倍之多。</p>
<h2>下一个十年，跨境电商路在何方？</h2>
<p>通过对数据的分析，Google提出未来十年跨境电商的五大趋势和变化，而其中有一些变化正在发生。</p>
<h3>趋势1: 从卖给&ldquo;所有人&rdquo;到卖给&ldquo;一些人&rdquo;</h3>
<p>从卖给&ldquo;所有人&rdquo;到卖给&ldquo;一些人&rdquo;，即定位的变化。在跨境电子商务刚刚兴起的几年里，海内外价格差是选择商品的唯一信号。那个时期的网站，从热卖商品到网站设计，再到季节性促销，都出奇的一致。一个网站里基本也集合了所有热卖商品，婚纱，手机，配件，水龙头，奇怪地组合在一起。&ldquo;卖给所有人&rdquo;的时代正在远去。</p>
<p>如今的跨境电商已进入一个精细化、垂直化竞争的时代。目标群体的定位也越来越清晰。他们喜欢什么，喜欢什么时候买，都要能了如指掌。</p>
<h3>趋势2: 从大规模制造到小规模定制</h3>
<p>在&ldquo;工业4.0&rdquo;时代，物联网、智能化等新技术正在提高制造业水平，制造业正向智能化转型，用户需求决定生产制造，传统供应链向柔性供应链转变。</p>
<p>以服装业为例，以前衣服从设计到打版、定型，需要半年的时间，然后采购物料，进入生产流程，到进入流通渠道，基本需要20个月。近年来，&ldquo;快时尚&rdquo;风靡全球，它反映在对潮流的快速响应，从捕捉时尚潮流到将产品送到消费者手中所用的时间短。这样的生产方式，便于企业迅速收集市场反馈数据，并基于数据做进一步的产品发展决策。受互联网影响的小而快的生产模式正在对制造业产生更深刻的变革。甚至可以在用户需求明确以后才进行生产。现在50件起订，7天快速生产的服装企业正应运而生。</p>
<h3>趋势3：从卖白牌到卖品牌</h3>
<p>如果过去十年，主要竞争的是山寨、无品牌产品，那么跨境电商的下一个十年将进入品牌的竞争，未来最终会进入一个跨境电商的品牌时代。小而美的品牌将会在跨境电商竞争中拥有重要的位置。</p>
<p>以服装行业搜索行为变化为例。服饰类一般关键字的搜索基本比较平稳，主要是季节性的波动。而品牌关键字的搜索却直线上升。2007年服装类的热门搜索词中，每300个搜索中会有1个中国服装的网站，而到了2015年，每10个搜索就有1个中国服装网站品牌。</p>
<h3>趋势4: 从硬广告到软沟通</h3>
<p>从营销的角度看，未来最重要的一个趋势就是，广告正在消失&mdash;&mdash;那些旗帜鲜明的&ldquo;硬广告&rdquo;正在消失，广告正在以&ldquo;沟通&rdquo;的形式融入到你的生活。在移动时代，无论何时何地、遇到何种状况，人们通过使用手机即时解决问题的时刻;也就是消费者产生学习、探索、观看、查找或购买意愿时，习惯于通过智能电话这类最贴身的移动设备达到目的、满足需求的时刻。</p>
<p>在过去，消费者将其转变为现实需要经历几天、几个星期甚至几个月的时间;因此过去的市场营销人员设计、从事营销活动时更专注于培养消费者的品牌意识和忠诚度，希望他们从购买意向到购买决定之间能够以此为导向。而当今的消费者从产生消费需求到实际购买可以在很短的时间内完成，这一瞬间就可能导致整个营销活动的成功或失败。</p>
<h3>趋势5: 从卖欧美到赢全球</h3>
<p>未来十年，跨境电商将真正走向全球。跨境电商在过去的竞争主要集中在欧美英语市场，但未来的竞争格局会大不同。在零售电商领域，亚太区的销售额现已超越美国和欧洲，位居全球第一。而拉丁美洲、中东等区域，他们的增长率将在2020年达到30%，是美国和欧洲的两倍。</p>
<p>据统计，跨境电商的主要投资市场和投资幅度增长最快的市场有显著不同。他们的投资市场，除去美国，澳大利亚，加拿大之外，还有三个最大的欧洲市场以及一些亚洲市场。而从增长最快的市场来看，中东地区占据着显著的位置。在前五名中，就有三个是中东国家，且增长率超过100%。</p>
<p>由此，过去的跨境电商竞争基本是以廉价商品、粗放竞争为主。而现在，跨境电商的竞争已经转型，市场洞察、数据分析、营销策略将在竞争中起到越来越重要的地位。为了更好的服务中国的跨境电商企业，Google在五年前设置了专门的&ldquo;Google 出口顾问&rdquo;来为客户提供深度市场分析，网站用户体验咨询以及营销方案优化。下一个十年，Google也将和更多的企业携手同行，迎接新的挑战。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 21 Sep 2015 15:27:40 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[亚马逊将于2016年6月关闭网店建站服务]]></title>
      <link>https://www.360magento.com/blog/amazon-webstore/</link>
      <description><![CDATA[<p>亚马逊Amozon已正式对外公布将关闭<a title="电商网站开发" href="https://www.360magento.com/">网店建站</a>业务webstore，在未来一年多的时间里，卖家们需要找到新的服务替代者，其竞争对手如加拿大电商Shopify和澳大利亚电商初创公司Bigcommerce将有望获得更多的客户。亚马逊公司未对外透露关闭该业务的原因。</p>
<p>从外媒&ldquo;recode&rdquo;3月18号的报道中获悉，亚马逊已通知各线上卖家，亚马逊Webstore服务将于2016年6月1日关闭。在此项服务取消之前，亚马逊公司的客户们将有一年多的时间寻找新的服务商。</p>
<p>由于新公司如加拿大电商Shopify和澳大利亚电商初创公司Bigcommerce已经募集到了足以扩大业务和吸引更多客户的风险投资资金，面向中小企业的电商软件业务将面临愈加剧烈的竞争环境。不少朋友可能会记起，在去年夏天，eBay公司宣布中止提供面向小型网店的产品Magento Go，并建议他们将业务转到Bigcommerce。</p>
<p>亚马逊的卖家们也渐渐得知了这一消息。由于亚马逊的发言人拒绝对此置评，亚马逊此举的动机尚不得而知。畅路销（ChannelAdvisor）首席执行官Scot Wingo表示，畅路销已经开始建议一些卖家撤离亚马逊网店平台。Scot Wingo说：&ldquo;我们将协助大约百名在使用亚马逊平台的客户将业务过渡到其它电商平台，如Shopify、Bigcommerce,、Mozu和<a title="电商网站开发" href="https://www.360magento.com/">Magento</a>等。好消息是，作为库存管理和订单配送中心，我们可以为客户实现无缝对接。&rdquo;</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Mon, 21 Sep 2015 02:44:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 简化URL]]></title>
      <link>https://www.360magento.com/blog/simplify-URL/</link>
      <description><![CDATA[<p>在<a title="电商网站开发" href="https://www.360magento.com/">Magento模板开发</a>中，有时候需要将多级分类的url简化，Magento的URL默认是显示多级分类的</p>
<p>例如：http://www.360magento.com/分类1/分类2/分类3</p>
<p>现在需要简化为：</p>
<p>分类2的URL为：http://www.360magento.com/分类2</p>
<p>分类3的URL为：http://www.360magento.com/分类3</p>
<p>具体修改方法如下：</p>
<p>打开app/code/core/Mage/Catalog/Model/Url.php这个php文件，找到如下代码：</p>
<pre><code>if (null === $parentPath){ 
$parentPath = $this-&gt;getResource()-&gt;getCategoryParentPath($category);
 }
elseif ($parentPath == '/'){ 
$parentPath = ''; 
}
</code></pre>
<p>把上面的代码注释，即：</p>
<pre><code>
//if (null === $parentPath){
//$parentPath = $this-&gt;getResource()-&gt;getCategoryParentPath($category); 
//}
//elseif ($parentPath == '/') { <br />//$parentPath = ''; 
//}
</code></pre>
<p>$parentPath = $this-&gt;getResource()-&gt;getCategoryParentPath($category); 是获取分类的父级分类，</p>
<p>下面将父级分类设置为空则在生成的URL中屏蔽掉父级</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 20 Sep 2015 10:56:34 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[力推金融与跨境电商融合]]></title>
      <link>https://www.360magento.com/blog/finance-cross-border-ecommerce/</link>
      <description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9月19日，由自治区商务厅、防城港市政府共同举办的中国-东盟金融<a title="电商网站开发" href="https://www.360magento.com/">跨境电商</a>合作与发展论坛在南宁举办。</p>
<p>　　论坛围绕&ldquo;一带一路&rdquo;背景下金融与跨境电子商务如何结合发展等相关议题展开。自治区商务厅表示，目前在东南亚零售总额中，电子商务份额还不足1%，而中国、欧洲和美国已达到6%至10%。随着互联网普及率的上升，预计在未来几年，东南亚在线零售将增长25%，广西发展面向东盟的<a title="跨境电子商务" href="http://www.360magento.com">跨境电子商务</a>拥有广阔的市场空间。面向东盟跨境电子商务的快速发展必将带动跨境支付、金融快速发展。尽快完善跨境电商的生态体系，将为中国-东盟特别是广西和东盟的跨境电商合作提供有力支撑。</p>
<p>　　据介绍，2014年9月南宁获批成为国家跨境贸易电子商务服务试点城市。今年以来，一批中国-东盟跨境电商平台正式上线，与泰国、越南、新加坡、马来西亚等东盟国家建立了良好的合作关系，广西跨境电子商务企业正在不断发展壮大。</p>
<p>　　论坛上，专家学者和企业代表就中国-东盟跨境电商市场分析与政策解读、地方政府如何推动当地<a title="网站建设" href="http://www.360magento.com">&ldquo;互联网+&rdquo;</a>电商发展、重构跨境电商与农产品流通业态、跨境电商综合金融服务助力企业发展、人民币强势背景下跨境电商货币结算等议题发表真知灼见。大会还安排了电商企业项目推介、金融机构融资服务专题推介，举行了阿里巴巴1688进口货源平台&middot;防城港站上线仪式，这是&ldquo;电商入桂&rdquo;的又一重要成果。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 20 Sep 2015 10:11:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[首批区级电商重点培育名单出炉]]></title>
      <link>https://www.360magento.com/blog/district-level-ecommerce/</link>
      <description><![CDATA[<p>日前，记者从区商务局了解到，第一批萧山电子商务产业重点培育企业名单正式出炉，7家电商企业榜上有名。据悉，本次认定的企业包含5家电子商务企业和2家电子商务服务企业。</p>
<p><strong>　　电商行业巨头</strong></p>
<p>　　近日，国内知名医药巨头康恩贝与浙江珍诚医药在线股份有限公司达成合作协议，此番两大企业的强强联合，被业内誉为线下实体品牌与线上流通渠道的完美结合，有望重新定义医药电商行业。</p>
<p>　　而对珍诚医药来说，此次引入康恩贝战略投资，将进一步充实公司现金流，加速产业链布局。据悉，珍诚医药目前正处于高速扩张阶段，这其中包括建设现代物流基地、推进药联５万家项目等。</p>
<p>　　珍诚医药是萧山首批区级电商产业重点培育企业之一。除珍诚医药外，此次入选的其他６家企业分别是：杭州维卓电子商务有限公司、九州通集团杭州医药有限公司、杭州卡当礼品有限公司、浙江胜利羽绒制品有限公司、杭州珍诚<a href="http://www.360magento.com title=">网络科技有限公司</a>、杭州精纱信息技术有限公司。</p>
<p>　　根据相关评选标准，入选的电子商务企业要求从事网络销售，年网络交易额在2000万元以上，电子商务服务企业从事代运营等相关配套支撑服务，年业务收入在500万元以上。</p>
<p>　　此外，入选企业通过第三方平台或自建网站平台等形式，进行网上交易业务2年以上，或为电子商务产业发展和应用提供相关配套支撑服务2年以上。</p>
<p>　　据悉，电子商务产业重点培育企业每年认定一批，一经认定有效期为３年，期满后企业需要重新提出申请。</p>
<p><strong>　　站上<a title="360magento" href="http://www.360magento.com">&ldquo;互联网＋&rdquo;</a>风口</strong></p>
<p>　　&ldquo;从评选条件不难看出，这些企业都有一个共同点，那就是在电商行业扎根时间较长，经济效益、社会效益已经初步显现出来。&rdquo;萧山区内相关负责人表示，当前电商行业成为一大主流，很多企业纷纷涉足，但至于怎样做才更有效，这7家企业的商业模式或对其他企业具有一定参考价值，&ldquo;这也是评选首批电商重点企业的意义所在。&rdquo;该负责人说。</p>
<p>　　特别是，当前&ldquo;互联网＋&rdquo;风起云涌，各个行业各个企业都在积极对接&ldquo;互联网＋&rdquo;战略，尤其是萧山的一大批传统优势企业，更是积极投身其中，通过触网拓展销售渠道，创新商业模式，推动业务结构转型升级。</p>
<p>　　比如说浙江胜利羽绒制品有限公司，这家以出口羽绒被为主的传统生产型企业，在国内站稳脚跟之后，目前还在日本注册了电子商务公司，准备开展<a title="电商网站开发" href="https://www.360magento.com/">跨境电商</a>业务。据悉，胜利羽绒的跨境电商业务即将上线。</p>
<p>　　而另一家企业杭州卡当礼品有限公司，主打创意个性礼物定制，其产品线囊括了时尚饰品、珠宝手表、鞋包配饰等数十个大类超千款产品。事实上，该公司销售额连续多年保持了近300%的增幅，并在个性礼品定制行业处于第一品牌的优势地位。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sun, 20 Sep 2015 10:09:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[京东云互联网+质检]]></title>
      <link>https://www.360magento.com/blog/jd-internet/</link>
      <description><![CDATA[<p><span>9月16日，第三届国际检验检测技术与装备博览会在北京雁栖湖国际会议中心正式开幕。开幕式上，京东集团与中国出入境检验检疫协会举行了战略合作签约仪式，将共同打造中国<a title="电商网站开发" href="https://www.360magento.com/">电商</a>产品质量云平台。</span></p>
<p>京东集团副总裁何刚与中国出入境检验检疫协会副秘书长段小红签署了战略合作协议。国务院参事、中国出入境检验检疫协会葛志荣会长，国家质检总局项玉章总检验师，中国出入境检验检疫协会鲍俊凯秘书长，中国检验认证集团齐京安董事长等高层领导也出席了签约仪式。据悉，双方未来将在以下三个领域重点展开深入合作。</p>
<p>一、推进建立行业标准，共同打造生态体系</p>
<p>双方将共同发起并制定电子商务产品质量标准，推动建立<a title="电商网站开发" href="https://www.360magento.com/">电子商务</a>产品认证和企业质量信用评价体系，并通过电子商务产品质量追溯体系，建立以组织机构代码和商品条码为基础的电子商务产品质量追溯制度。依托京东云计算和大数据技术，随着业务与数据的深入整合,双方将打造全新的电商产品质量生态体系。</p>
<p>二、盘活检验检测存量数据，实现数据价值真正增值</p>
<p>双方将借助京东云计算服务构建社会化的进出口商品质量信息库和质量信息服务平台，并将其与商品大数据追溯系统、电子商务产品质量信息公共服务平台进行系统整合与优化，利用京东大数据分析系统和算法模型、数据挖掘等分析技术，将进出口商品的信息数据、商品标准、认证信息、许可信息等数据进行分析整合，从而充分展现质量数据和信息的实用价值，为企业和消费者提供更多的便利和保障。</p>
<p>三、推进电商产品质量提升，服务生态企业和消费者</p>
<p>借助京东云计算服务实现对电商产品质量状况的在线监测，通过京东大数据分析技术提升电商产品质量信息服务平台的应用能力，为政府监管部门、电商企业、广大消费者提供安全、便利的商品质量信息服务。进而全面提升企业进货质量的把关能力，为消费者提供产品质量标准方面的解读服务，让消费者直观地了解产品质量标准，区分产品质量优劣，实现&ldquo;源头可溯、去向可查&rdquo;。</p>
<p>何刚表示，双方将建立长期的战略合作关系，充分发挥各自的资源优势，推进建立健全的电子商务质量管理制度规范，在电子商务领域营造人人重视质量、人人创造质量、人人享受质量的社会氛围，共同提升中国电子商务企业的质量保证能力，净化并提高<a title="电商网站建设" href="http://www.360magento.com">电子商务</a>产业的质量发展环境。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 19 Sep 2015 02:15:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[2015中国-东盟电子商务峰会开幕]]></title>
      <link>https://www.360magento.com/blog/2015-asen-ecommerce/</link>
      <description><![CDATA[<p>9月18日，2015中国-东盟电子商务峰会在南宁开幕。峰会以&ldquo;<a title="电商网站建设" href="http://www.360magento.com">互联网+</a>新战略，中国-东盟新经济&rdquo;为主题，来自中国和东盟国家政要、重要商协会负责人、著名经济学家、电商领军企业家和各界代表结合&ldquo;中国-东盟互联网+新经济&rdquo;、&ldquo;中国-东盟<a title="跨境电商平台" href="http://www.360magento.com">跨境电商</a>新基地&rdquo;、&ldquo;中国-东盟经贸信息港展望&rdquo;和&ldquo;中国-东盟创新创业新机遇&rdquo;四大议题开展主题演讲及高端对话，现场气氛活跃，反响热烈。</p>
<p>大会指出，&ldquo;互联网+&rdquo;对形成新的经济增长点、促进国际产能合作、推动区域经济一体化有重要意义。广西将秉持开放合作、互利共赢的精神，以打造中国-东盟跨境电商基地为目标，推动中国-东盟经贸信息港建设，与东盟各国朋友一道，共商、共建、共享21世纪&ldquo;电商丝路&rdquo;，为打造中国-东盟自由贸易区升级版和中国东盟命运共同体进行探索和努力。</p>
<p>&ldquo;广西是面向东盟的前沿和门户，是离东盟最近的省份。广西和东盟是山水相连、地缘相近，联系非常密切，做电商得天独厚。&rdquo;除了地域优势，广西商务厅参会领导表示，发展电商，特别是跨境电商，特别需要人，特别是东盟10国语言不同，小语种的人才非常稀缺。广西是小语种人才的培训基地，这方面广西有非常大的优势。此外，中国-东盟信息港正式落地南宁，中国-东盟信息港将要建设经贸信息港，打造电子商务云中心，利用信息中心、交流中心、商务会展中心，这些都是为电商发展提供了条件。</p>
<p>菲律宾参会嘉宾表示，广西与菲律宾的合作非常有潜力。今天有相当多的电商企业来参加会议，这些电商本身有一个非常好的平台，并且他们也志在进入菲律宾市场，所以广西在合作进程当中占有一个非常重要的作用。</p>
<p>本届峰会促成了一系列合作，广西&ldquo;互联网+&rdquo;产品二维码中心建设、广西商务厅与苏宁云商战略合作、东兴市与京东集团华南区关于电子商务进农村示范工程战略合作等一批重大合作项目落地广西发展。</p>
<p>据了解，9月19日，峰会还将举办中国-东盟电商领袖交流会、中国-东盟电商创业交流会、中国-东盟金融跨境电商合作与发展论坛等一系列活动。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 19 Sep 2015 02:09:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[告别传统搜索模式，移动电商进入场景化发展新时代]]></title>
      <link>https://www.360magento.com/blog/mobile-ecommerce/</link>
      <description><![CDATA[<p><a title="互联网" href="http://www.360magento.com">移动互联网</a>的快速发展以及智能终端的普及，培养了用户扫一扫、查一查身边出现的一些商业广告的习惯，甚至可以触发用户于&ldquo;不经意&rdquo;间完成一次网上购物。研究表明，66%的智能手机用户会通过手机查询旅途中、就餐中看到的商业广告的信息。</p>
<p>在腾讯移动事业群副总裁马斌看来，人们的购买方式正在由传统化向碎片化转变，支付方式由PC端转到移动端，随时随地购物的消费需求日益迫切。在这个过程中，&ldquo;无需搜索，按需推送&rdquo;的场景化服务应运而生。</p>
<p>&ldquo;纵观国内电子商务市场，&rdquo;业内人士认为，&ldquo;场景化或将可以撬动本地生活服务电商领域的亿万商机，成为移动电商发展新方向。&rdquo;具体说来，原因主要有以下两点：</p>
<h2>一、移动互联网时代，场景触发消费者购物欲</h2>
<p>近年来国内电商呈现蓬勃发展之势，并先后经历了电商的搜索时代和流量时代。但不管哪个阶段，消费者的购买方式始终是具有目的性的，并且必经此流程：目的&mdash;&mdash;搜索&mdash;&mdash;选择&mdash;&mdash;购买。但是科技的飞速发展，为消费者带来了更加便捷的购物体验。</p>
<p>以消费者买包为例，按照传统流程首先是广泛搜索，在某个<a title="电商网站建设" href="http://www.360magento.com">商城网站</a>通过品牌、种类来锁定某款样式;其次，看看这个包是不是时尚，是不是符合自己的个性，是不是性价比很高;然后还需要看看有没有人购买，有没有人评论;最后综合考虑进行决策。购买决策时间长，甚至还会为某种原因最终放弃购买，<a title="电商平台建设" href="http://www.360magento.com">电商平台</a>并不能了解到用户所处的购买场景。</p>
<p>如果电商网站或者店铺提供了以上这些足够丰富的场景化信息，比如消费者进店后立即推送相应的折扣优惠，那么便会直接激发出购买欲望，迅速作出购买决策。这就是商家给消费者构建了一个场景，通过这个场景来触发消费。</p>
<p>事实上，&ldquo;场景&rdquo;是一个非常重要的词，产品和营销必须基于消费者具体、特定和鲜活的场景，研究消费者场景可以发现新产品机会，制造消费者场景可以开辟新产品空间，展示消费者场景可以驱动消费者的购买行为。</p>
<p>然而很多时候，一些电商网站和电商店铺并没有关注这一点，良好的客户体验一定是基于消费者的生活场景的，在商品促销中没有生活场景，对于消费者而言就是冰冷的，有生活场景就是可以被打动的。</p>
<h2>二、场景化可以更好提高电商交易转化</h2>
<p>&ldquo;场景触发不只是为了推送信息，更希望用户产生回单和复购，这是非常重要的。&rdquo;业内人士认为。</p>
<p>在传统购物中，刷卡、现金结算往往意味着商家与消费者的关系结束，用户粘性的缺乏使商家很难形成二次消费;但在场景服务中不一样了，商家如果能够通过智能手机的传感器WIFI/ibeacon等设备定位和触发，获知用户的具体位置场景，通过对用户行为数据的收集和分析建立起对他们的画像，就可以达到个性化、精准、前置信息的推送。不但为商家提升进店率、留存率、转化率带来了可能;这时，信息推送也不再被认为是骚扰，而是商家及时贴心的服务。</p>
<p>举例来说，当小编携带安装爱街&ldquo;WiFi密探&rdquo;的手机，来到望京凯德MALL，在闲逛路过&ldquo;太平鸟&rdquo;专卖店门口时，手机上就会收到&ldquo;太平鸟&rdquo;天猫旗舰店的新款推荐，可以和实体店比比价格和款式，点击就可以在手机上下单购买。场景购物，体验真好!</p>
<p>目前，万达电商&ldquo;飞凡网&rdquo;、阿里的&ldquo;喵街&rdquo;、迈外迪、爱街、鲜老虎等众多企业正在进行线下场景布局，通过营造更轻松、更智能、更个性化的购物体验，让顾客和商家建立长久关系。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Sat, 19 Sep 2015 01:55:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento通过分类搜索产品功能]]></title>
      <link>https://www.360magento.com/blog/magento-categpry-search/</link>
      <description><![CDATA[<p>想要magento站点搜索加上分类选项，只需要在magento相应的模板中，用以下代码替换app/design/你的主题名/template/catalogsearch/form.mini.phtml文件中的源代码即可。然后刷新索引和缓存，你将会发现搜索的旁边出来一个分类选项！</p>
<pre><code>
&lt;?php
        $category = Mage::getModel('catalog/category');
        if(is_object(Mage::registry('current_category'))){
            $current_category_path=Mage::registry('current_category')-&gt;getPathIds();
        }else{
            $current_category_path = array();
        }
        $category-&gt;load(Mage::app()-&gt;getStore()-&gt;getRootCategoryId());
        $children_string = $category-&gt;getChildren();
        $children = explode(',',$children_string);
        $extra_options='';
        foreach($children as $c){
            $selected = (in_array($c, $current_category_path))?'SELECTED':'';
            $extra_options.= '&lt;option value="' . $c . '" ' . $selected . '&gt;' . $category-&gt;load($c)-&gt;getName() . '&lt;/option&gt;' . "\n";
        }
        ?&gt;
        &lt;form id="search_mini_form" action="&lt;?php echo $this-&gt;helper('catalogSearch')-&gt;getResultUrl() ?&gt;" method="get"&gt;
            &lt;fieldset&gt;
                &lt;legend&gt;&lt;?php echo $this-&gt;__('Search Site') ?&gt;&lt;/legend&gt;
                &lt;div class="mini-search"&gt;
                    &lt;input id="search" type="text" class="input-text" name="&lt;?php echo $this-&gt;helper('catalogSearch')-&gt;getQueryParamName() ?&gt;" value="&lt;?php echo $this-&gt;helper('catalogSearch')-&gt;getEscapedQueryText() ?&gt;" /&gt;
                    &lt;select name="cat" id="cat" class="input-text"&gt;
                    &lt;option value=""&gt;All Departments&lt;/option&gt;
                    &lt;?= $extra_options ?&gt;
                   &lt;/select&gt;
                    &lt;input type="submit" value="Go" style="border: 1px solid #808080;" alt="&lt;?php echo $this-&gt;__('Search') ?&gt;" /&gt;
                    &lt;div id="search_autocomplete" class="search-autocomplete"&gt;&lt;/div&gt;
                    &lt;script type="text/javascript"&gt;
                    //&lt;![CDATA[
                        var searchForm = new Varien.searchForm('search_mini_form', 'search', '&lt;?php echo $this-&gt;__('search site...') ?&gt;');
                        searchForm.initAutocomplete('&lt;?php echo $this-&gt;helper('catalogSearch')-&gt;getSuggestUrl() ?&gt;', 'search_autocomplete');
                    //]]&gt;
                    &lt;/script&gt;
                &lt;/div&gt;
            &lt;/fieldset&gt;
        &lt;/form&gt;</code></pre>
<p><span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</span></p>]]></description>
      <pubDate>Fri, 18 Sep 2015 08:15:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[PayPal 2015中国外贸电子商务大会推出升级电商+解决方案]]></title>
      <link>https://www.360magento.com/blog/2015-paypal/</link>
      <description><![CDATA[<p>PayPal今天在深圳举办了其第四届中国<a href="http://www.360magento.com" title="外贸电商建站">外贸电子商务</a>大会，与800多名大型及中小型外贸电商、政府代表以及行业嘉宾一起探讨了全球跨境电商市场的新趋势、新机遇，共同促进中国跨境电商市场的繁荣发展。今年，PayPal 在大会上隆重推出了&ldquo;PayPal电商+&rdquo;创新解决方案，瞄准B2B2C (国内企业卖家￫国外企业买家￫国外消费者) 出口模式的巨大潜力，引领电商升级，共享全球机遇。</p>
<p><strong>挖掘跨境电商市场的新趋势、新机遇</strong></p>
<p>中国<a href="http://www.360magento.com" title="跨境电商网站建设">跨境电商</a>市场增速迅猛，截止2014年其市场规模已突破4万亿元，预计到2017年底规模将实现翻一番。其中，<a href="http://www.360magento.com" title="外贸网站建设">外贸B2B</a>(企业对企业) 模式是首要驱动力，占跨境电商整体市场份额高达80%。B2B2C蕴含大量机会，成为本次大会的焦点。</p>
<p>&ldquo;跨境电商市场充满商机，但纵观整个行业和我们的调查结果，我们发现对于中国商户来说，&gt;外贸B2B2C模式领域拥有独特机遇&mdash;&mdash;即把产品出口给面向终端消费者销售的国外企业买家。作为全球最受信赖的电子钱包，PayPal拥有无可比拟的全球闭环网络，帮助中国商户把握机遇。&rdquo; PayPal中国区跨境业务总经理胡柏迪表示，&ldquo;我们此次推出电商+创新解决方案，再次体现了PayPal对中国商户的承诺，通过持续创新，帮助他们应对商业挑战，在快速发展的电商市场中拓展海外业务。</p>
<p>PayPal调查显示，信任程度、交易便捷性和安全风险是买家和卖家双方进行跨境电商交易过程中的主要痛点，同时也是B2B2C电商市场发展面临的普遍挑战。PayPal根据中国商户的反馈，推出了&ldquo;PayPal电商+&rdquo;解决方案，通过以下一系列产品及服务，帮助中国商户应对挑战：</p>
<p>&bull; 新升级的卖家保障：PayPal卖家保障为合格的商户免费覆盖多种风险损失，包括如果买家因未经授权付款和&ldquo;物品未收到&rdquo;而提出补偿申请和退单。而即将推出的升级版卖家保障政策将涵盖通过PayPal支付平台发起的邮件交易，从而更好的保护中国商户，使之更安心的进行跨境电子交易。</p>
<p>&bull; 人民币提款服务：通过合作伙伴连连支付的支持，PayPal将于近期推出可选择性人民币提款服务。原先，中国商户们须花约7天的时间提取账户中的美金，再通过其他方式换成人民币。有了此项服务，只需约2-3天的时间，商户就能将账户中的余额以人民币的形式提取出来，从而大大减轻商户的现金流压力，提升交易便捷性。此外，中国商户还可将所提款项直接转账至全国184家银行，随时随地，轻松进行跨境电子贸易。</p>
<p>&bull; 风险管控：PayPal拥有全球领先的风险管理系统，帮助卖家从交易开始之初便着手规避恶意欺诈风险。一旦买家提交购买订单，PayPal的欺诈检测模型便即时启动跟踪，对欺诈交易做出风险预警。一旦监测到可疑交易，PayPal将立即开展专业的人工核查，由世界一流的风险管理专家亲自核查，从而判定该笔交易是否存在欺诈嫌疑。</p>
<p>&bull; 国际物流运输：PayPal通过国内外领先物流伙伴合作，为中国商户提供更经济、快捷的物流选择及服务，使其能更便利、安全地将商品运输至海外买家手中；针对B2B2C市场，PayPal正联手TNT，推出针对B2B2C商户的专属速递物流解决方案，在服务、价格等方面均有专属的优惠。同时针对B2C商户，PayPal还拥有联手中国邮政推出的贝邮宝物流解决方案，有效地解决了邮政小包的可视化，并有机地与PayPal的卖家保障政策结合，帮助商户解决了货物的安全性及可追踪等问题。</p>
<p>胡柏迪还表示：&ldquo;PayPal 明白电子支付平台只是跨境电商市场的繁荣发展中的一环。我们一直在倾听中国商户的意见，持续创新，通过开发全方位解决方案为中国商户打造更健康的全球电商生态系统，从而帮助他们拓展业务。&rdquo;</p>
<p>来自深圳市亿通趋势科技有限公司和青岛阳光五月发制品有限公司的两位商户代表在活动现场表示，PayPal外贸电子商务大会是一个很好的平台，能让商户了解跨境电商领域的新趋势和新动向。他们均对PayPal针对跨境电商市场痛点而推出的创新解决方案表示兴奋，并期待通过这些新服务在全球范围内拓展业务。</p>
<p>随着跨境电商的不断发展，外贸网站的地位也是与日俱增。360magento提供专业的基于magento系统的<a href="https://www.360magento.com/" title="magento电商网站开发">电商网站开发</a>服务，如有需求或相关咨询，<a href="https://www.360magento.com/contacts/" title="magento开发">请与我们联系</a>。</p>
<p>&nbsp;</p>]]></description>
      <pubDate>Fri, 18 Sep 2015 07:17:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[跨境电商高峰论坛带来饕餮盛宴]]></title>
      <link>https://www.360magento.com/blog/Cross-border-electricity-supplier-Forum/</link>
      <description><![CDATA[<p>&nbsp; &nbsp; &nbsp; &nbsp; 日前，在&ldquo;<a title="跨境电商平台建设" href="http://www.360magento.com">跨境电商</a>高峰论坛&rdquo;上，六位跨境电商企业的资深人士为现场观众带来一场饕餮盛宴，他们以&ldquo;跨境电商的潜力和未来&rdquo;为主题，深入解读&ldquo;互联网+&rdquo;剖析了目前跨境电商的现状和痛点，从物流、信息流、资金流三方面切入，畅谈跨境电商未来格局和潜力，集中展示外贸综合服务平台、跨境电商等新业态新模式。</p>
<p><span>　 &nbsp; &nbsp;在这次论坛上，浙江点库电子商务有限公司销售总监康山以&ldquo;<a title="跨境电商平台建设" href="http://www.360magento.com">跨境电商B2B2C</a>物流解决方案&rdquo;为主题，介绍了浙江点库一站式跨境电商物流服务体系及其全球分销平台。敦煌网副总裁王添天介以&ldquo;开拓跨境电商的新蓝海&rdquo;为主题，介绍了敦煌网作为全球领先的外贸交易平台的优势及其正在用自身优势开拓跨境电商新蓝海的方向。兰亭集势品牌事业部负责人吕然以&ldquo;传统企业在跨境电商的品牌化之路&rdquo;为主题，介绍了兰亭集势作为目前国内知名的外贸销售网站为中小型企业提供的跨境电商服务。四海商舟创始人周宁</span><span>以&ldquo;跨境电商的机遇和挑战&rdquo;为主题，剖析了传统企业在跨境电商的品牌化之路。Wish招商经理Jerry以&ldquo;移动跨境电商的未来&rdquo;为主题，解读了Wish作为移动跨境电商平台的一匹黑马对移动端未来和发展潜力的看法，Paypal华东地区负责人温从镭以&ldquo;助力中国企业 扬帆商业蓝海&rdquo;为主题，分析了Paypal作为全球知名跨境电商支付公司为跨境电商提供的领先支付服务。</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Fri, 18 Sep 2015 02:40:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento 发送邮件代码(使用数据库中模板)]]></title>
      <link>https://www.360magento.com/blog/magento-send-email/</link>
      <description><![CDATA[<pre><code>      /* @var $translate Mage_Core_Model_Translate */  
        $translate = Mage::getSingleton('core/translate');  
        $translate-&gt;setTranslateInline(false);  
        $storeId  = Mage::app()-&gt;getStore()-&gt;getId();  
        $template ='1';</code></pre>
<p><span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; 这里，<span>邮件模板的ID<span>是由</span></span>$template的值来定义的，可以到后台-&gt;System-&gt;Transactional Emails获取邮件模板ID,也可以用magento默认的值，如 'contacts_email_email_template'</span><span style="color: #000000;"><br /></span></p>
<pre><code> $recipient = array(  
              'name'  =&gt; 'Alwayly',  
             'email' =&gt; 'sales@360magento.com'  
         );         
         //$recipient 是接收者的名字和邮箱地址

         $sender  = array(  
             'name'  =&gt; 'Alwayly',  
             'email' =&gt; 'sales@360magento.com'  
         );
          //$sender 是发送者的名字和邮箱地址,
         
         magento默认用的这句 $sender=Mage::getStoreConfig('sales_email/order/identity', $storeId) ,使用magento后台配置的发送人
           
         $mailTemplate = Mage::getModel('core/email_template')-&gt;load($template);  

         $mailTemplate-&gt;setDesignConfig(array('area'=&gt;'frontend', 'store'=&gt;$storeId))  
             -&gt;sendTransactional(
                 $template,  
                 $sender,  
                 $recipient['email'],  
                 $recipient['name'],  
                 array( // parameters to email  
                     'param1'=&gt; 'abc',  
                     'param2'=&gt; 'def',  
                     'param3'=&gt; 'ghi'  
</code></pre>
<p>这里是传进邮件模板里面的变量, 在模板里面用<span>{</span>{var param1 }}获取，如果传的是对象可以这样使用<span>{</span>{var object.getId()}} ) );</p>
<p>$translate-&gt;setTranslateInline(true);</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 10:13:26 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento Block应用原理分析以及magento调用其他phtml文件]]></title>
      <link>https://www.360magento.com/blog/magento-transfer-block/</link>
      <description><![CDATA[<p>如果你在本机的虚拟目录下建立了自己的magento项目，这里以项目名为magento为例，那么访问：</p>
<p>http://localhost/magento/index.php/customer/account/create/ 将进入用户注册界面。</p>
<h2>下面就从URL尝试分析Magento调用该页面的过程</h2>
<ol>
<li>1. URL中的customer表明当前访问的模块是customer，自动定位到： app\code\core\Mage\Customer</li>
<li>2. URL中的account表明当前访问的控制器文件为AccountController.php app\code\core\Mage\Customer\controllers\AccountController.php</li>
<li>3.URL中的create表明当前访问的php方法是createAction(),该方法在文件 app\code\core\Mage\Customer\controllers\AccountController.php</li>
<li>4. createAction()装载目录\app\design\frontend\default\default\layout\下名字和模块名相同的 layout文件，名字为customer.xml。然后寻找名字为&lt;customer_account_create&gt;的标签</li>
</ol>
<p><strong>Xml代码</strong></p>
<pre><code>
&lt;customer_account_create translate="label"&gt;
                &lt;label&gt;Customer Account Registration Form&lt;/label&gt;
                &lt;!-- Mage_Customer --&gt;
                &lt;remove name="right"/&gt;
                &lt;remove name="left"/&gt;

                &lt;reference name="root"&gt;
                    &lt;action method="setTemplate"&gt;&lt;template&gt;page/1column.phtml&lt;/template&gt;&lt;/action&gt;
                &lt;/reference&gt;

                &lt;reference name="content"&gt;
                    &lt;block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"&gt;
                        &lt;block type="page/html_wrapper" name="customer.form.register.fields.before" as="form_fields_before" translate="label"&gt;
                            &lt;label&gt;Form Fields Before&lt;/label&gt;
                        &lt;/block&gt;
                    &lt;/block&gt;
                &lt;/reference&gt;
            &lt;/customer_account_create&gt;
</code></pre>
<p>&lt;reference name="root"&gt; 用来说明你要使用的布局文件。</p>
<p>&lt;reference name="content"&gt;下的block就是你定义的block</p>
<p>上面的block是默认定义，可以由customer/form_register推测出来，block类文件位置： app\code\core\Mage\Customer\Block\Form\Register.php</p>
<p>template属性可找出出相应的模板文件为： app\design\frontend\default\default\template\customer\form\register.phtml</p>
<p>通过这样的配置block和template就联系起来了，可以在template文件中使用$this来访问block类的方法。</p>
<h3>下面我们实现一个新的block应用</h3>
<h4>1. 定义一个新的block文件:</h4>
<p>app\code\core\Mage\Customer\Block\Form\Register1.php</p>
<pre><code>                class Mage_Customer_Block_Form_Register1 extends Mage_Directory_Block_Data{  
                public function getHello(){  
                  return "Hello Block";  
               }  
         }
</code></pre>
<h4>2. 定义template文件：</h4>
<p>app\design\frontend\default\default\template\customer\form\register1.phtml</p>
<p>Html代码：</p>
<p>&lt;?php echo $this-&gt;getHello(); ?&gt;</p>
<h4>3. 修改customer.xml配置</h4>
<p>将Xml代码</p>
<p>&lt;block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"/&gt;</p>
<p>修改为:</p>
<p>&lt;block type="customer/form_register1" name="customer_form_register1" template="customer/form/register1.phtml"/&gt;</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 10:06:37 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento getResourceModel()函数分析详细讲解]]></title>
      <link>https://www.360magento.com/blog/magento-getResourceModel/</link>
      <description><![CDATA[<p>getResourceModel()方法讲解</p>
<p>$collection = Mage::getResourceModel( 'catalogsearch/fulltext_collection' );</p>
<p>首先会找到app\code\core\Mage\CatalogSearch\etc\config.xml</p>
<p>找到 &lt;resourceModel&gt;</p>
<p>&lt;resourceModel&gt;catalogsearch_resource&lt;/resourceModel&gt; 得出结果：&nbsp;</p>
<p>模型文件地址为：\app\code\core\Mage\CatalogSearch\Model\Resource</p>
<p>加上参数，加载php文件地址为： \app\code\core\Mage\CatalogSearch\Model\Resource\Fulltext\Collection.php</p>
<p>获取目录分类模板 Mage::getStoreConfig('catalog/frontend/grid_per_page_values'); 它找的是app\code\core\Mage\Catalog\etc\config.xml</p>
<ol>
<li>找出&lt;catalog&gt;节点</li>
<li>找出&lt;frontend&gt;节点</li>
<li>找出节点grid_per_page_values里的值</li>
</ol>
<p>$helper = Mage::helper('catalog/category' );</p>
<p>$_categories = $helper-&gt;getStoreCategories();获取顶级分类</p>
<p>$categoryChildrens = $_category-&gt; getChildren();获取子分类</p>
<p>&lt;?php echo $_category-&gt;getUrl(); ?&gt;</p>
<p>文件位置是：app\code\core\Mage\Catalog\Model\Category.php</p>
<p>$tree = Mage::getResourceModel('catalog/category_tree');</p>
<p>Mage_Catalog_Model_Resource_Category_Tree</p>
<p><strong>获取资源模型</strong></p>
<p>加载的文件是app\code\core\Mage\Catalog\Model\Resource\Category\Tree.php</p>
<p>获取分类request_path SELECT `t1c_catalog_category_entity`.* FROM `t1c_catalog_category_entity` WHERE (`t1c_catalog_category_entity`.`entity_id` = '2')</p>
<p>$this-&gt;getResource()</p>
<p>//$this-&gt;getResource() = Mage_Catalog_Model_Resource_Category</p>
<p>Mage_Catalog_Model_Category</p>
<p>getChildrenCategories()找出子类方法</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 09:59:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento URL重写、Block重写、controller重写、model重写]]></title>
      <link>https://www.360magento.com/blog/magento-rewrite/</link>
      <description><![CDATA[<p>当我们给magento开发插件的时候，必然会碰到要改变系统的原来的行为的情况。而magento作为一种插件机制的灵活的系统，直接修改核心代码是极为不妥的方式。而有时magento的事件机制并不能解决问题的时候，重写原来的文件的需求就产生了。在此打算总结下magento中的各种重写。</p>
<h2>magento model的重写</h2>
<p>实现方法：新的model继承你要重写的model，然后配置文件配置model的rewrite。例子如下： class Zone_Test_Model_Quote extends Mage_Sales_Model_Quote { //这里写一些自定义的方法或者覆盖父类的一些方法来实现自己的逻辑 } &lt;!--model rewrite xml配置--&gt; &lt;?xml version="1.0"?&gt; &lt;config&gt; &lt;!-- 这里省略其他配置... --&gt; &lt;global&gt; &lt;models&gt; &lt;sales&gt; &lt;rewrite&gt; &lt;quote&gt;Zone_Test_Model_Quote&lt;/quote&gt; &lt;/rewrite&gt; &lt;/sales&gt; &lt;/models&gt; &lt;/global&gt; &lt;/config&gt;</p>
<p>这样当我们用Mage::getModel(&lsquo;sales/quote&rsquo;)的时候实例化的就不是Mage_Sales_Model_Quote这个类的对象，而是我们重写后的类的对象了。</p>
<h2>magento model重写的原理：</h2>
<p>追踪Mage::getModel()这静态方法会发现如下代码：</p>
<pre><span>//file: app/code/core/Mage/Core/Model/Config.php<br /></span><span>//function: getGroupedClassName<br /></span><span>if </span>(<span>empty</span>(<span>$groupRootNode</span>)) {<br />    <span>$groupRootNode </span>= <span>'global/'</span>.<span>$groupType</span>.<span>'s'</span><span>;</span>&lt;/<span>pre</span>&gt;<br />}<br /><span>$classArr </span>= explode(<span>'/'</span><span>, </span>trim(<span>$classId</span>))<span>;<br /></span><span>$group </span>= <span>$classArr</span>[<span>0</span>]<span>;<br /></span><span>$class </span>= !<span>empty</span>(<span>$classArr</span>[<span>1</span>]) ? <span>$classArr</span>[<span>1</span>] : <span>null</span><span>;<br /></span><span><br /></span><span>if </span>(<span>isset</span>(<span>$this</span>-&gt;<span>_classNameCache</span>[<span>$groupRootNode</span>][<span>$group</span>][<span>$class</span>])) {<br />    <span>return </span><span>$this</span>-&gt;<span>_classNameCache</span>[<span>$groupRootNode</span>][<span>$group</span>][<span>$class</span>]<span>;<br /></span>}<br /><br /><span>$config </span>= <span>$this</span>-&gt;<span>_xml</span>-&gt;<span>global</span>-&gt;{<span>$groupType</span>.<span>'s'</span>}-&gt;{<span>$group</span>}<span>;<br /></span><span><br /></span><span>// First - check maybe the entity class was rewritten<br /></span><span>$className </span>= <span>null</span><span>;<br /></span><span>if </span>(<span>isset</span>(<span>$config</span>-&gt;<span>rewrite</span>-&gt;<span>$class</span>)) {<br />    <span>$className </span>= (string)<span>$config</span>-&gt;<span>rewrite</span>-&gt;<span>$class</span><span>;</span><span>//这里就是重写的关键<br /></span>}</pre>
<p>通过上面的代码，我们不难看出，原理就是获取类名的时候先查找是否有rewrite的节点，有就直接用rewrite的类名去实例化对象。</p>
<h2>magento Block的重写</h2>
<p>关于Block的重写因为block的实例化和model的实例化共用的一段代码，所以方法和配置也差不多，唯一的不同是block重写的配置节点为global/blocks，而model的是global/models。</p>
<h2>magento controller的重写</h2>
<p>实现方法：和model、block的重写方法差不多，新建自己的controller，然后配置下配置下模块的配置文件，让系统实例化 controller的时候能找到对应的类名。我们举个例子，重写checkout模块的cart 这个controller。代码如下：</p>
<pre><code> 
//首先新建自己的controller在自己的模块controllers目录里面
class Zone_Test_CartController extends Mage_Checkout_CartController
{
//这里新加自己的函数或者重写覆盖父类的同名函数
}


&lt;!--然后就是配置文件：--&gt;
&lt;?xml version="1.0"?&gt;</code></pre>
<pre><span>&lt;config&gt;<br /></span><span>&lt;!-- 这里省略其他配置... --&gt;<br /></span><span>&lt;frontend&gt;<br /></span><span>    &lt;routers&gt;<br /></span><span>        &lt;checkout&gt;<br /></span><span>            &lt;args&gt;<br /></span><span>                &lt;modules&gt;<br /></span><span>                    &lt;Zone_Test </span><span>before</span><span>="Mage_Checkout"</span><span>&gt;</span>Zone_Test<span>&lt;/Zone_Test&gt;<br /></span><span>                &lt;/modules&gt;<br /></span><span>            &lt;/args&gt;<br /></span><span>        &lt;/checkout&gt;<br /></span><span>    &lt;/routers&gt;<br /></span><span>&lt;/frontend&gt;<br /></span><span>&lt;/config&gt;</span></pre>
<p>这样配置好后，当我们在浏览器上输入http://youhost/checkout/cart的时候实际上执行的是我们自己的模块里面的Zone_Test_CartController这里类的对象的indexAction方法。</p>
<h2>magento 重写实现原理：</h2>
<p>magento在路由过程中会通过url获取到frontName为&ldquo;checkout&rdquo;和controller为&ldquo;cart&rdquo;,然后通过路由器的 getModuleByFrontName方法获取到一个数组，这数组就是我们配置的modules，而且是排序过的，排序按配置节点的before或者 after来排序的。我们这个例子就array(&lsquo;Zonet_Test&rsquo;, &lsquo;Mage_Checkout&rsquo;)，然后遍历这个数组通过数组里面的值和cart去取到对应的controller类 Zone_Test_CartController，实例化然后执行对应的action方法。相关代码如下：</p>
<pre><span>//file:app/code/core/Mage/Core/Controller/Varien/Router/Standard.php<br /></span><span>//function:match<br /></span><span><br /></span><span>public function </span><span>match</span>(Zend_Controller_Request_Http <span>$request</span>)<br />{<br />    ...<br />    <span>/**<br /></span><span>     * Searching router args by module name from route using it as key<br /></span><span>     */<br /></span><span>$modules </span>= <span>$this</span>-&gt;<span>getModuleByFrontName</span>(<span>$module</span>)<span>;</span><span>//获取真实模块的数组，也就是合并模块路由配置里面的module和modules。<br /></span>...<br />    <span>/**<br /></span><span>     * Going through modules to find appropriate controller<br /></span><span>     */<br /></span><span>$found </span>= <span>false</span><span>;<br /></span><span>foreach </span>(<span>$modules </span><span>as </span><span>$realModule</span>) {<span>//这个循环里按配置的顺序去拼接controller类<br /></span><span>$request</span>-&gt;<span>setRouteName</span>(<span>$this</span>-&gt;<span>getRouteByFrontName</span>(<span>$module</span>))<span>;<br /></span><span><br /></span><span>// get controller name<br /></span><span>if </span>(<span>$request</span>-&gt;<span>getControllerName</span>()) {<br />            <span>$controller </span>= <span>$request</span>-&gt;<span>getControllerName</span>()<span>;<br /></span>} <span>else </span>{<br />            <span>if </span>(!<span>empty</span>(<span>$p</span>[<span>1</span>])) {<br />                <span>$controller </span>= <span>$p</span>[<span>1</span>]<span>;<br /></span>} <span>else </span>{<br />                <span>$controller </span>= <span>$front</span>-&gt;<span>getDefault</span>(<span>'controller'</span>)<span>;<br /></span><span>$request</span>-&gt;<span>setAlias</span>(Mage_Core_Model_Url_Rewrite::<span>REWRITE_REQUEST_PATH_ALIAS</span><span>,</span>ltrim(<span>$request</span>-&gt;<span>getOriginalPathInfo</span>()<span>, </span><span>'/'</span>))<span>;<br /></span>}<br />        }<br /><br /><span>// get action name<br /></span><span>if </span>(<span>empty</span>(<span>$action</span>)) {<br />            <span>if </span>(<span>$request</span>-&gt;<span>getActionName</span>()) {<br />                <span>$action </span>= <span>$request</span>-&gt;<span>getActionName</span>()<span>;<br /></span>} <span>else </span>{<br />                <span>$action </span>= !<span>empty</span>(<span>$p</span>[<span>2</span>]) ? <span>$p</span>[<span>2</span>] : <span>$front</span>-&gt;<span>getDefault</span>(<span>'action'</span>)<span>;<br /></span>}<br />        }<br /><br /><span>//checking if this place should be secure<br /></span><span>$this</span>-&gt;<span>_checkShouldBeSecure</span>(<span>$request</span><span>, </span><span>'/'</span>.<span>$module</span>.<span>'/'</span>.<span>$controller</span>.<span>'/'</span>.<span>$action</span>)<span>;<br /></span><span><br /></span><span>$controllerClassName </span>= <span>$this</span>-&gt;<span>_validateControllerClassName</span>(<span>$realModule</span><span>, </span><span>$controller</span>)<span>;<br /></span><span>if </span>(!<span>$controllerClassName</span>) {<br />            <span>continue</span><span>;<br /></span>}<br /><br /><span>// instantiate controller class<br /></span><span>$controllerInstance </span>= Mage::<span>getControllerInstance</span>(<span>$controllerClassName</span><span>, </span><span>$request</span><span>, </span><span>$front</span>-&gt;<span>getResponse</span>())<span>;<br /></span><span><br /></span><span>if </span>(!<span>$controllerInstance</span>-&gt;<span>hasAction</span>(<span>$action</span>)) {<br />            <span>continue</span><span>;<br /></span>}<br /><br />        <span>$found </span>= <span>true</span><span>;<br /></span><span>break</span><span>;<br /></span>}<br /><br />}</pre>
<h2>magento 抽象类的rewrite</h2>
<p>对于抽象类的重写和model的重写有点不一样，因为抽象类是直接用来继承的，并没用到方法工厂，所以只能用其他方式去重写了。方法就是复制同样的文件结构到local代码池里面，然后对整个类复制过去，新增或者修改其中的方法来实现重写。原理就是magento的自动加载优先加载local的代码。代码如下：</p>
<pre><code>
//file:app/Mage.php
/**
* Set include path
*/
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';

$appPath = implode(PS, $paths);
set_include_path($appPath . PS . Mage::registry('original_include_path'));
include_once "Mage/Core/functions.php";
include_once "Varien/Autoload.php";
</code></pre>
<h2>magento url rewrite</h2>
<p>这里不讨论服务器上面实现的urlrewrite。magento的url rewrite有两种方法：1、xml配置。2、系统自带的产品和目录的url rewrite，这里后台也可以自定义url rewrite。关于后台的url rewrite这里不多说，不清楚的自行查看magento的使用手册。这里主要讲下xml配置及其实现原理，还有就是简答讲下系统自带的基于数据库的 rewrite的原理。</p>
<pre><code>
基于xml配置的url rewrite的例子：
&lt;!--模块配置文件：config.xml--&gt;
&lt;?xml version="1.0" encoding="UTF-8"?&gt;</code></pre>
<pre><span>&lt;config&gt;<br /></span><span>&lt;!-- 省略的其他配置...--&gt;<br /></span><span>&lt;global&gt;<br /></span><span>&lt;!-- 省略的其他配置... --&gt;<br /></span><span>&lt;rewrite&gt;<br /></span><span>        &lt;myrewrite&gt;<br /></span><span>            &lt;from&gt;<span>&nbsp;&lt;![CDATA[#/shopby/([\w+\+]+).html#]]&gt;</span>&lt;/from&gt;<br /></span><span>            &lt;to&gt;<span>&lt;![CDATA[/catalogsearch/result/index/q/$1]]&gt;</span>&lt;/to&gt;<br /></span><span>            &lt;complete/&gt;<br /></span><span>        &lt;/myrewrite&gt;<br /></span><span>    &lt;/rewrite&gt;<br /></span><span>&lt;/global&gt;<br /></span><span>&lt;/config&gt;</span></pre>
<p>这个例子就实现了/shopby/querytext.html到/catalogsearch/result/index/q/querytext的rewrite。</p>
<p>我们看看magento是怎么实现这个的。这个rewrite是发生在magento的前端控制器分发请求的时候，顺序在基于数据库的rewrite之后。原理很简单，就是查找各个模块配置文件里面global/rewrite节点取出rewrite配置，遍历这些配置通过正则替换把符合条件的from 替换成to，然后改变request对象的pathinfo。具体实现代码如下：</p>
<pre><code> 
public function rewrite()
{
$request = $this-&gt;getRequest();
$config = Mage::getConfig()-&gt;getNode('global/rewrite');
if (!$config) {
return;
}

foreach ($config-&gt;children() as $rewrite) {
$from = (string)$rewrite-&gt;from;
$to = (string)$rewrite-&gt;to;
if (empty($from) || empty($to)) {
continue;
}

//这里实现了路由名到前端路由器的替换，把{routeName}替换成对应的frontName，不过一般来说很多模块的routeName和frontName配置成一样了，这个特性使用的不多。
$from = $this-&gt;_processRewriteUrl($from);
$to = $this-&gt;_processRewriteUrl($to);

//这里是替换的核心所在，通过这句代码也很清楚的知道from 和to该填什么内容。

$pathInfo = preg_replace($from, $to, $request-&gt;getPathInfo());

if (isset($rewrite-&gt;complete)) {
$request-&gt;setPathInfo($pathInfo);
} else {
$request-&gt;rewritePathInfo($pathInfo);
}
}
}
</code></pre>
<p>关于系统自带的关于产品和目录的url rewrite，前端控制器里面只调用了一句代码： Mage::getModel(&lsquo;core/url_rewrite&rsquo;)-&gt;rewrite()，这是调用了核心模块的url rewrite model来处理的。这里面通过数据根据请求路径查找到目标路径，然后看数据库里面是配置的301还是302做相应的类型的跳转，这是通过php的 header函数实现的。剩下的类型就直接改变request 对象的pathinfo。这块magento有一个做的很好的地方，就是对于同一个产品或者目录url rewrite修改过后，原来的记录并不会删除，而是和新的rewrite相关联，这样老的url进来也能跳转的新的url上去，有利于seo。这块具体代码就不分析了，有空专门写个文章。有兴趣的自行翻看代码。</p>
<h2>magento config path rewrite</h2>
<p>magento的后台system配置，读取的时候一般按system.xml的节点路径来的。但是有的时候当我们不想使用这个路径的时候，配置时可以指定config_path的路径。这个常用于支付插件。因为获取支付类型的时候是通过固定的一个path取的，而我们模块自己的系统配置会用自己的路径，这时候config path就派上用场了。看下面的例子：</p>
<pre><span>&nbsp;&lt;!--//file:system.xml 这是moneybookers模块的system.xml文件的一个片段--&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;active translate="label"&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;label&gt;Enabled&lt;/label&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;frontend_type&gt;select&lt;/frontend_type&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;config_path&gt;payment/moneybookers_gir/active&lt;/config_path&gt;//这里重写了config path</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;source_model&gt;adminhtml/system_config_source_yesno&lt;/source_model&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;sort_order&gt;1&lt;/sort_order&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;show_in_default&gt;1&lt;/show_in_default&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;show_in_website&gt;1&lt;/show_in_website&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;show_in_store&gt;1&lt;/show_in_store&gt;</span><br /><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/active&gt;</span></pre>
<p>实现原理就更简单了，保存store config的时候，检查下有没有confg_path有就按这个path来保存到数据库。代码如下：</p>
<pre><code>
//file: app/code/core/Mage/Adminhtml/Model/Config/Data.php
//functon: save

/**
* Look for custom defined field path
*/
if (is_object($fieldConfig)) {
$configPath = (string)$fieldConfig-&gt;config_path;
if (!empty($configPath) &amp;&amp; strrpos($configPath, '/') &gt; 0) {//这里开始对自定义的path进行处理
// Extend old data with specified section group
$groupPath = substr($configPath, 0, strrpos($configPath, '/'));
if (!isset($oldConfigAdditionalGroups[$groupPath])) {
$oldConfig = $this-&gt;extendConfig($groupPath, true, $oldConfig);
$oldConfigAdditionalGroups[$groupPath] = true;
}
$path = $configPath;
}
}

$inherit = !empty($fieldData['inherit']);

$dataObject-&gt;setPath($path)
-&gt;setValue($fieldData['value']);
</code></pre>
<h2>magento template rewrite</h2>
<p>当我们写插件的时候想改变原有系统的某个template的时候比如产品详细页面的模板，因为是插件我们没办法控制它的theme只能通过xml配置来重写template了，原理也很容易，就是利用block的配置的action 节点，通过action节点来设置template。例子如下：</p>
<pre><code>
&lt;!-- file: mylayout.xml ---&gt;</code></pre>
<pre><span>&lt;layout </span><span>version</span><span>="0.1.0"</span><span>&gt;<br /></span><span>&lt;catalog_product_view&gt;<br /></span><span>    &lt;reference </span><span>name</span><span>="product.info"</span><span>&gt;<br /></span><span>        &lt;action </span><span>method</span><span>="setTemplate"</span><span>&gt;&lt;template&gt;</span>test/product/myselfview.phtml<span>&lt;/template&gt;<br /></span><span>        &lt;/action&gt;<br /></span><span>    &lt;/reference&gt;<br /></span><span>&lt;/catalog_product_view&gt;<br /></span><span>&lt;/layout&gt;</span></pre>
<p>这样通过插件的layout配置就可以改变产品详细页面的template为自己插件的模板。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 09:51:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento newsletter发送不成功讲解及代码分析]]></title>
      <link>https://www.360magento.com/blog/magento-fail-to-send-newsletter/</link>
      <description><![CDATA[<p>今天有个同事问我，昨天在后台建了一个newsletter的队列为什么到今天队列状态还是为未发送。询问了下cronjob的运行情况，发现 magento的cronjob是正常运行的，而邮件配置也是对的，其他邮件都能正常发送。百思不得其解，于是只好拿出杀手锏，翻源码追踪整个发送过程。一追踪下来马上发现了这根本就不是个问题，问题在我们对newsletter的发送不熟悉，对什么时候修改这个状态理解错误。下面让我们系统的学习下 magento的newsletter。</p>
<h2>newsletter的订阅</h2>
<p>magento的前台页面一般都会有一个小的表单用来输入邮箱号码，客户提交就可以订阅相关产品信息了。网站后台建立邮件队列，就可以批量的对订阅者发送邮件来进行营销。后台还可以开启邮件确认的功能，开启邮件确认功能后，用户提交订阅newsletter的表单时先把订阅状态设置为2，即未确认状态，然后生成一个随机字符串保存并发送确认邮件，邮件里面的链接带有生成的随机字符串。用户点链接确认的时候就把请求传入的字符串和保存在数据库的字符串对比，如果一致就把状态改成1，即订阅状态。newsletter订阅相关数据保存到newsletter_subscriber这个表。</p>
<h2>newsletter邮件模板的创建</h2>
<p>后台newsletter =&gt; newsletter templates =&gt;add new template就可以创建newsletter的邮件模板了，和其他邮件模板差不多的写法，区别是这只有一个变量就是subscriber对象，而且不能像订单之类的邮件模板一样可以选文件模板来修改，不过还好有些默认的代码。照着改改就好了。这个邮件模板的数据保存到数据库表 newsletter_template中。</p>
<h2>newsletter队列的创建</h2>
<p>当你创建好newsletter模板的时候会回到newsletter模板列表页面，每行模板右侧都有一个action列，下拉选择Queue Newsletter就会跳到创建页面。这个页面和newsletter模板的表单差不多，就多了一个队列开始执行的时间以及选择对应店铺的地方。填好点保存就创建了一个newsletter队列。那么创建一个队列的时候都干了些什么呢？首先，肯定是把我们填写的信息都保存到数据库中，这里是保存到 newsletter_queue这个表中。然后，它还做了一个事情就是保存队列和店铺的关系，队列和店铺关联的信息保存在表 newsletter_queue_store_link。我们看看保存queue店铺关系相关的代码。</p>
<p>app/code/core/Mage/Adminhtml/controllers/Newsletter/QueueController.php文件saveAction 方法中</p>
<pre><code>       
        $queue-&gt;setStores($this-&gt;getRequest()-&gt;getParam('stores', array()))//这里保存了店铺信息
        -&gt;setNewsletterSubject($this-&gt;getRequest()-&gt;getParam('subject'))
        -&gt;setNewsletterSenderName($this-&gt;getRequest()-&gt;getParam('sender_name'))
        -&gt;setNewsletterSenderEmail($this-&gt;getRequest()-&gt;getParam('sender_email'))
        -&gt;setNewsletterText($this-&gt;getRequest()-&gt;getParam('text'))
        -&gt;setNewsletterStyles($this-&gt;getRequest()-&gt;getParam('styles'));
         
        //app/code/core/Mage/Newsletter/Model/Queue.php
         
        public function setStores(array $storesIds)
         {
         $this-&gt;setSaveStoresFlag(true);//设置保存的标志
         $this-&gt;_stores = $storesIds;
         return $this;
         }
         
        //app/code/core/Mage/Newsletter/Model/Resource/Queue.php
         
        //queue model保存的之后会执行该方法
        protected function _afterSave(Mage_Core_Model_Abstract $queue)
         {
         if ($queue-&gt;getSaveStoresFlag()) {
         $this-&gt;setStores($queue);
         }
         return $this;
         }
         
        public function setStores(Mage_Newsletter_Model_Queue $queue)
         {
        //先把对应的queue store关系在表里删除掉
         $adapter = $this-&gt;_getWriteAdapter();
         $adapter-&gt;delete(
         $this-&gt;getTable('newsletter/queue_store_link'),
         array('queue_id = ?' =&gt; $queue-&gt;getId())
         );
         
        $stores = $queue-&gt;getStores();
         if (!is_array($stores)) {
         $stores = array();
         }
         
        foreach ($stores as $storeId) {
         $data = array();
         $data['store_id'] = $storeId;
         $data['queue_id'] = $queue-&gt;getId();
         
        //插入queue和store关系到表newsletter_queue_store_link中
        $adapter-&gt;insert($this-&gt;getTable('newsletter/queue_store_link'), $data);
         }
         $this-&gt;removeSubscribersFromQueue($queue);
         
        if (count($stores) == 0) {
         return $this;
         }
         
        //取所有订阅者的信息
        $subscribers = Mage::getResourceSingleton('newsletter/subscriber_collection')
         -&gt;addFieldToFilter('store_id', array('in'=&gt;$stores))
         -&gt;useOnlySubscribed()
         -&gt;load();
         
        $subscriberIds = array();
         
        foreach ($subscribers as $subscriber) {
         $subscriberIds[] = $subscriber-&gt;getId();
         }
         
        if (count($subscriberIds) &gt; 0) {
        //把队列和订阅者的关系插入到newsletter_queue_link表中
        $this-&gt;addSubscribersToQueue($queue, $subscriberIds);
         }
        return $this;
         }
</code></pre>
<h2>newsletter邮件的发送</h2>
<p>队列创建后并不会马上就会发送邮件。newsletter的邮件发送是通过magento的cronjob机制来执行的。模块配置里面配置好执行周期以及对应的执行方法，并服务器里面定时执行网站跟目录的cron.php或者cron.sh邮件才会发送。配置如下：</p>
<pre><code>
      &lt;!--  newsletter 模块配置文件config.xml --&gt;</code></pre>
<pre><span>&lt;crontab&gt;<br /></span><span>&lt;jobs&gt;<br /></span><span>    &lt;newsletter_send_all&gt;<br /></span><span>        &lt;schedule&gt;<br /></span><span>            &lt;cron_expr&gt;</span>*/5 * * * *<span>&lt;/cron_expr&gt;<br /></span><span>        &lt;/schedule&gt;<br /></span><span>        &lt;run&gt;<br /></span><span>            &lt;model&gt;</span>newsletter/observer::scheduledSend<span>&lt;/model&gt;<br /></span><span>        &lt;/run&gt;<br /></span><span>    &lt;/newsletter_send_all&gt;<br /></span><span>&lt;/jobs&gt;<br /></span><span>&lt;/crontab&gt;</span></pre>
<p>*/5 * * * *这个和linux下的crontab一样，表示每5分钟执行一次。这里是执行Mage::getModel(&lsquo;newsletter/observer&rsquo;)-&gt;scheduledSend();我们看看这个方法：</p>
<pre><code>        
//app/code/core/Mage/Newsletter/Model/Observer.php
        public function scheduledSend($schedule)
         {
         $countOfQueue = 3;//一次只处理三个队列
         $countOfSubscritions = 20;//一个队列只发其中的20封邮件
         
        $collection = Mage::getModel('newsletter/queue')-&gt;getCollection()
         -&gt;setPageSize($countOfQueue)
         -&gt;setCurPage(1)
         -&gt;addOnlyForSendingFilter()//只对队列里面没发过邮件的订阅者发邮件，判断是否发过是通过表newsletter_queue_link表中letter_sent_at这个字段是否为空来判断的
         -&gt;load();
         
        //对每一个队列model执行sendPerSubcritber方法
        $collection-&gt;walk('sendPerSubscriber', array($countOfSubscritions));
         }
</code></pre>
<p>发邮件的代码和magento其他模块发邮件没啥区别，就是取出我们设置好的邮件模板替换变量然后调用邮件发送类发送。</p>
<p>但是这里有个需要注意的地方，那就是 一次只是发20封邮件，当队列对应的订阅者都发完了之后才会修改队列状态为已发送。</p>
<pre><code>
        //app/code/core/Mage/Newsletter/Model/Queue.php
         
        public function sendPerSubscriber($count=20, array $additionalVariables=array())
         {
         
        // .....
         
        if ($this-&gt;getSubscribersCollection()-&gt;getSize() == 0) {
         $this-&gt;_finishQueue();
         return $this;
         }
         
        //.....
         
        //发送完毕，修改成已经发送状态
        if(count($collection-&gt;getItems()) &lt; $count-1 || count($collection-&gt;getItems()) == 0) {
         $this-&gt;_finishQueue();
         }      
        }
         
        protected function _finishQueue()
         {
         $this-&gt;setQueueFinishAt(Mage::getSingleton('core/date')-&gt;gmtDate());
         $this-&gt;setQueueStatus(self::STATUS_SENT);
         $this-&gt;save();      
        return $this;
         }
</code></pre>
<p>现在回到今天同事问的那个问题。队列是昨天创建的，而我们的订阅数有很多，假设就一万个吧，newsletter每五分钟才发20封邮件，要发完一万封就需要 2500分钟，差不多42个小时。邮件还没发完嘛，状态当然不会变成已经发送了。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 09:47:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento 事务处理使用方法]]></title>
      <link>https://www.360magento.com/blog/magento-transaction-processing/</link>
      <description><![CDATA[<p>Mangeto中执行某个功能时，如update、insert、delete，magento的model会自动对事务进行处理。这些写操作都集中到 model的save方法或者delete方法来处理，执行时候会调用resource model的beginTransaction方法来开启事务，调用resource model的commit方法来提交事务，调用resource model的rollBack方法来回滚事务。save方法代码如下：</p>
<pre><code>
        public function save()
         {
         /**
         * Direct deleted items to delete method
         */
         if ($this-&gt;isDeleted()) {
         return $this-&gt;delete();
         }
         if (!$this-&gt;_hasModelChanged()) {
         return $this;
         }
         $this-&gt;_getResource()-&gt;beginTransaction();//开启事务
         $dataCommited = false;
         try {
         $this-&gt;_beforeSave();
         if ($this-&gt;_dataSaveAllowed) {
         $this-&gt;_getResource()-&gt;save($this);
         $this-&gt;_afterSave();
         }
         $this-&gt;_getResource()-&gt;addCommitCallback(array($this, 'afterCommitCallback'))
         -&gt;commit();//添加提交后的回调函数
         $this-&gt;_hasDataChanges = false;
         $dataCommited = true;
         } catch (Exception $e) {
         $this-&gt;_getResource()-&gt;rollBack();//异常时事务回滚
         $this-&gt;_hasDataChanges = true;
         throw $e;
         }
         if ($dataCommited) {
         $this-&gt;_afterSaveCommit();
         }
         return $this;
         }
</code></pre>
<p>delete方法和save类似，这里就不贴代码出来分析了。</p>
<h2>多个model的事务处理</h2>
<p>单个model的事务处理很简单，magento的model层直接就处理了，不需要额外的代码。那么当我们的业务同时涉及到多个model，并且必须是当成一个事务来处理的时候，该怎么处理呢？不用担心，像magento这么优秀的系统不可能不会考虑到这些情况的。于是类 Mage_Core_Model_Resource_Transaction派上用场了。一个典型的多model事务处理如下：</p>
<pre><code>        
$transaction = Mage::getModel('core/resource_transaction');
        $transaction-&gt;addObject($model1);
        $transaction-&gt;addObject($model2);
        $transaction-&gt;addObject($model3);
        //...
         
        try {
         $transaction-&gt;save();
        //或者进行删除操作$transaction-&gt;delete();
         } catch (Exception $e) {
        //异常处理
        }
</code></pre>
<p>那么当我们通过addObject把相关的model都添加到事务处理器 Mage_Core_Model_Resource_Transaction里面并执行save或者delete的时候，做了什么呢？我们以save为例子进行深入。</p>
<pre><code>        
public function save()
         {
         $this-&gt;_startTransaction();//开启事务
         $error = false;
         
        try {
         foreach ($this-&gt;_objects as $object) {
         $object-&gt;save();//遍历添加进来的oject并执行其save方法
         }
         } catch (Exception $e) {
         $error = $e;
         }
         
        if ($error === false) {
         try {
         $this-&gt;_runCallbacks();//执行回调函数
         } catch (Exception $e) {
         $error = $e;
         }
         }
         
        if ($error) {
         $this-&gt;_rollbackTransaction();//异常，回滚事务
         throw $error;
         } else {
         $this-&gt;_commitTransaction();
         }       
        return $this;
         }
         
        protected function _startTransaction()
         {
        //遍历相关对象执行对象的resource model的beginTransaction方法开启事务
         foreach ($this-&gt;_objects as $object) {
         $object-&gt;getResource()-&gt;beginTransaction();
         }
         return $this;
         }
         
        protected function _commitTransaction()       
        {
        //遍历相关对象执行对象的resource model的commit方法提交事务
         foreach ($this-&gt;_objects as $object) {
         $object-&gt;getResource()-&gt;commit();
         }
         return $this;
         }
         
        protected function _rollbackTransaction()
         {
        //遍历相关对象执行对象的resource model的rollBack方法提交事务
         foreach ($this-&gt;_objects as $object) {
         $object-&gt;getResource()-&gt;rollBack();
         }
         return $this;
         }
</code></pre>
<p>代码很容易理解和单个model的save方法流程是一致的，只是开启事务、提交事务或者回滚事务的时候是遍历执行各个model的相关方法。</p>
<p>那么这个时候我们就会有这样的疑惑：开启事务的方法执行了好几遍，这样会不会出问题呢？如果是真的多次执行数据库对事务相关的sql的话，那么肯定是会有问题的。 magento很好的处理了这个问题。就是resouce model层对事务有了一个层级的概念。多次提交事务，只有第一次才是真的提交事务，后面的多次只是事务的level计数器加一，同样的对于commit 和rollback只有计数器为0的时候才真正执行相关的操作，其他时候都是计数器减一，这样就避免了我们前面提出的那个问题的出现了。看相关代码：</p>
<pre><code>
        //file:lib/Varien/Db/Adapter/Pdo/Mysql.php
        public function beginTransaction()
         {
         if ($this-&gt;_transactionLevel === 0) {
         $this-&gt;_debugTimer();
         parent::beginTransaction();
         $this-&gt;_debugStat(self::DEBUG_TRANSACTION, 'BEGIN');
         }
         ++$this-&gt;_transactionLevel;
         return $this;
         }
         
        public function commit()
         {
         if ($this-&gt;_transactionLevel === 1) {
         $this-&gt;_debugTimer();
         parent::commit();
         $this-&gt;_debugStat(self::DEBUG_TRANSACTION, 'COMMIT');
         }
         --$this-&gt;_transactionLevel;
         return $this;
        }
         
        public function rollback()
         {
         if ($this-&gt;_transactionLevel === 1) {
         $this-&gt;_debugTimer();
         parent::rollback();
         $this-&gt;_debugStat(self::DEBUG_TRANSACTION, 'ROLLBACK');
         }
         --$this-&gt;_transactionLevel;
         return $this;
         }
</code></pre>
<p>最后提醒一点，对于mysql来说，只有innodb存储引擎才有事务功能。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 09:43:49 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[16条必须的magento SEO优化设置]]></title>
      <link>https://www.360magento.com/blog/16-magento-seo-configuration/</link>
      <description><![CDATA[<h2>16条必须的magento SEO优化设置</h2>
<ol>
<li>可以用文章，blog页面做长尾关键词</li>
<li>在每个页面做一个文章框，随即显示文章，这样可以更新此页面。</li>
<li>search页面在robots.txt设置不让抓取</li>
<li>URL重写开启，使用绝对地址（这个应该没有问题），URL标准化，避免多个URL指向一个页面，造成权重的分散</li>
<li>404页面的制作</li>
<li>放置统计代码，用google的统计</li>
<li>robots.txt设置成不可写吧。</li>
<li>local.xml设置成通过url不可访问</li>
<li>分类页面的产品名称，<a title="magento" href="http://www.360magento.com">magento</a>默认模板用的是H2，要改掉</li>
<li>避免一个页面出现多个h1情况。如果没有h1标签可以写一个，然后隐藏掉！</li>
<li>每一个图片的alt要写上。</li>
<li><a>标签的title也写上，尽量</a></li>
<li>在后台为首页，产品分类页面，写入&lt;h1&gt;标签的内容，作为内容标题！</li>
<li>css，js代码尽量写在对用的文件里面，html页面尽量代码简洁，去掉之间大量空格，和繁琐的注释</li>
<li>对于不希望google抓取的内容，和外部信息设置成nofollow，从而避免权重的流失。</li>
<li>开启缓存，编译，js，css合并，提速。</li>
</ol>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 08:18:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[谈magento对谷歌搜索引擎的友好]]></title>
      <link>https://www.360magento.com/blog/magento-google-seo/</link>
      <description><![CDATA[<p>if there is a word can describe the relation of magento &amp; Google Search Engine , it must be friend!</p>
<p>如果能有词形容magento和谷歌搜索引擎的关系，那么肯定是&ldquo;朋友&rdquo;！</p>
<p><a title="magento" href="http://www.360magento.com">magento</a>是目前国外使用最多的开源网店系统，而且它的使用领域已经逾越了商城，等效于博客或者CMS了。而作用一个英文站点开发人员，我们认为之所以那么多站长朋友使用magento进行网站建设，其最大的原因或者正是magento对谷歌搜索引擎高度友好。</p>
<p><strong>为什么说magento对Google友好呢？</strong></p>
<h2>magento几乎拥有自定义性</h2>
<p>无论是哪个类模型，你都可以在magento后台命名它的title，keywords以及description甚至是url以及meta。这个功能让网站在后期的推广能够获得不错的表现，而且这也是大多seo选择网站开发系统的标准之一。</p>
<h2>magento卓越的性能表现</h2>
<p>magento能够快速处理任何自身的进程，高效地反馈网站给访客。而且经过官方作过压力测试，完全能够胜任大数据处理，并不会产生冗余的垃圾文件，所以Google机器人非常愿意爬去这些页面。</p>
<p>选择网站开发的系统，我们的最重的应该就是以上两点，而magento都拥有了。用SEO经典的一句话说就是&ldquo;爬虫其实就是普通用户&rdquo;，所以受大众欢迎的，同样也会受搜索引擎欢迎。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 08:06:50 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[了解跨境电商的市场，让您更好的找到定位]]></title>
      <link>https://www.360magento.com/blog/Cross-border-e-commerce/</link>
      <description><![CDATA[<p>电子商务行业中，有不少的人在讲，现在<a title="电子商务" href="http://www.360magento.com">电商</a>越来越难做了。没错，大平台的电商已经很成熟，现在走出这一困局才是明智之举，而近两年来最为火爆的是：跨境电商，农村电商，社交电商。 这些电商新形态已在不断爆发中，今天为您分享一下<a title="跨境电商" href="http://www.360magento.com">跨境电商</a>中，值得开拓也是必须了解的跨境电商市场，这些是跨境电商中的进口大国：</p>
<p>跨境电商人必须了解的五个国家</p>
<ol>
<li>韩国
<p>韩国的网络速度全球最快，也难怪它是全球第七大、亚太地区第三大电商零售市场。预计韩国2015年总零售额达367.6亿美元，其中网络零售额占9.8%。</p>
</li>
<li>澳大利亚
<p>澳大利亚2014年电商销售额增长了17.3%，这也表明澳大利亚人是网购的忠实粉丝。数据显示，大约79.4%的互联网用户通过电子渠道购物。尽管人口数量较少，但是澳大利亚仍然充满了机遇。</p>
</li>
<li>法国
<p>法国2014年电商销售额增长了11%，电商企业应该考虑法国这个市场。作为世界上第六大、欧洲第三大的电商市场，法国有很大的发展机会。预计法国2015年的电商市场规模将增长10%，达624亿欧元。</p>
</li>
<li>英国
<p>在欧洲地区，英国人最常上网购物，这也让英国成为继美国、中国之后的第三大电商市场。英国消费者平均每年的网购开支为1174英镑，网络零售额也将持续增长，英国为电商企业提供了很多发展空间。</p>
</li>
<li>俄罗斯
<p>俄罗斯位于欧亚大陆北部，地跨欧亚两大洲，国土面积为1707.54万平方公里，是世界上面积最大的国家。人口数量1.43亿(2014年)，电子商务发展迅速，但由于本土电商平台不够影响力，并且俄罗斯人更喜欢在阿里平台上购买，所以在俄罗斯的购物平台排名中，速卖通排在第一位，而且有不少俄罗斯人还会在淘宝上购物！</p>
</li>
</ol>
<p>看了以上的国家的相关数据和基本的电商情况后，<a title="跨境电商" href="http://www.360magento.com">跨境电商</a>的小伙伴，你们有什么想法的呢？！</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Thu, 17 Sep 2015 07:44:47 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento性能优化]]></title>
      <link>https://www.360magento.com/blog/magento-optimization/</link>
      <description><![CDATA[<p><a title="magento" href="http://www.360magento.com">magento</a>模版功能强大，已被大众所熟知，但也有不少朋友反映，magento网站的速度偏慢。在参考了一些资料后，对magento性能提升做一下小结。希望对各位读者有所帮助。</p>
<ol>
<li>压缩js,css代码，如果有必要把所有的css,js分别综合到一个文件中，并压缩，缓存</li>
<li>清除magento模板中不必要的注释，为所使用到的图片瘦身</li>
<li>优化magento代码，这个步骤工作量大，但可能是效果显著的步骤，不过前提是你非常熟悉magento，彻底删除不用的模块，关闭没用的block， 清除无效，无用的xml（解析xml非常昂贵的），在一个页面中尽量不要大量调用magento的image resize功能，非常消耗内存，除非你自己优化代码。</li>
<li>mysql配置优化，充分发挥你的硬件资源，下面的数值要根据你的配置调整 key_buffer_size = 512M max_allowed_packet = 64M table_cache = 512 sort_buffer_size = 4M net_buffer_length = 8K read_buffer_size = 4M read_rnd_buffer_size = 2M myisam_sort_buffer_size = 64M tmp_table_size = 128M query_cache_size = 96M query_cache_type = 1 thread_cache_size = 8 max_connections = 400 wait_timeout = 300</li>
<li>将magento的var目录挂载到内存中，加快读取速度，如mount -t tmpfs -o size=100M,mode=0777 tmpfs var</li>
<li>安装php加速器，如APC，XCACHE,eAccelerator，安装方法参考相关的网站。然而归于根本，最大的优化来自于对模板，对代码，对block的优化。</li>
</ol>
<p>在Magento的优化中， Mysql的优化是很重要的，在Magento的官方网给出了有关Mysql的优化， 官方网并没有要我们把Mysql的存储引擎改为innodb， 但我觉的得这是很有必要的，当改成innodb后，还得把Mysql的配置文件修改修改下， 有时根据官方的文档来并不能成功， 这时就要看你的环境而定了， 下面给出我所配置的mysql文件给大家参考：</p>
<ul>[mysqld]
<li>datadir=/var/lib/mysql</li>
<li>socket=/var/lib/mysql/mysql.sock</li>
<li>user=mysql</li>
<li># Default to using old password format for compatibility with mysql 3.x</li>
<li># clients (those using the mysqlclient10 compatibility package).</li>
<li>old_passwords=1</li>
<li>default-character-set=utf8</li>
<li>#init_connect='SET NAMES utf8'</li>
<li>default-storage_engine = innodb</li>
<li># To allow mysqld to connect to a MySQL Cluster management daemon, uncomment</li>
<li># these lines and adjust the connectstring as needed.</li>
<li>#ndbcluster</li>
<li>#ndb-connectstring="nodeid=4;host=localhost:1186"</li>
</ul>
<p>[client]</p>
<ul>
<li>#default-character-set=utf8</li>
</ul>
<p>[mysqld_safe]</p>
<ul>
<li>log-error=/var/log/mysqld.log</li>
</ul>
<p>[Magento]</p>
<ul>
<li>max_connections = 1000</li>
<li>max_connect_error = 10</li>
<li>table_cache = 1024</li>
<li>max_allowed_packet = 16M</li>
<li>max_heap_table_size = 64M</li>
<li>sort_buffer_size = 8M</li>
<li>join_buffer_size = 8M</li>
<li>thread_cache_size = 8</li>
<li>thread_concurrency = 8</li>
<li>query_cache_size = 64M</li>
<li>query_cache_limit = 2M</li>
<li>tmp_tables_size = 64M</li>
<li>key_buffer_size = 32M</li>
<li>read_buffer_size = 2M</li>
<li>read_rnd_buffer_size = 16M</li>
<li>bulk_insert_buffer_size = 64M</li>
<li>myisam_sort_buffer_size = 128M</li>
<li>myisam_max_sort_file_size = 10G</li>
<li>myisam_max_extra_sort_file_size=10G</li>
<li>myisam_repair_threads = 1</li>
<li>myisam_recover</li>
<li>innodb_additional_mem_pool_size = 16M</li>
<li>innodb_log_buffer_size = 8M</li>
<li>innodb_log_file_size = 512M</li>
<li>innodb_log_files_in_group = 2</li>
<li>innodb_buffer_pool_size = 3G</li>
<li>innodb_data_file_path = ibdata1:3G;ibdata2:1G:autoextend</li>
<li>innodb_autoextend_increment=512</li>
</ul>
<p>这里主要讲的是自己编译的Apache， 而如果是系统自带的话， Apache所需的模块， 系统会自动加载。</p>
<ul>
<li>#vi httpd.conf</li>
<li>ServerTokens OS</li>
<li>ServerRoot "/etc/httpd"</li>
<li>PidFile run /httpd.pid</li>
<li>Timeout 120</li>
<li>KeepAlive off</li>
<li>MaxkeepAliveRequests 100</li>
<li>KeepAliveTimeout 15</li>
<li>StartServers 100</li>
<li>MinSpareServers 100</li>
<li>MaxSpareServers 150</li>
<li>ServerLimit 256</li>
<li>MaxClient 256</li>
<li>MaxRequestsPerChild 40000</li>
<li>Listen *:80</li>
</ul>
<p>在这里还要一些必须的Apache模块</p>
<ol><ol>
<li>mod_authz_host.so</li>
<li>mod_expires.so</li>
<li>mod_deflate.so</li>
<li>mod_mime.so</li>
<li>mod_dir.so</li>
<li>mod_rewrite.so 这个模块很重要， 当设置Magento地址重写时，要用到</li>
<li>mod_log_config.so</li>
<li>libphp5.so 你有可能用的是php4， 那就得改成libphp4.so</li>
</ol></ol>
<p><strong>注意：</strong></p>
<p>在安装好Apache后， 我们还能让Apache识别以php为后缀的文件</p>
<p>AddType application/x-httpd-php .php .phtml</p>
<p>好了， 到这就讲完了， 这章其实对Magento的优化不大， 但有些模块又不能少， 少了， Magento后台可能出问题</p>
<p>当我们安装好<a href="http://www360magento.com" target="_blank">Magento</a>时， 为了加快Magento的速度，我们一般还要做一些对于Magento服务的优化， 来提高Magento被访问的速度。 一般我们会从三个角度去考虑Magento的优化， 如： 安装Magento的系统； Magento模板中的代码； Magento所用到的数据库。 在这我们主要讲的是Magento系统的优化</p>
<p>Magento是在PHP环境下开发的， 所以优化PHP对Magento有着不小的影响，下面是Magento标准的PHP配置。</p>
<h3>对于Magento所需的扩展， 只开启所需的就可以了</h3>
<p># Required extensions</p>
<ul>
<li>extension=bcmath.so</li>
<li>extension=curl.so</li>
<li>extension=dom.so</li>
<li>extension=gd.so</li>
<li>extension=mcrypt.so</li>
<li>extension=memcache.so</li>
<li>extension=mhash.so</li>
<li>extension=pdo.so</li>
<li>extension=pdo_mysql.so</li>
<li>extension=mysql.so</li>
<li>extension=xmlwriter.so</li>
</ul>
<p>下面的一些扩展并不需要开启， 我们可以把它们关闭</p>
<p># Not&nbsp; needed extensions from default setup</p>
<ul>
<li>;;extension=dbase.so</li>
<li>;;extension=json.so</li>
&gt;
<li>;;extension=mysqli.so</li>
<li>;;extension=pdo_sqlite.so</li>
<li>;;extension=sqlite.so</li>
<li>;;extension=wddx.so</li>
<li>;;extension=smlreader.so</li>
<li>;;extension=xsl.so</li>
<li>;;extesnion=zip.so</li>
</ul>
<p>事无绝对， 当你的系统环境需要某个扩展时， 可以按照需要开启</p>
<h3>下面所要讲的， 也是PHP中优化的重点， 将会讲到二种方法，二选一就行了， 切忌， 不能同时应用二种方案</h3>
<h4>一，安装APC扩展， APC， 用来优化PHP本身， 提高PHP的运行速度</h4>
<p># APC configuration apecifics if it is used</p>
<p>extension=apc.so</p>
<p>apc.shm_size=256</p>
<p>apc.num_files_hint=10000</p>
<p>apc.user_entries_hint=10000</p>
<p>apc.max_file_size=5M</p>
<h4>二，安装eaccelerator加速器，功能跟APC类似， 在这就不多说了。</h4>
<p>安装好eaccelerator后，将会产生eaccelerator模块</p>
<p>zend_extension="/usr/lib64/php/modules/eaccelerator.so"</p>
<p>eaccelerator.shm_size = "256"</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 08:45:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento建站知识]]></title>
      <link>https://www.360magento.com/blog/magento/</link>
      <description><![CDATA[<p>外贸B2C商城网店--<a title="magento建站" href="http://www.360magento.com">Magento建站</a></p>
<p><a title="magento" href="http://www.360magento.com">Magento</a>是一套专业开源的PHP电子商务系统。Magento设计得非常灵活，具有模块化架构体系和丰富的功能。</p>
<h2>特点</h2>
<p>Magento设计得非常灵活，具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。</p>
<h2>设计</h2>
<p>在设计上，包含相当全面，以模块化架构体系，让应用组合变得相当灵活，功能也相当丰富。</p>
<h2>应用</h2>
<p>其面向企业级应用，可处理更方面的需求，以及建设一个多种用途和适用面的电子商务网站。 包括购物、航运、产品评论等等，充分利用开源的特性，提供代码库的开发，非常规范的标准，易于与第三方应用系统无缝集成。 为了打开盈利途径，Magento 同时具备收费的企业版本，积极谋求合作和第三方整合的工具，比如电子支付平台等。</p>
<h2>Magento开源网店系统的特点主要分以下几大类</h2>
<ol>
<li>网站管理</li>
<li>促销和工具</li>
<li>国际化支持</li>
<li>SEO搜索引擎优化</li>
<li>结账方式</li>
<li>运输快递</li>
<li>支付方式</li>
<li>客户服务</li>
<li>用户帐户</li>
<li>目录管理</li>
<li>目录浏览</li>
<li>产品展示</li>
<li>分析和报表</li>
<li>自动被Google收录</li>
<li>一后台多网店系统</li>
</ol>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 04:32:19 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[轻松解决你的Magento毛病：整理最全的 Magento 常用SQL命令]]></title>
      <link>https://www.360magento.com/blog/magento-sql/</link>
      <description><![CDATA[<p><a title="magento" href="http://www.360magento.com">Magento</a>&nbsp;SQL命令可以加快解决你遇到的问题，不同版本，数据库可能会有所不同，所以SQL命令可能也会有所变化，在用SQL命令的时候一定要记得备份！！</p>
<p>1. 批量调整所有产品的价格&nbsp;<br />UPDATE `catalog_product_entity_decimal` SET value=round(value*1.45) WHERE attribute_id=99;<br />执行完后，需要到缓存管理里刷新：Layered Navigation Indices ，即可同步数据库里的关联表。</p>
<p>2. 批量处理所有 exclude 状态的图片<br />UPDATE `catalog_product_entity_media_gallery_value` SET disabled=0 WHERE disabled=1;</p>
<p>3. 导出导入 Magento 所有分类和产品<br />分类和产品是存放在以 catalog 开头的所有表中，对这组表进行导出导入即可实现此功能。<br />导入分类产品的 SQL 文件前注意：<br />在首行加入：SET FOREIGN_KEY_CHECKS=0;<br />在末行加入：SET FOREIGN_KEY_CHECKS=1;<br />原因是 Magento 使用 Innodb 存储引擎。</p>
<p>4. 批量修改分类的 Display Settings &mdash;&mdash;&gt; Is Anchor 值为 No<br />UPDATE `catalog_category_entity_int` set value=0 WHERE value=1 AND attribute_id=120;</p>
<p>5. 清空邮件队列<br />TRUNCATE TABLE `newsletter_queue`;<br />TRUNCATE TABLE `newsletter_queue_link`;<br />TRUNCATE TABLE `newsletter_queue_store_link`;<br />注意：同时向上万顾客发邮件时，不要在后台查看邮件队列，不然服务器压力会很大，待邮件发完之后，</p>
<p>记着清空邮件队列，这样在后台进入邮件队列就不会大量消耗服务器资源了。</p>
<p>6. Magento 转移站后，经常会出现下面这个提示，运行一下下面的SQL命令即可恢复正常。<br />错误提示： Notice: Undefined index: 0 app/code/core/Mage/Core/Model/Mysql4/Config.php on</p>
<p>line 92<br />SET FOREIGN_KEY_CHECKS=0;<br />update `core_store` set store_id = 0 where code='admin';<br />update `core_store_group` set group_id = 0 where name='Default';<br />update `core_website` set website_id = 0 where code='admin';<br />update `customer_group` set customer_group_id = 0 where customer_group_code='NOT LOGGED IN';<br />SET FOREIGN_KEY_CHECKS=1;<br />不过要明白，这个错误是使用了第三方数据库备份工具导致的，Magento 自带的备份功能是不会出现这个</p>
<p>错误的。</p>
<p>7. 根据产品的 SKU 批量将产品自定义选项设为非必填：<br />UPDATE `catalog_product_option` SET is_require=0 WHERE product_id IN (SELECT entity_id FROM</p>
<p>`catalog_product_entity` WHERE sku LIKE 'SKU %');</p>
<p>8. 关闭/开启 所有缺货产品<br />SET FOREIGN_KEY_CHECKS=0;<br />UPDATE `catalog_product_entity_int` SET value=2 WHERE attribute_id=80 and entity_id IN</p>
<p>(SELECT product_id FROM `cataloginventory_stock_status` WHERE stock_status=0);<br />SET FOREIGN_KEY_CHECKS=1;<br />其它说明：value=2 为关闭，1为开启，attribute_id 对应不同版本的产品禁用项，最后执行完命令需要</p>
<p>重建分类索引。</p>
<p>9. 取消所有问题邮件订阅<br />UPDATE `newsletter_subscriber` SET subscriber_status=3 WHERE subscriber_id IN (SELECT</p>
<p>subscriber_id FROM `newsletter_problem`);</p>
<p>10. 清除产品与分类的描述与 Meta<br />重置所有产品short description<br />UPDATE `catalog_product_entity_text` SET value='Short Description' WHERE</p>
<p>attribute_id=506;<br />清除所有产品Meta<br />UPDATE `catalog_product_entity_text` SET value='' WHERE attribute_id=97 OR</p>
<p>attribute_id=104;<br />UPDATE `catalog_product_entity_varchar` SET value='' WHERE attribute_id=103 OR</p>
<p>attribute_id=105;<br />清除所有产品URL<br />UPDATE `catalog_product_entity_varchar` SET value='' WHERE attribute_id=481;<br />清除所有分类描述：<br />UPDATE `catalog_category_entity_text` SET value='' WHERE attribute_id=112 OR</p>
<p>attribute_id=115 OR attribute_id=116;<br />清除所有分类URL<br />UPDATE `catalog_category_entity_varchar` SET value='' WHERE attribute_id=479;</p>
<p>11. 重置 Magento 所有 ID 统计数(如订单编码、发票编码等)<br />TRUNCATE `eav_entity_store`;<br />ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;</p>
<p>12. 批量禁用产品 &mdash;&mdash; 数据库操作<br />CREATE TABLE XYTMPTB SELECT entity_id,value FROM `catalog_product_entity_varchar` WHERE</p>
<p>value LIKE 'affliction%' AND attribute_id=96;<br />UPDATE `catalog_product_entity_int` SET value=1 WHERE attribute_id=273 AND entity_id IN</p>
<p>(SELECT entity_id FROM `XYTMPTB`);<br />DROP TABLE XYTMPTB;<br />别忘了重建索引！</p>
<p>13. 分类与产品的反向开关<br />UPDATE `catalog_category_entity_int` SET value=if(value=0,1,0) WHERE attribute_id=119;<br />UPDATE `catalog_product_entity_int` SET value=if(value=1,2,1) WHERE attribute_id=273;<br />运行一下，开的关了，关的开了，再运一下反之，最后别忘了重建索引!</p>
<p>14. 清站相关提示<br />能在后台清理的就在后台清理，直接对数据库操作有造成网站出错的可能性。其他辅助命令如下：<br />清除订单命令：<br />TRUNCATE `sales_flat_invoice`;<br />TRUNCATE `sales_flat_invoice_grid`;<br />TRUNCATE `sales_flat_invoice_item`;<br />TRUNCATE `sales_flat_order`;<br />TRUNCATE `sales_flat_order_address`;<br />TRUNCATE `sales_flat_order_grid`;<br />TRUNCATE `sales_flat_order_item`;<br />TRUNCATE `sales_flat_order_payment`;<br />TRUNCATE `sales_flat_order_status_history`;<br />TRUNCATE `sales_flat_quote`;<br />TRUNCATE `sales_flat_quote_address`;<br />TRUNCATE `sales_flat_quote_address_item`;<br />TRUNCATE `sales_flat_quote_item`;<br />TRUNCATE `sales_flat_quote_item_option`;<br />TRUNCATE `sales_flat_quote_payment`;<br />TRUNCATE `sales_flat_quote_shipping_rate`;<br />清除其它日志：<br />TRUNCATE `log_url_info`;<br />TRUNCATE `log_visitor_info`;<br />TRUNCATE `log_url`;<br />TRUNCATE `log_visitor`;<br />TRUNCATE `core_url_rewrite`;<br />TRUNCATE `report_event`;<br />TRUNCATE `report_viewed_product_index`;</p>
<p>15. Magento 数据库清理</p>
<p>安全模式：清理日常数据库的无用记录<br />TRUNCATE TABLE `log_visitor`;<br />TRUNCATE TABLE `log_visitor_info`;<br />TRUNCATE TABLE `log_url`;<br />TRUNCATE TABLE `log_url_info`;<br />干净模式：清理数据库的无用记录<br />TRUNCATE `log_visitor` ;<br />TRUNCATE `log_url_info` ;<br />TRUNCATE `log_visitor_info` ;<br />TRUNCATE `dataflow_batch_import` ;<br />TRUNCATE `log_url` ;<br />TRUNCATE `report_event` ;<br />TRUNCATE `log_visitor_online` ;<br />备注：如果是转移网站，URL 重写表 core_url_rewrite 也可清空，转完站重建 URL 即可。</p>
<p>16. 批量修改 SKU、Meta、Name 等字段里的部份词<br />UPDATE `catalog_product_entity` SET sku=replace(sku,'oldskuw','newskuw') WHERE sku LIKE</p>
<p>'%oldskuw%';<br />UPDATE `catalog_product_entity_text` SET value=replace(value,'oldmetaw','newmetaw')</p>
<p>WHERE value LIKE '%oldmetaw%';<br />UPDATE `catalog_product_entity_varchar` SET value=replace(value,'oldnamew','newnamew')</p>
<p>WHERE value LIKE '%oldnamew%';</p>
<p>17. 批量调整指定产品的价格<br />create table xytmptb SELECT entity_id,value FROM `catalog_product_entity_varchar` WHERE</p>
<p>(value LIKE '%Boot%' OR value LIKE '%Shoes%') AND attribute_id=60;<br />UPDATE `catalog_product_entity_decimal` SET value=value+10 WHERE entity_id IN (SELECT</p>
<p>entity_id FROM `xytmptb`) AND attribute_id=64;<br />drop table xytmptb;<br />最后别忘了重建价格索引！</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 04:22:09 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[O2O同城电子商务平台为什么能够迅速火起来]]></title>
      <link>https://www.360magento.com/blog/o2o-platform/</link>
      <description><![CDATA[<p><a title="360magento" href="http://www.360magento.com">&ldquo;互联网+&rdquo;</a>时代在我们不知不觉中渗入到日常生活中，从一开始的摸爬滚打到现在的炉火纯青，各个O2O同城<a title="电商平台创建" href="http://www.360magento.com">电商平台</a>的出现，终于让我们对O2O这个新名词引起了关注。</p>
<p>首先我们来看看这些O2O网购用户的需求：</p>
<ol>　　
<li>宅男宅女，想吃零食，懒的去超市买。</li>
　　
<li>办公室的打印机碳粉用完了，电脑城离的挺远，来回耽误时间。</li>
　　
<li>尿不湿用完了，楼下小店的商品不放心，去大超市买，又没人照顾小孩。</li>
　　
<li>马上要装修房子了，本地的建材市场杂乱不堪，价格千差万别，怎么才能选到合适的?</li>
</ol>
<p>结果，同城几公里甚至一公里内，催生了大量的电子商务需求。2小时送货上门，货到付款，更快退换货。同城电子商务可以满足距离和本地服务的需求，传统行业入门门槛低，利润较高，单个城市的运营推广模式简单、初期投入成本较低，这是互联网资本的下一个热区。</p>
<p>那么同城电子商务的优势在哪里?由于其同城的特殊属性，企业与消费者近距离接触，在信心构建方面相对来说比较容易操作，此外，媒体和线下品牌传播方面也有不可比拟的竞争优势，各类促销、线下活动的策办以及各类展会，都对品牌的宣传有很大的促进，同时，对初具规模的电子商务企业来说，往往能得到当地城市发展政策的支持与偏向，这对企业建立良好的公关环境有巨大的帮助，在以后竞争中软环境优势凸显。</p>
<p>在价格方面，笔者坚信一点，如果能在时间上和信心上凸显相对的优势，同城电子商务企业就拥有5%-7%的相对溢价优势，对于网络消费，最大的价格因素已经在传统和电子商务之间区分开来，而由于快速的反应能力，在售后服务及公关事件的处理等诸多方面，同城电子商务企业都有独到的优势。</p>
<p>而笔者认为，对于同城电子商务来说，对网购顾客最有利的莫过于电商平台所提供第三方服务。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 04:02:54 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[任春雷扒尽电商行业七大真相]]></title>
      <link>https://www.360magento.com/blog/ecommerce/</link>
      <description><![CDATA[<p>【2015年9月15日，北京】微指(上海)信息科技有限公司今日在北京五洲皇冠国际酒店发布了微指商户版APP。CEO任春雷在发布会现场全面剖析了中国商业真相和商业运行本质规律，揭示了传统电子商务模式的时代局限，也为众多面临挑战与转型中的实体商家指明了发展方向。</p>
<h2>实体商业的断崖式难题揭示电商霸权</h2>
<p>　　发布会上，微指科技向到场的商户、嘉宾和媒体展示的视频，给大家带来了极大震撼。繁华的中关村电子大卖场开始落幕，原本著名的天河商圈出现了严重的倒闭关店潮，曾经最繁华的杭州武林路到处都是空店，从京津冀到长三角、珠三角，很多商业核心区无一例外遭遇寒流。此外很多A股上市百货公司前途未卜，截止到2015年8月国内百货商场共倒闭120余家，五大运动品牌和其他众多企业集体遭遇了滑铁卢。</p>
<p>　　事实上，2011年以来，网购交易规模快速上升，到了2014年，中国网络购物占社会消费品零售总额的比重已跃升至10.72%。中国社会科学院信息化研究中心秘书长姜奇平先生曾经提到：每6%的商品从线下转移到线上，就会导致线下实体店的利润下降50%，就是下降一半，&ldquo;任春雷用&ldquo;人马矩阵&rdquo;直观显示了电商正在迅速抢走传统商业的客流和利润."并且让网店店主们陷入 &ldquo;不做广告没销量，做了广告没利润&rdquo;的怪圈。他认为电商是信息流、现金流的垄断者，正在用手中的资源和权力在这个社会推行丛林法则，导致恶性竞争和商业退步。而微指的出现就是要拆除这个中间的控制阀门，实现B和C直接对接，面对面交易，恢复自由和平等地商业秩序。任春雷表示，传统互联网的商业交易模式是技术+功利的商业思维，不是实体商铺转型的最终方向，真正的互联网进化的结果只有一个，即最终重归一种进步的人文精神，其概括为：开放、共享、以所有人为中心。随着移动互联网的兴起，微指将致力于开创第三商业时代，建立点对点的、立体的网络，迎来真正的互联网时代。</p>
<h2>微指解决方案：帮助实体店数字化，立刻实现弯道超越</h2>
<p>　　微指商户版APP是一款是基于手机定位系统的移动互联网<a title="magento电商网站开发" href="https://www.360magento.com/">电子商务</a>平台，它把全国所有实体店搬上了手机，形成了由实体虚拟店组成的数字化O2O商业交易平台。消费者可以在纵行天下的时候随时随地&ldquo;搜索和购买&rdquo;到&ldquo;附近乃至全国&rdquo;的商户或商品。通过微指APP，连通了消费者和实体店铺，结合了本地购物和网络购物两种优势。</p>
<p>任春雷指出，目前传统电商主要有以下问题和局限：模式陈旧(传统店铺做生意的模式，与唐朝没有任何区别)、时间障碍(每天只能做半天生意)、空间障碍(只能做门前几平米的生意)、信息不对称(消费者就在你附近，可你们却彼此不知道)、无法低成本营销(没有传播途径、广告太贵、传单效果太差等)。微指将彻底解决实体商户这些问题，实现&ldquo;时时都是营业高峰，家家都是黄金旺铺&rdquo;。</p>
<p>　　微指以改善中国人的生意和生活为宗旨，将联合所有的实体店主们完成一次信息化大升级，进行一场数字化的革命。彻底推翻实体店主们身上的三座大山，不再受经营时间、经营位置、信息不对称的限制，实现弯道超越，率先进入第三商业时代。</p>
<p>&nbsp;</p>
<h2>微指覆盖海量交易和数据，打造包罗万象的中国商城。</h2>
<p>　　为了获得最准确的原始数据，三年来，微指的地推人员用双脚走遍中国。截止今日，微指商户版APP已经覆盖300多座城市，2000万家商户，10亿款商品信息，并实现位置、样品、价格、存量、服务等所有信息适时更新。微指帮助每一家实体店铺零成本升级为移动互联网商店，以每一家实体店铺为中心，形成了任意半径的服务圈和物流圈，每一家商户都以自己为圆心，为周围100米、500米、1000米、3000米，甚至全城，乃至全国的用户提供服务。</p>
<p>　　在极度商品化的今天，其实很多商品就在身边，但因为信息不对称，用户们只能上网去淘，舍近求远。而通过微指客户端，手机用户以自身所处位置为圆心，形成了移动中的任意半径生活圈、信息圈。不管走在哪里，都可以搜索到身边100米，500米、1000米、3000米、甚至全城、乃至全国所有的店铺和货品。</p>
<p>微指突破了位置的局限性，以个人为中心，建立起了移动中的生活圈、信息圈、服务圈，为每一个用户提供最近、最便捷的资源配置和服务供应。</p>
<p>　　当每一条街、每一个实体店、每一件商品都通过微指客户端实现上传，使实体店不受交易时间的限制，也不受地段和位置的影响，全城所有的商铺和商品信息，都能通过微指被准确地定位和搜索，至此，一个数字化的商业世界才会呈现。</p>
<p style="color: red;"><strong>免责声明：</strong><span>此文内容为本网站刊发或转载企业宣传资讯，该相关信息仅为宣传及传递更多信息之目的，不代表本网站观点，文章真实性请浏览者慎重核实！</span></p>
<p style="color: red;"><span style="color: #000000;">360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/"><span style="color: #000000;">电商网站开发</span></a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/"><span style="color: #000000;">请与我们联系</span></a>。</span></p>
<p>&nbsp;</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 03:56:12 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento后台简介]]></title>
      <link>https://www.360magento.com/blog/magento-adminhtml/</link>
      <description><![CDATA[<p>许多第一次使用<a href="https://www.360magento.com/ title=">Magento</a>朋友都会有些手忙脚乱，最近也有不少客户问到一些关于magento后台操作的问题。这里呢，我就对magento后台做一个简短的介绍，希望能对各位有所帮助。</p>
<p>Cms 内容管理，cms page包含前台内容页，比如about us 可定义url static block 静态块，定义一个block，方便在网站的任意地方调用，后台也可以同步修改。模板中调用方法&lt;?php echo $this-&gt;getLayout()-&gt;createBlock('cms/block')-&gt;setBlockId('block_identifier')-&gt;toHtml(); ?&gt; widget 插件，这个用的比较少，功能累似于static block，不过这个产生的内容要自动一些，比如我要新建一个挂件，显示5个最新产品，在catalog的左栏，可以在这里直接定义。 poll 投票功能。</p>
<p>catalog 这里应该是最核心的内容，包括产品，分类，url，tag，评论，属性，属性集。每一点的内容都比较多。而且，不同生产环境下呈现的方式也不一样，比如多店的情况下。</p>
<p>customer 用户管理 给用户分组，查看用户站内产品的内容，及活动。查看在线用户。</p>
<p>promotios 促销规则，分类分类促销（购买指定分类或者属性的促销）和购物车促销（优惠码，购物车满多少减等等），可自定义条件，并且可以指定规则适用于哪个用户组的store view 和 website。</p>
<p>sale 这是订单处理，包括订单列表，订单信息，订单发票，退款管理，发货等，都是国外电商的一套处理流程，还有关于税这一块的规则，很少用。</p>
<p>newsletter 用户订阅列表，和订阅邮件推送设置，如果要推送订阅邮件，可以使用第三方发件，配合插件+magento的定时任务。</p>
<p>reports 网站销售分析，自带的这一套比较简单，没有图表，如果想要图表显示，有成熟的插件可以使用。</p>
<p>style 说一下我理解的过程吧， type="catalog/product_new" 这对应的是app/code/core/Mage/Catalog/Block/Product/New.php这个block里的方法。 name 指定这个block名字 as 指定别名 用来在模板中载入这个block $this-&gt;getChildHtml('newproductlist'); template 指定模板路径，在模板里调用block里对应的方法就可以获取到相应的产品列表，foreach打印到对应的html里即可。</p>
<p>magento后台的内容比较多，我这里讲得比较浅，如果想要了解更多或者有什么疑问，欢迎到我们的官网<a title="magento电商网站开发" href="https://www.360magento.com/">360magento</a>交流 。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 03:25:11 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento网站流量飙升的seo技巧]]></title>
      <link>https://www.360magento.com/blog/magento-seo/</link>
      <description><![CDATA[<p>有效地利用Magento SEO配置才能发挥Magento的优势，这里360magento团队总结了一些Magento SEO技巧，希望能帮助大家提升网站流量。</p>
<h2>1. 基本的技术优化</h2>
<h3>1.1. 普通设置</h3>
<p>Magento 是搜索引擎最友好的商用平台之一，但有几点需要关注以优化你的 Magento SEO.开始运行Magento时，激活 Server URL rewrites. 你可以找到这个选项在系统按钮下： System =&gt; Configuration =&gt; Web =&gt; Search Engines Optimization. 激活后，在这个页面上，另一个不错的选择是设置&ldquo;Url Options &rdquo;下的 "Add store Code to Urls" ，在大多数情况下，把这个开关设为&ldquo;No&rdquo;更好。</p>
<p>1.1.1. WWW vs non-WWW</p>
<p>在 "Unsecure" 和 "Secure" 的下拉菜单里你可以找到 Base URL, 在那里你可以设置你更喜欢的域名。你可以选择WWW的URL或者没有WWW的URL。改变这些设置你不会建立一个重定向从www到non-www或者从non-www到www,而只是你设置的你喜欢的那一个。所以通过 .htaccess with mod_rewrite建立一个301重定向是一个好主意。除此之外，解决了 WWW vs non-WWW 的问题，这个重定向可以预防Magento被加入SID问题到你的URLs，像SID=b9c95150f7f70d6e77ad070259afa15d. 确保 Base URL 和重定向是一样的。编辑 .htaccess 文件时，你可以加入下面的代码到根目录下的重定向 index.php 中。 大约 119 行: RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.mydomain.com/ [R=301,L] 或者，你安装Magento的时候不是在根目录下而是在某个子目录下http://www.mydomain.com/magento/: RewriteBase /magento/ RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /magento/index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.mydomain.com/magento/ [R=301,L]</p>
<h3>1.2. 页眉设置</h3>
<p>安装Magento时默认的标题是 "Magento Commerce"。为了你的Magento商店得到它应得得流量，以下你必须了然于胸： 搜索引擎着重于开头的词，所以如果你的关键字靠近页面标题的开头那你有更大的可能性让排名更好。 人们扫视结果页面，一般看开头的几个词。如果你的关键字位于页面的的开始，那你被点击的可能性就大很多。 首先你应该去掉默认的标题 "Magento Commerce". 后台点击 Configuration =&gt; Design =&gt; HTML Head. 为你的网站选一个描述性好的标题，这个标题也会在几个没有内容的页面中使用，比如 "Contact Us" 和 "Popular Search Terms". 把页面标题加到你的店名中，包括目录和商品，把你的店名放在&ldquo;标题后缀&rdquo;中。保持前缀空白是个不错的选择，原因上面提到过。同时保持 "Default Description" 和 "Default Keywords" 空白。对于非产品展示页面，为防止整站索引，设置 "Default Robots" 为 "NOINDEX, NOFOLLOW" 会有所帮助，但对于别的页面来说要确保设置为 "INDEX, FOLLOW". 现在我们优化你的网店页面的，好的方法是加上 new canonical tag （新的规范标签）。你可以安装 Canonical URL's for Magento Module 以便把它们加到你的head种来改进你的Magento SEO。 因某些原因Magento把未设置的meta机器人转为一个meta标签，方式如下：<meta name="robots" content="*" />这种方式会造成搜索引擎一些奇怪的行为，所以我们要把它移除。要从代码中移除这些空白的meta你可以安装 Yoast MetaRobots Module.</p>
<h3>1.3. CMS 页面</h3>
<p>第一眼看上去Magento似乎缺少华丽的CMS功能，但对于大多数使用者来说这已经足够了。简单的CMS的好处之一是你能够控制页面的每一个方面。一旦你赋予每一个CMS页面一些不错的内容，选一个SEF URL鉴别者和页面标题，（同时记住1.2小节中的要点），到Meta数据标签处为每个你想要给它排名的CMS页面写上描述。 你可以保持"Keywords"栏空白。描述有一个很重要的作用：引诱人们去点击，所以确保它描述的确实是他们所要点击页面的内容，那样可以引起他们的注意。因此，唯一的好的描述就是自己手写的，如果你考虑用自动描述软件来写描述，那还不如什么也不做，让搜索引擎负责这部分。 如果你不使用meta描述，搜索引擎会在你的文件里找到关键字，并自动选择一条，那样在结果页面里会有一到两个醒目的词。</p>
<h3>1.4. 商品目录优化</h3>
<p>Magento 给你增加目录名的权利，让你的目录指向产品的URL。因为Magento对建立相同的内容这个功能的支持不够，很好的方式就是禁用它。设置它，点击System =&gt; Configuration =&gt; Catalog =&gt; Search Engine Optimization and set "Use categories path for product URL's to "no". 现在是时候设置每一个目录的细节了。点击Catalog =&gt; Manage Categories. 最重要的区域是： Meta 描述: 在这里放上吸引人的描述；记住人们会在搜索引擎的结果列表页中看到这个描述。 页面标题: 保持页面标题空白，使用目录名包括父目录。但你按照要求制作目录时，标题会象你所输入的一样，没有父目录。 URL 要点: 尝试保持短的但是关键字丰富的URL。移除没用的词象&ldquo;the&rdquo;，&ldquo;and","for"等等。要注意的是你只能在&ldquo;all store views&rdquo;下设置, 对于多语种的商店你应该保持语言的独立。 对于每一个商店界面，你可以指定名字，描述，页面标题和Meta数据。对多语种商店来说这真的是一个很棒的功能。</p>
<h3>1.5. 商品优化</h3>
<p>商品页面的优化和目录优化有些相似。你可以设置Meta信息为 "Default Values" 并使用于每一个 "Store View". 注意对于 "Meta Title", 这个将写在完全的页面标题上，包括目录但不包括标题的前缀/后缀，而不仅仅是商品的名称。 Magento SEO中一个经常忽略的方面是你怎么处理你的图片。通过给图片写标签和考虑给你的图片起怎样的名字，你会从不同的图片搜索引擎得到不错的额外流量。</p>
<h2>2.Magento模板优化</h2>
<h3>2.1. 优化了的空白模板</h3>
<p>默认的Magento皮肤如 "Default Theme", "Blue Skin" 和 "Modern Theme" 在标题方面的工作做得不好，从SEO的角度来看，有很多的地方可以改进。为使它对你变得简单，我们开发了一款空白的Magento SEO模板，基于Magento的核心技术，空白模板合并了所有的东西，你可以下载并一起讨论它 download and discuss it here.</p>
<h3>2.2. 标题</h3>
<p>默认的 logo 是一个 &lt;h1&gt;, 应该只是出现在首页，在别的页面上它应该是一个&lt;h3&gt;. 最重要的事实让标题的内容置于 &lt;h1&gt; 标签之中，例如，在目录页它应是目录名在商品也应是商品名。 下一步是清除过量的标题。一个好主意是清除侧栏的标题，或者做一个和商店相关的文字（包括关键字）。没有什么理由加上"static" 和没有什么关键字的标题在&lt;h4&gt;中. 是的，例如，把所有的 &lt;h4&gt; 标签换成 &lt;div&gt; to &lt;strong&gt; 标签更好。现在是时候优化你的内容了，在目录页中把商品名放在 &lt;h3&gt; 里，把目录名放在 &lt;h1&gt;里。在商品页，你应该把商品名放在&lt;h1&gt;里. 想了解更多关于为什么正确的标题是重要的，可以阅读这篇文章 Semantic HTML and SEO.</p>
<h3>2.3. 清除你的代码</h3>
<p>保持你的模板清爽，把你的模板文件中的所有 javascript 和 CSS 移到外部的 javascripts 和css 文件中，因为它们对你的Magento SEO没有任何好处。这样做可以确保你的用户在首次读取文件的时候储存那些文件，搜索引擎不需要花费大量的时间来下载它们。</p>
<h2>3. 高级Magento SEO 和重复内容</h2>
<p>一旦你完成了所有基础的东西你会发现剩下的事情就是一件简单的事：相同的内容。实际上是大量的相同的内容。商品里有相同的内容，至少，在下面的URLs有完全相同的内容：</p>
<p>domain.com/product.html domain.com/category1/product.html domain.com/catalog/product/view/id/1/ domain.com/catalog/product/view/id/1/category/1/ 此外，商品回顾页面有几乎一样的内容。另一个问题是目录，你有大量相同的内容在层级导航中和索引选择中。最坏的情况是一个商品在这个页面显示之外，至少还会在这个页面以外的4个页面中显示。 我们可以通过去掉这些相同的内容，并允许它们被蜘蛛爬但不被索引，固定目录的索引选择和层级导航。</p>
<h3>3.1. 无内容页面的Noindex, follow</h3>
<p>安装 Yoast robots meta module 并确保设置成防止索引所有的无内容页面，现在搜索引擎将通过所有的链接来到这些页面上但不会再索引中显示这些页面。</p>
<h3>3.2. Nofollowing 非必需的链接</h3>
<p>另一简单的步骤来提高你的 Magento SEO 是停止链接到你的登录，付款，希望购买列表和所有其他没有内容的页面。对于RSS feeds,层级导航，增加商品到希望购买列表，增加商品到比较列表来说也是同样的设置。目前还没有插件来完成这些工作。你不得不进入你的模板文件中手工完成。</p>
<h3>3.3. 规范的URLs</h3>
<p>帮助搜索引擎理解你页面中的相同内容，你可以在每个页面使用你更喜欢的URL，使用新的 canonical URL tag （规范的URL标签），你就应该安装这个 Canonical URL's for Magento 模数。</p>
<h3>3.4. XML 地图</h3>
<p>XML 地图是让搜索引擎知道你的内容在哪里的简单方法，它不会帮助你提高排名，但它可以帮助你更快得到索引。你可以手工建立一个XML地图，后台点击 Catalog =&gt; Google Sitemap =&gt; Add Sitemap, 选择一个文件名，路径和商店界面，然后点击 "Save &amp; Generate"。然后你可以简单的把下面的代码放到你的 robots.txt 文件中指引搜索引擎向你的 sitemap.xml 文件: Sitemap: /sitemap.xml 如果你的目录更改了，记得去重新生成XML地图。</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 03:00:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento seo小技巧]]></title>
      <link>https://www.360magento.com/blog/magento-seo-addpage/</link>
      <description><![CDATA[<p>当在<a title="电商网站开发" href="https://www.360magento.com/"><strong>Magento</strong></a>后台创建一个新页面，特别是产品页面、普通页面和博客页面的时候，对页面进行SEO显得尤为重要，因为这涉及到整个网站的长尾关键词分布，是整个网站SEO极为重要的一环。</p>
<h2>1．产品页面SEO</h2>
<p>在<a title="电商网站开发" href="https://www.360magento.com/">Magento</a>后台添加产品页面的时候，产品的标题(Name)应尽量包含产品品牌、型号、应用、特点等字词；产品描述(Description)和产品简介(Short Description)最好再次写下产品标题中最重要的关键词，增加关键词出现的频率；URL路径(URL KEY) 应包含产品品牌、型号等关键词，如&ldquo;hp-lcd-panel-cq61&rdquo;。 Meta信息(Meta Information)包括meta title、meta keywords和meta description三部分。其中meta title不用填写，因为产品的标题(Name)已经加入了关键词，meta title一栏留空的话系统就会让搜索引擎抓取产品标题，所以这里就不需要进行重复劳动了。当然如果你觉得产品标题容不下你想要展示的信息时，你也可以在这里添加。Meta keywords栏目应选择1至 8个关键词放在此处。产品料号、型号、品牌、应用产品、供应商、特点等都可以作为关键词。例如，hp cq61 lcd panel,B156XW02 V.0, auo , laptop lcd panel replacement；Meta description则用一两句包含meta keywords的话概括描述产品。但是实际情况是：由于产品众多，不太可能花费那么多时间去对每个产品的meta description撰写句子，所以可以整理出所有产品都适用的句式，对于不同的产品，只要更改相应的关键词即可，或者直接留空，让搜索引擎自动抓取。上传产品图片时，产品名称最好也包含相关关键词，标记（Label）可留空，让搜索引擎自动抓取产品名称作为label即可。另外，Magento还有产品标签（product tags）功能，给产品添加各种标签，搜索引擎和用户都就能更方便地找到需要的东西了。</p>
<h2>2．普通页面和博客页面SEO</h2>
<p>网站页面SEO方法大同小异，<a title="电商网站开发" href="https://www.360magento.com/">Magento</a>产品页面方法（标题、URL路径、meta信息、图片名称）都适用于普通页面和博客页面。但是普通页面和博客页面是对文本的编辑，搜索引擎基本都是根据文本内容来爬行抓取的，所以对于文字文本的编辑也是页面SEO很重要的因素。 页面正文中应多次多出此页面标题的关键词，并且可以在第一次出现的时候加粗以示强调。同时如果正文中出现了相关关键词，可以对其设置超链接并且指向相应的页面，这样页面与页面之间就有了联系，更有利于搜索引擎蜘蛛的爬行。 如果正文中有图片，那么图片应该设置alt属性，如<span>&lt;img src=&rdquo;hp-cq61.jpg&rdquo; alt=&rdquo;hp lcd panel cq61&rdquo;/&gt;</span>。alt属性的作用是当图片无法显示时以文字作为替代显示出来，而对于SEO来说，它可以令搜索引擎有机会索引你网站上的图片。</p>
<h2>3．页面SEO应该注意的其他因素</h2>
<p>a. 太大的页面影响搜索引擎的处理速度</p>
<p>b. 关键信息应该出现在页面中靠前的位置</p>
<p>c. Javascript和stylesheet应该尽量放在页面外部</p>
<p>d. 一个页面代码部分的体积不要太大，控制在100kb内为佳</p>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 16 Sep 2015 02:43:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[服装店magento主题模板]]></title>
      <link>https://www.360magento.com/blog/clothes-store/</link>
      <description><![CDATA[<p><img class="js-preview-lazy lazy" style="display: block; width: auto;" alt="响应式magento模板主题" src="http://7xjryy.com1.z0.glb.clouddn.com/53452-responsive-layout.jpg" /></p>
<p>&nbsp;&nbsp;在上篇文章里为大家推荐了一款时尚皮包的magento主题模板，受到了不少读者的青睐。今天呢，为大家强力推荐一款服饰主题的模板。当今社会随着人们生活品质的提高，对衣着的要求也越来越高，这也意味着服装店网站也需要更加吸引顾客才行。下面我们一起来看看这款magento主题模板。</p>
<p>&nbsp;&nbsp;作为一款优秀的magento主题模板，响应式是必须的。本模板完美支持智能手机和平板电脑，在不同设备上享受不同的视觉盛宴。网站主体为简约低调的灰白风格，时尚而富有贵族气息。搜索、登录、购物车、语言切换等功能皆安置在小巧的图标里，如需使用点击即可，如图是登录等功能：</p>
<p><img class="js-preview-lazy lazy" style="display: block; width:840px;" alt="响应式magento模板主题" src="http://7xjryy.com1.z0.glb.clouddn.com/clothes-store0.png" /></p>
<p>&nbsp;&nbsp;强大的Megamenu插件也也是不可缺少的，看看展示的效果就能让你心动不已。</p>
<p><img class="js-preview-lazy lazy" style="display: block; width: 840px;" alt="响应式magento模板主题" src="http://7xjryy.com1.z0.glb.clouddn.com/clothes-store1.png" /></p>
<p>&nbsp;&nbsp;为了能更好，更多地展示出特色产品，本模版首页包含了两个幻灯片，欢迎大家点击<a href="http://www.360magento.com/magento-theme/theme027.html">http://www.360magento.com/magento-theme/theme027.html</a>查看。</p>
<p>另外，值得一提的是最新产品的展示，请看下图：</p>
<p><img class="js-preview-lazy lazy" style="display: block; width: 840px;" alt="响应式magento模板主题" src="http://7xjryy.com1.z0.glb.clouddn.com/clothes-store2.png" /></p>
<p>&nbsp;&nbsp;服装的各种款式、颜色只需轻轻点击即可切换观看，简单方便，大大节省顾客挑选产品的时间，给顾客更加友好的体验。更多功能就不一一介绍，由您自己去体验。</p>
<p>&nbsp;&nbsp;如有需要，360magento团队会为您提供magento建站，插件开发等优质服务，满足您的多钟需求，解决您所遇到的各种困难。</p>]]></description>
      <pubDate>Tue, 15 Sep 2015 12:07:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[时尚经典包包magento主题模板推荐]]></title>
      <link>https://www.360magento.com/blog/magento-handsbag/</link>
      <description><![CDATA[<p><img class="js-preview-lazy lazy" style="display: block; width: auto;" alt="响应式magento模板主题" src="http://7xjryy.com1.z0.glb.clouddn.com/53982-responsive-layout.jpg" /></p>
<p>&nbsp;&nbsp;Magento作为世界上最优秀的模板之一，正逐步地引起了过人的重视，越来越多的大小型企业选择magento作为网站的开发模板，也广受好评。众所周知的，网络的发展势不可挡，网站作为企业的门户也带来了很可观的受益。因此，选择一个优质的，符合企业需求的模版便成了网站建设的一大重点。今天就为大家推荐一个为皮包厂商量身定做的主题模版。</p>
<p>&nbsp;&nbsp;这款模板在360magento官网(www.360magento.com)中的名字是&ldquo;Stylish Bags Boutique Magento 主题模板&rdquo;。大家可点击<a href="http://www.360magento.com/magento-theme/theme023.html">http://www.360magento.com/magento-theme/theme023.html</a>来查看模板的演示效果。主题模板以橙、灰、白三色为主调，简约而符合皮包特点。强大的Megamenu能在导航中添加广告，告别传统导航仅仅只有单调文字的过去，其强大功能也只有用过的人才能体会一二。首页超大的幻灯片更是将网站特色产品尽显客户眼底。最新产品的展示也以滚动的形式展现出来，更多的产品，更小的空间，有利于顾客良好的体验。博客功能使得商家与客户的交流更加密切，商家可利用此功能普及客户对皮包的认识，让客户能更好地做出选择。</p>
<p>&nbsp;&nbsp;至于其它更多功能我就不再一一列举，欢迎各位在演示网站中去体验。 如有需要，360magento团队会为您提供magento建站，插件开发等优质服务，满足您的多钟需求，解决您所遇到的各种困难。</p>]]></description>
      <pubDate>Mon, 14 Sep 2015 15:25:32 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中避免jQuery与其它库冲突]]></title>
      <link>https://www.360magento.com/blog/avoid-conflicts-other-libraries/</link>
      <description><![CDATA[<p>大家都知道，在magento中用的js库是prototype,而现在我们想用jQuery,那么这就涉及到兼容性问题了，因为prototype控制着magento默认的所有js效果，我们不可能去花费大量时间去把prototype替换成jQuery,这样代价太大了，下面就在magento中jQuery兼容prototype解决方法做下讲解</p>
<p>jQuery命名空间里包含了它的库和所有插件。一般来说，全局对象存储在jQuery的命名空间里，所以不应该与其它库发生冲突（比如 prototype.js, MooTools,或者YUI）</p>
<p>也就是说，这里警告大家：默认地，jQuery使用$作为jQuery的缩写。因此，如果你正使用JavaScript库中的$变量，那么就会与jQuery冲突。为 了避免这些冲突，你需要在jQuery载入页面和被使用前进入无冲突模式（no-conflict mode）。</p>
<h2>让jQuery进入无冲突模式</h2>
<p>当你让jQuery进入无冲突模式时，你可以用一个新的变量名来代替$别名。</p>
<pre><code>
&lt;!-- Putting jQuery into no-conflict mode. --&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/scrip&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
var $j = jQuery.noConflict();
// $j is now an alias to the jQuery function; creating the new alias is optional.
 
$j(document).ready(function() {
    $j( "div" ).hide();
});
 
// The $ variable now has the prototype meaning, which is a shortcut for
// document.getElementById(). mainDiv below is a DOM element, not a jQuery object.
window.onload = function() {
    var mainDiv = $( "main" );
}
// ]]&gt;&lt;/script&gt;
</code></pre>
<p>在上面的代码中，$的意思会在原始库中被还原。使用jQuery函数全名和新别名$j效果是一样的。新的别名可以任由你命名，比如：jq, $J, awesomeQuery，等等。</p>
<p>最后，如果你不愿意替换掉jQuery函数名（超喜欢用$而不在乎其它库中的$方法），这里也有个方法你可以试试：简单地将$作为参数传到你的jQuery( document ).ready()方法中。这是最常用的技能利用jQuery代码简洁优势，又能避免冲突的方法。</p>
<pre><code>
&lt;!-- Another way to put jQuery into no-conflict mode. --&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
jQuery.noConflict();
 
jQuery( document ).ready(function( $ ) {
    // You can use the locally-scoped $ in here as an alias to jQuery.
    $( "div" ).hide();
});
 
// The $ variable in the global scope has the prototype.js meaning.
window.onload = function(){
    var mainDiv = $( "main" );
}
// ]]&gt;&lt;/script&gt;
</code></pre>
<p>对于大部分你的代码，这可能是理想的解决方式。考虑到一些少部分情况，你将要做些改变去达到完全兼容的效果。</p>
<h2>在其它库前载入jQuery库</h2>
<p>上面例子中，依赖jQuery的代码在prototype.js之后被读取。如果在其它库前载入jQuery，你就可以在jQuery作用的地方使用jquery，但是$会有其它库中定义的意思。这样就不需要通过调用jQuery.noConflict()放弃$别名了。</p>
<pre><code>
&lt;!-- Loading jQuery before other libraries. --&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
// Use full jQuery function name to reference jQuery.
jQuery( document ).ready(function() {
    jQuery( "div" ).hide();
});
 
// Use the $ variable as defined in prototype.js
window.onload = function() {
    var mainDiv = $( "main" );
};
// ]]&gt;&lt;/script&gt;
</code></pre>
<h2>引用jQuery函数摘要</h2>
<p>这里回顾下在冲突情况下如何引用jQuery函数</p>
<h3>创建一个新别名</h3>
<p>jQuery.noConflict()方法返回一个新的参数给jQuery函数，因此你可以在任何你想要的变量中捕捉它。</p>
<pre><code>
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
// Give $ back to prototype.js; create new alias to jQuery.
var $jq = jQuery.noConflict();
// ]]&gt;&lt;/script&gt;
</code></pre>
<h3>使用一个立即调用的函数表达式</h3>
<p>通过将你的代码包含进一个立即调用函数表达式可以让你继续使用标准的$；这也是jQuery插件编写的一个标准模式，这里笔者不知道其它库是否会接管$。</p>
<pre><code>
&lt;!-- Using the $ inside an immediately-invoked function expression. --&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
jQuery.noConflict();
 
(function( $ ) {
    // Your jQuery code here, using the $
})( jQuery );
// ]]&gt;&lt;/script&gt;
</code></pre>
<p>这里要注意的是，当你使用这项技术时，你将不能在立即调用函数内使用prototype.js方法。$将是jQuery的参数。</p>
<h3>使用jQuery( document ).ready()函数的传递</h3>
<pre><code>
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
jQuery(document).ready(function( $ ) {
    // Your jQuery code here, using $ to refer to jQuery.
});
// ]]&gt;&lt;/script&gt;
</code></pre>
<p>或者使用更简洁的语法DOM ready函数</p>
<pre><code>
&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
jQuery(function($){
    // Your jQuery code here, using the $
});
// ]]&gt;&lt;/script&gt;
</code></pre>]]></description>
      <pubDate>Fri, 11 Sep 2015 05:54:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento插件教程之计算器]]></title>
      <link>https://www.360magento.com/blog/magento-extension-study001/</link>
      <description><![CDATA[<p>这个案例的内容是，在magento前台输入两个数，然后输出结果。 这个案例的目的是 1.数值是如何在magento的Controllers传递到Block中的，又是如何在phtml文件中输出的。 2.controllers中的action使用。 3.了解使用form post参数和如何get参数。</p>
<p>首先来看下这个案例中的文件结构 <br /> /* 声明插件，指定codePool、插件开启状态等 */</p>
<pre>app/etc/modules/Alwayly_Counter.xml</pre>
<p>/* 模板.phtml文件中使用的方法在此文件中声明，此案例中此文件将计算结果传递到.phtml文件 */</p>
<pre>app/code/local/Alwayly/Counter/Block/Counter.php</pre>
<p>/* 我们此案例的的控制器 http://magento-root-folder/module-name/controller-name/action-neame 此例中IndexController控制器中的一个action获取counter.phtml中传来的参数，并将参数传递到Counter.php，在Counter.php中计算后将结果返回到counter.phtml输出 */</p>
<pre>app/code/local/Alwayly/Counter/controllers/IndexController.php</pre>
<p>/* 主要的插件配置文件 */</p>
<pre>app/code/local/Alwayly/Counter/etc/config.xml</pre>
<p>/* 前台显示模板的layout */</p>
<pre>app/design/frontend/default/default/layout/counter.xml</pre>
<p>* 前台模板文件，我们的form和结果最终就在这个文件输出，此文件直接使用$this-&gt;调用与其相应的block中的方法，本例中我们只使用这一个模板页面。 */</p>
<pre>app/design/frontend/default/default/template/counter/counter.phtml</pre>
<p>/* Helper此例不使用，放在这主要作用是显得气派，充门面 */</p>
<pre>app/code/local/Alwayly/Counter/Helper/Data.php</pre>
<p>我们先从简单的开始，那就先在前台的模板文件counter.phtml中写个提交的form吧</p>
<p>app/design/frontend/default/default/template/counter/counter.phtml文件中代码片段（详见本例文件）</p>
<pre>&lt;form action="<!--?php echo Mage::getUrl('counter') ?-->" method="post" id="orderreport-form"&gt;
        &lt;fieldset&gt;
            &lt;ul&gt;
                &lt;li&gt;
                    &lt;label for="NUM1"&gt;&lt;?php echo $this-&gt;__('NUM1: ') ?&gt;&lt;span class="required"&gt;*&lt;/span&gt;&lt;/label&gt;
                    &lt;input type="text" id="NUM1" name="NUM1" class="input-text required-entry validate-alphanum" /&gt;
                &lt;/li&gt;
                &lt;li&gt;
                    &lt;label for="NUM2"&gt;&lt;?php echo $this-&gt;__('NUM2: ') ?&gt;&lt;span class="required"&gt;*&lt;/span&gt;&lt;/label&gt;
                    &lt;input type="text" id="NUM2" name="NUM2" class="input-text required-entry validate-alphanum" /&gt;
                &lt;/li&gt;
                &lt;li&gt;
                    &lt;input type="submit" value="<!--?php echo $this--->__('submit') ?&gt;" /&gt;
                &lt;/li&gt;
            &lt;/ul&gt;
        &lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>注意action="&lt;!--?php echo Mage::getUrl('counter') ?-->" 等同于 action="&lt;!--?php echo Mage::getUrl('counter/index/index') ?-->"</p>
<p>有数据的post了，我们就在counter/index/index这个path下的indexAction中接收这个参数 app/code/local/Alwayly/Counter/controllers/IndexController.php文件中代码片段（详见本例文件）</p>
<pre> public function indexAction()
    {
       
        if ($this-&gt;getRequest()-&gt;isPost()){ /* 首先判断是否有post发生 */
            $nu1 = $this-&gt;getRequest()-&gt;getParam('NUM1'); /* 截获参数 */
            $nu2 = $this-&gt;getRequest()-&gt;getParam('NUM2');
            Mage::register('nu1', $nu1);/* 传递到block */
            Mage::register('nu2', $nu2);
        }
           
        $this-&gt;loadLayout();    
        $this-&gt;renderLayout();
    }
</pre>
<p>既然在controllers中有了传递到block的方法，下一步就在block中获取 app/code/local/Alwayly/Counter/Block/Counter.php文件中代码片段（详见本例文件）</p>
<pre>protected $nu1 = null ;
    protected $nu2 = null;
    public function showresult(){
        $this-&gt;nu1 = Mage::registry('nu1'); /* 获得从controllers中传递来的参数 */
        $this-&gt;nu2 = Mage::registry('nu2');
        return $this-&gt;nu1 * $this-&gt;nu2;
  
    } 
</pre>
<p>此block文件中的showresult()方法在phtml文件中可以试用$this-&gt;直接调用。 这样我们就差最后一步就是在我们的模板文件中输出结果了在app/design/frontend/default/default/template/counter/counter.phtml文件中添加输出结果的代码</p>
<pre>&lt;ul&gt;
&lt;li&gt;result:&lt;?php echo $this-&gt;showresult(); ?&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>]]></description>
      <pubDate>Sun, 06 Sep 2015 01:41:29 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中自定义邮寄方式]]></title>
      <link>https://www.360magento.com/blog/custom-shipping-method-in-magento/</link>
      <description><![CDATA[<p><img alt="" src="http://7xjryy.com1.z0.glb.clouddn.com/custom-shipping-magento.png" height="300" width="760" /></p>
<p>在这篇文章中我将演示如何在Magento中编写自定义的邮寄方式。准确说来分为标准邮寄（standard shipping）和快递邮寄（express shipping）。只有当你购买的产品超过指定重量时才可能邮寄。首先说明下Magento如何处理邮寄以及为完成我们的目标需要些什么。</p>
<p>当寻找可用的邮寄方式是，Magento首先收集所有可用的载体(carriers)。一个&ldquo;Carrier&rdquo; 代表一个承运商，就像现实世界中的（例如联邦快递）。每一个载体都被表现在扩展自Mage_Shipping_Model_Carrier_Abstract的类。</p>
<p>在列出接受的载体后，邮寄方式信息（表现为Mage_Shipping_Model_Rate_Request）被送到载体去检索所有可用的费率，结果表现在Mage_Shipping_Model_Rate_Result。</p>
<p>这个过程发生在<strong>Mage_Shipping_Model_Shipping::collectRates()</strong>的这段代码里：</p>
<pre><code>
...
$carriers = Mage::getStoreConfig('carriers', $storeId);
 
foreach ($carriers as $carrierCode =&gt; $carrierConfig) {
    $this-&gt;collectCarrierRates($carrierCode, $request);
}
...
</code></pre>
<p>collectCarrierRates()功能负责确认载体是否可用以及触发你的类中的collectRates()功能。 这大致就是在屏幕后所发生的事。现在，针对上面所讲我们要写一些代码。首先你要做的就是创建一个基于Mage_Shipping的模型。除了标准的模型配置外你还需要将以下代码放入你的config.xml:</p>
<pre><code>
&lt;config&gt;
    ...
    &lt;default&gt;
        ...
        &lt;carriers&gt;
            &lt;alwayly_shipping&gt;
                &lt;active&gt;1&lt;/active&gt;
                &lt;model&gt;alwayly_shipping/carrier&lt;/model&gt;
                &lt;title&gt;Alwayly Shipping Carrier&lt;/title&gt;
                &lt;sort_order&gt;10&lt;/sort_order&gt;
                &lt;sallowspecific&gt;0&lt;/sallowspecific&gt;
                &lt;express_max_weight&gt;1&lt;/express_max_weight&gt;
            &lt;/alwayly_shipping&gt;
        &lt;/carriers&gt;
        ...
    &lt;/default&gt;
    ...
&lt;/config&gt;
</code></pre>
<p>sallowspecific和express_max_items配置条目，我们稍后解释。我们将从模型条目开始。如你所见，我们的载体表现在 Alwayly_Shipping_Model_Carrier，所以让我们实现在个类吧。前面提到的，载体需要扩展自Mage_Shipping_Model_Carrier_Abstract 并且实现Mage_Shipping_Model_Carrier_Interface来确认Magento能使用它。我们将以下面的代码开始：</p>
<pre><code>
class Alwayly_Shipping_Model_Carrier
    extends Mage_Shipping_Model_Carrier_Abstract
    implements Mage_Shipping_Model_Carrier_Interface
{
    protected $_code = 'alwayly_shipping';
</code></pre>
<p>接着，getAllowedMethods() 以key-value 形式的数组返回所有可用的方法。这正是我们的接口需要的，我们这么实现：</p>
<pre><code>
public function getAllowedMethods()
{
    return array(
        'standard'    =&gt;  'Standard delivery',
        'express'     =&gt;  'Express delivery',
    );
}
</code></pre>
<p>最后，我说过费率被collectRates()收集。这个功能将邮寄信息转换为字段，返回所有可用的费率。它还确定哪些费率可用于给定的要求。</p>
<pre><code>
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
	/** @var Mage_Shipping_Model_Rate_Result $result */
	$result = Mage::getModel('shipping/rate_result');
 
	/** @var Alwayly_Shipping_Helper_Data $expressMaxProducts */
	$expressMaxWeight = Mage::helper('alwayly_shipping')-&gt;getExpressMaxWeight();
 
	$expressAvailable = true;
	foreach ($request-&gt;getAllItems() as $item) {
	    if ($item-&gt;getWeight() &gt; $expressMaxWeight) {
		$expressAvailable = false;
	    }
	}
 
	if ($expressAvailable) {
	    $result-&gt;append($this-&gt;_getExpressRate());
	}
	$result-&gt;append($this-&gt;_getStandardRate());
 
	return $result;
}
</code></pre>
<p>如你所见，代码很明了。购物车里的产品重量都和设定的值做对比，由此来决定是否用快递费率每一种费率都是通过Mage_Shipping_Model_Rate_Result_Method 对象到append()这个我们的结果对象。我们通过alling _getExpressRate()和_getStandardRate()来获取这些费率对象，下面是代码：</p>
<pre><code>
protected function _getStandardRate()
{
    /** @var Mage_Shipping_Model_Rate_Result_Method $rate */
    $rate = Mage::getModel('shipping/rate_result_method');
 
    $rate-&gt;setCarrier($this-&gt;_code);
    $rate-&gt;setCarrierTitle($this-&gt;getConfigData('title'));
    $rate-&gt;setMethod('large');
    $rate-&gt;setMethodTitle('Standard delivery');
    $rate-&gt;setPrice(1.23);
    $rate-&gt;setCost(0);
 
    return $rate;
}
</code></pre>
<p>功能类已经完成。我们最后通过system.xml文件来添加后台配置。这里是代码的缩略版：</p>
<pre><code>
&lt;config&gt;
    &lt;sections&gt;
        &lt;carriers&gt;
            &lt;groups&gt;
                &lt;alwayly_shipping translate="label"&gt;
                    ...
                    &lt;fields&gt;
                        &lt;active translate="label"&gt;
                            ...
                        &lt;/active&gt;
                        &lt;title translate="label"&gt;
                            ...
                        &lt;/title&gt;
                        &lt;sallowspecific translate="label"&gt;
                            ...
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;frontend_class&gt;shipping-applicable-country&lt;/frontend_class&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_shipping_allspecificcountries&lt;/source_model&gt;
                            ...
                        &lt;/sallowspecific&gt;
                        &lt;specificcountry translate="label"&gt;
                            ...
                            &lt;frontend_type&gt;multiselect&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_country&lt;/source_model&gt;
                            ...
                        &lt;/specificcountry&gt;
                        &lt;express_max_weight translate="label"&gt;
                            ...
                        &lt;/express_max_weight&gt;
                    &lt;/fields&gt;
                &lt;/alwayly_shipping&gt;
            &lt;/groups&gt;
        &lt;/carriers&gt;
    &lt;/sections&gt;
&lt;/config&gt;
</code></pre>
<p>值得注意的是，active, title, sallowspecific 和specificcountry是被Magento自动处理的。所以除了把这些添加到后台外你什么也不用做。这里有两个有趣的选项，第一个是sallowspecific，告诉Magento运营商是否对所有国家可用，或者只针对specificcountry中指定的国家。这样，在支付页面添加邮寄方式的需求就实现了。</p>
<p><strong>声明：这篇文章原文写于2009。</strong></p>
<p>360团队与您同在</p>]]></description>
      <pubDate>Fri, 28 Aug 2015 12:49:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在提示框里显示Magento表单验证错误信息]]></title>
      <link>https://www.360magento.com/blog/show-validation-error-messages/</link>
      <description><![CDATA[<p><img alt="" src="http://7xjryy.com1.z0.glb.clouddn.com/messages.jpg" height="240" width="609" /></p>
<p>这是一个小技巧，它可以快速地提高你的表单验证错误信息，并且在提示框里显示。</p>
<p>这里不需要做任何的模版修改，你所要做的只是编辑你的CSS文件，用自定义代码来更新它。</p>
<p>当错误信息被触发，Magento会注入一个class为"validation-advice"的div，这就是我们要在Css文件中修改的class。</p>
<p>它必须相对于它的容器（input-box）来绝对定位。</p>
<p>所以，在你的styles.css文件中找到class .validation-advice（大约在300行左右），用以下的代码来替代它：</p>
<pre><code>
/* Form Validation */
.input-box {
	position: relative !important;
}
.validation-advice {
	background: #DB6D00;
	bottom: -7px;
	color: #fff;
	font-size: 11px;
	font-weight: bold;
	line-height: 13px;
	min-height: 13px;
	padding: 10px;
	position: absolute;
	right: -150px;
	width: 120px;
	border-radius: 5px;
	box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
 
}
.validation-advice:after {
	position: absolute;
	left: -8px;
	bottom: 8px;
	content: " ";
	width: 0;
	height: 0;
	border-top: 8px solid transparent;
	border-bottom: 8px solid transparent;
	border-right: 8px solid #DB6D00;
}
</code></pre>
<p>请注意这段代码应该重写&ldquo;.validation-advice&rdquo; class并作用于Magento默认的主题。如果你有不同的主题，这段代码可能显示的效果不一样。</p>
<p>360团队与您同在&hellip;&hellip;</p>]]></description>
      <pubDate>Fri, 28 Aug 2015 12:41:45 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中获取当前用户角色]]></title>
      <link>https://www.360magento.com/blog/get-the-current-customer-role/</link>
      <description><![CDATA[<p><img alt="magento获取用户角色" src="http://7xjryy.com1.z0.glb.clouddn.com/customer-group-featured.jpg" height="240" width="609" /></p>
<p>回顾以前些的文章，我有时能找到一些很有用的东西。其中之一是一段代码，它能对指定的客户群进行自定义操作。 在Magento后台，我们可以找到客户群。</p>
<ul>
<li>客户群管理 <strong>Customers-&gt;Customer Groups </strong></li>
<li>修改客户所在的群 <strong>Customers-&gt;Manage Customers-&gt;Click on a customer-&gt;Account Information tab-&gt;Customer group </strong>dropdown</li>
</ul>
<p>首先你要注册你的模型。我假设你已经知道如何完成，或者你已经有现成的可用。</p>
<p>现在，为你的模型创建一个配置文件。我这里使用的示例模型是存在于<strong>'Alwayly'</strong>命名空间下的<strong>'Customergroup&lsquo;</strong>，下面是代码：</p>
<p><strong>app/code/community/Alwayly/Customergroup/etc/config.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Customergroup&gt;
            &lt;version&gt;1.0.0&lt;/version&gt;
        &lt;/Alwayly_Customergroup&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;events&gt;
            &lt;controller_action_layout_generate_blocks_after&gt;
                &lt;observers&gt;
                    &lt;alwayly_customergroup&gt;
                        &lt;type&gt;singleton&lt;/type&gt;
                        &lt;class&gt;alwayly_Customergroup_Model_Observer&lt;/class&gt;
                        &lt;method&gt;placeCustomJs&lt;/method&gt;
                    &lt;/alwayly_customergroup&gt;
                &lt;/observers&gt;
            &lt;/controller_action_layout_generate_blocks_after&gt;
        &lt;/events&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>然后，我们创建观察者。</p>
<p><strong>app/code/community/Alwayly/Customergroup/Model/Observer.php</strong></p>
<pre><code>
&lt;?php
class Alwayly_Customergroup_Model_Observer
{
    public function placeCustomJs()
    {
 
        $roleId = Mage::getSingleton('customer/session')-&gt;getCustomerGroupId();
        $role = Mage::getSingleton('customer/group')-&gt;load($roleId)-&gt;getData('customer_group_code');
        $role = strtolower($role);
 
        $headBlock = Mage::app()-&gt;getLayout()-&gt;getBlock('head');
        if($headBlock &amp;&amp; $role=='wholesale')
        {
            $headBlock-&gt;addJs('test/myScript.js');
        }
        return $this;
    }
}
</code></pre>
<p>我展示只是一种用例。你可以在任何合适的地方使用它。比如给特定的用户组显示一条信息，一个不一样的订阅框，等等&hellip;&hellip;</p>
<p>一定要注意：如果用户没有登录，<strong>$role</strong>将会等于<strong> &lsquo;not logged in&lsquo;。</strong></p>
<p><strong>声明：这篇文章最初写于2009年，如有问题请及时联系我们。</strong></p>
<p><strong>360magento团队期待与您的相会:)</strong></p>]]></description>
      <pubDate>Thu, 27 Aug 2015 08:08:55 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[ Magento中添加自定义信用卡类型到支付方式]]></title>
      <link>https://www.360magento.com/blog/adding-custom-credit-card-type/</link>
      <description><![CDATA[<p><img alt="添加自定义信用卡类型" src="http://7xjryy.com1.z0.glb.clouddn.com/credit-card.jpg" height="240" width="609" /></p>
<p>在某一时刻，你也许会在Magento中添加一个自定义的信用卡支付方式。请注意，在这篇Magento教程里，你将学会如何创建和验证一个新的信 用卡类型。另外，本文并不包括整个的创建支付模型过程。</p>
<p>根据这篇文章提到的需求，我们假设要创建的支付模型名字为<strong>NewModule</strong>，对应 <strong>app/etc/modules/Alwayly_NewModule.xml</strong>文件。我们将要创建<strong>Diners Club</strong>信用卡，并在服务器端和客户端 用Magento方式进行验证。</p>
<h2>步骤</h2>
<p>这里只需要几步来实现这件神奇的事。当然，每一步都至关重要。</p>
<ul>
<li>在我们的config.xml文件中添加新的信用卡类型到global payment节点；</li>
<li>让Magento识别我们所用的支付模型</li>
<li>在我们的模型里实现服务器端的验证</li>
<li>实现客户端的验证</li>
</ul>
<h2>添加新的信用卡类型</h2>
<p>让我们创建<strong>etc/config.xml</strong>，添加下面的代码来添加信用卡类型：</p>
<pre><code>
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_NewModule&gt;
            &lt;version&gt;1.0.0&lt;/version&gt;
       &lt;/Alwayly_NewModule&gt;
    &lt;/modules&gt;
 
    &lt;global&gt;
        &lt;payment&gt;
            &lt;cc&gt;
                &lt;types&gt;
                    &lt;DC&gt;
                        &lt;code&gt;DC&lt;/code&gt;
                        &lt;name&gt;Diners Club&lt;/name&gt;
                        &lt;order&gt;60&lt;/order&gt;
                    &lt;/DC&gt;
                &lt;/types&gt;
            &lt;/cc&gt;
        &lt;/payment&gt;
    &lt;/global&gt;
&lt;/config&gt;
</code></pre>
<p>到这里，我们只是添加了一个信用卡类型到Magento，并没有说明它所用的模型以及如何验证它。</p>
<h2>创建支付模型</h2>
<p>让我添加一些代码到<strong>etc/config.xml</strong>来配置我们的模型并告知Magento，代码如下:</p>
<pre><code>
&lt;config&gt;
  ...
    &lt;global&gt;
      ...
        &lt;models&gt;
            &lt;newmodule&gt;
                &lt;class&gt;Alwayly_NewModule_Model&lt;/class&gt;
            &lt;/newmodule&gt;
        &lt;/models&gt;
      ...
    &lt;/global&gt;
 
    &lt;default&gt;
        &lt;payment&gt;
            &lt;newmodule&gt;
                &lt;model&gt;newmodule/payment&lt;/model&gt;
            &lt;/newmodule&gt;
        &lt;/payment&gt;
    &lt;/default&gt;
&lt;/config&gt;
</code></pre>
<p>现在，我们要创建<strong>Alwayly/NewModule/Model/Payment.php</strong>文件。包含扩展了<strong>Mage_Payment_Model_Method_Cc</strong>的类。在这个文件中，我们要将自己定义的正则表达式应用到信用卡号和CVV（信用卡验证码）。如果你想实现一个不同的信用卡类型，你就需要一个与之匹配的正则表达式。</p>
<pre><code>
class Alwayly_NewModule_Model_Payment extends Mage_Payment_Model_Method_Cc
{
    protected $_code = 'alwayly_newmodule';
 
    public function getVerificationRegEx()
    {
        return array_merge(parent::getVerificationRegEx(), array(
            'DC' =&gt; '/^[0-9]{3}$/' // Diners Club CCV
       ));
    }
 
    public function OtherCcType($type)
    {
        return in_array($type, array('OT', 'DC'));
    }
 
    public function validate()
    {
        parent::validate();
        /* we call parent's validate() function!
         * if the code got this far, it means the cc type is none of the supported
         * ones implemented by Magento and now it gets interesting
         */
 
        $info = $this-&gt;getInfoInstance();
        $ccNumber = $info-&gt;getCcNumber();
        $availableTypes = explode(',',$this-&gt;getConfigData('cctypes'));
        // checks if Diners Club card is allowed
        if(!in_array($info-&gt;getCcType(), $availableTypes)){
            Mage::throwException($this-&gt;_getHelper()-&gt;__('Credit card type is not allowed for this payment method.'));
        }
        // validate credit card number against Luhn algorithm
        if(!$this-&gt;validateCcNum($info-&gt;getCcNumber())){
            Mage::throwException($this-&gt;_getHelper()-&gt;__('Invalid Credit Card Number'));
        }
 
        /* this is Diners Club regex pattern.
         * it's different for every cc type, so beware
         */
        if($info-&gt;getCcType()=='DC' &amp;&amp; !preg_match('/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/', $ccNumber)){
            Mage::throwException($this-&gt;_getHelper()-&gt;__('Credit card number mismatch with credit card type.'));
        }
        // now we retrieve our CCV regex pattern and validate against it
        $verificationRegex = $this-&gt;getVerificationRegEx();
        if(!preg_match($verificationRegex[$info-&gt;getCcType()], $info-&gt;getCcCid()))
        {
            Mage::throwException($this-&gt;_getHelper()-&gt;__('Please enter a valid credit card verification number.'));
        }
 
        // further validation here (expiration month, expiration year etc.)
 
    }
 
}
</code></pre>
<p>现在，总结一下我们的Diners Club卡号和验证码部分。你可能会想对<strong>validate()</strong>方法进一步验证，例如信用卡的到期时间。</p>
<p>客户端验证 这里有两种方法可以完成这个功能。 第一种是创建一个.js文件并用布局XML包含到我们想要的地方。第二种只需要修改布局文件。 这里我们将采用第二种方式。</p>
<pre><code>
&lt;config&gt;
  ...
    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;newmodule&gt;
                    &lt;file&gt;newmodule.xml&lt;/file&gt;
                &lt;/newmodule&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>是时候修改布局文件并引入javascript到<strong>checkout onepage</strong>。如果在此之前你没创建布局文件，那么用下面的代码创建它。</p>
<p><strong>design/frontend/base/default/layout/newmodule.xml</strong></p>
<pre><code>
&lt;layout version="1.0.0"&gt;
    &lt;checkout_onepage_index&gt;
        &lt;reference name="head"&gt;
            &lt;block type="core/text" name="newmodule.diners.validation"&gt;
                &lt;action method="setText"&gt;
                    &lt;text&gt;
                        &lt;![CDATA[&lt;script type="text/javascript"&gt;
                            Validation.creditCartTypes.set('DC', [new RegExp('^3(?:0[0-5]|[68][0-9])[0-9]{11}$'), new RegExp('^[0-9]{3}$'), true]);
                        &lt;/script&gt;]]&gt;
                    &lt;/text&gt;
                &lt;/action&gt;
            &lt;/block&gt;
        &lt;/reference&gt;
    &lt;/checkout_onepage_index&gt;
&lt;/layout&gt;
</code></pre>
<p>在我们NewModule的<strong>config.xml</strong>中，我应该把Diners Club加入到许可的信用卡类型列表里。</p>
<pre><code>
&lt;config&gt;
    ...
    &lt;default&gt;
        &lt;payment&gt;
            &lt;newmodule&gt;
                &lt;model&gt;newmodule/payment&lt;/model&gt;
                &lt;cctypes&gt;VI,AE,DC&lt;/cctypes&gt; //Visa (VI), American Express (AE) and Diners Club (DC)
            &lt;/newmodule&gt;
        &lt;/payment&gt;
    &lt;/default&gt;
&lt;/config&gt;
</code></pre>
<p>大功告成！我们成功地在Magento中添加了一个自定义信用卡类型。</p>
<p><strong>360magento团队</strong>竭诚为您服务:)</p>]]></description>
      <pubDate>Thu, 27 Aug 2015 03:28:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中去掉产品图片留白的方法]]></title>
      <link>https://www.360magento.com/blog/remove-white-image-frame/</link>
      <description><![CDATA[<p><img alt="magento去图片留白" src="http://7xjryy.com1.z0.glb.clouddn.com/white-frame.jpg" height="100" width="620" /></p>
<p>Magento有漂亮整洁的助手能输出你的产品照片。今天，我的一位同事在尝试侧边栏展示调整后的图片时，对图片的留白有些不太顺心。他尝试过的一种解决方式是用CSS。然而，这里有一个更好的办法来去掉调整后图片周围的留白。</p>
<p>这个实用例子中的代码来自默认的media.phtml</p>
<p><strong>app/design/frontend/default/you_theme/template/catalog/product/view/media.phtml</strong></p>
<pre><code>
&lt;?php foreach ($this-&gt;getGalleryImages() as $_image): ?&gt;
    &lt;li&gt;
        &lt;a href="#" onclick="popWin('&lt;?php echo $this-&gt;getGalleryUrl($_image) ?&gt;', 'gallery', 'width=300,height=300,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'); return false;" title="&lt; ?php echo $this-&gt;htmlEscape($_image-&gt;getLabel()) ?&gt;"&gt;<br />            &lt;img src="&lt;?php echo $this-&gt;helper('catalog/image')-&gt;init($this-&gt;getProduct(), 'thumbnail', $_image-&gt;getFile())-&gt;resize(56); ?&gt;" width="56" height="56" alt="&lt;?php echo $this-&gt;htmlEscape($_image-&gt;getLabel()) ?&gt;" /&gt;<br />        &lt;/a&gt;
    &lt;/li&gt;
&lt;?php endforeach; ?&gt;
</code></pre>
<p>将它改变成这样将会产生一个&ldquo;框架自由&rdquo;图片</p>
<pre><code>
&lt;?php foreach ($this-&gt;getGalleryImages() as $_image): ?&gt;
    &lt;li&gt;
        &lt;a href="#" onclick="popWin('&lt;?php echo $this-&gt;getGalleryUrl($_image) ?&gt;', 'gallery', 'width=300,height=300,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'); return false;" title="&lt;?php echo $this-&gt;htmlEscape($_image-&gt;getLabel()) ?&gt;"&gt;<br />            &lt;img src="&lt;?php echo $this-&gt;helper('catalog/image')-&gt;init($this-&gt;getProduct(), 'thumbnail', $_image-&gt;getFile())-&gt;keepFrame(false)-&gt;resize(56); ?&gt;" alt="&lt;?php echo $this-&gt;htmlEscape($_image-&gt;getLabel()) ?&gt;" /&gt;<br />        &lt;/a&gt;
    &lt;/li&gt;
&lt;?php endforeach; ?&gt;
</code></pre>
<p>如你所见，我们所做的只是在<strong>resize()</strong>方法前面添加<strong>keepFrame(false)</strong>方法。</p>
<p>这就是脚本修改前后的结果。</p>
<p><img alt="修改前" src="http://7xjryy.com1.z0.glb.clouddn.com/mwf1-150x110.png" height="110" width="150" /> <img alt="magento修改后" src="http://inchoo.net/wp-content/uploads/2010/03/mwf2-150x114.png" height="114" width="150" /></p>
<p>希望它可以解决一些细微的样式问题。</p>
<p>360Magento团队期待与您的沟通:)</p>]]></description>
      <pubDate>Wed, 26 Aug 2015 10:44:14 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中如何添加自定义产品关系]]></title>
      <link>https://www.360magento.com/blog/add-custom-product-relations/</link>
      <description><![CDATA[<p><img alt="magento自定义产品关系" src="http://7xjryy.com1.z0.glb.clouddn.com/inchoo-customlinkedproducts.jpg" height="240" width="609" /></p>
<p>目前，在Magento中有三中产品关系：Up-sells, Related Products,和Cross-sell Products。最近在讨论客户需求的时候，我们发现在Magento中创建独立的自定义产品关系能更好地实现我们的目的。在这篇文章中，我将演示如何增加自定义的Magento产品关系.</p>
<h2>简介</h2>
<p>下面，我将用Magento插件中的代码来说明一下在Magento中添加自定义产品关系的过程。</p>
<h2>安装脚本程序</h2>
<p>首先，要让Magento数据库知道我们新的产品链接类型。以下是安装脚本： <strong>app/code/community/Alwayly/CustomLinkedProducts/sql/alwayly_customlinkedproducts_setup/install-0.0.1.php</strong></p>
<pre><code>
&lt;?php
 
$installer = $this;
 
/**
 * Install product link types
 */
$data = array(
    array(
        'link_type_id'  =&gt; Alwayly_CustomLinkedProducts_Model_Catalog_Product_Link::LINK_TYPE_CUSTOM,
        'code'          =&gt; 'custom'
    )
);
 
foreach ($data as $bind) {
    $installer-&gt;getConnection()-&gt;insertForce($installer-&gt;getTable('catalog/product_link_type'), $bind);
}
 
/**
 * Install product link attributes
 */
$data = array(
    array(
        'link_type_id'                  =&gt; Alwayly_CustomLinkedProducts_Model_Catalog_Product_Link::LINK_TYPE_CUSTOM,
        'product_link_attribute_code'   =&gt; 'position',
        'data_type'                     =&gt; 'int'
    )
);
 
$installer-&gt;getConnection()-&gt;insertMultiple($installer-&gt;getTable('catalog/product_link_attribute'), $data);
</code></pre>
<h2>后台界面</h2>
<p>下一步就是在后台产品信息页添加新标签。下面是相关的PHP代码，稍后我们会用我们的XML文件将它添加到布局。 <strong>app/code/community/Alwayly/CustomLinkedProducts/Block/Adminhtml/Catalog/Product/Edit/Tab.php</strong></p>
<pre><code>
&lt;?php

class Alwayly_CustomLinkedProducts_Block_Adminhtml_Catalog_Product_Edit_Tab
extends Mage_Adminhtml_Block_Widget
implements Mage_Adminhtml_Block_Widget_Tab_Interface
{
    public function canShowTab() 
    {
        return true;
    }
 
    public function getTabLabel() 
    {
        return $this-&gt;__('Custom Linked Products');
    }
 
    public function getTabTitle()        
    {
        return $this-&gt;__('Custom Linked Products');
    }
 
    public function isHidden()
    {
        return false;
    }
 
    public function getTabUrl() 
    {
        return $this-&gt;getUrl('*/*/custom', array('_current' =&gt; true));
    }
 
    public function getTabClass()
    {
        return 'ajax';
    }
 
}
</code></pre>
<p>因为我们的标签指向&lsquo;*/*/custom&rsquo;路由，所以我们需要将它添加到<strong>Mage_Adminhtml_Catalog_ProductController</strong>。以下是代码： <strong>app/code/community/Alwayly/CustomLinkedProducts/controllers/Adminhtml/Catalog/ProductController.php</strong></p>
<pre><code>&lt;?php
 
require_once(Mage::getModuleDir('controllers','Mage_Adminhtml').DS.'Catalog'.DS.'ProductController.php');
 
class Alwayly_CustomLinkedProducts_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Catalog_ProductController
{
    /**
     * Get custom products grid and serializer block
     */
    public function customAction()
    {
        $this-&gt;_initProduct();
        $this-&gt;loadLayout();
        $this-&gt;getLayout()-&gt;getBlock('catalog.product.edit.tab.custom')
            -&gt;setProductsCustom($this-&gt;getRequest()-&gt;getPost('products_custom', null));
        $this-&gt;renderLayout();
    }
 
    /**
     * Get custom products grid
     */
    public function customGridAction()
    {
        $this-&gt;_initProduct();
        $this-&gt;loadLayout();
        $this-&gt;getLayout()-&gt;getBlock('catalog.product.edit.tab.custom')
            -&gt;setProductsRelated($this-&gt;getRequest()-&gt;getPost('products_custom', null));
        $this-&gt;renderLayout();
    }
 
}
</code></pre>
<p>为了将我们的新标签添加到后台，也为了<strong>getBlock(&lsquo;catalog.product.edit.tab.custom&rsquo;)</strong>方法能作用于<strong>customAction()</strong>和<strong>customGridAction()。</strong>我们需要在我们的布局里添加一点XML代码。</p>
<pre><code>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
&lt;layout&gt;
 
    &lt;adminhtml_catalog_product_edit&gt;
        &lt;reference name="product_tabs"&gt;
            &lt;action method="addTab"&gt;
                &lt;name&gt;custom&lt;/name&gt;
                &lt;block&gt;alwayly_customlinkedproducts/adminhtml_catalog_product_edit_tab&lt;/block&gt;
           &lt;/action&gt;
        &lt;/reference&gt;
    &lt;/adminhtml_catalog_product_edit&gt;
 
    &lt;adminhtml_catalog_product_custom&gt;
       &lt;block type="core/text_list" name="root" output="toHtml"&gt;
            &lt;block type="alwayly_customlinkedproducts/adminhtml_catalog_product_edit_tab_custom" name="catalog.product.edit.tab.custom"/&gt;
            &lt;block type="adminhtml/widget_grid_serializer" name="custom_grid_serializer"&gt;
                &lt;reference name="custom_grid_serializer"&gt;
                    &lt;action method="initSerializerBlock"&gt;
                        &lt;grid_block_name&gt;catalog.product.edit.tab.custom&lt;/grid_block_name&gt;
                        &lt;data_callback&gt;getSelectedCustomProducts&lt;/data_callback&gt;
                        &lt;hidden_input_name&gt;links[custom]products_custom</code></pre>
<p>接着我们要为我们的自定义产品关系标签创建一个网格，让它可以在后台显示。这有大量的代码，但大部分都是些基础的代码。唯一你所要注意的是在<strong>_prepareCollection()</strong>功能中使用<strong>useCustomLinks()。</strong>下面是代码：</p>
<pre><code>
&lt;?php

class Alwayly_CustomLinkedProducts_Block_Adminhtml_Catalog_Product_Edit_Tab_Custom extends Mage_Adminhtml_Block_Widget_Grid
{
    /**
     * Set grid params
     *
     */
    public function __construct()
    {
        parent::__construct();
        $this-&gt;setId('custom_product_grid');
        $this-&gt;setDefaultSort('entity_id');
        $this-&gt;setUseAjax(true);
        if ($this-&gt;_getProduct()-&gt;getId()) {
            $this-&gt;setDefaultFilter(array('in_products' =&gt; 1));
        }
        if ($this-&gt;isReadonly()) {
            $this-&gt;setFilterVisibility(false);
        }
    }
    /**
     * Retirve currently edited product model
     *
     * @return Mage_Catalog_Model_Product
     */
    protected function _getProduct()
    {
        return Mage::registry('current_product');
    }
    /**
     * Add filter
     *
     * @param object $column
     * @return Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Custom
     */
    protected function _addColumnFilterToCollection($column)
    {
        // Set custom filter for in product flag
        if ($column-&gt;getId() == 'in_products') {
            $productIds = $this-&gt;_getSelectedProducts();
            if (empty($productIds)) {
                $productIds = 0;
            }
            if ($column-&gt;getFilter()-&gt;getValue()) {
                $this-&gt;getCollection()-&gt;addFieldToFilter('entity_id', array('in' =&gt; $productIds));
            } else {
                if($productIds) {
                    $this-&gt;getCollection()-&gt;addFieldToFilter('entity_id', array('nin' =&gt; $productIds));
                }
            }
        } else {
            parent::_addColumnFilterToCollection($column);
        }
        return $this;
    }
    /**
     * Prepare collection
     *
     * @return Mage_Adminhtml_Block_Widget_Grid
     */
    protected function _prepareCollection()
    {
        $collection = Mage::getModel('catalog/product_link')-&gt;useCustomLinks()
            -&gt;getProductCollection()
            -&gt;setProduct($this-&gt;_getProduct())
            -&gt;addAttributeToSelect('*');
        if ($this-&gt;isReadonly()) {
            $productIds = $this-&gt;_getSelectedProducts();
            if (empty($productIds)) {
                $productIds = array(0);
            }
            $collection-&gt;addFieldToFilter('entity_id', array('in' =&gt; $productIds));
        }
        $this-&gt;setCollection($collection);
        return parent::_prepareCollection();
    }
    /**
     * Checks when this block is readonly
     *
     * @return boolean
     */
    public function isReadonly()
    {
        return $this-&gt;_getProduct()-&gt;getCustomReadonly();
    }
    /**
     * Add columns to grid
     *
     * @return Mage_Adminhtml_Block_Widget_Grid
     */
    protected function _prepareColumns()
    {
        if (!$this-&gt;isReadonly()) {
            $this-&gt;addColumn('in_products', array(
                'header_css_class'  =&gt; 'a-center',
                'type'              =&gt; 'checkbox',
                'name'              =&gt; 'in_products',
                'values'            =&gt; $this-&gt;_getSelectedProducts(),
                'align'             =&gt; 'center',
                'index'             =&gt; 'entity_id'
            ));
        }
        $this-&gt;addColumn('entity_id', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('ID'),
            'sortable'  =&gt; true,
            'width'     =&gt; 60,
            'index'     =&gt; 'entity_id'
        ));
        $this-&gt;addColumn('name', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Name'),
            'index'     =&gt; 'name'
        ));
        $this-&gt;addColumn('type', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Type'),
            'width'     =&gt; 100,
            'index'     =&gt; 'type_id',
            'type'      =&gt; 'options',
            'options'   =&gt; Mage::getSingleton('catalog/product_type')-&gt;getOptionArray(),
        ));
        $sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
            -&gt;setEntityTypeFilter(Mage::getModel('catalog/product')-&gt;getResource()-&gt;getTypeId())
            -&gt;load()
            -&gt;toOptionHash();
        $this-&gt;addColumn('set_name', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Attrib. Set Name'),
            'width'     =&gt; 130,
            'index'     =&gt; 'attribute_set_id',
            'type'      =&gt; 'options',
            'options'   =&gt; $sets,
        ));
        $this-&gt;addColumn('status', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Status'),
            'width'     =&gt; 90,
            'index'     =&gt; 'status',
            'type'      =&gt; 'options',
            'options'   =&gt; Mage::getSingleton('catalog/product_status')-&gt;getOptionArray(),
        ));
        $this-&gt;addColumn('visibility', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('Visibility'),
            'width'     =&gt; 90,
            'index'     =&gt; 'visibility',
            'type'      =&gt; 'options',
            'options'   =&gt; Mage::getSingleton('catalog/product_visibility')-&gt;getOptionArray(),
        ));
        $this-&gt;addColumn('sku', array(
            'header'    =&gt; Mage::helper('catalog')-&gt;__('SKU'),
            'width'     =&gt; 80,
            'index'     =&gt; 'sku'
        ));
        $this-&gt;addColumn('price', array(
            'header'        =&gt; Mage::helper('catalog')-&gt;__('Price'),
            'type'          =&gt; 'currency',
            'currency_code' =&gt; (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
            'index'         =&gt; 'price'
        ));
        $this-&gt;addColumn('position', array(
            'header'            =&gt; Mage::helper('catalog')-&gt;__('Position'),
            'name'              =&gt; 'position',
            'type'              =&gt; 'number',
            'validate_class'    =&gt; 'validate-number',
            'index'             =&gt; 'position',
            'width'             =&gt; 60,
            'editable'          =&gt; !$this-&gt;_getProduct()-&gt;getCustomReadonly(),
            'edit_only'         =&gt; !$this-&gt;_getProduct()-&gt;getId()
        ));
        return parent::_prepareColumns();
    }
    /**
     * Rerieve grid URL
     *
     * @return string
     */
    public function getGridUrl()
    {
        return $this-&gt;getData('grid_url')
            ? $this-&gt;getData('grid_url')
            : $this-&gt;getUrl('*/*/customGrid', array('_current' =&gt; true));
    }
    /**
     * Retrieve selected custom products
     *
     * @return array
     */
    protected function _getSelectedProducts()
    {
        $products = $this-&gt;getProductsCustom();
        if (!is_array($products)) {
            $products = array_keys($this-&gt;getSelectedCustomProducts());
        }
        return $products;
    }
    /**
     * Retrieve custom products
     *
     * @return array
     */
    public function getSelectedCustomProducts()
    {
        $products = array();
        foreach (Mage::registry('current_product')-&gt;getCustomProducts() as $product) {
            $products[$product-&gt;getId()] = array('position' =&gt; $product-&gt;getPosition());
        }
        return $products;
    }
}
</code></pre>
<p>Magento后台中管理自定义产品关系的界面是这样的：</p>
<p><img style="margin: 0 auto;" alt="magento自定义产品关系后台" src="http://7xjryy.com1.z0.glb.clouddn.com/inchoo-customlinkedproducts-admin-600x418.png" height="418" width="600" /></p>
<h2>后端支持代码</h2>
<p>正如你注意到的，<strong>useCustomLinks()</strong>方法在<strong>catalog/product_link</strong>模型中是不存在的。因此，我们需要重写这个模型来添加我们自定义产品关系的功能。</p>
<p><strong>app/code/community/Alwayly/CustomLinkedProducts/Model/Catalog/Product/Link.php</strong></p>
<pre><code>
&lt;?php
 
class Alwayly_CustomLinkedProducts_Model_Catalog_Product_Link extends Mage_Catalog_Model_Product_Link
{
    const LINK_TYPE_CUSTOM   = 6;
 
    /**
     * @return Mage_Catalog_Model_Product_Link
     */
    public function useCustomLinks()
    {
        $this-&gt;setLinkTypeId(self::LINK_TYPE_CUSTOM);
        return $this;
    }
 
    /**
     * Save data for product relations
     *
     * @param   Mage_Catalog_Model_Product $product
     * @return  Mage_Catalog_Model_Product_Link
     */
    public function saveProductRelations($product)
    {
        parent::saveProductRelations($product);
 
        $data = $product-&gt;getCustomLinkData();
        if (!is_null($data)) {
            $this-&gt;_getResource()-&gt;saveProductLinks($product, $data, self::LINK_TYPE_CUSTOM);
        }
 
    }
}
</code></pre>
<p>如果你想要在同一个Magento项目中再添加一个自定义关系，那么你需要增加<strong>LINK_TYPE_CUSTOM</strong>类常量来避免冲突。现在，你也许注意到<strong>catalog/product</strong>中没有<strong>getCustomLinkData()</strong>功能。别怕，下面这段代码能解决这个问题：</p>
<p><strong>app/code/community/Alwayly/CustomLinkedProducts/Model/Catalog/Product.php</strong></p>
<pre><code>
&lt;?php
 
class Alwayly_CustomLinkedProducts_Model_Catalog_Product extends Mage_Catalog_Model_Product
{
    /**
     * Retrieve array of custom products
     *
     * @return array
     */
    public function getCustomProducts()
    {
        if (!$this-&gt;hasCustomProducts()) {
            $products = array();
            $collection = $this-&gt;getCustomProductCollection();
            foreach ($collection as $product) {
                $products[] = $product;
            }
            $this-&gt;setCustomProducts($products);
        }
        return $this-&gt;getData('custom_products');
    }
 
    /**
     * Retrieve custom products identifiers
     *
     * @return array
     */
    public function getCustomProductIds()
    {
        if (!$this-&gt;hasCustomProductIds()) {
            $ids = array();
            foreach ($this-&gt;getCustomProducts() as $product) {
                $ids[] = $product-&gt;getId();
            }
            $this-&gt;setCustomProductIds($ids);
        }
        return $this-&gt;getData('custom_product_ids');
    }
 
    /**
     * Retrieve collection custom product
     *
     * @return Mage_Catalog_Model_Resource_Product_Link_Product_Collection
     */
    public function getCustomProductCollection()
    {
        $collection = $this-&gt;getLinkInstance()-&gt;useCustomLinks()
            -&gt;getProductCollection()
            -&gt;setIsStrongMode();
        $collection-&gt;setProduct($this);
        return $collection;
    }
 
    /**
     * Retrieve collection custom link
     *
     * @return Mage_Catalog_Model_Resource_Product_Link_Collection
     */
    public function getCustomLinkCollection()
    {
        $collection = $this-&gt;getLinkInstance()-&gt;useCustomLinks()
            -&gt;getLinkCollection();
        $collection-&gt;setProduct($this);
        $collection-&gt;addLinkTypeIdFilter();
        $collection-&gt;addProductIdFilter();
        $collection-&gt;joinAttributes();
        return $collection;
    }
 
}
</code></pre>
<p>还有一件重要的事情要完成：保存我们的产品关系并让它作用于产品。我们需要粘贴<strong>catalog_product_prepare_save</strong>和<strong>catalog_model_product_duplicate</strong>事件。下面是回调了这些事件的观察员类。</p>
<pre><code>
&lt;?php
 
class Alwayly_CustomLinkedProducts_Model_Observer extends Varien_Object
{
    public function catalogProductPrepareSave($observer)
    {
        $event = $observer-&gt;getEvent();
 
        $product = $event-&gt;getProduct();
        $request = $event-&gt;getRequest();
 
        $links = $request-&gt;getPost('links');
        if (isset($links['custom']) &amp;&amp; !$product-&gt;getCustomReadonly()) {
            $product-&gt;setCustomLinkData(Mage::helper('adminhtml/js')-&gt;decodeGridSerializedInput($links['custom']));
        }
    }
 
    public function catalogModelProductDuplicate($observer)
    {
        $event = $observer-&gt;getEvent();
 
        $currentProduct = $event-&gt;getCurrentProduct();
        $newProduct = $event-&gt;getNewProduct();
 
        $data = array();
        $currentProduct-&gt;getLinkInstance()-&gt;useCustomLinks();
        $attributes = array();
        foreach ($currentProduct-&gt;getLinkInstance()-&gt;getAttributes() as $_attribute) {
            if (isset($_attribute['code'])) {
                $attributes[] = $_attribute['code'];
            }
        }
        foreach ($currentProduct-&gt;getCustomLinkCollection() as $_link) {
            $data[$_link-&gt;getLinkedProductId()] = $_link-&gt;toArray($attributes);
        }
        $newProduct-&gt;setCustomLinkData($data);
    }
 
}
</code></pre>
<h2>前台界面</h2>
<p>为了在Magento前端展示我们自定义的产品关系，我把<strong>Magento&rsquo;s related products</strong>块及相关模板文件复制到<strong>alwayly_customrelatedproducts/catalog_product_list_custom</strong>块。我们复制的相关产品块将使用我们定义的产品关系。下面是前端显示效果：</p>
<p><img alt="magento自定义产品关系前台" src="http://7xjryy.com1.z0.glb.clouddn.com/inchoo-customlinkedproducts-frontend-600x417.png" height="417" width="600" /></p>
<p>希望能对你的项目有所帮助。</p>]]></description>
      <pubDate>Wed, 26 Aug 2015 03:19:48 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento中列出特卖产品的方法]]></title>
      <link>https://www.360magento.com/blog/onsale-master/</link>
      <description><![CDATA[<p><img alt="magento特价产品展示" src="http://7xjryy.com1.z0.glb.clouddn.com/onsale_featured2.png" height="210" width="609" /></p>
<p>有些客户想要在首页显示特卖产品，或者有时想要在某个分类中筛选特卖产品。在这篇magento教程中，我将写到两种列出特卖产品的方法：</p>
<ul>
<li>Magento首页作为列表显示；</li>
<li>在产品列表页通过筛选器显示；</li>
</ul>
<p>让我们开始吧！</p>
<h2>静态CMS页面</h2>
<p>使用后台管理员上传一个.phtml文件是一个将特卖产品显示在某个页面的快速方法。用这个方法你将不能使用分页和导航。如果你喜欢这些功 能，我推荐这篇文章的第二部分。</p>
<p>用以下内容创建一个新的CMS page</p>
<pre><span>{</span>{block type="catalog/product_list" template="inchoo/onsale/sale.phtml"}}<br /><br /></pre>
<p>还有一个排列你产品的模版</p>
<p><strong>app/design/frontend/default/YOUR_THEME/template/alwayly/onsale/sale.phtml</strong></p>
<pre><code>&lt;?php
    $_productCollection = Mage::getModel('catalog/product')-&gt;getCollection();
    $_productCollection-&gt;addAttributeToSelect(array(
                                   'image',
                                   'name',
                                   'short_description'
                                              ))
                        -&gt;addFieldToFilter('visibility', array(
                                    Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
                                    Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
                            )) //showing just products visible in catalog or both search and catalog
                        -&gt;addFinalPrice()
//                        -&gt;addAttributeToSort('price', 'asc') //in case we would like to sort products by price
                        -&gt;getSelect()
                        -&gt;where('price_index.final_price &lt; price_index.price')
//                        -&gt;limit(30) //we specify how many products we want to show on this page
//                        -&gt;order(new Zend_Db_Expr('RAND()')) //in case we would like to sort products randomly
                        ;

    Mage::getModel('review/review')-&gt;appendSummary($_productCollection);
    $_helper = $this-&gt;helper('catalog/output');
?&gt;

&lt;?php if(!$_productCollection-&gt;count()): ?&gt;
    &lt;p class="note-msg"&gt;&lt;?php echo $this-&gt;__('There are no products matching the selection.') ?&gt;&lt;/p&gt;
&lt;?php else: ?&gt;
    &lt;div class="category-products"&gt;
        &lt;?php // Grid Mode ?&gt;
        &lt;?php $_collectionSize = $_productCollection-&gt;count() ?&gt;
        &lt;?php $_columnCount = $this-&gt;getColumnCount(); ?&gt;
        &lt;?php $i=0; foreach ($_productCollection as $_product): ?&gt;
        &lt;?php if ($i++%$_columnCount==0): ?&gt;
            &lt;ul class="products-grid" style="padding:0; list-style: none"&gt;
        &lt;?php endif ?&gt;
            &lt;li class="item&lt;?php if(($i-1)%$_columnCount==0): ?&gt; first&lt;?php elseif($i%$_columnCount==0): ?&gt; 

last&lt;?php endif; ?&gt;"&gt;
                &lt;a href="&lt;?php echo $_product-&gt;getProductUrl() ?&gt;" title="&lt;?php echo $this-&gt;stripTags($this-

&gt;getImageLabel($_product, 'small_image'), null, true) ?&gt;" class="product-image"&gt;&lt;img src="&lt;?php echo $_product-

&gt;getImageUrl(); ?&gt;" width="135" height="135" alt="&lt;?php echo $this-&gt;stripTags($this-&gt;getImageLabel($_product, 

'small_image'), null, true) ?&gt;" /&gt;&lt;/a&gt;
                &lt;h2 class="product-name"&gt;&lt;a href="&lt;?php echo $_product-&gt;getProductUrl() ?&gt;" title="&lt;?php 

echo $this-&gt;stripTags($_product-&gt;getName(), null, true) ?&gt;"&gt;&lt;?php echo $_helper-&gt;productAttribute($_product, 

$_product-&gt;getName(), 'name') ?&gt;&lt;/a&gt;&lt;/h2&gt;
                &lt;?php if($_product-&gt;getRatingSummary()): ?&gt;
                    &lt;?php echo $this-&gt;getReviewsSummaryHtml($_product, 'short') ?&gt;
                &lt;?php endif; ?&gt;
                &lt;?php echo $this-&gt;getPriceHtml($_product, true) ?&gt;
                &lt;div class="actions"&gt;
                    &lt;?php if($_product-&gt;isSaleable()): ?&gt;
                        &lt;button type="button" title="&lt;?php echo $this-&gt;__('Add to Cart') ?&gt;" class="button btn-

cart" onclick="setLocation('&lt;?php echo $this-&gt;getAddToCartUrl($_product) ?&gt;')"&gt;&lt;span&gt;&lt;span&gt;&lt;?php 

echo $this-&gt;__('Add to Cart') ?&gt;&lt;/span&gt;&lt;/span&gt;&lt;/button&gt;
                    &lt;?php else: ?&gt;
                        &lt;p class="availability out-of-stock"&gt;&lt;span&gt;&lt;?php echo $this-&gt;__('Out of stock') ?

&gt;&lt;/span&gt;&lt;/p&gt;
                    &lt;?php endif; ?&gt;
                    &lt;ul class="add-to-links"&gt;
                        &lt;?php if ($this-&gt;helper('wishlist')-&gt;isAllow()) : ?&gt;
                            &lt;li&gt;&lt;a href="&lt;?php echo $this-&gt;helper('wishlist')-&gt;getAddUrl($_product) ?&gt;" 

class="link-wishlist"&gt;&lt;?php echo $this-&gt;__('Add to Wishlist') ?&gt;&lt;/a&gt;&lt;/li&gt;
                        &lt;?php endif; ?&gt;
                        &lt;?php if($_compareUrl=$this-&gt;getAddToCompareUrl($_product)): ?&gt;
                            &lt;li&gt;&lt;span class="separator"&gt;|&lt;/span&gt; &lt;a href="&lt;?php echo $_compareUrl ?

&gt;" class="link-compare"&gt;&lt;?php echo $this-&gt;__('Add to Compare') ?&gt;&lt;/a&gt;&lt;/li&gt;
                        &lt;?php endif; ?&gt;
                    &lt;/ul&gt;
                &lt;/div&gt;
            &lt;/li&gt;
            &lt;?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?&gt;
            &lt;/ul&gt;
        &lt;?php endif ?&gt;
        &lt;?php endforeach ?&gt;
        &lt;script type="text/javascript"&gt;decorateGeneric($$('ul.products-grid'), 

['odd','even','first','last'])&lt;/script&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;</code></pre>
<p>完成！尝试一下，然后访问你的CMS页面。你将看到带有特价的产品以列表的形式显示出来，就像这样：</p>
<p><img alt="特卖" src="http://7xjryy.com1.z0.glb.clouddn.com/onsale1-600x579.png" height="579px" width="600px" /></p>
<p>修改一下以后，你也可以以网格的形式展示产品。</p>
<h2>产品列表中的筛选器</h2>
<p>一个集合在被读入模版前，Magento会使用筛选器并读取到分层导航。这就是我们要重写<strong> _getProductCollection</strong>方法的原 因，这样我们就能在集合被读取前使用自定义的筛选器。让我们扩展<strong>Mage_Catalog_Product_List</strong>类和渲染我们的块来替换分 类列表中默认的筛选器。</p>
<p>让我们注册这个模型。根据作用，我们给它命名"Alwayly/Onsale"</p>
<p><strong>app/etc/modules/Alwayly_Onsale.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Onsale&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/Alwayly_Onsale&gt;
    &lt;/modules&gt;
&lt;/config&gt;
</code></pre>
<p>接着配置我们的模型。我们将用到块(block)，助手(helper)并对我们模版的布局进行一点修改。</p>
<p><strong>app/code/local/Inchoo/Onsale/etc/config.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Onsale&gt;
            &lt;version&gt;1.0.0.3&lt;/version&gt;
        &lt;/Alwayly_Onsale&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;alwayly_onsale&gt;
                &lt;class&gt;Alwayly_Onsale_Block&lt;/class&gt;
            &lt;/alwayly_onsale&gt;
        &lt;/blocks&gt;
        &lt;helpers&gt;
            &lt;alwayly_onsale&gt;
                &lt;class&gt;Alwayly_Onsale_Helper&lt;/class&gt;
            &lt;/alwayly_onsale&gt;
        &lt;/helpers&gt;
    &lt;/global&gt;
    &lt;frontend&gt;
        &lt;layout&gt;
            &lt;updates&gt;
                &lt;onsale&gt;
                    &lt;file&gt;alwayly/onsale.xml&lt;/file&gt;
                &lt;/onsale&gt;
            &lt;/updates&gt;
        &lt;/layout&gt;
    &lt;/frontend&gt;
&lt;/config&gt;
</code></pre>
<p>现在，注册一个包含<strong>getOnSaleUrl</strong>和<strong>getNotOnSaleUrl</strong>方法的助手。这两个方法将被用来获取我们复选框 中链接的地址。我们将添加一个新的变量-"Sale"到网址。当sale等于1的时候，我们将显示特卖的产品，如果没有被设置就会显示这个类中的所 有产品。</p>
<p><strong>app/code/local/Inchoo/Onsale/Helper/Data.php</strong></p>
<pre>&lt;?php
class Alwayly_Onsale_Helper_Data extends Mage_Core_Helper_Abstract
{
    public function getOnSaleUrl()
    {
        $url = Mage::getUrl('', array(
            '_current' =&gt; true,
            '_use_rewrite' =&gt; true,
            '_query' =&gt; array(
                'sale' =&gt; 1,
                'p' =&gt; NULL
            )
        ));
 
        return $url;
    }
 
    public function getNotOnSaleUrl()
    {
        $url = Mage::getUrl('', array(
            '_current' =&gt; true,
            '_use_rewrite' =&gt; true,
            '_query' =&gt; array(
                'sale' =&gt; NULL,
                'p' =&gt; NULL
            )
        ));
 
        return $url;
    }
}
</pre>
<p>接着让我们创建我们的块。我们将从<strong>Mage_Catalog_Block_Product_List</strong>扩展我们的类并添加 <strong>_getProductCollection</strong>方法。</p>
<p><strong>app/code/local/Alwayly/Onsale/Block/Catalog/Product/List.php</strong></p>
<pre><code>
&lt;?php
class Alwayly_Onsale_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
{
    protected function _getProductCollection()
    {
        if (is_null($this-&gt;_productCollection)) {
            $layer = $this-&gt;getLayer();
            /* @var $layer Mage_Catalog_Model_Layer */
            if ($this-&gt;getShowRootCategory()) {
                $this-&gt;setCategoryId(Mage::app()-&gt;getStore()-&gt;getRootCategoryId());
            }
 
            // if this is a product view page
            if (Mage::registry('product')) {
                // get collection of categories this product is associated with
                $categories = Mage::registry('product')-&gt;getCategoryCollection()
                                  -&gt;setPage(1, 1)
                                  -&gt;load();
                // if the product is associated with any category
                if ($categories-&gt;count()) {
                    // show products from this category
                    $this-&gt;setCategoryId(current($categories-&gt;getIterator()));
                }
            }
 
            $origCategory = null;
            if ($this-&gt;getCategoryId()) {
                $category = Mage::getModel('catalog/category')-&gt;load($this-&gt;getCategoryId());
                if ($category-&gt;getId()) {
                    $origCategory = $layer-&gt;getCurrentCategory();
                    $layer-&gt;setCurrentCategory($category);
                    $this-&gt;addModelTags($category);
                }
            }
            $this-&gt;_productCollection = $layer-&gt;getProductCollection();
 
//                inchoo start
            $param = Mage::app()-&gt;getRequest()-&gt;getParam('sale');
            if(isset($param) &amp;&amp; $param==='1'){
                $this-&gt;_productCollection
                    -&gt;addFinalPrice()
                    -&gt;getSelect()
                    -&gt;where('price_index.final_price &lt; price_index.price');
            }
//                inchoo end
 
            $this-&gt;prepareSortableFieldsByCategory($layer-&gt;getCurrentCategory());
 
            if ($origCategory) {
                $layer-&gt;setCurrentCategory($origCategory);
            }
        }
 
        return $this-&gt;_productCollection;
//            return parent::_getProductCollection();
    }
}
<code></code></code></pre>
<p>我们还要在工具栏中添加一个复选框来让顾客筛选特卖产品。打开我们的<strong>toolbar.phtml</strong>文件。</p>
<p><strong>app/design/frontend/default/YOUR_THEME/template/alwayly/onsale/toolbar.phtml</strong></p>
<pre><code>
&lt;!--alwayly start--&gt;
&lt;?php $helper = Mage::helper('alwayly_onsale'); ?&gt;
&lt;!--alwayly end--&gt;
&lt;?php if($this-&gt;getCollection()-&gt;getSize()): ?&gt;
    &lt;div class="toolbar"&gt;
        &lt;div class="pager"&gt;
            &lt;p class="amount"&gt;
                &lt;?php if($this-&gt;getLastPageNum()&gt;1): ?&gt;
                    &lt;?php echo $this-&gt;__('Items %s to %s of %s total', $this-&gt;getFirstNum(), $this-&gt;getLastNum(), 

$this-&gt;getTotalNum()) ?&gt;
                &lt;?php else: ?&gt;
                    <strong>&lt;?php echo $this-&gt;__('%s Item(s)', $this-&gt;getTotalNum()) ?&gt;&lt;/strong&gt;
                &lt;?php endif; ?&gt;
            &lt;/p&gt;
 
            &lt;div class="limiter"&gt;
                &lt;label&gt;&lt;?php echo $this-&gt;__('Show') ?&gt;&lt;/label&gt;
                &lt;select onchange="setLocation(this.value)"&gt;
                    &lt;?php foreach ($this-&gt;getAvailableLimit() as  $_key=&gt;$_limit): ?&gt;
                        &lt;option value="&lt;?php echo $this-&gt;getLimitUrl($_key) ?&gt;"&lt;?php if($this-&gt;isLimitCurrent

($_key)): ?&gt; selected="selected"&lt;?php endif ?&gt;&gt;
                            &lt;?php echo $_limit ?&gt;
                        &lt;/option&gt;
                    &lt;?php endforeach; ?&gt;
                &lt;/select&gt;&lt;?php echo $this-&gt;__('per page') ?&gt;
            &lt;/div&gt;
 
            &lt;?php echo $this-&gt;getPagerHtml() ?&gt;
 
       &lt;/div&gt;
 
        &lt;?php if( $this-&gt;isExpanded() ): ?&gt;
            &lt;div class="sorter"&gt;
                &lt;?php if( $this-&gt;isEnabledViewSwitcher() ): ?&gt;
                    &lt;p class="view-mode"&gt;
                        &lt;?php $_modes = $this-&gt;getModes(); ?&gt;
                        &lt;?php if($_modes &amp;&amp; count($_modes)&gt;1): ?&gt;
                            &lt;label&gt;&lt;?php echo $this-&gt;__('View as') ?&gt;:&lt;/label&gt;
                            &lt;?php foreach ($this-&gt;getModes() as $_code=&gt;$_label): ?&gt;
                                &lt;?php if($this-&gt;isModeActive($_code)): ?&gt;
                                    &lt;strong title="&lt;?php echo $_label ?&gt;" class="&lt;?php echo strtolower($_code); ?

&gt;"&gt;
                                    &lt;?php echo $_label ?&gt;&lt;/strong&gt;&nbsp;
                                    &lt;?php else: ?&gt;
                                    &lt;a href="&lt;?php echo $this-&gt;getModeUrl($_code) ?&gt;" title="&lt;?php echo $_label 

?&gt;" class="&lt;?php echo strtolower($_code); ?&gt;"&gt;&lt;?php echo $_label ?&gt;&nbsp;
                                &lt;?php endif; ?&gt;
                            &lt;?php endforeach; ?&gt;
                        &lt;?php endif; ?&gt;
                    &lt;/p&gt;
                &lt;?php endif; ?&gt;
 
                &lt;div class="sort-by"&gt;
                    &lt;label&gt;&lt;?php echo $this-&gt;__('Sort By') ?&gt;&lt;/label&gt;
                   &lt;select onchange="setLocation(this.value)"&gt;
                        &lt;?php foreach($this-&gt;getAvailableOrders() as $_key=&gt;$_order): ?&gt;
                            &lt;option value="&lt;?php echo $this-&gt;getOrderUrl($_key, 'asc') ?&gt;"&lt;?php if($this-

&gt;isOrderCurrent($_key)): ?&gt; selected="selected"&lt;?php endif; ?&gt;&gt;
                                &lt;?php echo $this-&gt;__($_order) ?&gt;
                            &lt;/option&gt;
                        &lt;?php endforeach; ?&gt;
                    &lt;/select&gt;
                    &lt;?php if($this-&gt;getCurrentDirection() == 'desc'): ?&gt;
                        &lt;a href="&lt;?php echo $this-&gt;getOrderUrl(null, 'asc') ?&gt;" title="&lt;?php echo $this-&gt;__

('Set Ascending Direction') ?&gt;"&gt;&lt;img src="&lt;?php echo $this-&gt;getSkinUrl('images/i_desc_arrow.gif') ?&gt;" 

alt="&lt;?php echo $this-&gt;__('Set Ascending Direction') ?&gt;" class="v-middle" /&gt;&lt;/a&gt;
                    &lt;?php else: ?&gt;
                        &lt;a href="&lt;?php echo $this-&gt;getOrderUrl(null, 'desc') ?&gt;" title="&lt;?php echo $this-&gt;__

('Set Descending Direction') ?&gt;"&gt;&lt;img src="&lt;?php echo $this-&gt;getSkinUrl('images/i_asc_arrow.gif') ?&gt;" 

alt="&lt;?php echo $this-&gt;__('Set Descending Direction') ?&gt;" class="v-middle" /&gt;&lt;/a&gt;
 
                &lt;!--alwayly start--&gt;
                        &lt;label for="sale"&gt;&lt;?php echo $this-&gt;__('On Sale') ?&gt;&lt;/label&gt;
                        &lt;input name="sale" id="sale" type="checkbox"
                            value="&lt;?php
                                $currentUrl = Mage::helper('core/url')-&gt;getCurrentUrl();
                                if($currentUrl===$helper-&gt;getOnSaleUrl()):
                                    echo $helper-&gt;getNotOnSaleUrl();
                                    echo "\"checked=\"checked";
                                else:
                                    echo $helper-&gt;getOnSaleUrl();
                                endif;
                            ?&gt;" autocomplete="off" onchange="setLocation(this.value)"/&gt;
                &lt;!--alwayly end--&gt;
                    &lt;?php endif; ?&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;?php endif; ?&gt;
    &lt;/div&gt;
&lt;?php endif ?&gt;
&lt;/strong&gt;</strong></code></pre>
<p>最后，创建我们的布局文件来让Magento来使用我们的toolbar.phtml。</p>
<p><strong>app/design/frontend/default/YOUR_THEME/layout/alwayly/onsale.xml</strong></p>
<pre><code>
&lt;?xml version="1.0"?&gt;
 
&lt;layout version="0.1.0"&gt;
    &lt;catalog_category_default&gt;
        &lt;reference name="category.products"&gt;
                &lt;block type="inchoo_onsale/catalog_product_list" name="product_list" template="catalog/product/list.phtml"&gt;
                    &lt;block type="catalog/product_list_toolbar" name="product_list_toolbar" template="inchoo/onsale/toolbar.phtml"&gt;
                        &lt;block type="page/html_pager" name="product_list_toolbar_pager"/&gt;
 
                        &lt;!-- The following code shows how to set your own pager increments --&gt;
                        &lt;!--
                            &lt;action method="setDefaultListPerPage"&gt;&lt;limit&gt;4&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="setDefaultGridPerPage"&gt;&lt;limit&gt;9&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;2&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;4&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;6&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;8&lt;/limit&gt;&lt;/action&gt;
                            &lt;action method="addPagerLimit" translate="label"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;all&lt;/limit&gt;&lt;label&gt;All&lt;/label&gt;&lt;/action&gt;
                        --&gt;
                    &lt;/block&gt;
                    &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;empty&lt;/layout&gt;&lt;count&gt;6&lt;/count&gt;&lt;/action&gt;
                    &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;one_column&lt;/layout&gt;&lt;count&gt;5&lt;/count&gt;&lt;/action&gt;
                    &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;two_columns_left&lt;/layout&gt;&lt;count&gt;4&lt;/count&gt;&lt;/action&gt;
                    &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;two_columns_right&lt;/layout&gt;&lt;count&gt;4&lt;/count&gt;&lt;/action&gt;
                    &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;three_columns&lt;/layout&gt;&lt;count&gt;3&lt;/count&gt;&lt;/action&gt;
                    &lt;action method="setToolbarBlockName"&gt;&lt;name&gt;product_list_toolbar&lt;/name&gt;&lt;/action&gt;
                &lt;/block&gt;
        &lt;/reference&gt;
    &lt;/catalog_category_default&gt;
 
    &lt;catalog_category_layered&gt;
        &lt;reference name="category.products"&gt;
            &lt;block type="inchoo_onsale/catalog_product_list" name="product_list" template="catalog/product/list.phtml"&gt;
                &lt;block type="catalog/product_list_toolbar" name="product_list_toolbar" template="inchoo/onsale/toolbar.phtml"&gt;
                    &lt;block type="page/html_pager" name="product_list_toolbar_pager"/&gt;
 
                    &lt;!-- The following code shows how to set your own pager increments --&gt;
                    &lt;!--
                        &lt;action method="setDefaultListPerPage"&gt;&lt;limit&gt;4&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="setDefaultGridPerPage"&gt;&lt;limit&gt;9&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;2&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;4&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;6&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="addPagerLimit"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;8&lt;/limit&gt;&lt;/action&gt;
                        &lt;action method="addPagerLimit" translate="label"&gt;&lt;mode&gt;list&lt;/mode&gt;&lt;limit&gt;all&lt;/limit&gt;&lt;label&gt;All&lt;/label&gt;&lt;/action&gt;
                    --&gt;
                &lt;/block&gt;
                &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;empty&lt;/layout&gt;&lt;count&gt;6&lt;/count&gt;&lt;/action&gt;
                &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;one_column&lt;/layout&gt;&lt;count&gt;5&lt;/count&gt;&lt;/action&gt;
                &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;two_columns_left&lt;/layout&gt;&lt;count&gt;4&lt;/count&gt;&lt;/action&gt;
                &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;two_columns_right&lt;/layout&gt;&lt;count&gt;4&lt;/count&gt;&lt;/action&gt;
                &lt;action method="addColumnCountLayoutDepend"&gt;&lt;layout&gt;three_columns&lt;/layout&gt;&lt;count&gt;3&lt;/count&gt;&lt;/action&gt;
                &lt;action method="setToolbarBlockName"&gt;&lt;name&gt;product_list_toolbar&lt;/name&gt;&lt;/action&gt;
            &lt;/block&gt;
        &lt;/reference&gt;
    &lt;/catalog_category_layered&gt;
&lt;/layout&gt;
</code></pre>
<p>看看效果：</p>
<p><img alt="显示结果" src="http://7xjryy.com1.z0.glb.clouddn.com/onsale21-600x487.png" height="487px" width="600px" /></p>
<p>我们注意到分层导航和分页一样工作正常。如我们所期待的一样&hellip;&hellip;</p>]]></description>
      <pubDate>Mon, 24 Aug 2015 13:46:52 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中获取指定attribute属性的产品列表]]></title>
      <link>https://www.360magento.com/blog/listing-products-by-attribute/</link>
      <description><![CDATA[<p><img alt="获取自定义属性产品的列表" src="http://7xjryy.com1.z0.glb.clouddn.com/article1.jpg" height="100" width="620" /></p>
<p>这是一个向magento初学者一步一步展示magento如何按属性来列出产品排序的教程. <br />我将以Magento已经创建好的新产品和促销产品功能开始. <br />以下所有说明都是针对Magento1.9.0.0的</p>
<h2>列出带有属性New的产品列表</h2>
<p>在Magento后台管理面板,在Products management里面的Manage products 你能找到设置和定义新的属性。这篇教程中，我将使用名字叫Homepage的CMS Page来作为示例<br />在CMS Page layout -&gt; Layout Update XML里面已经被原有的cms page占据着:</p>
<pre>&lt;reference name="content"&gt;
 
&lt;block type="core/template" name="home" as="home" template="page/home.phtml" &gt;
 
&lt;/block&gt;&lt;/reference&gt;

</pre>
<ol>
<li>首先，通过设置&ldquo;Set Product as New from Date&rdquo;和&ldquo;Set Product as New to Date&rdquo;来定义产品为新产品.</li>
<li>Magento默认已经指定了新产品列表的模板，你可以在app/design/frontend/pro/YourTheme/template/catalog/product/new.phtml这个路径找到它.</li>
<li>在xml布局文件中通过block块结构体来定义你想要在哪里显示新产品模板(new.phtml).</li>
<li>插入新的block块</li>
</ol>
<pre class="ish"><code class="language-html">&lt;reference name="content"&gt;
&nbsp;
&lt;block type="catalog/product_new" name="home.catalog.product.new" 	alias="product_new" as="newproducts"  	after="cms_page" template="catalog/product/new.phtml"&gt;
&lt;action method="setProductsCount"&gt;&lt;count&gt;8&lt;/count&gt;&lt;/action&gt;
&lt;action method="setColumnCount"&gt;&lt;count&gt;4&lt;/count&gt;&lt;/action&gt;
&lt;/block&gt;
&nbsp;
&lt;/reference&gt;</code></pre>
<ol>
<li>指定你想要在哪展示带有新产品模板的块（在哪里调用这个block块）
<pre class="ish"><code class="language-html">&lt; ?php echo $this-&gt;getChildHtml('newproducts') ?&gt;</code></pre>
<p>在我们的案例中,我们把Homepage模板定位于template/page/html/home.phtml</p>
</li>
<li>这就是所有你需要做的.</li>
</ol>
<p>注意:<br /> Content 是一个core/text_list类型 并且他可以支持嵌套所有的block类型.</p>
<p>你可以设置你想要显示多少个产品在magento的前台:</p>
<pre class="ish"><code class="language-html">&lt;action method="setProductsCount"&gt;&lt;count&gt;8&lt;/count&gt;&lt;/action&gt;</code></pre>
<p>和多少列:</p>
<pre class="ish"><code class="language-html">&lt;action method="setColumnCount"&gt;&lt;count&gt;4&lt;/count&gt;4&lt;/action&gt;</code></pre>
<h2>列出所有带有Promotion属性的产品列表</h2>
<p>列出所有带有Promotion属性的产品列表方法在magento中已经存在，这与列出新产品稍微有点不同</p>
<ol>
<li>首先我们需要在Magento后台为产品创建一个属性</li>
<li>创建一个名为&ldquo;Promotion&rdquo;的dropdown (Yes/No)类型的属性</li>
<li>如果你想为所有产品添加属性，那么需要将属性关联到default属性组</li>
<li>复制template/catalog/product/list.phtml文件到同级目录下，改名为promotion.phtml</li>
<li>在XML布局文件中定义block块的位置。在我们的案例中是CMS page下的&ldquo;Homepage&rdquo;&nbsp;
<pre class="ish"><code class="language-html">&lt;block type="catalog/product_list_promotion" name="promotion" template="catalog/product/promotion.phtml" /&gt;</code></pre>
</li>
<li>指定你想要在哪展示带有promotion.phtml模板的块在哪里调用这个block块）
<pre class="ish"><code class="language-html">&lt; ?php echo $this-&gt;getChildHtml('promotion') ?&gt;</code></pre>
<p>在我们的案例中,我们把Homepage模板定位于template/page/html/home.phtml</p>
</li>
</ol>
<h2>列出带有自定义模板和带有dropdown Yes/No类型属性的产品列表</h2>
<p>在这个案例中,我们将用magento的Promotion product方法来修改它.</p>
<ol>
<li>创建新的目录文件app/code/local/Mage/Catalog/Block/Product/List/Example.php</li>
<li>复制app/code/core/Mage/Catalog/Block/Product/List/Promotion.php 并粘贴到Example.php</li>
<li>改变Example.php:</li>
</ol>
<p>&nbsp;</p>
<pre class="ish"><code class="language-html">class Mage_Catalog_Block_Product_List_Promotion extends Mage_Catalog_Block_Product_List</code></pre>
<p>到:</p>
<pre class="ish"><code class="language-html">class Mage_Catalog_Block_Product_List_Example extends Mage_Catalog_Block_Product_List</code></pre>
<p>也要改变:</p>
<pre class="ish"><code class="language-html">$collection-&gt;addAttributeToFilter('promotion', 1)</code></pre>
<p>到:</p>
<pre class="ish"><code class="language-html">$collection-&gt;addAttributeToFilter('example', 1)</code></pre>
<p>之后按照我之前写过Promotion属性的步骤执行。<br />希望这篇教程能对你有所帮助。</p>]]></description>
      <pubDate>Sat, 22 Aug 2015 13:32:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中通过邮件提醒客户下第一个订单]]></title>
      <link>https://www.360magento.com/blog/remind-customers-place-order/</link>
      <description><![CDATA[<img class="attachment-full wp-post-image" alt="Inchoo OrderReminder" src="http://7xjryy.com1.z0.glb.clouddn.com/alwayly-orderreminder.jpg" height="240" width="609" /> <p>在magento建设的网店中，有时客户创建账户后需要一些鼓励来拍下他们的第一个宝贝，这样的事情原因有很多，例如，你的客户忘记了你的网站的书签，因此他们想再次找到你的网站就很困难。在本文中我将介绍一个分厂好的方法，着眼于保持客户订单数量和给客户发送第一封订单邮件提醒，你可以用我们的免费插件来实现<strong>Alwayly_OrderReminder</strong></p>
<h2>magento 订单提醒插件介绍</h2>
<p>至于Alwayly_OrderReminder插件的源码，可以去magento插件中心<a title="magento 订单提醒插件下载" href="https://www.360magento.com/magento-extensions.html">下载</a>，这里我只通过一些代码介绍他的功能。Alwayly_OrderReminder插件的特点有：</p>
<ul>
<li>当客户注册之后，隔了数天还没有下单，这是可以通过这个magento插件发送邮件提醒客户下单</li>
<li>可以配置发送邮件的最多数量，当发送最后一件邮件后可以采取一些措施（移动到不同的客户群或删除帐户）</li>
<li>通过magento的事务性邮件模板功能可以配置定期的和最后一封邮件的模板</li>
<li>配置magento订单提醒邮件的发送者，以及作为邮件副本或抄送发送给电子邮箱地址</li>
</ul>
<p>以下是配置选项提供的屏幕截图,z在你的magento后台System -&gt; Configuration -&gt; Sales Emails -&gt; Order Reminders里面</p>
<p><img alt="magento订单邮件提醒插件" src="http://7xjryy.com1.z0.glb.clouddn.com/orderreminder-options.jpg" height="393" width="523" /></p>
<h2>配置逻辑</h2>
<p>在本节中，我将介绍一些代码和在<a title="magento 订单提醒插件下载" href="https://www.360magento.com/magento-extensions.html">magento插件</a>Alwayly_OrderReminder背后一些基本的逻辑</p>
<p>Inchoo_OrderReminder_Model_Observer::processOrderReminders()方法是通过cron daily来出发，通过配置选项来处理客户，下面是config.xml文件的代码段用于此目的：</p>
<pre>&lt;config&gt;
    &lt;crontab&gt;
        &lt;jobs&gt;
            &lt;inchoo_orderreminder&gt;
                &lt;!-- Daily at 1 am --&gt;
                &lt;schedule&gt;&lt;cron_expr&gt;0 1 * * *&lt;/cron_expr&gt;&lt;/schedule&gt;
                &lt;run&gt;&lt;model&gt;inchoo_orderreminder/observer::processOrderReminders&lt;/model&gt;&lt;/run&gt;
            &lt;/inchoo_orderreminder&gt;
        &lt;/jobs&gt;
    &lt;/crontab&gt;
&lt;/config&gt;
</pre>
<p>触发后</p>
<p>下面是发送电子邮件的代码</p>
<pre>/**
 * Send transactional emails.
 * 
 * @param Varien_Object $customer Customer object
 * @param int $reminderLimit Number of days for last reminder
 * @param int $reminderKey Number of days since customer account was created
 * @param string $template Email template
 */
protected function _sendOrderReminderEmail(Varien_Object $customer, $reminderLimit, $reminderKey, $template)
{
    $this-&gt;_log('Preparing email...');
 
    // Get necessary vars
    $copyTo = $this-&gt;_getStoreConfigCopyTo();
    $copyMethod = $this-&gt;_getStoreConfigCopyMethod();
    $storeId = Mage::app()-&gt;getStore()-&gt;getId();
 
    // Uses code from Mage_Sales_Model_Order::sendNewOrderEmail()
    $mailer = Mage::getModel('core/email_template_mailer');
    $emailInfo = Mage::getModel('core/email_info');
    $emailInfo-&gt;addTo($customer-&gt;getEmail(), $customer-&gt;getName());
    if ($copyTo &amp;&amp; $copyMethod == 'bcc') {
        // Add bcc to customer email
        foreach ($copyTo as $email) {
            $emailInfo-&gt;addBcc($email);
 
            $this-&gt;_log(sprintf('Add %s to Bcc.', $email));
        }
    }
    $mailer-&gt;addEmailInfo($emailInfo);
 
    // Email copies are sent as separated emails if their copy method is 'copy'
    if ($copyTo &amp;&amp; $copyMethod == 'copy') {
        foreach ($copyTo as $email) {
            $emailInfo = Mage::getModel('core/email_info');
            $emailInfo-&gt;addTo($email);
            $mailer-&gt;addEmailInfo($emailInfo);
 
            $this-&gt;_log(sprintf('Will send a copy to  %s.', $email));
        }
    }
 
    // Set all required params and send emails
    $mailer-&gt;setSender($this-&gt;_getStoreConfigIdentity(), $storeId);
    $mailer-&gt;setStoreId($storeId);
    $mailer-&gt;setTemplateId($template);
    $mailer-&gt;setTemplateParams(
        array(
            // Customer object
            'customer' =&gt; $customer,
 
            // Reminder for number of days
            'reminder_days' =&gt; $reminderKey,
 
            // Last reminder number of days
            'reminder_limit' =&gt; $reminderLimit
        )
    );
 
    // Send
    $mailer-&gt;send();
 
    $this-&gt;_log('Email sent.');
}
</pre>
<p>接下来你可以学习下，也可以直接安装这个<a title="magento 订单提醒插件下载" href="https://www.360magento.com/magento-extensions.html">magento插件</a>来达到你想要的效果</p>]]></description>
      <pubDate>Fri, 21 Aug 2015 16:58:18 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何创建magento下拉式的登陆框效果]]></title>
      <link>https://www.360magento.com/blog/create-magento-dropdown-login/</link>
      <description><![CDATA[<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento在首页显示登陆注册框，创建magento下拉登陆框" src="http://7xjryy.com1.z0.glb.clouddn.com/login-form-homepage.jpg" height="240" width="609" /></div>
<p>下拉式登录在大部分商店中并不常用，但在一些情况下它会是一个很有用的用户体验功能。 在这篇教程中，我将讲解在magento中如何在几分钟内创建这么一个下拉式登录框,让用户可以不用打开另外链接页面直接登陆。</p>
<p>打开你的magento网站路径<strong>app/design/frontend/base/default/layout/customer.xml</strong> 并加入以下高亮代码</p>
<pre>&lt;customer_logged_out&gt;
	&lt;!---&lt;reference name="right"&gt;
		&lt;block type="customer/form_login" name="customer_form_mini_login" before="-" template="customer/form/mini.login.phtml"/&gt;
	&lt;/reference&gt;--&gt;
	&lt;reference name="top.links"&gt;
		&lt;action method="addLink" translate="label title" module="customer"&gt;&lt;label&gt;Log In&lt;/label&gt;&lt;url helper="customer/getLoginUrl"/&gt;&lt;title&gt;Log In&lt;/title&gt;&lt;prepare/&gt;&lt;urlParams/&gt;&lt;position&gt;100&lt;/position&gt;&lt;/action&gt;
		&lt;block type="core/template" name="customer_form_mini_login" before="-" template="customer/form/mini.login.phtml"/&gt;
	&lt;/reference&gt;
	&lt;remove name="reorder"&gt;&lt;/remove&gt;
&lt;/customer_logged_out&gt;
&lt;/pre&gt;</pre>
<p>打开你的magento网站路径&nbsp;<strong>app/design/frontend/base/default/template/page/template/links.phtml</strong>并添加一下高亮代码:</p>
<pre>&lt;?php $_links = $this-&gt;getLinks(); ?&gt;
&lt;?php if(count($_links)&gt;0): ?&gt;
&lt;ul class="links"&lt;?php if($this-&gt;getName()): ?&gt; id="&lt;?php echo $this-&gt;getName() ?&gt;"&lt;?php endif;?&gt;&gt;
    &lt;?php foreach($_links as $_link): ?&gt;
        &lt;?php if ($_link instanceof Mage_Core_Block_Abstract):?&gt;
            &lt;?php echo $_link-&gt;toHtml() ?&gt;
        &lt;?php else: ?&gt;
            &lt;li<!--?php if($_link--->getIsFirst()||$_link-&gt;getIsLast()): ?&gt; class="<!--?php if($_link--->getIsFirst()): ?&gt;first<!--?php endif; ?-->&lt;?php if($_link-&gt;getIsLast()): ?&gt; last&lt;?php endif; ?&gt;"&lt;?php endif; ?&gt; &lt;?php echo $_link-&gt;getLiParams() ?&gt;&gt;&lt;?php echo $_link-&gt;getBeforeText() ?&gt;&lt;a href="&lt;?php echo $_link-&gt;getUrl() ?&gt;" title="&lt;?php echo $_link-&gt;getTitle() ?&gt;" &lt;?php echo $_link-&gt;getAParams() ?&gt;&gt;&lt;?php echo $_link-&gt;getLabel() ?&gt;&lt;/a&gt;&lt;?php echo $_link-&gt;getAfterText() ?&gt;
                &lt;?php if($_link-&gt;getIsLast()): ?&gt;
                    &lt;?php echo $this-&gt;getChildHtml('customer_form_mini_login'); ?&gt;
                &lt;?php endif; ?&gt;
            &lt;/li&gt;
        &lt;?php endif;?&gt;
    &lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
</pre>
<p>最后打开你的magento网站路径<strong>app/design/frontend/base/default/template/customer/form/mini.login.phtml</strong> 同样的copy下面代码.</p>
<pre>&lt;style&gt;
	#dropdown
	{
		position: absolute;
		top: 70px;
		right: 20px;
		visibility: hidden;
		float:right;
	}
	.last:hover #dropdown
	{
		visibility: visible;
	}
&lt;/style&gt;
&lt;div class="block block-login" id="dropdown"&gt;
	&lt;div class="block-title"&gt;
		&lt;strong&gt;&lt;span&gt;&lt;?php echo $this-&gt;__('Login') ?&gt;&lt;/span&gt;&lt;/strong&gt;
	&lt;/div&gt;
	&lt;form action="&lt;?php echo $this-&gt;getUrl('customer/account/loginPost') ?&gt;" method="post"&gt;
		<!--?php echo $this--->getBlockHtml('formkey'); ?&gt;
		&lt;div class="block-content"&gt;
			&lt;label for="mini-login"&gt;&lt;?php echo $this-&gt;__('Email:') ?&gt;&lt;/label&gt;&lt;input type="text" name="login[username]" id="mini-login" class="input-text" /&gt;
			&lt;label for="mini-password"&gt;&lt;?php echo $this-&gt;__('Password:') ?&gt;&lt;/label&gt;&lt;input type="password" name="login[password]" id="mini-password" class="input-text" /&gt;
			&lt;div class="actions"&gt;
				&lt;button type="submit" class="button"&gt;&lt;span&gt;&lt;span&gt;&lt;?php echo $this-&gt;__('Login') ?&gt;&lt;/span&gt;&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/form&gt;
&lt;/div&gt;
</pre>
<p>就是这样！当鼠标移到头部菜单<strong>&ldquo;Log In&rdquo;</strong>上时，你的magento网站顶部登录框就会出现。</p>
<p><a href="http://7xjryy.com1.z0.glb.clouddn.com/login-dropdown-example.png"><img class="alignnone size-full wp-image-21880" alt="magento在首页显示登陆注册框，创建magento下拉登陆框" src="http://inchoo.net/wp-content/uploads/2014/11/login-dropdown-example.png" height="175" width="212" /></a></p>
<p>这里值得记下的是：我们对Magento默认的mini登陆模板文件<strong>mini.login.phtml</strong>进行了一些修改让他在首页显示。</p>
<p>我们也用core/template块代替了customer/form_login。这么做的原因是让页面标题&ldquo;Customer login&rdquo;能在所有页面显示。</p>
<p>作为使用多个块的缺点，现在我们不能使用customer/form_login块中的方法。这就是我们使用$this-&gt;getUrl(&lsquo;customer/account/loginPost&rsquo;)方法来替代$this-&gt;getPostActionUrl()的原因。</p>
<p>你有一个形式存在的表关键字也是很重要的，否则你的表格将不会得到处理。</p>
<pre>&lt;code&gt;&lt;?php echo $this-&gt;getBlockHtml('formkey'); ?&gt;&lt;/code&gt;&lt;/pre&gt;</pre>
<p>最好要说的就是让magento的前端开发者（也许就是你？）好好地利用下拉式登录。</p>]]></description>
      <pubDate>Fri, 21 Aug 2015 09:59:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[在magento的其他页面显示产品的星级评价]]></title>
      <link>https://www.360magento.com/blog/display_product_rating/</link>
      <description><![CDATA[<p>产品评论功能是Magento众多优秀特征之一。用好评论可以增加客户对你的品牌的信任，由此能显著增加你产品的销量。</p>
<p>有时，你需要在评论页的其他页面展示评价星级。这正是我将要在这篇文章中写到的。</p>
<p>下面这段代码适用于已经读取的产品（或者你知道产品的ID）&mdash;&mdash;比如在购物车中调用产品评价星级；</p>
<pre>&lt;?php
$_product = $_item-&gt;getProduct(); //get the product in cart
$storeId = Mage::app()-&gt;getStore()-&gt;getId();
$summaryData = Mage::getModel('review/review_summary')
					-&gt;setStoreId($storeId)
					-&gt;load($_product-&gt;getId());
 
if ($summaryData['rating_summary']):?&gt;
	&lt;div class="ratings"&gt;
		&lt;div class="rating-box"&gt;
			&lt;div class="rating" style="width:&lt;?php echo $summaryData['rating_summary'] ?&gt;%"&gt;&lt;/div&gt; <br />                &lt;/div&gt; <br />         &lt;/div&gt; <br />&lt;?php endif; ?&gt;</pre>
<p>如果我们访问购物车页面，我们会看到客户评价过的产品都会展示评价星级。</p>
<p><img alt="在购物车中显示产品评价星级" src="http://7xjryy.com1.z0.glb.clouddn.com/cart2.png" height="203" width="620" /></p>
<p>在$summaryData对象中,我们可以获取到这个数组的键值如下：</p>
<pre>//Entity id of a summary review
["primary_id"] =&gt; string(3) "100"
//
//Product id
["entity_pk_value"] =&gt; string(3) "119"
//
//Entity type id: 1-Product; 2-Customer; 3-Category
["entity_type"] =&gt; string(1) "1"
//
//Qty of reviews
["reviews_count"] =&gt; string(1) "2"
//
//Summarized rating: the percentage which represents number of stars, each 20% step fills up one star
["rating_summary"] =&gt; string(2) "80"
//
//Store id
["store_id"] =&gt; string(1) "1"
</pre>
<p>记住展示评价星级的&ldquo;Magento方式&rdquo;是：创建一个block或者一个有接收product ID和store ID方法的helper，然后从视图文件中返回值。</p>
<p>然而，你也可以将这段代码放入视图文件中来快速地为你的产品获取星级。</p>
<p>注意，要在以上Html 标记（7-11行）之后输出星级的值，不然的话，星级将不会显示。</p>]]></description>
      <pubDate>Wed, 19 Aug 2015 15:20:23 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中产品列表增加销量排序]]></title>
      <link>https://www.360magento.com/blog/products-by-sold/</link>
      <description><![CDATA[<p><img class="attachment-full wp-post-image" alt="magento如何按产品销售量排序" src="http://7xjryy.com1.z0.glb.clouddn.com/sort-quantity.png" height="240" width="609" /></p>
<p>Magento默认提供了一些排序选项，例如：产品位置，名字，价格。在这篇文章中你将学会让产品按照销量来排序。</p>
<p>要做到这些，我们需要重写一些Magento的核心文件。重定义核心文件并不是一个好的尝试，所以我们创建一个自己的模块来完成同样的功能并保证能升级。</p>
<p>我假设你知道如何建立你自己的模块并创建对应的文件(app/etc/modules/Alwayly_Catalog.xml),所以Magento能识别我们的模块。</p>
<p>现在，我们有了自己的模块并且已经被Magento识别，让我们创建自己的config.xml，路径为Alwayly/Catalog/etc/config.xml:</p>
<pre>&lt;config&gt;
    &lt;modules&gt;
        &lt;Alwayly_Catalog&gt;
            &lt;version&gt;0.1.0&lt;/version&gt;
        &lt;/Alwayly_Catalog&gt;
    &lt;/modules&gt;
    &lt;global&gt;
        &lt;blocks&gt;
            &lt;catalog&gt;
                &lt;rewrite&gt;
                    &lt;product_list_toolbar&gt;Alwayly_Catalog_Block_Product_List_Toolbar&lt;/product_list_toolbar&gt;
                &lt;/rewrite&gt;
            &lt;/catalog&gt;
        &lt;/blocks&gt;
        &lt;models&gt;
            &lt;catalog&gt;
               &lt;rewrite&gt;
                    &lt;config&gt;Alwayly_Catalog_Model_Config&lt;/config&gt;
                &lt;/rewrite&gt;
            &lt;/catalog&gt;
            &lt;catalog_resource&gt;
                &lt;rewrite&gt;
                    &lt;product_collection&gt;Alwayly_Catalog_Model_Resource_Product_Collection&lt;/product_collection&gt;
                &lt;/rewrite&gt;
            &lt;/catalog_resource&gt;
        &lt;/models&gt;
    &lt;/global&gt;
&lt;/config&gt;
</pre>
<p>也许你会想到，我们将要重写以下三个文件：</p>
<ul>
<li>Mage_Catalog_Block_Product_List_Toolbar</li>
<li>Mage_Catalog_Model_Config</li>
<li>Mage_Catalog_Model_Resource_Product_Collection</li>
</ul>
<p>我们的<strong>app/code/local/Alwayly_Catalog_Block_Product_List_Toolbar</strong> 应该这样:</p>
<pre>&lt;?php
class Alwayly_Catalog_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar
{
    public function setCollection($collection)
    {
        parent::setCollection($collection);
 
        if ($this-&gt;getCurrentOrder()) {
            if($this-&gt;getCurrentOrder() == 'qty_ordered') {
                $this-&gt;getCollection()-&gt;getSelect()
                     -&gt;joinLeft(
                            array('sfoi' =&gt; $collection-&gt;getResource()-&gt;getTable('sales/order_item')),
                             'e.entity_id = sfoi.product_id',
                             array('qty_ordered' =&gt; 'SUM(sfoi.qty_ordered)')
                         )
                     -&gt;group('e.entity_id')
                     -&gt;order('qty_ordered ' . $this-&gt;getCurrentDirection());
            } else {
                $this-&gt;getCollection()
                     -&gt;setOrder($this-&gt;getCurrentOrder(), $this-&gt;getCurrentDirection())-&gt;getSelect();
            }
        }
 
        return $this;
    }
}
</pre>
<p>我们继承了Mage_Catalog_Block_Product_List_Toolbar中所有的功能和方法但我们自己重写了setCollection()方法</p>
<p>我们的<strong>Alwayly_Catalog_Model_Config</strong>是相当简单的:</p>
<pre>&lt;?php
class Alwayly_Catalog_Model_Config extends Mage_Catalog_Model_Config
{
    public function getAttributeUsedForSortByArray()
    {
        return array_merge(
			parent::getAttributeUsedForSortByArray(),
			array('qty_ordered' =&gt; Mage::helper('catalog')-&gt;__('Sold quantity'))
		);
    }
}
</pre>
<p>到了这一步，产品的排序应该已经奏效，但我们在分页上有点小问题，无法显示正确的数目。我们可以在 <strong>Alwayly/Catalog/Model/Resource/Product/Collection.php</strong>中用以下代码来修复这个问题。</p>
<pre>&lt;?php
class Alwayly_Catalog_Model_Resource_Product_Collection extends Mage_Catalog_Model_Resource_Product_Collection
{
    protected function _getSelectCountSql($select = null, $resetLeftJoins = true)
    {
       $this-&gt;_renderFilters();
       $countSelect = (is_null($select)) ?
           $this-&gt;_getClearSelect() :
           $this-&gt;_buildClearSelect($select);
 
       if(count($countSelect-&gt;getPart(Zend_Db_Select::GROUP)) &gt; 0) {
           $countSelect-&gt;reset(Zend_Db_Select::GROUP);
       }
 
       $countSelect-&gt;columns('COUNT(DISTINCT e.entity_id)');
       if ($resetLeftJoins) {
           $countSelect-&gt;resetJoinLeft();
       }
       return $countSelect;
    }
}
</pre>
<p>就是这样，在4个简单的步骤之后，我们的Magento网站中的商品就能按销量来排序了。 希望你乐在其中~~~</p>]]></description>
      <pubDate>Tue, 18 Aug 2015 13:05:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[用local.xml来重写或更新magento模板布局的xml结构]]></title>
      <link>https://www.360magento.com/blog/magento-overwrite-xml/</link>
      <description><![CDATA[<p><img class="attachment-full wp-post-image" alt="magento使用local.xml来更新网站的布局" src="http://7xjryy.com1.z0.glb.clouddn.com/local-xml.jpg" height="100" width="620" /></p>
<p>在过去的5年magento管理代码的工作经验来看，在遵循magento的规则情况下，使用"local.xml"来重写或更新xml布局是最好的方法</p>
<p>这篇文章是针对那些还不知道&ldquo;local.xml&rdquo;方法的。如果你已经在使用它，那恭喜你。如果没有，你绝对应该使用它。</p>
<p>这个其实很简单：只使用一个文件时，就是local.xml，放置在你的主题文件夹layput下覆盖或更新主题所有设计的XML。</p>
<p><strong>优点</strong>:</p>
<p>1. 仅仅只用一个文件就可以管理和更新magento主题的xml<br /> 2. 没有必要去查找magento主题下的其他.xml文件,因为他是依赖于base文件夹下的xml<br /> 3. 每次更改local.xml文件，是显而易见的，所以没有必要寻找内部的XML文件的变化</p>
<p><strong>缺点</strong>:</p>
<p>1. 目前我还没发现，除非你不是想把代码更清晰明了，以后修改主题不是你的事情.</p>
<p>如何使用local.xml文件.你需要做的就是创建一个插入你的主题文件夹里面并写入你的xml.由于magento是通过xmk文件读取的，所以它将首先搜索新创建的local.xml的变化并且重写和更新，然后再进入base文件夹里的.xml.</p>
<p><strong>如何设置local.xml</strong>:</p>
<p>1. 在你的主题layout文件夹下创建local.xml文件 (app/frontend/default/your-theme/layout)<br /> 2. 加入基本的xml标记结构</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;layout version="0.1.0"&gt;&lt;/layout&gt;
</pre>
<p>3. 将要重写的xml结构放入，看下面的例子:</p>
<p><strong>例子</strong>:</p>
<p>1. 从这个区域删除/添加javascript:</p>
<pre>&lt;!-- Let&rsquo;s remove sleight js for IE7--&gt;
&lt;reference name="head"&gt;
&lt;action method="removeItem"&gt;&lt;type&gt;js&lt;/type&gt;&lt;name&gt;lib/ds-sleight.js&lt;/name&gt;&lt;params /&gt;&lt;if&gt;lt IE 7&lt;/if&gt;&lt;/action&gt;
&lt;/reference&gt;
 
&lt;!-- Instead, add belated.js from your theme&rsquo;s /js folder --&gt;
&lt;action method="addItem"&gt;&lt;type&gt;skin_js&lt;/type&gt;&lt;name&gt;js/belated.js&lt;/name&gt;&lt;params /&gt;&lt;if&gt;lt IE 7&lt;/if&gt;&lt;/action&gt;
</pre>
<p>2. 仅仅只为这个category page添加一个layout,设置一个模板并添加一些javascript.</p>
<pre>&lt;catalog_product_view translate="label"&gt;
&lt;reference name="root"&gt;
&lt;action method="setTemplate"&gt;
&lt;template&gt;page/1column.phtml&lt;/template&gt;
&lt;/action&gt;
&lt;/reference&gt;
&lt;reference name="head"&gt;
&lt;action method="addItem"&gt;&lt;type&gt;skin_js&lt;/type&gt;
&lt;name&gt;js/stereotabs.js&lt;/name&gt;&lt;/action&gt;
&lt;action method="addItem"&gt;&lt;type&gt;skin_js&lt;/type&gt;
&lt;name&gt;js/shadowbox/shadowbox.js&lt;/name&gt;&lt;/action&gt;
&lt;/reference&gt;
&lt;/catalog_product_view&gt;
</pre>
<p>3.从这个layput中移除指定的blocks(products compare, products viewed and related products) ,用 &ldquo;remove&rdquo;</p>
<pre>&lt;default&gt;
&lt;reference name="right"&gt;
&lt;remove name="catalog.compare.sidebar" /&gt;
&lt;remove name="left.reports.product.viewed" /&gt;
&lt;remove name="catalog.product.related" /&gt;
&lt;/reference&gt;

</pre>
<p>4. 从这个layput中移除指定的blocks(products compare, products viewed and related products), 用 method=&rdquo;unsetChild&rdquo;</p>
<pre>
&lt;!-- Removed the Newsletter from the left sidebar --&gt;
&lt;action method="unsetChild"&gt;&lt;name&gt;left.newsletter&lt;/name&gt;&lt;/action&gt;
&lt;action method="unsetChild"&gt;&lt;name&gt;tags_popular&lt;/name&gt;&lt;/action&gt;
&lt;/reference&gt;
&lt;/default&gt;
</pre>
<p>当然local.xml有许多其他用途，但我这里只指出了添加，删除和更新模块，以更好地说明local.xml在开发流程的方式。</p>
<p>希望这篇文章能给你的开发带来方便，谢谢阅读</p>]]></description>
      <pubDate>Mon, 17 Aug 2015 14:13:39 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[改变Magento Global Messages的显示方式]]></title>
      <link>https://www.360magento.com/blog/fancy-magento-global-messages/</link>
      <description><![CDATA[<p><img alt="magento global message" src="http://7xjryy.com1.z0.glb.clouddn.com/global-message.jpg" height="200" width="609" /></p>
<p>一般用magento开发的网站，客户很难看到或注意到一些提醒，也就是magento中的Global Messages</p>
<p>我们可以通过把Global Messages放到页面的顶部来增强客户的浏览性，并通过动画来美化它</p>
<p>我们可以通过下面的演示视频上的简单的三个步骤来看下我们要来达到的效果(Youtube视频，请翻墙观看)</p>
<p><object width="600" height="437" data="http://www.youtube.com/v/RUVxY0suy1s?version=3&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash"><param name="src" value="http://www.youtube.com/v/RUVxY0suy1s?version=3&amp;hl=en_US&amp;rel=0" /><param name="allowscriptaccess" value="always" /><param name="allowfullscreen" value="true" /></object></p>
<p>1. 创建<strong>local.xml</strong>插入到你自己的主题模板的layout下面，如果你已经有了这个文件，可以插入到这个文件里面适当的地方(<a href="https://www.360magento.com/blog/magento-overwrite-xml/" target="_blank" title="用local.xml来重写或更新magento模板布局的xml结构">阅读更多关于 “local.xml 方法”</a>).</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;layout version="0.1.0"&gt;
    &lt;default&gt;
		&lt;reference name="root"&gt;
			&lt;remove name="global_messages" /&gt;
		&lt;/reference&gt;
		&lt;reference name="after_body_start"&gt;
			&lt;block type="core/template" name="alwayly_global_messages" template="core/alwayly_global_messages.phtml" before="-" /&gt;
		&lt;/reference&gt;
    &lt;/default&gt;
&lt;/layout&gt;
</pre>
<p>2. 创建<strong>alwayly_global_messages.phtml</strong> 在 <br />app/design/frontend/your_package/your_theme/template/core/</p>
<pre>&lt;?php if($this-&gt;getMessagesBlock()-&gt;getMessageCollection()-&gt;count()): ?&gt;
	&lt;div id="alwayly_global_messages" style="display: none"&gt;
		&lt;a href="javascript:void(0)" id="alwayly_global_messages_close" style="display: none" title="<!--?php echo $this--->__('Hide messages') ?&gt;"&gt;<span>&amp;</span>times;&lt;/a&gt;
		&lt;?php echo $this-&gt;getMessagesBlock()-&gt;getGroupedHtml(); ?&gt;
	&lt;/div&gt;
&lt;?php $this-&gt;getMessagesBlock()-&gt;getMessageCollection()-&gt;clear(); ?&gt;
 
&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
	Event.observe('alwayly_global_messages_close', 'click', function() {
		Effect.SlideUp('alwayly_global_messages', { duration: 0.4, delay: 0.3 });
		Effect.Fade('alwayly_global_messages_close', { duration: 0.2 });
	});
	Event.observe(document, 'dom:loaded', function() {
		Effect.SlideDown('alwayly_global_messages', { duration: 0.4, delay: 0.3 });
		Effect.Appear('alwayly_global_messages_close', { duration: 0.2, delay: 1 });
	});
//]]&gt;
&lt;/script&gt;
<!--?php endif; ?--></pre>
<p>3. 在你的css文件里面追加<strong>#alwayly_global_messages</strong>的样式 <br />skin/frontend/your_ package/your_theme/css/</p>
<pre>#alwayly_global_messages {
	position: relative;
	z-index: 9999;
}
#alwayly_global_messages_close {
	position: absolute;
	top: 13px;
	right: 13px;
	z-index: 10000;
	display: block;
	width: 15px;
	height: 15px;
	background: #666;
	text-align: center;
	color: #fff;
	font-size: 15px;
	line-height: 15px;
	text-decoration: none;
	-webkit-border-radius: 15px;
	-moz-border-radius: 15px;
	border-radius: 15px;
}
</pre>
<p>你也可以根据你自己喜欢的样式来设计magento global messages的样式</p>
<p>在video里面的例子，我已经添加了样式来覆盖原有的css</p>
<pre>.messages li, .messages li li { margin: 0 !important; }
.error-msg, .success-msg, .note-msg, .notice-msg {
	border: none !important;
	font-size: 14px !important;
	background-position: 13px 13px !important;
	padding: 10px 35px !important;
	min-height: 22px !important;
}
.note-msg, .notice-msg { color: #d6b501; }
</pre>
<p>就这样了，你的客户可以看到一个醒目而好看的message了</p>]]></description>
      <pubDate>Mon, 17 Aug 2015 12:27:17 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[自定义magento导航菜单]]></title>
      <link>https://www.360magento.com/blog/custom-category-menu-navigation/</link>
      <description><![CDATA[<p>magento的分类导航是top menu,但多数人用</p>
<p>但有一些客户想要在magento的sidebar一个垂直的分类菜单导航,这样当客户在进入一个分类列表时就可以看到当前分类的统计分类</p>
<p>在这篇文章中，我们将讨论建立一个完整的magento垂直菜单。我们将做3级深度的分类：类别，子类别和子类别。你可以再次基础上再扩展层级，但我相信对于大部分magento商店3级是绰绰有余。</p>
<h2>加载布局layout</h2>
<p>打开app/design/frontend/base/default/layout/page.xml或者是你自己主题下的layout文件。将下面的代码复制到default标签下面</p>
<pre>&lt;reference name="right"&gt;
     &lt;block type="core/template" name="catalog.sidenav" template="page/custom.phtml" before="cart_sidebar"/&gt;
&lt;/reference&gt;
</pre>
<p>这句代码的意思是告诉magento在把这个内容加载到我们每个页面的右边布局页面</p>
<p>现在我们来创建magento模板文件</p>
<h2>创建菜单模板</h2>
<p>我们需要做的是通过所有的商店类别，得到他们的子类别（2级），子子类别（3级），并显示它们。在这个过程中，我们在list页面需要寻找一个与当前分类id相同的分类id。当我们找到它 - 我们将会做任何事情。</p>
<p>创建app/design/frontend/base/default/template/page/custom.phtml 并复制下面代码</p>
<pre>&lt;ul&gt;
    &lt;?php
        $obj = new Mage_Catalog_Block_Navigation();
        $storeCategories = $obj-&gt;getStoreCategories();
        Mage::registry('current_category') ? $currentCategoryId = Mage::registry('current_category')-&gt;getId() : $currentCategoryId='';
        foreach ($storeCategories as $_category):
    ?&gt;
            &lt;li&gt;
                &lt;strong&gt;&lt;?php echo $_category-&gt;getName(); ?&gt;&lt;/strong&gt;
                &lt;?php $categoryChildren = $_category-&gt;getChildren(); ?&gt;
                &lt;?php if($categoryChildren-&gt;count()) : ?&gt;
                    &lt;ul&gt;
 
                        &lt;?php foreach($categoryChildren as $_categoryChild) : ?&gt;
                            &lt;?php $_categoryChildModel = Mage::getModel('catalog/category')-&gt;load($_categoryChild-&gt;getId());?&gt;
                            &lt;?php $categoryGrandchildren=$_categoryChild-&gt;getChildren(); ?&gt;
                            &lt;li&gt;
                                &lt;?php
                                    $currentCategoryId===$_categoryChild-&gt;getId() ? $bold="style=\"font-weight:bold\"" : $bold='';
                                    echo '<span>&amp;</span>emsp;' . '<a href="&quot;'">getUrl() . '"' . $bold . '&gt;' .  $_categoryChild-&gt;getName() . '(' . $_categoryChildModel-&gt;getProductCollection()-&gt;count() . ')&lt;/a&gt;';
                                ?&gt;
                            &lt;/li&gt;
                            &lt;?php if($categoryGrandchildren-&gt;count()) : ?&gt;
                                &lt;?php foreach($categoryGrandchildren as $_categoryGrandchild) : ?&gt;
                                    &lt;?php $_categoryGrandchildModel = Mage::getModel('catalog/category')-&gt;load($_categoryGrandchild-&gt;getId());?&gt;
                                    &lt;li&gt;
                                        &lt;?php
                                            $currentCategoryId===$_categoryChild-&gt;getId() ? $bold="style=\"font-weight:bold\"" : $bold='';
                                            echo '<span>&amp;</span>emsp;<span>&amp;</span>emsp;' . '</a><a href="&lt;span&gt;&amp;&lt;/span&gt;quot;'">getUrl() . '"' . $bold . '&gt;' .  $_categoryGrandchild-&gt;getName() . '(' . $_categoryGrandchildModel-&gt;getProductCount() . ')&lt;/a&gt;';
                                        ?&gt;
                                    &lt;/li&gt;
                                &lt;?php endforeach; ?&gt;
                            &lt;?php endif; ?&gt;
                        &lt;?php endforeach; ?&gt;
                    &lt;/ul&gt;
                &lt;?php endif; ?&gt;
            &lt;/li&gt;
        &lt;?php endforeach ?&gt;
&lt;/ul&gt;
</a></pre>
<h2>显示右边导航</h2>
<p>你应该能够看到你的页面的右边栏导航。这不正是最漂亮的菜单导航，但我相信你就可以改变风格，以满足您的需求。</p>
<p><img alt="magento自定义分类导航" src="http://7xjryy.com1.z0.glb.clouddn.com/custom-category-menu-example.png" height="315" width="620" /></p>
<p>你好可以插入这个模板文件到其他页面。例如在magento后台cms page中插入导航菜单</p>
<pre><span>{</span>{block type="core/template" template="page/custom.phtml"}}
</pre>]]></description>
      <pubDate>Sun, 16 Aug 2015 12:58:46 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento获取Base Url , Skin Url , Media Url , Js Url , Store Url 和 Current Url]]></title>
      <link>https://www.360magento.com/blog/magento-get-url/</link>
      <description><![CDATA[<h2>magento如何在phtml文件中获取url？</h2>
<h3>1. 获取 Base Url :</h3>
<pre>Mage::getBaseUrl();</pre>
<h3>2. 获取 Skin Url :</h3>
<pre>Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);</pre>
<p>(a) Unsecure Skin Url :</p>
<pre>$this-&gt;getSkinUrl('images/imagename.jpg');</pre>
<p>(b) Secure Skin Url :</p>
<pre>$this-&gt;getSkinUrl('images/imagename.gif', array('_secure'=&gt;true));</pre>
<h3>3. 获取 Media Url :</h3>
<pre>Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);</pre>
<h3>4. 获取 Js Url :</h3>
<pre>Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS);</pre>
<h3>5. 获取 Store Url :</h3>
<pre>Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);</pre>
<h3>6. 获取 Current Url</h3>
<pre>Mage::helper('core/url')-&gt;getCurrentUrl();</pre>
<h2>magento如何在cms pages或static blocks中获取Url ？</h2>
<h3>1. 获取 Base Url :</h3>
<pre><span>{</span>{store url=""}}</pre>
<h3>2. 获取 Skin Url :</h3>
<pre><span>{</span>{skin url='images/imagename.jpg'}}</pre>
<h3>3. 获取 Media Url :</h3>
<pre><span>{</span>{media url='imagename.jpg'}}</pre>
<h3>4. 获取 Store Url :</h3>
<pre><span>{</span>{store url='mypage.html'}}</pre>]]></description>
      <pubDate>Sat, 15 Aug 2015 12:53:30 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento在布局文件xml中如何添加/删除js和css]]></title>
      <link>https://www.360magento.com/blog/add-js-css-in-xml/</link>
      <description><![CDATA[<p>在magento中我们在head.phtml中调用css和js的代码是</p>
<pre>&lt;?php echo $this-&gt;getCssJsHtml() ?&gt;</pre>
<p>那么按照magento的规则，我们需要在layout中去加载css和js</p>
<h2>在magento如何通过xml加载外部js</h2>
<p>通畅我们会引用外部的css和js，比如google的字体,jquery库以及其他的库</p>
<pre> &lt;!-- Add an EXTERNAL stylesheets  --&gt;
	  &lt;action method="addLinkRel"&gt;&lt;rel&gt;stylesheet&lt;href&gt;https://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400,300,700|Open+Sans:300italic,400,300&lt;/href&gt;&lt;/action&gt;
 
         &lt;!--  Add an EXTERNAL javascript  --&gt;
         &lt;action method="addLinkRel"&gt;&lt;rel&gt;text/javascript&lt;href&gt;https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js&lt;/href&gt;&lt;/action&gt;
</pre>
<h2>如何加载magento主题下的css,jss</h2>
<h3>加载magento主题模板下面的css,js</h3>
<pre> &lt;!-- Add stylesheets from your local theme directory located in skin/frontend/ --&gt;
          &lt;action method="addCss"&gt;&lt;stylesheet&gt;css/styles.css&lt;/stylesheet&gt;&lt;/action&gt;
 
         &lt;!-- Add javascript from your local theme directory located in skin/frontend/ --&gt;
          &lt;action method="addItem"&gt;
	          &lt;type&gt;skin_js&lt;name&gt;js/bootstrap.min.js
          &lt;/action&gt;

</pre>
<h3>如何加载magento根目录js文件夹下的js文件</h3>
<pre>&lt;action method="addJs"&gt;&lt;script&gt;bootstrap.min.js&lt;/script&gt;&lt;/action&gt;
</pre>
<h2>在magento中删除css和js</h2>
<h3>在magento中的布局文件xml中删除js</h3>
<pre>&lt;action method="removeItem"&gt;
&lt;type&gt;js&lt;/type&gt;
&lt;name&gt;calendar/calendar.js&lt;/name&gt;
&lt;/action&gt;

</pre>
<h3>如何在phtm文件中删除js</h3>
<pre>$this-&gt;getLayout-&gt;getBlock('head')-&gt;removeItem('js', 'calendar/calendar.js');
</pre>]]></description>
      <pubDate>Fri, 14 Aug 2015 13:03:05 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中如何获取/判断用户登录状态]]></title>
      <link>https://www.360magento.com/blog/get-customer-loggedin/</link>
      <description><![CDATA[<p>大部分开发人员直接用</p>
<pre>Mage::getSingleton('customer/session')-&gt;isLoggedIn()</pre>
<p>来判断用户是否登录</p>
<p>比如一般magento开发人员会这样用</p>
<pre>&lt;?PHP

//get customer login status ?&gt;

&lt;?php $myStatus = Mage::getSingleton('customer/session')-&gt;isLoggedIn() ?&gt;

&lt;?php if($myStatus): ?&gt;

&lt;li&gt;&lt;a href="/customer/account/index" title="Customer Register"&gt;My account&lt;/a&gt; |&lt;/li&gt;
&lt;li&gt;&lt;?php echo $this-&gt;getLayout()-&gt;getBlock('header')-&gt;getWelcome() ?&gt;&lt;/li&gt;

&lt;?php else: ?&gt;

&lt;li&gt;&lt;a href="/customer/account/index" title="Customer Register"&gt;My account&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/customer/account/create" title="Customer Register"&gt;Register&lt;/a&gt;&lt;/li&gt;

&lt;?php endif ?&gt;</pre>
<p>但其实在magento里面用户登录状态判断函数早已封装好了.<br /> 判断用户登陆状态是否登陆的原理是：Magento在Session中检查CustomerID是否已经设置，并且该CustomerID在数据库中是有效的。</p>
<p>在app/code/core/Mage/Customer/Helper/Data.php文件中</p>
<pre>/**
     * Check customer is logged in
     *
     * @return bool
     */
    public function isLoggedIn()
    {
        return Mage::getSingleton('customer/session')-&gt;isLoggedIn();
    }</pre>
<p>在app/code/core/Mage/Customer/Model/Session.php文件中</p>
<pre>/**
     * Checking customer login status
     *
     * @return bool
     */
    public function isLoggedIn()
    {
        return (bool)$this-&gt;getId() &amp;&amp; (bool)$this-&gt;checkCustomerId($this-&gt;getId());
    }
</pre>
<p>所以我们可以在全局用</p>
<pre> if ($this-&gt;helper('customer')-&gt;isLoggedIn()) { 
  // is logon 
 } 
</pre>
<p>在magento中判断用户的登录状态或是否登录</p>]]></description>
      <pubDate>Thu, 13 Aug 2015 13:49:16 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento通过sql删除magento产品数据]]></title>
      <link>https://www.360magento.com/blog/delete-all-products-with-sql/</link>
      <description><![CDATA[<p>删除magento所有数据最快的方法是直接使用SQL查询。记得把SET FOREIGN_KEY_CHECKS=0;放在开始，把SET FOREIGN_KEY_CHECKS=1;放最后。</p>
<h2>删除magento所有产品数据</h2>
<p>复制下面代码到phpmyadmin中的SQL查询执行</p>
<pre><code>
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_category_product_index`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `rating_option_vote`; 
TRUNCATE TABLE `rating_option_vote_aggregated`;
TRUNCATE TABLE `review`; 
TRUNCATE TABLE `review_detail`; 
TRUNCATE TABLE `review_entity_summary`; 
TRUNCATE TABLE `review_store`;
INSERT  INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT  INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
INSERT  INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');
TRUNCATE TABLE `catalog_product_entity`;
</code>
</pre>
<h2>删除magento所有分类</h2>
<p>复制下面代码到phpmyadmin中的SQL查询执行</p>
<pre>TRUNCATE TABLE `catalog_category_entity`;
TRUNCATE TABLE `catalog_category_entity_datetime`;
TRUNCATE TABLE `catalog_category_entity_decimal`;
TRUNCATE TABLE `catalog_category_entity_int`;
TRUNCATE TABLE `catalog_category_entity_text`;
TRUNCATE TABLE `catalog_category_entity_varchar`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;

INSERT  INTO `catalog_category_entity`(`entity_id`,`entity_type_id`,`attribute_set_id`,`parent_id`,`created_at`,`updated_at`,`path`,`POSITION`,`level`,`children_count`) VALUES (1,3,0,0,'0000-00-00 00:00:00','2009-02-20 00:25:34','1',1,0,1),(2,3,3,0,'2009-02-20 00:25:34','2009-02-20 00:25:34','1/2',1,1,0);
INSERT  INTO `catalog_category_entity_int`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,32,0,2,1),(2,3,32,1,2,1);
INSERT  INTO `catalog_category_entity_varchar`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,31,0,1,'Root Catalog'),(2,3,33,0,1,'root-catalog'),(3,3,31,0,2,'Default Category'),(4,3,39,0,2,'PRODUCTS'),(5,3,33,0,2,'default-category');

/**** Magento ver. 1.6.x.x ****/

TRUNCATE TABLE `catalog_category_entity`;
TRUNCATE TABLE `catalog_category_entity_datetime`;
TRUNCATE TABLE `catalog_category_entity_decimal`;
TRUNCATE TABLE `catalog_category_entity_int`;
TRUNCATE TABLE `catalog_category_entity_text`;
TRUNCATE TABLE `catalog_category_entity_varchar`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;

INSERT  INTO `catalog_category_entity`(`entity_id`,`entity_type_id`,`attribute_set_id`,`parent_id`,`created_at`,`updated_at`,`path`,`POSITION`,`level`,`children_count`) VALUES (1,3,0,0,'0000-00-00 00:00:00','0000-00-00 00:00:00','1',1,0,1), (2,3,3,1,'0000-00-00 00:00:00','0000-00-00 00:00:00','1/2','1','1','0');
INSERT  INTO `catalog_category_entity_int`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,32,0,2,1),(2,3,36,0,2,1),(3,3,61,0,2,1),(4,3,44,0,2,NULL),(5,3,45,0,2,1),(6,3,62,0,2,1),(7,3,63,0,2,1),(8,3,64,0,2,NULL);
INSERT  INTO `catalog_category_entity_varchar`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,31,0,1,'Root Catalog'),(2,3,35,0,2,'Default Category'),(3,3,37,0,2,'default-category'),(4,3,40,0,2,NULL),(5,3,43,0,2,'PRODUCTS'),(6,3,52,0,2,NULL),(7,3,55,0,2,NULL);
</pre>
<h2>删除magento所有订单数据</h2>
<p>复制下面代码到phpmyadmin中的SQL查询执行</p>
<pre><code>
TRUNCATE `sales_order`;
  TRUNCATE `sales_order_datetime`;
  TRUNCATE `sales_order_decimal`;
  TRUNCATE `sales_order_entity`;
  TRUNCATE `sales_order_entity_datetime`;
  TRUNCATE `sales_order_entity_decimal`;
  TRUNCATE `sales_order_entity_int`;
  TRUNCATE `sales_order_entity_text`;
  TRUNCATE `sales_order_entity_varchar`;
  TRUNCATE `sales_order_int`;
  TRUNCATE `sales_order_text`;
  TRUNCATE `sales_order_varchar`;
  TRUNCATE `sales_flat_quote`;
  TRUNCATE `sales_flat_quote_address`;
  TRUNCATE `sales_flat_quote_address_item`;
  TRUNCATE `sales_flat_quote_item`;
  TRUNCATE `sales_flat_quote_item_option`;
  TRUNCATE `sales_flat_order_item`;
  TRUNCATE `sendfriend_log`;
  TRUNCATE `tag`;
  TRUNCATE `tag_relation`;
  TRUNCATE `tag_summary`;
  TRUNCATE `wishlist`;
  TRUNCATE `log_quote`;
  TRUNCATE `report_event`;

  ALTER TABLE `sales_order` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
  ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
  ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
  ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
  ALTER TABLE `tag` AUTO_INCREMENT=1;
  ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
  ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
  ALTER TABLE `wishlist` AUTO_INCREMENT=1;
  ALTER TABLE `log_quote` AUTO_INCREMENT=1;
  ALTER TABLE `report_event` AUTO_INCREMENT=1;
</code></pre>
<h2>删除magento所有客户数据</h2>
<p>复制下面代码到phpmyadmin中的SQL查询执行</p>
<pre><code>
TRUNCATE `customer_address_entity`;
  TRUNCATE `customer_address_entity_datetime`;
  TRUNCATE `customer_address_entity_decimal`;
  TRUNCATE `customer_address_entity_int`;
  TRUNCATE `customer_address_entity_text`;
  TRUNCATE `customer_address_entity_varchar`;
  TRUNCATE `customer_entity`;
  TRUNCATE `customer_entity_datetime`;
  TRUNCATE `customer_entity_decimal`;
  TRUNCATE `customer_entity_int`;
  TRUNCATE `customer_entity_text`;
  TRUNCATE `customer_entity_varchar`;
  TRUNCATE `log_customer`;
  TRUNCATE `log_visitor`;
  TRUNCATE `log_visitor_info`;

  ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
  ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
  ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
  ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
  ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
  ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
  ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
  ALTER TABLE `log_customer` AUTO_INCREMENT=1;
  ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
  ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

  -- Now, lets Reset all ID counters
  TRUNCATE `eav_entity_store`;
  ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;
</code></pre>
<p>删除产品图片，清空</p>
<pre>media/catalog/product</pre>
<p>目录</p>
<h2>通过写php脚本删除产品数据</h2>
<h3>Step 1. 创建skus.csv文件</h3>
<p>从magento后台导出所有产品的sku,导出文件为skus.csv</p>
<h3>Step 2. 创建php脚本文件delete-data.php</h3>
<p>在你的网站根目录创建一个php文件delete-data.php，然后复制以下代码</p>
<pre>require_once '../app/Mage.php';
Mage :: app("default") -&gt; setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
 while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];

}
$products = Mage::getResourceModel('catalog/product_collection')
    -&gt;addAttributeToSelect('*') 
    -&gt;addAttributeToFilter(
        'sku', array('in' =&gt; $allSku)
    )
    -&gt;load();

    if(is_array($products))
    {
        foreach ($products as $key =&gt; $pId)
        {
            try
            {
                $product = Mage::getModel('catalog/product')-&gt;load($pId)-&gt;delete();
                echo "successfully deleted product with ID: ". $pId ."<br />";
            } 
            catch (Exception $e) 
            {
                echo "Could not delete product with ID: ". $pId ."<br />";
            }
        }
    }</pre>]]></description>
      <pubDate>Thu, 13 Aug 2015 13:17:07 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento获取所有分类列表]]></title>
      <link>https://www.360magento.com/blog/get-all-category-listing-in-magento/</link>
      <description><![CDATA[<p>有的时候我们要显示网页所有类别或Magento的任何CMS页面。有许多不同的方式来获得的类别列表。我会告诉你如何得到所有类别您的Magento店的名单。</p>
<h2>1.显示所有的Magento分类列表(Active/Inactive)</h2>
<p>下面的代码将获取在你的magento商店里面的所有分类:</p>
<pre>$categories = Mage::getModel('catalog/category')-&gt;getCollection()-&gt;addAttributeToSelect('*');
</pre>
<h2>2. 显示所有激活的分类( Active Categories)</h2>
<p>下面的代码将获取你的magento商店里的所有激活的分类，过滤掉没有激活的分类</p>
<pre>$categories = Mage::getModel('catalog/category') -&gt;getCollection() -&gt;addAttributeToSelect('*') -&gt;addIsActiveFilter(); 
</pre>
<h2>3. 在magento中显示任意级别的并且是激活状态下的分类</h2>
<p>下面代码将获取所有特定级别的激活分类，在这里我选择了一级分类，并按照分类的name排序</p>
<pre>$categories = Mage::getModel('catalog/category') -&gt;getCollection() -&gt;addAttributeToSelect('*') -&gt;addIsActiveFilter() -&gt;addLevelFilter(1) -&gt;addOrderField('name'); 
</pre>
<h2>4. 在magento中显示特定分类存储类型</h2>
<p>下面的代码将获取所有激活的的存储特定分类</p>
<pre>getStoreCategories($sorted=false, $asCollection=false, $toLoad=true) 
$helper = Mage::helper('catalog/category'); 

// sorted by name, fetched as collection 
$categoriesCollection = $helper-&gt;getStoreCategories('name', true, false); 

// sorted by name, fetched as array 
$categoriesArray = $helper-&gt;getStoreCategories('name', false, false);</pre>
<h2>5. 在magento中只显示顶级分类</h2>
<p>下面的代码将获取所有magento顶级分类</p>
<pre>&lt;?php $_helper = Mage::helper('catalog/category') ?&gt; 
&lt;?php $_categories = $_helper-&gt;getStoreCategories() ?&gt; 
&lt;?php if (count($_categories) &gt; 0): ?&gt; 
&lt;ul&gt; 
&lt;?php foreach($_categories as $_category): ?&gt; 
&lt;li&gt; 
&lt;a href="<!--?php echo $_helper--->getCategoryUrl($_category) ?&gt;"&gt; 
&lt;?php echo $_category-&gt;getName() ?&gt; 
&lt;/a&gt; 
&lt;/li&gt; 
&lt;?php endforeach; ?&gt; 
&lt;/ul&gt; 
&lt;?php endif; ?&gt; 
</pre>
<h2>6. 在magento中显示所有顶级分类及其所有子分类</h2>
<p>下面的代码将获取所有的magento商店中顶级分类以及所有子分类</p>
<pre>&lt;?php $_helper = Mage::helper('catalog/category') ?&gt;
&lt;?php $_categories = $_helper-&gt;getStoreCategories() ?&gt;
&lt;?php $currentCategory = Mage::registry('current_category') ?&gt;
&lt;?php if (count($_categories) &gt; 0): ?&gt;
&lt;ul&gt;
&lt;?php foreach($_categories as $_category): ?&gt;
&lt;li&gt;
&lt;a href="&lt;?php echo $_helper-&gt;getCategoryUrl($_category) ?&gt;"&gt;
&lt;?php echo $_category-&gt;getName() ?&gt; //Top Level Category Listing
&lt;/a&gt;
&lt;?php $_category = Mage::getModel('catalog/category')-&gt;load($_category-&gt;getId()) ?&gt;
&lt;?php $_subcategories = $_category-&gt;getChildrenCategories() ?&gt;
&lt;?php if (count($_subcategories) &gt; 0): ?&gt;
&lt;ul&gt;
&lt;?php foreach($_subcategories as $_subcategory): ?&gt;
&lt;li&gt;
&lt;a href="&lt;?php echo $_helper-&gt;getCategoryUrl($_subcategory) ?&gt;"&gt; //Sub Category Listing
&lt;?php echo $_subcategory-&gt;getName() ?&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
</pre>
<h2>7. 在magento中显示当前顶级分类的子分类</h2>
<p>下面的代码将获取当前顶级分类的所有子分类</p>
<pre>&lt;?php $_currentCategory = Mage::register('current_category') ?&gt;
&lt;?php $_helper = Mage::helper('catalog/category') ?&gt;
&lt;?php $_categories = $_helper-&gt;getStoreCategories() ?&gt;
&lt;?php if (count($_categories) &gt; 0): ?&gt;
&lt;ul&gt;
&lt;?php foreach($_categories as $_category): ?&gt;
&lt;li&gt;
&lt;a href="&lt;?php echo $_helper-&gt;getCategoryUrl($_category) ?&gt;" title="&lt;?php echo $_category-&gt;getName() ?&gt;"&gt;
&lt;?php echo $_category-&gt;getName() ?&gt;
&lt;/a&gt;
&lt;?php if ($_category-&gt;getId() == $_currentCategory-&gt;getId()): ?&gt;
&lt;?php $_subcategories = $_currentCategories-&gt;getChildrenCategories() ?&gt;
&lt;?php if (count($_subcategories) &gt; 0): ?&gt;
&lt;ul&gt;
&lt;?php foreach($_subcategories as $_subcategory): ?&gt;
&lt;li&gt;
&lt;a href="&lt;?php echo $_helper-&gt;getCategoryUrl($_subcategory) ?&gt;" title="&lt;?php echo $_subcategory-&gt;getName() ?&gt;"&gt;
&lt;?php echo $_subcategory-&gt;getName() ?&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;
&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;?php endif; ?&gt;
</pre>
<p>希望对你有帮助,Thanks</p>]]></description>
      <pubDate>Wed, 12 Aug 2015 09:43:43 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[论中国支付网关]]></title>
      <link>https://www.360magento.com/blog/chinese-payment-gateways/</link>
      <description><![CDATA[<p><a title="magento中国支付网关" href="http://www.360magento.com/blog/chinese-payment-gateways/"><img alt="magento中国支付网关" src="http://7xjryy.com1.z0.glb.clouddn.com/chinese_payment_gateways_insights.jpg" height="237" width="738" /></a></p>
<p>在中国的网络市场，贝宝几乎不见踪影（它主要被用于帮助中国商人向国外出口） ，因此，在中国需要依靠中国现有的主要支付网关：支付宝、财付通、中国银联等。</p>
<p>同时，通过信用卡支付的方式在中国市场也几乎不存在：中国的终端用户并不热衷于在电子商务网站上输入自己的信用卡信息。在他们的眼里，允许终端用户输入自己的信用卡信息看起来非常可疑，因此不建议在中国使用。</p>
<h2>从终端用户的角度分析，最流行的支付网关具有以下优点：</h2>
<h3>1 ）允许帐户充值和在线支付</h3>
<p>终端用户可以支付的金额为目前其支付网关帐户内的最高金额。这意味着，如果欲购买的产品高出其帐户余额，便无法完成付款。</p>
<p>另外，在中国，用户使用某种支付方式时对一次性支付的总额有一定限制，这一点非常重要。</p>
<h3>2 ）使用支付网关后被转向到银行页面</h3>
<p>在这种情况下，终端用户将被转向到他们的银行来完成支付，支付方式在此作为连通其银行账户页面的桥梁。</p>
<p>主要的支付网关都能访问大多数中国的银行。</p>
<p>对于中国的终端用户，这种付款方式尽管在付款流程优化方面不是很有效率，也同样非常受欢迎。</p>
<h3>3 ）快捷支付：支付网关直接链接到银行帐户</h3>
<p>快捷支付对于中国的终端用户是一个非常新颖的支付系统。它于2011年年底通过支付宝的快捷支付功能，在市场上首次亮相。</p>
<p>这种支付网关简化了支付过程，因为终端用户在注册支付网关的过程中已将其银行账户链接到该支付网关。随后，购买金额会从他的相应银行帐户中自动扣除。</p>
<p>支付宝、财付通和银联已经提供这种类型的支付方式。</p>
<h2>如何选择支付网关呢？</h2>
<p>如果您不知道该为您的电子商务网站选择哪种支付网关，你需要重视的第一点便是它们的受欢迎程度：</p>
<p>- 支付宝：市场占有率45％</p>
<p>- 财付通：市场占有率21％</p>
<p>- 银联：市场占有率11％</p>
<p>支付宝显然是最流行的支付网关系统，因为淘宝和天猫只使用这种支付网关。</p>
<p>另一个要考虑的标准是每个支付网关收取与交易量相应的佣金。在中国将遇到的难题是，这里并不采取固定的佣金率。因此，作为电商，您将不得不根据你的交易水平与付款网关供应商直接谈判。</p>
<p>由于与任何中国的支付网关供应商打交道都需要繁琐的行政工作，我们的客户通常在中国只采用一种在线付款方式。</p>]]></description>
      <pubDate>Wed, 12 Aug 2015 09:13:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[如何安装Magento 2.0]]></title>
      <link>https://www.360magento.com/blog/install-magento2/</link>
      <description><![CDATA[<p>2014年12月的Magento的2.0测试版发布。我是如此渴望得到它，因为&ldquo;Magento2将标志着一个转折点，并会扩大其市场占有率上！&rdquo;（马克拉维尔，在eBay担任产品副总裁、中型市场和Magento总经理）。&nbsp;Wow, sound great!</p>
<p><br />在等待公测版本中，我们应该抓紧时间，并开始有一个alpha版，我认为它的安装步骤，不会有太大变化。该指南是有点长，但它肯定是值得你花时间阅读<img class="wp-smiley" style="padding: 0px !important; margin: 0px 0.07em !important; outline: none; list-style: none; border: none !important; display: inline !important; box-shadow: none !important; height: 1em; width: 1em !important; vertical-align: -0.1em !important; max-width: 100%; color: #333333; font-family: 'Open Sans', sans-serif; font-size: 13.5px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 24.2999992370605px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 2.72000002861023px; -webkit-text-stroke-width: 0px; max-height: 1em; background-image: none !important; background-attachment: initial !important; background-color: #ffffff; background-size: initial !important; background-origin: initial !important; background-clip: initial !important; background-position: initial !important; background-repeat: initial !important;" alt=":)" src="http://blog.magestore.com/wp-includes/images/smilies/simple-smile.png" /></p>
<p>&nbsp;</p>
<h2>在本地安装magento2</h2>
<h3>1. 安装 xampp</h3>
<p>进入<a href="https://www.apachefriends.org/index.html" target="_blank" rel="nofollow">这里安装</a></p>
<p>编辑文件: php.ini 开启以下扩展:</p>
<pre>;extension=php_openssl.dll  &rArr;  extension=php_openssl.dll
;extension=php_intl.dll        &rArr;  extension=php_intl.dll</pre>
<h3>2. 安装 composer:</h3>
<p>通过<a href="https://getcomposer.org/doc/00-intro.md" target="_blank" rel="nofollow">这个链接</a>安装 composer</p>
<p>下载 <a href="https://getcomposer.org/Composer-Setup.exe" target="_blank" rel="nofollow">Composer-Setup.exe</a> 并在本地安装</p>
<p>运行文件<a href="https://getcomposer.org/Composer-Setup.exe" target="_blank" rel="nofollow">Composer-Setup.exe</a></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装" src="http://7xjryy.com1.z0.glb.clouddn.com/1.-magento2.0.png" height="405" width="517" /></p>
<p style="text-align: justify;">&rArr;&nbsp;选择 <strong>Next</strong>继续</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第2步" src="http://7xjryy.com1.z0.glb.clouddn.com/2.-magento2.0.png" height="405" width="519" /></p>
<p style="text-align: justify;">&rArr;&nbsp;选择 <strong>Next</strong>继续</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第3步" src="http://7xjryy.com1.z0.glb.clouddn.com/3.-magento2.0.png" height="349" width="517" /></p>
<p style="text-align: justify;">选择<strong>php.exe</strong>安装在xampp的路径是 <em>C:\xampp\php\php.exe</em> 并点击 <strong>Next</strong></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第4步" src="http://7xjryy.com1.z0.glb.clouddn.com/4.-magento2.0.png" height="345" width="523" /></p>
<p style="text-align: justify;">&rArr; 选择<strong>Install</strong></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第5步" src="http://7xjryy.com1.z0.glb.clouddn.com/5.-magento2.0.png" height="404" width="525" /></p>
<p style="text-align: justify;">接下来, 等待一会儿.</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第6步" src="http://7xjryy.com1.z0.glb.clouddn.com/6.-magento2.0.png" height="417" width="517" /></p>
<p style="text-align: justify;">如果发生错误, 你看一样 <strong>任务管理器</strong>选择关闭Window Explorer。 选择<strong>Retry</strong> to continue.</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第7步" src="http://7xjryy.com1.z0.glb.clouddn.com/7.-magento2.0.png" height="374" width="516" /></p>
<p style="text-align: justify;">这个composer 安装进程将会出现下面窗口表示结束 :</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第8步" src="http://7xjryy.com1.z0.glb.clouddn.com/8.-magento2.0.png" height="407" width="526" /></p>
<p style="text-align: justify;">再次运行 Window Explorer:</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第9步" src="http://7xjryy.com1.z0.glb.clouddn.com/9.-magento2.0.png" height="368" width="517" /></p>
<h3 style="text-align: justify;">3. Install Magento 2.0</h3>
<p style="text-align: justify;">在这篇文章中，我使用的Magento2.0代码是来自 <a href="https://github.com/magento/magento2" target="_blank" rel="nofollow">https://github.com/magento/magento2</a></p>
<p style="text-align: justify;">复制magento2源码到 <strong>htdocs</strong> 本地文件夹. 然后, 右键并选择 <strong>Composer Installation</strong>在这个文件上 <em>\setup\composer.json</em></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第10步" src="http://7xjryy.com1.z0.glb.clouddn.com/10.-magento2.0.png" height="289" width="516" /></p>
<p style="text-align: justify;">显示cmd界面,你要等待一会儿</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第11步" src="http://7xjryy.com1.z0.glb.clouddn.com/11.-magento2.0.png" height="391" width="516" /></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第12步" src="http://7xjryy.com1.z0.glb.clouddn.com/12.-magento2.0.png" height="348" width="516" /></p>
<p style="text-align: justify;">登录到 <strong>mysql</strong>的管理面板phpmyadmin 来创建database</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第13步" src="http://7xjryy.com1.z0.glb.clouddn.com/13.-magento2.0.png" height="434" width="490" /></p>
<p style="text-align: justify;">在浏览器运行链接: <em>localhost/magento20/</em> 开始安装 Magento 2.0</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第14步" src="http://7xjryy.com1.z0.glb.clouddn.com/14.-magento2.01.png" height="386" width="589" /></p>
<p style="text-align: justify;">接下来就是一步步进行安装magento 2.0:</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第15步" src="http://7xjryy.com1.z0.glb.clouddn.com/15.-magento2.01.png" height="190" width="525" /></p>
<p style="text-align: justify;">Step 1: 检查服务器环境</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第16步" src="http://7xjryy.com1.z0.glb.clouddn.com/16.-magento2.01.png" height="301" width="558" /></p>
<p style="text-align: justify;">当Readiness Check 步骤完成后, 选择 <strong>Next</strong></p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第17步" src="http://7xjryy.com1.z0.glb.clouddn.com/17.-magento2.01.png" height="273" width="564" /></p>
<p style="text-align: justify;">在step 2填写服务器信息和数据库信息. 然后点击 <strong>Next</strong>继续</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第18步" src="http://7xjryy.com1.z0.glb.clouddn.com/18.-magento2.01.png" height="194" width="553" /></p>
<p style="text-align: justify;">Step 3: 提供你的网站访问链接并继续</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第19步" src="http://7xjryy.com1.z0.glb.clouddn.com/19.-magento2.01.png" height="266" width="551" /></p>
<p style="text-align: justify;">step 4: 自定义你的商店. 在进行step 5之前你可以编辑你的time zone, currency 和 language.</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第20步" src="http://7xjryy.com1.z0.glb.clouddn.com/20.-magento2.01.png" height="234" width="551" /></p>
<p style="text-align: justify;">Step 5需要你 创建管理员账号. 填入信息, 知道最后一项</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第21步" src="http://7xjryy.com1.z0.glb.clouddn.com/21.-magento2.01.png" height="207" width="554" /></p>
<p style="text-align: justify;">选择<strong>Install</strong>. 在 step 6, 你将看到以下屏幕</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第22步" src="http://7xjryy.com1.z0.glb.clouddn.com/22.-magento2.01.png" height="295" width="557" /></p>
<p style="text-align: justify;">这将需要一些时间才能完成安装. 所有的完成之后，窗口将显示为</p>
<p style="text-align: center;"><img alt="Magento 2.0 - 如何安装magento 2.0 - Composer 设置安装第23步" src="http://7xjryy.com1.z0.glb.clouddn.com/23.-magento2.02.png" height="385" width="379" /></p>
<h2 style="text-align: justify;"><span style="color: #993300;">在线上服务器安装 Magento 2.0 </span></h2>
<h3 style="text-align: justify;"><strong>1.</strong> copy源代码到服务器</h3>
<h3 style="text-align: justify;"><strong>2.</strong> 运行 puty来安装 composer</h3>
<p style="text-align: justify;">i. 移动到安装文件</p>
<pre>Cd folder_magento/setup</pre>
<p style="text-align: justify;">ii. 下载 composer</p>
<pre>curl -sS https://getcomposer.org/installer | php</pre>
<p style="text-align: justify;">iii.&nbsp;Run composer</p>
<pre>php composer.phar install</pre>
<h3 style="text-align: justify;"><strong>3.</strong> 运行magento链接地址安装，和在本地安装一样的.</h3>]]></description>
      <pubDate>Tue, 11 Aug 2015 08:23:35 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento网站seo优化之Magento高级优化]]></title>
      <link>https://www.360magento.com/blog/optimize-your-magento-website03/</link>
      <description><![CDATA[<p>3. 高级的Magento SEO 和相同的内容<br /><br />完成了所有基础的设置后，剩下的事情就是一件简单的事：相同的内容。实际上是大量的相同的内容。商品里有相同的内容，至少，在下面的URLs有完全相同的内容：<br /><br />www.360magento.com/product.html<br /><br />www.360magento.com/category1/product.html<br /><br />www.360magento.com/catalog/product/view/id/1/<br /><br />www.360magento.com/catalog/product/view/id/1/category/1/<br />此外，商品回顾页面有几乎一样的内容。另一个问题是目录，你有大量相同的内容在层级导航中和索引选择中。最坏的情况是一个商品在这个页面显示之外，至少还会在这个页面以外的4个页面中显示。<br />我们将要去掉这些相同的内容，并允许它们被蜘蛛爬但不被索引，固定目录的索引选择和层级导航。<br />3.1. 无内容页面需设置成Noindex, follow<br />安装 Yoast robots meta module 可确保设置成防止索引所有的无内容页面，如下：<br /><br />现在搜索引擎将通过所有的链接来到这些页面上但不会再索引中显示这些页面。<br /><br />3.2. Nofollowing 非必需的链接<br /><br />另一简单的步骤来提高你的 Magento SEO 是停止链接到你的登录，付款，希望购买列表和所有其他没有内容的页面。对于RSS feeds,层级导航，增加商品到希望购买列表，增加商品到比较列表来说也是同样的设置。目前还没有插件来完成这些工作。你不得不进入你的模板文件中手工完成。<br /><br />3.3. 规范的URLs<br /><br />帮助搜索引擎理解你页面中的相同内容，你可以在每个页面使用你更喜欢的URL，使用新的 canonical URL tag （规范的URL标签），你可以安装这个 Canonical URL&rsquo;s for Magento 模块完成。<br /><br />3.4. XML 地图<br /><br />XML 地图是让搜索引擎知道你的内容在哪里的简单方法，它不会帮助你提高排名，但它可以帮助你更快得到索引。你可以手工建立一个XML地图，后台点击 Catalog =&gt; Google Sitemap =&gt; Add Sitemap, 选择一个文件名，路径和商店界面，然后点击 &ldquo;Save &amp; Generate&rdquo;。<br /><br />然后你可以简单的把下面的代码放到你的 robots.txt 文件中指引搜索引擎向你的 sitemap.xml 文件:<br /><br /># Website Sitemap<br />Sitemap: http://www.360magento.com/sitemap.xml</p>]]></description>
      <pubDate>Sat, 08 Aug 2015 11:27:03 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento网站seo优化之Magento模板优化]]></title>
      <link>https://www.360magento.com/blog/optimize-your-magento-website02/</link>
      <description><![CDATA[<p>2.Magento模板优化<br /><br />2.1. 优化了的空白模板<br /><br />默认的Magento皮肤如 &ldquo;Default Theme&rdquo;, &ldquo;Blue Skin&rdquo; 和 &ldquo;Modern Theme&rdquo; 在标题方面的工作做得不好，从SEO的角度来看，有很多的地方可以改进。为使它对你变得简单，这里有一款空白的Magento SEO模板，基于Magento的核心技术，空白模板合并了所有的东西，你可以在这里下载.<br /><br />2.2. 标题<br /><br />默认的 logo 是一个 h1标签, 应该只是出现在首页，在别的页面上它应该是一个h3标签. 最重要的事实让标题的内容置于 h1 标签之中，例如，在目录页它应是目录名在商品也应是商品名。<br /><br />下一步是清除过量的标题。一个好主意是清除侧栏的标题，或者做一个和商店相关的文字（包括关键字）。在h4标签中增加关键字到标题往往对seo 是不利的. 你可以把所有标题的 h4 标签换成 div ，在div中添加 strong 标签更好。接着优化你的内容，在目录页中把商品名放在 h3 里，把目录名放在 h1里。在商品页，你应该把商品名放在h1里.<br /><br />2.3. 优化你的代码<br /><br />保持你的模板清爽，把你的模板文件中的所有 javascript 和 CSS 移到外部的 javascripts 和css 文件中，因为它们对你的Magento SEO没有任何好处。这样做可以确保你的用户在首次读取文件的时候储存那些文件，搜索引擎不需要花费大量的时间来下载它们。<br /><br />2.4. 提升magento访问速度<br /><br />一个很重要的情况是搜索引擎每一天要在你的商店爬过多少页面，你的商店的读取速度有多快。<br /><br />你可以做两件事来增加你的Magento的速度：<br /><br />激活缓存。后台点击 System =&gt; Cache Management =&gt; enable all caching features (勾选复选框).<br /><br />一个域名的主机和服务器的设置也是很重要的。用 MySQL 和 PHP opcode 缓存你可以提高你的Mageto速度。<br /><br />另一件需要考虑的就是减少外部文件的数量。每一个你让人们下载的文件，他们的浏览器会建立另一个连接到网络服务器。所以非常好的主意就是减少外部文件的数量，合并几个文件为一个文件。默认的Magento已经合并了几乎所有的 javascript 文件到一个文件中。<br /><br />但 stylesheets 文件没有合并：默认模板有6个不同的stylesheet 文件。你可以把这些文件合并成一个新文件，除了print.css文件，或者你可以安装这个扩展 Fooman Speedster module. 除了合并文件外，这个模块能压缩和缓存你的 javascript 和 stylesheet 文件。 (请注意Speedster的使用条件： mod_rewrite 必须可用，你的服务器需要支持.htaccess。 如果你在Magento同时使用规范的URLs和 Fooman Speedster，你需要利用this download 重写Canonical module 。)<br /><br />3. 高级的Magento SEO 和相同的内容<br /><br />完成了所有基础的设置后，剩下的事情就是一件简单的事：相同的内容。实际上是大量的相同的内容。商品里有相同的内容，至少，在下面的URLs有完全相同的内容：<br /><br />www.360magento.com/product.html<br /><br />www.360magento.com/category1/product.html<br /><br />www.360magento.com/catalog/product/view/id/1/<br /><br />www.360magento.com/catalog/product/view/id/1/category/1/<br />此外，商品回顾页面有几乎一样的内容。另一个问题是目录，你有大量相同的内容在层级导航中和索引选择中。最坏的情况是一个商品在这个页面显示之外，至少还会在这个页面以外的4个页面中显示。<br />我们将要去掉这些相同的内容，并允许它们被蜘蛛爬但不被索引，固定目录的索引选择和层级导航。<br />3.1. 无内容页面需设置成Noindex, follow<br />安装 Yoast robots meta module 可确保设置成防止索引所有的无内容页面，如下：<br /><br />现在搜索引擎将通过所有的链接来到这些页面上但不会再索引中显示这些页面。</p>
<p><a title="magento网站seo优化之基本优化" href="http://www.360magento.com/blog/optimize-your-magento-website01/">magento网站seo优化之基本优化</a>&nbsp;&nbsp;&nbsp;</p>]]></description>
      <pubDate>Fri, 07 Aug 2015 10:03:13 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento网站seo优化之基本优化]]></title>
      <link>https://www.360magento.com/blog/optimize-your-magento-website01/</link>
      <description><![CDATA[<p>1. 基本的技术优化<br /><br />1.1. 普通优化设置<br /><br />Magento 是搜索引擎最友好的商用平台之一，但有几点需要关注以便优化你的 Magento SEO. 第一步是在使用<span class="t_tag">最新</span>的版本中激活 Server URL rewrites. 你可以在系统按钮下找到这个选项： System =&gt; Configuration =&gt; Web =&gt; Search Engines Optimization. 激活后，在这个页面上，另一个不错的选择是设置&ldquo;Url Options &rdquo;下的 &ldquo;Add store Code to Urls&rdquo; ，在大多数情况下，把这个开关设为&ldquo;No&rdquo;更好。<br /><br />1.1.1. WWW 和 non-WWW<br /><br />在 &ldquo;Unsecure&rdquo; 和 &ldquo;Secure&rdquo; 的下拉菜单里你可以找到 Base URL, 在那里你可以设置你更喜欢的域名。你可以选择WWW的URL或者没有WWW的URL。改变这些设置你不会从www到non-www或者从 non-www到www建立一个重定向。所以你必须通过 .htaccess 文件建立 一个301重定向。除此之外，解决了 WWW vs non-WWW 的问题，这个重定向可以有效防止你的Magento URLs被加入SID问题，像?SID=b9c95150f7f70d6e77ad070259afa15d. 确保 Base URL 和重定向是一样的。编辑 .htaccess 文件时，你可以在根目录下的 .htaccess 文件中加入下面的重定向代码。<br /><br />大约 119 行:<br /><br />RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/<br /><br />RewriteRule ^index\.php$ http://www.mydomain.com/ [R=301,L]<br /><br />也许，你的Magento不是安装在根目录而是在某个子目录下http://www.mydomain.com/<span class="t_tag">magento</span>/:<br /><br />RewriteBase /magento/ RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /magento/index\.php\ HTTP/<br /><br />RewriteRule ^index\.php$ http://www.mydomain.com/magento/ [R=301,L]<br /><br />1.2. 页眉优化设置<br /><br />安装Magento时默认的标题是 &ldquo;Magento Commerce&rdquo;。为了你的Magento商店得到它应得得流量，以下你必须了然于胸：<br /><br />搜索引擎着重于开头的词，所以如果你的关键字靠近页面标题的开头那你有更大的可能性让排名更好。<br /><br />人们扫视结果页面，一般看开头的几个词。如果你的关键字位于页面的的开始，那你被点击的可能性就大很多。<br /><br />首先你应该去掉默认的标题 &ldquo;Magento Commerce&rdquo;. 后台点击 System =&gt; Configuration =&gt; Design =&gt; HTML Head. 为你的网站选一个描述性好的标题，这个标题也会在几个没有内容的页面中使用，比如 &ldquo;Contact Us&rdquo; 和 &ldquo;Popular Search Terms&rdquo;.<br /><br />把页面标题加到你的店名中，包括目录和商品，把你的店名放在&ldquo;标题后缀&rdquo;中。保持前缀空白是个不错的选择，原因上面提到过。同时保持 &ldquo;Default Description&rdquo; 和 &ldquo;Default Keywords&rdquo; 空白。对于非产品展示页面，为防止整站索引，设置 &ldquo;Default Robots&rdquo; 为 &ldquo;NOINDEX, NOFOLLOW&rdquo; 会有所帮助，但对于别的页面来说要确保设置为 &ldquo;INDEX, FOLLOW&rdquo;.<br /><br />接下来优化你的网店页面的 ，最好的方法是加上 new canonical tag （新的规范标签）。你可以安装 Canonical URL&rsquo;s for Magento Module 这个扩展以便把它们加到你的head种来改进你的Magento SEO。<br /><br />因某些原因Magento把未设置的meta机器人转为一个meta标签，方式如下：</p>
<div class="blockcode">
<div id="code0"><ol>
<li>&lt;meta name=&rdquo;robots&rdquo; content=&rdquo;*&rdquo; /&gt;</li>
</ol></div>
</div>
<p>这种方式会造成搜索引擎一些奇怪的行为，所以我们要把它移除。要从代码中移除这些空白的meta你可以安装 Yoast MetaRobots Module.<br /><br />1.3. CMS 页面优化设置<br /><br />第一眼看上去Magento似乎缺少华丽的CMS功能，但对于大多数使用者来说这已经足够了。简单 的CMS的好处之一是你能够控制页面的每一个方面。一旦你赋予每一个CMS页面一些不错的内容，选一个友好的URL和页面标题，（同时记住1.2小节中的 要点），到Meta数据标签处为每个你想要给它排名的 CMS页面写上描述。<br /><br />你可以保持&rdquo;Keywords&rdquo;栏空白。描述有一个很重要的作用：引诱人们去点击，所以确 保它描述的确实是他们所要点击页面的内容，那样可以引起他们的注意。因此，唯一的好的描述就是自己手写的，如果你考虑用自动描述软件来写描述，那还不如什 么也不做，让搜索引擎自动完成。<br /><br />如果你不使用meta描述，搜索引擎会在你的文件里找到关键字，并自动选择一条，那样在结果页面里会有一到两个醒目的词。<br /><br />1.4. 商品目录优化<br /><br />Magento 可以自定义目录名，让你的目录指向产品的URL。因为Magento对建立相同的内容这个功能的支持不够，很好的方式就是禁用它。设置它，点击 System =&gt; Configuration =&gt; Catalog =&gt; Search Engine Optimization and set &ldquo;Use categories path for product URL&rsquo;s to &ldquo;no&rdquo;.<br /><br />接着设置每一个目录的细节。点击Catalog =&gt; Manage Categories. 最重要的区域是：<br /><br />Meta 描述: 在这里放上吸引人的描述；记住人们会在搜索引擎的结果列表页中看到这个描述。<br /><br />页面标题: 保持页面标题空白，使用目录名包括父目录。但你按照要求制作目录时，标题会象你所输入的一样，没有父目录。<br /><br />URL 要点: 尝试保持短的但是关键字丰富的URL。移除像&ldquo;the&rdquo;，&ldquo;and&rdquo;,&rdquo;for&rdquo;等等没用的词。要注意的是你只能在&ldquo;all store views&rdquo;下设置, 对于多语种的商店你应该保持语言的独立。<br /><br />对于每一个商店界面，你可以指定名字，描述，页面标题和Meta数据。对多语种商店来说这真的是一个很棒的功能。<br /><br />1.5. 商品优化<br /><br />商品页面的优化和目录优化有些相似。你可以设置Meta信息为 &ldquo;Default Values&rdquo; 并使用于每一个 &ldquo;Store View&rdquo;. 注意对于 &ldquo;Meta Title&rdquo;, 这个将写在完全的页面标题上，包括目录但不包括标题的前缀/后缀，而不仅仅是商品的名称。<br /><br />Magento SEO中一个经常忽略的方面是你怎么处理你的图片。通过给图片写标签和考虑给你的图片起怎样的名字，你会从不同的图片搜索引擎得到不错的额外流量。</p>]]></description>
      <pubDate>Fri, 07 Aug 2015 09:51:24 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento在命令行刷新索引]]></title>
      <link>https://www.360magento.com/blog/reindex-magento-command-line/</link>
      <description><![CDATA[<p>有时，你可能会发现，需要通过命令行来重新索引Magento。这可能原因一大堆，例如，如果该索引超时或是通过Web界面没有完成。 Magento包含索引脚本，你可以找到</p>
<pre>Shell</pre>
<p>文件夹<br /> 在这个文件夹，你可以执行一些命令</p>
<h2>检查所有索引的状态</h2>
<pre>php indexer.php --status</pre>
<p>应该会输出类似下面：</p>
<pre>Product Attributes:            Pending
Product Prices:                Pending
Stock Status:                  Pending
Tag Aggregation Data:          Pending
Default Values:                Pending
Catalog URL Rewrites:          Pending
Product Flat Data:             Require Reindex
Category Flat Data:            Pending
Category Products:             Pending
Catalog Search Index:          Pending
</pre>
<h2>重新索引单个索引</h2>
<p>每个索引都有自己的索引键，当magento需要重新索引时就需要引用它，要获得这些键，你可以使用一下命令</p>
<pre>php indexer.php --info
</pre>
<p>你将会得到：</p>
<pre>catalog_product_attribute     Product Attributes
catalog_product_price         Product Prices
cataloginventory_stock        Stock Status
tag_summary                   Tag Aggregation Data
mana_db_replicator            Default Values
catalog_url                   Catalog URL Rewrites
catalog_product_flat          Product Flat Data
catalog_category_flat         Category Flat Data
catalog_category_product      Category Products
catalogsearch_fulltext        Catalog Search Index
</pre>
<p>重新索引单个索引，运行一下命令:</p>
<pre>php indexer.php --reindex [Index Option Code]
</pre>
<p>可以用逗号来分离多个索引</p>
<pre>php indexer.php --reindex catalog_product_price,catalog_url,catalog_product_flat
</pre>
<h2>重新刷新所有索引</h2>
<p>下面的代码将通过每个索引循环，来重新建立索引</p>
<pre>php indexer.php --reindexall
</pre>]]></description>
      <pubDate>Tue, 04 Aug 2015 11:10:20 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento在首页显示最新产品]]></title>
      <link>https://www.360magento.com/blog/magento-template002/</link>
      <description><![CDATA[<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">打开Magento后台管理面板</p>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">Go to<span class="Apple-converted-space">&nbsp;</span><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: pre-wrap; background-color: #eeeeee;">CMS &gt; Pages &gt; Home page</code></p>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">切换到 content 栏</p>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">插入下面代码:</p>
<pre class="default prettyprint prettyprinted" style="margin: 0px 0px 1em; padding: 5px; border: 0px; font-size: 13px; overflow: auto; width: auto; max-height: 600px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; display: block; color: #393318; word-wrap: normal; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #eeeeee;"><code style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; background-color: #eeeeee;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">{{</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">block  type</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"catalog/product_new"</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;"> column_count</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"6"</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">  products_count</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"12"</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;"> name</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"home.catalog.product.new"</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #00008b;">alias</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"product_homepage"</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #00008b;">template</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">=</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #800000;">"catalog/product/list.phtml"</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; font-size: 13px; color: #000000;">}}</span></code></pre>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">释义:</p>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: pre-wrap; background-color: #eeeeee;">column_count="6"</code><span class="Apple-converted-space">&nbsp;</span>&ndash; 显示产品列的数量</p>
<p style="margin: 0px 0px 1em; padding: 0px; border: 0px; font-size: 15px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19.5px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: pre-wrap; background-color: #eeeeee;">products_count="12"</code><span class="Apple-converted-space">&nbsp;</span>&ndash; 显示产品的数量</p>]]></description>
      <pubDate>Wed, 27 May 2015 13:57:58 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[magento中调用静态块的几种方法 ]]></title>
      <link>https://www.360magento.com/blog/magento-template001/</link>
      <description><![CDATA[<p>在后台创建一个order_form静态块<br />Block Title :Order Form<br />Identifier :order_form<br />Status :Enabled<br />Content :自定义内容</p>
<p>1.如果要在.phtml文件中直接调用这个静态块，那可以采用以下方法</p>
<pre>    &lt;?php  
    $block = Mage::getModel('cms/block')  
     -&gt;setStoreId(Mage::app()-&gt;getStore()-&gt;getId())  
     -&gt;load('order_form');  
    $content = $block-&gt;getContent(); // Block的原始内容已经获得  
      
    $processor = Mage::getModel('core/email_template_filter');  
    echo $html = $processor-&gt;filter($content);  
    ?&gt;  
</pre>
<p>Mage::getModel('core/email_template_filter')-&gt;filter()是必须的，因为Static Block里可能包含Magento的模板语言（如:https://www.360magento.com/），fiter将翻译成实际的值 Magento中调用静态Block主要有两个地方。 是否感觉这代码太长了呢，那你还可以这么写</p>
<pre>&lt;?php echo $this-&gt;getLayout()-&gt;createBlock(&lsquo;cms/block&rsquo;)-&gt;setBlockId('order_form')-&gt;toHtml() ?&gt;
</pre>
<p>2.如何在CMS页面的Content中调用这个静态块呢？你可以采用以下方法</p>
<pre><span>{</span>{block type="cms/block"  name="cms_test_block"  block_id="order_form" }}   
</pre>
<p>将里面order_form改成你的静态块对应的block_id则可</p>
<p>3.怎么样在layout中调用静态块呢？</p>
<pre>  
&lt;reference name="footer"&gt;  
    &lt;block type="cms/block" name="order_form" before="-"&gt;  
        &lt;action method="setBlockId"&gt;&lt;block_id&gt;order_form&lt;/block_id&gt;&lt;/action&gt;  
    &lt;/block&gt;      
&lt;/reference&gt;   
   </pre>
<p>到此，你应该能够灵活的运用magento中的静态块了吧！</p>]]></description>
      <pubDate>Wed, 27 May 2015 13:33:10 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Magento产品价格设置]]></title>
      <link>https://www.360magento.com/blog/magento_product_price/</link>
      <description><![CDATA[<p>Magento为你的产品价格提供了很多选项。你可以设置特价，定时促销等等。要编辑你的产品价格，首先登录你的Magento后台，然后进入<strong>Catalog-&gt;Manage Products</strong>。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento catalog Ma" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_1.jpg" width="auto" /></div>
<p>现在定位你要修改价格的产品上，点击它边上的Edit链接。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento price tab" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_2.jpg" width="auto" /></div>
<p>这里你将看到许多用来修改产品的选项。在左侧菜单选择Prices标签。</p>
<div class="entry-thumbnail"><img class="attachment-full wp-post-image" alt="magento product price" src="http://7xjryy.com1.z0.glb.clouddn.com/magento_product_price_3.jpg" width="auto" /></div>
<p>在这里你可以修改产品的价格，下面是一些比较重要选项的说明：</p>
<ul>
<li>Price（价格）：你要出售产品的价格，必填项，最重要的信息</li>
<li>Cost（成本）：你购买产品的价格</li>
<li>Tier Price（阶梯价格）：可根据购买数量设定折扣</li>
<li>Special Price（特价）：可设置特价及特价的起止事件，此选项不受购买数量的限制</li>
</ul>
<p>360magento提供专业的基于magento系统的<a title="magento电商网站开发" href="https://www.360magento.com/">电商网站开发</a>服务，如有需求或相关咨询，<a title="magento开发" href="https://www.360magento.com/contacts/">请与我们联系</a>。</p>]]></description>
      <pubDate>Wed, 03 Sep 2014 13:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>
