Вход

Просмотр полной версии : Ссылка на сторонний сайт для отдельного пункта графического меню с передачей по POST


Anlov
26.10.2011, 12:52
привет.
есть меню:
lib.topmenu = HMENU
lib.topmenu {
special = list
special.value = 90,91,92,93,94,96
1 = GMENU
1 {
noBlur = 1
No = 1
NO {
imgParams = width="32"
imgParams = height="32"
imgParams = border="0"
altImgResource.import = uploads/media/
altImgResource.import.field = media
altImgResource.import.listNum = 0
subst_elementUid = 1
linkWrap = <div class="div_extra_menu_item">|</div>
}
ACT = 1
ACT {
imgParams = width="32"
imgParams = height="32"
imgParams = border="0"
altImgResource.import = uploads/media/
altImgResource.import.field = media
altImgResource.import.listNum = 1
subst_elementUid = 1
linkWrap = <div class="div_extra_menu_item">|</div>
doNotShowLink = 1
}
}
}

как мне на пункт меню 91 прикрутить ссылку на чужой сайт, с передачей по этой ссылке данных по POST? Нужно, чтобы пользователь, нажав на ссылку, попадал на другой сайт и автоматически там логинился.

dmartynenko
26.10.2011, 13:14
POST по ссылке? Прямо к сожалению никак, HTTP протокол такого не поддерживает.

Есть вариант POST через HTTP Redirect, но со своими минусами и заморочками.

http://stackoverflow.com/questions/46582/response-redirect-with-post-instead-of-get
http://otvety.google.ru/otvety/thread?tid=0977c3a4ec5fc44c

Anlov
26.10.2011, 13:30
POST по ссылке? Прямо к сожалению никак, HTTP протокол такого не поддерживает. это понятно. а если сделать именно эту картинку (этот пункт) в меню кнопкой формы, тогда можно бы было хоть что передать, а не только логин и пароль FE_user.
То есть на этот пункт меню надо повесить просто свой HTML код, насколько я сейчас это себе представляю. А как?

dmartynenko
26.10.2011, 13:52
Если вы на страниче сделаете скрытую форму, где в action=".." будет url стороннего сайта, а по JS на нажатие пункта меню будет обработчик onclick="my_hidden_form.submit(); return false;" то что-то может получиться. В полях скрытой формы добавите параметры логин, пароль и т.п.

Только, судя упоминаниям в интернете, при таком сабмите на сторонний сайт некоторые броузеры (например, Opera) могут выдавать окно предупреждения.

А специфический пункт меню можно разместить и без использования HMENU, например если он у вас 92 так:

lib.topmenu = COA
lib.topmenu.1 = HMENU
lib.topmenu.1 {
special.value = 90,91
...
}
lib.topmenu.2 = HTML
lib.topmenu.2.value = хитрая ссылка
lib.topmenu.3 < lib.topmenu.1
lib.topmenu.3 {
special.value = 93,94,96
}

Anlov
26.10.2011, 14:14
Если вы на страниче сделаете скрытую форму, где в action=".." будет url стороннего сайта, а по JS на нажатие пункта меню будет обработчик onclick="my_hidden_form.submit(); return false;" то что-то может получиться. В полях скрытой формы добавите параметры логин, пароль и т.п.

Только, судя упоминаниям в интернете, при таком сабмите на сторонний сайт некоторые броузеры (например, Opera) могут выдавать окно предупреждения. - это тоже известно. Все дело как раз в том, что сразу по нажатию на одну из кнопок меню, которое состоит из картинок (GMENU), должен происходить редирект с передачей логина и пароля FE пользователя, без загрузки какой-либо другой страницы. Т.е. нажал - и, вуаля, ты на другом сайте и уже залогинился.

А специфический пункт меню можно разместить и без использования HMENU, например если он у вас 92 так:
Код:

lib.topmenu = COA
lib.topmenu.1 = HMENU
lib.topmenu.1 {
special.value = 90,91
...
}
lib.topmenu.2 = HTML
lib.topmenu.2.value = хитрая ссылка
lib.topmenu.3 < lib.topmenu.1
lib.topmenu.3 {
special.value = 93,94,96
}

не, нужны картинки...

dmartynenko
26.10.2011, 14:23
И в чем вопрос? onclick работает и на <img> тоже, картинки можно завернуть в <a onclick="..."></a>

Если происходит submit формы, то пользователь сразу оказывается на странице указанной в action формы. Тут вообще нет редиректа, просто переход на указанный URL с передачей параметров формы.

Anlov
26.10.2011, 14:44
Сорри, вопрос в том, что я не знаю, как это сделать только для одной картинки-пункта меню из шести...
Как-то я тяжко сегодня объясняю... :confused:

dmartynenko
26.10.2011, 14:57
Как-то так:

Вариант 1:
В TS:
lib.topmenu.1.NO.linkWrap = <div class="div_extra_menu_item" id="menu-item-{elementUid}">|</div>

В JS, с использованием jQuery, XX заменить на ID нужной страницы:
$('#menu-item-XX a').click(function() {
$('#my-hiddden-form').submit();
});

Вариант 2:
Разбить меню на три части через COA, одна из которых состоит из единственного нужного пункта меню. Добавить для нее
lib.topmenu.X.1.NO.ATagParams = onclick="..."
Если бы ATagParams имел stdWrap, то можно было бы добавить в него через TS условия.

Anlov
26.10.2011, 15:03
Спасибо, сейчас попробую.

Anlov
26.10.2011, 20:18
мдa, не выходит каменный цветок... а казалось, что все так просто.
подключаю javascript, прямо в шаблоне уже нарисовал форму.
по клику на менюшке совершается переход на страницу с id=91.

dmartynenko
27.10.2011, 12:06
Просто ссылка не должны осуществлять переход сама по себе. По есть адрес у нее должен быть например # или javascrip:void; - можно поколдовать с TS что бы на эту страницу не было стандартной ссылки в GMENU.

Или так попробуйте:

$('#menu-item-XX a').click(function() {
$('#my-hiddden-form').submit();
return false; // запрещаем переход по href по клику
});


PS: я не эксперт по JS, могу ошибаться в деталях, но общее направление думаю верное.