Posted 4 марта, 20195 yr comment_155877 Проблема заключается в том, что при компиляции плагина удаляются все файлы котрые я создал вручную не через центр разработчика. При создании хука темы а папке 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(). Если есть какие-то другие способы, то расскажите о них.
4 марта, 20195 yr comment_155879 Там вообще ничего не нужно городить и вообще лезть редактировать этот файл в ручную. При создании Theme Hook достаточно в содержимом указать свой шаблон типа: {template="templateName" group="plugins" app="core" location="global"} Где templateName название вашего шаблона в папке dev/html. Вот в этом шаблоне можете уже мудрить. https://invisioncommunity.com/4docs/advanced-usage/development/plugins-an-example-r72/ смотрите тут третий шаг.
4 марта, 20195 yr Author comment_155880 WaNted в папке dev/html можно размещать php? Не эту логику шаблонов со скобочками а обычный php без скобочек?
4 марта, 20195 yr Author comment_155883 8 минут назад, WaNted сказал: А чем Вам скобочки не угодили? Ну это как в анекдоте про армию: "Берете ломы, идете подметать плац..." Мы не в армии. И если надо что-то подметать, то лучше всего это делать метелкой а не ломами. если в dev/html создать файл с таким кодом: <ips:template parameters="" /> {{echo "test";}} то сайт не грузится, а выводится только такой текст и больше ничего: theme_core_global_plugins_test test {{echo "test";}} Где-то я читал, что в шаблонах нельзя использовать функции вывода информации на экран. Это совсем край. Для чего тогда вся эта возможность разработки плагинов придумана если в ней нельзя использовать php на 100%?
4 марта, 20195 yr comment_155884 Хм... Зачем использовать эти функции, когда шаблон итак уже выводит своё содержимое?
4 марта, 20195 yr Author comment_155886 Только что, WaNted сказал: Хм... Зачем использовать эти функции, когда шаблон итак уже выводит своё содержимое? Надо выводить динамическое содержимое. Например заголовки статей с новостного сайта. То-есть такое содержимое которое заранее не известно, постоянно изменяется, а иногда даже не существует
4 марта, 20195 yr comment_155887 Ну а причем тут функции вывода? Получайте нужную информацию, оформляйте и все дела. <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 последних тем.
4 марта, 20195 yr Author comment_155888 WaNted а есть какой нибудь класс при помощи которого можно парсить другие сайты.? Аналог Curl, fopen итп?
4 марта, 20195 yr comment_155889 \IPS\Http\Request\Curl для работы с curl. Так же можете использовать напрямую функции curl_ php.
4 марта, 20195 yr Author comment_155892 Ну не знаю. Было бы проще в некоторых моментах. Не хочу переходить на ips-совский php. Хочу основной код писать на классическом php
4 марта, 20195 yr comment_155893 Это не "IPS-совский" php, а шаблонизатор. Я не понимаю зачем Вам эти функции, когда содержимое уже итак выводится.
4 марта, 20195 yr Author comment_155894 Я просто не люблю все эти шаблонизаторы. Хочу писать на обычном php. А еще я ips вижу первый раз. У меня нет времени все изучать.
4 марта, 20195 yr Author comment_155896 WaNted я уже решил переключиться на шаблонизаторы. Потому что инклюд все равно я так понимаю не возможен. Вот новая проблема <ips:template parameters="" /> {{$test = strftime('%d.%m.%Y %H:%M:%S', time());}} {$test} Этот код выводит текущее время на сервере. Но при обновлении страницы выводимое время не обновляется в около минуты. То-есть результат работы этого кода где-то кэшируется. Мне кэширование в этом плагине не нужно. Динамичный контент должен выводиться всегда обновленным. где-то можно выключить кэш этого шаблона?
4 марта, 20195 yr comment_155902 Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона.
4 марта, 20195 yr Author comment_155903 5 минут назад, WaNted сказал: Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона. не помогает. Кешируется на 30 секунд. То-есть в течении 30 секунд обновлял страницу и ничего не менялось
4 марта, 20195 yr comment_155904 Я думаю если вы выводите какие-либо статьи, 30 секунд или минута тут не критично.
4 марта, 20195 yr Author comment_155907 хотя кешируется он только для гостей. Странно. 10 минут назад, WaNted сказал: Я думаю если вы выводите какие-либо статьи, 30 секунд или минута тут не критично. я не хочу публично обсуждать подробности подробности поставленной мне задачи. Но кеширование вызовет проблему при тестировании. Сам понимаешь, ждать каждый раз по 30 секунд при проверке работы скрипта тоже не вариант.
4 марта, 20195 yr comment_155911 Поиск в админке по слову cache, первая ссылка (cache page output for guests)
4 марта, 20195 yr Author comment_155912 Так вот. Снова хочу вернуться к инклюдам. Дело в том, что ни один из моих любимых php-редакторов не поддерживает подсветку синтаксиса шаблонизаторов. Ситуацию может спасти инклюд обычных php файлов, которые можно писать на классическом php {{require "php.php";}} Но... Как уже я говорил выше. При компиляции плагина удаляются абсолютно все файлы, которые не созданы в админке и которые не подключены тегами. В итоге я должен скомпилировать плагин, а php файлы для инклюда дожен загрузить на сервер сам после установки плагина на работающий форум. А нельзя сделать так чтобы файлы и устанавливались вместе с плагином и инклюдились без проблем?
4 марта, 20195 yr comment_155913 dev/setup/install.php можете там намудрить с созданием своего php-файла. Чтобы во время установки создавался файл с нужным содержимым.
4 марта, 20195 yr comment_155914 Для гостей кешируется шаблон на небольшой срок. Пару секунд абсолютно не критично и, если не ошибаюсь это время можно настроить. Инклуды это дичь, и не знаю чем это спасет ситуацю, но если так сильно хочеться можете попробовать всунуть ваш код в файле хука, отдельно от класса.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.