IPB

Welcome Guest ( Log In | Register )

2 Pages V  1 2 >  
Reply to this topicStart new topic
> Алфавитный (А-Я) поиск в MosetsTree, Помогите пожалуйста добавить русский алфавит
Alexander Stun
сообщение 12.01.06 - 21:34
Сообщение #1


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Было так:
0-9 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

а надо так:
0-9 | А | Б | В | Г | Д | Е | Ё | Ж | З | И | Й | К | Л | М | Н | О | П | Р | С | Т | У | Ф | Х | Ц | Ч | Ш | Щ | Ы | Э | Ю | Я

0-9 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Шаблон здесь
components/com_mtree/templates/bluetree/sub_alphaIndex.tpl.php
CODE

<?php echo $this->plugin('listalpha', '0') ?> |
<?php echo $this->plugin('listalpha', 'А') ?> |
<?php echo $this->plugin('listalpha', 'Б') ?> |
<?php echo $this->plugin('listalpha', 'В') ?> |
<?php echo $this->plugin('listalpha', 'Г') ?> |
<?php echo $this->plugin('listalpha', 'Д') ?> |
<?php echo $this->plugin('listalpha', 'Е') ?> |
<?php echo $this->plugin('listalpha', 'Ё') ?> |
<?php echo $this->plugin('listalpha', 'Ж') ?> |
<?php echo $this->plugin('listalpha', 'З') ?> |
<?php echo $this->plugin('listalpha', 'И') ?> |
<?php echo $this->plugin('listalpha', 'Й') ?> |
<?php echo $this->plugin('listalpha', 'К') ?> |
<?php echo $this->plugin('listalpha', 'Л') ?> |
<?php echo $this->plugin('listalpha', 'М') ?> |
<?php echo $this->plugin('listalpha', 'Н') ?> |
<?php echo $this->plugin('listalpha', 'О') ?> |
<?php echo $this->plugin('listalpha', 'П') ?> |
<?php echo $this->plugin('listalpha', 'Р') ?> |
<?php echo $this->plugin('listalpha', 'С') ?> |
<?php echo $this->plugin('listalpha', 'Т') ?> |
<?php echo $this->plugin('listalpha', 'У') ?> |
<?php echo $this->plugin('listalpha', 'Ф') ?> |
<?php echo $this->plugin('listalpha', 'Х') ?> |
<?php echo $this->plugin('listalpha', 'Ц') ?> |
<?php echo $this->plugin('listalpha', 'Ч') ?> |
<?php echo $this->plugin('listalpha', 'Ш') ?> |
<?php echo $this->plugin('listalpha', 'Щ') ?> |
<?php echo $this->plugin('listalpha', 'Ы') ?> |
<?php echo $this->plugin('listalpha', 'Э') ?> |
<?php echo $this->plugin('listalpha', 'Ю') ?> |
<?php echo $this->plugin('listalpha', 'Я') ?>
<br/><br/>
<?php echo $this->plugin('listalpha', '0') ?> |
<?php echo $this->plugin('listalpha', 'A') ?> |
<?php echo $this->plugin('listalpha', 'B') ?> |
<?php echo $this->plugin('listalpha', 'C') ?> |
<?php echo $this->plugin('listalpha', 'D') ?> |
<?php echo $this->plugin('listalpha', 'E') ?> |
<?php echo $this->plugin('listalpha', 'F') ?> |
<?php echo $this->plugin('listalpha', 'G') ?> |
<?php echo $this->plugin('listalpha', 'H') ?> |
<?php echo $this->plugin('listalpha', 'I') ?> |
<?php echo $this->plugin('listalpha', 'J') ?> |
<?php echo $this->plugin('listalpha', 'K') ?> |
<?php echo $this->plugin('listalpha', 'L') ?> |
<?php echo $this->plugin('listalpha', 'M') ?> |
<?php echo $this->plugin('listalpha', 'N') ?> |
<?php echo $this->plugin('listalpha', 'O') ?> |
<?php echo $this->plugin('listalpha', 'P') ?> |
<?php echo $this->plugin('listalpha', 'Q') ?> |
<?php echo $this->plugin('listalpha', 'R') ?> |
<?php echo $this->plugin('listalpha', 'S') ?> |
<?php echo $this->plugin('listalpha', 'T') ?> |
<?php echo $this->plugin('listalpha', 'U') ?> |
<?php echo $this->plugin('listalpha', 'V') ?> |
<?php echo $this->plugin('listalpha', 'W') ?> |
<?php echo $this->plugin('listalpha', 'X') ?> |
<?php echo $this->plugin('listalpha', 'Y') ?> |
<?php echo $this->plugin('listalpha', 'Z') ?>


Результат почемуто такой sad.gif :
0-9 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

0-9 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Яж ведь вижу, что код шаблона правильный, но русский алфавит так и не появляется.
В чём может быть причина этой неприятности и как её устранить? sad.gif

Сообщение отредактировал Alexander Stun - 12.01.06 - 21:36


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 12:22
Сообщение #2


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Это происходит потому, что в плагине, реализующем вывод алфавитного списка, не определено правило для кириллических символов.
Решение:
Находим файл components/com_mtree/Savant2/Savant2_Plugin_listalpha.php
В строке #25 видим такую конструкцию:
CODE
if ( eregi("[a-z0]{1}[0-9]*", $start) ) {

Заменяем ее на такую:
CODE
if ( eregi("[a-z0А-Я\Ё]{1}[0-9]*", $start) ) {

Сохраняемся.
Теперь переделанный вами шаблон алфавитного списка будет работать.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 13:22
Сообщение #3


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Хм smile.gif Я так и думал что здесь собака зарыта, только я пробовал менять на:
CODE
( eregi("[a-z0]{1}[0-9]*", "[a-я0]{2}[0-9]*", $start) )
по тому чтохотел показать как английский, так и русский. Всёровно у меня тогда ничего не получилось.

Спасибо Alecfyz за помощь!


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 13:26
Сообщение #4


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



QUOTE
по тому чтохотел показать как английский, так и русский.

Так при моем варианте будет работать и русский, и английский.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 13:35
Сообщение #5


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Теперь руские буквы видны smile.gif
Но вот очередная трабла:
После клика на одну из русских букв над алфавитным указателем вылазит ошибка следующего содержания:
QUOTE
Warning: implode() [function.implode]: Bad arguments. in D:\SERVER\Apache2\www\components\com_mtree\mtree.php on line 707

Warning: implode() [function.implode]: Bad arguments. in D:\SERVER\Apache2\www\components\com_mtree\mtree.php on line 715

Warning: array_merge() [function.array-merge]: Argument #2 is not an array in D:\SERVER\Apache2\www\components\com_mtree\mtree.php on line 726

Warning: reset() [function.reset]: Passed variable is not an array or object in D:\SERVER\Apache2\www\includes\joomla.php on line 1397


Ща гляну, что там с этими файлами, если не разберусь, придётся снова просить о помощи sad.gif


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 13:54
Сообщение #6


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Нет, здесь мне не разобраться без посторонней помощи sad.gif
файл components\com_mtree\mtree.php
CODE

// Get Categories - Normal
$cat_sql = "SELECT cat_name AS text, cat_id AS value FROM #__mt_cats WHERE ";
# начало строки 707
$cat_sql .= implode( ' AND ', $where_cat );
# конец строки 707
$cat_sql .= "AND cat_approved = '1' ";
$cat_sql .= "AND cat_published = '1' ";
$cat_sql .= "AND cat_featured = '0' ";
$cat_sql .= "ORDER BY cat_name ASC ";

// Get Categories - Featured
$cat_f_sql = "SELECT * FROM #__mt_cats WHERE ";
# начало строки 715
$cat_f_sql .= implode( ' AND ', $where_cat );
# конец строки 715
$cat_f_sql .= "AND cat_approved = '1' ";
$cat_f_sql .= "AND cat_published = '1' ";
$cat_f_sql .= "AND cat_featured = '1' ";
$cat_f_sql .= "ORDER BY ordering ASC ";

# SQL - Normal Categories
$lists = array();
$categories[] = mosHTML::makeOption( '-1', $_MT_LANG->SELECT_CATEGORY );
$database->setQuery( $cat_sql );
$normal_cat = $database->loadObjectList();
# начало строки 726
$categories = array_merge( $categories, $normal_cat );
#конец строки 726
$num_of_cats = count( $normal_cat );

файл includes\joomla.php
CODE

/**
* Generates an HTML select list
* @param array An array of objects
* @param string The value of the HTML name attribute
* @param string Additional HTML attributes for the <select> tag
* @param string The name of the object variable for the option value
* @param string The name of the object variable for the option text
* @param mixed The key that is selected
* @returns string HTML for the select list
*/
function selectList( &$arr, $tag_name, $tag_attribs, $key, $text, $selected=NULL ) {
# начало строки 1397
reset( $arr );
# конец строки 1397
$html = "\n<select name=\"$tag_name\" $tag_attribs>";
for ($i=0, $n=count( $arr ); $i < $n; $i++ ) {
$k = $arr[$i]->$key;
$t = $arr[$i]->$text;
$id = ( isset($arr[$i]->id) ? @$arr[$i]->id : null);

$extra = '';
$extra .= $id ? " id=\"" . $arr[$i]->id . "\"" : '';
if (is_array( $selected )) {
foreach ($selected as $obj) {
$k2 = $obj->$key;
if ($k == $k2) {
$extra .= " selected=\"selected\"";
break;
}
}
} else {
$extra .= ($k == $selected ? " selected=\"selected\"" : '');
}
$html .= "\n\t<option value=\"".$k."\"$extra>" . $t . "</option>";
}
$html .= "\n</select>\n";
return $html;
}

Думал, что смогу догадаться, чтобы поправить код, но тут для меня вообще "тёмный лес" sad.gif

Сообщение отредактировал Alexander Stun - 13.01.06 - 14:02


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 14:07
Сообщение #7


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



На самом деле, там ничего страшного нет.
файл mtree.php, строка #798
Код
CODE
} elseif ( eregi("[a-z0]{1}[0-9]*", $start) ) {

заменяем на
CODE
} elseif ( eregi("[a-z0А-Я\Ё]{1}[0-9]*", $start) ) {

Вот и все.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 14:49
Сообщение #8


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Странно, чтото у меня нет этого фрагмента кода в mtree.php
Может просто этот файл заменить твоим?


Сообщение отредактировал Alexander Stun - 13.01.06 - 14:53


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 15:00
Сообщение #9


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Найди в коде mtree.php начало функции function listalpha_cache
и отсчитай 13 строк вниз. Там и будет этот код.
В конце концов сделай поиск по всему файлу по ключу "a-z0" и найдешь этот кусок.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 15:15
Сообщение #10


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



QUOTE(Alecfyz @ 13.01.06 - 13:00) *

Найди в коде mtree.php начало функции function listalpha_cache
и отсчитай 13 строк вниз. Там и будет этот код.
В конце концов сделай поиск по всему файлу по ключу "a-z0" и найдешь этот кусок.
cool.gif

Интересно, такой функции function listalpha_cache у меня в mtree.php оказывается тоже нету.
Но, это единственное, что там есть подходящего:
CODE
# Alphabets (A-Z)
} elseif ( eregi("[a-z0-9]{1}[0-9]*", $start) ) {
$where[] = "link_name LIKE '".$start."%'";
$where_cat[] = "cat_name LIKE '".$start."%'";
}

Значит, как раз то его и правлю... smile.gif


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 15:18
Сообщение #11


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Ок. Потом отпишись. И скажи какая у тебя версия.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 15:26
Сообщение #12


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Всё! Полный порядок.
Можно и мануальчик по этой теме состряпать. Другим людям в помощь

У меня версия 1.03 (написано в эбауте компонента.)


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 13.01.06 - 15:29
Сообщение #13


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Вот и хорошо, что все получилось.
---
А у меня версия 1.55
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 15:41
Сообщение #14


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



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

Сообщение отредактировал Alexander Stun - 13.01.06 - 15:48


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alexander Stun
сообщение 13.01.06 - 16:30
Сообщение #15


Advanced Member
***

Группа: Clients
Сообщений: 142
Регистрация: 09.10.05
Пользователь №: 1,551



Вот как это сейчас выглядит: http://beta.mariupolweb.com/Справочник


--------------------
Host server Info: Linux | Apache 1.3.33 | PHP 4.3.11 | MySQL 4.1.10 | Zend Optimizer 2.5.7 | Joomla 1.0.7 | IPB 2.1.4
Official site: www.universelab.com
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Lufa
сообщение 05.02.06 - 01:45
Сообщение #16


Newbie
*

Группа: Members
Сообщений: 2
Регистрация: 08.05.05
Пользователь №: 719



(Alecfyz @ 13.01.06 - 13:29) *

Вот и хорошо, что все получилось.


Странно, у меня на 1.03 не получилось.

Алфавит есть, но ошибки с implode не исчезают.
Если кликнуть на кирилицу то показывает ошибки с implode + вообще все записи .

Поправил и listalpha и mtree.
Я мог что-то пропустить?

Спасибо.

Редактирование:
В mtree нажатая буква берется как
$start = substr(trim( mosGetParam( $_REQUEST, 'start', '' ) ), 0, 1);

То отрезается все кроме 1-го символа. А у меня кирилица передается как "%D0".
Вот почему не работает. А вот почему так передается?..

Редактирование 2:
Для себя решил заменой в mosets.php

$start = substr(trim( mosGetParam( $_REQUEST, 'start', '' ) ), 0, 1);
на

$start = trim( mosGetParam( $_REQUEST, 'start', '' ) );
$start=urldecode($start);
$start = substr($start, 0, 1);

То есть по ходу декодируюю в норм. символ.

Сообщение отредактировал Lufa - 05.02.06 - 02:08
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Lufa
сообщение 17.02.06 - 03:57
Сообщение #17


Newbie
*

Группа: Members
Сообщений: 2
Регистрация: 08.05.05
Пользователь №: 719



Странно.
У меня поиск по буквах работает Только в Firefox.

В IE - нет. sad.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Mr.Friction
сообщение 09.10.06 - 14:22
Сообщение #18


Newbie
*

Группа: Members
Сообщений: 8
Регистрация: 27.09.05
Пользователь №: 1,538



Почитал, что у вас тут написано и всёравно неполучилось sad.gif
Версия 1.59

    # Alphabets (A-Z)
    } elseif ( eregi("[a-z0А-Я\Ё]{1}[0-9]*", $start) ) {  - вот как написано у вас
        $where[] = "link_name LIKE '".$start."%'";
        $where_cat[] = "cat_name LIKE '".$start."%'";
    }
    
    # SQL condition to display category specific results
    $subcats = implode(", ",getSubCats_Recursive($cat_id));

    if ($subcats) $where[] = "cl.cat_id IN (" . $subcats . ")";
    if ($subcats) $where_cat[] = "cat_parent IN (" . $subcats . ")";


и вот такие выдаёт ошибки
Warning: implode(): Bad arguments. in public_html/components/com_mtree/mtree.php on line 893

Warning: implode(): Bad arguments. in public_html/components/com_mtree/mtree.php on line 901
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ant1dj
сообщение 28.01.07 - 16:19
Сообщение #19


Newbie
*

Группа: Members
Сообщений: 1
Регистрация: 28.01.07
Пользователь №: 4,193



Огромное спасибо Alecfyz
файл темплейта сделал чуть чуть по другому, но зато теперь все работает...я совсем ничего в регулярных выражениях не понимаю
еще раз спасибо
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
cafe4u
сообщение 09.02.07 - 17:39
Сообщение #20


Newbie
*

Группа: Members
Сообщений: 1
Регистрация: 09.02.07
Пользователь №: 4,217



У меня версия 1.5.9
Все сделала, как рекомендовано. Русский алфавит появился, но при нажатии на любую букву выводит весь каталог sad.gif
Поможете?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

2 Pages V  1 2 >
Reply to this topicStart new topic

 



Lo-Fi Version Time is now: 18.05.12 - 08:21
Рейтинг@Mail.ru Rambler's Top100 Яндекс цитирования