Jump to content

Создание плагина

Featured Replies

Posted
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().

Если есть какие-то другие способы, то расскажите о них.

 

  • Replies 94
  • Просмотров 8,7k
  • Created
  • Последний ответ

Лучшие авторы в теме

Most Popular Posts

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

  • Там вообще ничего не нужно городить и вообще лезть редактировать этот файл в ручную. При создании Theme Hook достаточно в содержимом указать свой шаблон типа: {template="templateName" group="plugi

  • Нет. А чем Вам скобочки не угодили?

Posted Images

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/ смотрите тут третий шаг.

  • Author
comment_155883
8 минут назад, WaNted сказал:

А чем Вам скобочки не угодили?

Ну это как в анекдоте про армию: "Берете ломы, идете подметать плац..."

Мы не в армии. И если надо что-то подметать, то лучше всего это делать метелкой а не ломами.

если в dev/html создать файл с таким кодом:

<ips:template parameters="" />

{{echo "test";}}

то сайт не грузится, а выводится только такой текст и больше ничего:

theme_core_global_plugins_test
test

{{echo "test";}}

Где-то я читал, что в шаблонах нельзя использовать функции вывода информации на экран. Это совсем край. Для чего тогда вся эта возможность разработки плагинов придумана если в ней нельзя использовать php на 100%?

  • Author
comment_155886
Только что, WaNted сказал:

Хм... Зачем использовать эти функции, когда шаблон итак уже выводит своё содержимое?

Надо выводить динамическое содержимое.

Например заголовки статей с новостного сайта. То-есть такое содержимое которое заранее не известно, постоянно изменяется, а иногда даже не существует

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 последних тем.

  • Author
comment_155892

Ну не знаю. Было бы проще в некоторых моментах.

Не хочу переходить на ips-совский php. Хочу основной код писать на классическом php

comment_155893

Это не "IPS-совский" php, а шаблонизатор. Я не понимаю зачем Вам эти функции, когда содержимое уже итак выводится.

  • Author
comment_155894

Я просто не люблю все эти шаблонизаторы. Хочу писать на обычном php.

А еще я ips вижу первый раз. У меня нет времени все изучать.

  • Author
comment_155896

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

 

Вот новая проблема

<ips:template parameters="" />

{{$test = strftime('%d.%m.%Y %H:%M:%S', time());}}


{$test}

Этот код выводит текущее время на сервере. Но при обновлении страницы выводимое время не обновляется в  около минуты. То-есть результат работы этого кода где-то кэшируется.

Мне кэширование в этом плагине не нужно. Динамичный контент должен выводиться всегда обновленным. где-то можно выключить кэш этого шаблона?

comment_155902

Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона.

  • Author
comment_155903
5 минут назад, WaNted сказал:

Попробуйте напрямую вставить свой код в содержимое Theme Hook, где вставляли тег своего шаблона.

не помогает. Кешируется на 30 секунд. То-есть в течении 30 секунд обновлял страницу и ничего не менялось

  • Author
comment_155907

хотя кешируется он только для гостей.

Странно.

10 минут назад, WaNted сказал:

Я думаю если вы выводите какие-либо статьи, 30 секунд или минута тут не критично. 

я не хочу  публично обсуждать подробности подробности поставленной мне задачи.

Но кеширование вызовет проблему при тестировании. Сам понимаешь, ждать каждый раз по 30 секунд при проверке работы скрипта тоже не вариант.

  • Author
comment_155912

Так вот. Снова хочу вернуться к инклюдам.

Дело в том, что ни один из моих любимых php-редакторов не поддерживает подсветку синтаксиса шаблонизаторов.

Ситуацию может спасти инклюд обычных php файлов, которые можно писать на классическом php {{require "php.php";}}

Но...

Как уже я говорил выше. При компиляции плагина удаляются абсолютно все файлы, которые не созданы в админке и которые не подключены тегами.

В итоге я должен скомпилировать плагин, а php файлы для инклюда дожен загрузить на сервер сам после установки плагина на работающий форум.

А нельзя сделать так чтобы файлы и устанавливались вместе с плагином и инклюдились без проблем?

comment_155913

dev/setup/install.php можете там намудрить с созданием своего php-файла. Чтобы во время установки создавался файл с нужным содержимым.

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.