Вход

View Full Version : Категории в модуле Pages


Brigadir
27.03.2005, 20:08
Модуль Pages предоставляет возможность неограниченной вложенности категорий, однако вариант показа всех категорий (а тем более в форме выпадающего списка) является достаточно неудобным при большом количестве категорий и подкатегорий.
Вопрос:
Как можно сделать, чтобы при входе в подкатегорию уровня №1 вместо выпадающего списка появлялась строка: "Список категорий >> Подкатегория №1" (с соответствующими ссылками),
а при входе в подкатегорию №2 - строка: "Список категорий >> Подкатегория №1 >> Подкатегория №2" и т.д.?
Соответственно на "главной" должно быть просто "Список категорий"..

Soniks
27.03.2005, 22:10
Brigadir это осуществимо, но для этого потребуется большее количество запросов к базе данных, что будет перегружать системму

Brigadir
27.03.2005, 22:40
Всегда чем-то приходится жертвовать... :sad:
В данном случае я выбираю удобство модуля!
Soniks, подскажите пожалуйста как сделать... :smile:

Soniks
29.03.2005, 19:25
Brigadir Вот сделал хак:
http://mynuke.ru/modules.php?name=Downloads&op=getit&lid=51
:cool:

Brigadir
29.03.2005, 21:03
Brigadir Вот сделал хак:
http://mynuke.ru/modules.php?name=Downloads&op=getit&lid=51
:cool:

Вижу, вижу!!! :wink:
Soniks! Огромное спасибо! Полетел устанавливать!

Brigadir
29.03.2005, 22:49
Всё установил! :smile:
Хак - класс!

Soniks
29.03.2005, 22:57
Brigadir я рад :smile:

Brigadir
30.03.2005, 01:48
Soniks, одна вот только маленькая проблемка...
Предположим есть 2 главных раздела: "Спорт" и "Юмор"
В разделе "Спорт" есть:
- Формула 1
- Мото GP

При выборе раздела "Спорт" линейное меню остается прежним "Pages" и в дальнейшем при выборе подраздела "Формула 1" меню показывает:
Pages > Формула 1
Т.е. как бы "Спорт" теряется... :oooo:

Доступно объяснил проблему? :oops:
Как это можно исправить?

А в остальном всё отлично работает!

Soniks
30.03.2005, 02:20
нет, ничего не понял :oooo:
и что за "Pages" в меню?
Я все протестировал, все работает ок!

Brigadir а не понял о чем ты =)
хак переправил, качай заново!

Brigadir
30.03.2005, 02:31
Тьфу... не "Pages", а "Главная" :oops:
Постараюсь ещё разок объяснить....
Soniks, постарайся воссоздать следующее...

Заходим в Pages:
сверху "Произвольный вступительный текст...", ниже - две категории (для примера) "Первый раздел" и "Второй раздел"...
"Первый раздел" имеет 2 подкатегории "Подраздел 1", "Подраздел 2".

Нажимаю на "Первый раздел":
В линейном меню остается "Главная", пониже появляется "Подраздел 1"

Нажимаю на "Подраздел 1":
В линейном меню - "Главная > Подраздел 1", а вот промежуточного "Первый раздел" нету :oooo:
Если ползти "глубже", то всё нормально, т.е. проблемка возникает с неотображением главных категорий...

А сейчас нормально объяснил? :jumplol:

Как то уже стыдно спрашивать... :oops:
Умел бы - сам подправил бы.

Главная >> Страница первая >> Страница вторая

А можно сделать так, чтобы "Страница первая" не просто в форме текста шла, а в виде ссылки, как и все остальные подкатегории?

Soniks
30.03.2005, 02:43
Brigadir смотри выше!
А можно сделать так, чтобы "Страница первая" не просто в форме текста шла, а в виде ссылки, как и все остальные подкатегории?

та так оно и есть!

я этот хак перезалил еще раз, подправил кое что

Brigadir
30.03.2005, 02:52
:jumplol:
Всё заработало! Спасибо!

Brigadir
31.03.2005, 22:09
Soniks, добрый вечер!
"Небольшая" проблемка вылезла наружу...
Дело в том, что при добавлении статьи в модуле Pages всё проходит на ура.
Но когда эту уже размещенную статью желаешь отредактировать, то текст в режиме предпросмотра присутствует, а ниже, во встроенном редакторе его просто нет :oooo: Там вообще пустой редактор...

Вот такая вот беда... Частенько приходится редактировать... А так хочется "добить" это дело до предидеального состояния! Опять же не знаю как... :oops:

Soniks
31.03.2005, 22:42
Brigadir да, одну строчку забыл добавить
Открой фаил admin/modules/pages.php
Найди в функции function pages_edit_pr_page приблизительно 617 строку:

$oFCKeditor->InstanceName = "bodytext" ;
и ниже добавь:
$oFCKeditor->Value = "$bodytext";

Архив перелил!

Brigadir
14.04.2005, 23:42
А вот еще хотелось бы узнать:
как сделать так, чтобы последние публикации отображались не только на главной странице, но и на каждой последующей подкатегории (т.е. последние публикации, соответствующие этой категории) ?
Буду признателен если кто подскажет... :wink:

Soniks
15.04.2005, 00:59
Brigadir надо все проделать по аналогии как и при выводе первой страницы в этом модуле, за это отвечает функция main()
Вот этот код там какраз отвечает, за вывод новинок (~152):
if ($newhome == 1) {
$sql3 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_smallpages WHERE cid !='0' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";
$result3 = $db->sql_query($sql3);
if ($numrows = $db->sql_numrows($result3) > 0) {
echo "<b>"._NEWPAGES."</b><hr>";
while ($row = $db->sql_fetchrow($result3)) {
$p_pid = $row[pid];
$p_title = $row[title];
$p_hometext = $row[hometext];
$p_hometext = stripslashes(check_html($p_hometext, nohtml));
$p_date = date("d/m/Y", $row["postdate"]);
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\"><b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";
}
}
}
добавить его можно в функциии cat($cid) и showcat($cid). Эти две функции отличаются тем, что одна отображеет в себе категории и под-категории, а вторая только содержимая категории, т.е. если в категории нет под-категорий, то используется ф-ция showcat, а если есть подкатегории, то cat. Поэтому выбирайте сами где вы хотите видеть эту информацию об обновлении туда и добавляйте или же сразу в обе
в cat($cid):
найдите:
$sql4 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_smallpages WHERE cid ='$cid' AND active = '1' ORDER BY pid DESC";
Выше добавьте:
if ($newhome == 1) {
$sql3 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_smallpages WHERE cid ='$cid' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";
$result3 = $db->sql_query($sql3);
if ($numrows = $db->sql_numrows($result3) > 0) {
echo "<b>"._NEWPAGES."</b><hr>";
while ($row = $db->sql_fetchrow($result3)) {
$p_pid = $row[pid];
$p_title = $row[title];
$p_hometext = $row[hometext];
$p_hometext = stripslashes(check_html($p_hometext, nohtml));
$p_date = date("d/m/Y", $row["postdate"]);
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\"><b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";
}
}
}
в showcat($cid):
найдите:
$sql = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate, counter FROM ".$prefix."_smallpages WHERE cid ='$cid' AND active = '1' ORDER BY pid DESC limit $offset, $numpage";
Выше добавьте:
if ($newhome == 1) {
$sql3 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_smallpages WHERE cid ='$cid' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";
$result3 = $db->sql_query($sql3);
if ($numrows = $db->sql_numrows($result3) > 0) {
echo "<b>"._NEWPAGES."</b><hr>";
while ($row = $db->sql_fetchrow($result3)) {
$p_pid = $row[pid];
$p_title = $row[title];
$p_hometext = $row[hometext];
$p_hometext = stripslashes(check_html($p_hometext, nohtml));
$p_date = date("d/m/Y", $row["postdate"]);
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\"><b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";
}
}
}
так же надо добавить в каждую из этих функциию следующие переменные в global (идет сразу после объявлении функции, добавлять надо через запятую, в конце точка с запятой): $newhome,$newhomenum
теперь если в конфиге будет установленно переменной $newhome=1, то помимо отображения новых на главной будет и на остальных категориях!

Brigadir
21.04.2005, 21:09
Добрый вечер, Soniks!
Появился еще один вопрос... Надеюсь не надоел ещё... :oops:
Если поможешь решить его, то модуль можно быдет смело называть SoniksPages или Pages by Soniks! :wink:

Суть такова:

Есть много категорий, которые содержат не меньшее количество подкатегорий
Предположим есть категория "Спорт". В ней есть 2 подкатегории:
1. Формула 1
2. Мотоспорт

Допустим, созданию очередную страничку и называю её "Гран-При Австралии" и отношу её в подкатегорию "Формула 1".
Когда открывается модуль Pages, то на главной страничке высвечиваются "Последние публикации", одной из которых будет "Гран-При Австралии".
Пользователь не сможет сразу определить, к какой подкатегории относится данная публикация, поэтому вопрос...
Можно ли сделать вывод не просто названия Последней публикации, а в таком виде:
Спорт > Формула 1 > Гран-При Австралии ?
Но чтобы и "Спорт", и "Формула 1" являлись ссылками на соответствующие разделы/подразделы, а "Гран-При Австралии" - на саму публикацию...

Ну вот, вроде как объяснил... :jumplol:
Это реально проделать? При том, что уровеньподкатегорий может быть и 3-м и 4-м

Soniks
21.04.2005, 21:32
Brigadir впринципе все это реально, но как всегда это все бцудет перегружать базу
на днях гляну, как это можно осуществить.

Brigadir
21.04.2005, 23:34
Brigadir впринципе все это реально, но как всегда это все бцудет перегружать базу
на днях гляну, как это можно осуществить.

Soniks, подскажи с чего начать! Может и сам додумаюсь...

Soniks
22.04.2005, 00:00
Аналогично вывода линейного меню.
Найди:
function main() {
Выше добавь:

function cat_new_home($cid){
global $db, $prefix;
$cid = intval($cid);
$result = $db->sql_query("SELECT title, parentid FROM ".$prefix."_smallpages_categories WHERE cid='$cid'");
list($title,$parentid) = $db->sql_fetchrow($result);
if($parentid != "0"){
cat_new_home($parentid);
links($cid);
echo "$title > </a>";
}
else{
links($cid);
echo"$title > </a>";
}
}

Эта функция у нас отвечает за вывод списка категорий до нужной страницы.
В функции main() найди:
while ($row = $db->sql_fetchrow($result3)) {
$p_pid = $row[pid];

Ниже добавь:
$p_cid = $row[cid];
Еще чуть ниже найди:
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\"><b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";

замени на:
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\">";
cat_new_home($p_cid);
echo "<b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";

Вот и все:wink:

Brigadir
22.04.2005, 01:14
Soniks, ну то что ты Энштейн (как было сказано до меня) - это уже понятно :lol:
Всё заработало, но с учетом моей поправочки:
В функции:
function main() {

Найти:

$sql3 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_arktikacontent WHERE cid !='0' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";

И заменить на:

$sql3 = "SELECT cid, pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_arktikacontent WHERE cid !='0' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";

Добавлено cid...
Иначе не заработает :jumplol:

Soniks
22.04.2005, 01:17
Brigadir да и верно, забыл об этом упомянуть :)

Brigadir
22.04.2005, 03:05
Soniks, опять я :jumplol:
Мы тут на второй страничке "беседовали" про последние публикации..
Но видимо не поняли друг друга. Я то хотел:
В главной категории отражаются все новые публикации, а в каждой подкатегории - новые публикации, принадлежащие только ей!
Это можно провернуть как-нибудь?

Soniks
22.04.2005, 03:18
Brigadir так там это и осуществленно :smile:

Brigadir
22.04.2005, 03:22
Brigadir так там это и осуществленно :smile:

:oooo: как так?
Вот, допустим, захожу в подкатегорию "Юмор", а у меня высвечиваются последние публикации и из "Юмора" и из "Спорта" (т.е. всё, что было на главной страничке)...
А хотелось бы, чтобы показывались последние ТОЛЬКО из "юмора"...

Soniks
22.04.2005, 03:24
Brigadir мот быть ты не правильно чего сделал, там вся суть в запросе sql
WHERE cid ='$cid'? перепроверь...

Brigadir
22.04.2005, 03:57
Ну вот я совместил два последних моих вопроса...

if ($newhome == 1) {
$sql3 = "SELECT cid, pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_smallpages WHERE cid ='$cid' AND active = '1' ORDER BY pid DESC LIMIT $newhomenum";
$result3 = $db->sql_query($sql3);
if ($numrows = $db->sql_numrows($result3) > 0) {
echo "<b>"._NEWPAGES."</b><hr>";
while ($row = $db->sql_fetchrow($result3)) {
$p_pid = $row[pid];
$p_cid = $row[cid];
$p_title = $row[title];
$p_hometext = $row[hometext];
$p_hometext = stripslashes(check_html($p_hometext, nohtml));
$p_date = date("d/m/Y", $row["postdate"]);
echo "<img border=\"0\" src=\"modules/$module_name/images/page_pic.gif\" width=\"10\" height=\"14\">";
cat_new_home($p_cid);
echo "<b><a style=\"TEXT-DECORATION: none\" href=modules.php?name=$module_name&go=page&pid=$p_pid>$p_title</a></b><br><i>$p_hometext</i><br>"._SENDDATE.": $p_date<br><br>";

Видимо напрасно?

Soniks
22.04.2005, 11:06
Brigadir это можно добавить, но только не в функцию main, а в другие две и еще надо добавить в конце скобки!

Brigadir
22.04.2005, 22:14
Хотелось бы узнать:

$sql3 = "SELECT pid, title, hometext, UNIX_TIMESTAMP(date) as postdate FROM ".$prefix."_

Что означает в этом выражении - UNIX_TIMESTAMP(date) as postdate ?

Soniks
23.04.2005, 00:30
Brigadir грубо говоря берется из столбца postdate тамошнее записаное время и выщитывается сколько времени прошло с 1970-01-01 00:00:00 GMT до указаного времени в postdate, в секундах, в дальнейшем это уже будет преобразовано в нормальный вид даты:
$p_date = date("d/m/Y", $row["postdate"]);

Brigadir
25.04.2005, 23:08
Сегодня меня заинтересовала такая мысль:
Как можно прицепить значки "New" к категориям и подкатегориям модуле?
Т.е. категории/подкатегории, содержащие:
- новые публикации, отображаются с красным значком "New;
- публикации 2-3-хдневной давности - с фиолетовым значком?

Soniks
25.04.2005, 23:11
Brigadir делайте по анологии, например, с модулем Downloads

Brigadir
25.04.2005, 23:16
Brigadir делайте по анологии, например, с модулем Downloads

Так ведь Downloads рядом с названием категории не выводит значок... :oooo:
Значок выводится только рядом с названием файла..

Soniks
25.04.2005, 23:32
Brigadir ну а какая разница, если немного подумать , то можно и переделать под категории.
делается запрос на все страницы из этой категории и сортируются по дате и в соответствии нынешней дате выводятся различные картинки...

counter_striker
30.10.2005, 03:42
Почитал я тут что вы наболтали на 4-х страничка, норма. Вот только у меня с php большие проблемы, как бы этому научиться?Ну лана, телячьи нежности осьавлю :lol: .
Вопросик меня тревожит:
Установил Pages, в админпанели нажимаю "страницы" и мне выводит следующее: в "основное содержание страницы" написано : Not Found
The requested URL /modules/FCKeditor/editor/fckeditor.html was not found on this server.
Что за это за мазоль? Как от неё избавиться? :whistle:

всё вроде, я понял, а то поторопился о начал я тут орать, неразобравшись. всё ок!!!

Jay
22.11.2005, 21:36
Soniks и Brigadir!
Спасибо вам за отличную доработку хорошего модуля - наконец-то определился с модулем контента. Есть маленькое пожелание - хотелось бы, чтобы в TITLE страницы выдавалось нечто такое: Сайт | Раздел | Подраздел | Название статьи
Искал решение этой проблемы для стандартного модуля Content - не нашел. В Pages - тоже самое :(

Soniks
22.11.2005, 22:27
Jay http://mynuke.ru/modules.php?name=Downloads&op=getit&lid=49

kor
23.11.2005, 03:28
а как настроить dynamic_titles

Soniks
23.11.2005, 12:56
kor почитайте описание, все поймете, что спрашивать раньше времени!

kor
23.11.2005, 14:41
я читал и установил и ничего незаметил потому что я еще несталкивался с динамическими страницами!!! как там именно нстроить?

Soniks
24.11.2005, 01:27
kor я еще несталкивался с динамическими страницами!!!
ну как вы не сталкивались, а php-nuke выдает не динамические страницы?
изменение должно произойти в тайтлах страницы

Jay
13.01.2006, 19:09
Такой вопрос: а как можно отсортировать категории(!) и подкатегории(!) по названиям этих самых категорий (title) в модуле Pages? В файле index.php я не нашел строчки, в которой можно было бы это осуществить (здесь следует учесть слабые познания мои в php :( ), нашел (банальным поиском фразы "ORDER BY") три строчки:
1. - сортирует новые страницы по дате на главной странице модуля Pages
2. - так и не понял, что она сортирует, при изменении видимых изменений не нашел
3. - сортирует сами страницы

Система: php-nuke 7.6+2.9, модуль Pages с этого сайта специально для этой версии нюки, а также XAK PAGE LIST MENU опять же с этого сайта :)

kentbrn
14.01.2006, 00:40
да... у меня такой же вопросик .. уже тему создал на нюк.ру

Soniks
14.01.2006, 20:56
где то я об этом уже писал, но ладно...
категории (и подкатегории) выводятся из таблицы _smallpages_categories, следовательно, надо найти запросы где упоминается эта таблица, изменения стоит производить в функциях main() и cat()
к примеру, находим:
$sql = "SELECT cid, title, description FROM ".$prefix."_smallpages_categories WHERE parentid='0' $querylang";

и добавляем после оператора WHERE и его условия:
ORDER BY title
в результате чего получаем:
$sql = "SELECT cid, title, description FROM ".$prefix."_smallpages_categories WHERE parentid='0' $querylang ORDER BY title";
по такому же принципу выполняем изменение трех других запросов.

kentbrn
14.01.2006, 22:38
а если не смолпэжж стоит?! а простой контент!? проканает?

Soniks
15.01.2006, 00:08
Найдите:
$result = $db->sql_query("SELECT * FROM ".$prefix."_pages_categories");
Замените на:
$result = $db->sql_query("SELECT * FROM ".$prefix."_pages_categories ORDER BY title");