acf
This commit is contained in:
165
plugins/system/nrframework/fields/nrimagesselector.php
Normal file
165
plugins/system/nrframework/fields/nrimagesselector.php
Normal file
@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Advanced Custom Fields
|
||||
* @version 2.8.8 Pro
|
||||
*
|
||||
* @author Tassos Marinos <info@tassos.gr>
|
||||
* @link https://www.tassos.gr
|
||||
* @copyright Copyright © 2024 Tassos All Rights Reserved
|
||||
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\Form\Field\TextField;
|
||||
use Joomla\CMS\Layout\FileLayout;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\Registry\Registry;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use NRFramework\Functions;
|
||||
|
||||
class JFormFieldNRImagesSelector extends TextField
|
||||
{
|
||||
/**
|
||||
* Renders the Images Selector
|
||||
*
|
||||
* @return string The field input markup.
|
||||
*/
|
||||
protected function getInput()
|
||||
{
|
||||
$field_attributes = (array) $this->element->attributes();
|
||||
$attributes = isset($field_attributes["@attributes"]) ? $field_attributes["@attributes"] : null;
|
||||
$field_attributes = new Registry($attributes);
|
||||
|
||||
if (!$images = $field_attributes->get('images', ''))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$pro_items = array_filter(array_map('trim', explode(',', $field_attributes->get('pro_items', ''))));
|
||||
$columns = (int) $field_attributes->get('columns', 1);
|
||||
$item_width = $field_attributes->get('item_width', 'auto');
|
||||
$image_width = $field_attributes->get('image_width', '');
|
||||
$width = $field_attributes->get('width', '100%');
|
||||
$height = $field_attributes->get('height', '');
|
||||
$key_type = $field_attributes->get('key_type', null);
|
||||
$mode = $field_attributes->get('mode', null);
|
||||
$gap = $field_attributes->get('gap', '10px');
|
||||
$item_gap = $field_attributes->get('item_gap', null);
|
||||
|
||||
$class = [];
|
||||
|
||||
if (!empty($this->class))
|
||||
{
|
||||
$class[] = $this->class;
|
||||
}
|
||||
|
||||
$images = $this->parseImages($images, $mode);
|
||||
|
||||
// load CSS
|
||||
HTMLHelper::script('plg_system_nrframework/images-selector-field.js', ['relative' => true, 'version' => true]);
|
||||
HTMLHelper::stylesheet('plg_system_nrframework/images-selector-field.css', ['relative' => true, 'version' => true]);
|
||||
|
||||
$layout = new FileLayout('imagesselector', JPATH_PLUGINS . '/system/nrframework/layouts');
|
||||
|
||||
$data = [
|
||||
'value' => !empty($this->value) ? $this->value : $this->default,
|
||||
'name' => $this->name,
|
||||
'class' => implode(' ', $class),
|
||||
'key_type' => $key_type,
|
||||
'images' => $images,
|
||||
'columns' => $columns,
|
||||
'id' => $this->id,
|
||||
'required' => $this->required,
|
||||
'item_width' => $item_width,
|
||||
'image_width' => $image_width,
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'mode' => $mode,
|
||||
'gap' => $gap,
|
||||
'item_gap' => $item_gap,
|
||||
'pro_items' => $pro_items
|
||||
];
|
||||
|
||||
return $layout->render($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse images.
|
||||
*
|
||||
* @param array $images
|
||||
* @param string $mode
|
||||
*/
|
||||
private function parseImages($images = [], $mode = null)
|
||||
{
|
||||
// Links
|
||||
if ($mode === 'links')
|
||||
{
|
||||
$images = json_decode($images, true);
|
||||
|
||||
$site_url = Uri::root();
|
||||
|
||||
// Replace {{SITE_URL}}
|
||||
foreach ($images as &$image)
|
||||
{
|
||||
$image['url'] = str_replace('{{SITE_URL}}', $site_url, $image['url']);
|
||||
}
|
||||
|
||||
return $images;
|
||||
}
|
||||
|
||||
// Paths to images
|
||||
$paths = explode(',', $images);
|
||||
|
||||
$images = [];
|
||||
foreach ($paths as $key => $path)
|
||||
{
|
||||
// skip empty paths
|
||||
if (empty(rtrim(ltrim($path, ' '), ' ')))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($imgs = $this->getImagesFromPath($path))
|
||||
{
|
||||
// add new images to array of images
|
||||
$images = array_merge($images, $imgs);
|
||||
}
|
||||
else
|
||||
{
|
||||
// check if image exist
|
||||
if (file_exists(JPATH_ROOT . '/' . ltrim($path, ' /')))
|
||||
{
|
||||
// add new image to array of images
|
||||
$images[] = ltrim($path, ' /');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $images;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all images in path
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private function getImagesFromPath($path)
|
||||
{
|
||||
$folder = JPATH_ROOT . '/' . ltrim($path, ' /');
|
||||
|
||||
if (!is_dir($folder) || !$folder_files = scandir($folder))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$images = array_diff($folder_files, array('.', '..', '.DS_Store'));
|
||||
$images = array_values($images);
|
||||
|
||||
// prepend path to image file names
|
||||
array_walk($images, function(&$value, $key) use ($path) { $value = ltrim($path, ' /') . '/' . $value; } );
|
||||
|
||||
return $images;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user