Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Powtarzające się ID URL w $table-rowbuttons (profil)


Przejdź do rozwiązania Rozwiązane przez DawPi,

Rekomendowane odpowiedzi

Cześć,

mam pewien problem z utworzeniem okna modalnego w $table->rowButtons

 

 'link' => \IPS\Http\Url::internal('app=core&module=members&controller=profile&id=1&tab=abc123&do=item&=id'.$row['id']),

Z tym, że właśnie w profilu jest już jedno pole ID, które wyszukuje użytkownika, czy jest jakieś obejście tego?

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

No istnieje, zmienić to ID na inną nazwę.

Co Ty chcesz osiągnąć, bo nie bardzo rozumiem ten kod co podałeś.

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

Mam przycisk w rowButton:

            $return['view'] = [
                'icon' => 'search',
				'title'	=> '',
				'class'		=> 'ipsButton ipsButton_light ipsButton_verySmall ipsButton_narrow',
                 'link' => \IPS\Http\Url::internal('app=core&module=members&controller=profile&id=1&tab=abc123&do=item&id='.$row['id']),
				'data'	=> [  'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('abc123')', 'ipsDialog-modal' => 'FALSE', 'ipsDialog-forceReload' => 'TRUE' ]
            ];

oraz funkcje:

	protected function item()
    {
		\IPS\Output::i()->output = 'test';
    }

I chciałbym, aby w tab profilu, który utworzyłem po wciśnięciu tego przycisku wyświetliła się funkcja item, czyli dajmy na test teraz napis 'test'.

Odnośnik do komentarza
Udostępnij na innych stronach

public function render(): string
    {
        $id = \IPS\Request::i()->id;
        $table = new \IPS\Helpers\Table\Db( 'abc', \IPS\Http\Url::internal( 'app=core&module=members&controller=profile&id='.$id.'&tab=abc123' ), ['member_id=?', $id]);
        $table->include = array( 'a1', 'b1', 'c1' );
        $table->sortBy = $table->sortBy ?: 'a1';
        $table->noSort= array( 'c1', 'b1' );
        $table->tableTemplate  = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin' ), 'table' );
        $table->rowsTemplate  = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin' ), 'rows' );

        $table->rowButtons = function ($row) {
            $id = \IPS\Request::i()->id;
            $return = [];
            $return['view'] = [
                'icon' => 'search',
				'title'	=> '',
				'class'		=> 'ipsButton ipsButton_light ipsButton_verySmall ipsButton_narrow',
                 'link' => \IPS\Http\Url::internal('app=core&module=members&controller=profile&id=1&tab=abc123&do=item&id='.$row['id']),
				'data'	=> [   'ipsDialog' => $row['id'], 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('abc123')', 'ipsDialog-modal' => 'FALSE', 'ipsDialog-forceReload' => 'TRUE' ]
            ];


            return $return;
        };

       
        $1 = \IPS\Member::loggedIn()->language()->addToStack('abc');
        return '<h2 class="ipsType_pageTitle" style="margin-bottom: 15px;">'.$1.'</h2>'.$table;
    }
	protected function item()
    {
		\IPS\Output::i()->output = 'test';
    }

 

 
Edytowane przez inzonek
Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Nie prościej zamiast tego do=item dodać warunek w render jak jest zmienna itemId to wyświetlić wtedy coś innego? :)

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
15 godzin temu, inzonek napisał(a):
&tab=abc123

Co to jest to abc123? Tam masz to dodać w formie "&tab=node_kluczaplikacji".

Spróbuj.

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

Udało się mi zachować pole id i nie zmieniać wartości:

'link' => $this->member->url()->setQueryString( array( 'tab' => 'node_abc123', 'do' => 'item2', 'id' => $row['id'] ) ),

 


	public function item2()
    {
		return 'test';
    }

Ale znów jest inny błąd po kliknięciu w button:

We could not locate the item you are trying to view.

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
Godzinę temu, inzonek napisał(a):

Udało się mi zachować pole id i nie zmieniać wartości:

A co tym drugim ID jest? Też ID usera?

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

W dniu 14.06.2024 o 19:14, DawPi napisał(a):

A co tym drugim ID jest? Też ID usera?

Drugim ID jest id pobrane z SQL w utworzonej bazie przez te aplikację. 

Czyli tabela pobiera wszystkie wiersze z tym użytkownikiem, którego przeglądamy profil oraz przez rowbutton będzie można wejść tak jakby w szczegóły danego wiersza.

 

Niestety dopiero za tydzień będę mógł przesłać.

Edytowane przez inzonek
Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

No ale te ID są różne? W sensie mają różne wartości? Czy to po prostu ID przeglądanego użytkownika?

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

Tak mają różne, pierwsze ID to profil usera, a drugie to ID wiersza w tabeli utworzonej w aplikacji z zapytaniem where id == m_id (gdzie m_id to ID usera, którego przeglądamy profil).

Czyli pierwsze ID to może być 1 (pierwszy użytkownik zarejestrowany) i drugie 23 (23 wiersz w tej tabeli).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

To dlaczego do jasnej ciasnej nie zmienisz tego drugiego ID na coś innego jak sugerowałem? Zmień bo trzeba to zrobić!

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Ok, popatrzyłem trochę w kod i możliwości i jedynym prostym sposobem jest to, co napisałem:

W dniu 13.06.2024 o 22:35, DawPi napisał(a):

Nie prościej zamiast tego do=item dodać warunek w render jak jest zmienna itemId to wyświetlić wtedy coś innego? :)

 

Wyglądałoby to tak:

	/**
	 * Display
	 *
	 * @return	string
	 */
	public function render(): string
	{
        if( isset( \IPS\Request::i()->itemId ) && \IPS\Request::i()->itemId )
        {
            return 'zonk!';
        }
        
        return 'test';
	}

 

Efekt bez itemId:

image.png

 

I z:

image.png

 

W extensions profile nie zastosujemy nowych metod z node, tylko render():

			elseif ( mb_substr( $tab, 0, 5 ) == 'node_' )
			{
				$type = mb_substr( $tab, 5 );
				$tabContents = (string) $nodes[ $type ]->render();
			}

 

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
Udostępnij na innych stronach

Okej, dzięki bardzo

A jakby było jak chciałbym to wykorzystać w rowbuttons w oknie modalnym, czyli po kliknięciu w ten button pojawia się dopiero zawartość??

 

        $table->rowButtons = function ($row) {
            $id = \IPS\Request::i()->id;
            $return = [];
            $return['view'] = [
                'icon' => 'search',
				'title'	=> '',
				'class'		=> 'ipsButton ipsButton_light ipsButton_verySmall ipsButton_narrow',
                 'link' => \IPS\Http\Url::internal('&tab=abc123&itemId='.$row['id']),
				'data'	=> [   'ipsDialog' => $row['id'], 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('abc123')', 'ipsDialog-modal' => 'FALSE', 'ipsDialog-forceReload' => 'TRUE' ]
            ];


            return $return;
        }

 

Edytowane przez inzonek
Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
  • Rozwiązanie

 Zrobiłeś? Chodziło mi o:

namespace IPS\core\modules\front\members;

/* To prevent PHP errors (extending class does not exist) revealing path */

use IPS\Member;

if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * Profile
 */
class _profile extends \IPS\Helpers\CoverPhoto\Controller
{

A potem prosty URL:

$this->member->url()->setQueryString( 'do', 'twojaNazwaMetody' )

 

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Odnośnik do komentarza
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ę.