В общем ситуация такова. Использую для публикации материалов стороннюю программу тексткит, она публикует материалы с использованием собственного набора транслитерации, но мне не нравится транслит предложенный программой. Что я сделал, я удалил все ЧПУ ссылки простым запросом к базе update dle_post set alt_name=''; соответственно все url из базы были удалены, теперь у меня все новости в dle имеют адрес site.ru/5-.html и так далее, но эта проблема решаема, если я теперь открываю каждую новость, и ни чего не меняя жму сохранить, то автоматом заполняется alt_name по правилу DLE - вот после этого все отлично, вот теперь простой вопрос, после удаления alt_name из базы, как запустить повторно генерацию названий по правилу DLE, проще говоря как заставить DLE пересохранить все записи с присвоением дефолтного ЧПУ? Спасибо.
Сохрани код в 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 = totranslit( stripslashes( $row["title"] ), true, false ); $db->query("UPDATE `" . PREFIX . "_post` SET alt_name='$alt_name' WHERE id='{$row['id']}'");}echo "ok";?>
Спасибо за попытку помочь, но вылезла ошибка: Fatal error: Call to undefined function totranslit() in /home/user/data/www/site.ru/url.php on line 20 есть какие то мысли?
в начало добавь 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 = trim( strip_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 = trim( strip_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( $var, 0, 200 ); if( ($temp_max = strrpos( $var, '-' )) ) $var = substr( $var, 0, $temp_max ); } return $var;}
Еще раз благодарю за помощь, скрипт отработал, в конце ОК, однако транслит так и не присвоился в alt_name. Однако замечу если открыть пост в админке и ни чего не меняя нажать сохранить, то все сохраняется и транслит присваивается, вот бы эмуляцию этого действия запустить. Может как то запустить сохранение всех записей?
@Dimoogle, попробуй ещё раз кодж с первого поста с подключенным PHP: require_once ENGINE_DIR . '/modules/functions.php'; PS код подправил
Скрипт отработал, статус ОК, запись в базе не появилась, ну и соответственно при редактировании новости поле ЧПУ по прежнему пустое. В этот раз я запускал первый код без добавления второго большого кода, в браузере скрипт запустил с обновлением страницы, тупость вроде бы исключена Подскажете может что ни будь свежее? Чувствую в нужном направлении действуем, надо лишь съэмулировать тоже действие, что при обычном сохранении новости.
вот код 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 не верно как срабатывает и другую функцию не нашёл бля быстрой транслитерации...
Хммм... очень интересный момент, теперь в поле ЧПУ занеслась запись, но занесся титл в кирилице, тобишь транслит не сработал, но сработал регистр, название маленькими буквами занеслось. Наверное осталось добавить транлитеровку. При том я если честно не хотел использовать ни какой сторонней функции транслитерации, хотелось бы чтобы дле по своим правилам сгенерировал ЧПУ, я их собственно из-за этого и стер, чтобы по правилам ДЛЕ сформировать, а то у меня было сформированно сторонним софтом. Народ, нужна все же помощь в реализации данного вопроса. Если есть кто из разработчиков, который готов сделать такой скриптик и протестировать у себя, чтобы действительно работало, готов обсудить оплату за работу. Надеюсь на отзывчивость. Повторюсь, нужно не просто сгенерировать ЧПУ используя транслитерацию, нужно именно использовать внутренний алгоритм дле, то есть как это происходит при редактировании новости. Например я зашел, отредактировал новость, нажал сохранить и ДЛЕ прописало ЧПУ.
Закинуть в корень, выполнить. Дождаться ответа. Для благодарностей : R118095764291 - рубли U218134219019 - гривны Z228640084773 - доллары
Вот так получилось: http://s018.radikal.ru/i511/1603/05/9d822ea124f9.png тобишь не получилось Ну и второй вопрос, я заметил Вы использовали подключение своих символов транслитерации, тогда сразу важный вопрос, эти символы 1 в 1 дублируют логику DLE или возможны не значительные расхождения? Просто я бы хотел, чтобы именно задействовалась логика DLE так как большинство статей уже есть в индексепоисковиков, а стереть я могу только все значения из базы. И когда заново сформирую хотелось бы, чтобы была логика ДЛЕ для абсолютно всех статей.
В общем скрипт отработал замечательно, транслит применился, благодарность не имеет границ, завтра переведу денежку. Большое спасибо. Не сочтите за наглость, но есть ещё одна просьба, в dle есть статус новости, ну есть опубликовано на сайте а есть нет, вот мне нужен еще проще скриптик, который лезет в базу, и по простому условию изменяет для всех новостей статус опубликовано или нет, условие - заполнено поле "полное описание". То есть простейшее условие, если описание пустое статус 0, если описание заполнено статус 1, при том условие глобальное, не важно какой сейчас у какой новости статус, просто иньекция во всю базу, есть описание статус 1, нет описания статус 0. Буду безгранично благодарен, и пожалуйста не сочтите за наглость, можете обозначить стоимость если хотите.
Закинуть в корень, выполнить, дождаться ответа. Или просто выполнить в phpmyadmin запрос PHP: UPDATE dle_post SET `approve`=IF(full_story='', 0, 1);
Ага, с запросами вообще классно. Прекрасно понял про что вы, но чисто предполагаю, что условие гласит следующее, если полная новость пустая, то ставим 0, а если наоборот, сейчас уже есть новости полная новость не пустая, но статус уже стоит не активен, и есть задача включить эту новость. То есть понятно, пустая новость выключаем, а вот если не пустая то включаем это будет учитываться? Забыл написать огромное спасибо.
Спасибо, специально изменил одну новость, поиграл с условием, все действительно сработало как часы. Большое спасибо. Завтра денежку переведет мой партнер. Очень благодарен.
выполняю этот скрипт, пишет bool(true) ничего дальше не происходит. кто шарит, подсобите, ппц как нада проблему решил. после require_once ENGINE_DIR . '/data/dbconfig.php'; добавил $db->query("SET CHARACTER SET 'utf8'"); $db->query("SET NAMES 'utf8'"); заработало