esign / craft-cms-crud
This module contains the basic CRUD programmatically functions for Craft CMS
Requires
- php: ^8.1
- craftcms/cms: ^5.0
This package is not auto-updated.
Last update: 2026-03-12 14:24:36 UTC
README
This module contains the basic CRUD functions for Craft CMS
Installation
You can install the package via composer, and Craft to install it:
composer require esign/craft-cms-crud && php craft plugin/install craft-cms-crud
Usage
updateOrCreateEntry
Currently there is only one function and that is updateOrCreateEntry, this can update an entry with all his fields (fields, matrix blocks & nested entries)
$entry has to be an instance of esign\craftcmscrud\support\CraftEntry then we are sure all fields can be mapped right
use esign\craftcmscrud\controllers\CraftEntryController;
class YourController extends CraftEntryController
{
CraftEntryController::updateOrCreateEntry($entry);
}
Entry Objects
CraftEntry.php
use esign\craftcmscrud\support\CraftEntry;
new CraftEntry(
$handle,
$identifier,
$fields,
$matrixBlocks,
$nestedEntries
)
$handle -> expects your section handle name
$identifier -> expects your identifier for that entry (used for updating an entry instead of creating one)
$fields -> expects a stdClass of your entry fields (including title & slug) OR an array of stdClasses of your entry fields (this is used for nested entries more on this later)
$matrixBlocks -> expects an array of CraftMatrixBlock classes (see section CraftMatrixBlock)
$nestedEntries -> expects an array of CraftEntry classes
CraftMatrixBlock.php
use esign\craftcmscrud\support\CraftMatrixBlock;
new CraftMatrixBlock(
$handle,
$handleBlock,
$fields
)
$handle -> expects your field handle name
$handleBlock -> expects your matrix block handle name
$fields -> expects an array of stdClasses of your matrix fields
CraftAsset.php
use esign\craftcmscrud\support\CraftAsset;
new CraftAsset(
$handle,
$imageUrl,
$filename,
$path,
)
$handle -> expects your field handle name
$imageUrl -> expects your external image url
$filename -> expects filename
$path -> expects the path of your asset field
Example
use esign\craftcmscrud\controllers\CraftEntryController;
use esign\craftcmscrud\support\CraftEntry;
use esign\craftcmscrud\support\CraftMatrixBlock;
CraftEntryController::updateOrCreateEntry(
new CraftEntry(
self::HANDLE_CLUB,
self::IDENTIFIER_CLUB,
ClubModel::fieldsFromClub($club),
[
new CraftMatrixBlock(
self::HANDLE_OPENING_HOURS,
self::HANDLE_OPENING_HOURS_BLOCK,
$club->{self::HANDLE_OPENING_HOURS}
),
...
],
[
new CraftEntry(
self::HANDLE_CLUB_TAGS,
self::IDENTIFIER_CLUB_TAGS,
ClubModel::collectionFieldsFromClubTags($club->{self::HANDLE_CLUB_TAGS})
),
...
],
[
new CraftAsset(
self::HANDLE_IMAGE,
$contract->mlContractImageUrl,
StringHelper::beforeFirst(StringHelper::afterLast($contract->mlContractImageUrl, '/'), '?'),
self::HANDLE_IMAGE_PATH
)
],
),
);
parseNestedMatrixBlocks
use esign\craftcmscrud\controllers\CraftEntryController;
use esign\craftcmscrud\support\CraftEntry;
use esign\craftcmscrud\support\CraftMatrixBlock;
public const MATRIX_BLOCKS_CONTRACT_TERM = [
'mlTermPriceAdjustmentRules' => 'mlPriceBlock',
'mlTermFlatFees' => 'mlFeeBlock',
'mlTermOptionalModules' => 'mlOptionalBlock',
'mlTermRateBonusPeriods' => 'mlBonusBlock',
];
CraftEntryController::updateOrCreateEntry(
new CraftEntry(
self::HANDLE_CONTRACT,
self::IDENTIFIER_CONTRACT,
Entry::fieldsFromContract($contract),
null,
[
new CraftEntry(
self::HANDLE_CONTRACT_TERM,
self::IDENTIFIER_CONTRACT_TERM,
Entry::collectionFieldsFromContractTerms(
$contract->{self::HANDLE_CONTRACT_TERM}
),
CraftEntryController::parseNestedMatrixBlocks(
$contract->{self::HANDLE_CONTRACT_TERM},
self::MATRIX_BLOCKS_CONTRACT_TERM
),
),
],
),
);
CraftEntryController::parseNestedMatrixBlocks() is used to parse the nested matrix blocks.
MATRIX_BLOCKS_CONTRACT_TERM is the $sectionHandle => $blockHandle