Обновить родительскую страницу после закрытия окна Iframe Modal - PullRequest
0 голосов
/ 21 февраля 2011

Основы: У меня есть веб-страница, где пользователь может «добавить статью»; когда они нажимают «добавить статью», он открывает iframe (всплывающее модальное окно).

В Iframe есть форма с кнопками «сохранить» и «отменить» - я пытаюсь сделать так, чтобы, когда пользователь нажимал «сохранить», он закрывал модальное окно, а затем обновлял стр.

У меня настроено так, что iframe закрывается и данные сохраняются в базе данных, но я не могу обновить страницу (которая затем отображает новую статью)

Я пока не смог этого сделать, несмотря на то, что гуглил несколько дней. Я не профессионал по javascript, но за последние пару дней я выучил достаточно, чтобы что-то сделать.

Вот код для кнопки:

<a class="toolbar" href="#" onclick="javascript: submitbutton('save'); return false;">

Вот конец функции javascript, которая обрабатывает сохранение данных:

    function submitbutton(pressbutton) {
...
            <?php endif; ?>
            submitform( pressbutton );

        parent.$('sbox-window').close();    

        }


    }

Ответы [ 4 ]

2 голосов
/ 14 сентября 2011

http://community.getk2.org/forum/topics/solved-adding-articles-on-the?xg_source=activity

Эта ссылка - это то исправление, которое я искал - этот вопрос изначально был нацелен на Компонент K2 для Joomla.

Я и другой человек смогли решитьвопрос, написав некоторый собственный код.В этой ветке, а также в той, что указана в ответах, найдено решение.

РЕДАКТИРОВАТЬ: Был сделан запрос на размещение решения здесь, поэтому вот краткое резюме

Если у вас есть пользователи, создающие статьи из внешнего интерфейса, и вы хотите, чтобы кнопка «Сохранить» закрывала окно окна модели, которое появляется при добавлении или редактировании статьи, - просто выполните следующие действия, чтобы добиться этого:

* Примечание: есть несколько других исправлений, которые работают, чтобы закрыть окно, но не обновить страницу - это делает и то и другое.

Ключ передает дополнительный параметр через URL, который создается припользователь нажимает «Сохранить», затем мы просто проверяем, существует ли этот параметр (который я назову «шаг») - если это так, мы обновляем страницу.

Давайте продолжим, сначала мы должны добавитьэтот параметр для созданного URL-адреса -

Откройте файл item.php, расположенный по адресу:

Ваш сайт-> Администратор-> Компоненты-> com_k2-> models-> item.php

На линии 646 или около нее - выВы увидите некоторый текст, похожий на:

case 'save':
default:
$msg = JText::_('Item Saved');
if ($front)
$link = 'index.php?option=com_k2&view=item&task=edit&cid='.$row->id.'&tmpl=component';
else
$link = 'index.php?option=com_k2&view=items';
break;

Итак, нам нужно добавить наш параметр к этому URL, чтобы он выглядел следующим образом (помните, я назвал параметр 'step' и буду его устанавливать= 1) - код теперь будет выглядеть так:

if ($front)
$link = 'index.php?option=com_k2&view=item&task=edit&cid='.$row->id.'&step=1&tmpl=component';

Теперь, когда пользователь нажимает «сохранить», параметр «шаг» передается, и когда форма перезагружается, чтобы показать пользователю его информациюони вошли, шаг = 1!

Итак, нам нужно добавить php, чтобы проверить это - это достаточно просто:

Откройте файл form.php, расположенный по адресу:

Yoursite-> components-> com_k2-> views-> item-> tmpl-> form.php

Там вы можете увидеть, где на самом деле начинается форма (в строке 249 или около нее), что мы хотимчтобы сделать это просто добавить немного php, который проверяет, равен ли наш параметр 'step' 1. Если это так - мы обновим родительскую страницу, используя некоторый javascript, который автоматически закроет окно модели и вызоветтекст сохранен для отображения пользователюс тем, что произошло.

Существующий код выглядит следующим образом:

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm">


<div class="k2Frontend">

<table class="toolbar" cellpadding="2" cellspacing="4">

Когда он будет завершен, он будет выглядеть следующим образом:

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm">


<div class="k2Frontend">
<?php if (JRequest::getInt('step')=='1') { ?>
        <script language="javascript">
        var XHRCheckin = new Ajax('index.php?option=com_k2&view=item&task=checkin&cid=<?php echo $this->row->id; ?>', {
            method: 'get'
        });
        dummy = $time() + $random(0, 100);
        XHRCheckin.request("t"+dummy);
        parent.$('sbox-window').close();
        window.parent.location.reload();

        </script>
        <?php    } ?>

<table class="toolbar" cellpadding="2" cellspacing="4">

Это проверяет, является ли 'шаг'is = 1.Если это так - он запускает javascript для обновления родительского окна - закрывая окно и автоматически обновляя страницу.Он также проверяет в статье о бэкэнде.

Это обеспечивает пользователю самую легкую вещь (т.е. ему не нужно нажимать «назад» и «обновить», что крайне нелогично) и даетпользователь переднего плана - опыт работы с конечным пользователем.

Надеюсь, это поможет людям - мне потребовалось МНОГО погони за неправильным направлением, прежде чем я подумал об этом решении.

ЯДовольно опечаленный разработчики никогда не помогали с чем-то, что затронуло так много людей, ну да ладно - проблема была решена!

0 голосов
/ 12 ноября 2012

Проверьте jQuery fancyBox .

fancyBox - это удобный и элегантный способ добавления функций масштабирования для изображений, HTML-контента и мультимедиа на веб-страницах.,Он построен на вершине популярного JavaScript-фреймворка jQuery, прост в реализации и легко настраивается.

У него " страница перезагрузки после закрытия ", функция.

$(".fancybox").fancybox({
    afterClose : function() {
        location.reload();
        return;
    }
}); 
0 голосов
/ 21 февраля 2011

Я думаю, что вы ищете

   parent.location.reload();

Кстати, вам на самом деле не нужно закрывать iframe - как только вы перезагрузите родительскую страницу, она все равно исчезнет.

0 голосов
/ 21 февраля 2011

Попробуйте window.location.reload

Вы также захотите избавиться от «return false;»из вашего обработчика onclick.Это может помешать обновлению страницы.Также в общем случае помещайте любые операторы return из функции обработчика событий.

...