module-toolkit / table-manager
N/A
Installs: 3
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:magento2-module
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>