#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» тегу приведет к желаемому результату.