Перейти к содержанию

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


Рекомендуемые сообщения

Таблица core_members_history

insert into `core_member_history` values( и тут по порядку нужные поля добавляем );

Ссылка на комментарий
Поделиться на другие сайты

Desti а вот еще нашел в member.php

/**
     * Log Member Action
     *
     * @param    mixed        $app            The application action applies to
     * @param    string        $type            Log type
     * @param    mixed        $extra            Any extra data for the type
     * @param    mixed        $by                The member performing the action. NULL for currently logged in member or FALSE for no member
     *
     * @return    void
     */
    public function logHistory( $app, $type, $extra=NULL, $by=NULL )

описание скудновато. Не понятно для чего эта функция. Пробовал позапускать в различных вариациях - 50х ошибки.

Изменено пользователем aplayer
Ссылка на комментарий
Поделиться на другие сайты

Ну если она из members, то и запускаться должна от members

типа $this->members->logHistory( 'core', 'login');

 

 

Ссылка на комментарий
Поделиться на другие сайты

вот. Как-то так
 

$c_member = \IPS\Member::loggedIn();

$c_member->logHistory('core', 'member', 'бла бла бла', $by=NULL );

 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, aplayer сказал:

$by=NULL

он по умолчанию NULL, не надо его передавать в параметрах. 

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Еще вопрос.

Не могу разобраться как использовать класс select для работы с БД.

Например мне надо получить все ID картинок из галереи старше определенной даты.

$select = \IPS\Db::i()->select('image_id', 'gallery_images', array('image_updated>?', '1538300099'),'image_id DESC', array( 0, 10 ) );

Не могу сообразить как из $select вытащить массив данных. Функция var_dump($select); выводит объект с какой-то служебной информацией и структурами таблиц.

Я же запросил Вывести 10 штук image_id возраст которых старше метки времени 1538300099.

Если использовать метод first() то она выводит первое полученное значение. То-есть я на верном пути и ошибок в запросе нет.

Есть еще метод next() но он в цикле с первого же раза возвращает null.

Вобщем мне бы надо получить массив данных согласно запроса.

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Зависит от того - что за массив вы хотите получить:

$select = array();

foreach( \IPS\Db::i()->select('image_id', 'gallery_images', array('image_updated>?', '1538300099'),'image_id DESC', array( 0, 10 ) ) as $row )
{
	//$select[] = $row;
	$select[ $row['image_id'] ] = $row['gallery_images'];
}

 

Сори, за копипастом не уследил. Правильно в Вашем случае так:

$select = array();

foreach( \IPS\Db::i()->select('image_id', 'gallery_images', array('image_updated>?', '1538300099'),'image_id DESC', array( 0, 10 ) ) as $row )
{
	$select[] = $row;
}

 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

если я зайду в профиль другого пользователя, не в свой профиль, мой плагин должен узнать его id ник итп

Как такое реализовать?

Ссылка на комментарий
Поделиться на другие сайты

$member = \IPS\Member::load( \IPS\Request::i()->id );

$member->member_id - идентификатор, $member->name - имя.

Ссылка на комментарий
Поделиться на другие сайты

49 минут назад, aplayer сказал:

если я зайду в профиль другого пользователя

Если это хук модуля profile.php то $this->member

Ссылка на комментарий
Поделиться на другие сайты

  • 6 месяцев спустя...

при разработке плагина использовал в хуке функцию in_array

мне выдает такую ошибку

Цитата

You have used a function (in_array) that should be called from the root namespace for performance reasons

Не могу понять что это такое и как с этим бороться. Я так понимаю движок не дает мне использовать эту функцию в открытом виде. Что делать?

Ссылка на комментарий
Поделиться на другие сайты

В документации много где сказано, что в шаблон можно передать параметры чрез эту строку. И больше ни слова ка именно их передавать.

<ips:template parameters="$param1" /> 

Как я не пытаюсь эти параметры передать мне все пишет  ошибку типа $param1 не определена или об отсутствии аргументов у функции.

Как мне из хука   перекинуть несколько параметров в шаблон phtml?

вот пример хука

//<?php
/* To prevent PHP errors (extending class does not exist) revealing path */
if (!\defined('\IPS\SUITE_UNIQUE_KEY')) {
    exit;
}

class hook49 extends _HOOK_CLASS_ {
    /* !Hook Data - DO NOT REMOVE */

    public static function hookData() {
        $secret_key = "secret_key";
        $content = '{template="phtml" group="plugins" location="global" app="core"}';

        return array_merge_recursive(array(
            'globalTemplate' =>
            array(
                0 =>
                array(
                    'selector' => '#ipsLayout_mainArea',
                    'type' => 'add_before',
                    'content' => $content, 
                ),
            ),
                ), parent::hookData());
    }

    /* End Hook Data */
}

Как отправить переменную $secret_key  в шаблон PHTML чтобы ее можно было отобразить на странице?

Ссылка на комментарий
Поделиться на другие сайты

{template="phtml" group="plugins" location="global" app="core" params="$secret_key"}

 

Ссылка на комментарий
Поделиться на другие сайты

WaNted 

вот такой код завершается ошибкой

Whoops \ Exception \ ErrorException (E_NOTICE)
Undefined variable: secret_key
<ips:template parameters="$secret_key" />

<div>{$secret_key}</div>

 

Ссылка на комментарий
Поделиться на другие сайты

$secret_key = 'secret_key';
$content = \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $secret_key );

 

Ссылка на комментарий
Поделиться на другие сайты

И еще такой вопрос.

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

То-есть я вношу правки в файлы, а сайт продолжает работать как будто ничего не изменилось.

Чтобы изменения вступили в силу надо плагин скачать и заново установить.

А можно ли что нибудь сделать так чтобы не пришлось переустанавливать плагин? Ведь какое-то время изменения применяются без переустановки.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, WaNted сказал:

Режим разработчика включен?

да включен.

Предположительно это похоже не сессию. В течении определенного времени после активности изменения принимаются, а после как будто где-то кешируются и больше исходники не читаются.

Ссылка на комментарий
Поделиться на другие сайты

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

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

На сайте на котором разрабатывался плагин, все хорошо. Наверно из за режима разработчика.

Ссылка на комментарий
Поделиться на другие сайты

Если выключить режим разработчика, то вот такой хук зависает. Кешируется и обновляется раз в пол часа

//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook73 extends _HOOK_CLASS_
{

/* !Hook Data - DO NOT REMOVE */
public static function hookData() {
    $content = time();
 return array_merge_recursive( array (
  'globalTemplate' => 
  array (
    0 => 
    array (
      'selector' => '#ipsLayout_mainArea',
      'type' => 'add_inside_start',
      'content' => $content,
    ),
  ),
), parent::hookData() );
}
/* End Hook Data */


}

Он должен при обновлении страницы выводить результат функции time()

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

Ссылка на комментарий
Поделиться на другие сайты

Вопрос стоит очень остро.

версия форума 4.4.9

прилагаю тестовый плагин с исходниками.

Тестировал на разных сайтах. Итог один. Если выключить режим разработчика PHP выполняется 1 раз и результат выполнения замораживается для всех пользователей навсегда.

Тестовый плагин  при каждом обновлении страницы, между навигатором и контентом должен выводить результат функции time() - постоянно увеличивающееся число. Но но выводит только постоянное число.

 

plugins.7z

Ссылка на комментарий
Поделиться на другие сайты

Попробуйте так:

'content' => '{expression="time()"}'

 

Ссылка на комментарий
Поделиться на другие сайты

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

Попробуйте так:


'content' => '{expression="time()"}'

 

Вроде заработало.

Надеюсь

\IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $params );

в этой конструкции будет работать без кеширования

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...