Помогите понять конструкцию формы в шаблоне переписок

Элионт

Проверенные
Сообщения
36
Реакции
20
Баллы
1,705
Доброе время суток.
Подскажите пожалуйста, каким образом и в каком формате данная форма передаёт список отмеченных чекбоксами переписок в контроллер.

Оно внезапно даже работает, но хотелось бы понять больше чем на уровне "да ну на, проканало что ли".

Код:
    <form action="{xen:link CustomConversations/switch}" method="post"
        class="DiscussionList InlineModForm"
        data-cookieName="conversations"
        data-controls="#InlineModControls"
        data-imodOptions="#ModerationSelect option"
    >   
        <dl class="sectionHeaders">
            <dt class="posterAvatar"><a><span></span></a></dt>           
            <dd class="main">
                <a class="title"><span>{xen:phrase conversation_title}</span></a>
                <a class="postDate"><span></span></a>
            </dd>           
            <dd class="stats"><a><span>{xen:phrase replies}</span></a></dd>
            <dd class="lastPost"><a><span>{xen:phrase last_message}</span></a></dd>
        </dl>
       
        <ol class="discussionListItems">
        <xen:if is="{$conversations}">
            <xen:foreach loop="$conversations" value="$conversation">
                <xen:include template="CustomConversations_thread" />
            </xen:foreach>
        <xen:else />
            <li class="primaryContent">{xen:phrase there_no_conversations_to_display} <xen:if is="{$canStartConversation}"><a href="{xen:link conversations/add}">{xen:phrase start_a_conversation_now}</a></xen:if></li>
        </xen:if>
        </ol>
       
        </form>
 
Элионт,

Вот этот кусок кода перебирает, он точно так же работает как и .
Код:
<xen:foreach loop="$conversations" value="$conversation">
                <xen:include template="CustomConversations_thread" />
</xen:foreach>

Хотелось бы знать по больше, что конкретно нужно знать вам?
 
  • Мне нравится
Реакции: Hope
Вот этот кусок кода перебирает
Этот кусок понятно, там мой же и вставляется шаблон ссылки на переписку.

Особенно интересует
<form action="{xen:link CustomConversations/switch}" method="post"
class="DiscussionList InlineModForm"
data-cookieName="conversations"
data-controls="#InlineModControls"
data-imodOptions="#ModerationSelect option"
>

Что эти опции значат и зачем они.
А так же каким макаром отмеченные галочками переписки приходят сюда:
файл library\XenForo\Model\InlineMod\Conversation.php
вызывается из library\XenForo\ControllerPublic\InlineMod\Conversation.php
метод
Код:
    public function actionRead()
    {
        return $this->executeInlineModAction('markConversationsRead');
    }

Код:
    /**
    * Marks the specified conversations as read.
    *
    * @param array $conversationIds List of IDs to delete
    * @param array $options Options that control the delete. Supports deleteType (soft or hard).
    * @param string $errorKey Modified by reference. If no permission, may include a key of a phrase that gives more info
    * @param array|null $viewingUser Viewing user reference
    *
    * @return boolean True if permissions were ok
    */
    public function markConversationsRead(array $conversationIds, array $options = array(), &$errorKey = '', array $viewingUser = null)
    {
        $conversations = $this->getConversationData($conversationIds, $viewingUser);
        $this->standardizeViewingUserReference($viewingUser);

        foreach ($conversations AS $conversation)
        {
            $this->_getConversationModel()->markConversationAsRead(
                $conversation['conversation_id'], $viewingUser['user_id'], XenForo_Application::$time
            );
        }

        return true;
    }

Заранее спасибо.
 
  • Мне нравится
Реакции: Hope
Почитайте этот мануал
"У Вас недостаточно прав для просмотра полного содержания этого ресурса"

А, нашёл её в полном виде и так. Не, это я и так знаю. Блин, хороший движок, но раз разрабы ксенофобы и рукожопы не могущие в нормальную документацию. Даже на оф форуме темы часто вижу остаются неотвеченными.

Собственно вопрос в чём - Screenshot-441.jpg
Согласно модели в любом случае, обращение сначала идёт к контроллеру же?
Но я не могу вкурить где и в каком виде он получает эти данные чтобы передать модели.
 
Последнее редактирование:
Элионт, какой вы прямой как видно пишете тогда своё. Ваш код тоже говнокод. Пишете свой движок имейте кучу клиентов и посмотрим как вы будете отвечать и разрабатывая при этом 2.0
 
Всем снова доброе время суток :-)

Выяснил сам.

Собирается архив в этой строчке:
Код:
<input type="checkbox" name="conversations[]" value="{$conversation.conversation_id}" class="InlineModCheck" id="inlineModCheck-conversation-{$conversation.conversation_id}" data-target="#conversation-{$conversation.conversation_id}" title="{xen:phrase select_conversation}: '{$conversation.title}'" />

И передаётся в контроллер в действие Switch (которое предустановлено в "родителе" - library\XenForo\ControllerPublic\InlineMod\Abstract.php), также их можно выловить вызвав "$conversationIds = $this->getInlineModIds();" в коде контроллера. Пишет он их как-то через хитро закрученную задницу, в куки похоже, и потом оттуда вылавливает.

Как эти данные попадают в модель:
в контроллере вызываются через враппер
Код:
    public function actionStar()
    {
        return $this->executeInlineModAction('starConversations');
    }

Тот достаёт список, проверяет что вызов из правильного места, проверяет что имеются права на это действие, и если всё верно, вызывает с этими параметрами функцию из модели

Код:
    public function starConversations(array $conversationIds, array $options = array(), &$errorKey = '', array $viewingUser = null)
Вот такие пироги (и об этом я спрашивал).
 
Последнее редактирование модератором:
  • Мне нравится
Реакции: Hope
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу