Jump to content
  • 0
X3nO

Widget w aplikacji IPS 4.1

Question

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

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 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 :)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 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 );
	}

 

Share this post


Link to post
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.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

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.