Как сделать свою страницу без SSI.PHP

Автор DeMonyan, 21 сентября 2014, 19:01:06

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

DeMonyan

Собственно идея в том, чтобы страницу загружать GET запросами.

Первое что сделал добавил значение в массив $actionArray, в индексном файле форума. Указал в каком файле какую процедуру использовать. Добавил вот такую строку.
'geo_seas' => array('Calculater.php', 'Seasons'),
Теперь в папке Source создал файл Calculater.php. В нём прописал соответствующую функцию. Но вот куда надо делать вывод этой функции чтобы страница правильно отображалась понять не могу. Если вывод делать эхом из функции, она грузится вне шаблона форума. Насколько мне подсказывает логика нужно её вывод впихнуть в какую-то переменную, но в какую?

digger®

Нужно создать файл шаблона Calculate.template.php в /Themes/default/
В функции Seasons загрузить нужные данные в $context или свой массив, потом вызвать loadTemplate('Calculate') и вывести там эти данные;

ksamochkin

а чем вариант с использованием SSI не подходит? ведь он намного проще

DeMonyan

Цитата: ksamochkin от 21 сентября 2014, 20:07:29
а чем вариант с использованием SSI не подходит? ведь он намного проще

Хочется глобально интегрировать сайт в форум. Чтобы всё открывалось через индекс. С меню разобрался как сделать, теперь вот с этот вопрос на очереди. В итоге если никто не против могу описать всю эпопею. Если это вообще нужно конечно.

Ещё не могу понять как узнать в какие группы входит конкретный пользователь, средствами smf. Я конечно могу запрос сделать к базе, и пока мысли только в эту сторону. Но ведь явно можно как-то определить и по другому? Это нужно для разграничения прав к сайту с помощью групп форума.

Цитата: digger® от 21 сентября 2014, 19:46:31
Нужно создать файл шаблона Calculate.template.php в /Themes/default/
В функции Seasons загрузить нужные данные в $context или свой массив, потом вызвать loadTemplate('Calculate') и вывести там эти данные;

А можно носом ткнуть на счёт массива $context где почитать, что там где хранится и что куда надо засунуть?

digger®

#4
Цитата: DeMonyan от 21 сентября 2014, 20:25:24Ещё не могу понять как узнать в какие группы входит конкретный пользователь, средствами smf. Я конечно могу запрос сделать к базе, и пока мысли только в эту сторону. Но ведь явно можно как-то определить и по другому? Это нужно для разграничения прав к сайту с помощью групп форума.
Если речь про текущего залогиненного пользователя, то
echo $context['member']['group_id'];
echo $context['member']['additional_groups'];

если про какого-то произвольного, то
loadMemberData(array($user_id));
echo $user_profile[$user_id]['id_group'];
echo $user_profile[$user_id]['additional_groups'];


Цитата: DeMonyan от 21 сентября 2014, 20:25:24А можно носом ткнуть на счёт массива $context где почитать, что там где хранится и что куда надо засунуть?
$context это глобальный массив форума, через который передается основная часть данных. Почитать особо не где, можно посмотреть
var_dump($context)
там по названиям индексов все понятно

В вашем случае:

В Calculater.php

function Seasons() {
global $context;
$context['mydata'] = 123;
loadTemplate('Calculate');
}


В Calculate.template.php

function template_main() {
global $context;
echo $context['mydata'];
}


DeMonyan

Цитата: digger® от 21 сентября 2014, 23:34:28
Если речь про текущего залогиненного пользователя, то
echo $context['member']['group_id'];
echo $context['member']['additional_groups'];

если про какого-то произвольного, то
loadMemberData(array($user_id));
echo $user_profile[$id]['id_group'];
echo $user_profile[$id]['additional_groups'];

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

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

digger®

Цитата: DeMonyan от 22 сентября 2014, 00:34:38
Теперь бы ещё понять можно ли как-то хедер и меню менять в зависимости от страницы, не куроча основной код сильно.
Чтобы менять меню, нужно зарегистрировать хук integrate_menu_buttons и менять через него меню в зависимости от
if ($context[current_action] == 'geo_seas')

Чтобы менять хэдер, придется покурочить index.template.php. Вставить там проверку условия
if ($context[current_action] == 'geo_seas')
и сделать разные варианты отображения в зависимости от него

DeMonyan

С хедером нашёл проще способ, добавлять его в $context['html_headers'];

На счёт меню не совсем понимаю что за хуки и где их регистрировать.   :(

И с группами не получается:

function template_main()
{
global $context, $settings, $options, $txt, $scripturl, $modSettings;

echo "1 - ".$context['member']['additional_groups']."<br />";
echo "2 - ".$context['member']['group_id']."<br />";
echo VirtaCalc();
}


Выводит
1 -
2 -

И далее страницу. Хотя пользователь залогинен.


DeMonyan

Цитата: digger® от 26 сентября 2014, 23:33:08Цитата: DeMonyan от Сегодня в 23:19:19
И с группами не получается:
Посмотрите, что у вас вообще в $context лежит.
В дампе массива $context вообще нет ничего связанного с group...

digger®

Цитата: DeMonyan от 26 сентября 2014, 23:50:03
В дампе массива $context вообще нет ничего связанного с group...
Ну да, обманул я :)
Нужен $user_info и в нем $user_info['groups']

Про хуки, посмотрите в качестве примера мoй мод Microdata4SMF, он небольшой и с понятной структурой.

DeMonyan

Цитата: digger® от 27 сентября 2014, 00:00:13В дампе массива $context вообще нет ничего связанного с group...
Ну да, обманул я
Нужен $user_info и в нем $user_info['groups']

Да, теперь индексы групп получаю. ) Спасибо! ) А встроенная проверка есть на принадлежность к конкретной группе (по индексу например), или проверять наличие в массиве?

digger®

Цитата: DeMonyan от 27 сентября 2014, 00:07:49встроенная проверка есть на принадлежность к конкретной группе (по индексу например)
Такой проверки вроде нет, да и она от in_array() ничем отличаться не будет.
Вообще, правильный путь - это в права доступа групп добавить свой пункт, с помощью которого нужным группам дается разрешение на что-то, а потом в коде для текущего юзера можно проверить имеет ли он разрешение на это.
isAllowedTo('имя_разрешения');

DeMonyan

Цитата: digger® от 27 сентября 2014, 00:22:21
Такой проверки вроде нет, да и она от in_array() ничем отличаться не будет.
Вообще, правильный путь - это в права доступа групп добавить свой пункт, с помощью которого нужным группам дается разрешение на что-то, а потом в коде для текущего юзера можно проверить имеет ли он разрешение на это.
isAllowedTo('имя_разрешения');
Не очень понимаю каким образом это делать, всмысле как создать свой пункт прав доступа. Документацию бы на русском языке, не люблю я кипы док перерывать англоязычных. По сути нужно создать 2 группы. Что бы можно было сделать нельзя, чуть-чуть зя и просто зя. И куча других групп, вхождение в которые будет фильтровать выводимые данные по коду группы, то есть тут зя/низя не получится.

thc2000

Спасибо, буду ковырять

PS Карму могли бы и не портить, реально замороченная штука для тех, кто хочет чуть больше чем стандартный функционал