Skocz do zawartości

Hosting dHosting.pl - 10% rabat!

Sebaa

Wstawienie value do input

Rekomendowane odpowiedzi

Cześć, próbuję wstawić wartość z geta do inputa jako value w formularzu który dodaje rekordy do bazy czyli jeżeli jest wartość get to dopisuje ją do danego inputa jako value. Wyczytałem, że jedyny sposób żeby tego dokonać to zrobienie hooka, a niestety nie robiłem tego nigdy wcześniej. Odpaliłem dev mod, stworzyłem hooka i nie wiem co dalej.

 

Jaką klasę powinienem rozszerzyć przy tworzeniu hooka? Jakiej metody użyć? Jak mogę się odwołać do tego konkretnego formularza lub inputa? A może jest łatwiejszy sposób niż zrobienie hooka?

 

A to mój input do którego chcę wcisnąć value z GETa:

<input type="hidden" name="content_field_124_values" value="">

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam formularz, który stworzył się automatycznie po dodaniu bazy na stronę. Chciałbym żeby automatyczne wypełniał jednego inputa gdy w get jest jakaś wartość, musi ona trafić do value inputa. Nie wiem jak złapać tego konkretnego inputa i wstawić do niego wartość z GET. Dodam, że input jest type="hidden".

 

Przy tworzeniu pluginu rozszerzam klasę \IPS\cms\Records, próbowałem w sposób jak niżej. Docelowo zamiast '123' miałaby być wartość z GET.

 

//<?php

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

class hook66 extends _HOOK_CLASS_
{

  /**
     * Get elements for add/edit form
     *
     * @param \IPS\Content\Item|NULL $item The current item if editing or NULL if creating
     * @param \IPS\Node\Model|NULL $container Container (e.g. forum), if appropriate
     * @return array
     */

      public static function formElements( $item = 'content_field_124', \IPS\Node\Model $container = null )
      {
          if(static::$customDatabaseId == 111) {
            
          $form = new \IPS\Helpers\Form;
          $form->hiddenValues[ 'content_field_124' ] = '123';
           
          }
      }
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Robisz to w aplikacji cms?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
13 minut temu, BitGit napisał:

Robisz to w aplikacji cms? 

 

Tak mi się wydaje :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Okej. Może dla ułatwienia napisz co chcesz osiągnąć finalnie.

1. Masz formularz, który zawiera jakieś pola do wypełnienia?

2. Po wypełnieniu formularza wartości wpisane w powyższe pola mają pojawić się gdzie - w artykule? 

3. Działałeś z opcjami bazy: "Pola"?

Edytowane przez BitGit

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam formularz, który zawiera parę inputów. Chcę do jednego z nich umieścić wartość podaną z get, żeby był od razu wypełniony po kliknięciu w link kierujący do formularza. Jeden input ma być od razu wypełniony danymi z geta.

 

Innymi słowy, chcę żeby po kliknięciu w link kierujący do formularza, jedno pole było już wypełnione automatycznie tym co sobie podam w GET w linku. Chcę tylko do danego inputa podać value = wartość z GET.

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Nie wiem czy do końca Cię rozumiem, wartość GET miałaby być zmienna czy stała? 

Jeśli ma być to stała to podrzucam wzór definiowania domyślnej wartości input na przykładzie Pola bazy danych. W tym przypadku jest to Cena.

 

Definiowanie pola

575876505_Zrzutekranu2019-02-11o09_31_22.thumb.png.c869f4aa134fa92f1a34d33a343f7b46.png

 

Formularz

455041412_Zrzutekranu2019-02-11o09_31_44.thumb.png.c57c8160c3b21419bb26b970f49f1202.png

 

Możesz wybrać rodzaj pola jako wierz z tekstem lub inne. Ponadto możesz zablokować możliość edycji zawartości pola przez użytkownika. 

 

Edytowane przez BitGit
  • Lubię to 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

A może przyda się na przyszłość :)

 

Wartość z geta ma być zależna z którego miejsca na stronie klikniemy w link. Jest to dodawanie opinii. Przy przeglądaniu danego modelu i po kliknięciu w link formularza dodania opinii chciałbym żeby automatycznie wpisywało dany model (czyli wartość którą umieszczę sobie w linku w GET) do inputa "nazwa". Z tego co patrzyłem nie da się tego zrobić poziomu edycji bazy, ani przy edycji szablonu formularza. Doczytałem, że jedyne wyjście to hook.

Edytowane przez Sebaa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
<input type="hidden" name="content_field_359_values" value="">
<input
	type="text"
	name="content_field_359"
	value=""
	id="elInput_content_field_359"
	data-ipsContentItem
	data-ipsContentItem-maxItems="1"
	data-ipsContentItem-dataSource="https://www.audiostereo.pl/nowa_opinia_cd.html/?do=form&amp;d=26&amp;_itemSelectName=content_field_359"
	data-ipsContentItem-minAjaxLength="3"
>

Do tych dwóch potrzebuję wstawić wartość z GET. Są one ze sobą powiązane, w tym niżej wybiera się coś z podpowiedzi i dopiero ta wartość trafia do pola hidden. Nie przejdzie dalej jak nie wybierze się nic z listy. Chciałbym jakoś złapać te dwa inputy i wpisać do ich value wartość z GETa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Docelowo do tego formularza miałby być odnośnik w różnych miejscach na forum z różną wartością w GET (zależną od miejsca w którym klikniemy w link) i chcę zrobić warunek jeżeli jest jakaś wartość GET to wpada ona do value tych dwóch inputów (dwie różne wartości).

 

https://www.audiostereo.pl/opinie_sprzet.html/?do=form&d=10

 

Zrobiłem konto na szybko: TestPi qwe123

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Robisz rozszerzenie do: applications/cms/sources/Records/Records.php

    /**
     * Get elements for add/edit form
     *
     * @param    \IPS\Content\Item|NULL    $item        The current item if editing or NULL if creating
     * @param    \IPS\Node\Model|NULL    $container    Container (e.g. forum), if appropriate
     * @return    array
     */
    public static function formElements( $item=NULL, \IPS\Node\Model $container=NULL )
    {

Ta metoda zwraca $formElements, więc dla zwróconej wartości przed przekazaniem jej dalej dajesz tak jak niżej. Przykładowe dwa pola o ID 3 i 4:

2019-02-12_16-04-09.png

 

Kod z testów (na sztywno ww. pliku, ale Ty zrób Plugin):

		if ( \count( $options ) or \count( $toggles ) )
		{
			$formElements['create_record_state'] = new \IPS\Helpers\Form\CheckboxSet( 'create_record_state', $values, FALSE, array(
					'options' 	=> $options,
					'toggles'	=> $toggles,
					'multiple'	=> TRUE
			) );
		}
        
        #elInput_content_field_3
        #elInput_content_field_4
		
        $formElements['field_3']->value = isset( \IPS\Request::i()->ocena ) ? \IPS\Request::i()->ocena : NULL;
        $formElements['field_4']->value = isset( \IPS\Request::i()->poziom ) ? \IPS\Request::i()->poziom : NULL;
        
        return $formElements;
	}

 

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
//<?php

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

class hook72 extends _HOOK_CLASS_
{
	/**
     * Get elements for add/edit form
     *
     * @param \IPS\Content\Item|NULL $item The current item if editing or NULL if creating
     * @param \IPS\Node\Model|NULL $container Container (e.g. forum), if appropriate
     * @return array
     */
	public static function formElements( $item=NULL, \IPS\Node\Model $container=NULL )
	{
      
		if ( \count( $options ) or \count( $toggles ) )
		{
			$formElements['create_record_state'] = new \IPS\Helpers\Form\CheckboxSet( 'create_record_state', $values, FALSE, array(
					'options' 	=> $options,
					'toggles'	=> $toggles,
					'multiple'	=> TRUE
			) );
		}
        
        $formElements['field_124']->value = isset( \IPS\Request::i()->pole ) ? \IPS\Request::i()->pole : NULL;
       	
        return $formElements;

	}
}

 

Niestety nie działa mi to, przy kliknięciu w link formularza wywala błąd:

 

image.thumb.png.fad0c4aaee7e6070339518a91a30441b.png

 

Przy tworzeniu hooka rozszerzam klasę: \IPS\cms\Records. U mnie te pola input są dziwne, podzielona na parę innych. Część z nich ukryta. Niżej screen jak to wygląda, do tych dwóch inputów potrzebuję wstawić dwie różne wartości.

 

ahaa.thumb.jpg.4624617d3008cf0b1b74562e3f4ba038.jpg

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dlaczego korzystasz z niezdefiniowanej zmiennej $options?

public static function formElements( $item=NULL, \IPS\Node\Model $container=NULL )
	{
      
		if ( \count( $options ) or \count( $toggles ) )
		{

 


intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
public static function formElements( $item=NULL, \IPS\Node\Model $container=NULL )
	{
 		$options = array();
		$toggles = array();
		$values  = array();
      
		if ( \count( $options ) or \count( $toggles ) )

 

A tak, zdefiniowałem zmienne. Niestety dalej wywala błąd:

 

image.thumb.png.97c7422422b5b5ca4215c967b1a67f78.png

 

Jakieś wartości powinienem tam wpisać?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie wiem co masz na myśli. Napisałeś że u Ciebie działa to napisałem tak samo jak Ty. Wklejam cały kod:

 

//<?php

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

class hook73 extends _HOOK_CLASS_
{
	/**
     * Get elements for add/edit form
     *
     * @param \IPS\Content\Item|NULL $item The current item if editing or NULL if creating
     * @param \IPS\Node\Model|NULL $container Container (e.g. forum), if appropriate
     * @return array
     */
	public static function formElements( $item=NULL, \IPS\Node\Model $container=NULL )
	{
 		$options = array();
		$toggles = array();

      
		if ( \count( $options ) or \count( $toggles ) )
		{
			$formElements['create_record_state'] = new \IPS\Helpers\Form\CheckboxSet( 'create_record_state', $values, FALSE, array(
					'options' 	=> $options,
					'toggles'	=> $toggles,
					'multiple'	=> TRUE
			) );
		}
        
        $formElements['field_124']->value = isset( \IPS\Request::i()->pole ) ? \IPS\Request::i()->pole : NULL;
       	
        return $formElements;

	}
}

 

image.png.678031a4127fe4292e021c6b13eb4169.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 12.02.2019 o 16:05, DawPi napisał:

Kod z testów (na sztywno ww. pliku, ale Ty zrób Plugin):


intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
5 minut temu, DawPi napisał:

 

 

A to jak mam odpalony tryb deva, wybieram z menu plugins, tworzę nowy i klikam create hook to nie robię pluginu?

 

image.thumb.png.8f65c7137ed66e4652b8d7898c789419.png

image.thumb.png.32095782f1779fe6818e66751c7957df.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

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

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.