He agregado el campo personalizado desplegable en la página de pago con valores personalizados. Funciona bien, también guarda los valores de los atributos en la base de datos pero no los muestra en la dirección de envío del pedido. ¿Alguna idea de cómo mostrarlo?
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();
Enchufar
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);
}
}
}
El complemento anterior funciona bien y guarda valores en la tabla quote_address. También quiero mostrar un atributo personalizado en la página de vista de pedidos y la plantilla de correo electrónico. Cualquiera tiene una idea de lo que está mal con el código. Gracias por adelantado
magento2
checkout
module
shipping-address
Magento2 Devloper
fuente
fuente
Respuestas:
Navegue a la configuración del sistema
Desde Plantillas de dirección, sección Buscar HTML, desmarque la casilla de verificación del valor del sistema, agregue el siguiente código. puede cambiar un código de atributo si es necesario.
Para la plantilla de correo electrónico, funcionará el mismo formato de dirección [formato de dirección HTML].
Ejecutar
php bin/magento cache:clean
si no se muestra.Se mostrará un atributo en la página de vista del pedido y también el correo electrónico del pedido.
arriba se muestra en ambas direcciones, pero si solo desea mostrar en el envío, entonces debe poner solo el valor de SMS en la tabla de direcciones de envío (
sales_order_address and quote_address
) sin facturar, funciona bien. DisfrutarVista de tabla
Resultado -
fuente
Intenta con mi enfoque. Tomando en consideración el módulo como se describe en la pregunta.
Usó el mismo módulo que se muestra en la pregunta. ningún cambio
Extensión de referencia instalada a la que se refiere (extensión de SMS)
Navegue a la configuración del sistema
Desde Plantillas de dirección, sección Buscar HTML, desmarque la casilla de verificación del valor del sistema, agregue el siguiente código. puede cambiar un código de atributo si es necesario.
Para la plantilla de correo electrónico, funcionará el mismo formato de dirección [formato de dirección HTML].
puede ser necesario para borrar el caché.
Ejecutar
php bin/magento cache:clean
si no se muestraSe mostrará un atributo en la página de vista del pedido y también el correo electrónico del pedido.
fuente
html_for_shipping
.Magento/sales/view/adminhtml/templates/order/view/info.phtml
, busque el$block->getFormattedAddress( $order->getShippingAddress() );
cambio de línea a continuación$block->getFormattedShippingAddress( $order->getShippingAddress() );
en elinfo.php
archivo In , puede crear un método nuevo solo para formatear la dirección de envío Puede cambiar el parámetro del método de formato 'html' a 'html_for_shipping', donde 'html_for_shipping' será el nuevo valor de configuración del sistema para el formato de la dirección de envío.Si el atributo se guarda correctamente, debe agregar el atributo a las plantillas de dirección. Estos se pueden encontrar en
Puede agregar al final algo como:
Dependiendo del tipo de plantilla, puede usar
<br/>
para crear nuevas líneas.fuente
Haría eso así: agréguelo a
quote
ysales_order
y trabaje los datos desde allí use el siguiente código (también intente usar los scripts UpgradeSchema si necesita actualizar la tabla de base de datos existente, InstallSchema debe usarse para nuevas tablas de base de datos)ACTUALIZAR
Cree un mixin js de la siguiente manera:
en
requirejs-config.js
el
set-shipping-information-mixin.js
También debe tener una
extension_attributes.xml
enYour_Module/etc/
la siguiente códigorealice cambios donde sea necesario (código de atributo, tipo, etc.) esto agregará su atributo personalizado a la información de envío
fuente
di.xml
archivo?getShippingAddress()
función que establece todos los campos en la dirección en sí, es por eso que agregué este código, debería agregar su atributo a la dirección de envío en sí misma