mirror of
https://github.com/a2nt/silverstripe-elemental-basics.git
synced 2024-10-22 17:05:54 +02:00
IMPR: next/prev buttons for elements
This commit is contained in:
parent
9a52725ebd
commit
a29dbde9d0
@ -21,7 +21,8 @@
|
||||
"gorriecoe/silverstripe-linkfield": "*",
|
||||
"lekoala/silverstripe-filepond": "*",
|
||||
"symbiote/silverstripe-addressable": "*",
|
||||
"a2nt/silverstripe-mapboxfield": "*"
|
||||
"a2nt/silverstripe-mapboxfield": "*",
|
||||
"lekoala/silverstripe-cms-actions": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
@ -15,6 +15,9 @@ use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use DNADesign\Elemental\Models\ElementalArea;
|
||||
use LeKoala\CmsActions\CmsInlineFormAction;
|
||||
use LeKoala\CmsActions\HasPrevNextUtils;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
@ -125,4 +128,97 @@ class BaseElementEx extends DataExtension
|
||||
self::MoveElementToPage($el->ID, $moveID);
|
||||
}
|
||||
}
|
||||
|
||||
public function onAfterUpdateCMSActions(FieldList $fields)
|
||||
{
|
||||
self::addPrevNextUtils($this->owner, $fields);
|
||||
}
|
||||
|
||||
public function PrevRecord()
|
||||
{
|
||||
$obj = $this->owner;
|
||||
$parent = $obj->Parent();
|
||||
if (!$parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
$els = $parent->Elements();
|
||||
if (!$els) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $els->filter('Sort:LessThan', $obj->Sort)->first();
|
||||
}
|
||||
|
||||
public function NextRecord()
|
||||
{
|
||||
$obj = $this->owner;
|
||||
$parent = $obj->Parent();
|
||||
if (!$parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
$els = $parent->Elements();
|
||||
if (!$els) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $els->filter('Sort:GreaterThan', $obj->Sort)->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FieldList $utils
|
||||
* @return FieldList
|
||||
*/
|
||||
public static function addPrevNextUtils($obj, FieldList $utils)
|
||||
{
|
||||
$controller = Controller::curr();
|
||||
$request = $controller->getRequest();
|
||||
$url = rtrim($request->getURL(), '/') . '/';
|
||||
|
||||
$query = $_GET;
|
||||
if (!empty($query)) {
|
||||
$url .= '?' . http_build_query($query);
|
||||
}
|
||||
|
||||
$routeParams = $request->routeParams();
|
||||
$recordClass = get_class($obj);
|
||||
|
||||
$getPreviousRecordID = $routeParams['cmsactions'][$recordClass]['PreviousRecordID'] ?? $request->param('PreviousRecordID');
|
||||
$getNextRecordID = $routeParams['cmsactions'][$recordClass]['NextRecordID'] ?? $request->param('NextRecordID');
|
||||
|
||||
$search = sprintf('/%d/', $obj->ID);
|
||||
$replaceStr = '/%d/';
|
||||
$PrevRecordLink = $routeParams['cmsactions'][$recordClass]['PrevRecordLink'] ?? null;
|
||||
$NextRecordLink = $routeParams['cmsactions'][$recordClass]['NextRecordLink'] ?? null;
|
||||
if (!$PrevRecordLink) {
|
||||
$PrevRecordLink = str_replace($search, sprintf($replaceStr, $getPreviousRecordID), $url);
|
||||
}
|
||||
if (!$NextRecordLink) {
|
||||
$NextRecordLink = str_replace($search, sprintf($replaceStr, $getNextRecordID), $url);
|
||||
}
|
||||
|
||||
if ($obj->ID && $getNextRecordID) {
|
||||
$utils->unshift(
|
||||
$NextBtnLink = new CmsInlineFormAction(
|
||||
'NextBtnLink',
|
||||
_t('HasPrevNextUtils.Next', 'Next') . ' >',
|
||||
'btn-secondary'
|
||||
)
|
||||
);
|
||||
$NextBtnLink->setLink($NextRecordLink);
|
||||
}
|
||||
if ($obj->ID && $getPreviousRecordID) {
|
||||
$utils->unshift(
|
||||
$PrevBtnLink = new CmsInlineFormAction(
|
||||
'PrevBtnLink',
|
||||
'< ' . _t('HasPrevNextUtils.Previous', 'Previous'),
|
||||
'btn-secondary'
|
||||
)
|
||||
);
|
||||
$PrevBtnLink->setLink($PrevRecordLink);
|
||||
}
|
||||
|
||||
return $utils;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user