Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Нужна помощь в перегенерации чпу в dle

Тема в разделе "Вопросы- ответы", создана пользователем Dimoogle, 28 фев 2016.

28.02.16 в 13:15
22.11.16 в 18:41
17
4.014
0
  1. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    В общем ситуация такова. Использую для публикации материалов стороннюю программу тексткит, она публикует материалы с использованием собственного набора транслитерации, но мне не нравится транслит предложенный программой. Что я сделал, я удалил все ЧПУ ссылки простым запросом к базе update dle_post set alt_name=''; соответственно все url из базы были удалены, теперь у меня все новости в dle имеют адрес site.ru/5-.html и так далее, но эта проблема решаема, если я теперь открываю каждую новость, и ни чего не меняя жму сохранить, то автоматом заполняется alt_name по правилу DLE - вот после этого все отлично, вот теперь простой вопрос, после удаления alt_name из базы, как запустить повторно генерацию названий по правилу DLE, проще говоря как заставить DLE пересохранить все записи с присвоением дефолтного ЧПУ? Спасибо.
     
  2. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    Сохрани код в PHP файл и выполни его на рабочем сайте где надо проставить альтнемы
    PHP:
    <?php
    @error_reporting E_ALL E_WARNING E_NOTICE );
    @
    ini_set 'display_errors'true );
    @
    ini_set 'html_errors'false );
    @
    ini_set 'error_reporting'E_ALL E_WARNING E_NOTICE );

    define'DATALIFEENGINE'true );
    define'ROOT_DIR''.' );
    define'ENGINE_DIR'ROOT_DIR '/engine' );

    include 
    ENGINE_DIR '/data/config.php';
    require_once 
    ENGINE_DIR '/classes/mysql.php';
    require_once 
    ENGINE_DIR '/data/dbconfig.php';
    require_once 
    ENGINE_DIR '/modules/functions.php';


    $sql $db->query"SELECT id, title FROM `" PREFIX "_post` WHERE alt_name=''" );

    while( 
    $row $db->get_row($sql) )
    {
       
    $alt_name totranslitstripslashes$row["title"] ), truefalse );
        
    $db->query("UPDATE `" PREFIX "_post` SET alt_name='$alt_name'  WHERE id='{$row['id']}'");
    }
    echo 
    "ok";
    ?>
     
    #2 byroot, 28 фев 2016
    Последнее редактирование: 28 фев 2016
  3. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Спасибо за попытку помочь, но вылезла ошибка: Fatal error: Call to undefined function totranslit() in /home/user/data/www/site.ru/url.php on line 20 есть какие то мысли?
     
  4. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    в начало добавь
    PHP:
    function totranslit($var$lower true$punkt true) {
       global 
    $langtranslit;
       
       if ( 
    is_array($var) ) return "";

       
    $var str_replace(chr(0), ''$var);

       if (!
    is_array $langtranslit ) OR !count$langtranslit ) ) {
         
    $var trimstrip_tags$var ) );

         if ( 
    $punkt $var preg_replace"/[^a-z0-9\_\-.]+/mi"""$var );
         else 
    $var preg_replace"/[^a-z0-9\_\-]+/mi"""$var );

         
    $var preg_replace'#[.]+#i''.'$var );
         
    $var str_ireplace".php"".ppp"$var );

         if ( 
    $lower $var strtolower$var );

         return 
    $var;
       }
       
       
    $var trimstrip_tags$var ) );
       
    $var preg_replace"/\s+/ms""-"$var );
       
    $var str_replace"/""-"$var );

       
    $var strtr($var$langtranslit);
       
       if ( 
    $punkt $var preg_replace"/[^a-z0-9\_\-.]+/mi"""$var );
       else 
    $var preg_replace"/[^a-z0-9\_\-]+/mi"""$var );

       
    $var preg_replace'#[\-]+#i''-'$var );
       
    $var preg_replace'#[.]+#i''.'$var );

       if ( 
    $lower $var strtolower$var );

       
    $var str_ireplace".php"""$var );
       
    $var str_ireplace".php"".ppp"$var );

       if( 
    strlen$var ) > 200 ) {
         
         
    $var substr$var0200 );
         
         if( (
    $temp_max strrpos$var'-' )) ) $var substr$var0$temp_max );
       
       }
       
       return 
    $var;
    }
     
  5. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Еще раз благодарю за помощь, скрипт отработал, в конце ОК, однако транслит так и не присвоился в alt_name. Однако замечу если открыть пост в админке и ни чего не меняя нажать сохранить, то все сохраняется и транслит присваивается, вот бы эмуляцию этого действия запустить. Может как то запустить сохранение всех записей?
     
  6. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    @Dimoogle, попробуй ещё раз кодж с первого поста с подключенным
    PHP:
    require_once ENGINE_DIR '/modules/functions.php';
    :)

    PS код подправил
     
  7. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Скрипт отработал, статус ОК, запись в базе не появилась, ну и соответственно при редактировании новости поле ЧПУ по прежнему пустое. В этот раз я запускал первый код без добавления второго большого кода, в браузере скрипт запустил с обновлением страницы, тупость вроде бы исключена :)

    Подскажете может что ни будь свежее? Чувствую в нужном направлении действуем, надо лишь съэмулировать тоже действие, что при обычном сохранении новости.
     
    #7 Dimoogle, 28 фев 2016
    Последнее редактирование модератором: 27 мар 2017
  8. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    вот код
    PHP:
    <?php

    @error_reporting E_ALL E_WARNING E_NOTICE );
    @
    ini_set 'display_errors'true );
    @
    ini_set 'html_errors'false );
    @
    ini_set 'error_reporting'E_ALL E_WARNING E_NOTICE );

    define'DATALIFEENGINE'true );
    define'ROOT_DIR''.' );
    define'ENGINE_DIR'ROOT_DIR '/engine' );

    include 
    ENGINE_DIR '/data/config.php';
    require_once 
    ENGINE_DIR '/classes/mysql.php';
    require_once 
    ENGINE_DIR '/data/dbconfig.php';
    require_once 
    ENGINE_DIR '/modules/functions.php';

    $sql $db->query"SELECT id, title, alt_name FROM dle_post" );

    while( 
    $row $db->get_row($sql) )
    {

       
    $alt_name mb_strtolower(mb_substr($row["title"],0,10000), 'UTF-8');
    //$alt_name = totranslit( stripslashes( $title ), true, false );
       
    $db->query("UPDATE dle_post SET alt_name='$alt_name'  WHERE id='{$row['id']}'");
    }
    echo 
    "ok";
    ?>
    он добавляет alt_name полное содержание заголовка новости. totranslit не верно как срабатывает и другую функцию не нашёл бля быстрой транслитерации...
     
  9. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Хммм... очень интересный момент, теперь в поле ЧПУ занеслась запись, но занесся титл в кирилице, тобишь транслит не сработал, но сработал регистр, название маленькими буквами занеслось. Наверное осталось добавить транлитеровку.

    При том я если честно не хотел использовать ни какой сторонней функции транслитерации, хотелось бы чтобы дле по своим правилам сгенерировал ЧПУ, я их собственно из-за этого и стер, чтобы по правилам ДЛЕ сформировать, а то у меня было сформированно сторонним софтом.

    Народ, нужна все же помощь в реализации данного вопроса. Если есть кто из разработчиков, который готов сделать такой скриптик и протестировать у себя, чтобы действительно работало, готов обсудить оплату за работу. Надеюсь на отзывчивость. Повторюсь, нужно не просто сгенерировать ЧПУ используя транслитерацию, нужно именно использовать внутренний алгоритм дле, то есть как это происходит при редактировании новости. Например я зашел, отредактировал новость, нажал сохранить и ДЛЕ прописало ЧПУ.
     
    #9 Dimoogle, 29 фев 2016
    Последнее редактирование модератором: 27 мар 2017
  10. PunPun

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.897 / 96 / -0
    Закинуть в корень, выполнить. Дождаться ответа.

    Для благодарностей :
    1. R118095764291 - рубли
    2. U218134219019 - гривны
    3. Z228640084773 - доллары
     

    Вложения:

    • totranslit.zip
      Размер файла:
      1,3 КБ
      Просмотров:
      22
  11. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Вот так получилось: http://s018.radikal.ru/i511/1603/05/9d822ea124f9.png тобишь не получилось :(

    Ну и второй вопрос, я заметил Вы использовали подключение своих символов транслитерации, тогда сразу важный вопрос, эти символы 1 в 1 дублируют логику DLE или возможны не значительные расхождения? Просто я бы хотел, чтобы именно задействовалась логика DLE так как большинство статей уже есть в индексепоисковиков, а стереть я могу только все значения из базы. И когда заново сформирую хотелось бы, чтобы была логика ДЛЕ для абсолютно всех статей.
     
  12. PunPun

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.897 / 96 / -0
    Поправил, не дописал кое-что. Все так же как и в DLE
     

    Вложения:

    • totranslit.zip
      Размер файла:
      1,3 КБ
      Просмотров:
      36
  13. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    В общем скрипт отработал замечательно, транслит применился, благодарность не имеет границ, завтра переведу денежку. Большое спасибо. Не сочтите за наглость, но есть ещё одна просьба, в dle есть статус новости, ну есть опубликовано на сайте а есть нет, вот мне нужен еще проще скриптик, который лезет в базу, и по простому условию изменяет для всех новостей статус опубликовано или нет, условие - заполнено поле "полное описание". То есть простейшее условие, если описание пустое статус 0, если описание заполнено статус 1, при том условие глобальное, не важно какой сейчас у какой новости статус, просто иньекция во всю базу, есть описание статус 1, нет описания статус 0. Буду безгранично благодарен, и пожалуйста не сочтите за наглость, можете обозначить стоимость если хотите.
     
  14. PunPun

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.897 / 96 / -0
    Закинуть в корень, выполнить, дождаться ответа.

    Или просто выполнить в phpmyadmin запрос
    PHP:
    UPDATE dle_post SET `approve`=IF(full_story=''01);
     

    Вложения:

    • setapprove.zip
      Размер файла:
      458 байт
      Просмотров:
      7
    #14 PunPun, 11 мар 2016
    Последнее редактирование модератором: 27 мар 2017
  15. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Ага, с запросами вообще классно. Прекрасно понял про что вы, но чисто предполагаю, что условие гласит следующее, если полная новость пустая, то ставим 0, а если наоборот, сейчас уже есть новости полная новость не пустая, но статус уже стоит не активен, и есть задача включить эту новость. То есть понятно, пустая новость выключаем, а вот если не пустая то включаем это будет учитываться?

    Забыл написать огромное спасибо.
     
    #15 Dimoogle, 11 мар 2016
    Последнее редактирование модератором: 27 мар 2017
  16. PunPun

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.897 / 96 / -0
    Если новость пустая ставит 0, если не пустая ставит 1, не зависимо какое уже значение стоит
     
  17. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

    Регистрация:
    7 фев 2016
    Сообщения:
    48
    Лучших ответов:
    0
    Рейтинги:
    +4 / 4 / -0
    Спасибо, специально изменил одну новость, поиграл с условием, все действительно сработало как часы. Большое спасибо. Завтра денежку переведет мой партнер. Очень благодарен.
     
  18. Drusangus

    Команда форума VIP Кинотрафик v2

    Регистрация:
    22 ноя 2015
    Сообщения:
    99
    Лучших ответов:
    0
    Рейтинги:
    +24 / 0 / -0
    выполняю этот скрипт, пишет bool(true) ничего дальше не происходит.

    кто шарит, подсобите, ппц как нада

    проблему решил.
    после
    require_once ENGINE_DIR . '/data/dbconfig.php';
    добавил
    $db->query("SET CHARACTER SET 'utf8'");
    $db->query("SET NAMES 'utf8'");
    заработало
     
    #18 Drusangus, 22 ноя 2016
    Последнее редактирование модератором: 27 мар 2017
Яндекс.Метрика