Привет всем, для вывода новостей из БД, в php, я использую вот этот код: Код (Text): SELECT * FROM news ORDER BY id DESC В таблице news у меня есть столбец categ в нём, как вы понимаете, записана категория. Как мне вывести новости, только с категорией, например sport?
Да, только все же в таблице новостей должны использоваться не слаги, а числовые идентификаторы категорий. Если в адресе страницы категории используется слаг, нужно его «развернуть» отдельным запросом, заодно проверив существование запрошенной категории. Тут описаны основы универсализации данного кода (один и тот же код используется для всех основных списков: общего списка, списков по категориям и списков по авторам; также может использоваться для списков комментариев без иерархии). Предварительные запросы не описаны, т.к. используемый движок их выполняет автоматом. Также не описаны присоединения (LEFT JOIN) и прочие вспомогательные запросы для получения доп. метаданных, которые не обеспечиваются автоматическими предварительными запросами (например, если в общем списке или в списках по категориям нужны метаданные авторов, то для их получения нужно присоединять таблицу авторов к осн. запросу, а вот в списках по авторам это делать не обязательно, т.к. в отдельно взятом списке автор один и его метаданные обеспечиваются предварительным запросом).
Алгоритм для обеспечения метаданных примерно такой: 1) изначально код получает список всех признаков («автор», «категория» и т.п.), для которых нужны метаданные (обычно это слаг для формирования ссылки и имя, например для признака «автор» это может быть mike и Михаил соответственно); 2) из списка удаляется признак, чьи метаданные получены заранее (для общего списка ничего не удаляется), и попутно расширяется список возвращаемых в основном запросе полей примерно такой строкой «, 'mike' `author_slug`, 'Михаил' `author_name`», а также добавляется условие к основному запросу « AND `author`=2» (2 – это мой числовой идентификатор); 3) в заключение для каждого оставшегося в списке признака расширяется список возвращаемых в основном запросе полей «, `table_author`.`slug` `author_slug`, `table_author`.`name` `author_name`», а также добавляется присоединение к основному запросу « LEFT JOIN `table_author` USING(`author`)».
@Valick, реакция ожидаема, но не от тебя. Естественно, я это написал не только для ТСа. --- Добавлено --- P.S. В моем первом посте в теме сделано вполне конкретное и понятное замечание. А дальше уже это т.с. информация к сведению для развития. --- Добавлено --- P.P.S. Если конкретно тебя раздражает, ты скажи прямо. Один раз я это у тебя уже спрашивал, но ты сказал, что лично тебе пофиг. Соврал?
@miketomlin, ты видишь негатив там где его нет. Расслабся, набухайся и включи наконец отображение смайликов
@miketomlin, Спасибо, я понял, что ничего не понял. Если в кратко, то в общей таблице в столбце категории все должно быть в числовом виде. У меня собственный движок, поэтому столько вопросов.
Второе предложение еще относится непосредственно к твоему вопросу. Или ты слаги в адресах страниц категорий вообще не используешь и хз зачем приплел к вопросу sport, а Artur_hopf тебя в этом поддержал? --- Добавлено --- P.S. Даже при использовании примерно таких адресов /category/1 имеет смысл делать предварительный запрос, чтобы проверить существование запрошенной категории.
@miketomlin, я сейчас вспомнил про возможность передавать значение переменной в url. Код (Text): //файл uplod.php c ссылкой ...uplod.php?template=template7&Numphotos=33 $template = $_GET['template']; $Numphotos = $_GET['Numphotos']; Но у меня всё происходит через index.php с помощью .htaccess и при неизвестной ссылке он перенаправляет на главную. Как это исправить? Код (Text): RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Тоже не понял, о чем ты и какое отношение это имеет к теме. index.php – это не главная, а фронт(контроллер) или, по-другому, единая точка входа. «При неизвестной ссылке» твой движок должен генерировать 404-ую страницу. --- Добавлено --- Припиши к домену из запощенной мной выше ссылки, например, /category или /category/test и посмотри, что получится (также обрати внимание на статус ответа в консоли браузера или в каком-нибудь сервисе – будет 404, а не 200).
@miketomlin, Про единую точку согласен. Теперь хочу объяснить при чем тут ссылка и .htaccess. Что бы дать человеку ссылку на стенку с статьями категории один, я хочу использовать переменную и с помощью её вывести новости данной категории. Значение переменной можно получить через ссылку, например /news?category=7 . Но вся проблема в том, что при попытке перейти на данный URL, меня перекидывает на '/' Что нужно изменить? Или дело не в .htaccess? --- Добавлено --- @miketomlin, дописал я к ссылке неизвестный адрес, ошибку не даст ибо он перекинет на страницу по деффолту
@miketomlin, блин, наверное стоило в начале сказать, что я юзаю конструкцию case в php, роутер дает переменную после домена и case уже выполняет свою роль, если не нашел, то кидает на default --- Добавлено --- @miketomlin PHP: function route($item = 1) { $request = explode("/", $_SERVER["REQUEST_URI"]); return $request[$item]; define(ROOT, $_SERVER['DOCUMENT_ROOT']); require(ROOT.'/sys/core.php'); $page = route(1); $ext = route(2); switch($page){ case 'post': echo '<h2>Конкретный пост</h2>'; break; case 'news': $title = "Новости"; $tpl = "news"; break; default: $title = "Главная"; $tpl = "default"; } --- Добавлено --- @miketomlin, накинул часть кодов
Ну значит код не находит и кидает. Совет: для начала при ненахождении все же выдавай 404-ую, а не делай редиркт. Редирект если и делается в подобных случаях, то только в оч. частных. --- Добавлено --- В $_SERVER["REQUEST_URI"] содержится не только путь, но и строка параметров. Вот моя статья на эту тему: Как сделать единую точку входа с ЧПУ? Там есть пример кода отделения пути от строки параметров. --- Добавлено --- Можно ограничиться только командой вроде list($p)=explode('?',$p,2); (условие перед ней нужно, только чтобы не «потерять» пути с вопросом на конце, когда вопрос есть, а строки параметров нет).
Да, никакого редиректа и в помине не было – в таком случае не нужно писать «перекидывает (кидает) на '/'», можно написать «выдается (или выводится) главная». Совет: дефолтную сделать 404-ой, а не главной, и соответственно главную распознавать и выдавать в отдельной ветке. По «роутеру» куча замечаний, но не будем об этом.
Ты советуешь дерьмовую инфу с адресом на дерьмо. Устаревшая логика, которую до сих пор советуешь. PHP: parse_url ( $url, PHP_URL_QUERY ); Лучше ? Yes. Можешь даже в if, эту вишню провернуть. Больше дерьма не должно быть.
Это насколько должны дерьмом мозги заплыть, чтобы не понимать, что во-первых показанная команда не тождественна процитированной, а во-вторых не «лучше», а по большому счету пофиг – выбирай, что больше нравится. @MouseZver, ты мне это уже писал, твое мнение учтено, выводы сделаны
Пофиг что советуешь дальше дерьмо, и понимаешь/или нет ? Сам себе этот факт поставил, норм. Тебе сколько раз писал с аргументами, где были сделаны выводы, там или тут ? ничего не изменилось, тождественно тому, что юзать php 4 в 2к18 и понимать что все правильно делаешь, либо косить под дурочку сваливая на "пофиг".
@MouseZver, что устарело, list или explode? Твоя дерьмовая ф-ция из того же четрвертого пыха, только она долго дорастала, чтобы возвращать отдельную часть адреса. И мне не нужно парсить полноформатный адрес, мне нужно из максимум двух частей получить первую часть. Что касается использования именно этого варианта в моей статье, я его выдернул из конкретного софта, а не сам написал. Но если бы ты давал норм. советы, а не поливал дерьмом мои посты по мелочам, какие-то изменения были бы выполнены в том числе и в обозначенном софте. А пока что приходится делать выводы, касающиеся совсем др. вещей.