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

Не могу разобраться с переключателем страниц для новостей

14.02.2018, 22:16. Показов 379. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, товарищи! Проблема в следующем, есть достаточное количество новостей, чтобы не вываливать все, я сделал вывод первых 5ти новостей, но дальше нужно было сделать переключение новостей с помощью pageselector, который почему-то у меня не работает. при нажатии на 1/2/3 вылетает url/news/main/page/3 и 404.
Структура URL: url/page/module
Сначала подключил страницы
PHP
1
2
3
 else if ($Page == 'news') {
if (!$Module or $Page == 'news' and $Module == 'category' or $Page == 'news' and $Module == 'main') include('module/news/main.php');
else if ($Module == 'material') include('module/news/material.php');
в main.php у нас

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php 
if ($Module == 'category' and $_GET['id'] != 1 and $_GET['id'] != 2 and $_GET['id'] != 3) MessageSend(1, 'Такой категории не существует.', '/news');
$_GET['page'] += 0;
Head('Новости');
?>
<body>
<div id="wrapper">
 
<?php  Menu();
MessageShow()?> 
<?php 
if ($_SESSION['USER_GROUP'] == 2) echo '<a href="/news/add"><div class="button15">Добавить новость</a></div>'
?>
    
<?php 
if (!$Module or $Module == 'main') {
$Param1 = 'SELECT `id`, `name`, `added`, `date` FROM `news` ORDER BY `id` DESC LIMIT 0, 5';
$Param2 = 'SELECT `id`, `name`, `added`, `date`, FROM `news` ORDER BY `id` DESC LIMIT START, 5';
$Param3 = 'SELECT COUNT(`id`) FROM `news`';
$Param4 = '/news/main/page/';
} else if ($Module == 'category') {
$Param1 = 'SELECT `id`, `name`, `added`, `date` FROM `news` WHERE `cat` = '.$_GET['id'].' ORDER BY `id` DESC LIMIT 0, 5';
$Param2 = 'SELECT `id`, `name`, `added`, `date`, `active` FROM `news` WHERE `cat` = '.$_GET['id'].' ORDER BY `id` DESC LIMIT START, 5';
$Param3 = 'SELECT COUNT(`id`) FROM `news` WHERE `cat` = '.$_GET['id'];
$Param4 = '/news/category/?id='.$_GET['id'].'/page/';
}
 
$Count = mysqli_fetch_row(mysqli_query($CONNECT, $Param3));
 
if (!$_GET['page']) {
$_GET['page'] = 1;
$Result = mysqli_query($CONNECT, $Param1);
} else {
$Start = ($_GET['page'] - 1) * 5;
$Result = mysqli_query($CONNECT, str_replace('START', $Start, $Param2));
}
 
PageSelector($Param4, $_GET['page'], $Count);
 
while ($Row = mysqli_fetch_assoc($Result)) echo '<a href="/news/material/?id='.$Row['id'].'"><div class="NewsBlock"><span>'.$Row['name'].'</span><br>Добавил: '.$Row['added'].' | '.$Row['date'].'</a> </div>';
?>
</div>
в material.php у нас
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
$_GET['id'] += 0;
if ($_GET['id'] == 0) MessageSend(1, 'URL адрес указан неверно.', '/news');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT `name`, `added`, `date`, `read`, `text` FROM `news` WHERE `id` = '.$_GET['id']));
if (!$Row['name']) MessageSend(1, 'Такой новости не существует.', '/news');
mysqli_query($CONNECT, 'UPDATE `news` SET `read` = `read` + 1 WHERE `id` = '.$_GET['id']);
Head($Row['name']);
?>
<body>
<div id="wrapper">
 
<?php  Menu();
MessageShow()?> 
 
<?php 
if ($_SESSION['USER_GROUP'] == 2) $EDIT = '| <a href="/news/edit/?id='.$_GET['id'].'">Редактировать новость</a> | <a href="/news/delete/?id='.$_GET['id'].'">Удалить новость</a>';
    
echo '<div class="gucci">'.$Row['name'].'<br><br>'.$Row['text'].'<br><br> Просмотров: '.($Row['read'] + 1).' | Добавил: '.$Row['added'].' | Дата: '.$Row['date'].' '.$EDIT.' </div>';
?>
Сама функция pageselector лежит в index.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function PageSelector($p1, $p2, $p3, $p4 = 5) {
/*
$p1 - URL (Например: /news/main/page)
$p2 - Текущая страница (из $Param['page'])
$p3 - Кол-во новостей
$p4 - Кол-во записей на странице
*/
$Page = ceil($p3[0] / $p4); //делим кол-во новостей на кол-во записей на странице.
if ($Page > 1) { //А нужен ли переключатель?
echo '<div class="PageSelector">';
for($i = ($p2 - 3); $i < ($Page + 1); $i++) {
if ($i > 0 and $i <= ($p2 + 3)) {
if ($p2 == $i) $Swch = 'SwchItemCur';
else $Swch = 'SwchItem';
echo '<a class="'.$Swch.'" href="'.$p1.$i.'">'.$i.'</a>';
}
}
echo '</div>';
}
}
Я понимаю, что объем кода большой, могу только извиниться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2018, 22:16
Ответы с готовыми решениями:

Создать нумерацию страниц для новостей
Делаю сайт на asp.net web pages razor, ms sql. Вот добавил админ новостей в базу штук 20. Как...

Задали работу, не могу разобраться. Используется делфи 10, не могу разобраться, как это сделать
В одномерном массиве, состоящем из n вещественных элементов, вычислить: минимальный элемент массива...

Не могу написать комментарии для функции поиска, не могу разобраться...
void __fastcall TForm1::FindDialog1Find(TObject *Sender) { int found, start, end; //...

Несколько страниц добавления новостей
Добрый день подскажите пожалуйста как сделать что бы в админке DLE 10.2 было не сколько страниц...

1
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 314
14.02.2018, 22:46 2
Безликие имена переменных, "магческие" числа в теле функций, нет: тут извиняться мало.
Тут нужно либо оставить только проблемное место, либо переписать код, что бы его было приятно читать.
Сомневаюсь, что кто-то станет разбираться с чужими портянками столь безрадостно оформленными...

Вот это:
PHP
1
2
3
4
$p1 - URL (Например: /news/main/page)
$p2 - Текущая страница (из $Param['page'])
$p3 - Кол-во новостей
$p4 - Кол-во записей на странице
Почему изначально нельзя назвать как-то так:
PHP
1
2
3
4
$url - URL (Например: /news/main/page)
$currentPage - Текущая страница (из $Param['page'])
$countOfNews - Кол-во новостей
$countOfPost - Кол-во записей на странице
Кстати, почему в функции PageSelector в коментах $p3 описана как все остальные, а в теле функции обращение к ней идет как к массиву (элементу массива)? Что фактически передается в $_GET['page'] - массив?
Касательно всех остальных индексов - тоже не понятно: почему в одной строке "2", а в другой "5" - зачем эти цифры там?
"Вездесущая" пятёрка (я так понимаю кол-во записей по умолчанию) если вдруг это кол-во нужно будет изменить - придётся "бегать" по всем скриптам и надеяться, что нигде её не пропустили??!
Что бы не было такого "блошиного цирка" стоит предусмотреть единый файл-конфиг, в котором объяввить, например: $defaultPostCount = 5; проинклудить этот конфиг во всех скриптах, где планируется использование этого значения и в теле скриптов писать уже не "магическую пятёрку/семёрку/сотку", а имя соответствующей переменной, в данном примере: $defaultPostCount.

PS. Если я правильно понимаю происходящее, то ошибка в восьмой строке файла index.php, удачи! )))
1
14.02.2018, 22:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2018, 22:46
Помогаю со студенческими работами здесь

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

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

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

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


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

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