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

Opublikowano

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?

 

Opublikowano

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'.

Opublikowano (edytowane)
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
Opublikowano

Właśnie tym sposobem co podałem jakoś łatwiej i bardziej to rozumiem niż ten przykład co Ty podałeś.

Robiłem już tak w innej apce, ale nie w profilu a tu to się jakoś gryzie ze sobą 

Opublikowano

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.

 

Opublikowano (edytowane)
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
Opublikowano

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).

  • Manager
Opublikowano

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.

Opublikowano (edytowane)

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
  • Manager
  • Rozwiązanie
Opublikowano

 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.

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ę.