Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Шаблоны (TPL) В fullstory.tpl и shortstory.tpl определить, является ли залогиненный пользователь автором статьи

В fullstory.tpl и shortstory.tpl определить, является ли залогиненный пользователь автором статьи


     28.11.2012    Шаблоны (TPL), Модули, Хаки    2503

вопрос
Здравия желаю!

Есть сайт, который функционирует на DataLife Engine v.9.7 Final Release. Понадобилась реализация такой функции. В файлах шаблона fullstory.tpl и shortstory.tpl надо каким-то образом определить, является ли залогиненный пользователь автором данной статьи.

Поясню. На сайте среди прочих групп пользователей есть две: Авторы и Почетные авторы. Обе эти группы имеют право добавлять новости на сайт и редактировать свои новости. Разница лишь при просмотре новостей на сайте. Авторам доступны для просмотра новостей лишь определенные поля, а почетным авторам доступны все поля. Так для Авторов, например, при просмотре странички с полной новостью, вместо полной новости надо вывести краткую новость (анонс). Для реализации этой функции в файле шаблона fullstory.tpl я использовал примерно такой фрагмент кода:

[group=1,2,3,7] <!-- Привилегированные пользователи, в число которых входят и Почетные авторы -->
    
Открыть /engine/modules/show.full.php и найти:
        if ( $row['votes'] ) {

            $tpl->set( '[poll]', "" );
            $tpl->set( '[/poll]', "" );
            $tpl->set_block( "'\\[not-poll\\](.*?)\\[/not-poll\\]'si", "" );

        } else {

            $tpl->set( '[not-poll]', "" );
            $tpl->set( '[/not-poll]', "" );
            $tpl->set_block( "'\\[poll\\](.*?)\\[/poll\\]'si", "" );
        }

после вставить:
        if( $member_id['name'] == $row['autor'] ) {
        
            $tpl->set( '[allowauthor]', "" );
            $tpl->set( '[/allowauthor]', "" );
            $tpl->set_block( "'\\[not-allowauthor\\](.*?)\\[/not-allowauthor\\]'si", "" );
        
        } elseif ( $member_id['name'] !== $row['autor'] ) {
            
            $tpl->set( '[not-allowauthor]', "" );
            $tpl->set( '[/not-allowauthor]', "" );
            $tpl->set_block( "'\\[allowauthor\\](.*?)\\[/allowauthor\\]'si", "" );
            
        }


В шаблоне fullstory.tpl использовать теги:
    [allowauthor]Для авторов[/allowauthor]
    [not-allowauthor]Для лохов[/not-allowauthor]

    <div class="DivStoryPages">{pages}</div>
[/group]
[not-group=1,2,3,7] <!-- Остальные пользователи, в том числе и простые Авторы -->
    {short-story}
    <div class="DivClear"></div>
    <div class="berrors">Внимание! Вам недоступно полное содержание материалов на сайте.</div>
    <br />
[/not-group]


Получается, что при просмотре странички с конкретной новостью Авторы не видят полного содержимого статьи. Собственно так и надо. Но в то же время, если я автор данной статьи, вошел на сайт под своим логином, то я должен видеть ее полный текст. То есть, если предположить, что для файла-шаблона fullstory.tpl существовали бы, к примеру, дополнительные теги [this-story-your-author] и [not-this-story-your-author], которые проверяли бы, является ли автором статьи юзер, вошедший в данный момент на сайт, то код можно было бы написать так:

[this-story-your-author] <!-- Вы автор данной статьи -->
    
Открыть /engine/modules/show.full.php и найти:
        if ( $row['votes'] ) {

            $tpl->set( '[poll]', "" );
            $tpl->set( '[/poll]', "" );
            $tpl->set_block( "'\\[not-poll\\](.*?)\\[/not-poll\\]'si", "" );

        } else {

            $tpl->set( '[not-poll]', "" );
            $tpl->set( '[/not-poll]', "" );
            $tpl->set_block( "'\\[poll\\](.*?)\\[/poll\\]'si", "" );
        }

после вставить:
        if( $member_id['name'] == $row['autor'] ) {
        
            $tpl->set( '[allowauthor]', "" );
            $tpl->set( '[/allowauthor]', "" );
            $tpl->set_block( "'\\[not-allowauthor\\](.*?)\\[/not-allowauthor\\]'si", "" );
        
        } elseif ( $member_id['name'] !== $row['autor'] ) {
            
            $tpl->set( '[not-allowauthor]', "" );
            $tpl->set( '[/not-allowauthor]', "" );
            $tpl->set_block( "'\\[allowauthor\\](.*?)\\[/allowauthor\\]'si", "" );
            
        }


В шаблоне fullstory.tpl использовать теги:
    [allowauthor]Для авторов[/allowauthor]
    [not-allowauthor]Для лохов[/not-allowauthor]

    <div class="DivStoryPages">{pages}</div>
[/this-story-your-author]
[not-this-story-your-author] <!-- Вы не автор данной статьи -->
    [group=1,2,3,7] <!-- Привилегированные пользователи, в число которых входят и Почетные авторы -->
        
Открыть /engine/modules/show.full.php и найти:
        if ( $row['votes'] ) {

            $tpl->set( '[poll]', "" );
            $tpl->set( '[/poll]', "" );
            $tpl->set_block( "'\\[not-poll\\](.*?)\\[/not-poll\\]'si", "" );

        } else {

            $tpl->set( '[not-poll]', "" );
            $tpl->set( '[/not-poll]', "" );
            $tpl->set_block( "'\\[poll\\](.*?)\\[/poll\\]'si", "" );
        }

после вставить:
        if( $member_id['name'] == $row['autor'] ) {
        
            $tpl->set( '[allowauthor]', "" );
            $tpl->set( '[/allowauthor]', "" );
            $tpl->set_block( "'\\[not-allowauthor\\](.*?)\\[/not-allowauthor\\]'si", "" );
        
        } elseif ( $member_id['name'] !== $row['autor'] ) {
            
            $tpl->set( '[not-allowauthor]', "" );
            $tpl->set( '[/not-allowauthor]', "" );
            $tpl->set_block( "'\\[allowauthor\\](.*?)\\[/allowauthor\\]'si", "" );
            
        }


В шаблоне fullstory.tpl использовать теги:
    [allowauthor]Для авторов[/allowauthor]
    [not-allowauthor]Для лохов[/not-allowauthor]

        <div class="DivStoryPages">{pages}</div>
    [/group]
    [not-group=1,2,3,7] <!-- Остальные пользователи, в том числе и простые Авторы -->
        {short-story}
        <div class="DivClear"></div>
        <div class="berrors">Внимание! Вам недоступно полное содержание материалов на сайте.</div>
        <br />
    [/not-group]
[not-this-story-your-author]


Надеюсь, понятно изложил суть проблемы. Может, кто-нибудь знаете, как решить данную задачу, или как зарегистрировать и создать в DLE 9.7 дополнительные собственные теги. Буду премного благодарен.

Ответил: BR0kEN


Открыть /engine/modules/show.full.php и найти:
        if ( $row['votes'] ) {

            $tpl->set( '[poll]', "" );
            $tpl->set( '[/poll]', "" );
            $tpl->set_block( "'\\[not-poll\\](.*?)\\[/not-poll\\]'si", "" );

        } else {

            $tpl->set( '[not-poll]', "" );
            $tpl->set( '[/not-poll]', "" );
            $tpl->set_block( "'\\[poll\\](.*?)\\[/poll\\]'si", "" );
        }

после вставить:
        if( $member_id['name'] == $row['autor'] ) {
        
            $tpl->set( '[allowauthor]', "" );
            $tpl->set( '[/allowauthor]', "" );
            $tpl->set_block( "'\\[not-allowauthor\\](.*?)\\[/not-allowauthor\\]'si", "" );
        
        } elseif ( $member_id['name'] !== $row['autor'] ) {
            
            $tpl->set( '[not-allowauthor]', "" );
            $tpl->set( '[/not-allowauthor]', "" );
            $tpl->set_block( "'\\[allowauthor\\](.*?)\\[/allowauthor\\]'si", "" );
            
        }


В шаблоне fullstory.tpl использовать теги:
    [allowauthor]Для авторов[/allowauthor]
    [not-allowauthor]Для лохов[/not-allowauthor]
Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы