Adicionei o campo personalizado suspenso na página de check-out com valores personalizados. Ele está funcionando bem e também salva os valores dos atributos no banco de dados, mas não é exibido no endereço de entrega do pedido. Alguma idéia de como mostrá-lo?
InstallSchema.php
$connection->addColumn(
$installer->getTable('quote_address'),
'mob_type',
[
'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
'nullable' => true,
'default' => NULL,
'length' => 255,
'comment' => 'Mob Type'
]
);
$connection->addColumn(
$installer->getTable('sales_order_address'),
'mob_type',
[
'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
'nullable' => true,
'default' => NULL,
'length' => 255,
'comment' => 'Mob Type'
]
);
$installer->endSetup();
Plugar
use Magento\Checkout\Block\Checkout\LayoutProcessor;
class MobPlugin
{
public function afterProcess(LayoutProcessor $subject, $jsLayout) {
$customAttributeCode = 'mob_type';
$customField = [
'component' => 'Magento_Ui/js/form/element/select',
'config' => [
'customScope' => 'shippingAddress.custom_attributes',
'template' => 'ui/form/field',
'elementTmpl' => 'ui/form/element/select',
'id' => 'drop-down',
],
'dataScope' => 'shippingAddress.custom_attributes.mob_type',
'label' => 'Mob Type',
'provider' => 'checkoutProvider',
'visible' => true,
'validation' => ['required-entry' => true],
'sortOrder' => 150,
'id' => 'drop-down',
'options' => [
[
'value' => 'local',
'label' => 'Local',
],
[
'value' => 'vip',
'label' => 'VIP',
]
]
];
$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children'][$customAttributeCode] = $customField;
return $jsLayout;
}
}
etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Checkout\Model\ShippingInformationManagement">
<plugin name="save_custom_field" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
</type>
</config>
SaveAddressInformation.php
class SaveAddressInformation
{
protected $quoteRepository;
public function __construct(
\Magento\Quote\Model\QuoteRepository $quoteRepository
) {
$this->quoteRepository = $quoteRepository;
}
/**
* @param \Magento\Checkout\Model\ShippingInformationManagement $subject
* @param $cartId
* @param \Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
*/
public function beforeSaveAddressInformation(
\Magento\Checkout\Model\ShippingInformationManagement $subject,
$cartId,
\Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
) {
$shippingAddress = $addressInformation->getShippingAddress();
$shippingAddressExtensionAttributes = $shippingAddress->getExtensionAttributes();
if ($shippingAddressExtensionAttributes) {
$customField = $shippingAddressExtensionAttributes->getMobType();
$shippingAddress->setMobType($customField);
}
}
}
O plug-in acima está funcionando bem e salve os valores na tabela quote_address. Quero exibir o atributo personalizado também na página de exibição de pedidos e no modelo de email. Alguém tem uma idéia do que há de errado com o código. desde já, obrigado
magento2
checkout
module
shipping-address
Magento2 Devloper
fonte
fonte
Respostas:
Navegue para a configuração do sistema
Na seção Modelos de Endereço, Localizar HTML, desmarque o valor do sistema da caixa de seleção e adicione o seguinte código. você pode alterar um código de atributo, se necessário.
Para o modelo de email, o mesmo formato de endereço [formato de endereço HTML] funcionará.
Execute
php bin/magento cache:clean
se não aparecer.Um atributo será exibido na página de visualização do pedido e no email do pedido também.
acima é exibido nos dois endereços, mas se você deseja exibir apenas na remessa, é necessário inserir apenas o valor SMS na tabela de endereços de remessa (
sales_order_address and quote_address
), para que a cobrança não funcione corretamente. DesfrutarVista de mesa -
Resultado -
fonte
Tente com a minha abordagem. Levando em consideração o módulo conforme descrito na pergunta.
Utilizou o mesmo módulo mostrado na pergunta. nenhuma mudança
Extensão de referência instalada à qual você está se referindo (extensão SMS)
Navegue para a configuração do sistema
Na seção Modelos de Endereço, Localizar HTML, desmarque o valor do sistema da caixa de seleção e adicione o seguinte código. você pode alterar um código de atributo, se necessário.
Para o modelo de email, o mesmo formato de endereço [formato de endereço HTML] funcionará.
pode ser necessário limpar o cache.
Corre
php bin/magento cache:clean
se não aparecerUm atributo será exibido na página de visualização do pedido e no email do pedido também.
fonte
html_for_shipping
.Magento/sales/view/adminhtml/templates/order/view/info.phtml
, localize abaixo da$block->getFormattedAddress( $order->getShippingAddress() );
alteração de linha em$block->getFormattedShippingAddress( $order->getShippingAddress() );
Noinfo.php
arquivo, você pode criar um novo método apenas para a formatação do endereço de entrega. Você pode alterar o parâmetro do método de formato 'html' para 'html_for_shipping', onde 'html_for_shipping' será o novo valor de configuração do sistema para o formato do endereço de entrega.Se o atributo for salvo corretamente, você precisará adicionar o atributo aos modelos de endereço. Estes podem ser encontrados em
Você pode adicionar no final algo como:
Dependendo do tipo de modelo, você pode usar
<br/>
para criar novas linhas.fonte
Eu faria isso como este: adicioná-lo ao
quote
esales_order
e trabalhar os dados de lá utilizar o seguinte código (também tentam usando scripts upgradeSchema se você precisa atualizar a tabela DB existente, InstallSchema deve ser usado para novas tabelas DB)ATUALIZAR
Crie um mixin js da seguinte maneira:
dentro
requirejs-config.js
a
set-shipping-information-mixin.js
Além disso, você deve ter um
extension_attributes.xml
emYour_Module/etc/
com seguinte códigofaça as alterações necessárias (código de atributo, tipo etc.). Isso adicionará seu atributo personalizado às informações de remessa
fonte
di.xml
arquivo?getShippingAddress()
função que recebe todos os campos definidos para o próprio endereço, é por isso que eu adicionei este código, ele deve adicionar seu atributo para o próprio endereço de entrega