Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как получить URL записи?

Как получить URL записи?


     22.05.2020    Общие вопросы по PHP, MySQL    155

вопрос
Как получить, зная ID поста его полный URL в соответствии с текущими настройками? Желательно через запрос к бд

Ответил: TechnicalMan


Полностью рабочий пример
В нужном месте сайта подключаете свой скрипт
{include file="engine/modules/get_url.php?id={news-id}"}

где {news-id} - это ID вашей новости (пример для применения в fullstory.tpl
Далее создаёте engine/modules/get_url.php с содержимым

$row = $db->super_query("SELECT category, alt_name FROM ".PREFIX."_post WHERE id = '$id'");
    if($row){
		if ($config['allow_alt_url']) {
			if ($config['seo_type'] == 1 OR $config['seo_type'] == 2) {
				$fulllink = $id . "-" . $row['alt_name'] . ".html";
			} else {
				$fulllink = date('Y/m/d/', $row['date']) . $row['alt_name'] . ".html";
			}
		} else {
			$fulllink = "index.php?newsid=" . $id;
		}
		echo $config['http_home_url'] . get_url($row['category']) . $fulllink;
	}

Никаких дополнительных файлов подключать не нужно

16 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 22 мая 2020 18:48 -

Здравствуйте. Можно конечно сделать через cases чисто sql запросом. Но почему на php нельзя? Жду ответ.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

untaboo
Юзер

untaboo - 22 мая 2020 20:55 -

а как на php? просто я хочу собрать селектом таблицу и уже поместить её в массив) может есть какая служебная функция из classes? что бы получить полный урл записи по айдишнику?

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 22:07 -

У меня так.
В переменную $id предварительно нужно передать ваш ID новости
$row = $db->super_query("SELECT category, alt_name FROM ".PREFIX."_post WHERE id = '$id'");
    if($row){
		if ($config['allow_alt_url']) {
			if ($config['seo_type'] == 1 OR $config['seo_type'] == 2) {
				$fulllink = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
			} else {
				$fulllink = $config['http_home_url'] . date('Y/m/d/', $row['date']) . $row['alt_name'] . ".html";
			}
		} else {
			$fulllink = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
		}
		echo $fulllink;
	}

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 22:17 -

Оно выдаёт только URL статьи, без категории, по обращению на который dle всё равно перекидывает на страницу новости согласно ЧПУ.
Но в принципе можно и взять row['category'] и распарсить на URL тоже, есть встроенные функции, ищи в файле functions.php

untaboo
Юзер

untaboo - 22 мая 2020 22:33 -

спасибо, но нужно как раз что бы распарсить каноникал линк, что бы потом запихать это все во сбор позиций)

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 22:38 -

Функция
get_url($id)

Вернёт полный URL категории
где $id - это категория в новости. В коде выше она в переменной $row['category']

untaboo
Юзер

untaboo - 22 мая 2020 23:17 -

чтото у меня эта функция ничего не отдает. я подключил вот эти файлы:
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/data/config.php';

может еще что то нужно?

untaboo
Юзер

untaboo - 22 мая 2020 23:19 -

еще нужно в своём скрипте сделать вот так:
$cat_info = get_vars ( "category" );

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 23:21 -

На какой странице вы хотите получать ссылку на статью? В каком файле?

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 23:35 -

Ничего подключать не нужно, DLE уже использует это всё в ваших include из шаблона

untaboo
Юзер

untaboo - 23 мая 2020 16:06 -

я пишу своё API и поэтому требуется доступ без прав админов и пользователей. Там своя система защит)

TechnicalMan
Юзер

TechnicalMan - 25 мая 2020 12:42 -

Значит нужно зайти на сайт официальной документации в раздел "для разработчиков" и там написан файл, который нужно подключать для разработки API
В любом случае ни один из ваших трех файлов не нужен. Ну разве что functions.php, но я бы в целях безопасности достал оттуда только одну необходимую функцию - get_url

TechnicalMan
Юзер

TechnicalMan - 22 мая 2020 23:33 -

В ответ нужно только последнюю строку поправить, не заметил отсутствие слэша
echo $config['http_home_url'] . get_url($row['category']) ."/". $fulllink;

dj-avtosh
PHP-developer

dj-avtosh - 23 мая 2020 10:44 -

Иногда лучше жевать, чем говорить (с)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

TechnicalMan
Юзер

TechnicalMan - 23 мая 2020 10:47 -

Ну я не ожидал, что ответ нельзя в течение пары минут редачить, как комментарии

dj-avtosh
PHP-developer

dj-avtosh - 23 мая 2020 11:05 -

Ответ хороший, но посмею предложить еще и свой вариант (не тестировал):

<?php

$row = $db->super_query("SELECT id, category, alt_name, date FROM ".PREFIX."_post WHERE id = " . (int)$id);

if ( empty ( $row['id'] ) )
{
  return;
}

$full_link = "index.php?newsid=" . $row['id'];

if( $config['allow_alt_url'] ) 
{

	switch ( true )
	{

		case ( 1 == $config['seo_type'] ) :

			$full_link = get_url( (int)$row['category'] ) . "/" . $row['id'] . "-";

		break;

		case ( 2 == $config['seo_type'] ) :

			$full_link = $row['id'] . "-";

		break;

		default :

			$full_link =  date( 'Y/m/d/', strtotime($row['date']) );

	}

	$full_link .= $row['alt_name'] . ".html";

}

echo $config['http_home_url'] . $full_link;

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх