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


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

input type="range"

input type range

Лучший Ответ Staff , 06 February 2016 - 00:00

Ура! Вот так работает. И правда с element text оказалось просто :)

Полный код с рабочим фронтальным сабмитом.

App::getInstance('zoo')->loader->register('ElementRepeatable', 'elements:repeatable/repeatable.php');


class ElementRange extends ElementRepeatable implements iSubmittable {

	/*
	   Function: edit
	       Renders the edit form field.

	   Returns:
	       String - html
	*/
	public function _edit(){

		$output = array();
		$output[] = '<input name="' . $this->getControlName('value') . '" value="' . $this->get('value',$this->config->get('default')) . '" type="range"  min="-15" max="15" step="5" />';
 
		return implode('', $output);
	}


	public function _renderSubmission($params = array()) {
        return $this->_edit();
	}

}
Перейти к сообщению


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

#1 Staff

Staff

Отправлено 05 February 2016 - 01:48

Здравствуйте, ай нид хелп.

Пытаюсь переделать стандартный элемент checkbox под  input type="range". Задача элемента довольно простая. Просто чтобы пользователь через подачу материала подвигал ползунки, и чтобы новые их значения сохранились при подаче. Необходимо для визуального отображения большего/меньшего уклона в одну или в другую сторону. Желательно бы и подписи по бокам этого ползунка добавлять в элементе.... но мой метод тыка не работает(( Элемент отображается, но обновленные значения он не сохраняет. 

class ElementRange extends ElementOption {

	/*
	   Function: edit
	       Renders the edit form field.

	   Returns:
	       String - html
	*/
	public function edit(){

		// init vars
		$options_from_config = $this->config->get('option', array());
		$default			 = $this->config->get('default');

		if (count($options_from_config)) {

			// set default, if item is new
			if ($default != '' && $this->_item != null && $this->_item->id == 0) {
				$default = array($default);
			} else {
				$default = array();
			}

			$selected_options  = $this->get('option', $default);

			$i       = 0;
			$html    = array('<div>');
				foreach ($options_from_config as $option) {
					$name = $this->getControlName('option', true);
					$value = in_array($option['value'], $selected_options);
					$html[]  = '<div><input id="' . $name.$i. '" type="range" min="-15" max="15" step="5" name="' . $name . '" value="' . $option['value'] .'"/></div>';
					}
					$html[] = '</div>'; 

			return implode("\n", $html);
		}

		return JText::_("There are no options to choose from.");
	}

}

  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 18:49

здравствуйте Staff, для создания элемента за основу лучше всего взять элемент text input который расположен по пути:

\media\zoo\elements\text\text.php

Он достаточно простой и заменить input text на range не должно трудно.


  • 0
Изображение
 

#3 Staff

Staff

Отправлено 05 February 2016 - 19:21

Для меня пока все трудно )) Но попробую.


  • 0

#4 Cheren-dow

Cheren-dow

Отправлено 05 February 2016 - 19:24

Staff, заменил метод _edit для проверки вроде работает:
 

	protected function _edit() {
		$output = array();
		$output[] = '<input name="' . $this->getControlName('value') . '" value="' . $this->get('value',$this->config->get('default')) . '" type="range" />';

		return implode('', $output);
	} 

  • 0
Изображение
 

#5 Staff

Staff

Отправлено 05 February 2016 - 21:11

 

Staff, заменил метод _edit для проверки вроде работает:
 

	protected function _edit() {
		$output = array();
		$output[] = '<input name="' . $this->getControlName('value') . '" value="' . $this->get('value',$this->config->get('default')) . '" type="range" />';

		return implode('', $output);
	} 

Спасибо, что помогаете!

Сохраняет, но если редактировать из админки материал, а при подаче с фронта, не хочет(( Нужно именно с фронта. 


  • 0

#6 Staff

Staff

Отправлено 06 February 2016 - 00:00   Лучший Ответ

Ура! Вот так работает. И правда с element text оказалось просто :)

Полный код с рабочим фронтальным сабмитом.

App::getInstance('zoo')->loader->register('ElementRepeatable', 'elements:repeatable/repeatable.php');


class ElementRange extends ElementRepeatable implements iSubmittable {

	/*
	   Function: edit
	       Renders the edit form field.

	   Returns:
	       String - html
	*/
	public function _edit(){

		$output = array();
		$output[] = '<input name="' . $this->getControlName('value') . '" value="' . $this->get('value',$this->config->get('default')) . '" type="range"  min="-15" max="15" step="5" />';
 
		return implode('', $output);
	}


	public function _renderSubmission($params = array()) {
        return $this->_edit();
	}

}

  • 1




Click to return to top of page in style!