Skocz do zawartości
  • Zarejestruj się
  • 0
X3nO

Widget w aplikacji IPS 4.1

Pytanie

Cześć, mam pytanie jak dodać widget/blok do istniejącej już aplikacji pod IPS 4.1?

Na razie mam takie coś:

<?php
namespace IPS\monitor\widgets;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}
class _lgslmon extends \IPS\Widget
{
	public $key = 'lgslmon';
	public $app = 'monitor';
	public $plugin = '';
	public function init()
	{
		parent::init();
	}
 
	public function render()
	{
		require 'IPS\monitor\sources\table.php';
	}
}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Polecane posty

  • 0

Ogólnie jeśli to istniejąca apka, to musisz w centrum developera najpierw dodać widget. wtedy będzie on dostępny na liście widgetów.

Swoją drogą nie polecam używania require .... w widgecie. Lepiej stworzyć jakiś tam obiekt z Twojej apki i wtedy wywołać na obiekcie np. render(). require to złe praktyki :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Mogę prosić o przykładowe użycie funkcji render?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Wszystko zależy jeszcze dla jakiego typu zawartości robisz widget. Jeśli jest to content jak np. wpis w kategorii (temat, wpis na blogu, ogłoszenie w (SD) Sales Portal Pro itp) to nie musisz robić metody render, wtedy dajesz coś takiego:

class _Offers extends \IPS\Content\Widget
{
	/**
	 * @brief	Widget Key
	 */
	public $key = 'Offers';
	
	/**
	 * @brief	App
	 */
	public $app = 'sdsalespro';
		
	/**
	 * @brief	Plugin
	 */
	public $plugin = '';
	
	/**
	 * Class
	 */
	protected static $class = 'IPS\sdsalespro\Offer';
	
	/**
	 * Initialise this widget
	 *
	 * @return void
	 */ 
	public function init()
	{
		$this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', $this->app, 'front' ), $this->key ) );

		parent::init();
	}
}

A jeśli nie da się pominąć to to jest przykład metody render()

/**
	 * Render a widget
	 *
	 * @return	string
	 */
	public function render()
	{
	    if( !\IPS\Settings::i()->sd_newsletter_turnon )
	    {
	        return '';
	    }
	    
	    if( \IPS\Member::loggedIn()->member_id && \IPS\sdnewsletter\Address::checkIsMemberSubscribe( \IPS\Member::loggedIn()->member_id ) )
	    {
	        return '';
	    }
	    
	    $form = new \IPS\Helpers\Form( 'sd_newsletter', 'sd_newsletter_subscribe_button', \IPS\Http\Url::internal( 'app=sdnewsletter&module=newsletter&controller=core&do=subscribe', 'front', 'sdnewsletter' ), array( 'data-controller' => 'sdnewsletter.front.subscribe.form' ) );
	    $form->class = 'ipsForm_vertical';
	    $form->add( new \IPS\Helpers\Form\Text( 'sd_newsletter_address_name', \IPS\Member::loggedIn()->member_id ? \IPS\Member::loggedIn()->name : '', TRUE ) );
	    $form->add( new \IPS\Helpers\Form\Email( 'sd_newsletter_address_email', \IPS\Member::loggedIn()->member_id ? \IPS\Member::loggedIn()->email : '', TRUE ) );
	    
	    $options = array();
	    
	    $options[ 0 ] = \IPS\Member::loggedIn()->language()->addToStack( 'sd_newsletter_default_subscribe' );
	    
	    foreach( \IPS\DB::i()->select( '*', 'sdnewsletter_newsletter', null, 'newsletter_title ASC' ) as $row )
	    {
	        $options[ $row[ 'newsletter_id' ] ] = $row[ 'newsletter_title' ];
	    }
	    
	    if( count( $options ) > 1 )
	    {
	        $form->add( new \IPS\Helpers\Form\CheckboxSet( 'sd_newsletter_type_subscribe', array( 0 ), TRUE, array( 'options' => $options, 'parse' => 'normal', 'disabled' => array( 0 ) ) ) );
	    }
	    
	    \IPS\Member::loggedIn()->language()->words[ 'sd_newsletter_regulation' ] = sprintf( \IPS\Member::loggedIn()->language()->get( 'sd_newsletter_regulation' ), \IPS\Http\Url::internal( 'app=sdnewsletter&module=newsletter&controller=core&do=regulation', 'front', 'sdnewsletter_regulation' ), 'data-ipsDialog data-ipsDialog-size="wide" data-ipsDialog-title="' . \IPS\Settings::i()->sd_newsletter_regulation_title . '"' );
	    
	    $form->add( new \IPS\Helpers\Form\Checkbox( 'sd_newsletter_regulation', NULL, TRUE, array(), function( $val )
	    {
	        if ( !$val )
	        {
	            throw new \InvalidArgumentException( 'sd_newsletter_not_agreed_terms' );
	        }
	    } ) );
	    
		return $this->output( $form );
	}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×

Ważne informacje

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.