У меня следующая проблема:
Я хочу, чтобы пользователи могли загружать изображения через бэкэнд Joomla.
Я сделал его очень похожим на поле "media", но есть добавлениеполе, в котором каждый раз, когда пользователь выбирает изображение, используя медиа-компонент внутри iframe (так же, как медиа-поле), новое поле вставляется в набор полей с помощью javascript.
Это новое поле имеет выбранное значение изображения, так что вы можетелибо измените его, либо удалите.
При загрузке редактируемого макета PHP генерирует все поля с изображениями, которые там, где они были добавлены ранее, IE:
|image1.png| change delete
|image2.png| change delete
| | addNew
Эти кнопки изменения, сгенерированные PHP, работают отлично,поэтому, когда вы нажимаете на них, появляется iframe, который позволяет вам выбрать другое изображение.кнопки удаления также работают (стирая поле)
, затем я нажимаю addNew и выбираю другое изображение:
|image1.png| change delete
|image2.png| change delete
|image3.png| change delete
| | addNew
Кажется, что это работает, но когда я нажимаю "изменить", вместо полученияВо всплывающем окне iframe браузер перенаправляет меня к компоненту: S.
Я посмотрел на исходный код HTML, и оба поля, сгенерированные PHP и javascript, одинаковы, поэтому проблема должна заключаться в некотором JavaScript.
это PHP HTML для полей:
$html = array ( );
$html[] = '<li id="'.$id.'">';
$html[] = '<label></label>';
$html[] = '<input'.
' type="text" readonly="true"'.
' value="' .$value. '"'.
' id="'.$id.'_data"'.
' size="60"'.
'>';
$html[] = '<div class="button2-left">';
$html[] = '<div class="blank">';
$html[] = '<a href="index.php?option=com_media&view=images&tmpl=component&asset=&author=&fieldid='.$id.'_data&folder='.$this->folder.'"'.
'class="modal"'.
'rel="{handler: \'iframe\', size: {x: 800, y: 500}}"'.
'>';
$html[] = 'Cambiar';
$html[] = '</a>';
$html[] = '</div>';
$html[] = '</div>';
$html[] = '<div class="button2-left">';
$html[] = '<div class="blank">';
$html[] = '<a'.
' onclick="document.getElementById(\''.$id.'_data\').value=\'\'; document.getElementById(\''.$id.'\').style.display=\'none\'; document.getElementById(\''.$id.'\').onchange();"'.
' href="#"'.
'>';
$html[] = 'Eliminar';
$html[] = '</a>';
$html[] = '</div>';
$html[] = '</div>';
$html[] = '</li>';
и это JavaScript, написанный на PHP
$script2 = array();
$script2[] = ' function new_'.$this->id.'( value ) {';
$script2[] = ' var container = document.getElementById(\''.$this->id.'_container\');';
$script2[] = ' var child = document.createElement(\'li\');';
$script2[] = ' var lbl = document.createElement(\'label\');';
$script2[] = ' var input = document.createElement(\'input\');';
$script2[] = ' var but = document.createElement(\'div\');';
$script2[] = ' var but2 = document.createElement(\'div\');';
$script2[] = ' var blank = document.createElement(\'div\');';
$script2[] = ' var blank2 = document.createElement(\'div\');';
$script2[] = ' var add = document.createElement(\'a\');';
$script2[] = ' var clear = document.createElement(\'a\');';
$script2[] = ' child.setAttribute( \'id\' , \''.$id_insert.' );';
$script2[] = ' input.setAttribute ( \'type\' , \'text\' );';
$script2[] = ' input.setAttribute ( \'readonly\' , \'true\' );';
$script2[] = ' input.setAttribute ( \'id\' , \''.$id_insert.'+\'_data\' );';
$script2[] = ' input.setAttribute ( \'size\' , \'60\' );';
$script2[] = ' input.setAttribute ( \'value\' , value );';
$script2[] = ' but.setAttribute ( \'class\' , \'button2-left\' );';
$script2[] = ' but2.setAttribute ( \'class\' , \'button2-left\' );';
$script2[] = ' blank.setAttribute ( \'class\' , \'blank\' );';
$script2[] = ' blank2.setAttribute ( \'class\' , \'blank\' );';
$script2[] = ' add.setAttribute ( \'class\' , \'modal\');';
$script2[] = " add.setAttribute ( 'rel' , \"{handler: 'iframe', size: {x: 800, y: 500}}\");";
$script2[] = " add.setAttribute ( 'href' , 'index.php?option=com_media&view=images&tmpl=component&asset=&author=&fieldid=".$id_insert."+'_data&folder=".$folder_secure."' );";
$script2[] = ' add.innerHTML = \'Cambiar\';';
$script2[] = ' clear.setAttribute ( \'href\' , \'#'.$this->id.'_create_data\' );';
$script2[] = ' clear.setAttribute ( \'onclick\' , \'document.getElementById("'.$id_insert.'+\'_data").value=""; document.getElementById("'.$id_insert.'+\'").style.display="none"; document.getElementById("'.$id_insert.'+\'").onchange();\' );';
$script2[] = ' clear.innerHTML = \'Eliminar\';';
$script2[] = ' child.appendChild ( lbl );';
$script2[] = ' child.appendChild ( input );';
$script2[] = ' child.appendChild ( but );';
$script2[] = ' but.appendChild ( blank );';
$script2[] = ' blank.appendChild ( add );';
$script2[] = ' child.appendChild ( but2 );';
$script2[] = ' but2.appendChild ( blank2 );';
$script2[] = ' blank2.appendChild ( clear );';
$script2[] = ' var add_new = document.getElementById(\''.$this->id.'_create_new\');';
$script2[] = ' container.removeChild ( add_new );';
$script2[] = ' container.appendChild ( child );';
$script2[] = ' container.appendChild ( add_new );';
$script2[] = ' document.getElementById(\''.$this->id.'_data\').value = \'\';';
$script2[] = ' '.$count_insert.'++;';
$script2[] = ' }';
Браузер не находит ошибок вJavaScript, поэтому я не знаю, почему это не работает