Pregunta

marco en el Zend que proporcionan propiedades a los diseños que luego son consumidos en la vista. Un ejemplo de esto sería:

$this->layout = new Zend_Layout();
$this->layout->username = 'John';
$this->layout->email = 'john@foofoobunnies.edu';

Lo que yo más tarde volvería a repetir en mi view.phtml:

<?= $this->username; ?>
<?= $this->email; ?>

Sin embargo me encuentro en Magento escribir métodos de bloques que devuelven objetos enteros para ser consumido por la vista - por ejemplo:

Bloquear / User.php

public function getUser(){
    return Mage::getModel('mymodule/user')->load($this->getUserId());
}

Y en mi user.phtml

$user = $this->getUser();
echo $user->getUsername();
echo $this->getEmail();

¿Hay alguna manera de cortar a cabo este paso de tener a los métodos de escritura de bloque para devolver los datos pertinentes? He estado usando este método durante 23 años, así que soy ajeno a ella, pero sólo parece que el paradigma de vista de diseño Zend dos pasos / compuesto es mucho más rápido para cortar sucesivamente.

Editar

Se me acaba de ocurrir que puede ser posible utilizar propiedades de los bloques de la misma manera que utilizo los métodos de bloque, por ejemplo $this->username donde $ esto puede ser un objeto de tipo Mymodule_User_Block_User; aunque no sé si esto es una práctica entendido o aceptado en Magento, ya que no he visto esto muy a menudo.

¿Fue útil?

Solución

Siempre hay assign() y los captadores y definidores mencionados a través de Varien_Object::_call()

Otros consejos

tu edición en su pregunta bastante lo resume todo.

Se utiliza $this cuando el bloque es un ejemplo de lo que está intentando acceder, a razón de campo. Un bloque no va a ser el equivalente del respectivo modelo que necesita.

Sin embargo, en términos de pasar datos a través de bloques y, puede utilizar XML o PHP para lograrlo.

En PHP

$this->getLayout()->getBlock('block_name')->setData('user', Mage::getModel('mymodule/user')->load($this->getUserId())); 

o en XML

<block type="mymodule/user" name="block_name">
  <action method="setUserId"><user_id>string_goes_here</user_id></action>
</block>

Usted puede hacer su propio método de acción para establecer el propio objeto de usuario (obviamente, he hardcoded crudamente una cadena, pero los principales soportes).

El método toHtml() en Mage_Core_Block_Template incluye más o menos el archivo phtml, por lo tanto, usted está en el contexto del Bloque. Usted puede hacer todo el bloque o el medio ambiente Magento le ofrece.

El uso de $this->username no es la mejor práctica. Creo que es porque con el método get, que esté absolutamente libre de cambiar algo más tarde, sin cambiar la lógica de la base de datos con la matriz, se extendía desde Varien_Object. Añadir un cheque, anular el __get() estándar con getUsername() y devuelve otra cosa que en la matriz de datos, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top