PHP code example of s2hub / silverstripe-cms-popup

1. Go to this page and download the library: Download s2hub/silverstripe-cms-popup library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

s2hub / silverstripe-cms-popup example snippets


use S2Hub\CmsPopup\Handler\CmsPopupSearchHandler;
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;

class MySearchHandler extends CmsPopupSearchHandler
{
    public function getSearchFormFields(): FieldList
    {
        return FieldList::create(
            TextField::create('q', 'Search')->setAttribute('autofocus', 'autofocus'),
        );
    }

    public function search(string $query, HTTPRequest $request): string
    {
        $results = MyRecord::get()->filter('Title:PartialMatch', $query);
        $html = '';
        foreach ($results as $record) {
            $payload = htmlspecialchars(json_encode(['id' => $record->ID, 'title' => $record->Title]), ENT_QUOTES);
            $html .= "<button type='button' data-cms-select='{$payload}'>{$record->Title}</button>";
        }
        return $html ?: '<p>No results found.</p>';
    }

    // Optional: override minimum query length (default: 2)
    public function getMinQueryLength(): int { return 1; }
}

use S2Hub\CmsPopup\Forms\CmsModalSearchAction;

$action = CmsModalSearchAction::forHandler(MySearchHandler::class)
    ->setModalTitle('Select a record')
    ->setModalSize('md');

$action = CmsModalSearchAction::forHandler(MySearchHandler::class)
    ->setModalTitle('Select a record')
    ->setModalData([
        'autoSearch'   => true,
        'initialQuery' => 'some term',
    ]);

use S2Hub\CmsPopup\Handler\CmsPopupBatchHandler;
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Control\HTTPResponse;
use SilverStripe\Forms\FieldList;

class MyBatchHandler extends CmsPopupBatchHandler
{
    public function getBatchFormFields(): FieldList
    {
        return FieldList::create(/* your fields */);
    }

    public function getQueueItems(HTTPRequest $request): array
    {
        return [
            ['id' => 1, 'title' => 'Item A'],
            ['id' => 2, 'title' => 'Item B'],
        ];
    }

    public function processItem(HTTPRequest $request): HTTPResponse
    {
        $body = json_decode($request->getBody(), true);
        $record = MyRecord::get()->byID($body['id']);
        if (!$record) {
            return CmsPopupBatchResponse::error('Not found');
        }
        $record->doSomething();
        return CmsPopupBatchResponse::success('Done');
    }
}

use S2Hub\CmsPopup\Forms\CmsModalBatchAction;

$action = CmsModalBatchAction::forHandler(MyBatchHandler::class, ['pageID' => $this->ID])
    ->setModalTitle('Run batch')
    ->setSubmitLabel('Start');

use S2Hub\CmsPopup\Http\CmsPopupBatchResponse;
use S2Hub\CmsPopup\Http\CmsPopupBatchDetail;

return CmsPopupBatchResponse::success('Processed', [
    CmsPopupBatchDetail::info('en_US', 'OK'),
]);
return CmsPopupBatchResponse::warning('Skipped', []);
return CmsPopupBatchResponse::error('Failed', [
    CmsPopupBatchDetail::error('de_DE', 'API error'),
]);

use S2Hub\CmsPopup\Handler\CmsPopupHandler;
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
use SilverStripe\ORM\DataObject;

class MyRecordPopup extends CmsPopupHandler
{
    public function getRecord(HTTPRequest $request): DataObject
    {
        return MyRecord::get()->byID((int) $request->getVar('recordID'));
    }

    public function getFields(DataObject $record): FieldList
    {
        return FieldList::create(
            HTMLEditorField::create('Content', 'Content')->setRows(8),
        );
    }

    // Optional overrides:
    // public function save(DataObject $record, array $data, Form $form): void { ... }
    // public function canAccess(DataObject $record): bool { return $record->canEdit(); }
}

use S2Hub\CmsPopup\Forms\CmsModalFormSchemaAction;

$action = CmsModalFormSchemaAction::forHandler(MyRecordPopup::class, ['recordID' => $this->ID])
    ->setModalTitle('Edit record')
    ->setModalSize('lg');

use S2Hub\CmsPopup\GridField\CmsPopupGridFieldColumn;

$config->addComponent(new CmsPopupGridFieldColumn(
    MyRecordPopup::class,
    'recordID',           // query parameter name for the record ID
    'Edit record'         // column tooltip / modal title
));

use S2Hub\CmsPopup\Forms\CmsModalAction;

$action = CmsModalAction::create('showInfo', 'Show details')
    ->setModalComponent('CmsModalContent')
    ->setModalTitle('Information')
    ->setModalData(['url' => $this->Link('infoHtml')]);

$action->setButtonIcon('font-icon-search');
$action->setButtonIcon('font-icon-sync');

$hiddenId    = HiddenField::create('MyRecordID');
$hiddenTitle = ReadonlyField::create('MyRecordTitle', 'Selected record');

$search = CmsModalSearchAction::forHandler(MySearchHandler::class)
    ->setModalTitle('Choose record');

$action->setModalComponent('MyCustomModal');
$action->setModalData(['someParam' => 'value']);