Admin Controller¶
Nos permite administrar una clase ObjectModel para realizar un CRUD sobre este y también crear nuestras propias acciones o vistas personalizadas.
Instalación¶
La convención es crear el controlador principal en la ruta controllers/admin del módulo incluyendo el nombre del mismo.
class AdminMyModCommentsController extends ModuleAdminController
{
}
Es decir, el nombre debe ser Admin[NombreControlador]Controller y el fichero debe llamarse igual.
Atención
Para poder acceder al controlador se necesita crear la pestaña en la administración
Se puede desactivar su visualización desde la administración misma, pero debe estar definido
para poder acceder
Ahora debemos crear una nueva pestaña en el backoffice, desde Administración -> Pestaña. O realizarlo programáticamente creando un nuevo método installTab en la clase principal de nuestro módulo.
Prestashop contiene una lista de objetos tipo ObjectModel para sus propias tablas, para crear el nuevo Tab utilizaremos el objeto ObjectModel Tab. El método nos quedaría así:
public function installTab($parent, $class_name, $name)
{
$tab = new Tab();
# Método que nos permite obtener el id a partir del nombre de la clase
$tab->id_parent = (int)Tab::getIdFromClassName($parent)
$tab->name = array();
# Lista de idiomas disponibles y activados
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = $name;
}
$tab->class_name = $class_name;
$tab->module = $this->name;
$tab->active = 1;
return $tab->add();
}
Ahora llamaremos a este método desde el método install
public function install()
{
# otro código
if ( ! $this->installTab('AdminCatalog', 'AdminMyModule', 'MyModule') ) {
return false;
}
}
Si todo a ido bien ya podremos ver el nuevo Tab en el back office, tras reinstalar el módulo. Nota: Los métodos tab requieren el nombre del controlador admin sin el sufijo Controller. Por eso los parámetros de install tab no los llevan.
Ahora si accedes a este nuevo tab verás una página vacía con el header y footer.
La ruta del controlador será así: http://[host]/adminweb/index.php?controller=Admin[NombreControlador]&token=[eltoken] Sin incluir Controller en el nombre
Desinstalación¶
Al desinstalar el módulo deberíamos eliminar las tablas y configuraciones. Además de la Tab que hemos creado. Para desinstalar el tab crearemos un nuevo método.
public function uninstallTab($class_name)
{
# Obtener el id del tab
$id_tab = Tab::getIdFromClassName($class_name)
# Obtener la instancia
$tab = new Tab($id_tab);
# Eliminarla
return $tab->delete();
}
Tras esto en el método uninstall del módulo lo llamaremos de esta manera:
if ( ! $this->uninstallTab('AdminNombreModulo'))
{
return false;
}
Listando recursos¶
El controlador Admin extiende de ModuleAdminController, que a su vez extiende de AdminController. Esto nos da varias funcionalidades automáticamente gracias a la herencia. Como mostrar unl istado de ObjectModel.
Para utilizar la acción de listado de ObjectModel debes definir en el constructor de tu AdminController las siguientes variables:
table: | El nombre de la tabla asociada al ObjectModel |
---|---|
className: | El nombre de la clase del ObjectModel |
fields_list: | Un array asociativo con la lista de campos que queremos mostrar en la lista. La clave debe corresponder al campo en la base de datos. El valor puede tener varios parámetros como title, width, align, etc. Uno de ellos es obligatorio, title, que será el label del input asociado. |
bootstrap: | Activa el uso de plantillas bootstrap |
Recuerda crear el Object Models que utilizará el controlador si es necesario.
Ejemplo:
class AdminMyModuleController extends ModuleAdminController
{
public function __construct()
{
$this->table = 'mymoduletable';
$this->className = 'MyObjectModelClass';
$this>-fields_list = array(
'name' => array('title' => $this->l('name'), 'align' => 'center'),
'date' => array('title' => $this->l('date'), 'align' => 'left'),
);
# Usar la plantilla de bootstrap
$this->bootstrap = true;
# No olvidar llamar al constructor que generará cookies y otras cosas esenciales
parent::__construct();
# Opcional
$this->meta_title = $this->l('Título para este tab');
$this->toolbar_title[] = $this->meta_title;
}
}
Modificando la consulta¶
Probablemente tengas que desinstalar e instalar el módulo. Esto nos activará paginación y filtros por defecto. Y también activará las búsquedas en el listado.
Si necesitas cambiar la consulta que se realiza para obtener el listado puedes sobreescribir las propiedades _select, _join o _where.
Por defecto la consulta que se realiza es así:
"