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


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

Проблема с повторяемым элементом


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

#1 Ongi

Ongi

Отправлено 28 April 2013 - 12:50

Элемент делался из стандартного text для красивого вывода видео из контакта через фрейм.
Ссылка к фрейму выглядит так:
<div class="button-ani" id="VIDEOID"><a target="my-frame" href="ССЫЛКА">NUMBER</a></div>

 

В элементе 3 поля: videoid (для запоминания нажатой кнопки), number (текст на кнопке) и value (код самого видео). Проблема в том, что элемент не выводит значения повторяемых полей, выводит только первое
Должно быть как на нижних кнопках, а получается только одна
d0h0V154g3z5Y394.jpg

defined('_JEXEC') or die('Restricted access');

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

class ElementVideo extends ElementRepeatable implements iRepeatSubmittable {

	protected function _hasValue($params = array()) {
		
		$videoid = $this->get('videoid', $this->config->get('default'));
		$number = $this->get('number', $this->config->get('default'));
		$value = $this->get('value', $this->config->get('default'));
		
		return !empty($videoid) || !empty($number) || !empty($value) || $value === '0';
	}

	protected function _getSearchData() {

		return $this->get('videoid', $this->config->get('default')).','.$this->get('number', $this->config->get('default')).','.$this->get('value', $this->config->get('default'));

	}

	protected function _edit($params = array()) {
		
		echo $this->app->html->_('control.text', $this->getControlName('videoid'), $this->get('videoid', $this->config->get('default')), 'size="60" maxlength="255"');
		echo $this->app->html->_('control.text', $this->getControlName('number'), $this->get('number', $this->config->get('default')), 'size="60" maxlength="255"');
		echo $this->app->html->_('control.text', $this->getControlName('value'), $this->get('value', $this->config->get('default')), 'size="60" maxlength="255"');

	}

	public function render($params = array()) {
	$string = $this->get('value');
	?><div class="button-ani" id="<?echo $this->get('videoid');?>"><a target="my-frame" href="<?echo substr($string, 13, -10);?>"><?echo $this->get('number');?></a></div><?
	
	}	
	public function _renderSubmission($params = array()) {
        return $this->_edit();
	}
}?>

  • 0

#2 SmetDenis

SmetDenis

Отправлено 30 April 2013 - 19:20

У вас функция render не верно используется

 

для повторяемых элементов нужно объявить "_render" (с подчеркиванием).

и нужно делать return а не вывод прямо в элементе, а то могут быть неприятные ошибки в шаблоне.

 

например так.

public function _render($params = array()) {
    $string = $this->get('value');
    
    $html = array();

    $html[] = '<div class="button-ani" id="'. $this->get('videoid') .'">';
    $html[] = '<a target="my-frame" href="'. substr($string, 13, -10).'">'. $this->get('number').'</a>';
    $html[] = '</div>';

    return implode("", $html);
}

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 Ongi

Ongi

Отправлено 02 May 2013 - 17:52

Спасибо! Работает!
но теперь другая проблема, если добавлять данные через сабмишен, то они не сохраняются...


  • 0

#4 SmetDenis

SmetDenis

Отправлено 02 May 2013 - 20:53

Функция validateSubmission должна возвращаться массив сохраняемых данных.
По умолчанию сохраняется только ключ value

    /**
     * Validates the submitted element
     * @param $value
     * @param $params
     * @return array
     */
    public function validateSubmission($value, $params)
    {
        return array('value' => (bool)$value->get('value'));
    }

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 Ongi

Ongi

Отправлено 03 May 2013 - 20:15

Что я делаю не так?
 

public function validateSubmission($videoid, $number, $value, $params = array())
    {	
        return array('videoid' => (bool)$videoid->get('videoid'), 'number' => (bool)$number->get('number'), 'value' => (bool)$value->get('value'));
    }

ошибка: Declaration of ElementVideo::validateSubmission() must be compatible with that of iSubmittable::validateSubmission() on line 14

строка 14: 
class ElementVideo extends ElementRepeatable implements iRepeatSubmittable


Сообщение отредактировал Ongi: 03 May 2013 - 20:16

  • 0

#6 SmetDenis

SmetDenis

Отправлено 04 May 2013 - 20:25

value - это сборник всех переменных. распечатайте и увидите.

не нужно для каждого ключа делать новый аргумент.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 Ongi

Ongi

Отправлено 05 May 2013 - 09:23

Добавила эту функцию в том виде, что вы дали - данные по прежнему не сохраняются


  • 0

#8 SmetDenis

SmetDenis

Отправлено 05 May 2013 - 09:56

public function validateSubmission($value, $params)
    {
        return array(
              'value' => (bool)$value->get('value'),
              'value2' => $value->get('value2')
        );
    }
внимательно прочитайте мое предыдущее сообщение.
используйте силу print_r ;)
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#9 Ongi

Ongi

Отправлено 05 May 2013 - 12:14

С ключами вроде понятно

'videoid' => (bool)$value->get('videoid'),
'number' => $value->get('number'),
'value' => $value->get('value')

Печатать надо $value

print_r($value, true);

Где оно должно выводиться? Потому что изменений я не вижу


  • 0

#10 SmetDenis

SmetDenis

Отправлено 05 May 2013 - 12:41

скажите, зачем в print_r второй аргумент?
вы читали документацию http://php.net/manua...ion.print-r.php ?

зачем вам (bool) при сохранении ?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!