Personaliza la apariencia del captcha nativo de magento. Cambiar la cantidad de líneas y puntos


Respuestas:


11

La forma en que respondió anteriormente no es un buen enfoque.

La clase Zend_Captcha_Imageha proporcionado funciones para cambiar las variables. Puede encontrar las funciones en la misma clase que será algo como esto:

public function setDotNoiseLevel ($dotNoiseLevel)
{
    $this->_dotNoiseLevel = $dotNoiseLevel;
    return $this;
}
/**
 * @param int $lineNoiseLevel
 */
public function setLineNoiseLevel ($lineNoiseLevel)
{
    $this->_lineNoiseLevel = $lineNoiseLevel;
    return $this;
}

Y también Zend_Captcha_Imagese extiende a una clase de modelo Mage, es decir Mage_Captcha_Model_Zend. Por lo tanto, puede anular fácilmente esta clase de modelo de Mage para establecer esas variables.

En 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
}

Estoy configurando esas variables en el constructor para que los cambios funcionen incluso para la carga de la página y también para la actualización de captcha.

Será mejor si anula la función anterior en lugar de modificar los archivos principales de mage.



3

Para Magento 2: vaya a vendor \ magento \ zendframework1 \ library \ Zend \ Captcha \ Image.php

Encontrará las siguientes funciones en este archivo que se pueden utilizar para personalizar la imagen captcha.

     /**
     * 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;
    }

Puede cambiar los valores de esta función desde el número de línea 122 y 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;

Gracias Dinesh por compartir esto. Será mejor si agrega una nueva pregunta y publica esta respuesta como respuesta. Será útil para aquellos que lo están buscando.
Jaimin Sutariya
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.