Модуль indexpage?

Главные вкладки

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

Здравствуйте. Вопрос такой: нужно в одном определённом разделе сайта сделать алфавитную линейку поиска статей. Нашёл для этого только модуль 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 КБ

Комментарии

Аватар пользователя Natalie Natalie 25 июля 2006 в 4:53

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

Аватар пользователя Shelendor Shelendor 25 июля 2006 в 16:17

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

Аватар пользователя qman qman 30 июля 2006 в 20:51

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

Аватар пользователя Shelendor Shelendor 29 июля 2006 в 15:39

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

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

Аватар пользователя Natalie Natalie 29 июля 2006 в 18:42

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

Аватар пользователя Shelendor Shelendor 20 сентября 2006 в 23:28

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

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

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

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

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 .= '#';
    }

// ...
}

?>

Аватар пользователя Shelendor Shelendor 23 сентября 2006 в 15:18

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

There are no results

Return to index page for page

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

Аватар пользователя Гость Гость (не проверено) 28 сентября 2006 в 4:55

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

There are no results

Return to index page for page

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

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

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

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

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

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

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

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

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

Аватар пользователя rariteth rariteth 25 сентября 2006 в 20:13

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

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

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

Аватар пользователя rgb rgb 26 сентября 2006 в 8:06

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

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

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

замените на

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

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

Аватар пользователя rariteth rariteth 25 сентября 2006 в 23:01

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

Аватар пользователя Shelendor Shelendor 25 сентября 2006 в 23:11

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

Аватар пользователя rariteth rariteth 25 сентября 2006 в 23:20

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

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

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

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

Return to index page for page

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

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

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 в 13:25

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

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

There are no results
Return to index page for page

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

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

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

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

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

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-ить русскую букву.

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

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

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

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

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

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);
}
?>

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

Аватар пользователя Shelendor Shelendor 29 сентября 2006 в 4:03

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

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

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

Аватар пользователя rgb rgb 2 октября 2006 в 15:26

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

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

Аватар пользователя Shelendor Shelendor 3 октября 2006 в 0:14

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

Аватар пользователя rariteth rariteth 3 октября 2006 в 0:40

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

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

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

Аватар пользователя rgb rgb 3 октября 2006 в 18:28

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 сообщению

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

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

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

Аватар пользователя rgb rgb 4 октября 2006 в 10:04

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

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

Аватар пользователя Shelendor Shelendor 4 октября 2006 в 13:32

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

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

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

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

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

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

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

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

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

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

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

Smile Я знаю!

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

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

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

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

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

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

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

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

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

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

Пожалуйста Smile

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

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

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

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

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

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

Аватар пользователя smile smile 18 октября 2006 в 12:15

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

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

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

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

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

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

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

Аватар пользователя rgb rgb 19 октября 2006 в 8:36

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

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

Аватар пользователя rariteth rariteth 21 октября 2006 в 8:23

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

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

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

Аватар пользователя rgb rgb 22 октября 2006 в 21:28

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

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

Аватар пользователя Shelendor Shelendor 22 октября 2006 в 22:55

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

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

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

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

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

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

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

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

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

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

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

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

Прошу прощения, не увидел сразу пост от 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]" и меняем на то, что надо.

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

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

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

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

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

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

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

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

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

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

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

ну и так далее

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

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

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

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

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

Аватар пользователя Maf Maf (не проверено) 5 ноября 2006 в 22:54

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

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

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

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

Maf wrote:

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

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

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

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

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

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

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

Аватар пользователя Maf Maf (не проверено) 6 ноября 2006 в 1:52

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

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

Quote:

Quote:

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

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


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

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

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

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

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

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

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

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

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

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

Аватар пользователя Maf Maf (не проверено) 8 ноября 2006 в 3:53

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

Аватар пользователя rgb rgb 8 ноября 2006 в 10:30

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

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

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

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

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

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

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

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

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

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

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

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

Аватар пользователя Maf Maf (не проверено) 8 ноября 2006 в 21:18

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

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

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

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

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

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

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

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

Так я и думал.

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

Гляну.

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

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