Передача переменных шаблона механизма выражения

#expressionengine

#expressionengine

Вопрос:

Я создаю в Expression Engine 2.3 систему профилей пользователей, используя модули пользователей и друзей Solspace. Они работают нормально, но мне невероятно сложно передавать встроенные переменные.

У меня есть .profile_head шаблон, который вызывается из каждого шаблона. Страница профиля, страница друзей, страница личных сообщений и т. Д. Он создает пользовательскую навигацию, отображает аватар, все обычные пользовательские вещи. Все это основано на переданном идентификаторе пользователя {segment_3} . Это позволяет мне отображать информацию другого пользователя, изменяя этот сегмент.

Проблема в том, что это делает мои URL-адреса слишком точными. Я не могу, чтобы пользователи переходили в / users, они должны перейти в /users/profile / UID, или наилучшим возможным сценарием является страница с ошибкой или перенаправление на домашнюю страницу.

Я попытался решить эту проблему с помощью переменных в моем шаблоне:

 {embed="/users/.profile_head" uid="{segment_3}"}
 or......
{embed="/users/.profile_head" uid="{logged_in_member_id}"}
  

В файле .profile_head шаблона я могу распечатать {embed:uid} просто отлично, но когда я пытаюсь назначить его чему-либо (например, циклу или другому шаблону), он ломается:

 <!-- /users/.profile_head -->
{exp:friends:members member_id="{embed:uid}" dynamic="off" limit="1"}
 or.....
{embed="users/.profile_column" uid="{embed:uid}"}
  

Например, если {embed:uid} задано как {logged_in_member_id} , я получаю следующую ошибку:

 Parse error: syntax error, unexpected T_LNUMBER in /var/www/system/expressionengine/libraries/Functions.php(656) : eval()'d code on line 9
  

Это строка 9:

 {if logged_in_member_id == "{embed:uid}"} <span class="this_is_you">This is you!</span>{/if}
  

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

Ответ №1:

Я полагаю, что {logged_in_member_id} это переменная с поздним анализом, что означает, что она может быть недоступна в некоторых ваших тегах на момент их обработки — следовательно, она передается буквально {logged_in_member_id} .

Попробуйте CURRENT_USER вместо этого использовать константу.

Комментарии:

1. Это работает. Однако еще один вопрос… В моем встроенном шаблоне у меня есть это: <a href="{site_url}users/sendmessage/{embed:uid}" class="bt_orange short">Send a Message</a> . URI вычисляется до http://mysite.com/users/sendmessage/CURRENT_USER . Есть ли какой-нибудь способ напечатать там реальный идентификатор пользователя? Я предполагаю CURRENT_USER , что он предназначен для использования в тегах и условных обозначениях, а не для печати, правильно?

2. Вероятно, вы можете использовать {logged_in_member_id} в этой ситуации, поскольку она не оценивается, а просто печатается. Не видя полной иерархии вложений и условных выражений, трудно дать окончательный ответ о том, что и где следует использовать. Это может быть сложно.

3. Проблема в том, что единственная ссылка, которую шаблон может иметь для использования идентификатора пользователя, — это то, что он получает через {embed:uid} . Если этот встраиваемый параметр есть, то это то, с чем мне нужно работать. CURRENT_USER Я не могу использовать {logged_in_member_id} , потому что я должен использовать тот же шаблон на страницах, которые ссылаются на пользователя, отличного от того, который в данный момент вошел в систему.

4. Но CURRENT_USER и {logged_in_member_id} это одно и то же — просто один анализируется рано, а другой анализируется поздно.

5. Согласно документам Solspace: «Вы можете жестко запрограммировать идентификатор участника, передать его через встраивание, получить его из URI или указать «CURRENT_USER» для отображения профиля текущего пользователя, вошедшего в систему». Похоже, что предоставление фактической строки «CURRENT_USER» тегу приведет к желаемому результату.