Модуль indexpage?

25 июля 2006 в 4:40
Аватар пользователя Shelendor Shelendor 0 101

Здравствуйте. Вопрос такой: нужно в одном определённом разделе сайта сделать алфавитную линейку поиска статей. Нашёл для этого только модуль indexpage. Но у него английский алфавит. Кто-нибудь переделывал его на русский? Вот здесь http://drupal.htdogs.ru/node/503#comment-3750 описано изменение в коде, но, судя по всему, там какая-то ошибка в ORDER BY b.weight, n.title;'); - после загрузки исправленного модуля Друпал падает со ссылкой на эту строку. Кто-нибудь знает решение? Или есть другой модуль, позволяющий создать линейку русского алфавита?

Прикреплённые версии модуля от rgb:

1.2.1 - аналог оригинального модуля, но с русским алфавитом.
Выовод английского алфавита можно включать/отключать в настройках.
Так же добавлена возможность отключать использование функции urlencode при формировании ссылок (по словам rgb: "в некоторых ситуациях ссылки получаются некорректными; скорее всего от настроек Apache зависит или ещё чего-то, не разбирался").

1.2.2.1 - добавлена возможность выбора терминов для формирования индекса.
Fix: некорректно формировалась строка алфавита, если есть материалы с заголовком, начинающимся не на букву.

1.2.3 - добавлена ссылка для вывода всех нодов (материалов) данного типа. (см. http://www.drupal.ru/node/1956#comment-13046)
ВНИМАНИЕ: Содержимое файла indexpage.css должно быть добавлено к style.css Вашей темы. С помощь класса CSS, который там описан, можно настраивать внешний вид букв, на странице "indexpage//all".

если вами замечены баги - пишите в комментариях!

ВложениеРазмер
Иконка пакета indexpage-patched-1.2.1.zip3.53 КБ
Иконка пакета indexpage-patched-1.2.2.1.zip4.26 КБ
Иконка пакета indexpage-patched-1.2.3.zip5.37 КБ

Комментарии

views тоже может делать индексацию.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

25 июля 2006 в 4:53

Nick - спасибо, но не помогло. Упал с таким сообщением:
Parse error: parse error, unexpected '=', expecting ';' in /home/сайт.ru/htdocs/modules/indexpage.module on line 156

25 июля 2006 в 16:17

А может ????
$russian_string = ‘АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ’.implode(“”,range(‘А’,’Я’));
for ($i=0;$i0 AND b.parent=0)
ORDER BY b.weight, n.title’);

30 июля 2006 в 20:51

я так понимаю, идей ни у кого нет? печально...
Наверное, придётся искать какой-то другой модуль...

Natalie - я нашёл информацию о том, чтобы с помощью views поставить статьи на странице в алфавитном порядке. Но это не то, что мне нужно. Что вы имели ввиду по поводу "views тоже может делать индексацию"?

29 июля 2006 в 15:39

Они могут выводить алфавит (как-то через summary). Посмотрите в документации про аргументы
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

29 июля 2006 в 18:42

как говорится - UP! Smile
С модулем views мы как-то друг друга не поняли Smile Так что возвращаюсь к началу.
Может быть за это время кто-нибудь всё же смог по-человечески русифицировать модуль indexpage???

20 сентября 2006 в 23:28

rgb - код изменённого модуля отправил. Заранее спасибо! Надеюсь, получится... А то уже всё испробовал - или вообще сайт падает, или вместо русской линейки букв крякозябры. Больше ничего добиться не удалось Smile

22 сентября 2006 в 3:53
Аватар пользователя rgb rgb 0

2Shelendor: письмо с ответом отправил.

2antazy@drupal.org:

Quote:
отпишитесь здесь если разберетесь

Отписываюсь Smile

А почему так пессимистично: "если разберётесь"? Надо заменить на "когда" Wink

Код я отправил Shelendor-у (тут не знаю как выложить). Кусок который выводит строку алфавита:

<?php

function indexpage_page_index($type) {
// ...

 /* Index by letter block */
  if (variable_get('indexpage_'.$type.'_alphaindex', 1)) {
    $output .= '<div class="filter">';
    $output .= '<h3>'.t('Alphabetically index').'</h3>';
    $output .= '<p>';

    $russian_string ='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'.implode("",range('A','Z'));
    for ($i=0;$i<strlen($russian_string);$i++) {
      $letter = drupal_convert_to_utf8(substr($russian_string,$i,1), 'Windows-1251');
      $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {node_revisions} r USING (nid) WHERE n.type='%s' AND (r.title LIKE '%s%%' OR r.title LIKE '%s%%')";
      if (db_result(db_query($sql, $type,  $letter, drupal_strtolower($letter)))) {
        $output .= l($letter, "indexpage/$type/".urlencode($letter)) . ' | ';
      }
      else {
        $output .= $letter . ' | ';
      }
    }

    $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {node_revisions} r USING (nid) WHERE n.type='%s' AND (r.title REGEXP '^[^[:alpha:]].*$')";
    if (db_result(db_query($sql, $type)) > 0) {
      $output .= l('#', "indexpage/$type/_");
    }
    else {
      $output .= '#';
    }
// ...
}

?>

Я постарался тут вносить минимальное кол-во изменений. Должен сразу предупредить, что написано это не очень хорошо (в плане использования ресурсов и быстродействия).

Я немного оптимизировал этот кусок, НО не тестировал его нормально - могут быть глюки.

<?php

function indexpage_page_index($type) {
// ...
/* Index by letter block */
  if (variable_get('indexpage_'.$type.'_alphaindex', 1)) {
    $output .= '<div class="filter">';
    $output .= '<h3>'.t('Alphabetically index').'</h3>';
    $output .= '<p>';

    // get letters array or make and cache it.
    $letters = variable_get('indexpage_letters', array());
    if (empty($letters)) {
      $utf_upper = drupal_convert_to_utf8('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'.implode('',range('A','Z')), 'Windows-1251');
      $utf_upper_length = drupal_strlen($utf_upper);

      $letters = array();
      for ($i = 0; $i < $utf_upper_length; $i++) {
        $letters[drupal_substr($utf_upper, $i ,1)] = 0;
      }
      variable_set('indexpage_letters', $letters);
    }

    // check for data
    $result = db_query('SELECT DISTINCT UPPER(SUBSTRING(r.title, 1, 1)) AS letter'
      . ' FROM {node} n'
      . ' INNER JOIN {node_revisions} r USING (nid)'
      . ' WHERE n.type=\'%s\''
      , $type);

    while ($data = db_fetch_array($result)) {
      $letters[$data['letter']]++;
    }

    $prefix = "indexpage/{$type}/";
    foreach ($letters as $letter => $count) {
      $output .= ($count ? l($letter, $prefix . urlencode($letter)) : $letter) . ' | ';
    }

    $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {node_revisions} r USING (nid) WHERE n.type='%s' AND (r.title REGEXP '^[^[:alpha:]].*$')";
    if (db_result(db_query($sql, $type)) > 0) {
      $output .= l('#', "indexpage/$type/_");
    }
    else {
      $output .= '#';
    }

// ...
}

?>

22 сентября 2006 в 13:22

хм... пока не понимаю. сбоев-то оно не даёт, но...

There are no results

Return to index page for page

:((( при этом английский алфавит выдаёт результат как и должен.

23 сентября 2006 в 15:18

/хм… пока не понимаю. сбоев-то оно не даёт, но…

There are no results

Return to index page for page

:((( при этом английский алфавит выдаёт результат как и должен./

У меня тоже самое. Подскажите как побороть

28 сентября 2006 в 4:55

блин никак не работает, делаю файл называю его index.module кидаю в папку всё труба в дауне с кучей ошибок... можно поподробнее как его установить то? плзз оч надо для текущего проекта

25 сентября 2006 в 10:10
Аватар пользователя rgb rgb 0

Дело в том, что приведённый выше код - это только часть работающего модуля. Модуль называется "Index page" (файл, соответственно, indexpage.module).

Далее у Вас несколько вариантов:

  1. попросить у Shelendor-а готовый (патченый, изменённый мною) модуль;
  2. взять с drupal.org модуль этот и самому произвести замены описанные выше;
  3. написать мне (мылом или в приват) и с тем, что бы я Вам выслал код (сейчас просто я не знаю куда слать или как тут выложить).
25 сентября 2006 в 16:57

респект за терпение. Всё работает, спасибо//
но видно я ослеп или отупел в конец. Я не пойму как мне сделать чтоб на одной из страниц главной категории был алфавитный поиск ищущий в подкатегориях... да вообще как сделать только алфавитный и там где мне нужно...

25 сентября 2006 в 17:16

да, видно совсем идиотский вопрос, но я не могу найти как алфавитный указатель вклеить в категорию "фильмы" например Sad

25 сентября 2006 в 20:13

хм... а у меня не пашет. наверное и правда проблемы с кодировкой у меня какие-то. буду разбираться...
Заодно тоже задам глупый вопрос - у меня при включении модуля идёт русский алфавит, а следом - английский. Как вообще удалить английский?

25 сентября 2006 в 22:07
Аватар пользователя rgb rgb 0

Quote:
...у меня при включении модуля идёт русский алфавит, а следом - английский. Как вообще удалить английский?

В модуле строку

$utf_upper = drupal_convert_to_utf8('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'.implode('',range('A','Z')), 'Windows-1251');

замените на

$utf_upper = drupal_convert_to_utf8('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'), 'Windows-1251');

и не будет Вам английского алфавита.

26 сентября 2006 в 8:06

у меня тоже самое - русский потом английский, но это мне лично не мешает, как собственно поиск то сделать, там поиск повсему сразу, а мне нужен только алфавит...как он настраивается я не понял, может там теги есть какието? ни мануала в офф архиве ничего зато текст лицензии огого

25 сентября 2006 в 23:01

rariteth - я не совсем понял что значит "там поиск повсему сразу, а мне нужен только алфавит"??? В настройках модуля вы указываете какие типы контента - story, page, или созданные вами - будут индексироваться модулем. для себя я решил, что просто тот раздел сайта, который мне нужно загнать под этот алфавитный поиск, я буду делать на одном типе контента и его индексировать, а стальные разделы - на других типах.

25 сентября 2006 в 23:11

а.. и тогда можно открывать давать права в "правах" на просмотр? так он работет, я то просто везде галки поставил полез в настройки там ничего... думал что обману буду делать на одном типе и ему разрешу один тип смтреть, а оказалось что он так и работает... лан спасибо за уделённое время. ну всё - равно открываю "indexpage" там:
первое "поиск по алфавиту",
второе "поиск по категория_1" и в подкатегориях
третье " поиск по категория_2" и в подкатегоиях и т.д.
как всё это убрать..., оставить только алфавит? если не надоел ответьте
вот пример сварганил:
Image Hosted by ImageShack.us

25 сентября 2006 в 23:20

?q=indexpage/page/%25D0%25A3

выдает такую ссылку на букву Н
There are no results

Return to index page for page

Английские работаю нормально

28 сентября 2006 в 5:33
Аватар пользователя rgb rgb 0

Quote:
?q=indexpage/page/%25D0%25A3

Quote:
выдает такую ссылку на букву Н

Странно, потому как у меня такая ссылка формируется для буквы "У". Для "Н" у меня вот что: indexpage/page/%25D0%259D.

Будем разбираться. Для начала предлагаю проверить, что выдаётся по такой же ссылке, как у меня. Сделайте запрос вида: ?q=indexpage/page/%25D0%259D.

И ещё, скажите, какие ссылки у Вас сформировались для "А" и "Я"? У меня:

  • indexpage/page/%25D0%2590
  • indexpage/page/%25D0%25AF
28 сентября 2006 в 8:14

Да. У меня тоже как у вас все. То есть ссылка выдаеться правильно, а вот

результатов не выводит:

There are no results
Return to index page for page

База у меня в утф-8 юникод

В чем может быть проблема? Очень нужны русские буквы. Подскажите что делать.Может какой-то другой модуль есть?

28 сентября 2006 в 13:25

Нашел! Если вместо буквы в заголовке создаваемой странице написать %25D0%259D, то модуль находит эту строку по нажатию на "Н". Но такой вид заголовка меня совсем не устраивает. Тоесть проблема где-то в конвертировании в юникод. Что делать????

28 сентября 2006 в 13:34
Аватар пользователя rgb rgb 0

Quote:
Если вместо буквы в заголовке создаваемой странице написать %25D0%259D, то модуль находит эту строку по нажатию на “Н”

"Это же не наш метод!" (с) Операция Ы...

Хорошо, попробуем по-другому Wink

Пробуем вместо

<?php
  // ...
  $prefix = "indexpage/{$type}/";
  foreach ($letters as $letter => $count) {
    $output .= ($count ? l($letter, $prefix . urlencode($letter)) : $letter) . ' | ';
  }
  // ...
?>

написать

<?php
  // ...
  $prefix = "indexpage/{$type}/";
  foreach ($letters as $letter => $count) {
    $output .= ($count ? l($letter, $prefix . $letter) : $letter) . ' | ';
  }
  // ...
?>

Или (если пользуемся оригинальным вариантом алгоритма) вместо

<?php
  // ...
  $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {node_revisions} r USING (nid) WHERE n.type='%s' AND (r.title LIKE '%s%%' OR r.title LIKE '%s%%')";
  if (db_result(db_query($sql, $type,  $letter, drupal_strtolower($letter)))) {
    $output .= l($letter, "indexpage/$type/".urlencode($letter)) . ' | ';
  }
  else {
    $output .= $letter . ' | ';
  }
  // ...
?>

написать

<?php
  // ...
  $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {node_revisions} r USING (nid) WHERE n.type='%s' AND (r.title LIKE '%s%%' OR r.title LIKE '%s%%')";
  if (db_result(db_query($sql, $type,  $letter, drupal_strtolower($letter)))) {
    $output .= l($letter, "indexpage/$type/$letter") . ' | ';
  }
  else {
    $output .= $letter . ' | ';
  }
  // ...
?>

Другими словами - пробуем при формировании URL-а не urlencode-ить русскую букву.

У меня и такой вариант работает...

28 сентября 2006 в 17:28

ищет супер, тока как его поставить в меню?
а то отображается "искать в страницах?"(ясен пень в настройках поставил). мне надо в категории ("фильмы" например) его поставить, а не в меню? и как убрать внизу "создать новую страницу"? тока в коде?

и где можно его разделить на русс и енг хотябы <br />

28 сентября 2006 в 21:28
Аватар пользователя rgb rgb 0

Quote:
ищет супер, тока как его поставить в меню?
а то отображается “искать в страницах?”(ясен пень в настройках поставил). мне надо в категории (“фильмы” например) его поставить, а не в меню?

Что-то я не особо понял о чём речь...

Если хотите добавить пункт меню, добавляйте в иерархию и ставьте путь типа "indexpage" или (если надо на определённый тип данных, "films", например) - "indexpage/films". Список возможных ссылок можно глянуть именно на странице "indexpage" ("Infex page for ...").

Как на категории это распространить - пока не знаю. Подробнее можете описать, как это представляется Вам?

Quote:
и как убрать внизу “создать новую страницу”? тока в коде? и где можно его разделить на русс и енг хотябы <br />

да - без модификации кода "создать новую страницу" не выкинуть.

Сейчас сделаем небольшие добавки в настройки модуля.

Действие 1: меняем функцию indexpage_settings().

Было:

<?php
function indexpage_settings() {
  // ...
  foreach (node_get_types() as $type => $name) {

    // ...

    $form[$set]['indexpage_'.$type.'_vocfilter'] = array(
      '#type' => 'checkbox',
      '#title' => t('Show vocabulary filters for this node type'),
      '#return_value' => 1,
      '#default_value' => variable_get('indexpage_'.$type.'_vocfilter', 1),
    );
  }
  return $form;
}
?>

Стало:

<?php
function indexpage_settings() {
  // ...
  foreach (node_get_types() as $type => $name) {

    // ...
 
    $form[$set]['indexpage_'.$type.'_vocfilter'] = array(
      '#type' => 'checkbox',
      '#title' => t('Show vocabulary filters for this node type'),
      '#return_value' => 1,
      '#default_value' => variable_get('indexpage_'.$type.'_vocfilter', 1),
    );
    $form[$set]['indexpage_'.$type.'_createnew'] = array(
      '#type' => 'checkbox',
      '#title' => t('Show %link link', array('%link'=>theme('placeholder','Create a new entry'))),
      '#return_value' => 1,
      '#default_value' => variable_get('indexpage_'.$type.'_createnew', 1),
    );
    $form[$set]['indexpage_'.$type.'_split'] = array(
      '#type' => 'checkbox',
      '#title' => t('Split alphabet'),
      '#return_value' => 1,
      '#default_value' => variable_get('indexpage_'.$type.'_split', 1),
    );
  }
  return $form;
}
?>

Добавили ещё 2 настройки для каждого типа (см. страницу admin/settings/indexpage):

Show 'Create a new entry' link
Показывать или нет линк “Создать новую страницу”.
Split alphabet
Разделять или нет русский и английский алфавиты.

Действие 2: меняем функцию indexpage_page_index($type).

Было:

<?php
function indexpage_page_index($type) {
  // ...

    // get letters array or make and cache it.
    $letters = variable_get('indexpage_letters', array());
    if (empty($letters)) {
      $utf_upper = drupal_convert_to_utf8('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ'.implode('',range('A','Z')), 'Windows-1251');
      $utf_upper_length = drupal_strlen($utf_upper);

      $letters = array();
      for ($i = 0; $i < $utf_upper_length; $i++) {
        $letters[drupal_substr($utf_upper, $i ,1)] = 0;
      }
      variable_set('indexpage_letters', $letters);
    }

    // check for data
    $result = db_query('SELECT DISTINCT UPPER(SUBSTRING(r.title, 1, 1)) AS letter'
      . ' FROM {node} n'
      . ' INNER JOIN {node_revisions} r USING (nid)'
      . ' WHERE n.type=\'%s\''
      , $type);

    while ($data = db_fetch_array($result)) {
      $letters[$data['letter']]++;
    }

    $prefix = "indexpage/{$type}/";
    for ($idx = 1; list($letter, $count) = each($letters); $idx++) {
      $output .= ($count ? l($letter, $prefix . urlencode($letter)) : $letter) . ' | ');
    }

  // ...

  /* Operations for this node type */
  $output .= '<h3>'.t('Operations').'</h3>';
  $output .= l(t('Create a new entry'), 'node/add/'.$type);
  print theme('page', $output);
}
?>

Стало:

<?php
function indexpage_page_index($type) {
  // ...

    // get letters array or make and cache it.
    $international = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ';
    if (variable_get('indexpage_'.$type.'_split', 1)) {
        $break_idx = strlen($international);
    } else {
        $break_idx = 0;
    }
    $letters = variable_get('indexpage_letters', array());
    if (empty($letters)) {
      $utf_upper = drupal_convert_to_utf8($international.implode('',range('A','Z')), 'Windows-1251');
      $utf_upper_length = drupal_strlen($utf_upper);

      $letters = array();
      for ($i = 0; $i < $utf_upper_length; $i++) {
        $letters[drupal_substr($utf_upper, $i ,1)] = 0;
      }
      variable_set('indexpage_letters', $letters);
    }

    // check for data
    $result = db_query('SELECT DISTINCT UPPER(SUBSTRING(r.title, 1, 1)) AS letter'
      . ' FROM {node} n'
      . ' INNER JOIN {node_revisions} r USING (nid)'
      . ' WHERE n.type=\'%s\''
      , $type);

    while ($data = db_fetch_array($result)) {
      $letters[$data['letter']]++;
    }

    $prefix = "indexpage/{$type}/";
    for ($idx = 1; list($letter, $count) = each($letters); $idx++) {
      $output .= ($count ? l($letter, $prefix . urlencode($letter)) : $letter)
        . ($idx == $break_idx ? '<br />' : ' | ');
    }

  // ...

  /* Operations for this node type */
  if (variable_get('indexpage_'.$type.'_createnew', 1)) {
    $output .= '<h3>'.t('Operations').'</h3>';
    $output .= l(t('Create a new entry'), 'node/add/'.$type);
  }

  print theme('page', $output);
}
?>

Здесь мы добавили код, который использует новые настройки. Теперь Вы по своему желанию можете включать/выключать показ ссылки "Создать новую страницу" и разделять/не разделять алфавит.

29 сентября 2006 в 12:00

так-с... ща не в состоянии тестировать изменения, люди, кто пробовал - скажите. Если работает, то для для всеобщего удобства и с позволения rgb прикреплю обновлённый модуль в первый пост ветки.

29 сентября 2006 в 4:03

перезалейте в первое сообщение, только, назовите по-другому... может не работать, а первое работает на все 100%

29 сентября 2006 в 12:01
Аватар пользователя rgb rgb 0

На всякий случай, замечу, что я не упомянул одно условие: всё, что написано, рассчитано на то, что _исходный_ код в файле модуля (.module) будет в кодировке 'Windows-1251' (или 'cp1251').

Если же он в 'koi8-r' или ещё в какой, то нужны будут модификации. Если кому надо - пишите - приведу тут эти исправления.

2 октября 2006 в 15:26

rgb - у меня некоторые проблемы.
Первые изменения, описанные вами здесь http://www.drupal.ru/node/1956#comment-11285 я добавил, всё работает, спасибо.

А вот следующие не смог. При попытке внести изменения для полного отключени английского алфавита всё падает со ссылкой на 186 строку.

Далее. Изменил по инструкции http://www.drupal.ru/node/1956#comment-11331 Да, появилась возможность отключать в настройках Create a new entry и разделять алфавит. Но у меня снова выдаёт в результатах "There are no results"

Кстати, в коде у меня было
$prefix = "indexpage/{$type}/";
foreach ($letters as $letter => $count) {
$output .= ($count ? l($letter, $prefix . $letter) : $letter) . ' | ';
}
в "my variant".
Указанный вами здесь
$prefix = "indexpage/{$type}/";
for ($idx = 1; list($letter, $count) = each($letters); $idx++) {
$output .= ($count ? l($letter, $prefix . urlencode($letter)) : $letter) . ' | ');
я найти не смог... Думал, может я чего случайно потёр - слазил в сообщение, которое вы прислали мне с кодом. Там тоже нет. В общем, я уже ничего не понимаю Smile

Обновил прикреплённый в 1 сообщении файл. Теперь там лежит indexpage от rgb, корректно работающий с русскими буквами, без приколов в духе %25D0%259D Smile

rgb - если мы вам ещё не надоели, помогите разобраться, пожалуйста! Smile

3 октября 2006 в 0:14

Shelendor, выкладывай потом разными файлами:
indexpage_[ru+eng].module
indexpage_[ru+eng+splitLng].module
потомучто может комуто надо только это, кому только то... да и вообще у разработчиков принято делать отдельный файл при малейшем изменении кода.. вот мне например не нужна настроеная индекспэйдж под 1251, меня и утф устраивает(как подумаю чтоб перекодировать скока перелопатить нужно - аж плохо становится). А вообще обидно что я в этом мало понимаю - никакой дискуссии, только rgb шарит и не поспоришь даже Smile

3 октября 2006 в 0:40

rariteth - да мне по идее тоже utf надо, но первый вариант при этом результаты выдавать отказывался... Sad В итоге мы тут определимся со списком файлов, которые будут прикреплены к 1 сообщению, но пока что придётся ждать rgb Smile кроме него вряд ли кто поможет Smile

3 октября 2006 в 1:20
Аватар пользователя rgb rgb 0

Shelendor wrote:
А вот следующие не смог. При попытке внести изменения для полного отключени английского алфавита всё падает со ссылкой на 186 строку.

Не могли бы Вы привести тут отрывок кода со 180-й по 190-ю строки? А то моя версия с Вашей могут отличаться...

Shelendor wrote:
Далее. Изменил по инструкции http://www.drupal.ru/node/1956#comment-11331 Да, появилась возможность отключать в настройках Create a new entry и разделять алфавит. Но у меня снова выдаёт в результатах “There are no results”

А это потому, что для формирования ссылки в приведённом коде у меня опять используется urlencode(). Просто уберите вызов этой ф-ции: вместо <?php urlencode($letter) ?> поставьте <?php $letter ?>.

Shelendor wrote:
Кстати, в коде у меня было
$prefix = “indexpage/{$type}/”;
foreach ($letters as $letter => $count) {
$output .= ($count ? l($letter, $prefix . $letter) : $letter) . ’ | ‘;
}
в “my variant”.
Указанный вами здесь...я найти не смог… Думал, может я чего случайно потёр - слазил в сообщение, которое вы прислали мне с кодом. Там тоже нет. В общем, я уже ничего не понимаю

Не - это моя ошибка, я скопировал код при составлении сообщения не из того места. Имелся ввиду именно такой код, как у Вас.

Хм.. кажется на patch надо переходить уже Smile

Shelendor wrote:
rgb - если мы вам ещё не надоели, помогите разобраться, пожалуйста!

Не надоели Smile Я с удовольствием помогу по мере возможности.

---

rariteth wrote:
Shelendor, выкладывай потом разными файлами...

Да - пожалуй стоит в порядок всё привести.

Что у нас есть?

  1. Исходный вариант модуля
  2. Вариант с русским алфавитом и оригинальным алгоритмом построения списка
  3. Вариант с русским алфавитом и моим алгоритмом построения списка
  4. Вариант без использования urlencode() для оригинального алгоритма
  5. Вариант без использования urlencode() для моего алгоритма
  6. Вариант с включением опций "Show ‘Create a new entry’ link" и "Split alphabet" с использованием моего алгоритма

Это приблизительно в хронологическом порядке. Вопрос (1): стоит ли и дальше все исправления приводить для оригинального и моего вариантов алгоритма? Вопрос (2): предлагаю выбрать один из вышеприведённых вариантов в качестве основного, с тем, что б развивать уже только его, а то опять запутаемся Smile

На голосование ставится кандидатура последнего варианта (мой алгоритм + urlencode + доп.опции). Если кого-то что-то в нём не устраивает - можем добавить опций, например, сделать использование urlencode - опциональным или вывод английского алфавита - тоже опциональным.

Ваше слово, коллеги!

rariteth wrote:
вот мне например не нужна настроеная индекспэйдж под 1251, меня и утф устраивает

Оно всё вроде под ЮТФ заточено. Исходники - в Win1251, вывод - UTF8. У кого-то не так? Говорите...

rariteth wrote:
А вообще обидно что я в этом мало понимаю - никакой дискуссии, только rgb шарит и не поспоришь даже

Cпорить-то можно и без знания PHP Wink

---

Shelendor wrote:
rariteth - да мне по идее тоже utf надо, но первый вариант при этом результаты выдавать отказывался

Странно это... Не пойму в чем причина. В любом случае - у меня и так и сяк работает...

Shelendor wrote:
мы тут определимся со списком файлов, которые будут прикреплены к 1 сообщению

Думаю, что лучше всё же один какой-то вариант оставить (см. выше)

3 октября 2006 в 18:28

ок, на днях заменю <?php urlencode($letter) ?> на <?php $letter ?> и потестирую.
rgb - предлагаю остановиться на вашем последнем варианте с максимальным количеством включающихся/отключающихся опций. Потому что: 1. ваш вариант по скорости и тяжести явно лучше стандартного. 2. люди в зависимости от потребностей смогу отключить или включить всё, что им надо.

4 октября 2006 в 1:54
Аватар пользователя rgb rgb 0

Shelendor wrote:
предлагаю остановиться на вашем последнем варианте

В таком случае пишите, что добавить туда. Как я понял, первое - это опциональное использование urlencode?

4 октября 2006 в 10:04

да! именно его Smile а второе - не знаю, поддержат ли меня остальные - возможность полного отключения английского алфавита.

4 октября 2006 в 13:32

мои пять копеек (если позволите) есть желание выводить алфавитный указатель не по всем термам, а по одной или нескольким из них.

5 октября 2006 в 0:11
Аватар пользователя rgb rgb 0

Quote:
есть желание выводить алфавитный указатель не по всем термам, а по одной или нескольким из них.

Ок. Это будет следующим этапом нашей программы.

5 октября 2006 в 12:16

rgb, ты супер!!! и того у нас в итоге получится:

русс алфавит
кодировка под русс алфавит
управление разделением алфавита
управление фунцией "create new entry"
вставка в определённые термы

5 октября 2006 в 12:22
Аватар пользователя rgb rgb 0

Quote:
rgb, ты супер!!!

Smile Я знаю!

Ну а если серьёзно - погодите благодарить - сделать надо сначала Smile У меня тут некоторые перемены в жизни сейчас (с работы ухожу) посему как всё устаканится - сделаю.

5 октября 2006 в 12:37
Аватар пользователя rgb rgb 0

Я отправил Shelendor-у модифицированную версию модуля:

  1. Добавлена возможность отключать использование функции urlencode при формировании ссылок (в некоторых ситуациях ссылки получаются некорректными; скорее всего от настроек Apache зависит или ещё чего-то, не разбирался).
  2. Добавл возможность включать-отключать вывод английского алфавита.

Кроме того, для самого модуля баг нашёл (у меня на машине, по крайней мере проявляется): при некоторых сочетаниях включёных и отключеных настроек модуля для какого-либо типа данных, Apache падает во время обработки сохранения этих настроек (страница admin/settings/indexpage). Это было как с моими добавками, так и без них.

11 октября 2006 в 18:12

rgb - СПАСИБО огромное! Smile
Проверил - у меня всё работает Smile

А можно поподробнее про баг? У меня такого пока не было, но мало ли... При каких сочетаниях это наблюдалось?

11 октября 2006 в 20:42
Аватар пользователя rgb rgb 0

Shelendor wrote:
rgb - СПАСИБО огромное!

Пожалуйста Smile

Shelendor wrote:
А можно поподробнее про баг? У меня такого пока не было, но мало ли… При каких сочетаниях это наблюдалось?

У меня наблюдается (не стабильно) например при попытке снять две последние галки в настройках отображения для типа "page", т.е. они стояли, я зашёл в настройки, снял их и нажал Save. В результате имею рухнувший поток Апача (не весь Апач, а только тот поток, который отрабатывал страницу мою). Сохранение данных всё же произошло (просто перегрузил страницу настройки).

Вот так обстояли дела...

11 октября 2006 в 20:54
Аватар пользователя rgb rgb 0

2smile: Не могли бы Вы подробнее чуть сказать? На странице происходит формирование алфавитного списка и списка терминов, куда входят ноды данного типа.

Так вот, "выбор термов по которым формируется алфавитный список" - он влияет и на алфавитный и на список термов или только на алфавитный список?

18 октября 2006 в 0:16

Без проблем. Попробую.

В данной редакции модуль формирует алвавитный указатель по всем нодам данного типа.

Что нужно: на реальном сайте в качестве разделов (терминов словаря) используются: новости, статьи и скажем БИОГРАФИИ и КНИГИ.

Новости и статьи искать по первой букве - неумно. Ну т.е. может быть это кому-то и интересно но реально кажется не особено нужно. Имхо, разуеемся. А вот для терминов "Биографии" и "Книги" алфавитный список просто необходим.

Соответственно, хотелось бы получить индекспейдж только для терма "Биографии". Вот как-то так. Ссори, если немного путанно.

18 октября 2006 в 12:15

кстати, да. на сайте, создаваемом с нуля, можно просто разные типы контента под разные разделы сайта сделать, а вот там где материал уже набит - действительно очень нужная вещь.
rgb - только просьба, как всегда сделать эту функцию отключаемой Smile

19 октября 2006 в 2:23
Аватар пользователя rgb rgb 0

Shelendor wrote:
rgb - только просьба, как всегда сделать эту функцию отключаемой

Да просто сделаю по-умолчанию выбор всех терминов. Пройдёт такой вариант?

19 октября 2006 в 8:36

а что? вроде хорошо получится, мы в админке определяем какие термы индексировать, а посититель при поиске ставит галочки где ему искать, например "только по названию фильма" или "по аторам книг", "по актёрам"

21 октября 2006 в 8:23

rariteth - и всё равно я считаю, что это уже совершенно другой модуль получается. тогда может быть вы договоритесь с rgb о создании такой ветки модуля, но загружать обычный indexpage этим... а то какой-то монстр получается. хотя, опять же, это просто моё мнение Smile в любом случае мы тут по неграмотности просто паразитируем на доброте rgb Smile так что за ним последнее слово.

22 октября 2006 в 6:00
Аватар пользователя rgb rgb 0

2All: Отправил Shelendor-у очередной вариант модуля. Посмотрите-попробуйте... Пишите если что не так.

2rariteth: да вроде ж был модуль, который позволяет настройки для поиска делать, и выбирать термины в т.ч. Не помню как называется... что-то в районе "Advanced search" или как-то так...

22 октября 2006 в 21:28

Новую версию прикрепил в первом сообщении. Сейчас тестировать у меня нет возможности, все кто потестит - отпишитесь, пожалуйста, чтобы rgb было проще отлавливать баги, если они есть Smile

22 октября 2006 в 22:55

огромное пасиба, всё работает - могу с уверенностью сказать, что ни у кого проблем не будет, потомучто сервак настоен не очень. Не работает только для голосования, ну это и не надо - просто говорю. Smile я тестирую на http://web.network-telecom.ru . единственно что хотелось бы добавить так это чтобы можно было бы их называть как-то, менять целиком "indexpage for станица", а не искать потом в словаре. -> Shelendor,rgb - А вообще есть идея сделать совместный проэкт, тока незнаю какой, но хочеться. Знаете как в рекламе макдональдс "Может он и не умеет ловить рыбу, зато он хорошо жарит картошку" это я про indexpage. место под сайт неограничено, севак на хосте моего друга он живёт через дорогу, токлько домен надо будет купить $20 я думаю не проблема? тестировать на ?????.network-telecom.ru бесплатно можно хоть до посинения... MySQL 5.0 . Вобщем ваши мысли, надо разумное что-то ну и прибыльное Smile

23 октября 2006 в 22:00
Аватар пользователя rgb rgb 0

rariteth wrote:
единственно что хотелось бы добавить так это чтобы можно было бы их называть как-то, менять целиком “indexpage for станица”, а не искать потом в словаре.

Поясните, пожалуйста, подробнее, а то я не понял о чем речь.

rariteth wrote:
А вообще есть идея сделать совместный проэкт, тока незнаю какой, но хочеться. [...] Вобщем ваши мысли, надо разумное что-то ну и прибыльное...

Мне очень приятно, что Вы вот так сразу оказываете доверие мне Smile (предложение партнёрства рассмативаю именно так!). Я не прочь принять участие в проекте который был бы интересен или прибылен (к сожалению, сейчас именно на последнем я делаю бОльший акцент). А если и то и другое - так ещё лучше Smile

Мысли разные приходят иногда... Думаю, что обсуждение такое стоит перенести или в другой топик или вообще в другую область (мылом, например) Wink

23 октября 2006 в 23:43

Quote rariteth:
единственно что хотелось бы добавить так это чтобы можно было бы их называть как-то, менять целиком “indexpage for станица”, а не искать потом в словаре.
Поясните, пожалуйста, подробнее, а то я не понял о чем речь.
----------------------------
всё просто - когда создаёшь что индексировать, то спрашивается как это будет называться, а потом приписывается "index for ..." вот это заменить бы.
про проэкт мылом проще согласен... думаем, всё просто, вот что? Smile на чём бы деньги рубить, место неограничено админ хостинга свой.
про доверие - низнаю просто чувство, а обмануть как-то не получится. Вопрос щикотливый, но я не кину, у меня не это цель, просто хочется сделать что-то стоящее, надоело чушь всякую делать. Прибыль будет не сразу, а приятно что-то вместе и своё.
334-554-044 rariteth@gooogle.com

24 октября 2006 в 1:53
Аватар пользователя rgb rgb 0

Прошу прощения, не увидел сразу пост от rariteth за Вто, 24/10/2006 - 01:53.

Предлагаю такое решение: в indexpage.module находим строку (у меня она 197-я; ф-ция indexpage_page()):

<?php

$output .= '<li>'.l('Index page for '.variable_get('indexpage_'.$type.'_name', $type),'indexpage/'.$type).'</li>';

?>

меняем на:

<?php

$output .= '<li>'.l(t('Index page for %index-type-name', array('%index-type-name'=>variable_get('indexpage_'.$type.'_name', $type))),'indexpage/'.$type).'</li>';

?>

Затем, хотя бы раз запрашиваем страницу http://www.site.com/indexpage (или http://www.site.com/?q=indexpage).

После этого, идём в "Локализацию" (администрирование сайта), ищем строку "Index page for". В результате будет несколько, выбираем "[i]Index page for %index-type-name[/i]" и меняем на то, что надо.

Предложенный вариант - это самый простой хак (просто первое, что в голову пришло :-)), поэтому если будет не то, что Вы хотели - пишите...

30 октября 2006 в 11:59

rgb - вы делали эту версию на базе стандартного кода, или вашего? Просто хочется чётко отслеживать в "шапке" темы изменения Smile

rariteth - хм... проблема в том, что я практически вообще не разбираюсь в программировании Smile так что толку от меня вряд ли будет много. А так - я всегда за хорошие идеи.

24 октября 2006 в 1:11
Аватар пользователя rgb rgb 0

Shelendor wrote:
вы делали эту версию на базе стандартного кода, или вашего?

На базе моего.

Версия 1.2.2 - это продолжение 1.2.1 (а перед той версией решили использовать "оптимизированный" вариант кода).

24 октября 2006 в 2:36
Аватар пользователя Maf Maf 0

А можно както добавить буквенную линейку пунктик "ВСЕ",который выводил бы все материалы данного типа вот так:

А
[ список материалов на букву "А"]
Б
[ список материалов на букву "Б"]
В
.......

ну и так далее

Или может это можно как-то сделать через аргументы?

5 ноября 2006 в 21:20
Аватар пользователя Maf Maf 0

Quote:
После этого, идём в “Локализацию” (администрирование сайта), ищем строку “Index page for”. В результате будет несколько, выбираем “Index page for %index-type-name” и меняем на то, что надо.

Предложенный вариант - это самый простой хак (просто первое, что в голову пришло :)), поэтому если будет не то, что Вы хотели - пишите…

Этим хаком меняеться только на странице ?q=indexpage,а хотелось бы чтобы менялось в заголовке страниц вида ?q=indexpage.yourcontentype
И еще вопрос. Можна ли вместо типа материала подставить текст из поля лейбл(или любого другого) в свойствах типа материала (я использую ССК)

5 ноября 2006 в 22:51
Аватар пользователя Maf Maf 0

Прошу прощения, ошибся. вместо "ссылка вида ?q=indexpage.yourcontentype" читать "ссылка вида ?q=indexpage/yourcontentype"

5 ноября 2006 в 22:54
Аватар пользователя rgb rgb 0

Maf wrote:
А можно както добавить буквенную линейку пунктик “ВСЕ”,который выводил бы все материалы данного типа

Все материалы данного типа? А "?q=<node type here>" подойдёт? Это то, что Вы хотите?

Maf wrote:

вот так:
А
[список материалов на букву “А”]
Б
[список материалов на букву “Б”]
В
…….
ну и так далее

Сорри, я не понял этого. Не могли бы Вы подробнее описать?

6 ноября 2006 в 1:10
Аватар пользователя rgb rgb 0

Maf wrote:
Этим хаком меняеться только на странице ?q=indexpage,а хотелось бы чтобы менялось в заголовке страниц вида ?q=indexpage.yourcontentype

Я гляну, что можно сделать.

Maf wrote:
И еще вопрос. Можна ли вместо типа материала подставить текст из поля лейбл(или любого другого) в свойствах типа материала (я использую ССК)

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

6 ноября 2006 в 1:11
Аватар пользователя Maf Maf 0

Quote:
Все материалы данного типа? А “?q=” подойдёт? Это то, что Вы хотите?

Нет. Так выводяться все материалы отсортированные по дате. Мне нужно чтобы они выводились отсортированные по алфавиту и только заголовки (индекспейдж при клике на букву на линейке делает это, но только для одной буквы, а нужно чтобы все сразу). Еще хотелось-бы чтобы на линейку с буквами добавилась кнопка "ВСЕ", при клике на которую все это и выводилось бы.

Quote:

Quote:

вот так:
А
[список материалов на букву “А”]
Б
[список материалов на букву “Б”]
В
…….
ну и так далее

Сорри, я не понял этого. Не могли бы Вы подробнее описать?


Вообщем-то все что я хочу я описал выше: чтоб выводились все метериалы по алфавиту. А дополнительно хотелось-бы чтобы перед группой материалов(заголовков), которые начинаються на одну букву стояла эта самая буква -- большая и красивая.
Ох. Чувствую что многого хочу, но если вам не трудно, то вы бы мне оченьздорово помогли.

6 ноября 2006 в 1:52

вобщем то разумное предложение, весь алфавит потом в конце/начале ссылка "весь материал"(и там большая буква потом список на неё), а при выборе какой-то буквы выводился список на эту букву и сама буква была в начале и большая(выделенная как-то)...

7 ноября 2006 в 0:44
Аватар пользователя rgb rgb 0

Новая версия модуля IndexPage отправлена Shelendor-у.

Посмотрите-попробуйте… Пишите если что не так.

7 ноября 2006 в 14:30
Аватар пользователя Maf Maf 0

Нашел в чем проблема. Я не исполюзую термов. Можно сделать так чтобы можно было их отключать, чтобы модуль на них не обращал внимания как в версии 1.2.1

8 ноября 2006 в 2:22
Аватар пользователя Maf Maf 0

Заставил его работать. Почему при нажатии на "all" он выводит только небольшой кусок списка? Как заставить выводить все?

8 ноября 2006 в 2:36
Аватар пользователя Maf Maf 0

И эту проблему решил. Оказалось дело в параметре "количество материалов на страницу", но максимальное значение там 99 и это уже проблема, если материалов больше. По-идее в случае большего числа материалов они должны выводиться потранично, но этгго не происходит: ссылок на типа страница1, страница2 нету, а модуль поросто выводит отведенное ему количество материалов Sad
Решений я вижу 2: убрать ограничение на 99 атериалов, либо заставить модуль бить материалы на страницы.

8 ноября 2006 в 3:53
Аватар пользователя rgb rgb 0

Maf wrote:
Я не исполюзую термов. Можно сделать так чтобы можно было их отключать, чтобы модуль на них не обращал внимания как в версии 1.2.1

Про "не использую" подробнее можно? Вы их не используете вообще или для какого-то типа контета? В общем опишите, что б я смог у себя повторить эту ситуацию. Тогда и смогу поправить модуль.

Maf wrote:
И эту проблему решил. Оказалось дело в параметре “количество материалов на страницу”, но максимальное значение там 99 и это уже проблема, если материалов больше.

Я гляну, что там можно сделать. Единственно такую штуку проверьте - стандартный (в смысле, не патченный) модуль тоже выводит у Вас не всё? (Просто мои исправления, по идее, не должны были на это повлиять, и если изначально модуль с выводом справлялся, то и теперь должен был).

8 ноября 2006 в 10:30

а я, пожалуй, всё же выскажусь за разделение на 2 ветки. Мне, к примеру, совершенно не нужна возможность вывода всех материалов. И не думаю, что моя ситуация уникальна Smile соответственно, нет нужды и желания делать эти добавки в css. Так что, rgb, если не сложно - можно просто исправить баги в старой версии без этих добавлений?

8 ноября 2006 в 15:08
Аватар пользователя rgb rgb 0

Исправить отдельно могу.

Что касаемо добавок в CSS - они совсем не обязательны. Они влияют только на [b]отображение[/b] букв, при выводе страницы со всеми материалами данного типа. Если не сделать этих добавок, то всё по прежднему будет работать, просто эти буквочки будут выводиться таким размером, как весь остальной текст и всё.

Отображение ссылки на "все" можно включить/выключить в настройках модуля ("Show 'All' link").

Таким образом, если Вы не хотите использовать эту ф-циональность, то просто отключаете её, да и всё.

Отдельно фиксы багов для версии 1.2.2 выложу тут завтра.

8 ноября 2006 в 18:17
Аватар пользователя Maf Maf 0

Quote:
Про “не использую” подробнее можно? Вы их не используете вообще или для какого-то типа контета? В общем опишите, что б я смог у себя повторить эту ситуацию. Тогда и смогу поправить модуль.

Вообще не использую. В такой ситуации версия выше 1.2.1 ничего не выводит
Quote:

Я гляну, что там можно сделать. Единственно такую штуку проверьте - стандартный (в смысле, не патченный) модуль тоже выводит у Вас не всё? (Просто мои исправления, по идее, не должны были на это повлиять, и если изначально модуль с выводом справлялся, то и теперь должен был).

В стандартном модуле нет функции "выводить все", а на одну букву материалов так много пока нет. Сейчас попробую наделать много материалов на букву и скажу как оно.
ЗыЖ ага. оно тоже не бьет на страницы и выводит только отведенное количество Sad Тоесть это глюк оригинального модуля. Есть идеи как исправить или сделать макс число материалов на страницу больше чем 99?

8 ноября 2006 в 21:18
Аватар пользователя rgb rgb 0

Maf wrote:
Вообще не использую. В такой ситуации версия выше 1.2.1 ничего не выводит

Понял. Постараюсь исправить.

Maf wrote:
ЗыЖ ага. оно тоже не бьет на страницы и выводит только отведенное количество Тоесть это глюк оригинального модуля.

Так я и думал.

Maf wrote:
Есть идеи как исправить или сделать макс число материалов на страницу больше чем 99?

Гляну.

9 ноября 2006 в 18:03
Аватар пользователя rgb rgb 0

Просто для информации: отправил Shelendor-у версию 1.2.2 с фиксами и обозвал её - 1.2.2.1.Там только исправления версии 1.2.2, без ф-ции вывода всех материалов, данного типа (эта ф-ция пристуствует только в версии 1.2.3).

9 ноября 2006 в 18:24