Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Переменные в шаблонах IPB 3.4.8

Здравствуйте.

Подскажите пожалуйста,как пользоваться переменными в шаблонах IPB?

 

Допустим мне нужно получить {$member['member_id']} в шаблоне customField__generic

Для этого я открываю шаблон, например, profileModern , список переменных, беру оттуда переменную $member=array(), и вставляю ее в нужный мне шаблон.

В шаблоне я указываю {$member['member_id']} , но оно естественно не работает.

Как правильно пользоваться переменными в шаблонах?

Рекомендованные сообщения

Шаблоны это функции которым посредством переменных передаются некие данные. Если нужные данные в этом шаблоне отсутствуют, в коде где вызывается этот шаблон нужно их передать.

 

Передача переменной в шаблон

беру оттуда переменную $member=array(),

Ты бы лучше написал, что надо сделать, чем то, что делаешь.

  • Автор

Не совсем понял, как их передать.

У меня в базе в таблице members есть поле steamid

оно вызывается в разрешенных шаблонах - {$member['steamid']}

А я хочу вызвать эту переменную в каком либо другом шаблоне..

Не совсем понял, как их передать.

Никак. Надо понимать, что каждый шаблон - это функция, точнее метод класса. И переменные в шаблоне - это аргументы, которые передаются в эту функцию при вызове. В customField__generic приходит переменная $f, которая содержит созданные доп. поля профиля.

Я правильно понимаю, что ты хочешь в профиле пользователя добавить поле, которое будет содержать данные из поля steamid ? Если так, тогда создаешь доп шаблон в группе Profiles , например My_customField__generic с переменной, ну скажем тот же $member / А затем вызываешь этот шаблон в нужном месте из profileModern через {parse template="My_customField__generic" group="profileModern" params="$member"} , если как ты говоришь, в profileModern в массиве $member нужное значение есть. Только это сразу profileModern можно прописать. Непонятно, что тебе надо в итоге

Не совсем понял, как их передать.

Прочитайте внимательно тему выше, там все написано.

 

У меня в базе в таблице members есть поле steamid

оно вызывается в разрешенных шаблонах - {$member['steamid']}

А я хочу вызвать эту переменную в каком либо другом шаблоне..

Если в этом шаблоне не предусмотренны такие данные, в месте где вызывается шаблон нужно их передать. Шаблоны это те же функции.

Так как править исходный код форума не всегда рационально, проще использовать данные там где они предусмотренны.

Если речь про данные текущего пользователя вы можете использовать в шаблоне свойство

А если нет, можно в принципе и так


<php>
$member_id	= intval( $this->request['id'] ) ? intval( $this->request['id'] ) : intval( $this->request['MID'] );
$member	= IPSMember::load( $member_id );
 echo '<pre>';
 print_r($member);
 echo '</pre>';
</php>
<if test="$f->parsed != ''">
<span class='row_title'>{$f->raw_data['pf_title']}</span>
<div class='row_data'>
	<if test="genericIsArray:|:is_array($f->parsed)">
		{parse expression="implode( '<br />', $f->parsed )"}
	<else />
		{$f->parsed}
	</if>
</div>
</if>


 

Но, млин, зачем этот огород все таки?

  • Автор

Как еще проще объяснить?

Есть данные в поле steamid

Нужно вывести эти данные в профиле юзера (если оно есть соответственно)

Например в customField__generic вывести :

<if test="$member['steamid'] != ''">
<span class='row_title'>STEAMID</span>
<div class='row_data'>{$member['steamid']}</div>
</if>

 

Да и вообще хочу научится запрашивать разные данные о пользователях в разных шаблонах..

А затем вызываешь этот шаблон в нужном месте из profileModern через {parse template="My_customField__generic" group="profileModern" params="$member"}

Почему group="profileModern" , если группа шаблонов group="skin_profile"

profileModern я вообще в пример привел, так как там выше описанный код работает.

Но мне не удобно писать код в том шаблоне, мне его нужно вывести совсем в другое место, например, как и говорил в customField__generic

Почему group="profileModern" , если группа шаблонов group="skin_profile"

Ну да, skin_profile , торопился.

Как еще проще объяснить?

Есть данные в поле steamid

Нужно вывести эти данные в профиле юзера (если оно есть соответственно)

Например в customField__generic вывести :

 

Ну не будет там этой переменной, откуда ей взяться? Либо грубо лезть в файлы и добавлять ее там, т.е.

править исходный код форума
либо получать ее в шаблоне. Код выше я привел, попробуй

Проверь,

echo '<pre>';

print_r($member);

echo '</pre>';

 

Есть она там? Если есть, то

<if test="$member['steamid'] != ''">
   <span class='row_title'>STEAMID</span>
   <div class='row_data'>{$member['steamid']}</div>
</if>

 

должен работать

либо получать ее в шаблоне. Код выше я привел, попробуй

Логика в шаблоне признак дурного тона, обычно это ведет только к говнокоду. Пример выше добавит +1 sql запрос, хотя эти данные уже один раз были загружены.

 

Да и вообще хочу научится запрашивать разные данные о пользователях в разных шаблонах.

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

Логика в шаблоне признак дурного тона, обычно это ведет только к говнокоду. Пример выше добавит +1 sql запрос

Так то оно так, н предложи решение. Если ТС хочет получить эти данные именно в этом шаблоне. Да и потом, IPB сам активно использует логику в шаблонах. Ну а 1 sql-запрос, если он будет только в профиле пользователя не страшен.

В шаблоне дополнительных полей профиля, и многих других, можно использовать данные из объекта $this, не делая лишних запросов к базе.

<if test="$this->memberData[steamid'] != ''">
   <span class='row_title'>STEAMID</span>
   <div class='row_data'>{$this->memberData['steamid']}</div>
</if>

Кроме пользователя, там обычно есть настройки, кэш, данные активного приложения... вобщем, почти все, что вам может понадобиться. Смотрите "var_dump($this);".

  • Автор

При таком использовании выходит ошибка

Fatal error: Cannot use object of type ips_MemberRegistry as array

А если заменить member на memberData , то будет выводится информация о текущем юзере (то есть обо мне)

Не то имя массива, четверкой занимался в последнее время, вот и путаюсь бывает. Поправил.

 

Что вам мешает самому заглянуть в дамп и узнать все наверняка?

В шаблоне дополнительных полей профиля, и многих других, можно использовать данные из объекта $this, не делая лишних запросов к базе.

$this->member и $this-memberData содержат данные текущего пользователя, т.е. того, кто просматривает. А ТС нужны данные владельца профиля

Да и потом, IPB сам активно использует логику в шаблонах.

Не использует. Использует логические условия а не бизнес логику.

 

Ну а 1 sql-запрос, если он будет только в профиле пользователя не страшен

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

 

Так то оно так, н предложи решение

Использовать данные там где они есть. Так ли они нужны в этом шаблоне?

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.