Помогите пожалуйста.....уже весь день потерял на поиски ответа вроде на банальный вопрос...
создаю свой тип поля для админки компонента и вот понадобилось для обработчика нажатия кнопок управления организовать УНИВЕРСАЛЬНУЮ (это важно!) передачу параметров в виде ассоциативного массива. Например
$arrayParam = array($param1 => $value1, $param2=>$arrayValues2);
такой вариант позволяет просто добавлять в будущем параметры для передачи
так вот надо этот массив передать из кода PHP для его распаковки и использования в JavaScript. И вот тут оказалась засада (((
В инете много написано, но там варианты для срипта работающего прямо на странице где можно вставлять HTML код напрямую в скрипт,
<div class="button_control" namebut-data="<?php echo json_encode($arrayParam); ?> ></div>
а уменя чисто скрипт PHP .... может я и не прав но я так это понимаю.
В PHP коде, точнее в методе getInput() - формирования поля для админки такой вариант не катит там нужно сформировать данные HTML
кода в виде значения переменной, то-есть не применишь echo json_encode($arrayParam).
если в getInput() пишу в лоб такой код:
//...
function getInput()
{
//......
$paramButtton['no'] = JText::_('JNO');
$paramButtton['yes'] = JText::_('JYES');
$html[] = '<div class="button_control"';
$html[] = ' namebut-data="'.json_encode($paramButtton).'"';
$html[] = '>';
//.....
return implode('', $html);
}
//...
то в JavaScript (использую jQuery) при обработке клика - после извлечения значения атрибута 'namebut-data' получаю только первый сивол '{' JSON строки
а в итоге надо получить ассоциативнй массив точнее объект (я так понимаю нету у JavaScript ассоциативных массивов)
jQuery(document).ready(function(){
jQuery('.button_control').click(function(){
var namebut_array= jQuery(this).attr('namebut-data');
alert(namebut_array); //здесь вижу только '{'
var namesButt = {};
jQuery.each(namebut_array, function(key, val) {
namesButt [key] = val;
//namesButt['принятое _имя_ключа'] = 'принятое_значение ключа'
}
});
});
После обработки в JavScript должно быть аналогичное массиву в PHP но в JavScript:
namesButt = {'no' : 'Да', 'yes': 'Нет'}
а у меня в лучшем случае получается строка символов похожая на массив в формате JSON ((( но не массив (объект)
при просмотре кода страницы FireBag-ом с моим полем вижу такой бред:
<div class="button_control_baseobj" );'="" no":"\u041d\u0435\u0442","yes":"\u0414\u0430"}"="" namebut-data="{" >
пробовал "менять местами" кавычки двойные и одиночные но не помогло хотя чуть и изменилось ((
пробовал напрямую передать сроку символов визуаль нохожую на JSON строку - она принимается но не обрабатывается как массив!
$paramButttonJSON= "{'no':'".JText::_('JNO')."','yes':'".JText::_('JYES')."'}";
$html[] = '<div class="button_control"';
$html[] = ' namebut-data="'.paramButttonJSON.'"';
$html[] = '>';
Нутром чую что проблема очевидно мелкая, но уже мозг кипит.....а не получается
Подскажите пожалуйста где я ошибся и как надо передавать подобный массив и потом его извлекать в данном случае