Настройте внешний вид родной капчи magento. Изменение количества линий и точек
Всем привет
Я хочу изменить расположение моей капчи в контактной форме. Мне нужно уменьшить количество линий и точек, которые он содержит, чтобы пользователь мог видеть текст более четко.
У кого-нибудь есть идеи, как это сделать?
Заранее спасибо.
4 answers
То, как вы ответили выше, не является хорошим подходом.
Класс Zend_Captcha_Image
предоставил функции для изменения переменных. Вы можете найти функции в том же классе, которые будут выглядеть примерно так:
public function setDotNoiseLevel ($dotNoiseLevel)
{
$this->_dotNoiseLevel = $dotNoiseLevel;
return $this;
}
/**
* @param int $lineNoiseLevel
*/
public function setLineNoiseLevel ($lineNoiseLevel)
{
$this->_lineNoiseLevel = $lineNoiseLevel;
return $this;
}
, А также Zend_Captcha_Image
распространяется на класс моделей Магов, т.е. Mage_Captcha_Model_Zend
. Таким образом, вы можете легко переопределить этот класс модели Mage, чтобы установить эти переменные.
В Mage_Captcha_Model_Zend:
В Mage_Captcha_Model_Zend:public function __construct($params)
{
if (!isset($params['formId'])) {
throw new Exception('formId is mandatory');
}
$this->_formId = $params['formId'];
$this->setExpiration($this->getTimeout());
$this->setDotNoiseLevel(10); // Added code
$this->setLineNoiseLevel(0); // Added code
}
Я устанавливаю эти переменные в конструкторе, чтобы изменения работали даже для загрузки страницы, а также для обновления капчи.
Будет лучше, если вы переопределите вышеуказанную функцию вместо изменения файлов ядра mage.
Вы можете изменить шум капчи, используя приведенный ниже код.
Перейдите к : lib/Zend/Captcha/Image.php
Измените значения переменных ниже в соответствии с вашими требованиями
protected $_dotNoiseLevel = 10; // Increase the value if you want to increase amount of dots
protected $_lineNoiseLevel = 0; // Increase the value if you want to increase amount of lines
Ссылка: http://magentoforall.blogspot.com.au/2012/11/magento-change-captcha-background-lines.html
Для Magento 2: Перейдите в vendor\magento\zendframework1\library\Zend\Captcha\Image.php
Ниже вы найдете функции в этом файле, которые можно использовать для настройки изображения капчи.
/**
* Set dot noise level
*
* @param int $dotNoiseLevel
* @return Zend_Captcha_Image
*/
public function setDotNoiseLevel ($dotNoiseLevel)
{
$this->_dotNoiseLevel = $dotNoiseLevel;
return $this;
}
/**
* Set line noise level
*
* @param int $lineNoiseLevel
* @return Zend_Captcha_Image
*/
public function setLineNoiseLevel ($lineNoiseLevel)
{
$this->_lineNoiseLevel = $lineNoiseLevel;
return $this;
}
Вы можете изменить значения этой функции из строк 122 и 129.
/**
* Number of noise dots on image
* Used twice - before and after transform
*
* @var int
*/
protected $_dotNoiseLevel = 100;
/**
* Number of noise lines on image
* Used twice - before and after transform
*
* @var int
*/
protected $_lineNoiseLevel = 5;
Вышесказанное не будет работать для Magento 2.3.4. В коде и пути к файлу внесены незначительные изменения. Вы можете прочитать ниже, чтобы уменьшить уровень шума для изображений с капчей.
Функции для уменьшения шума setdotnoiselevel и setlIneNoiseLevel одинаковы, но код перемещен в следующий файл.
Vendor/zendframework/zend-captcha/src/Image.php
Вы можете либо изменить следующий код в основном файле.
protected $dotNoiseLevel = 10;
protected $lineNoiseLevel = 1;
ИЛИ вы можете переписать файл в локальном формате, это наиболее точный и рекомендуемый способ.
- Добавьте код в di.xml
<preference for="Magento\Captcha\Model\DefaultModel" type="CodeMasterz\Utility\Model\Captcha\DefaultModel"/>
- Создайте файл по адресу app/code/CodeMasterz/Utility/Model/Captcha/DefaultModel.php и добавьте в него код ниже.
<?php
namespace CodeMasterz\Utility\Model\Captcha;
class DefaultModel extends \Magento\Captcha\Model\DefaultModel
{
public function __construct(
\Magento\Framework\Session\SessionManagerInterface $session,
\Magento\Captcha\Helper\Data $captchaData,
\Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory,
$formId
)
{
parent::__construct($session,$captchaData,$resLogFactory,$formId);
$this->setDotNoiseLevel(10); // S:VA
$this->setLineNoiseLevel(0);
}
}
- Выполните следующие команды.
bin/magento cache:clean layout
bin/magento c:c
bin/magento c:f
rm -rf generated/*