Перейти к содержимому


Фотография
- - - - -

Проблемы со [своим] элементом при подаче

создание элемента элемент подача материала

Лучший Ответ cj , 15 May 2015 - 14:07

Все, вроде решил вопрос

 

Поменял функцию _render немного

Теперь так:

	protected function _render($params = array()) {
		$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) {}

		}
                return  '<td>'
                        . $this->get('value')
                        . '</td><td>'
                        . $this->get('textvalue')
                        . '</td></tr>';
	}
Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 3

#1 cj

cj

Отправлено 15 May 2015 - 10:36

Добрый день!

Помогите пожалуйста, кое-как создал свой элемент на основе элемента 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);
			}
		}
	}
}

Как он вставляет сегодняшнюю дату, если поле дата пустое?

Либо что-то нужно убрать, либо добавить, подскажите, люди добрые!

Если что-то непонятно объяснил - не серчайте, объясню еще тогда.

Заранее спасибо.


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 15 May 2015 - 11:25

я хотел сделать так, чтобы все элементы подачи были видны вне зависимости от того, заполнены они или нет.

Если вы говорите о выводе в любом из шаблонов материала тогда в методе hasValue (_hasValue) верните true - в этом случае элемент всегда будет отображаться даже если он пустой.
  • 1
Изображение
 

#3 cj

cj

Отправлено 15 May 2015 - 11:41

Если вы говорите о выводе в любом из шаблонов материала тогда в методе hasValue (_hasValue) верните true - в этом случае элемент всегда будет отображаться даже если он пустой.

Спасибо. А что насчет даты? Почему если я не заполняю ее, то возвращается значение сегодняшнего дня?


  • 0

#4 cj

cj

Отправлено 15 May 2015 - 14:07   Лучший Ответ

Все, вроде решил вопрос

 

Поменял функцию _render немного

Теперь так:

	protected function _render($params = array()) {
		$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) {}

		}
                return  '<td>'
                        . $this->get('value')
                        . '</td><td>'
                        . $this->get('textvalue')
                        . '</td></tr>';
	}

  • 0





Темы с аналогичным тегами создание элемента, элемент, подача материала

Click to return to top of page in style!