Данный материал предназначен для сайтов на CMS Datalife Engine v.17
После применения всех инструкций у Вас будет возможность выбрать в настройках сайта новый тип адреса без ID для публикаций.
Все публикации в таком типе обязаны быть привязаны к какой-либо категории, иначе система не отличит её от статической страницы. Все публикации должны иметь уникальное значение в поле "ЧПУ URL статьи".
Открываем файл /engine/modules/functions.php
В конце файла перед (~4062 строка):
?>
Добавляем выше:
function generate_link_fullstory($data_news, $is_local = false) {
global $config;
if ($config['allow_alt_url']) {
if ($config['seo_type'] > 0) {
$alt_name = $data_news['alt_name'];
if ($config['seo_type'] == 3) {
$alt_name = $data_news['id'] . "-" . $alt_name;
}
if ($data_news['category'] and $config['seo_type'] > 1) {
if($cats_url = get_url( $data_news['category'] )) {
$full_link = $cats_url . "/" . $alt_name . ".html";
} else {
$full_link = $alt_name . ".html";
}
} else {
$full_link = $alt_name . ".html";
}
} else {
$full_link = date('Y/m/d/', $data_news['date']) . $data_news['alt_name'] . ".html";
}
} else {
$full_link = "index.php?newsid=" . $data_news['id'];
}
if ($is_local)
return $full_link;
return $config['http_home_url'] . $full_link;
}
Открываем файл /engine/inc/include/functions.inc.php
В конце файла перед (~2322 строка):
?>
Добавляем выше:
function generate_link_fullstory($data_news, $is_local = false) {
global $config;
if ($config['allow_alt_url']) {
if ($config['seo_type'] > 0) {
$alt_name = $data_news['alt_name'];
if ($config['seo_type'] != 3) {
$alt_name = $data_news['id'] . "-" . $alt_name;
}
if ($data_news['category'] and $config['seo_type'] > 1) {
if($cats_url = get_url( $data_news['category'] )) {
$full_link = $cats_url . "/" . $alt_name . ".html";
} else {
$full_link = $alt_name . ".html";
}
} else {
$full_link = $alt_name . ".html";
}
} else {
$full_link = date('Y/m/d/', $data_news['date']) . $data_news['alt_name'] . ".html";
}
} else {
$full_link = "index.php?newsid=" . $data_news['id'];
}
if ($is_local)
return $full_link;
return $config['http_home_url'] . $full_link;
}
Мы внедрили функцию, позволяющую генерировать ссылку на полный текст новости как для пользовательского интерфейса, так и для административной панели. Теперь нет необходимости добавлять условия в каждом месте, где требуется эта ссылка. Достаточно просто вызвать функцию.
Открываем файл /engine/download.php
Ищем (~78 строка):
if ($config['allow_alt_url']) {
if ($config['seo_type'] == 1 or $config['seo_type'] == 2) {
if ($row_news['category'] and $config['seo_type'] == 2) {
$full_link = $config['http_home_url'] . get_url($row_news['category']) . "/" . $row_news['id'] . "-" . $row_news['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row_news['id'] . "-" . $row_news['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date('Y/m/d/', $row_news['date']) . $row_news['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row_news['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row_news);
Открываем файл /engine/ajax/adminfunction.php
Ищем (~851 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/ajax/comments.php
Ищем (~48 строка):
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $category_id AND $config['seo_type'] == 2 ) {
$c_url = get_url( $category_id );
$full_link = $config['http_home_url'] . $c_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
$row['alt_name'] = $row['id'] . "-" . $row['alt_name'];
$link_page = $config['http_home_url'] . $c_url . "/" . 'page,1,';
$news_name = $row['alt_name'];
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
$row['alt_name'] = $row['id'] . "-" . $row['alt_name'];
$link_page = $config['http_home_url'] . 'page,1,';
$news_name = $row['alt_name'];
}
} else {
$link_page = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . 'page,1,';
$news_name = $row['alt_name'];
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
Заменяем на:
if( $config['seo_type'] > 0 ) {
$alt_name = $row['alt_name'];
if ($config['seo_type'] != 3) {
$alt_name = $row['id'] . "-" . $alt_name;
}
if( $category_id AND $config['seo_type'] > 1 ) {
if($c_url = get_url( $category_id )) {
$full_link = $config['http_home_url'] . $c_url . "/" . $alt_name . ".html";
$link_page = $config['http_home_url'] . $c_url . "/" . 'page,1,';
} else {
$full_link = $config['http_home_url'] . $alt_name . ".html";
$link_page = $config['http_home_url'] . 'page,1,';
}
} else {
$full_link = $config['http_home_url'] . $alt_name . ".html";
$link_page = $config['http_home_url'] . 'page,1,';
}
$news_name = $alt_name;
} else {
$link_page = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . 'page,1,';
$news_name = $row['alt_name'];
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
Открываем файл /engine/ajax/editcomments.php
Ищем (~1005 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/ajax/editnews.php
Ищем (~1813 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row['category'] ) and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( intval( $row['category'] ) ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row['date'] ) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/ajax/find_relates.php
Ищем (~131 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $related['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $related['category'] ) . "/" . $related['id'] . "-" . $related['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $related['id'] . "-" . $related['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $related['date'] ) . $related['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $related['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($related);
Открываем файл /engine/classes/comments.class.php
Ищем (~301 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['post_id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['post_id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime ($row['newsdate']) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['post_id'];
}
Заменяем на:
$full_link = generate_link_fullstory([
'id' => $row['post_id'],
'date' => $row['newsdate'],
'alt_name' => $row['alt_name'],
'category' => $row['category'],
]);
Открываем файл /engine/classes/google.class.php
Ищем (~407 строка):
if( $this->allow_url ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if($cats_url) {
$loc = $cats_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else $loc = $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$loc = $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$loc = date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$loc = "index.php?newsid=" . $row['id'];
}
Заменяем на:
$loc = generate_link_fullstory($row, true);
Открываем файл /engine/inc/addnews.php
Ищем (~1235 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row['category'] ) and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( intval( $row['category'] ) ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row['date'] ) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/inc/cmoderation.php
Ищем (~68 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Ищем (~269 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row['category'] ) and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( intval( $row['category'] ) ) . "/" . $row['post_id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['post_id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['newsdate'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['post_id'];
}
Заменяем на:
$full_link = generate_link_fullstory([
'id' => $row['post_id'],
'date' => $row['newsdate'],
'alt_name' => $row['alt_name'],
'category' => $row['category'],
]);
Открываем файл /engine/inc/comments.php
Ищем (~161 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row['category'] ) and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( intval( $row['category'] ) ) . "/" . $row['post_id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['post_id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['newsdate'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['post_id'];
}
Заменяем на:
$full_link = generate_link_fullstory([
'id' => $row['post_id'],
'date' => $row['newsdate'],
'alt_name' => $row['alt_name'],
'category' => $row['category'],
]);
Открываем файл /engine/inc/complaint.php
Ищем (~268 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['post_id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['post_id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime ($row['newsdate']) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['post_id'];
}
Заменяем на:
$full_link = generate_link_fullstory([
'id' => $row['post_id'],
'date' => $row['newsdate'],
'alt_name' => $row['alt_name'],
'category' => $row['category'],
]);
Ищем (~427 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['post_id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['post_id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime ($row['newsdate']) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['post_id'];
}
Заменяем на:
$full_link = generate_link_fullstory([
'id' => $row['post_id'],
'date' => $row['newsdate'],
'alt_name' => $row['alt_name'],
'category' => $row['category'],
]);
Открываем файл /engine/inc/editnews.php
Ищем (~318 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if($cats_url) {
$full_link = $config['http_home_url'] . $cats_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row['date'] ) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Ищем (~2567 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if($cats_url) {
$full_link = $config['http_home_url'] . $cats_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row['date'] ) ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/modules/addcomments.php
Ищем (~500 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/modules/addnews.php
Ищем (~626 строка):
if ($config['allow_alt_url']) {
if ($config['seo_type'] == 1 or $config['seo_type'] == 2) {
if (intval($row['category']) and $config['seo_type'] == 2) {
$full_link = $config['http_home_url'] . get_url(intval($row['category'])) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date('Y/m/d/', strtotime($row['date'])) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/modules/show.custom.php
Ищем (~209 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if($cats_url) {
$full_link = $config['http_home_url'] . $cats_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/modules/show.full.php
Ищем (~224 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row_link['category'] ) and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row_link['category'] );
if( $cats_url ) $cats_url .= "/";
$link = $config['http_home_url'] . $cats_url . $row_link['id'] . "-" . $row_link['alt_name'] . ".html";
} else {
$link = $config['http_home_url'] . $row_link['id'] . "-" . $row_link['alt_name'] . ".html";
}
} else {
$link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row_link['date'] ) ) . $row_link['alt_name'] . ".html";
}
} else {
$link = $config['http_home_url'] . "index.php?newsid=" . $row_link['id'];
}
Заменяем на:
$link = generate_link_fullstory($row_link);
Ищем (~236 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( intval( $row_link['category'] ) and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row_link['category'] );
if( $cats_url ) $cats_url .= "/";
$link = $config['http_home_url'] .$cats_url . $row_link['id'] . "-" . $row_link['alt_name'] . ".html";
} else {
$link = $config['http_home_url'] . $row_link['id'] . "-" . $row_link['alt_name'] . ".html";
}
} else {
$link = $config['http_home_url'] . date( 'Y/m/d/', strtotime( $row_link['date'] ) ) . $row_link['alt_name'] . ".html";
}
} else {
$link = $config['http_home_url'] . "index.php?newsid=" . $row_link['id'];
}
Заменяем на:
$link = generate_link_fullstory($row_link);
Ищем (~303 строка):
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $category_id AND $config['seo_type'] == 2 ) {
$c_url = get_url( $row['category'] );
if($c_url) {
$full_link = $config['http_home_url'] . $c_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
if ($config['seo_control'] AND ( isset($_GET['seourl']) OR strpos ( $_SERVER['REQUEST_URI'], "?" ) !== false ) ) {
if ($_GET['seourl'] != $row['alt_name'] OR $_GET['seocat'] != $c_url OR strpos ( $_SERVER['REQUEST_URI'], "?" ) !== false OR (isset($_GET['news_page']) AND $_GET['news_page'] == 1 AND $cstart < 2 AND $view_template != "print") OR ($view_template == "print" AND $news_page > 1) ) {
$re_url = explode ( "index.php", strtolower ( $_SERVER['PHP_SELF'] ) );
$re_url = reset ( $re_url );
header("HTTP/1.0 301 Moved Permanently");
header("Location: {$re_url}{$c_url}/{$row['id']}-{$row['alt_name']}.html");
die("Redirect");
}
}
$print_link = $config['http_home_url'] . $c_url . "/print:page,1," . $row['id'] . "-" . $row['alt_name'] . ".html";
$short_link = $config['http_home_url'] . $c_url . "/";
$row['alt_name'] = $row['id'] . "-" . $row['alt_name'];
$link_page = $config['http_home_url'] . $c_url . "/" . 'page,' . $news_page . ',';
$news_name = $row['alt_name'];
} else {
Заменяем на:
if( $config['seo_type'] > 0 ) {
$alt_name = $row['alt_name'];
if ($config['seo_type'] != 3) {
$alt_name = $row['id'] . "-" . $alt_name;
}
if( $category_id AND $config['seo_type'] > 1 ) {
if($c_url = get_url( $row['category'] )) {
$full_link = $config['http_home_url'] . $c_url . "/" . $alt_name . ".html";
} else {
$full_link = $config['http_home_url'] . $alt_name . ".html";
}
if ($config['seo_control'] AND ( isset($_GET['seourl']) OR strpos ( $_SERVER['REQUEST_URI'], "?" ) !== false ) ) {
if ($_GET['seourl'] != $row['alt_name'] OR $_GET['seocat'] != $c_url OR strpos ( $_SERVER['REQUEST_URI'], "?" ) !== false OR (isset($_GET['news_page']) AND $_GET['news_page'] == 1 AND $cstart < 2 AND $view_template != "print") OR ($view_template == "print" AND $news_page > 1) ) {
$re_url = explode ( "index.php", strtolower ( $_SERVER['PHP_SELF'] ) );
$re_url = reset ( $re_url );
header("HTTP/1.0 301 Moved Permanently");
header("Location: {$re_url}{$c_url}/{$alt_name}.html");
die("Redirect");
}
}
$print_link = $config['http_home_url'] . $c_url . "/print:page,1," . $alt_name . ".html";
$short_link = $config['http_home_url'] . $c_url . "/";
$link_page = $config['http_home_url'] . $c_url . "/" . 'page,' . $news_page . ',';
$news_name = $alt_name;
} else {
Ищем (~1265 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $related['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $related['category'] );
if( $cats_url ) $cats_url .= "/";
$rel_full_link = $config['http_home_url'] . $cats_url . $related['id'] . "-" . $related['alt_name'] . ".html";
} else {
$rel_full_link = $config['http_home_url'] . $related['id'] . "-" . $related['alt_name'] . ".html";
}
} else {
$rel_full_link = $config['http_home_url'] . date( 'Y/m/d/', $related['date'] ) . $related['alt_name'] . ".html";
}
} else {
$rel_full_link = $config['http_home_url'] . "index.php?newsid=" . $related['id'];
}
Заменяем на:
$rel_full_link = generate_link_fullstory($related);
Открываем файл /engine/modules/show.short.php
Ищем (~221 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if($cats_url) {
$full_link = $config['http_home_url'] . $cats_url . "/" . $row['id'] . "-" . $row['alt_name'] . ".html";
} else $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Открываем файл /engine/modules/topnews.php
Ищем (~98 строка):
if( $config['allow_alt_url'] ) {
if( $config['seo_type'] == 1 OR $config['seo_type'] == 2 ) {
if( $row['category'] and $config['seo_type'] == 2 ) {
$cats_url = get_url( $row['category'] );
if( $cats_url ) $cats_url .= "/";
$full_link = $config['http_home_url'] . $cats_url . $row['id'] . "-" . $row['alt_name'] . ".html";
} else {
$full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html";
}
} else {
$full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
}
Заменяем на:
$full_link = generate_link_fullstory($row);
Теперь все "точки входа" способны создавать ссылки нового типа.
Открываем файл /engine/init.php
Ищем (~165 строка):
if (isset ( $_GET['news_page'] )) $news_page = intval ( $_GET['news_page'] ); else $news_page = 0;
Добавляем ниже:
if (isset ( $_GET['seourl'] )) $seourl = $db->safesql( $_GET['seourl'] ); else $seourl = '';
if (isset ( $_GET['seocat'] )) $seocat = $db->safesql( $_GET['seocat'] ); else $seocat = '';
Ищем (~183 строка):
if (!$subaction AND $newsid) $dle_module = "showfull";
Добавляем ниже:
if (($config['seo_type'] != 3 AND !$subaction AND $newsid) OR ($config['seo_type'] == 3 AND $seourl AND $seocat)) $dle_module = "showfull";
Открываем файл /engine/engine.php
Ищем (~724 строка):
if ($year == '' AND $month == '' AND $day == '' AND !$newsid) {
Заменяем на:
if ($year == '' AND $month == '' AND $day == '' AND !$newsid AND $config['seo_type'] != 3) {
Ищем (~969 строка):
// ################ Full News #################
if ($subaction != '' OR $newsid) {
if ( !$newsid ) $sql_news = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.descr, p.keywords, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.approve, p.fixed, p.allow_br, p.symbol, p.tags, p.metatitle, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.disable_index, e.related_ids, e.access, e.editdate, e.editor, e.reason, e.user_id, e.disable_search, e.need_pass, e.allow_rss, e.allow_rss_turbo, e.allow_rss_dzen {$user_select}FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE alt_name ='{$news_name}' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 1";
else $sql_news = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.descr, p.keywords, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.approve, p.fixed, p.allow_br, p.symbol, p.tags, p.metatitle, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.disable_index, e.related_ids, e.access, e.editdate, e.editor, e.reason, e.user_id, e.disable_search, e.need_pass, e.allow_rss, e.allow_rss_turbo, e.allow_rss_dzen {$user_select}FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE p.id = '{$newsid}'";
if ($subaction == '') $subaction = "showfull";
}
Заменяем на:
// ################ Full News #################
if ($config['seo_type'] != 3 AND ($subaction != '' OR $newsid)) {
if ( !$newsid ) $sql_news = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.descr, p.keywords, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.approve, p.fixed, p.allow_br, p.symbol, p.tags, p.metatitle, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.disable_index, e.related_ids, e.access, e.editdate, e.editor, e.reason, e.user_id, e.disable_search, e.need_pass, e.allow_rss, e.allow_rss_turbo, e.allow_rss_dzen {$user_select}FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE alt_name ='{$news_name}' AND date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR LIMIT 1";
else $sql_news = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.descr, p.keywords, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.approve, p.fixed, p.allow_br, p.symbol, p.tags, p.metatitle, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.disable_index, e.related_ids, e.access, e.editdate, e.editor, e.reason, e.user_id, e.disable_search, e.need_pass, e.allow_rss, e.allow_rss_turbo, e.allow_rss_dzen {$user_select}FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE p.id = '{$newsid}'";
if ($subaction == '') $subaction = "showfull";
}
// ################ Full News without ID #################
else if ($config['seo_type'] == 3 AND $seourl AND $category_id) {
$sql_news = "SELECT p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.descr, p.keywords, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.approve, p.fixed, p.allow_br, p.symbol, p.tags, p.metatitle, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.disable_index, e.related_ids, e.access, e.editdate, e.editor, e.reason, e.user_id, e.disable_search, e.need_pass, e.allow_rss, e.allow_rss_turbo, e.allow_rss_dzen {$user_select}FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE p.alt_name = '{$seourl}' AND p.category = '{$category_id}'";
if ($subaction == '') $subaction = "showfull";
$category = "";
}
Эти изменения обеспечивают правильное распознавание нового типа адресов CMS.
Открываем файл /.htaccess
Ищем (~16 строка):
RewriteRule ^([^.]+)/([0-9]+)-(.*).html$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
Добавляем ниже:
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),(.*).html$ index.php?news_page=$2&cstart=$3&seourl=$4&seocat=$1&category=$1 [L]
RewriteRule ^([^.]+)/page,([0-9]+),(.*).html$ index.php?news_page=$2&seourl=$3&seocat=$1&category=$1 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),(.*).html$ index.php?mod=print&news_page=$2&seourl=$3&seocat=$1&category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/(.*).html$ index.php?seourl=$2&seocat=$1&category=$1 [L]
Публикация, которая раньше была доступна по адресу https://site.com/category/1-title-news.html, теперь также доступна по адресу https://site.com/category/title-news.html
Открываем файл /engine/inc/addnews.php
Ищем (~931 строка):
foreach ( $category_list as $selected ) {
if( $allow_list[0] != "all" AND !in_array( $selected, $allow_list ) ) msg( "error", array('jаvascript:history.go(-1)' => $lang['addnews'], '' => $lang['addnews_error'] ), $lang['news_err_41'], "jаvascript:history.go(-1)" );
}
Добавляем ниже:
if( $config['seo_type'] == 3 AND $category_list[0] == 0 ) msg( "error", array('jаvascript:history.go(-1)' => $lang['addnews'], '' => $lang['addnews_error'] ), $lang['news_err_id'], "jаvascript:history.go(-1)" );
Ищем (~977 строка):
if(!$alt_name) $alt_name = totranslit( stripslashes( $title ), true, false, $config['translit_url'] );
Заменяем на:
if(!$alt_name) {
$alt_name = totranslit( stripslashes( $title ), true, false, $config['translit_url'] );
if( $config['allow_alt_url'] AND $config['seo_type'] == 3 ) {
$count = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE alt_name LIKE '{$alt_name}'" );
if( $count['count'] ) {
$db->query( "SELECT alt_name FROM " . PREFIX . "_post WHERE alt_name LIKE '{$alt_name}_%'" );
$check_keys = [];
while($found_news = $db->get_row()) {
if( $found_news['id']) {
$check_keys[] = intval(str_replace($alt_name . '_', '', $found_news['alt_name']));
}
}
$prefix_key = 1;
if (count($check_keys) > 0) {
sort($check_keys, SORT_NUMERIC);
$max_key = max($check_keys);
$prefix_key = $max_key + 1;
for($i=1;$i<=$max_key;$i++) {
if(!in_array($i, $check_keys)) {
$prefix_key = $i;
break;
}
}
}
$alt_name .= '_' . $prefix_key;
}
}
}
Ищем (~1017 строка):
if( $config['allow_alt_url'] AND !$config['seo_type'] ) {
$db->query( "SELECT id, date FROM " . PREFIX . "_post WHERE alt_name ='{$alt_name}'" );
while($found_news = $db->get_row()) {
if( $found_news['id'] AND date( 'Y-m-d', strtotime( $found_news['date'] ) ) == date( 'Y-m-d', $_TIME ) ) {
msg( "error", array('jаvascript:history.go(-1)' => $lang['addnews'], '' => $lang['addnews_error'] ), $lang['news_err_42'], "jаvascript:history.go(-1)" );
}
}
}
Добавляем ниже:
else if( $config['allow_alt_url'] AND $config['seo_type'] == 3 ) {
$count = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE alt_name ='{$alt_name}'" );
if( $count['count'] ) {
msg( "error", array($_SESSION['admin_referrer'] => $lang['edit_all_title'], '' => $lang['addnews_error'] ), $lang['news_err_42'], "jаvascript:history.go(-1)" );
}
}
Открываем файл /engine/inc/editnews.php
Ищем (~2097 строка):
foreach ( $category_list as $selected ) {
if( $allow_list[0] != "all" AND ! in_array( $selected, $allow_list ) AND $ifdelete != "yes") msg( "error", $lang['addnews_error'], $lang['news_err_41'], "jаvascript:history.go(-1)" );
}
Добавляем ниже:
if( $config['seo_type'] == 3 AND $category_list[0] == 0 ) msg( "error", array('jаvascript:history.go(-1)' => $lang['addnews'], '' => $lang['addnews_error'] ), $lang['news_err_id'], "jаvascript:history.go(-1)" );
Ищем (~2151 строка):
if(!$alt_name) $alt_name = totranslit( stripslashes( $title ), true, false, $config['translit_url'] );
Заменяем на:
if(!$alt_name) {
$alt_name = totranslit( stripslashes( $title ), true, false, $config['translit_url'] );
if( $config['allow_alt_url'] AND $config['seo_type'] == 3 ) {
$count = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE alt_name LIKE '{$alt_name}'" );
if( $count['count'] ) {
$db->query( "SELECT alt_name FROM " . PREFIX . "_post WHERE alt_name LIKE '{$alt_name}_%'" );
$check_keys = [];
while($found_news = $db->get_row()) {
if( $found_news['id']) {
$check_keys[] = intval(str_replace($alt_name . '_', '', $found_news['alt_name']));
}
}
$prefix_key = 1;
if (count($check_keys) > 0) {
sort($check_keys, SORT_NUMERIC);
$max_key = max($check_keys);
$prefix_key = $max_key + 1;
for($i=1;$i<=$max_key;$i++) {
if(!in_array($i, $check_keys)) {
$prefix_key = $i;
break;
}
}
}
$alt_name .= '_' . $prefix_key;
}
}
}
Ищем (~2380 строка):
if( $config['allow_alt_url'] AND !$config['seo_type'] ) {
$db->query( "SELECT id, date FROM " . PREFIX . "_post WHERE alt_name ='{$alt_name}' AND id != '$item_db[0]' " );
while($found_news = $db->get_row()) {
if( $found_news['id'] AND date( 'Y-m-d', strtotime( $found_news['date'] ) ) == date( 'Y-m-d', $_TIME ) ) {
msg( "error", array($_SESSION['admin_referrer'] => $lang['edit_all_title'], '' => $lang['addnews_error'] ), $lang['news_err_42'], "jаvascript:history.go(-1)" );
}
}
}
Добавляем ниже:
else if( $config['allow_alt_url'] AND $config['seo_type'] == 3 ) {
$count = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE alt_name ='{$alt_name}' AND id != '$item_db[0]' " );
if( $count['count'] ) {
msg( "error", array($_SESSION['admin_referrer'] => $lang['edit_all_title'], '' => $lang['addnews_error'] ), $lang['news_err_42'], "jаvascript:history.go(-1)" );
}
}
При добавлении или сохранении публикации теперь будут отображаться ошибки, требующие выбора категории или обеспечивающие уникальность адреса ЧПУ. Если адрес ЧПУ не указан, система автоматически сгенерирует его, добавив инкрементный префикс в случае, если уже имеются публикации с таким ЧПУ в базе данных.
Открываем файл /engine/inc/options.php
Ищем (~670 строка):
showRow( $lang['opt_sys_seotype'], $lang['opt_sys_seotyped'], makeDropDown( array ("1" => $lang['opt_sys_seo_1'], "2" => $lang['opt_sys_seo_2'], "0" => $lang['opt_sys_seo_3'] ), "save_con[seo_type]", "{$config['seo_type']}" ) );
Заменяем на:
showRow( $lang['opt_sys_seotype'], $lang['opt_sys_seotyped'], makeDropDown( array ("1" => $lang['opt_sys_seo_1'], "2" => $lang['opt_sys_seo_2'], "3" => $lang['opt_sys_seo_3'], "0" => $lang['opt_sys_seo_4'] ), "save_con[seo_type]", "{$config['seo_type']}" ) );
Ищем (~1119 строка):
$db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '48', '')" );
Добавляем выше:
if( intval($_POST['save_con']['seo_type']) == 3) {
$count = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category = '0'" );
if( $count['count'] ) {
msg( "error", $lang['opt_denied'], $lang['news_err_id_save_1'], "jаvascript:history.go(-1)" );
}
$count = $db->super_query( "SELECT COUNT(*) as count FROM (SELECT alt_name FROM " . PREFIX . "_post GROUP BY alt_name HAVING COUNT(*) > 1) d" );
if( $count['count'] ) {
msg( "error", $lang['opt_denied'], $lang['news_err_id_save_2'], "jаvascript:history.go(-1)" );
}
}
Теперь в настройках появилась возможность выбора нового типа ЧПУ, сопровождаемая проверкой соответствия требованиям для уже существующих публикаций.
Открываем файл /language/Russian/adminpanel.lng
Ищем (~1880 строка):
'opt_sys_seotyped' => "<b>Тип 1</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/id-имя новости.html</b><br><br><b>Тип 2</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/категория/подкатегория/id-имя новости.html</b><br><br><b>Тип 3</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/2008/04/02/имя новости.html</b>, внимание данный тип несет повышенную нагрузку на сервер",
Заменяем на:
'opt_sys_seotyped' => "<b>Тип 1</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/id-имя новости.html</b><br><br><b>Тип 2</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/категория/подкатегория/id-имя новости.html</b><br><br><b>Тип 3</b> - ссылки на полную новость будут иметь вид (без ID) <b>http://yoursite.com/категория/подкатегория/имя новости.html</b><br><br><b>Тип 4</b> - ссылки на полную новость будут иметь вид <b>http://yoursite.com/2008/04/02/имя новости.html</b>, внимание данный тип несет повышенную нагрузку на сервер",
Ищем (~1883 строка):
'opt_sys_seo_3' => "Тип 3",
Добавляем ниже:
'opt_sys_seo_4' => "Тип 4",
'news_err_id' => "Не выбрана категория публикации, обязательная для выбранного типа ЧПУ. Вернитесь назад и укажите категорию.",
'news_err_id_save_1' => "Выбранный тип ЧПУ недоступен, если в системе имеются публикации без указанных категорий. Для начала укажите категорию для каждой из публикаций.",
'news_err_id_save_2' => "Выбранный тип ЧПУ недоступен, если присутствуют публикации с одинаковыми значениями в поле \"ЧПУ URL статьи\". Сначала необходимо устранить это несоответствие.",
Мы выполняем аналогичные шаги и для других языков (английского и украинского), однако это необязательно, если вы не пользуетесь ими.
Datalife Engine для меня не просто система управления контентом (CMS), это своего рода "школа обучения". Благодаря этой платформе я освоил PHP и начал разрабатывать свои первые модули.
Несомненно, CMS не идеальна, и ранее я многократно слышал, как люди "плевались" при упоминании данной CMS. Сегодня я почувствовал целиком и полностью почему. Это не нормально, когда для изменения шаблона формирования полного URL публикации приходится вносить правки в 25 (!!!) файлов, при этом более 75% изменений сводятся к модификации одного и того же функционала. Самое разумное решение: заменить на функцию в едином месте.
Данный блог является примерно работоспособности подобных изменений.