Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
1

Можно ли указать ссылку на текущую страницу без обновления?

10.06.2022, 10:39. Показов 1931. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Возник такой вопрос, как можно указать ссылку на текущую страницу, чтобы не было её обновления? Хотя может я некорректно выражаюсь, постараюсь объяснить более понятно.
Можно ли указать ссылку на текущую страницу без обновления?

Есть страница, как на рисунке, выбран пункт меню #2, в результате чего в теле страницы отображаются данные соответствующие этому пункту меню. Задача, необходимо в теге <a href=...> указать ссылку к якорю и передать значение переменной. Поэтому, чтобы передать значение я указываю ссылку на эту же страницу, но тогда пункт меню автоматом ставится на #1. Если повторно уже нажать на ту же ссылку, то пункт меню уже не меняется.
Пример такой:
HTML5
1
<a href=main.php?edit_id=" .$result['id']. "#win5>Редактировать</a>
Здесь страница остаётся та же, но и передаётся значение переменной.

Если же указать так:
HTML5
1
<a href=#win5?edit_id=" .$result['id']. ">Редактировать</a>
то соответственно не передастся значение переменной.

Первый вариант меня в принципе устраивает, но крайне желательно, чтобы при переходе страницы на саму себя пункт текущего меню тоже не менялся.

Если кто понял, что требуется и знает возможно ли это, пожалуйста посоветуйте.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2022, 10:39
Ответы с готовыми решениями:

Из UserControl'a получить ссылку на текущую страницу
Работаю в UWP. Появилась необходимость из UserControl получить ссылку на страницу, на которой он...

Переход на текущую страницу без location
Здравствуйте! Допустим я на странице https://www.test1/posts/?on=1 как сделать ссылку, которая...

Меню без ссылки на текущую страницу
Здравствуйте! Скажите, пожалуйста, что не так? index.php: &lt;? ... ...

Закрыть доступ на прямую ссылку на страницу, без авторизации
Добрый день, Не давно создал форму авторизации на своём сайте (с использованием БД) которое нашёл...

45
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
10.06.2022, 16:47 2
PHP
1
<a href="#win5?">Редактировать</a>
Так просто якорь, перемнная уже есть в адресе

Добавлено через 1 минуту
В том случае, если $result['id'] === $_GET['id']
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
10.06.2022, 17:15  [ТС] 3
Цитата Сообщение от crautcher Посмотреть сообщение
Так просто якорь, перемнная уже есть в адресе
Может я в синтаксисе ещё не совсем разобрался, но проблема и возникла ввиду того, что строка
HTML5
1
<a href=#win5?edit_id=" .$result['id']. ">Редактировать</a>
формируется в PHP через echo и, если я там указываю вот так с одинарными скобками:
PHP
1
echo "<td><a href='#win5'?">Редактировать</a></td>";
то не передается переменная, а если без одинарных скобок:
PHP
1
echo "<td><a href=#win5?">Редактировать</a></td>";
то не работает якорь.
0
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
10.06.2022, 17:23 4
Без вопроса, это я недостер. просто #win5

Добавлено через 2 минуты
Создаю страницу из одной ссылки
PHP
1
<a href="#anchor2">aaaa</a>
Захожу с гет параметром
?a=1
Кликаю, перехожу на
?a=1#anchor2

Все работает

Добавлено через 2 минуты
P.S. если echo путает, закрой просто пхп и пиши на чистом html
Цитата Сообщение от VKont Посмотреть сообщение
PHP
1
echo "<td><a href=#win5?">Редактировать</a></td>";
PHP
1
2
3
?>
   <td><a href="#win5">Редактировать</a></td>
<?
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
10.06.2022, 17:37  [ТС] 5
Цитата Сообщение от crautcher Посмотреть сообщение
Захожу с гет параметром
?a=1
Кликаю, перехожу на
?a=1#anchor2
Все работает
Хорошо, завтра попробую, кажется я понял о чём Вы говорите, но пока не уверен, что правильно понял. Сегодня уже нет сил думать, а завтра обязательно попробую
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 07:22  [ТС] 6
Цитата Сообщение от crautcher Посмотреть сообщение
Захожу с гет параметром
?a=1
Кликаю, перехожу на
?a=1#anchor2
Все работает
Нет, не получилось. Возможно с GET это работает, когда передаётся простая переменная, а, если это значение из массива, то уже получить в другом скрипте путём GET нет возможности. Т. е. значение из массива записей БД, получаемые методом SELECT и хранящиеся в массиве $result в другом скрипте через GET уже не получить, именно для этого и нужно их передавать в переменной через адресную строку, как в этом случае:
HTML5
1
<a href=main.php?edit_id=".$result['id']."#win5>Редактировать</[/quote]
Блин, как же тут обыграть ситуацию? В целом-то говорю, что почти всё устраивает, если бы при обновлении страницы, а по факту перехода на саму себя, не менялся бы пункт меню на первый, а оставался тот, который уже выбран. Вообще я читал про редактирование записей, чтобы их значения в модальное окно выводились, способами через JS, но у меня он получился и без всяких заморочек со скриптами, гораздо проще, но не совсем тот вариант, чтобы меня устроил. Казалось бы тут нужно всего ничего, прокинуть значение переменной по ссылке на якорь и вуаля, чем писать скрипт для прослушивания клика на нужный элемент и передавать эту переменную через него.

Может у кого-то возникнут ещё какие-нибудь мысли?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
11.06.2022, 10:22 7
Если вы хотите "подсвечивать" пункт меню на основе фрагмента (это ваш #win5), очевидно это нужно делать при помощи JS. "Фрагменты" не передаются на сервер, так что на PHP вы этого никак не сделаете.

Добавлено через 9 минут
Цитата Сообщение от VKont Посмотреть сообщение
Возможно с GET это работает, когда передаётся простая переменная, а, если это значение из массива, то уже получить в другом скрипте путём GET нет возможности. Т. е. значение из массива записей БД, получаемые методом SELECT и хранящиеся в массиве $result в другом скрипте через GET уже не получить, именно для этого и нужно их передавать в переменной через адресную строку
Их и не нужно получать "через GET". Все, что нужно, вы считываете повторно из базы данных (как группы записей, так и отдельные записи).

Какую роль вообще играют у вас фрагменты? Такое ощущение, что это селекторы категорий для фильтрации. Если это действительно так, то лучше размещать селекторы в путях, например:
/win5[?p=1] - первая страница списка объектов категории win5;
/win5/1[?p=1] - форма редактирования объекта с идентификатором 1 категории win5 (строка запроса "?p=1" может использоваться для возврата на определенную страницу списка);
и т.д.

Я на этом целую CMS построил. Правда, в ней обычно "категории" - это точки доступа к коллекциям разнотипных объектов, т.е. хранящихся в разных таблицах, но при помощи представлений (или разделов) базы данных можно расщепить и одну таблицу на категории.

Добавлено через 1 минуту
Если с путями пока трудно работать, вот вам альтернативный вариант:
/main.php?cat_id=win5[&p=1]
/main.php?cat_id=win5&edit_id=1[&p=1]

А для приближения к первому варианту можете попробовать такой вариант:
/main.php?path=win5[&p=1]
/main.php?path=win5/1[&p=1]
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 13:30  [ТС] 8
Цитата Сообщение от estic Посмотреть сообщение
Какую роль вообще играют у вас фрагменты?
Что Вы имеете ввиду под фрагментами, якоря?

Лично у меня #win1-#win... это модальные окна. Есть БД, из которой в таблицу на странице выводятся данные, в конце каждой выведенной записи есть две ссылки <Редактировать> и <Удалить>. Так вот, когда нажимаешь <Редактировать>, то вот эта ссылка <a href=main.php?edit_id=".$result['id']."#win5>Редактировать< запускает модальное окно и соответственно через переменную edit_id передаётся id строки, которую нужно отредактировать, а в модальном окне выводятся все данные принадлежащие этому id.
По крайней мере так всё работает, кроме того, что когда обновляется страница (href=main.php...), меню по умолчанию встаёт на первый пункт, а каждый пункт меню выводит на страницу свою таблицу и получается, что на странице уже отображаются записи не редактируемой таблицы, а совершенно другой, что очень неудобно. Но, если выбрать редактирование одной и той же строки повторно, то несмотря на обновление страницы (href=main.php...) меню уже не переключается, но кому нужно дважды редактировать одну и ту же строку?

Это, конечно, не критично, но хотелось бы узнать, а можно ли как-то это обойти?

Возможно я делаю что-то не так, когда я читал форумы по этому вопросу, там редактирование предлагали несколько иначе, с теми же модальными окнами через скрипты JS. Но у меня с одной стороны почти получилось проще, если не считать вот того неудобства с меню. Поэтому я и хочу узнать, есть ли какой то другой способ передать переменную при ссылке на якорь, не спользуя ссылку на страницу, либо же как можно обновить страницу, чтобы пункт меню не менялся?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
11.06.2022, 15:44 9
Цитата Сообщение от VKont Посмотреть сообщение
Что Вы имеете ввиду под фрагментами, якоря?
Да. В оригинале якоря называются фрагментами.

Цитата Сообщение от VKont Посмотреть сообщение
Лично у меня #win1-#win... это модальные окна.
Как можно переключаться при помощи меню, если окна модальные?

Цитата Сообщение от VKont Посмотреть сообщение
Так вот, когда нажимаешь <Редактировать>, то вот эта ссылка <a href=main.php?edit_id=".$result['id']."#win5>Редактировать< запускает модальное окно и соответственно через переменную edit_id передаётся id строки, которую нужно отредактировать, а в модальном окне выводятся все данные принадлежащие этому id.
Выше вам правильно написали. В адресах ссылок, предназначенных для открытия модальных окон (на текущей странице), не должно быть "сетевой составляющей", только фрагмент. Для передачи идентификатора можно использовать сам фрагмент или data-атрибут. Но как это сделать без использования JS, мне трудно представить.

Цитата Сообщение от VKont Посмотреть сообщение
когда обновляется страница (href=main.php...), меню по умолчанию встаёт на первый пункт, а каждый пункт меню выводит на страницу свою таблицу
Вот это не совсем понятно. Вы при обозначении пунктов меню использовали знак номер, и я подумал, что переключение пунктов у вас тоже выполняется при помощи фрагментов. Как я написал выше, для отдельных таблиц точно не стоит использовать фрагменты, так что подсветку пунктов можно делать даже на сервере. Можно и на клиенте - все равно не будет конфликта фрагментов пунктов меню и фрагментов кнопок.

Думаю, основная проблема все же в использовании модальных окон без JS. Если нужна альтернатива JS, то ее следует искать на стороне сервера Современные приложения так и работают: не запускается по каким-то непонятным причинам JS-прокладка, браузер выполняет прямое обращение к серверу, в результате чего открывается отдельная страница с формой редактирования.

В последнем случае фрагменты часто вовсе не используются, в ссылках присутствуют адреса только с сетевой составляющей. А JS-прокладка может разобрать этот адрес для получения идентификатора или получить идентификатор отдельно через data-атрибут.

JS-код модального окна обычно все равно выполняет запрос к серверу (но другим способом), т.к. данные объекта в списке могли быть неполными и т.п. Поэтому я и назвал этот код прокладкой.
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 15:45  [ТС] 10
Цитата Сообщение от estic Посмотреть сообщение
Как можно переключаться при помощи меню, если окна модальные?
Переключение меню не использует модальные окна, модальные окна включаются только когда нужно добавить запись, либо отредактировать.

Цитата Сообщение от estic Посмотреть сообщение
Вы при обозначении пунктов меню использовали знак номер, и я подумал, что переключение пунктов у вас тоже выполняется при помощи фрагментов
Да, тут возможно я ввёл в заблуждение, на картинке # это просто обозначает порядковый номер, нужно было подписать, как №.

Цитата Сообщение от estic Посмотреть сообщение
Современные приложения так и работают: не запускается по каким-то непонятным причинам JS-прокладка
Собственно это и ожидалось, иначе до меня бы уже давно было решение, но как говорится попытка не пытка, была надежда, что есть какое-то решение. Ведь почти получилось, да не совсем, видимо придётся дорабатывать через JS, а хотелось, как проще. Не плохо было бы и к фрагментам обращаться с возможностью передачи переменной, но увы есть как есть.

А можете объяснить, почему когда при переходе по ссылке <a href=main.php?edit_id=".$result['id']."#win5>Редактировать< в первый раз, текущий пункт меню сбрасывается на первый, а второй и последующий разы меню уже не меняется? Тут не совсем мне понятно, меню выбирается через изменение класса, получается в первый переход класс сбрасывается по умолчанию где в HTML он прописан, а последующие разы уже нет или страница последующие разы уже не перерисовывается?
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
11.06.2022, 15:48 11
Цитата Сообщение от VKont Посмотреть сообщение
Переключение меню не использует модальные окна, модальные окна включаются только когда нужно добавить запись, либо отредактировать.
Я это понимаю Речь о том, что когда модальное окно активно, по идее не должно быть возможности переключаться при помощи меню.
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 15:50  [ТС] 12
Цитата Сообщение от estic Посмотреть сообщение
Речь о том, что когда модальное окно активно, по идее не должно быть возможности переключаться при помощи меню.
Всё верно, при активном модальном окне никакого доступа к основной странице нет, соответственно и меню переключить нельзя, но содержимое страницы можно читать, вот поэтому и плохо, что при моём способе, после открытия модального окна, пункт меню автоматом переключается на первый. Вот это-то по факту и есть тот минус из-за которого я и поднял тему, а в остальном-то всё шикарно работает и без всяких скриптов JS
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
11.06.2022, 15:55 13
Цитата Сообщение от VKont Посмотреть сообщение
А можете объяснить...
Сначала нужно понять, как у вас работает меню. Я не увидел в теме ничего кроме придуманного мной способа
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 15:57  [ТС] 14
Цитата Сообщение от estic Посмотреть сообщение
Сначала нужно понять, как у вас работает меню. Я не увидел в теме ничего кроме придуманного мной способа
Ну я в кратце уже объяснил Вам, как у меня работает меню. Через скрипт JS просто меняется класс на текущий и всё, а там уже по цепочке, что для каждого активного меню должно выводиться на страницу, то и выводится
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
11.06.2022, 16:00 15
В адресе должен присутствовать селектор таблицы, тогда можно сделать, чтобы подсветка пунктов не "слетала":
hyde.pageshop.ru/tables

Добавлено через 1 минуту
Цитата Сообщение от VKont Посмотреть сообщение
Через скрипт JS...
Так все-таки JS используется
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
11.06.2022, 16:02  [ТС] 16
Ну я скорее всего правильно понимаю, что первый раз при переходе по ссылке на саму себя, страница перерисовывается полностью, а соответственно текущим активным пунктом меню в HTML указан первый пункт. Последующие разы страница не перерисовывается. Вот, если бы и в первый переход можно было не перерисовывать, тогда было бы здорово, но без обновления страниц работает только ajax, как-то им замутить что ли?

Добавлено через 1 минуту
Цитата Сообщение от estic Посмотреть сообщение
Так все-таки JS используется
Вообще, конечно, используется, у меня там много чего на JS. Просто данный отрезок сходу ПОЧТИ получился без JS, вот и хотел без него обойтись
0
168 / 124 / 42
Регистрация: 25.10.2019
Сообщений: 476
12.06.2022, 12:04 17
А правильно ли я понял, что ТС изобретает табы, самым костыльным путём? https://itchief.ru/examples/la... le=tabs-v1

Если область содержимого имеет статичную информацию. - css всё сделает.
Если динамическая на каждом запросе - то только js ajax.
0
4 / 4 / 0
Регистрация: 07.10.2016
Сообщений: 155
13.06.2022, 04:12  [ТС] 18
Цитата Сообщение от websyst_ru Посмотреть сообщение
А правильно ли я понял, что ТС изобретает табы, самым костыльным путём?
Всё верно, так сказать основное меню для вывода той или иной таблицы на страницу организованно именно так. Ну я так привык, если можно это делать как-то иначе буду благодарен за советы.

Информация динамическая, поэтому исключительно через ajax
0
168 / 124 / 42
Регистрация: 25.10.2019
Сообщений: 476
13.06.2022, 09:02 19
VKont, не уверен, что прям на 100% понял задание. Не хватает данных.
Но раз мы выбрали ajax, то я понял всё так:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<div id="menu">
    <a href="#id1">Ссылка</a>
    <a href="#id2">Ссылка</a>
    <a href="#id3">Ссылка</a>
</div>
<div id="content"></div>
 
<script>
    $("#menu a").click(function () {
        var clicktUrl = $(this).attr('href'); //читаем атрибут ссылки, на которую кликнули
        $.get('t.php', {tableID: clicktUrl}, function (data) { // отправляем запрос к t.php (лежит в той же директории в этом случае)
            $('#content').html(data); //Отображаем то,что отдал нам t.php
        });
        return false;
    });
</script>
PHP
1
2
3
4
5
//это t.php, к нему обращается ajax.
echo 'Пришли данные'.$_GET['tableID'];
if($_GET['tableID']=='#id3'){
    echo 'Была запрошена таблица id3. Срочно рааботаем';
}
Добавлено через 5 минут
UPD. Вангую трудности о "совместимости атрибута ссылки" и логики php

В этом случае мы сможем(из любого вида ссылки) "спарсить" именно значение.
Это позволит и работать с массивами, и с запросами, и типизировать.

Javascript
1
2
3
4
5
6
7
8
9
$("#menu a").click(function () {
        var clicktUrl = $(this).attr('href');
        var parsedID =  Number(clicktUrl.replace(/\D/g,'')); //вот это новое. Тут мы получили исключительно все цифры из URL
        console.log(parsedID);
        $.get('t.php', {tableID: parsedID}, function (data) {
            $('#content').html(data);
        });
        return false;
    });
Но тут есть ньюанс, чтобы не писать регулярки..кхм. нужно стандартизировать URL'ы ибо из '#id34bla000' получим "34000" , что не есть феншуй
0
1261 / 959 / 225
Регистрация: 01.10.2018
Сообщений: 3,713
13.06.2022, 09:15 20
websyst_ru, автору нужна подсветка пунктов меню, в том числе после обновления страницы, так что одним "кликом" тут не обойдешься. Кроме того, возможен конфликт фрагментов пунктов меню и каких-то кнопок, поэтому лучше смотреть в сторону History API.
0
13.06.2022, 09:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2022, 09:15
Помогаю со студенческими работами здесь

Как открыть форму по кнопке, в которой можно указать только ссылку?
Есть кнопка, которая содержится в шаблоне темы (wordpress). В шаблоне можно указать на действие...

Можно ли сделать ссылку на конкретную страницу слайдера?
Ребят, клиент .... (найдет синоним слова) *просит слайдер что бы можно было давать ссылку на...

Как сделать чтоб при нажатие на ссылку открывалось видео без обновления странице
Помогите пожалуйста сделать, так чтоб при нажатие на ссылку в определеном окне открывалось видео...

как ссылку сделать кнопкой добавления в друзья (ко мне) без захода на мою страницу
сайт вконтакте на нем есть реклама (картинки слева) при настройке указывается ссылка на внешней...

Как в плагине добавить ссылку на страницу настроек(или другую страницу)
Прикрепляю скриншот,чтоб понятней было где именно нужно добавить ссылку( а нужно в меню плагина)....

Можно ли залить страницу на хостинг без cms, php и прочего?
часто в сети натыкаюсь на сайты, которые по видимому составлены только с помощью html. на вид они...

Выделить текущую ссылку в меню
Здравствуйте, такая задача есть боковое меню нужно что бы когда переходим по ссылке она меняла цвет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru