¿Qué es getBlockHtml ('formkey')?

19

Estoy tratando de editar la página de edición del producto (primera pestaña) en Magento y me gustaría mover la cantidad (así como algunas otras cosas) desde sus pestañas respectivas hasta la primera página. Veo

<form action="<?php echo $this->getSaveUrl() ?>" method="post" id="product_edit_form" enctype="multipart/form-data">
<?php echo $this->getBlockHtml('formkey')?>
<div style="display:none"></div>
</form>

y saber que el código para el cuadro de texto de cantidad es

    <tr>
        <td class="label"><label for="inventory_qty"><?php echo Mage::helper('catalog')->__('Qty') ?><span class="required">*</span></label></td>
        <td class="value">
            <?php if (!$_readonly):?>
            <input type="hidden" id="original_inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][original_inventory_qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>"/>
            <?php endif;?>
            <input type="text" class="input-text required-entry validate-number" id="inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>" <?php echo $_readonly;?>/>
        </td>
        <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
    </tr>

¿Alguien sabe dónde está el código para la primera pestaña? ¿Tiene algo que ver con formkey?

¡Gracias!

new2programming
fuente

Respuestas:

43

Las claves de formulario en Magento son un medio para prevenir la falsificación de solicitudes de sitios cruzados, explicada de manera brillante por Ashley Schroder aquí , pero, en resumen, es para mantenerlo a salvo de las personas que intentan publicar en sus formularios (como agregar al carrito) desde otros sitios que se hacen pasar por tú.

Esto puede ser peligroso porque alguien teóricamente podría crear su propio formulario y publicarlo en cualquier acción de controlador de controlador de formulario en su tienda sin que usted lo sepa. La protección CSRF esencialmente ignora cualquier publicación que falle una verificación en el parámetro form_key incluido con la publicación del formulario.

Entonces, ¿qué hace <?php echo $this->getBlockHtml('formkey')?>? Le dice a Magento que busque un bloque de diseño con el nombre "formkey" y lo muestre. En Magento, generalmente se trata de un archivo que contiene esto:

<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>

Esto le indica a Magento que genere y almacene una clave de formulario única para una sesión de usuario. Todas las acciones del controlador Magento protegidas por CSRF verificarán esto antes de hacer algo de valor.

HTH!

philwinkle
fuente
Bueno, eso sin duda explica lo que hacen y les agradezco mucho. Ahora todavía tengo que tratar de descubrir cómo obtener esa cantidad <tr> en la pestaña de edición de mi producto. Pensamientos? Puedo hacerlo solo en la parte superior, pero quiero que sea uno de los campos incluidos, por lo que parece que se suponía que estaba allí.
new2programming el
La última oración me hace preguntarme si hay algunos controladores de Magento que no están protegidos por CSRF o_O
Nick Rolando