• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Выбор главной страницы сайта

mishiko

Постоялец
Регистрация
5 Сен 2011
Сообщения
320
Реакции
135
1485322894_Image-1.png

При помощи данного хака, вы сможете быстро и без каких либо проблем поменять станадартное отображение новостей на главной странице сайта на любую статическую страницу, вывод категории или даже отдельного модуля, причём он может быть сторонним.

Хак сам просматривает файл engine/engine.php и ищет установленные вами модули, и позволяет их выбирать для отображения, поэтому вам не придётся искать специальные адреса и списывать их вручную.

Автор модуля: REZER
Сайт: Для просмотра ссылки Войди или Зарегистрируйся
Версия DLE: 11.x (на более ранних не проверялась, но теоретически должно работать)

1485322894_Image-1.png 1485322930_Image-2.png 1485322933_Image-3.png

Внимание! Если у вас после установки выводятся ошибки, то необходимо скачать файл ниже, и произвести инструкцию от туда. Причиной этому может быть неправильное копирование текста браузером.

1. Открыть файл engine/inc/options.php и найти:

showRow( $lang['opt_sys_offline'], $lang['opt_sys_offlined'], makeCheckBox( "save_con[site_offline]", "{$config['site_offline']}" ) );
Выше добавить:

$mainPageReplaceJS = <<<HTML

<script type="text/javascript">
jQuery( "select[name='save_con[main_page_show]']" ).change(function(){
var thisVal = jQuery( this ).val();
jQuery( "div[id*='main_page_show_']" ).hide();
jQuery( "div[id='main_page_show_" + thisVal + "']" ).show();
});

jQuery( "select[name='save_con[main_page_show]']" ).change();
</script>

HTML;

$listMainPageTypes = array( 'default' => 'По умолчанию (список новостей)', 'lastnews' => 'Последние новости (lastnews)', 'cat' => 'Категорию (выбрать)', 'static' => 'Статическая страница (выбрать)', 'module' => 'Модуль (выбрать)', 'newsid' => 'Новость (указать ID)' );

$categoriesList = CategoryNewsSelection( $config['main_page_show_cat'], 0, false );

$staticPages = array();
$staticQuery = $db->query( "SELECT `name`,`descr` FROM ".PREFIX."_static ORDER BY `id`" );
while( $staticRow = $db->get_row( $staticQuery ) ){
$staticPages[ $staticRow['name'] ] = $staticRow['descr'];
}

$modulePages = array();
$modulePagesLang = array(
'search' => 'Поиск по сайту',
'stats' => 'Статистика сайта',
'addnews' => 'Добавление новости',
'register' => 'Регистрация пользователя',
'lostpassword' => 'Восстановление пароля',
'rules' => 'Правила сайта',
'alltags' => 'Облако тегов',
'favorites' => 'Закладки пользователя',
'feedback' => 'Обратная связь',
'lastcomments' => 'Последние комментарии',
'pm' => 'Персональные сообщения',
'board' => 'Доска объявлений',
'blog' => 'Блоги пользователей',
'selection' => 'Подборка новостей из блогов',
'faq' => 'FAQ - справка сайта',
'proposal' => 'Отзывы и расширения',
'iphoto' => 'Фотоальбом IPhoto'
);
$modulePagesHide = array( 'changemail', 'deletenews', 'comments', 'static', 'auth-social', 'unsubscribe', 'newsletterunsubscribe' );
$engineContent = file_get_contents( ENGINE_DIR.'/engine.php' );
preg_match_all( "/case \"([^\"]*)\"/is", $engineContent, $engineModules );

if( count( $engineModules[1] ) > 0 && is_array( $engineModules[1] ) ){
foreach( $engineModules[1] as $moduleAltName ){
if( in_array( $moduleAltName, $modulePagesHide ) ) continue;
$moduleName = $modulePagesLang[ $moduleAltName ] ? $modulePagesLang[ $moduleAltName ] : $moduleAltName.' - не известен';
$modulePages[ $moduleAltName ] = $moduleName;
}
}

showRow( 'Главная страница сайта', 'Выберите, что необходимо выводить на главной странице сайта.',

makeDropDown( $listMainPageTypes, "save_con[main_page_show]", "{$config['main_page_show']}" ).

"<div id=\"main_page_show_cat\" style=\"display: none; margin: 5px 0 0;\"><select class=\"uniform\" name=\"save_con[main_page_show_cat]\">{$categoriesList}</select></div>".

"<div id=\"main_page_show_static\" style=\"display: none; margin: 5px 0 0;\">".makeDropDown( $staticPages, "save_con[main_page_show_static]", "{$config['main_page_show_static']}" )."</div>".

"<div id=\"main_page_show_module\" style=\"display: none; margin: 5px 0 0;\">".makeDropDown( $modulePages, "save_con[main_page_show_module]", "{$config['main_page_show_module']}" )."</div>".

"<div id=\"main_page_show_newsid\" style=\"display: none; margin: 5px 0 0;\"><input type=\"text\" style=\"width:70px;\" name=\"save_con[main_page_show_newsid]\" value=\"{$config['main_page_show_newsid']}\"> - id новости</div>"

);

showRow( 'Заголовок главной страницы', 'Сохранять ли заголовок главной страницы сайта? Если значение будет выбрано 'Заменять', то заголовок главной страницы будет браться из выбранного вами модуля/новости/категории/страницы.'.$mainPageReplaceJS, makeDropDown( array( "0" => 'Заменять', "1" => 'Сохранять' ), "save_con[main_page_show_replace_title]", "{$config['main_page_show_replace_title']}" ) );

2. Открыть файл engine/engine.php и найти:
Выше добавить:

if( in_array( $config['main_page_show'], array( 'lastnews', 'cat', 'static', 'module', 'newsid' ) ) && $dle_module == 'main' ){
if( $config['main_page_show'] == 'lastnews' ) $do = 'lastnews';
if( $config['main_page_show'] == 'cat' ){
$do = 'cat';
$cat_info = get_vars( "category" );
$category_id = intval( $config['main_page_show_cat'] );
$_GET['category'] = (string) $cat_info[ $config['main_page_show_cat'] ]['alt_name'];
$category = $db->safesql( strip_tags( $cat_info[ $config['main_page_show_cat'] ]['alt_name'] ) );
}
if( $config['main_page_show'] == 'static' ){
$do = 'static';
$_GET['page'] = $config['main_page_show_static'];
};
if( $config['main_page_show'] == 'module' ) $do = totranslit( $config['main_page_show_module'] );
if( $config['main_page_show'] == 'newsid' ) $newsid = intval( $config['main_page_show_newsid'] );

if( $config['main_page_show_replace_title'] == 1 ) $oldMetatags = $metatags;
}

Далее найти:
Выше добавить:

if( in_array( $config['main_page_show'], array( 'lastnews', 'cat', 'static', 'module', 'newsid' ) ) && $dle_module == 'main' && $config['main_page_show_replace_title'] == '1' ){
unset( $newsid, $_GET['category'], $category_id, $_GET['page'], $subaction, $news_found );
$metatags = $oldMetatags;
$do = 'main';
}
 

Вложения

  • main_page_select.txt
    7 KB · Просмотры: 5
Хорошая штука. А как насчёт безопасности? Дыры не открывает этот хак?
 
Хак это конечно же хорошо, но вообще есть замечательный тег available=main и not-available=main. И преимущество этого тега в том, что при обновлении движка не надо будет повторно искать актуальный хак и лопатить движок. Нужен вывод категорий? На не вопрос... берем custom и указываем любую категорию. При обновлении движка не надо ничего лопатить.
Вариантов много, можно отдельный ТПЛ подгружать:
Код:
[aviable=main] {include file="custom_main_page.tpl"} [/aviable]
[not-aviable=main]
   {info}{content}
[/not-aviable]
 
Хак это конечно же хорошо, но вообще есть замечательный тег available=main и not-available=main. И преимущество этого тега в том, что при обновлении движка не надо будет повторно искать актуальный хак и лопатить движок. Нужен вывод категорий? На не вопрос... берем custom и указываем любую категорию. При обновлении движка не надо ничего лопатить.
Вариантов много, можно отдельный ТПЛ подгружать:
Код:
[aviable=main] {include file="custom_main_page.tpl"} [/aviable]
[not-aviable=main]
   {info}{content}
[/not-aviable]

Да, это верно, но тут на главную можно выводить любой модуль, например модуль регистрации, модуль обратной связи, можно вывести любую статическую страницу, любую категорию или даже отдельную новость сделать главной страницей.
 
Да, это верно, но тут на главную можно выводить любой модуль
Например так?
Код:
{include file="engine/modules/mymod.php"}

{include file="engine/modules/mymod.php?param=value1&variable2=value2"}

{include file="engine/modules/mymod.php?param={news-id}"}
А если заглянуть в документацию, там еще и полный список классов и массивов есть.

Там же и пример годный:
Код:
[aviable=faq]{include file="engine/modules/mymod.php"}[/aviable]
[not-aviable=faq]{content}[/not-aviable]

Более того, вы в праве использовать API
Код:
include ('engine/api/api.class.php');

Самый сок, что при обновлении движка хак ставить не надо. Так что я бы не был так категоричен по поводу встроенных возможностей)

DataLife Engine предоставляет удобные механизмы для подключения разработанных вами модификаций скрипта. Данные механизмы позволяют обеспечить работоспособность и после обновления скрипта на новую версию, т.к. данные механизмы позволяют осуществлять подключение без правки файлов скрипта. Для подключения разработанных вами модулей вам необходимо в любом необходимом вам шаблоне добавить тег:

{include file="engine/modules/mymod.php"}

Где engine/modules/ это путь к файлу вашего модуля, а mymod.php имя подключаемого файла. Стандартные файлы модулей DataLife Engine находятся в этой папке и мы вам рекомендуем использовать данную папку, однако это не является обязательным требованием и файл может находится в любой другой папке на сервере. Единственное ограничение безопасности по подобному подключению модулей, это то что на папку в которой находится файл не должно быть прав на запись (CHMOD 777). Также мы рекомендуем вам использовать именно относительные пути при подключении модулей, DataLfe Engine автоматически распознает относительные пути и подключает ваши модули уже согласно настройкам скрипта и путям где установлен скрипт. Тем самым вы можете создавать универсальные инструкции по установке ваших модификаций.

Также вы можете подключать PHP файлы вашего модуля передав им различные параметры, например:

{include file="engine/modules/mymod.php?param=value1&variable2=value2"}

Благодаря подобному подключению, вы можете делать ваши модификации многофункциональными, которые будут выполнять различные роли и функции при различных подключениях. Переданные переменные будут доступны в вашем модуле как $param и $variable2 соответственно.

Начиная с версии DataLife Engine 8.3 в качестве параметров к подключаемым модулям вы можете задавать шаблонные теги скрипта, например при добавлении в шаблон полной новости конструкции {include file="engine/modules/mymod.php?param={news-id}"}, вы можете передавать вашему стороннему модулю в качестве параметра ID новости и т.д. Вниманию разработчиков: Передаваемые в скрипт параметры, это аналоги GET параметров URL браузера, соответственно при выборе передаваемых тегов вы должны учитывать ограчения GET строки, другими словами вы не можете передать в качестве параметра содержимое полной новости к примеру.

Также вы можете использовать подключение своих модулей и для замены основного блока, где выводятся новости и другая основная информация, для этого необходимо использовать данный тег совместно с тегами [aviable=раздел]текст[/aviable] и [not-aviable=раздел]текст[/not-aviable] Описание тегов смотрите в документации в разделе "Вывод новостей на страницах". Вы можете использовать как стандартный список разделов, так и использовать создание собственного раздела сайта, передав его в URL браузера. Рассмотрим простейший пример. Вы хотите добавить к стандартным разделам сайта, добавить свой раздел и выводить информацию в нем из вашего модуля. Допустим вы хотите создать раздел FAQ. Для этого в шаблоне main.tpl прописывается конструкция:

[aviable=faq]{include file="engine/modules/mymod.php"}[/aviable]

[not-aviable=faq]{content}[/not-aviable]

После подобного подключения помимо работы стандартных разделов сайта при обращении по адресу: Для просмотра ссылки Войди или Зарегистрируйся вместо новостей будет выводится ваш новый раздел из вашего модуля.

Для работы ваших модулей и вывода информации именно в том месте шаблона, где вставлен вышеуказанный тег, обязательно только одно важное условие. Вывод информации должен осуществляется только через функцию PHP echo. Рассмотрим пример простейшего модуля и вывода информации. Создадим файл mymod.php со следующим содержимым:

<?php

echo "Тестовый модуль";

?>

При подключении этого файла в шаблоне, в данном месте шаблона появится текст: Тестовый модуль

Список переменных и классов DLE которые вы можете использовать в вашем подключаемом модуле, без дополнительного объявления:

$is_logged - содержит информацию, является ли посетитель авторизованным пользователем или гостем, и содержит значения true или false.

$member_id - содержит массив с информацией о авторизованном пользователе, включая всю его информацию из профиля.

$db - класс DLE для работы с базой данных.

$tpl - класс DLE для работы с шаблонами.

$cat_info - массив содержащий информацию обо всех категориях на сайте.

$config - массив содержащий информацию обо всех настройках скрипта.

$user_group - массив содержащий информацию о всех группах пользователей и их настройках.

$category_id - содержит ID категории которую просматривает посетитель.

$_TIME - содержит текущее время в UNIX формате с учетом настроек смещения в настройках скрипта.

$lang - массив содержащий текст из языкового пакета.

$smartphone_detected - содержит информацию о том, просматривает ли пользователь сайт со смартфона или с обычного браузера, и содержит значения true или false.

$dle_module - содержит информацию о разделе сайта, который просматривает пользователь, либо информацию переменной do из URL браузера.

Внимание: Ваш модуль должен только читать данные из данных переменных, внесение изменений в значения переменных повлечет сбои в работе стандартных возможностей скрипта и дальнейшей его некорректной работе.
 
Для просмотра ссылки Войди или Зарегистрируйся , это всё хорошо конечно что есть встроенные возможности, но там ведь в документации написано :
"Внимание: Ваш модуль должен только читать данные из данных переменных", и список из 12 переменных. А если я например пишу свой модуль, например вывод информации о стране посетителя и города его. У меня например своя переменная для страны $country и для города $city. Получается что в моём новом модуле эти переменные работать не будут? И ещё не нашла в документации как сделать свои теги к своим переменным для вывода в шаблоне своего модуля. Короче говоря мне нужно чтоб в модуле, вернее в шаблоне моего модуля можно было тегами вывести так:

Ваша страна: НАЗВАНИЕ СТРАНЫ
Ваш город: НАЗВАНИЕ ГОРОДА

а в идеале чтоб можно было ещё и небольшой баннер вывести этими тегами страны и города или показывать или не показывать))) Короче я не понимаю как сделать тег для переменной для вывода в шаблоне, ткните меня носом где это почитать, и желательно с примерами для DLE.
 
Для просмотра ссылки Войди или Зарегистрируйся , это всё хорошо конечно что есть встроенные возможности, но там ведь в документации написано :
"Внимание: Ваш модуль должен только читать данные из данных переменных", и список из 12 переменных.
Там перечень системных переменных, из указанных можно только читать, т.к. они встроены в скрипт.
Своих переменных можете создавать сколько угодно, вас только просят не писать в системные. Для поиска города, к примеру можно взять такую базу:

На сайте Maxmind есть вся информация. Как и бесплатная версия базы: Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху