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

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

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

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

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

    Dimoogle Новичок

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

    Ботяра Забанен

    Сообщения:
    0
    Симпатии:
    0
    Лучших ответов:
    54
    Сохрани код в 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";
    ?>
     
    Последнее редактирование: 28 фев 2016
  3. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

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

    Ботяра Забанен

    Сообщения:
    0
    Симпатии:
    0
    Лучших ответов:
    54
    в начало добавь
    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 Новичок

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

    Ботяра Забанен

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

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

    Dimoogle Новичок

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

    Подскажете может что ни будь свежее? Чувствую в нужном направлении действуем, надо лишь съэмулировать тоже действие, что при обычном сохранении новости.
     
    Последнее редактирование модератором: 27 мар 2017
  8. Ботяра

    Ботяра Забанен

    Сообщения:
    0
    Симпатии:
    0
    Лучших ответов:
    54
    вот код
    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 Новичок

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

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

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

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

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Закинуть в корень, выполнить. Дождаться ответа.

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

    Вложения:

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

    Dimoogle Новичок

    Сообщения:
    48
    Симпатии:
    4
    Лучших ответов:
    0
    Вот так получилось: http://s018.radikal.ru/i511/1603/05/9d822ea124f9.png тобишь не получилось :(

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

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

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Поправил, не дописал кое-что. Все так же как и в DLE
     

    Вложения:

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

    Dimoogle Новичок

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

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

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Закинуть в корень, выполнить, дождаться ответа.

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

    Вложения:

    • setapprove.zip
      Размер файла:
      458 байт
      Просмотров:
      10
    Последнее редактирование модератором: 27 мар 2017
  15. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

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

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

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

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Если новость пустая ставит 0, если не пустая ставит 1, не зависимо какое уже значение стоит
     
  17. TopicStarter Overlay
    Dimoogle

    Dimoogle Новичок

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

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

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

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

    проблему решил.
    после
    require_once ENGINE_DIR . '/data/dbconfig.php';
    добавил
    $db->query("SET CHARACTER SET 'utf8'");
    $db->query("SET NAMES 'utf8'");
    заработало
     
    Последнее редактирование модератором: 27 мар 2017
Похожие темы
  1. Stafzloi
    Ответов:
    25
    Просмотров:
    3.155
  2. Альберт
    Ответов:
    9
    Просмотров:
    2.131
  3. wake!up
    Ответов:
    28
    Просмотров:
    4.907
  4. webmagnat
    Ответов:
    1
    Просмотров:
    4.399
  5. KUDESNIK
    Ответов:
    15
    Просмотров:
    1.306
Загрузка...