Кастомизация административной части на примере модуля emarket
В данной статье будет рассказано о том, каким образом можно добавить возможность редактирования данных "Незарегистрированного покупателя" при просмотре заказа.
Добавим сначала сам метод, который будет отвечать за отображение и редактированные данных о покупателе. В папке /classes/modules/emarket/ в файл __custom_adm.php добавим следующий метод:
public function delivery_customer_edit() {
$object = $this->expectObject('param0');
$mode = (string) getRequest('param1');
$inputData = array(
'object' => $object,
'allowed-element-types' => array('customer')
);
if($mode == "do") {
$object = $this->saveEditedObjectData($inputData);
$this->chooseRedirect();
}
$this->setDataType("form");
$this->setActionType("modify");
$data = $this->prepareData($inputData, "object");
$this->setData($data);
return $this->doData();
}
Метод создан на основе delivery_edit(), из файла __admin_delivery.php. В этой же папке добавим файл permissions.custom.php следующего содержания:
<?php
$permissions = array('control' => array('delivery_customer_edit'));
?>
Далее необходимо отредактировать XSL-шаблоны административной части. В папке /styles/skins/mac/data/modules/emarket/ создадим копию файла form.modify.xsl и переименуем в form.modify.custom.xsl. Откроем на редактирование файл form.modify.custom.xsl, заменим строку:
<xsl:include href="order-edit.xsl" />
на:
<xsl:include href="order-edit.custom.xsl" />
также добавим два шаблона:
<xsl:template match="group[@name = 'delivery']" mode="form-modify" />
<!-- Customer -->
<xsl:template match="/result[@method = 'delivery_customer_edit']/data/object" mode="form-modify">
<xsl:apply-templates select="properties/group" mode="form-modify">
<xsl:with-param name="show-name"><xsl:text>0</xsl:text></xsl:with-param>
</xsl:apply-templates>
</xsl:template>
Создадим копию файла order-edit.xsl и переименуем в order-edit.custom.xsl. Откроем на редактирование файл order-edit.custom.xsl. Изменим шаблон:
<!-- Информация о заказчике -->
<xsl:apply-templates select="$order-info/customer" />
на:
<!-- Информация о заказчике -->
<xsl:apply-templates select="$order-info/customer">
<xsl:with-param name="customer-id"><xsl:value-of select="$customer-id"/></xsl:with-param>
</xsl:apply-templates>
далее необходимо изменить шаблон:
<xsl:template match="customer">
...
...
...
</xsl:template>
на:
<xsl:template match="customer">
<xsl:param name="customer-id"/>
<div class="panel properties-group">
<div class="header">
<span>
<xsl:text>&label-order-customer-group;</xsl:text>
</span>
<div class="l" />
<div class="r" />
</div>
<div class="content">
<div>
<a href="/admin/emarket/delivery_customer_edit/{$customer-id}/">Редактировать</a>
</div>
<table class="tableContent">
<xsl:apply-templates select="object/properties/group/property" mode="customer-info" />
</table>
<xsl:call-template name="std-form-buttons" />
</div>
</div>
</xsl:template>
Теперь при просмотре заказа, в блоке "Информация о покупателе" можно будет перейти по ссылке "Редактировать", в новом окне откроются данные о покупателе в режиме редактирования.