module-toolkit / table-manager
N/A
Installs: 10
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:magento2-module
pkg:composer/module-toolkit/table-manager
Requires
- php: ~8.1.0||~8.2.0
- magento/framework: 103.0.*
- magento/module-backend: 102.0.*
- magento/module-config: 101.2.*
- magento/module-store: 101.1.*
- module-toolkit/config-provider-helper: *
README
etc/di.xml
<virtualType name="Vendor\Module\Model\GetConnectionName"
type="ModuleToolkit\TableManager\TableManager\GetConnectionName">
<arguments>
<argument name="connectionName" xsi:type="string">default</argument>
<!-- use connectionName or set config path below -->
<argument name="connectionNameConfigPath" xsi:type="const">ModuleToolkit\ApiAppImportAcesData\Api\ConstraintsInterface::XML_PATH_DB_CONNECTION</argument>
</arguments>
</virtualType>
<!-- Create table manager -->
<virtualType name="Vendor\Module\Model\CustomTableManager"
type="ModuleToolkit\TableManager\TableManager\TableManager">
<arguments>
<argument name="getTableName" xsi:type="object">Vendor\Module\Model\GetCustomTableName</argument>
<argument name="tableCreator" xsi:type="object">Vendor\Module\Model\CustomTableCreator</argument>
<argument name="getConnectionName" xsi:type="object">Vendor\Module\Model\GetConnectionName</argument>
</arguments>
</virtualType>
<!-- Get table name class -->
<virtualType name="Vendor\Module\Model\GetCustomTableName"
type="ModuleToolkit\TableManager\TableManager\GetTableName">
<arguments>
<argument name="baseTableName" xsi:type="const">\Vendor\Module\Api\ConstraintsInterface::PARTS_MAKE_YEAR_TABLE</argument>
<argument name="dimensions" xsi:type="array">
<item name="test" xsi:type="object">Vendor\Module\Model\TestDimension</item>
</argument>
</arguments>
</virtualType>
<!-- DIMENSION -->
<virtualType name="Vendor\Module\Model\TestDimension"
type="ModuleToolkit\TableManager\TableManager\TableDimension">
<arguments>
<argument name="key" xsi:type="string">test</argument>
<argument name="sortOrder" xsi:type="number">10</argument>
</arguments>
</virtualType>
<!-- table creator class + structure to create table on the fly (by dimensions)-->
<virtualType name="Vendor\Module\Model\CustomTableCreator"
type="ModuleToolkit\TableManager\TableManager\TableCreator">
<arguments>
<argument name="installColumns" xsi:type="array">
<item name="entity_id" xsi:type="array">
<item name="key" xsi:type="string">entity_id</item>
<item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER</item>
<item name="options" xsi:type="array">
<item name="identity" xsi:type="boolean">true</item>
<item name="unsigned" xsi:type="boolean">true</item>
<item name="nullable" xsi:type="boolean">false</item>
<item name="primary" xsi:type="boolean">true</item>
</item>
<item name="comment" xsi:type="string">Entity Id</item>
</item>
<item name="make" xsi:type="array">
<item name="key" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
<item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_TEXT</item>
<item name="size" xsi:type="number">50</item>
<item name="options" xsi:type="array">
<item name="nullable" xsi:type="boolean">false</item>
</item>
<item name="comment" xsi:type="string">Make</item>
</item>
<item name="year" xsi:type="array">
<item name="key" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
<item name="type" xsi:type="const">\Magento\Framework\DB\Ddl\Table::TYPE_TEXT</item>
<item name="size" xsi:type="number">50</item>
<item name="options" xsi:type="array">
<item name="nullable" xsi:type="boolean">false</item>
</item>
<item name="comment" xsi:type="string">Year</item>
</item>
</argument>
<argument name="installIndexes" xsi:type="array">
<item name="index_data" xsi:type="array">
<item name="fields" xsi:type="array">
<item name="make" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
<item name="year" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
</item>
<item name="indexType" xsi:type="const">\Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE</item>
</item>
</argument>
<argument name="foreignKeys" xsi:type="array">
<item name="customer_id" xsi:type="array">
<item name="priTableName" xsi:type="object">Vendor\Module\Model\GetCustomTableName</item>
<item name="priColumnName" xsi:type="const">Vendor\Module\Api\WheelCustomerConstraintsInterface::CUSTOMER_ID</item>
<item name="refTableName" xsi:type="string">customer_entity</item>
<item name="refColumnName" xsi:type="string">entity_id</item>
<item name="onDelete" xsi:type="const">\Magento\Framework\DB\Ddl\Table::ACTION_CASCADE</item>
</item>
</argument>
<argument name="tableComment" xsi:type="string">Make-Year Parts Map</argument>
</arguments>
</virtualType>
<type name="Namespace\Custom\CustomModel">
<arguments>
<argument name="tableManager" xsi:type="object">Vendor\Module\Model\CustomTableManager</argument>
</arguments>
</type>
- Adminhtml Grid, Pager
- etc/adminhtml/di.xml
<type name="Vendor\Module\Block\Adminhtml\Container">
<arguments>
<argument name="tableManager" xsi:type="object">Vendor\Module\Model\CustomTableManager</argument>
<argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
</arguments>
</type>
<virtualType name="Vendor\Module\Model\CustomPagerConfig"
type="ModuleToolkit\AdminhtmlHelper\Model\PagerConfig">
<arguments>
<argument name="request" xsi:type="object">ModuleToolkit\AdminhtmlHelper\Model\HttpRequest</argument>
<argument name="gridCollection" xsi:type="object">Vendor\Module\Model\CustomGridCollection</argument>
<argument name="filters" xsi:type="array">
<item name="make" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::MAKE</item>
<item name="year" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::YEAR</item>
<item name="entity_id" xsi:type="const">Vendor\Module\Api\ConstraintsInterface::ENTITY_ID</item>
</argument>
</arguments>
</virtualType>
<type name="Vendor\Module\Block\Adminhtml\CustomGrid">
<arguments>
<argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
<argument name="openFormUrl" xsi:type="string">custom/vendor/openform</argument>
<argument name="deleteFormUrl" xsi:type="string">custom/vendor/delete</argument>
</arguments>
</type>
<virtualType
name="Vendor\Module\Block\Adminhtml\CustomForm"
type="ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Form">
<arguments>
<argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
<argument name="formSaveUrl" xsi:type="string">custom/vendor/saveform</argument>
<argument name="columns" xsi:type="object">ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Form\Columns</argument>
<argument name="identityColumn" xsi:type="string">entity_id</argument>
</arguments>
</virtualType>
<type name="Vendor\Module\Block\Adminhtml\CustomPager">
<arguments>
<argument name="pagerConfig" xsi:type="object">Vendor\Module\Model\CustomPagerConfig</argument>
</arguments>
</type>
<type name="Vendor\Module\Controller\Adminhtml\Custom\OpenForm">
<arguments>
<argument name="form" xsi:type="object">Vendor\Module\Block\Adminhtml\CustomForm</argument>
</arguments>
</type>
- Layout
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block name="custom.list"
class="Vendor\Module\Block\Adminhtml\Custom"
template="Vendor_Module::custom.phtml"
>
<block name="custom.grid" class="Vendor\Module\Block\Adminhtml\CustomGrid"/>
<block name="custom.pager" class="Vendor\Module\Block\Adminhtml\CustomPager"/>
</block>
</referenceContainer>
</body>
</page>
- Template
<?= $block->getChildHtml('custom.grid'); ?>
<?= $block->getChildHtml('custom.pager'); ?>
- Import Function
<type name="ModuleToolkit\AdminhtmlHelper\Model\ImportProcessor">
<arguments>
<argument name="importConfigs" xsi:type="array">
<item name="wheel_fitment_import_config" xsi:type="object">Vendor\Module\Import\CustomImportConfig</item>
</argument>
</arguments>
</type>
<virtualType name="Vendor\Module\Import\CustomImportConfig"
type="ModuleToolkit\AdminhtmlHelper\Model\ImportConfig">
<arguments>
<argument name="saveHandler" xsi:type="object">Vendor\Module\Import\CustomSaverHandler</argument>
<argument name="identity" xsi:type="string">custom_config</argument>
<argument name="importExampleFile" xsi:type="string">Vendor_Module::data/import-example/custom-example.csv</argument>
</arguments>
</virtualType>
<virtualType name="Vendor\Module\Block\Adminhtml\CustomImport"
type="ModuleToolkit\AdminhtmlHelper\Block\Adminhtml\Import"
>
<arguments>
<argument name="importConfigIdentity" xsi:type="string">custom_config</argument>
</arguments>
</virtualType>
- Layout
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block name="custom.list"
class="Vendor\Module\Block\Adminhtml\Custom"
template="Vendor_Module::custom.phtml"
>
<block name="custom.grid" class="Vendor\Module\Block\Adminhtml\CustomGrid"/>
<block name="custom.pager" class="Vendor\Module\Block\Adminhtml\CustomPager"/>
</block>
</referenceContainer>
</body>
</page>
- Template
```phtml
<?= $block->getChildHtml('custom.import'); ?>
Usage
namespace Vendor\Module;
use ModuleToolkit\TableManager\TableManager\TableManagerInterface;
class CustomModel
{
public function __construct(
protected TableManagerInterface $tableManager
){}
public function getItems() {
$tableRequest = $this->tableManager->getTableRequest();
$tableRequest->setValue('test', 'value');
$tableRequest->setValue('column_key', 'value');
$tableRequest->setValue('column_key2', 'value2');
$tableRequest->setSortOrder('column_key2', 'DESC');
$tableRequest->setSortOrder('column_key1', 'ASC');
$tableRequest->setGroup('column_key3');
$result = $this->tableManager->getItems($tableRequest);
}
public function createItem() {
$tableRequest = $this->tableManager->getTableRequest();
$tableRequest->setValue('test', 'value');
$wheelFitmentManager->createItem($tableRequest, $this->getFakeWheelItem());
}
public function updateItem() {
$tableRequest = $this->tableManager->getTableRequest();
$tableRequest->setValue('test', 'value');
$entityId = 4;
$wheelFitmentManager->createItem($tableRequest, $this->getFakeWheelItem(), $entityId, 'entity_id');
}
}
Helpful method for define primary keys for list by unique keys
php \ModuleToolkit\TableManager\TableManager\TableManager::findMatchingRecords(TableRequest $request, array $columns)
Table Creator via console command
- di.xml
<virtualType name="ModuleToolkit\Custom\Model\CustomTableManager"
type="ModuleToolkit\TableManager\TableManager\TableManager">
<arguments>
<argument name="getTableName" xsi:type="object">....</argument>
<argument name="tableCreator" xsi:type="object">...</argument>
<argument name="getConnectionName" xsi:type="object">...</argument>
</arguments>
</virtualType>
<type name="ModuleToolkit\TableManager\TableManager\TableCreatorRunner">
<arguments>
<argument name="createWraps" xsi:type="array">
<item name="custom_creator_type" xsi:type="object">ModuleToolkit\Custom\CustomCreateType</item>
<item name="custom_recreator_type" xsi:type="object">ModuleToolkit\Custom\CustomReCreateType</item>
</argument>
</arguments>
</type>
<virtualType name="ModuleToolkit\Custom\CustomCreateType" type="ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateType">
<arguments>
<argument name="type" xsi:type="const">ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateTypeInterface::CREATE</argument>
<argument name="tableManager" xsi:type="object">ModuleToolkit\Custom\Model\CustomTableManager</argument>
</arguments>
</virtualType>
<virtualType name="ModuleToolkit\Custom\CustomReCreateType" type="ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateType">
<arguments>
<argument name="type" xsi:type="const">ModuleToolkit\TableManager\TableManager\TableCreatorRunner\TableCreateTypeInterface::RECREATE</argument>
<argument name="tableManager" xsi:type="object">ModuleToolkit\Custom\Model\CustomTableManager</argument>
</arguments>
</virtualType>