Убрать GET из URL

1 234
M
На сайте с 04.12.2013
Offline
223
#21

Воссоздайте код, приведенный в статье. Поэкспериментируйте. На крайняк помучайте демки из статьи, особенно вторую. Надеюсь, поймете. Если и после этого не поймете, значит, не судьба. Я-то что могу сделать?

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
РАН
На сайте с 20.04.2016
Offline
43
#22

Вы тут скорее хотите реализовать что-то вроде пхп роутинга через фронт контроллер.

Принцип:

Все запросы идут через index.php, там удобным вам образом подключается роутер, который разбивает ваш url на параметры (можно написать простейший в несколько строк для Ваших нужд). У вас везде ссылки вида /article/1..n, /blog/1..n

1..n - Ваш id, article - Нужный пых файл. Роутер их распознает и подключает нужный файл и передает id в функцию.

M
На сайте с 04.12.2013
Offline
223
#23

В статье, которую ТС не понял, я выложил готовый код парсинга имеющегося пути. Для описанного вами роутинга остается только к первому выделенному компоненту пути (находится в нулевом элементе массива) присоединить расширение php и добавить какой-нить префикс, определяющий местоположение файла, не забыв сделать валидацию, например при помощи in_array:


$mods=['blog'];

if (in_array($pa[0],$mods)) include(PATH.$pa[0].'.php');
else notfound();

Тут же или внутри blog.php можно сделать что-то подобное:


if (strlen($pa[1])) include(PATH.'article.php');
else include(PATH.'articles.php');

Это примитивно, конечно, но для ТСа походу самое то.

S
На сайте с 30.09.2016
Offline
469
#24
barabash:
Хочу сделать что бы часть article.php?id= не отображалась, но передавала get запрос, в итоге что бы:
Было так - /blog/article.php?id=link_my.html
Стало так - /blog/link_my.html
Это можно сделать в htaccess или я изначально не правильно создал структуру php файлов?

Вам и написали, как это можно сделать в .htaccess. Именно с Вашей структурой файлов. Ваш get-запрос передаётся в файл article.php после преобразования через правило RewriteRule, и в ссылке кусок "article.php?id=" совершенно не нужен, id вытаскивается из адреса в ходе преобразования.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
barabash
На сайте с 30.04.2011
Offline
71
#25

Благодарю за помощь но я все равно ничего из выше написанного не понял. Я только учу php и не могу понять то что Вы написали.

Все запросы идут через index.php, там удобным вам образом подключается роутер

У меня в index.php выводится полный список всех статей, чего там мне подключается.

Тут же или внутри blog.php можно сделать что-то подобное:

У меня нету фала "blog.php", есть только папка blog в которой находится index.php (в которой выводятся все публикации) и article.php (в которую я передаю id что бы используя его, вывести текст полной статьи)

tommy-gung
На сайте с 22.11.2006
Offline
287
#26

вроде готовый код выложили, даже уже и разжевали, что и как работает.

хз, как еще помочь

Здесь не могла быть ваша реклама
S
На сайте с 30.09.2016
Offline
469
#27
barabash:
article.php (в которую я передаю id что бы используя его, вывести текст полной статьи)

Ну и используйте. Ничего же не мешает! Какие проблемы? Адрес есть, параметры есть - можете делать всё, что пожелаете.

barabash
На сайте с 30.04.2011
Offline
71
#28

Есть папка "blog"

В ней находится 2 файла:

- index.php содержащий:


<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<div id="content">
<?php
include "adm/connect.php";
$sql = mysql_query("SELECT * FROM `blog` LIMIT 5") or die(mysql_error());
$newsData = array();
while($result = mysql_fetch_array($sql, MYSQL_ASSOC)){
$newsData[] = $result;
}

foreach($newsData as $oneNews):
?>

<article>
<p><?=$oneNews['title'];?></p>
<p><?=$oneNews['keywords'];?></p>
<p><?=$oneNews['description'];?></p>
<p><?=$oneNews['seo_link'];?></p>
<br>
<p><a href="/blog/article.php?id=<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a></p>
<p><?=$oneNews['text'];?></p>
<p><?=$oneNews['date'];?></p>
<p><?=$oneNews['autor'];?></p>
<p><?=$oneNews['raiting'];?></p>
</article>

<?php endforeach; ?>
</div>

<input id="show_more" count_show="5" count_add="5" type="button" value="Показать еще" />


<script>
$(document).ready(function(){
$('#show_more').click(function(){
var btn_more = $(this);
var count_show = parseInt($(this).attr('count_show'));
var count_add = $(this).attr('count_add');
btn_more.val('Подождите...');

$.ajax({
url: "ajax.php", // куда отправляем
type: "post", // метод передачи
dataType: "json", // тип передачи данных
data: { // что отправляем
"count_show": count_show,
"count_add": count_add
},
// после получения ответа сервера
success: function(data){
if(data.result == "success"){
$('#content').append(data.html);
btn_more.val('Показать еще');
btn_more.attr('count_show', (count_show+5));
}else{
btn_more.val('Больше нечего показывать');
}
}
});
});

});
</script>
</body>
</html>

- article.php содержащий:


<?php
include("adm/connect.php");
$result = mysql_query("SELECT * FROM blog WHERE id = ".$_GET['id']."");
echo $_GET['id'];
?>

Может кто-то на примере написать с комментарием?

Как сделать вместо такой ссылки - <a href="/blog/article.php?id=<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a>

Такую - <a href="/blog/<?=$oneNews['seo_link'];?>.html"><?=$oneNews['title_h1'];?></a>

S
На сайте с 30.09.2016
Offline
469
#29

У Вас проблема в другом, как мне кажется. Ваш скрипт article.php никак не выводит содержимое статьи, если он действительно такой, как Вы показали.

А ссылку просто заменяете одну на другую в индексном файле - и всё. Что тут можно ещё прокомментировать?

barabash
На сайте с 30.04.2011
Offline
71
#30
Sitealert:
У Вас проблема в другом, как мне кажется. Ваш скрипт article.php никак не выводит содержимое статьи, если он действительно такой, как Вы показали.

Там выводится только содержимое get запроса, это для теста.

Я кажется начал разбираться.

Удалил article.php и обрабатываю все в index.php

Создал условие на проверку get переменной, если она пуста - выводится список всех статей, если в ней есть параметры - вывожу статью с этим параметром.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий