aplayer Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Проблема заключается в том, что при компиляции плагина удаляются все файлы котрые я создал вручную не через центр разработчика. При создании хука темы а папке hooks создается файл с таким содержимым. //<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if (!defined('\IPS\SUITE_UNIQUE_KEY')) { exit; } class hook35 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { require 'file.php'; //здесь сделать инклюд который сформаирует перпменную $content return array_merge_recursive(array( 'globalTemplate' => array( 0 => array( 'selector' => '#ipsLayout_header', 'type' => 'add_after', 'content' => $content, //вывод переменной в блоке сайта ), ), ), parent::hookData()); } /* End Hook Data */ } В коде уже описано, что я хочу сделать. А именно. Не хочу городить 1000 строк кода в теле функции hookData(), а сделать инклюд который сформирует переменную $content. Но компилятор плагина удаляет все файлы которые я создаю сам вручную. В гугле информации ноль. Только несколько скудных абзацев на офсайте из которых я понял, что хуки кода не предназначены для решения моей проблемы. А если создать еще один хук темы и не привязывать его к месту в шаблоне, а потом сделать его инклюд, то при запуске сайта возникают различные ошибки на неопределённые классы и переменные. Моя задача. Сделать на сайте блок который будет выводить динамическую информацию средствами php. Из все й информации что мне удалось нарыть я понял, что сделать это можно через хук, код которого представлен выше, через элемент массива 'globalTemplate' => ....=>'content' в функции hookData(). Если есть какие-то другие способы, то расскажите о них. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Там вообще ничего не нужно городить и вообще лезть редактировать этот файл в ручную. При создании Theme Hook достаточно в содержимом указать свой шаблон типа: {template="templateName" group="plugins" app="core" location="global"} Где templateName название вашего шаблона в папке dev/html. Вот в этом шаблоне можете уже мудрить. https://invisioncommunity.com/4docs/advanced-usage/development/plugins-an-example-r72/ смотрите тут третий шаг. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 WaNted в папке dev/html можно размещать php? Не эту логику шаблонов со скобочками а обычный php без скобочек? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Нет. А чем Вам скобочки не угодили? aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 8 минут назад, WaNted сказал: А чем Вам скобочки не угодили? Ну это как в анекдоте про армию: "Берете ломы, идете подметать плац..." Мы не в армии. И если надо что-то подметать, то лучше всего это делать метелкой а не ломами. если в dev/html создать файл с таким кодом: <ips:template parameters="" /> {{echo "test";}} то сайт не грузится, а выводится только такой текст и больше ничего: theme_core_global_plugins_test test {{echo "test";}} Где-то я читал, что в шаблонах нельзя использовать функции вывода информации на экран. Это совсем край. Для чего тогда вся эта возможность разработки плагинов придумана если в ней нельзя использовать php на 100%? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Хм... Зачем использовать эти функции, когда шаблон итак уже выводит своё содержимое? aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 Только что, WaNted сказал: Хм... Зачем использовать эти функции, когда шаблон итак уже выводит своё содержимое? Надо выводить динамическое содержимое. Например заголовки статей с новостного сайта. То-есть такое содержимое которое заранее не известно, постоянно изменяется, а иногда даже не существует Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Ну а причем тут функции вывода? Получайте нужную информацию, оформляйте и все дела. <ips:template parameters="" /> {{$topics = new \IPS\Patterns\ActiveRecordIterator( \IPS\Db::i()->select( '*', 'forums_topics', NULL, 'tid DESC', 10 ), '\IPS\forums\Topic' );}} <ul> {{foreach $topics as $topic}} <li> <a href='{$topic->url()}'>{$topic->title}</a> </li> {{endforeach}} </ul> Вот этот шаблон выведет вам 10 последних тем. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 WaNted а есть какой нибудь класс при помощи которого можно парсить другие сайты.? Аналог Curl, fopen итп? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 \IPS\Http\Request\Curl для работы с curl. Так же можете использовать напрямую функции curl_ php. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 WaNted а аналог echo var_dump итп? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Зачем? aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 Ну не знаю. Было бы проще в некоторых моментах. Не хочу переходить на ips-совский php. Хочу основной код писать на классическом php Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Это не "IPS-совский" php, а шаблонизатор. Я не понимаю зачем Вам эти функции, когда содержимое уже итак выводится. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 Я просто не люблю все эти шаблонизаторы. Хочу писать на обычном php. А еще я ips вижу первый раз. У меня нет времени все изучать. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Покажите содержимое файла где формируется Ваша переменная $content. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 WaNted я уже решил переключиться на шаблонизаторы. Потому что инклюд все равно я так понимаю не возможен. Вот новая проблема <ips:template parameters="" /> {{$test = strftime('%d.%m.%Y %H:%M:%S', time());}} {$test} Этот код выводит текущее время на сервере. Но при обновлении страницы выводимое время не обновляется в около минуты. То-есть результат работы этого кода где-то кэшируется. Мне кэширование в этом плагине не нужно. Динамичный контент должен выводиться всегда обновленным. где-то можно выключить кэш этого шаблона? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 5 минут назад, WaNted сказал: Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона. не помогает. Кешируется на 30 секунд. То-есть в течении 30 секунд обновлял страницу и ничего не менялось Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Я думаю если вы выводите какие-либо статьи, 30 секунд или минута тут не критично. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 хотя кешируется он только для гостей. Странно. 10 минут назад, WaNted сказал: Я думаю если вы выводите какие-либо статьи, 30 секунд или минута тут не критично. я не хочу публично обсуждать подробности подробности поставленной мне задачи. Но кеширование вызовет проблему при тестировании. Сам понимаешь, ждать каждый раз по 30 секунд при проверке работы скрипта тоже не вариант. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Поиск в админке по слову cache, первая ссылка (cache page output for guests) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
aplayer Опубликовано 4 марта, 2019 Автор Поделиться Опубликовано 4 марта, 2019 Так вот. Снова хочу вернуться к инклюдам. Дело в том, что ни один из моих любимых php-редакторов не поддерживает подсветку синтаксиса шаблонизаторов. Ситуацию может спасти инклюд обычных php файлов, которые можно писать на классическом php {{require "php.php";}} Но... Как уже я говорил выше. При компиляции плагина удаляются абсолютно все файлы, которые не созданы в админке и которые не подключены тегами. В итоге я должен скомпилировать плагин, а php файлы для инклюда дожен загрузить на сервер сам после установки плагина на работающий форум. А нельзя сделать так чтобы файлы и устанавливались вместе с плагином и инклюдились без проблем? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WaNted Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 dev/setup/install.php можете там намудрить с созданием своего php-файла. Чтобы во время установки создавался файл с нужным содержимым. aplayer 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 4 марта, 2019 Поделиться Опубликовано 4 марта, 2019 Для гостей кешируется шаблон на небольшой срок. Пару секунд абсолютно не критично и, если не ошибаюсь это время можно настроить. Инклуды это дичь, и не знаю чем это спасет ситуацю, но если так сильно хочеться можете попробовать всунуть ваш код в файле хука, отдельно от класса. WaNted 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.