Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Символьные коды из названия, работа с БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
RAPOS
Отправлено: 13 Июня, 2013 - 18:31:08
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Доброго времени суток уважаемые коллеги. Ниндзя

Есть пожалуй не простая задача которую я пытаюсь решить. Сайт на bitrix это к сведению.
Так вот в каждой статье и т.п. есть Символьные коды.
На сайте с которым я работаю этих статей более 4000 тысяч, в более чем 200 - 300 штук нет этого символьного кода и поэтому наводя указателем мыши на заголовок статьи указывается адрес не самой статьи а двух слэшей.
Пример:
nashsite.ru/about/news/novoyi_podvig_gerkulesa/ - так правильно и если тыкнем на ссылку то перейдём на статью.
nashsite.ru/about/news// - так не правильно, потому что между двумя последними слэшами нет символьного кода, так как он отсутствует в свойствах статьи.
Дак вот, перепахивать все 4000 статей в ручную это ******* как долго. Нахмурился Что бы найти и дописать этот код.

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

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

Помогите пожалуйста с реализацией. Вот мой код:

PHP:
скопировать код в буфер обмена
  1.  
  2. ?php
  3.     // определяем начальные данные
  4.             $db_host = 'localhost';
  5.             $db_name = 'megatic';
  6.             $db_username = 'megatic';
  7.             $db_password = 'pass12345';
  8.             $db_table_to_show = 'b_iblock_element';
  9.          
  10.             // соединяемся с сервером базы данных
  11.             $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
  12.           or die("Could not connect: " . mysql_error());
  13.          
  14.             // подключаемся к базе данных
  15.             mysql_select_db($db_name, $connect_to_db)
  16.               or die("Could not select DB: " . mysql_error());
  17.          
  18.             // выбираем все значения из таблицы "Contacts"
  19.             $qr_result = mysql_query("select * from " . $db_table_to_show)
  20.               or die(mysql_error());
  21.                        
  22.                  echo '<title>SKRIPT</title>';
  23.          function transliterator($str)
  24. {
  25.     $str = mb_strtolower ($str, 'utf-8');
  26.     $tr = array(
  27.         "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
  28.         "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
  29.         "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
  30.         "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
  31.         "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
  32.         "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
  33.         "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
  34.         "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
  35.         "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
  36.         "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
  37.         "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
  38.         "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
  39.         "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
  40.         " "=> "_", "."=> "", "/"=> "_", "'" => "", '"' => ""
  41.     );
  42.  
  43. }
  44.                        
  45.             // выводим на страницу сайта заголовки HTML-таблицы
  46.             echo '<table border="1">';
  47.            echo '<thead>';
  48.            echo '<tr>';
  49.            echo '<th>NAME</th>';
  50.            echo '<th>CODE</th>';
  51.            echo '<th>TAGE</th>';
  52.            echo '</tr>';
  53.            echo '</thead>';
  54.            echo '<tbody>';
  55.            
  56.            // выводим в HTML-таблицу все данные клиентов из таблицы MySQL
  57.            while($data = mysql_fetch_array($qr_result)){
  58.               echo '<tr>';
  59.               echo '<td>' . $data['NAME'] . '</td>';
  60.               echo '<td>' . $data['CODE'] . '</td>';
  61.               echo '<td>' . $data['TAGE'] . '</td>';
  62.               echo '</tr>';
  63.            }
  64.            
  65.             echo '</tbody>';
  66.            echo '</table>';
  67.  
  68.            
  69.  
  70.             // закрываем соединение с сервером  базы данных
  71.  
  72.             mysql_close($connect_to_db);
  73.         ?>
  74.  
 
 Top
DelphinPRO
Отправлено: 13 Июня, 2013 - 18:58:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
RAPOS
Отправлено: 13 Июня, 2013 - 19:08:21
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
что бы не перепахивать базу, просто модифицируйте функцию вывода этих адресов. логика та же: есть алиас - пишем его, нет - пишем транслитерированное название. Заодно и в будущем, когда забудут указать алиас, все буде работать.
Можно здесь же записывать транслитерированный алиас в базу, чтоб в следующий раз его сразу брать


Спасибо за совет, но ничего не понял, можете подробно объяснить или код дать если он не большой или даже и большой но готовый, чтобы не писать вам его.????

Возможно я напишу другими словами то, что вы уже написали, но я уже обдумывал над тем, что инфоблок выводит статьи с "символьными кодами" в адресе, дак вот, можно ли к нему дописать фрагмент, чтобы он выводил в адресе "ID" - статьи если у неё нету "Символьного кода". ???

Код вывода
PHP:
скопировать код в буфер обмена
  1.  
  2. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
  3.  
  4. if(CModule::IncludeModule('iblock'))
  5. {
  6. ##### ----- Массив id и кодов разделов скелета и тем
  7.  
  8.    $getSect = CIBlockSection::GetList(array(), array("IBLOCK_CODE" => "skelet"), false, array('ID','CODE'));
  9.    while($arSect = $getSect->Fetch()) $arResult['LIB']['SECTIONS'][$arSect['ID']] = $arSect['CODE'];
  10.    
  11.    $getTheme = CIBlockElement::GetList(array(), array("IBLOCK_CODE" => "themes"),false, false, array('ID','CODE','NAME'));
  12.    while($arTheme = $getTheme->Fetch()) $arResult['LIB']['THEMES'][$arTheme['ID']] = $arTheme;
  13.    
  14. ##### ----- Вывод статей в зависимости от раздела
  15.  
  16.    if(!$_REQUEST['subsection']) $_SECTION = $_REQUEST['section'];
  17.    else $_SECTION = $_REQUEST['subsection'];
  18.    
  19.    $newItems = array();
  20.    $ALL_ID = array();
  21.    foreach($arResult['ITEMS'] as $arItem)
  22.    {
  23.       if($arResult['LIB']['SECTIONS'][$arItem['PROPERTIES']['SK_SECTION']['VALUE']] == $_SECTION)
  24.       {
  25.          if($_GET['show'] == "all" || $arItem['PROPERTIES']['SK_FAVORITE']['VALUE'])
  26.          {
  27.             $arItem['PREVIEW_PICTURE'] = ($arItem['PREVIEW_PICTURE'])? CFile::GetPath($arItem['PREVIEW_PICTURE']) : "/base/img/no-image.png";
  28.             $newItems[] = $arItem;
  29.             $ALL_ID[] = $arItem['ID'];
  30.          };
  31.          $arResult['COUNT_ITEMS']++;
  32.       };
  33.    };
  34.    $arResult['ITEMS'] = array();
  35.    $arResult['ITEMS'] = $newItems;
  36.    
  37. ##### ----- Сбор всех тем раздела
  38.  
  39.    foreach($arResult['ITEMS'] as $arItem)
  40.    {
  41.       foreach($arItem['PROPERTIES']['SK_THEME']['VALUE'] as $arThemes)
  42.       {
  43.          $arResult['THEMES'][$arResult['LIB']['THEMES'][$arThemes]['CODE']] = $arResult['LIB']['THEMES'][$arThemes]['NAME'];
  44.          $arResult['THEMES4ART'][$arResult['LIB']['THEMES'][$arThemes]['CODE']] = $arResult['LIB']['THEMES'][$arThemes]['ID'];
  45.       };
  46.    };
  47.  
  48. ##### ----- Сбор всех схожих статей
  49.  
  50.    $PROP_ARR = array();
  51.    foreach($arResult['THEMES4ART'] as $ThemeID) $PROP_ARR[] = $ThemeID;
  52.    $getArtO = CIBlockElement::GetList(array(), array("IBLOCK_CODE" => "articles", "PROPERTY_SK_THEME" => $PROP_ARR, "!ID" => $ALL_ID),false, false, array('ID','CODE','NAME','PROPERTY_SK_THEME','PREVIEW_PICTURE','PREVIEW_TEXT','DATE_CREATE'));
  53.    while($arArtO = $getArtO->Fetch())
  54.    {
  55.       $arArtO['PREVIEW_PICTURE'] = ($arArtO['PREVIEW_PICTURE'])? CFile::GetPath($arArtO['PREVIEW_PICTURE']) : "/base/img/no-image.png";
  56.       $arResult['OTHER_ARTICLES'][$arArtO['ID']] = $arArtO;
  57.    };
  58.    
  59. ##### ----- Вывод всех подразделов
  60.  
  61.    $_SUBMENU = array();
  62.    $getMenu = CIBlockSection::GetList(array(), array("IBLOCK_CODE" => "skelet"),false, array('ID','CODE','NAME','PREVIEW_PICTURE','PREVIEW_TEXT','LEFT_MARGIN','RIGHT_MARGIN'));
  63.    while($arMenu = $getMenu->Fetch())
  64.    {
  65.       $arMenu['PREVIEW_PICTURE'] = ($arMenu['PREVIEW_PICTURE'])? CFile::GetPath($arMenu['PREVIEW_PICTURE']) : "/base/img/no-image.png";
  66.       $_SUBMENU[$arMenu['CODE']] = $arMenu;
  67.    };
  68.    
  69.    $LEFT_MARGIN = $_SUBMENU[$_REQUEST['section']]['LEFT_MARGIN'];
  70.    $RIGHT_MARGIN = $_SUBMENU[$_REQUEST['section']]['RIGHT_MARGIN'];
  71.    foreach($_SUBMENU as $elMenu)
  72.    {
  73.       if($elMenu['LEFT_MARGIN'] > $LEFT_MARGIN && $elMenu['RIGHT_MARGIN'] < $RIGHT_MARGIN)
  74.       {
  75.          $arResult['SUBMENU'][$elMenu['CODE']] = $elMenu;
  76.       };
  77.    };
  78. }
  79.  
  80. ?>
  81.  
  82.  

(Добавление)
Мне кто-нибудь поможет? Плиз!

(Отредактировано автором: 13 Июня, 2013 - 19:12:57)

 
 Top
vanicon
Отправлено: 13 Июня, 2013 - 20:24:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




DelphinPRO
Не совсем понял вас, конечно я не работал с битриксом, но предполагаю что там статья ищется по транслиту, и если на лету его формировать то в бд нужно тут же записывать его что бы ссылка получилась корректной.
RAPOS
Извини как я писал с битрикосм не работал по этому составить запрос на обновление не смогу, увы.


-----
Так было, так есть и так будет
 
 Top
RAPOS
Отправлено: 13 Июня, 2013 - 20:40:32
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




[quote=vanicon][/quote]

Да нет, в принципе задача какая.

Делается запрос к бд к таблице "i_block_element" к столбцам "NAME" и "CODE"
Скрипт проверяет столбец NAME на наличие CODE если строка CODE NULL присваивает ей значение транслитирируемое с названия статьи.
То есть обновлял базу хотя бы по 20 значений, чтобы избежать проблем.

То есть это код нужно использовать один раз. (Так глядишь кому-нибудь пригодиться) Хорошо
 
 Top
RAPOS
Отправлено: 14 Июня, 2013 - 07:09:47
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




И сного тишина... Пожалуйста помогите разобраться.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB