Giter VIP home page Giter VIP logo

ps.d7's Introduction

Генератор админки

Предупреждение

Модуль не предназначен для рядовых пользователей. Используйте его, только если вы понимаете, что делать. В противном случае, пожалуйста, обратитесь к специалисту.

Зачем?

Таблицы на D7 создаются практически в каждом проекте, но иногда необходимо реализовывать интерфейс для них.

Чтобы не копипастить каждый раз из проекта в проект страницы в админке для управления таблицами и был создан модуль.

Подключение своей таблицы

Чтобы модуль узнал про вашу таблицу D7, необходимо зарегистрировать обработчик

<?php

use Bitrix\Main\Loader;
use Bitrix\Main\Event;
use Bitrix\Main\EventManager;
use Bitrix\Main\EventResult;

$event = EventManager::getInstance();
$event->addEventHandler('ps.d7', 'onGetEntityList', 'registerMyEntity');

function registerMyEntity() {
    // Если подключаете таблицу из стороннего модуля
    Loader::includeSharewareModule('ps.demo');
    
    return [
        // Классы всех сущностей, для которых нужно будет управление
        new Bitrix\Main\UserTable(),
        new Ps\Demo\ORM\DemoTable(),
    ];
}

Кастомные поля

Все поля должны наследовать Bitrix\Main\ORM\Fields\ScalarField.

Модуль по умолчанию поддерживает следующие поля:

  • Bitrix\Main\ORM\Fields\EnumField
  • Bitrix\Main\ORM\Fields\BooleanField
  • Bitrix\Main\ORM\Fields\DateField
  • Bitrix\Main\ORM\Fields\DatetimeField
  • Bitrix\Main\ORM\Fields\TextField
  • Ps\D7\Fields\FileField
  • Ps\D7\Fields\D7EntityField
  • Bitrix\Main\ORM\Fields\StringField

Иногда может потребоваться собственное поле, рассмотрим добавление кастомного поля на примере D7EntityField

<?php

namespace Ps\D7\Fields;

use Bitrix\Main\ORM\Fields\ScalarField;

class D7EntityField extends ScalarField
{
    public function cast($value) {
        return $value;
    }

    public function convertValueFromDb($value) {
        return $this->getConnection()->getSqlHelper()->convertFromDbString($value);
    }

    public function convertValueToDb($value) {
        return $this->getConnection()->getSqlHelper()->convertToDbString($value);
    }
}

В таблице D7 указываем наше поле

<?php

namespace Ps\D7\ORM;

use Bitrix\Main\Entity\DataManager;
use Bitrix\Main\SystemException;
use Ps\D7\Fields\D7EntityField;

class EntityTable extends DataManager
{
    // ...

    public static function getMap() {
        try {
            return [
                new D7EntityField('ENTITY', [
                    'title' => 'Сущность',
                ]),
            ];
        } catch (SystemException $e) {
        }

        return [];
    }
}

Регистрируем обработчик:

<?php

use Bitrix\Main\EventResult;
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Ps\D7\Fields\D7EntityField;

$event = EventManager::getInstance();
$event->addEventHandler('ps.d7', 'onGetCustomFields', 'registerCustomField');

function registerCustomField() {
    return [
        D7EntityField::class => 'addEntityHandler'
    ];
}

/**
 * @param $tabControl CAdminForm
 * @param $field Bitrix\Main\ORM\Fields\ScalarField
 * @param $value
 */
function addEntityHandler($tabControl, $field, $value) {
    $classes = [];
    foreach (get_declared_classes() as $class) {
        if (is_subclass_of($class, '\\Bitrix\\Main\\ORM\\Data\\DataManager')) {
            $classes[$class] = $class;
        }
    }

    $tabControl->AddDropDownField($field->getName(), $field->getTitle(), $field->isRequired(),
        $classes, $value);
}

Модификация данных

Иногда может потребоваться изменить тип данных перед добавлением или обновлением, например, для поля DatetimeField:

Модуль по умолчанию модифицирует следующие типы данных:

  • Bitrix\Main\ORM\Fields\BooleanField
  • Bitrix\Main\ORM\Fields\DateField
  • Bitrix\Main\ORM\Fields\DatetimeField
<?php

use Bitrix\Main\EventResult;
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Bitrix\Main\ORM\Fields\DatetimeField;

$event = EventManager::getInstance();
$event->addEventHandler('ps.d7', 'registerCustomModifier', 'registerCustomModifierHandler');

function registerCustomModifierHandler(Event $event) {
    $event->addResult(new EventResult(EventResult::SUCCESS, [
        'ENTITY' => DatetimeField::class,
        'HANDLER' => 'customDateTimeHandler',
    ]));

    return $event;
}


function customDateTimeHandler($value) {
    return new \Bitrix\Main\Type\DateTime($value);
}

ps.d7's People

Contributors

saundefined avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

ps.d7's Issues

[BUG]

1.)
admin/edit.php (349) 'back_url' => 'ps_d7_list.php?......
такого пути нет должен наверное быть 'back_url' => 'ps_d7_admin.php?......
2.)при установке из папки local из коробки не работает:
install/admin/ оба файла ссылаются на '/bitrix/modules/ps.d7/admin/..........
я уже привык все устанавливать в local, она специально придумана для удобства версирования в .gitignore исключаешь /bitrix и все... и мне пришлось переписывать эти строки на '/local/modules/ps.d7/admin/.........

в остальном модуль понравился... хотелось даже продолжить... нашел его потому что искал модуль для редактирования
элемента сущности из админки. в частности нужно например сменить файл у элемента сущности ... в поле записан id файла...
т.е. просто отредактировать запись таблице можно и здесь admin/perfmon_table.php но
для обыкновенного контент менеджера залить новый файл в элемент это целый геморрой. надо ему пилить интерфейс... думал что есть готовые

Поддержка полей типа Файл

Добрый вечер. Погонял маленько - хорошая штука, но не хватает некоторых нюансов. Например, поддержки свойств типа Файл в режиме редактирования.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.