В следующем обновлении хотелось бы увидеть вот такое поле для виджета "слайдер"
У себя я уже сделал, но не хочется иметь костыль в системных файлах, который при следующих обновлениях перестанет работать. Собственно вот исходники:
options.form.php
<?php
class formWidgetContentSliderOptions extends cmsForm {
public function init() {
'type' => 'fieldset',
'title' => LANG_OPTIONS,
new fieldList
('options:ctype_id', array( 'title' => LANG_CONTENT_TYPE,
'generator' => function($item) {
$model = cmsCore::getModel('content');
$tree = $model->getContentTypes();
if ($tree) {
foreach ($tree as $item) {
$items[$item['id']] = $item['title'];
}
}
return $items;
}
)),
new fieldString
('options:dataset', array( 'title' => LANG_WD_CONTENT_SLIDER_DATASET
)),
new fieldString
('options:image_field', array( 'title' => LANG_WD_CONTENT_SLIDER_IMAGE,
)
)),
new fieldString
('options:teaser_field', array( 'title' => LANG_WD_CONTENT_SLIDER_TEASER
)),
new fieldList
('options:style', array( 'title' => LANG_WD_CONTENT_SLIDER_STYLE,
'default' => 'basic',
'basic' => LANG_WD_CONTENT_SLIDER_STYLE_BASIC,
'featured' => LANG_WD_CONTENT_SLIDER_STYLE_FEATURED
)
)),
new fieldNumber
('options:delay', array( 'title' => LANG_WD_CONTENT_SLIDER_DELAY,
'hint' => LANG_WD_CONTENT_SLIDER_DELAY_HINT,
'default' => 5,
'units' => LANG_SECOND10
)),
new fieldNumber
('options:limit', array( 'title' => LANG_LIST_LIMIT,
'default' => 4,
)
)),
)
),
);
}
}
widget.php
<?php
class widgetContentSlider extends cmsWidget {
public function run(){
$ctype_id = $this->getOption('ctype_id');
$dataset = $this->getOption('dataset');
$image_field = $this->getOption('image_field');
$teaser_fields = $this->getOption('teaser_field');
$style = $this->getOption('style', 'basic');
$limit = $this->getOption('limit', 10);
$style = $this->getOption('style', 'basic');
$delay = $this->getOption('delay', 5);
$model = cmsCore::getModel('content');
$ctype = $model->getContentType($ctype_id);
if (!$ctype) { return false; }
if ($dataset){
$datasets = $model->getContentDatasets($ctype['id']);
if (isset($datasets[ $dataset ])){ $model->applyDatasetFilters($datasets[ $dataset ]);
} else {
$dataset = false;
}
}
if (!$dataset){
$model->orderBy('date_pub', 'desc');
}
// Отключаем фильтр приватности для тех кому это разрешено
if (cmsUser::isAllowed($ctype['name'], 'view_all')) {
$model->disablePrivacyFilter();
}
// Скрываем записи из скрытых родителей (приватных групп и т.п.)
$model->filterHiddenParents();
$items = $model->
limit($limit)->
getContentItems($ctype['name']);
if (!$items) { return false; }
$this->setTemplate("slider_{$style}");
'ctype' => $ctype,
'delay' => $delay,
'image_field' => $image_field,
'teaser_field' => $teaser_fields,
'style' => $style,
'items' => $items
);
}
}
slider.php
<?php
define('LANG_WD_CONTENT_SLIDER_DATASET', 'Название набора'); define('LANG_WD_CONTENT_SLIDER_IMAGE', 'Поле изображения'); define('LANG_WD_CONTENT_SLIDER_TEASER', 'Поле краткого описания'); define('LANG_WD_CONTENT_SLIDER_STYLE', 'Стиль'); define('LANG_WD_CONTENT_SLIDER_STYLE_BASIC', 'Обычный'); define('LANG_WD_CONTENT_SLIDER_STYLE_FEATURED', 'Журнальный'); define('LANG_WD_CONTENT_SLIDER_DELAY', 'Задержка между слайдами'); define('LANG_WD_CONTENT_SLIDER_DELAY_HINT', 'Введите ноль чтобы отключить автоматическую смену слайдов');
Все шаблоны заранее объявляются в options.form.php, и располагаются по адресу \templates\default\controllers\content\widgets\slider, с именами
slider_basic.tpl.php
slider_featured.tpl.php
и тд.
Думаю это будет очень полезная штука. Теперь на сайте может быть более одного типа слайдеров