Возвращать переменные в шаблон

Я создал модуль для Expression Engine 3 , который включает в себя две функции.

  1. search_form
  2. search_results

search_form returns a form into my template.

search_entries is actioned by search_form upon the forms submission. This function then completed my queries, returning an array of entry_id.

Мой вопрос: как я могу вернуть эти идентификаторы входа обратно в шаблон и вывести их через тег записей канала?

0
nl ja de

1 ответы

На этой неделе у меня была схожая ситуация. Я выполнил две функции: одну для тега шаблона формы, а второй - обратный вызов действия, который работает с данными формы.

In this manner I could output information with ee()->output->show_message(). Like this:

$data = array(
  'title' => 'Search Results',
  'heading' => 'Search Results',
  'content' => "content as a string. wrapped as system message"
);
ee()->output->show_message($data);

That was not what I was looking for :( So I've switched to post->redirect->get pattern and added another template tag for showing search results.

В общем, теперь у меня есть 3 метода в классе базового модуля:

search_form constructs html for the form and returns it

search_submit is processing data passed after form submit, saves results into $_SESSION variable and redirects user to template with search results tag.

search_results reads data from $_SESSION, creates $variables array and returns it with ee()->TMPL->parse_variables(ee()->TMPL->tagdata, $variables).

class Custom_search {
  function search_form() {
    $action_id = ee()->functions->fetch_action_id('Custom_search', 'search_form_submit');
    $form_data = array(
      'action' => ee()->functions->create_url(ee()->uri->uri_string),
      'hidden_fields' => array(
         'ACT' => $action_id,
         'return_url' => ee()->functions->create_url('template_group/search_results')
       )
    );
    $tag_data = ee()->TMPL->tagdata;
    $form = ee()->functions->form_declaration($form_data) . $tag_data . "</form>";
    return $form;
  }

  function search_form_submit() {
    //do something with input
    session_start();
    $_SESSION['custom_search']['query'] = "search query here";
    $_SESSION['custom_search']['results'] = $results;
    ee()->functions->redirect(ee()->input->post('return_url'));
  }

  function search_result() {
    session_start();
    //create $vars array from your results here
    session_unset();
    session_destroy();
    return ee()->TMPL->parse_variables(ee()->TMPL->tagdata, $vars);
  }
}

И у вас будет два файла шаблонов: один с тегом шаблона формы поиска

{exp:custom_search:search_form}
  <input type="text" placeholder="Search..." name="query" />
  <input type="submit" name="submit" value="go" />
{/exp:custom_search:search_form}

и другой с тегом результатов

{exp:custom_search:search_result}
  

Your query: {query}

Results found: {total_results}

{results}

{title}

{description}

{/results} {/exp:custom_search:search_result}
2
добавлено