2017-02-02 14 views
1

Привет, я новичок в prestashop, и я пытаюсь создать модуль администрирования до 1.7. Я бы создал новое меню для отображения шаблона и управления моей БД.Prestashop 1.7 create admin module

модули/MyModule/mymodule.php:

<?php 
if (!defined('_PS_VERSION_')) 
{ 
    exit; 
} 

class MyModule extends Module 
{ 
    public function __construct() 
    { 
     $this->name = 'mymodule'; 
     $this->tab = 'administration'; 
     $this->version = '1.0.0'; 
     $this->author = 'John doe'; 

     $this->bootstrap = true; 
     parent::__construct(); 

     $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); 
     $this->displayName = $this->l('Mon module'); 
     $this->description = $this->l('On test la creation de module presta.'); 
    } 

    public function install() 
    { 
     // Install Tabs 
     $tab = new Tab(); 
     $tab->active = 1; 
     $tab->class_name = "MyModule"; 
     $tab->module = 'mymodule'; 
     $tab->name = array(); 
     $tab->id_parent = (int)Tab::getIdFromClassName('SELL'); 
     $tab->position = 3; 
     foreach ($lang as $l) { 
      $tab->name[$l['id_lang']] = $this->l('Mon module'); 
     } 

     $tab->add(); 

     if (!parent::install()) 
      return false; 
     return true; 
    } 

    public function uninstall() 
    { 
     // Uninstall Tabs 
     $tab = new Tab((int)Tab::getIdFromClassName('Mymodule')); 
     $tab->delete(); 

     // Uninstall Module 
     if (!parent::uninstall()) 
      return false; 
     return true; 
    } 
} 

модуль/MyModule/контроллер/администратор/MyModuleController.php:

<?php 
class MyModuleController extends ModuleAdminController 
{ 
    public function renderList() { 
     $this->content = $this->createTemplate('mymodule.tpl')->fetch(); 
     return $this->content; 
    } 
} 
?> 

модули/MyModule/просмотров/шаблоны/админ/MyModule. tpl:

{block name="page_title"} 
    {l s='Mon module'} 
{/block} 
<section > 
    <div>Hello world !</div> 
</section> 

Я создаю это с помощью компиляции большого количества учебников 1.7/1.6, но установка потерпеть неудачу. Prestashop предоставит нам документацию для создания первого модуля, но на самом деле это не документировано, и я не нашел ничего полезного в Интернете еще для 1.7.

Любая помощь/предложения?

Благодаря

EDIT1: Хорошо, установить правильно, моя вкладка создается, но когда я нажимаю на него вызывает «контроллер = MyModule» и контроллер модуль не найден. Практически завершенный.

+0

Вы не возвращаете true или false из метода 'install()'. – TheDrot

+0

@TheDrot спасибо, теперь установка не вернула ошибку, но мое меню также не отображается. –

+0

Вы получаете какие-либо ошибки? – TheDrot

ответ

1

Метод модуля install() должен возвращать true/false.

Что касается шаблона загрузки с ModuleAdminController

$this->createTemplate($template); 

пытается найти шаблон и загрузить первый найденный в:

  1. /current_theme/модули/yourmodule/просмотров/шаблоны/админ/
  2. /modules/yourmodule/views/templates/admin/

Поэтому, если вы вызываете createTemplate(), путь к нему добавляется в одну из двух вышеперечисленных папок, и он не находит ваш шаблон и выдает ошибку.

Переместите свой шаблон в modules/yourmodule/views/templates/admin/ и вызовите метод create только с именем шаблона.

$this->createTemplate('mymodule.tpl'); 
+0

спасибо, я также добавляю мой контроллер в свой модуль так, как вы говорите мне, чтобы добавить мой шаблон: module/mymodule/controller/admin/MymoduleController.php. но он не был найден. –

+0

«Контроллеры», а не «контроллер» ... мое плохое спасибо за помощь! –

1

Кажется, что что-то не так с функцией install() вашего модуля. Крюк, который вы регистрируете, также кажется неправильным. Попробуйте следующий код, он сработал для нас:

public function install() 
    { 
     if (!parent::install() || 
       !$this->registerHook('header')) { 
      return false; 
     } 
     if (Shop::isFeatureActive()) { 
      Shop::setContext(Shop::CONTEXT_ALL); 
     } 

     $lang = Language::getLanguages(); 
     $tab = new Tab(); 
     $tab->class_name = 'AdminTestimonialSetting'; 
     $tab->module = 'testimonial'; 
     $tab->id_parent = 2; 
     $tab->position = 6; 
     foreach ($lang as $l) { 
      $tab->name[$l['id_lang']] = $this->l('Testimonial'); 
     } 

     $tab->save(); 

     return true; 
    } 
Смежные вопросы