0 Пользователей и 1 Гость просматривают эту тему.
  • 14 Ответов
  • 8462 Просмотров
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Есть форма с селектором, в котором список из 70-80 пунктов.
Ссылку на форму сделал модулем(custom html) и вывожу его в каждой статье.
Но, если, предположим человеку понравился товар, он решил купить, тыкает "заказать" и видит огромный список, из которого он опять должен выбирать.
Как сделать чтоб выбирался нужный пункт, в зависимости от статьи с которой он перешел к форме?

Нашел вот такую штуку $_SERVER['HTTP_REFERER'], которая возвращает адрес страницы, с которой посетитель пришёл на данную страницу.
Но не хватает умения применить это.
Посоветуйте, кто знает, куда копать?
« Последнее редактирование: 28.05.2009, 21:43:25 от Forget-me-not »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Если попробовать так:

Код: php
if ($_SERVER['HTTP_REFERER'] == 'адрес страницы')
{
   $selected = 'selected';
}

и в форме делать просто:

Код
<option <?php echo $selected; ?> value="value1">Это мой выбор</option>
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
А что должно быть в 'адрес страницы'? Адрес какой страницы?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Вот это уже сложнее. То есть мы заранее не знаем, откуда придёт клиент, так? Я пока не вижу, как это сделать... Может где-то в сесии хранится ID товара, который он выбрал и оттуда его можно вытащить?

Это можно проверить - надо вывести массив сессий через print_r($_SESSION) и посмотреть, что в нём хранится.
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Да, верно, не знаем. Может чем-то поможет структура списка:

Код
<select>
<option value='Название статьи'>Название статьи</option>
...

Может именно к 'Названию статьи' привязаться?
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Вот, что дал print_r($_SESSION):
Цитировать
Array ( [__default] => Array ( [session.counter] => 48 [session.timer.start] => 1243402167 [session.timer.last] => 1243412858 [session.timer.now] => 1243413724 [session.client.browser] => Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1 [registry] => JRegistry Object ( [_defaultNameSpace] => session [_registry] => Array ( [session] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [user] => JUser Object ( [id] => 0 [name] => [username] => [email] => [password] => [password_clear] => [usertype] => [block] => [sendEmail] => 0 [gid] => 0 [registerDate] => [lastvisitDate] => [activation] => [params] => [aid] => 0 [guest] => 1 [_params] => JParameter Object ( [_raw] => [_xml] => [_elements] => Array ( ) [_elementPath] => Array (
  • => /home/name/public_html/libraries/joomla/html/parameter/element ) [_defaultNameSpace] => _default [_registry] => Array ( [_default] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [_errorMsg] => [_errors] => Array ( ) ) [session.token] => b118eb4bdd1a7a8097d871042abfdd0c ) [__eb81adcc4edfeccb1ba0f16dfe1a737f] => Array ( [chrono_verification] => f9825b6855a967b8f365a2315a22a3e7 ) )
Использую chronoforms. Список селектора вывожу запросом к базе jos_content, нужен код запроса?

Кстати стандартный SEO включен, ссылки выводятся в виде:
http://www.site.com/menu-alias1/menu-alias2/articleID-article-alias.html

Может тогда через айди или алиас статьи?

Спасибо что откликнулся.
« Последнее редактирование: 27.05.2009, 13:02:48 от boreus »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Блин, походу в сессии ничего нету... Ты что-то говорил про зависимость от статьи - может по ID статьи можно определить. Хотя нет - нам нужно к товару как-то привязаться.

А можно это вживую глянуть?
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Скинул в личку
Попробуй с какой нибудь статьи перейти

А если скажем так делать:
сейчас у меня вывод с запросом выглядит так
Код: php
    $result =  mysql_query("SELECT title, catid FROM jos_content ORDER BY catid ASC");
 while($row = mysql_fetch_array($result))
{
if($row["catid"] == "34")
{
$ar1[] = "<option value='".$row['title']."'>".$row['title']."</option>";
};
...
...
echo '<OPTGROUP label="Nazvanie kategorii №34">Nazvanie kategorii №34</OPTGROUP>';
for ($i = 0; $i <= count($ar1); $i++)
                {echo $ar1[$i];};
...

если выбирать еще и айди материала и вставлять его, скажем в name="" в каждом <option >, а потом сравнивать его с айди, из адреса который возращает нам $_SERVER['HTTP_REFERER'], и если они равны ставить selected="selected"
« Последнее редактирование: 27.05.2009, 13:55:50 от boreus »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
boreus аха, так можно попробовать сделать. ID из URI придётся вытаскивать через регулярное выражение...
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Сделал. Работает!
Сейчас распишу...
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Итак, вывод селектора со списком статей из определенных(нужных мне) категорий и  автовыбором опшна статьи, с которой перешли к форме:

Цитировать
   <?php
    $db =& JFactory::getDBO();
    //запрос к таблице jos_content, из нее выбираем айди материала, его заголовок и айди категории
    $result =  mysql_query("SELECT id, title, catid FROM jos_content ORDER BY catid ASC");
    //изначальный вид всех ссылок на материалы в моем случае: http://www.site.com/menu-alias1/menu-alias2/articleID(число)-article-alias.html
    //делаем массив из элементов адреса страницы, с которой перешли к форме, используя $_SERVER['HTTP_REFERER']
    //разделитель "/"

    $url_parts = explode('/', $_SERVER['HTTP_REFERER']);
    //берем из полученного массива последний элемент
    $last_segment = array_pop($url_parts);
    //полчается articleID(число)-article-alias.html, в этой строке выбираем цифры(спасибо моему комраду, синтаксис регулярных выражений меня пугает)
    preg_match ("/^(\d)*/", $last_segment, $matches);
    //записываем полученный результат в переменную для дальнейшего использования - это и есть айди статьи, с которой перешли к форме
    $sel_refer = $matches[0];
    ?>
    //формируем селектор
    <SELECT>
    <OPTION value="Выберите нужный">Выберите нужный</OPTION>
    //пока результат запроса возвращает значения делаем...
    <?php while($row = mysql_fetch_array($result))
{
    //если текущий айди, взятый из базы равен айди статьи-реферера, полученному нами выше,
    //присваиваем переменной атрибут "selected", то есть такой опшн будет выбран

                if($row["id"] == $sel_refer) {$sel_optn = "selected='selected'";};
    //тут я фильтрую статьи по категориям
      if($row["catid"] == "34")
      {
    //нужными наполняю массив
      $ar1[] = "<option value='".$row['title']."' ".$sel_optn.">".$row['title']."</option>";
                       };
    //тут еще несколько условий, для остальных категорий
...
...
    //не забываем сбросить переменную с аттрибутами для следующего прогона цикла, иначе "selected" у вас будет все, начиная с нужной статьи
                       unset($sel_optn);
};
    //в принципе все, дальше выводим массивы, набитые нужными значениями и оформляем
    <OPTGROUP label="Название категории №34">Название категории №34</OPTGROUP>
                      for ($i = 0; $i <= count($ar1); $i++)
                           {echo $ar1[$i];};
    //и т.д. для остальных категорий
...
...
?>
</SELECT>
Сорри за оформление, если с подсветкой синтаксиса делать, комменты на русском не отображаются.

Все, работает. Кому надо - пользуйтесь.

ЗЫ:Это решение только для частного случая, когда SEF ссылки имеют вид http://www.site.com/menu-alias1/menu-alias2/articleID(число)-article-alias.html
Для обычных ссылок это, конечно не подойдет.

ЗЫЫ:По-моему вариант не сильно красивый. Было бы намного элегантней передавать айди статьи POSTом. У кого есть соображения, напишите. Можно собрать тут несколько рецептов. Ведь вещь рано или поздно, но нужная всем.
« Последнее редактирование: 27.05.2009, 23:55:15 от boreus »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
boreus я вот подумал, а ведь можно же получить ID используя $_GET массив =) Чё-то мы с тобой про него заыбли совсем. И тогда будет всё равно, какого вида ссылка.

Рад, что всё у тебя получилось ;)
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
а ведь точно! надо почитать про него поподробнее...
спасибо за участие.
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Вот сделал способ получить айди статьи, с которой перешли к форме. он короче и подойдет к любого вида ссылкам(с SEF и без):
в коде кнопки "Заказать"(для вставки пхп можно взять например вот такой экстеншн )
Цитировать
//полчаем айди текущей статьи
$sel_refer = JRequest::getInt('id', 0);
//записываем его в переменную сессии(либо можно передать через POST)
$_SESSION[session.sel_refer] = $sel_refer;
Все.
в самой форме используем этот айди из сессии или POSTa в наших целях как хотим :)
*

ocuba

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Я вижу решение вашей проблемы близко с решением моей задачи. http://joomlaforum.ru/index.php/topic,90383.0.html можете посоветовать, как это можно реализовать?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как в ChronoForms сделать изменение формы в зависимости от выбора?

Автор sashka17

Ответов: 0
Просмотров: 1396
Последний ответ 08.02.2021, 09:33:52
от sashka17
Отправляет письма при каждом обновлении страницы

Автор Igoritaly

Ответов: 4
Просмотров: 1416
Последний ответ 16.03.2017, 18:44:07
от Igoritaly
Как получить URL страницы с помощью PHP ?

Автор Xzizz

Ответов: 10
Просмотров: 2294
Последний ответ 15.08.2016, 14:33:29
от nicalf
Получить содержимое тегов со страницы формы, как ?

Автор Xzizz

Ответов: 0
Просмотров: 1237
Последний ответ 18.01.2016, 16:14:49
от Xzizz
Thanks message без перезагрузки страницы в ChronoForms 5

Автор Shad-777

Ответов: 4
Просмотров: 3327
Последний ответ 21.12.2015, 16:27:25
от Иоланта