Опубликовано: 13 января 20169 г Здравствуйте.Подскажите пожалуйста,как пользоваться переменными в шаблонах IPB? Допустим мне нужно получить {$member['member_id']} в шаблоне customField__genericДля этого я открываю шаблон, например, profileModern , список переменных, беру оттуда переменную $member=array(), и вставляю ее в нужный мне шаблон.В шаблоне я указываю {$member['member_id']} , но оно естественно не работает.Как правильно пользоваться переменными в шаблонах?
Опубликовано: 13 января 20169 г Шаблоны это функции которым посредством переменных передаются некие данные. Если нужные данные в этом шаблоне отсутствуют, в коде где вызывается этот шаблон нужно их передать. Передача переменной в шаблон
Опубликовано: 13 января 20169 г беру оттуда переменную $member=array(),Ты бы лучше написал, что надо сделать, чем то, что делаешь.
Опубликовано: 16 января 20169 г Автор Не совсем понял, как их передать.У меня в базе в таблице members есть поле steamidоно вызывается в разрешенных шаблонах - {$member['steamid']}А я хочу вызвать эту переменную в каком либо другом шаблоне..
Опубликовано: 16 января 20169 г Не совсем понял, как их передать.Никак. Надо понимать, что каждый шаблон - это функция, точнее метод класса. И переменные в шаблоне - это аргументы, которые передаются в эту функцию при вызове. В customField__generic приходит переменная $f, которая содержит созданные доп. поля профиля.Я правильно понимаю, что ты хочешь в профиле пользователя добавить поле, которое будет содержать данные из поля steamid ? Если так, тогда создаешь доп шаблон в группе Profiles , например My_customField__generic с переменной, ну скажем тот же $member / А затем вызываешь этот шаблон в нужном месте из profileModern через {parse template="My_customField__generic" group="profileModern" params="$member"} , если как ты говоришь, в profileModern в массиве $member нужное значение есть. Только это сразу profileModern можно прописать. Непонятно, что тебе надо в итоге
Опубликовано: 16 января 20169 г Не совсем понял, как их передать.Прочитайте внимательно тему выше, там все написано. У меня в базе в таблице members есть поле steamidоно вызывается в разрешенных шаблонах - {$member['steamid']}А я хочу вызвать эту переменную в каком либо другом шаблоне..Если в этом шаблоне не предусмотренны такие данные, в месте где вызывается шаблон нужно их передать. Шаблоны это те же функции.Так как править исходный код форума не всегда рационально, проще использовать данные там где они предусмотренны.
Опубликовано: 16 января 20169 г Если речь про данные текущего пользователя вы можете использовать в шаблоне свойствоА если нет, можно в принципе и так <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> Но, млин, зачем этот огород все таки?
Опубликовано: 16 января 20169 г Автор Как еще проще объяснить?Есть данные в поле 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
Опубликовано: 16 января 20169 г Почему 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> должен работать
Опубликовано: 16 января 20169 г либо получать ее в шаблоне. Код выше я привел, попробуйЛогика в шаблоне признак дурного тона, обычно это ведет только к говнокоду. Пример выше добавит +1 sql запрос, хотя эти данные уже один раз были загружены. Да и вообще хочу научится запрашивать разные данные о пользователях в разных шаблонах.Во всех шаблонах вы можете "запрашивать" только данные текущего пользователя. Остальные данные зависят от шаблоны - предусмотренны они в нем или нет, и не важно кому они принадлежат пользователям или кому-то еще.
Опубликовано: 16 января 20169 г Логика в шаблоне признак дурного тона, обычно это ведет только к говнокоду. Пример выше добавит +1 sql запросТак то оно так, н предложи решение. Если ТС хочет получить эти данные именно в этом шаблоне. Да и потом, IPB сам активно использует логику в шаблонах. Ну а 1 sql-запрос, если он будет только в профиле пользователя не страшен.
Опубликовано: 16 января 20169 г В шаблоне дополнительных полей профиля, и многих других, можно использовать данные из объекта $this, не делая лишних запросов к базе.<if test="$this->memberData[steamid'] != ''"> <span class='row_title'>STEAMID</span> <div class='row_data'>{$this->memberData['steamid']}</div> </if>Кроме пользователя, там обычно есть настройки, кэш, данные активного приложения... вобщем, почти все, что вам может понадобиться. Смотрите "var_dump($this);".
Опубликовано: 16 января 20169 г Автор При таком использовании выходит ошибка Fatal error: Cannot use object of type ips_MemberRegistry as arrayА если заменить member на memberData , то будет выводится информация о текущем юзере (то есть обо мне)
Опубликовано: 16 января 20169 г Не то имя массива, четверкой занимался в последнее время, вот и путаюсь бывает. Поправил. Что вам мешает самому заглянуть в дамп и узнать все наверняка?
Опубликовано: 16 января 20169 г В шаблоне дополнительных полей профиля, и многих других, можно использовать данные из объекта $this, не делая лишних запросов к базе.$this->member и $this-memberData содержат данные текущего пользователя, т.е. того, кто просматривает. А ТС нужны данные владельца профиля
Опубликовано: 17 января 20169 г Да и потом, IPB сам активно использует логику в шаблонах.Не использует. Использует логические условия а не бизнес логику. Ну а 1 sql-запрос, если он будет только в профиле пользователя не страшенА потом он захочет иметь данные еще в одном шаблоне и будет плодить такие конструкции по всему скину. Да, IPSMember:load кешируется и повторный вызов будет из кеша, но это уже выглядит плохо. Так то оно так, н предложи решениеИспользовать данные там где они есть. Так ли они нужны в этом шаблоне?
Здравствуйте.
Подскажите пожалуйста,как пользоваться переменными в шаблонах IPB?
Допустим мне нужно получить {$member['member_id']} в шаблоне customField__generic
Для этого я открываю шаблон, например, profileModern , список переменных, беру оттуда переменную $member=array(), и вставляю ее в нужный мне шаблон.
В шаблоне я указываю {$member['member_id']} , но оно естественно не работает.
Как правильно пользоваться переменными в шаблонах?