Добрый день!
Помогите пожалуйста, кое-как создал свой элемент на основе элемента Date
Добавил к нему поле текста и сделал свой вывод подачи
ссылка - http://kgo-club.ru/myformcapra.html
И все вроде бы работает почти правильно, но:
я хотел сделать так, чтобы все элементы подачи были видны вне зависимости от того, заполнены они или нет.
Выводятся все элементы, только нужно, чтобы дата тоже была пустая, если при создании item'a дата не указана, а она проставляет сегодняшнее число
Вот код моего элемента:
<?php
/**
* @package com_zoo
* @author YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
// register ElementRepeatable class
App::getInstance('zoo')->loader->register('ElementRepeatable', 'elements:repeatable/repeatable.php');
/*
Class: ElementText
The text element class
*/
class ElementRateform extends ElementRepeatable implements iRepeatSubmittable {
const EDIT_DATE_FORMAT = '%d-%m-%Y';
/*
Function: _getSearchData
Get repeatable elements search data.
Returns:
String - Search data
*/
protected function _hasValue($params = array()) {
$value = $this->get('textvalue', $this->config->get('default'));
return !empty($value);
}
protected function _getSearchData() {
return $this->get('value');
}
/*
Function: render
Renders the repeatable element.
Parameters:
$params - render parameter
Returns:
String - html
*/
protected function _render($params = array()) {
$params = $this->app->data->create($params);
return '<td>'
. $this->app->html->_('date', $this->get('value', ''), $this->app->date->format($params->get('date_format') == 'custom' ? $params->get('custom_format') : $params->get('date_format')))
. '</td><td>'
. $this->get('textvalue')
. '</td></tr>';
}
/*
Function: _edit
Renders the repeatable edit form field.
Returns:
String - html
*/
protected function _edit() {
$name = $this->getControlName('value');
if ($value = $this->get('value', '')) {
try {
$value = $this->app->html->_('date', $value, $this->app->date->format(self::EDIT_DATE_FORMAT), $this->app->date->getOffset());
} catch (Exception $e) {}
}
$html = array();
$html[] = '<td>';
$html[] = $this->app->html->_('zoo.calendar', $value, $name, $name, array('class' => 'calendar-element'), true);
$html[] = '</td><td>';
$html[] = $this->app->html->_('control.text', $this->getControlName('textvalue'), $this->get('textvalue', $this->config->get('default')), 'size="60" maxlength="255"');
$html[] = '</td></tr>';
return implode("\n", $html);
}
/*
Function: _renderSubmission
Renders the element in submission.
Parameters:
$params - AppData submission parameters
Returns:
String - html
*/
public function _renderSubmission($params = array()) {
return $this->_edit();
}
/*
Function: _validateSubmission
Validates the submitted element
Parameters:
$value - AppData value
$params - AppData submission parameters
Returns:
Array - cleaned value
*/
/*public function _validateSubmission($value, $params) {
$value = $value->get('value');
if (!empty($value) && ($time = strtotime($value))) {
$value = strftime(self::EDIT_DATE_FORMAT, $time);
}
return array('value' => $this->app->validator->create('date', array('required' => $params->get('required')), array('required' => 'Please choose a date.'))
->addOption('date_format', self::EDIT_DATE_FORMAT)
->clean($value));
}*/
public function _validateSubmission($value, $params)
{
if ((int)$params->get('required')) {
if (!JString::trim(implode(' ', $value->getArrayCopy()))) {
throw new AppValidatorException('Field is empty');
}
}
return $value->getArrayCopy();
}
/*
Function: bindData
Set data through data array.
Parameters:
$data - array
Returns:
Void
*/
public function bindData($data = array()) {
parent::bindData($data);
foreach ($this as $self) {
$value = $this->get('value', '');
if (!empty($value) && ($value = strtotime($value)) && ($value = strftime(self::EDIT_DATE_FORMAT, $value))) {
$tzoffset = $this->app->date->getOffset();
$date = $this->app->date->create($value, $tzoffset);
$value = $date->toSQL();
$this->set('value', $value);
}
}
}
}
Как он вставляет сегодняшнюю дату, если поле дата пустое?
Либо что-то нужно убрать, либо добавить, подскажите, люди добрые!
Если что-то непонятно объяснил - не серчайте, объясню еще тогда.
Заранее спасибо.