Пример создания справочника

Имя

Придумайте имя вашему справочнику, например example.

* При использовании данной инструкции меняйте все упоминания example, GuideExample, Пример на свои.

Структура файлов

+-- api
|   +-- app
|   |   +-- Guide
|   |   |   +-- Example
|   |   |   |   +-- ActionGet.php
|   |   |   |   +-- ActionIndex.php
|   |   |   |   +-- ActionInsert.php
|   |   |   |   +-- ActionRemove.php
|   |   |   |   +-- ActionSave.php
|   |   |   |   +-- OneRecord.php
+-- client-metronic
|   +-- src
|   |   +-- html
|   |   |   +-- pages
|   |   |   |   +-- guide
|   |   |   |   |   +-- example
|   |   |   |   |   |   +-- form.html
|   |   |   |   |   |   +-- list.html
|   |   |   |   |   |   +-- tpl-item.html
|   |   |   |   +-- guide_example.html
|   |   +-- js
|   |   |   +-- guide
|   |   |   |   +-- guideExample
|   |   |   |   |   +-- 0-start.js
|   |   |   |   |   +-- 100-init.js
|   |   |   |   |   +-- 200-_collectData.js
|   |   |   |   |   +-- 300-edit.js
|   |   |   |   |   +-- 300-insert.js
|   |   |   |   |   +-- 300-remove.js
|   |   |   |   |   +-- 300-save.js
|   |   |   |   |   +-- 300-showInsertForm.js

Готовый шаблон шаблон справочника

  1. Скачайте шаблон справочника Example.
  2. Распакуйте в любом каталоге.
  3. Поместите содержимое каталога guideExample/client-metronic в ваш каталог, где у вас client-metronic.
  4. Поместите содержимое каталога guideExample/api в ваш каталог, где у вас api.

Таблица в БД

-- Пример справочника
CREATE TABLE IF NOT EXISTS `guide_example` (
  `id`         INT(11)      NOT NULL AUTO_INCREMENT,
  `name`       VARCHAR(255) NULL,
  `created_at` DATETIME,
  `updated_at` DATETIME,
  `deleted_at` DATETIME,
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8
  COLLATE = utf8_unicode_ci;

client-metronic

  1. Добавим в файл /src/js/0-app/200-routes.js новый маршрут:
'/guide/example': function (params, query) {
    app.page = {
        name  : 'guide', // Всегда guide для всех справочников
        title : 'Пример | Справочник',
        onLoad: function () {
            lemurro.guide.init('example', 'guideExample');
        },
        params: params,
        query : query
    };
},
  1. Добавим в файл /src/html/pages/guide/menu.html новый пункт меню:
<li class="m-nav__item js-guide-link js-guide-link__example" data-active-class="m-nav__item--active">
    <a class="m-nav__link" href="/guide/example" data-navigo>
        <span class="m-nav__link-text">
            Пример
        </span>
    </a>
</li>

api

  1. Добавим в файл /app/Configs/SettingsGuides.php новый маршрут в константе CLASSES:
'example' => 'Example',

Сборка проекта

Перезапускаем gulp-задачу build-dev

Методы .insert(), .save(), .remove()

Если в эти методы не передать callback, тогда после выполнения операции будет выполнен встроенный в ядро код.

  • .insert()
    var container = $('#js-guide__items');
    container.prepend(lemurro.guide._templates.item(result.data));
    
    var row = container.find('tr[data-item-id="' + result.data.id + '"]');
    lemurro.helper.initBootstrapConfirmation(row, null);
    
    $('#js-guide__empty').hide();
    $('#js-guide__list').show();
    
    lemurro.tabs.tabInsertEdit('hide');
    
  • .save()
    var newRecord = $(lemurro.guide._templates.item(result.data));
    var row       = $('#js-guide__items').find('tr[data-item-id="' + result.data.id + '"]');
    
    row.html(newRecord.html());
    
    lemurro.helper.initBootstrapConfirmation(row, null);
    
    lemurro.tabs.tabInsertEdit('hide');
    
    swal('Выполнено', 'Запись успешно изменена', 'success');
    
  • .remove()
    var container = $('#js-guide__items');
    
    container.find('tr[data-item-id="' + result.data.id + '"]').remove();
    
    if (container.find('tr').length === 0) {
        $('#js-guide__empty').show();
        $('#js-guide__list').hide();
    }
    
    swal('Выполнено', 'Запись успешно удалена', 'success');
    

Если вы передаёте свой callback, тогда будет выполнен только он и не выполнится код указанный выше.