demvlg Опубликовано 27 Июля 2014 Жалоба Поделиться Опубликовано 27 Июля 2014 доброго времени суток подскажите, в шаблоне globalTemplate я пишу код:<php>$abc = '123456789';</php> как вывести эту переменную в другом шаблоне? например в userInfoPaneвывод {$abc} дает пустоту заранее спасибо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 fini Опубликовано 28 Июля 2014 Жалоба Поделиться Опубликовано 28 Июля 2014 (изменено) php код пишут так <?php $abc = '123456789'; ?>а выводят так <?php echo $abc; ?>А вообще читайте php.su Изменено 28 Июля 2014 пользователем fini Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 28 Июля 2014 Автор Жалоба Поделиться Опубликовано 28 Июля 2014 вы лучше почитайте как пхп код выводится в теле шаблона ипб... пхп я и без вас знаю Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Arhar Опубликовано 28 Июля 2014 Жалоба Поделиться Опубликовано 28 Июля 2014 у шаблона есть такая штука - входящие переменные, это как бы функция (один шаблон - одна функция)так что скорее придется писать хук, и смотря для чего все это нужно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 MrLite Опубликовано 28 Июля 2014 Жалоба Поделиться Опубликовано 28 Июля 2014 Можно объявить нужную переменную в шаблоне includeVars: ipb.vars['my_var'] = 'my_data';Или в globalTemplate есть объявление переменных JS: <script type='text/javascript'> //<![CDATA[ jsDebug = {parse expression="intval($this->settings['_jsDebug'])"}; /* Must come before JS includes */ DISABLE_AJAX = parseInt({$this->settings['disable_text_ajax']}); /* Disables ajax requests where text is sent to the DB; helpful for charset issues */ inACP = false; var isRTL = false; var rtlIe = ''; var rtlFull = ''; //]]> </script>Можно присоединиться к ним. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 28 Июля 2014 Автор Жалоба Поделиться Опубликовано 28 Июля 2014 но это именно js переменные?мне именно их пхп файла надо вывести... можно конечно в главном шаблоне весь выход их пхп засунуть в js переменную, и дальше она уже получается доступна вездено это некрасиво, там будет большой хтмл... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Denis Chursinov Опубликовано 28 Июля 2014 Жалоба Поделиться Опубликовано 28 Июля 2014 У нас же ООП. Даже если бы и по-процедурному, то все равно надо было бы вылезать в $GLOBALS['MyEvilVar'] . Если по жесткому, то можно пририсовать её в кеш. ipsRegistry::updateCacheWithoutSaving( 'MySuperVar','abc' ); А потом ipsRegistry::getCache('MySuperVar', FALSE ); . Но лучше слепить хук https://www.invisionpower.com/support/guides/_/advanced-and-developers/hooks/skin-overloaders-r61 , в котором передать шаблону свою переменную в одном из входящих массивов. А вообще, все зависит от того что за переменная и в скольки местах нужна и переменная ли она вообще. Может ее проще в conf_global.php вписать или глобальную константу в initdata завести. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 30 Июля 2014 Автор Жалоба Поделиться Опубликовано 30 Июля 2014 не совсем понял по ссылке мануал для создания хука перезагрузки стилякак мне вывести чтото (это чтото родится внутри файла хука) над аватарой?нашел, наверно мне подходит этот пример:https://www.invisionpower.com/support/guides/_/advanced-and-developers/hooks/template-hooks-r105 только в нем$profile = ipsRegistry::instance()->output->getTemplate('profile')->functionData['profileModern'][0]['member'];не работает, ничего не выдает... как мне получить данные автора каждого поста? и еще, код внутриpublic function getOutput()сколько раз будет вызываться? сколько постов на странице? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Denis Chursinov Опубликовано 4 Августа 2014 Жалоба Поделиться Опубликовано 4 Августа 2014 и еще, код внутри public function getOutput() сколько раз будет вызываться? сколько постов на странице?смотря к какому шаблону привязка. если к topicview то один, если к post то для каждого поста Над аватаркой работает userinfopane из глобальных. А profilemodern есть только на странице профиля. если у вас этот шаблон на данной конкретной странице не используется, то и в массиве functionData его не будет. как мне получить данные автора каждого поста?смотря куда их надо получить. в topicviewtemplate можно получить из functionData['userinfoPane'][НОМЕР ПОСТА НА СТРАНИЦЕ]['author'] Но это и не надо. У вас есть userinfoPane, в который вы хотите, как я понял, что-то вывести, у него есть данные об авторе. Над аватаром находится хукпоинт if.avatar . Вам нужен туда хук шаблона, который в getOutput() возьмет что-то из базы или из массива author, отформатирует и выдаст. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 10 Августа 2014 Автор Жалоба Поделиться Опубликовано 10 Августа 2014 а где мне взять этот НОМЕР ПОСТА НА СТРАНИЦЕ,который используется в functionData['userinfoPane'][НОМЕР ПОСТА НА СТРАНИЦЕ]['author'] ? допустим я хочу вывести над аватаром [author_id]код хука: <?php class aionAchieves { public function getOutput() { $authorData = ipsRegistry::instance()->output->getTemplate('global')->functionData['userInfoPane']; return '<li class="aion_achieves">'.$authorData[0]['author']['author_name'].'</li>'; } } вот как мне вместо 0 задать нужный ИД поста?иначе выводится над каждым аватаром author_name из первого поста Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Denis Chursinov Опубликовано 10 Августа 2014 Жалоба Поделиться Опубликовано 10 Августа 2014 Вот тут и начинается веселье, никак.Есть 2 варианта:1. Сделать хук для вышестоящего шаблона - topicViewTemplate, а в нем использовать функцию replaceOputput() и заменять в выводе по ключу хука в цикле. Вот так добавляют кнопки в посты: public function getOutput() { } public function replaceOutput( $output, $key ) { $key = 'if.skin_topic.post.canEdit.pre.startif'; $tag = '<!--hook.' . $key . '-->'; $lastFound = 0; if (count($this->registry->output->getTemplate('topic')->functionData['topicViewTemplate'][0]['post_data'])){ foreach($this->registry->output->getTemplate('topic')->functionData['topicViewTemplate'][0]['post_data'] as $post) { if (!$post['post']['_isDeleted']) { $pos = strpos($output, $tag, $lastFound); $strToInsert = 'Я кнопка!!!'; if ($pos) { $output = substr_replace($output, $strToInsert.$tag, $pos, strlen($tag)); $lastFound = $pos + strlen($tag.$strToInsert); } } } } return $output; } Жутко глючная конструкция. Надо угадать все условия, при которых пост будет пропущен, иначе счетчик пойдет в разнос и мы вставим данные не от того поста. 2. В теории можно замутить глобальный счетчик или флажок. <?php class aionAchieves { public function getOutput() { $authorData = ipsRegistry::instance()->output->getTemplate('global')->functionData['userInfoPane']; foreach ($authorData as $num => $data) { if (!isset($data['achive_added'])){ ipsRegistry::instance()->output->getTemplate('global')->functionData['userInfoPane'][$num]['achive_added']=true; return '<li class="aion_achieves">'.$data['author']['author_name'].'</li>'; } } } } Решение чисто теоретическое. Я так еще не пробовал, только что придумал. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 demvlg Опубликовано 10 Августа 2014 Автор Жалоба Поделиться Опубликовано 10 Августа 2014 похоже что нет, выводит author_name первого поста над всеми аватарамиа как добавить в массив $author в userinfoPane свои данные?а потом их просто в шаблоне вывестинашел выход: <?php class aionAchieves { protected $registry; protected $settings; public function __construct() { $this->registry = ipsRegistry::instance(); $this->settings =& $this->registry->fetchSettings(); } public function getOutput() { return; } public function replaceOutput($output, $key ) { if(is_array($this->registry->output->getTemplate('global')->functionData['userInfoPane']) && count($this->registry->output->getTemplate('global')->functionData['userInfoPane'])) { $tag = '<!--hook.'.$key.'-->'; $last = 0; foreach($this->registry->output->getTemplate('global')->functionData['userInfoPane'] as $k => $v) { $pos = strpos($output, $tag, $last ); if($pos !== FALSE ) { $string = $v[1]; // my output $output = substr_replace($output, $string.$tag, $pos, strlen($tag ) ); $last = $pos + strlen($tag . $string ); } } } return $output; } и вот в $string = $v[1]; // my output я уже вставляю что мне надои в шаблон топика не лезу Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
demvlg
доброго времени суток
подскажите, в шаблоне globalTemplate я пишу код:
<php>
$abc = '123456789';
</php>
как вывести эту переменную в другом шаблоне? например в userInfoPane
вывод {$abc} дает пустоту
заранее спасибо
Ссылка на комментарий
Поделиться на других сайтах
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.