From e71660c4c7eaba6fe087ee571873a64fbdbf0f7a Mon Sep 17 00:00:00 2001 From: Gonzalo Hidalgo Madrid Date: Tue, 19 Mar 2024 23:45:13 +0100 Subject: [PATCH 1/3] Hide widget in selected language. --- src/Block/Js.php | 24 +++++++++++++++++-- src/etc/adminhtml/system.xml | 17 +++++++++++++ .../templates/product/view/widget.phtml | 4 ++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/Block/Js.php b/src/Block/Js.php index 77edb71..39f2476 100644 --- a/src/Block/Js.php +++ b/src/Block/Js.php @@ -3,8 +3,10 @@ namespace Aplazame\Payment\Block; use Aplazame\Payment\Gateway\Config\Config; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\View\Element\Template; use Magento\Framework\View\Element\Template\Context; +use Magento\Store\Model\ScopeInterface; class Js extends Template { @@ -13,14 +15,20 @@ class Js extends Template */ private $config; + /** + * @var ScopeConfigInterface + */ + private $scopeConfig; + public function __construct( Context $context, Config $config, + ScopeConfigInterface $scopeConfig, array $data = [] ) { parent::__construct($context, $data); - $this->config = $config; + $this->scopeConfig = $scopeConfig; } /** @@ -33,10 +41,22 @@ public function getConfig() protected function _toHtml() { - if (!$this->config->isActive()) { + if (!$this->config->isActive() || $this->isHiddenInCurrentLanguage()) { return ''; } return parent::_toHtml(); } + + public function isHiddenInCurrentLanguage() + { + $currentLocale = $this->scopeConfig->getValue('general/locale/code', ScopeInterface::SCOPE_STORE); + $hiddenLanguages = $this->scopeConfig->getValue('payment/aplazame_payment/aplazame_widget/hide_in_languages', ScopeInterface::SCOPE_STORE); + + if (in_array($currentLocale, explode(',', $hiddenLanguages))) { + return true; + } + + return false; + } } diff --git a/src/etc/adminhtml/system.xml b/src/etc/adminhtml/system.xml index bdcadfe..898f91d 100644 --- a/src/etc/adminhtml/system.xml +++ b/src/etc/adminhtml/system.xml @@ -60,6 +60,13 @@ Use widget legacy instead new widget + + + Magento\Config\Model\Config\Source\Locale + Select the languages in which the widget should be hidden. + 1 + + @@ -194,6 +201,16 @@ Change Aplazame's internal ID from 'quote' to 'order' when an order is confirmed, the 'order_' prefix will be used to avoid DB problems with duplicate numeric IDs + + + + + + + Magento\Config\Model\Config\Source\Yesno + Use v4 checkout API + + diff --git a/src/view/frontend/templates/product/view/widget.phtml b/src/view/frontend/templates/product/view/widget.phtml index 4721452..60c9995 100644 --- a/src/view/frontend/templates/product/view/widget.phtml +++ b/src/view/frontend/templates/product/view/widget.phtml @@ -4,6 +4,10 @@ use Aplazame\Payment\Block\Product\View\Widget; use Aplazame\Serializer\Decimal; +if ($block->isHiddenInCurrentLanguage()) { + return ''; // No renderizar el widget si el idioma actual está en la lista de idiomas ocultos. +} + if (!$block->isAplazameActive()) { return ''; } From f3cd180a5d75c4818541ee3a6a0b3667f0651c73 Mon Sep 17 00:00:00 2001 From: Gonzalo Hidalgo Madrid Date: Tue, 19 Mar 2024 23:54:49 +0100 Subject: [PATCH 2/3] Hide widget in selected language. --- src/Block/Product/View/Widget.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/Block/Product/View/Widget.php b/src/Block/Product/View/Widget.php index f88aca1..c156e49 100644 --- a/src/Block/Product/View/Widget.php +++ b/src/Block/Product/View/Widget.php @@ -6,6 +6,8 @@ use Magento\Catalog\Block\Product\AbstractProduct; use Magento\Directory\Model\Currency; use Magento\Framework\Pricing\PriceCurrencyInterface; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Store\Model\ScopeInterface; class Widget extends AbstractProduct { @@ -19,18 +21,39 @@ class Widget extends AbstractProduct */ private $config; + /** + * @var ScopeConfigInterface + */ + private $scopeConfig; + public function __construct( PriceCurrencyInterface $priceCurrency, \Magento\Catalog\Block\Product\Context $context, Config $config, + ScopeConfigInterface $scopeConfig, array $data = [] ) { parent::__construct($context, $data); $this->priceCurrency = $priceCurrency; $this->config = $config; + $this->scopeConfig = $scopeConfig; } + public function isHiddenInCurrentLanguage() +{ + // Obtiene el código de localización actual + $currentLocale = $this->scopeConfig->getValue('general/locale/code', ScopeInterface::SCOPE_STORE); + // Obtiene la configuración de los idiomas seleccionados para ocultar el widget + $hiddenLanguages = $this->scopeConfig->getValue('payment/aplazame_payment/aplazame_widget/hide_in_languages', ScopeInterface::SCOPE_STORE); + + // Convierte la lista separada por comas en un array + $hiddenLocales = explode(',', $hiddenLanguages); + + // Verifica si el código de localización actual está en la lista de localizaciones para ocultar + return in_array($currentLocale, $hiddenLocales); +} + /** * @return float */ From 900a57da8d6ec2a50f406a9110f830185a47ba85 Mon Sep 17 00:00:00 2001 From: Gonzalo Hidalgo Madrid Date: Wed, 20 Mar 2024 01:05:17 +0100 Subject: [PATCH 3/3] Fix null parameter error in language hide logic --- src/Block/Product/View/Widget.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Block/Product/View/Widget.php b/src/Block/Product/View/Widget.php index c156e49..b71433d 100644 --- a/src/Block/Product/View/Widget.php +++ b/src/Block/Product/View/Widget.php @@ -45,13 +45,13 @@ public function isHiddenInCurrentLanguage() // Obtiene el código de localización actual $currentLocale = $this->scopeConfig->getValue('general/locale/code', ScopeInterface::SCOPE_STORE); // Obtiene la configuración de los idiomas seleccionados para ocultar el widget - $hiddenLanguages = $this->scopeConfig->getValue('payment/aplazame_payment/aplazame_widget/hide_in_languages', ScopeInterface::SCOPE_STORE); - - // Convierte la lista separada por comas en un array - $hiddenLocales = explode(',', $hiddenLanguages); - - // Verifica si el código de localización actual está en la lista de localizaciones para ocultar - return in_array($currentLocale, $hiddenLocales); + $hiddenLanguages = $this->scopeConfig->getValue('payment/aplazame_payment/aplazame_widget/hide_in_languages', ScopeInterface::SCOPE_STORE) ?? ''; + + if (in_array($currentLocale, explode(',', $hiddenLanguages))) { + return true; + } + + return false; } /**