Jump to content

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

Featured Replies

Таблица core_members_history

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156188
Share on other sites
  • Replies 94
  • Created
  • Последний ответ
Expand topic overview

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

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

Most Popular Posts

Dmitriy427
Dmitriy427

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

WaNted
WaNted

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

WaNted
WaNted

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

Posted Images

Expand topic overview

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х ошибки.

Edited by aplayer

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156189
Share on other sites

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

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

 

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156190
Share on other sites

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

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

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

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156191
Share on other sites
2 часа назад, aplayer сказал:

$by=NULL

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156192
Share on other sites
  • 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.

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

 

 

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156474
Share on other sites

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

$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;
}

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=156477
Share on other sites
  • 1 месяц спустя...

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=157263
Share on other sites
$member = \IPS\Member::load( \IPS\Request::i()->id );

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=157264
Share on other sites
49 минут назад, aplayer сказал:

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=157265
Share on other sites
  • 6 месяцев спустя...

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

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

Цитата

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160557
Share on other sites

функцию вызвал в хуке

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160558
Share on other sites

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

<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 чтобы ее можно было отобразить на странице?

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160561
Share on other sites
{template="phtml" group="plugins" location="global" app="core" params="$secret_key"}

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160563
Share on other sites

WaNted 

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

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

<div>{$secret_key}</div>

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160564
Share on other sites
$secret_key = 'secret_key';
$content = \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' )->phtml( $secret_key );

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160566
Share on other sites

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

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

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

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160568
Share on other sites

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160569
Share on other sites
1 час назад, WaNted сказал:

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

да включен.

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160570
Share on other sites

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

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160572
Share on other sites

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

//<?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()

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160573
Share on other sites

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

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

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

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

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

 

plugins.7z

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160604
Share on other sites

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

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

 

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160605
Share on other sites
12 минут назад, WaNted сказал:

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


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

 

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

Надеюсь

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

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

Link to comment
https://ipbmafia.ru/topic/21131-sozdanie-plagina/?&do=findComment&comment=160606
Share on other sites

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.