1

Тема: Сортировка тегов по алфавиту

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

2

Re: Сортировка тегов по алфавиту

Там сортировка не по дате. Они выводятся в порядке уменьшения количества элементов.

Я не буду включать в ядро возможность сортировки, но это легко можно сделать расширением. Могу помочь с этим.

3

Re: Сортировка тегов по алфавиту

Я имел ввиду страницу самого тега site.ru/tags/some-tag, где список статей с датами, которым этот тег присвоен.

Сейчас я пока переношу все текст со своего сайта на движок. Как только закончу, возможно, обращусь к вам за помощью с расширением. В данный момент это не приоритет.

4

Re: Сортировка тегов по алфавиту

А, понял. Всё равно это решается расширением на 10 строк.

5

Re: Сортировка тегов по алфавиту

Понятно.

6

Re: Сортировка тегов по алфавиту

Вот само расширение. Код ниже нужно поместить в файл _extensions/my_test/manifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension for="S2" engine="1.0">
    <id>my_test</id>
    <title>Test extension</title>
    <version>1.0a</version>
    <description>Change sort order in tags</description>
    <author>Roman Parpalak</author>

    <minversion>1.0a5</minversion>
    <maxtestedon>1.0a5</maxtestedon>

    <hooks>
        <hook id="fn_make_tags_pages_pre_get_arts_qr"><![CDATA[
$sort_var = 'titles';
$sort_desc = false;
        ]]></hook>
    </hooks>
</extension>

Да, чтобы оно заработало, опять нужно взять самую последнюю версию:
http://s2cms.ru/downloads/development/

7

Re: Сортировка тегов по алфавиту

Ух ты, супер. Сейчас все попробую. Позже отпишусь.

8

Re: Сортировка тегов по алфавиту

Попробовал. Работает. Но не все.

Оказалось, что мне требуется сортировка всех списков, где есть классы article и subsection. Плюс к этому, чтобы не выводились даты и выдержки, только заголовки. Не указывать время и не заполнять выдержку - не вариант.

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

18.08.2011 20:04:21. Текст был изменен (tataRen).

9

Re: Сортировка тегов по алфавиту

tataRen пишет:

Оказалось, что мне требуется сортировка всех списков, где есть классы article и subsection.

Всех - это не только в тегах, но и в разделах?

А почему вы не хотите даты и выдержки делать пустыми? Из-за RSS? Их нужно тоже убрать в тегах и разделах?

Если бы вы написали текст ошибки, у меня была бы возможность сказать, что там не в порядке.

10

Re: Сортировка тегов по алфавиту

Да, везде.

Да, из-за РСС. Даты и выдержки мне вообще не нужны, кроме как в РСС. В принципе, я могу просто не заполнять время и выдержки, а рсс вручную составлять. Это не сложно. Кстати, а в рсс сколько статей попадает?

Уже удалил то, что сам сделал. Было что-то типа: "Обнаружено новое расширение. Не может быть установлено, потому что что-то там не найдено."

p.s. Установить удалось. А вот нужный параметр для хука, который надо изменить, так и не смог найти. Точнее, нашел место в коде, которое создает список, но что именно там надо изменить, не знаю.

18.08.2011 22:15:36. Текст был изменен (tataRen).

11

Re: Сортировка тегов по алфавиту

Вот как сейчас выглядет у меня:

http://dl.dropbox.com/u/19042430/screen1.JPG
и
http://dl.dropbox.com/u/19042430/screen2.JPG

12

Re: Сортировка тегов по алфавиту

Даты и выдержки разделов можно убрать сейчас (я добавил второй хук в расширение):

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension for="S2" engine="1.0">
    <id>my_test</id>
    <title>Test extension</title>
    <version>1.0a</version>
    <description>Change sort order in tags</description>
    <author>Roman Parpalak</author>

    <minversion>1.0a5</minversion>
    <maxtestedon>1.0a5</maxtestedon>

    <hooks>
        <hook id="fn_make_tags_pages_pre_get_arts_qr"><![CDATA[
$sort_var = 'titles';
$sort_desc = false;
        ]]></hook>

        <hook id="fn_s2_parse_page_url_add_subarticle"><![CDATA[
$subarticles[count($subarticles) - 1]['time'] = $subarticles[count($subarticles) - 1]['excerpt'] = '';
        ]]></hook>
    </hooks>
</extension>

С остальным я вам помогу потом, скорее всего на выходных. Нужно привести в порядок код в articles.php, а то я добавлял функциональность кусками, и похожие вещи в разделах и тегах реализованы разными способами.

В крайнем случае можно лишние элементы скрыть через CSS (display: none;).

13

Re: Сортировка тегов по алфавиту

Спасибо. Про (display: none;) мог бы и сам догадаться :( — как-то не подумал. Проверил — оба варианта работают нормально.

14

Re: Сортировка тегов по алфавиту

Я доработал articles.php, его нужно взять из архива с последней версией:
http://s2cms.ru/downloads/development/

После этого можно обновить расширение, которое удаляет выдержки и даты и сортирует элементы по заголовку, а не по дате:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension for="S2" engine="1.0">
    <id>my_test</id>
    <title>Test extension</title>
    <version>1.0a</version>
    <description>Change sort order in tags</description>
    <author>Roman Parpalak</author>

    <minversion>1.0a5</minversion>
    <maxtestedon>1.0a5</maxtestedon>

    <hooks>
        <hook id="fn_s2_make_tags_pages_pre_get_arts_qr, fn_s2_parse_page_url_pre_get_children_qr"><![CDATA[
$sort_order = SORT_ASC;
$test_articles_count = 0;
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_add_subarticle, fn_s2_parse_page_url_add_subarticle"><![CDATA[
$sort_array[$test_articles_count] = $row['title'];
$subarticles[$test_articles_count]['time'] = $subarticles[$test_articles_count]['excerpt'] = '';
$test_articles_count++;
        ]]></hook>
    </hooks>
</extension>

Также начал делать расширение для seo. Сейчас оно умеет добавлять произвольное содержимое в тег title. Можно скачать здесь (ссылка Zip Archive внизу страницы): http://s2cms.ru/trac/browser/extensions/trunk/s2_seo

15

Re: Сортировка тегов по алфавиту

Сортировка не везде получилась. Вот скриншот страницы с тегом: http://dl.dropbox.com/u/19042430/screen3.JPG

В остальном все ок. Спасибо.

А сео расширение будет еще дорабатываться? ил уже можно в таком виде ставить?

И сколько статей в рсс добавляются? Есть ограничения?

16

Re: Сортировка тегов по алфавиту

Я позже посмотрю, что не в порядке с сортировкой.

Сейчас с s2_seo я ничего делать не буду. В будущем может добавлю туда sitemap. Так что можете сейчас устанавливать.

Сейчас в RSS попадают 10 последних страниц. Нужно больше?

17

Re: Сортировка тегов по алфавиту

Не могу воспроизвести у себя, чтобы подразделы на странице тега шли в обратном порядке.

Вы уверены, что изменения из manifest.xml были загружены? Удалите и установите это расширение заново (удалять можно, так как это расширение никаких ценных данных не собирало).

18

Re: Сортировка тегов по алфавиту

Удалил/установил. Никаких изменений. Они располагаются в порядке добавления. Удалил все разделы из тега и добавил в другом порядке - на странице они стали в новом порядке.

19

Re: Сортировка тегов по алфавиту

А, понял. Вам опять нужно обновить articles.php. И теперь расширение стало таким:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension for="S2" engine="1.0">
    <id>my_test</id>
    <title>Test extension</title>
    <version>1.0a</version>
    <description>Change sort order in tags</description>
    <author>Roman Parpalak</author>

    <minversion>1.0a5</minversion>
    <maxtestedon>1.0a5</maxtestedon>

    <hooks>
        <hook id="fn_s2_make_tags_pages_pre_get_arts_qr, fn_s2_parse_page_url_pre_get_children_qr"><![CDATA[
$sort_order = SORT_ASC;
$test_articles_count = 0;
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_add_subsection"><![CDATA[
$test_subsection_sort[] = $row['title'];
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_pre_merge"><![CDATA[
array_multisort($test_subsection_sort, $sort_order, $subsections);
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_add_subarticle, fn_s2_parse_page_url_add_subarticle"><![CDATA[
$sort_array[$test_articles_count] = $row['title'];
$subarticles[$test_articles_count]['time'] = $subarticles[$test_articles_count]['excerpt'] = '';
$test_articles_count++;
        ]]></hook>
    </hooks>
</extension>

Надеюсь, на этом всё заработает как надо.

20

Re: Сортировка тегов по алфавиту

Roman пишет:

Надеюсь, на этом всё заработает как надо.

Да, теперь, вроде, все работает как надо. Спасибо.

25.08.2011 18:56:07. Текст был изменен (tataRen).

21

Re: Сортировка тегов по алфавиту

Оказалось, не все в порядке. Вот такие ошибки выдает вверху страницы:

Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code on line 10

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code:10) in Z:\home\s2.ru\www\_include\functions.php on line 547

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code:10) in Z:\home\s2.ru\www\_include\functions.php on line 548

и такое внизу:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code:10) in Z:\home\s2.ru\www\index.php on line 188

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code:10) in Z:\home\s2.ru\www\index.php on line 189

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\s2.ru\www\_include\articles.php(444) : eval()'d code:10) in Z:\home\s2.ru\www\index.php on line 190

22

Re: Сортировка тегов по алфавиту

Исправил:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension for="S2" engine="1.0">
    <id>my_test</id>
    <title>Test extension</title>
    <version>1.0a</version>
    <description>Change sort order in tags</description>
    <author>Roman Parpalak</author>

    <minversion>1.0a5</minversion>
    <maxtestedon>1.0a6</maxtestedon>

    <hooks>
        <hook id="fn_s2_make_tags_pages_pre_get_arts_qr, fn_s2_parse_page_url_pre_get_children_qr"><![CDATA[
$sort_order = SORT_ASC;
$test_articles_count = 0;
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_add_subsection"><![CDATA[
$test_subsection_sort[] = $row['title'];
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_pre_merge"><![CDATA[
if (!empty($test_subsection_sort))
    array_multisort($test_subsection_sort, $sort_order, $subsections);
        ]]></hook>

        <hook id="fn_s2_make_tags_pages_add_subarticle, fn_s2_parse_page_url_add_subarticle"><![CDATA[
$sort_array[$test_articles_count] = $row['title'];
$subarticles[$test_articles_count]['time'] = $subarticles[$test_articles_count]['excerpt'] = '';
$test_articles_count++;
        ]]></hook>
    </hooks>
</extension>

23

Re: Сортировка тегов по алфавиту

Теперь уже точно все ок. Замучил я вас. Спасибо вам, что там оперативно откликаетесь на чужие проблемы.

24

Re: Сортировка тегов по алфавиту

Роман, а возможно ли задать свой стиль для ссылок тегов на странице вывода всех тегов?

25

Re: Сортировка тегов по алфавиту

Сейчас, похоже, нет. А нужно?