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

Jak utworzyć widget?

Pytanie

Witam,

Zainstalowałem na forum tryb developera, wszystko fajnie śmiga, lecz podczas dodania widgetu w tym trybie nie mogę nic tam dodać, jak to zrobić, aby wyświetlał się tam jakiś tekst np.: test

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

25 odpowiedzi na to pytanie

Polecane posty

  • 0

W trybie dev dodajesz wszystko tak jak normalnie, tyle że pluginy widgety muszą być w wersji dev, tzn domyślne aplikacje to mają jak pobierzesz paczkę ze strony ips'u, ale dodatkowe rzeczy nie mają takich danych

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner pobrałem ze strony IPS'u, lecz nie widzę tam opcji dodania tekstu/zawartości do tego. Ręcznie trzeba? Jak tak to gdzie dokładnie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Ale tworzysz własny widget czy jak bo nie wiem co chcesz osiągnąć i przy użyciu czego?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner tak, tworze własny i chcę tam dodać tekst np.: test1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

ok, a jaki masz kod? bo musisz albo utworzyć szablon dla takiego widgetu albo zwrócić z niego tekst i po wstawieniu na stronę będzie się wyświetlać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner podstawowy:

<?xml version="1.0" encoding="UTF-8"?>
<plugin name="test" version_long="10000" version_human="1.0.0" author="xxx" website="xxx" update_check=""><hooks><hook type="S" class="\IPS\Theme\class_forums_front_index" filename="test"><![CDATA[//<?php

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

class hook6 extends _HOOK_CLASS_
{

/* !Hook Data - DO NOT REMOVE */
public static function hookData() {
 return array_merge_recursive( array (
  'index' => 
  array (
    0 => 
    array (
      'selector' => 'section > ol.ipsList_reset.cForumList[data-controller=\'core.global.core.table, forums.front.forum.forumList\'] > li.cForumRow.ipsBox.ipsSpacer_bottom',
      'type' => 'add_after',
      'content' => 'eqweqweweqewqeqwe',
    ),
  ),
), parent::hookData() );
}
/* End Hook Data */


}
]]></hook></hooks><tasks/><widgets><widget key="test" class="\IPS\Widget" restrict="sidebar,cms" default_area="" allow_reuse="" menu_style="menu" embeddable=""><![CDATA[<?php
/**
 * @brief		test Widget
 * @author		<a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
 * @copyright	(c) 2001 - 2016 Invision Power Services, Inc.
 * @license		http://www.invisionpower.com/legal/standards/
 * @package		IPS Community Suite
 * @subpackage	test
 * @since		14 Jan 2017
 * @version		SVN_VERSION_NUMBER
 */

namespace IPS\plugins\<{LOCATION}>\widgets;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * test Widget
 */
class _test extends \IPS\Widget
{
	/**
	 * @brief	Widget Key
	 */
	public $key = 'test';
	
	/**
	 * @brief	App
	 */
	public $app = '';
		
	/**
	 * @brief	Plugin
	 */
	public $plugin = '<{ID}>';
	
	/**
	 * Initialise this widget
	 *
	 * @return void
	 */ 
	public function init()
	{
		// Use this to perform any set up and to assign a template that is not in the following format:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', $this->app, 'front' ), $this->key ) );
		// If you are creating a plugin, uncomment this line:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) );
		// And then create your template at located at plugins/<your plugin>/dev/html/test.phtml
		
		$this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', 'core', 'front' ), $this->key ) );
	}
	
	/**
	 * Specify widget configuration
	 *
	 * @param	null|\IPS\Helpers\Form	$form	Form object
	 * @return	null|\IPS\Helpers\Form
	 */
	public function configuration( &$form=null )
	{
 		if ( $form === null )
		{
	 		$form = new \IPS\Helpers\Form;
 		}

 		// $$form->add( new \IPS\Helpers\Form\XXXX( .... ) );
 		// return $form;
 	} 
 	
 	 /**
 	 * Ran before saving widget configuration
 	 *
 	 * @param	array	$values	Values from form
 	 * @return	array
 	 */
 	public function preConfig( $values )
 	{
 		return $values;
 	}

	/**
	 * Render a widget
	 *
	 * @return	string
	 */
	public function render()
	{
		return "";
		// Use $this->output( $foo, $bar ); to return a string generated by the template set in init() or manually added via $widget->template( $callback );
		// Note you MUST route output through $this->output() rather than calling \IPS\Theme::i()->getTemplate() because of the way widgets are cached
	}
}]]></widget></widgets><htmlFiles/><cssFiles/><jsFiles/><resourcesFiles/><lang/><versions/></plugin>

 

Edytowano przez TENAZ

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
public function render()
	{
		return "";
		// Use $this->output( $foo, $bar ); to return a string generated by the template set in init() or manually added via $widget->template( $callback );
		// Note you MUST route output through $this->output() rather than calling \IPS\Theme::i()->getTemplate() because of the way widgets are cached
	}

no i tutaj masz że widget ma zwracać pusty ciąg.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner czyli tam w "return "";" mam dodać tekst czy jak?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner będzie tam normalnie działało PHP tzn. takie coś?: {member="link()" id="4" raw="true"} czy nie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Nie, do tego musisz mieć szablon, albo zrobić to normalnym php

\IPS\Member::load( 4 )->link()

I poczytaj może dokumentacje IPS'u jak chcesz kodować

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner a może wstawić w return takie coś:

{template="test" group="plugins" location="global" app="core"}

i tam zapisać to:{member="link()" id="4" raw="true"}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Nie. masz napisane w komentarzu pod returnem jak masz zwracać szablon

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner no dobra, dam takie coś:

$this->output( $test );

I gdzie wstawić tekst, aby pokazywał jako $test?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

w sensie masz w zmiennej $test tekst i chcesz go pokazać czy jak?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner 

$test = "{member='link()' id='4' raw='true'}";
$this->output( $test );

Takie coś ma być?

Edytowano przez TENAZ

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Nie. możesz dać output() samo a to co usilnie chcesz wstawić wszędzie a nie umiesz tego wstawić wklejasz do szablonu, który znajduje się w takiej lokalizacji:

core -> front -> widgets

A bit szablonu nosi nazwę test

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner dałem:

$this->output();

Dodałem do szablonu tekst: test i podczas dodawania bloku wyskoczył error w bloku (Sam napis: Error)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
/**
	 * @brief	Widget Key
	 */
	public $key = 'test';
	
	/**
	 * @brief	App
	 */
	public $app = '';
		
	/**
	 * @brief	Plugin
	 */
	public $plugin = '<{ID}>';
	
	/**
	 * Initialise this widget
	 *
	 * @return void
	 */ 
	public function init()
	{
		// Use this to perform any set up and to assign a template that is not in the following format:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', $this->app, 'front' ), $this->key ) );
		// If you are creating a plugin, uncomment this line:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) );
		// And then create your template at located at plugins/<your plugin>/dev/html/test.phtml
		
		$this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', 'core', 'front' ), $this->key ) );
	}

a ten fragment pliku wygląda tak samo?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner

/**
 * test Widget
 */
class _test extends \IPS\Widget
{
	/**
	 * @brief	Widget Key
	 */
	public $key = 'test';
	
	/**
	 * @brief	App
	 */
	public $app = '';
		
	/**
	 * @brief	Plugin
	 */
	public $plugin = '<{ID}>';
	
	/**
	 * Initialise this widget
	 *
	 * @return void
	 */ 
	public function init()
	{
		// Use this to perform any set up and to assign a template that is not in the following format:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', $this->app, 'front' ), $this->key ) );
		// If you are creating a plugin, uncomment this line:
		// $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) );
		// And then create your template at located at plugins/<your plugin>/dev/html/test.phtml
		$this->template( array( \IPS\Theme::i()->getTemplate( 'widgets', 'core', 'front' ), $this->key ) );
	}
	
	/**
	 * Specify widget configuration
	 *
	 * @param	null|\IPS\Helpers\Form	$form	Form object
	 * @return	null|\IPS\Helpers\Form
	 */
	public function configuration( &$form=null )
	{
 		if ( $form === null )
		{
	 		$form = new \IPS\Helpers\Form;
 		}

 		// $$form->add( new \IPS\Helpers\Form\XXXX( .... ) );
 		// return $form;
 	} 
 	
 	 /**
 	 * Ran before saving widget configuration
 	 *
 	 * @param	array	$values	Values from form
 	 * @return	array
 	 */
 	public function preConfig( $values )
 	{
 		return $values;
 	}

	/**
	 * Render a widget
	 *
	 * @return	string
	 */
	public function render()
	{
		$this->output();
		// Use $this->output( $foo, $bar ); to return a string generated by the template set in init() or manually added via $widget->template( $callback );
		// Note you MUST route output through $this->output() rather than calling \IPS\Theme::i()->getTemplate() because of the way widgets are cached
	}

 

Edytowano przez TENAZ

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

a masz taki szablon stworzony? jak tworzysz plugin to w katalogu pligina/dev/html

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@Spanner no szablon jest tu

core -> front -> widgets

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

ale jak jesteś w trybie dev. to ma być w Twoim pluginie

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

No przecież pisze w trybie dev jak tworzysz plugin to plik szablonu ma być w dev/html tego pluginu

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.