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

Nie mogę wyświetlić zmiennych w szablonie.


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

Rekomendowane odpowiedzi

Opublikowano

Cześć. Mam taki kod:

 
if($this->request['do'] == "showDetails")
{
$this->showDetailsChar();
}

I potem:

 
public function showDetailsChar()
{
if($this->memberData['member_id'] == 0)
{
$this->registry->output->showError("Panel gracza dostępny jest tylko dla zalogowanych użytkowników!");
return 1;
}
$msg = array();
$do_szb = array();
$chars_pob = $this->DB->query("SELECT * FROM arp_chars WHERE guid='".$this->memberData['member_id']."' AND uid='".$this->request['uid']."'");
$zap3 = $this->DB->execute($chars_pob);
while($row1 = $this->DB->fetch($zap3))
{
$msg['nick'] = $row1['nickname'];
$msg['id'] = $row1['guid'];
}
if($this->memberData['member_id'] != $msg['id'])
{
$this->registry->output->showError("Postać nie należy do Ciebie.");
return 1;
}
$msg[] = $do_szb;
$template = $this->registry->output->getTemplate('rp')->postac($do_szb);
$this->registry->output->addContent($template);
$this->registry->output->sendOutput();
}

I na koniec szablon:

 
<div class="ipsVerticalTabbed ipsLayout ipsLayout_withleft ipsLayout_smallleft clearfix">
<div class="ipsVerticalTabbed_tabs ipsLayout_left">
<ul class="clear">
<li class="tab_toggle"><a href="index.php?app=gra&module=newsy">Aktualności</a></li>
<li class="active tab_toggle"><a href="index.php?app=gra&module=panel">Panel gracza</a></li>
</ul>
</div>
<div class="ipsVerticalTabbed_content ipsLayout_content ipsBox_container" id="modcp_content" style="min-height: 254px; ">
<div class="maintitle ipsFilterbar clear clearfix">
<ul class="ipsList_inline left">
<li class="active"><a href="#">Ogólne</a></li>
<li><a href="#">Nieruchomości</a></li>
<li><a href="#">Pojazdy</a></li>
<li><a href="#">Grupy</a></li>
<li><a href="#">Przedmioty</a></li>
</ul>  
</div>
<div class="ipsPad">
<if test="count($do_szb)">
<foreach loop="$do_szb as $row">
<h2 class="ipsType_subtitle">{$row['nick']}</h2>
</foreach>
<else />
<p class="message error">Wystąpił błąd!</p>
</if>
</div>
</div>
</div>

Tak jak napisałem w temacie, zmiennych nie wyświetla mi w szbalonie. Cały czas mam pasek "Wystąpił błąd". Zmienną na pewno mam dodaną w szablonie, nie mam zielonego pojęcia co jest nie tak.

Opublikowano
$chars_pob = $this->DB->query("SELECT * FROM arp_chars WHERE guid='".$this->memberData['member_id']."' AND uid='".$this->request['uid']."'");

Tak się wtrące. Nie wykonuj w ten sposób zapytań ( sam tak na początku robiłem ), używaj :

http://www.invisionpower.com/support/guides/_/advanced-and-developers/api-methods/kernel-databases-classdbphp-r166 ( $this->DB->build )

  • Lubię to 1

Znajdziesz mnie na LinkedIn

Opublikowano

Nie przekazuje może dlatego, że ( wydaje mi się ) powinno być w funkcji

        public function doExecute(ipsRegistry $registry)
        {

a nie twojej własnej. Ale to tylko przypuszczenia, sprawdź. :)

  • Lubię to 1

Znajdziesz mnie na LinkedIn

Opublikowano (edytowane)

Nie przekazuje może dlatego, że ( wydaje mi się ) powinno być w funkcji

        public function doExecute(ipsRegistry $registry)
        {

a nie twojej własnej. Ale to tylko przypuszczenia, sprawdź. :)

W funkcji głównej mam już wsadzone co innego. :P Ale zaraz zobaczę i powiem jak wyszło.

Edit: "Wystąpił błąd." - nic nowego.

Edytowane przez KacperK
Opublikowano

Ale w jednej sekcji używasz tylko jednego szablonu, tzn.. Możesz zrobić to if'em, bo aktualnie przesyła wartość tylko do tego pierwszego szablonu ( funkcja doExecute )

Jeżeli Ci tak zależy mieszać wszystko w jednym zamiast podzielić sekcje na sekcje to zrób if($this->request['costam'] == 'costam'){ wyswietla jeden szablon } else { drugi szablon }

Bynajmniej ja bym tak zrobił. :)

  • Lubię to 1

Znajdziesz mnie na LinkedIn

Opublikowano

Najlepiej w jednym module zrób 2 sekcje, w jednej

class public_aplikacja_modul_sekcja extends ipsCommand
{
		public function doExecute(ipsRegistry $registry)
		{
                //ciao
				/*Załadowanie contentu*/
				$this->registry->output->setTitle('Tytul');
				$this->registry->output->addNavigation('Tytul', null);
				$this->registry->output->addContent($this->registry->output->getTemplate('rp')->app($zmienne));
				$this->registry->output->sendOutput();
		}
}

I w drugiej to samo, ale zmien _sekcje na nazwę pliku .php ( np. jeżeli masz nazwa.php to sekcja będzie _nazwa ) I przesyłaj inne szablony.

  • Lubię to 1

Znajdziesz mnie na LinkedIn

Opublikowano

Najlepiej w jednym module zrób 2 sekcje, w jednej

class public_aplikacja_modul_sekcja extends ipsCommand
{
		public function doExecute(ipsRegistry $registry)
		{
                //ciao
				/*Załadowanie contentu*/
				$this->registry->output->setTitle('Tytul');
				$this->registry->output->addNavigation('Tytul', null);
				$this->registry->output->addContent($this->registry->output->getTemplate('rp')->app($zmienne));
				$this->registry->output->sendOutput();
		}
}

I w drugiej to samo, ale zmien _sekcje na nazwę pliku .php ( np. jeżeli masz nazwa.php to sekcja będzie _nazwa ) I przesyłaj inne szablony.

Zrobiłem jak radzisz, przekopiowałem kod z mojej funkcji do nowego pliku (zmieniłem nazwę według Twoich wskazówek) ale nadal mam tą samą wiadomość co wcześniej. :/

Opublikowano

details.php

 
<?php
class public_gra_panel_details extends ipsCommand
{
public function doExecute( ipsRegistry $registry )
{
if($this->memberData['member_id'] == 0)
{
$this->registry->output->showError("Panel gracza dostępny jest tylko dla zalogowanych użytkowników!");
return 1;
}
$chars_pob = $this->DB->query("SELECT * FROM arp_chars WHERE guid='".$this->memberData['member_id']."' AND uid='".$this->request['uid']."'");
$zap3 = $this->DB->execute($chars_pob);
while($row1 = $this->DB->fetch($zap3))
{
$msg['nick'] = $row1['nickname'];
$msg['id'] = $row1['guid'];
}
if($this->memberData['member_id'] != $msg['id'])
{
$this->registry->output->showError("Postać nie należy do Ciebie.");
return 1;
}
$msg[] = $do_szb;
$template = $this->registry->output->getTemplate('rp')->postac($do_szb);
$this->registry->output->addContent($template);
$this->registry->output->sendOutput();
}
}

Link:

<a href="index.php?app=gra&module=panel&section=details&uid='.$row['uid'].'">'.str_replace("_", " ", $row['nickname']).'<a>
 

http://i.imgur.com/maDzf7L.png

Oraz szalbon:

 
<div class="ipsVerticalTabbed ipsLayout ipsLayout_withleft ipsLayout_smallleft clearfix">
<div class="ipsVerticalTabbed_tabs ipsLayout_left">
<ul class="clear">
<li class="tab_toggle"><a href="index.php?app=gra&module=newsy">Aktualności</a></li>
<li class="active tab_toggle"><a href="index.php?app=gra&module=panel">Panel gracza</a></li>
</ul>
</div>
<div class="ipsVerticalTabbed_content ipsLayout_content ipsBox_container" id="modcp_content" style="min-height: 254px; ">
<div class="maintitle ipsFilterbar clear clearfix">
<ul class="ipsList_inline left">
<li class="active"><a href="#">Ogólne</a></li>
<li><a href="#">Nieruchomości</a></li>
<li><a href="#">Pojazdy</a></li>
<li><a href="#">Grupy</a></li>
<li><a href="#">Przedmioty</a></li>
</ul>  
</div>
<div class="ipsPad">
<if test="count($do_szb)">
<foreach loop="$do_szb as $row">
<h2 class="ipsType_subtitle">{$row['nick']}</h2>
</foreach>
<else />
<p class="message error">Wystąpił błąd!</p>
</if>
</div>
</div>
</div>
  • Rozwiązanie
Opublikowano (edytowane)

Spróbuj

<?php
class public_gra_panel_details extends ipsCommand
{
	public function doExecute( ipsRegistry $registry )
	{
		if($this->memberData['member_id'] == 0)
		{
			$this->registry->output->showError("Panel gracza dostępny jest tylko dla zalogowanych użytkowników!");
		}
		$chars_pob = $this->DB->query("SELECT * FROM arp_chars WHERE guid='".$this->memberData['member_id']."' AND uid='".$this->request['uid']."'");
		$zap3 = $this->DB->execute($chars_pob);
                $do_szb = array();
		while($row1 = $this->DB->fetch($zap3))
		{
			$do_szb[] = $row1;
		}
		if($this->memberData['member_id'] != $row1['id'])
		{
			$this->registry->output->showError("Postać nie należy do Ciebie.");
		}
		$this->registry->output->addContent($this->registry->output->getTemplate('rp')->postac($do_szb));
		$this->registry->output->sendOutput();
	}
}

Tylko zmień w szablonie [guid'] na id itd, bo nie wiem po co to przypisujesz do kolejnej tablicy?

 

I nie dziw się, że $do_szb nic nie przekazuje, skoro ty definiowałeś $msg = $do_szb, a nie $do_szb = msg, czyli $msg było twoją tablicą ( która była pusta, bo $do_szb nie było nigdzie zdefiniowane ).

Edytowane przez TeeZ
  • Lubię to 1

Znajdziesz mnie na LinkedIn

Opublikowano

Spróbuj

<?php
class public_gra_panel_details extends ipsCommand
{
	public function doExecute( ipsRegistry $registry )
	{
		if($this->memberData['member_id'] == 0)
		{
			$this->registry->output->showError("Panel gracza dostępny jest tylko dla zalogowanych użytkowników!");
		}
		$chars_pob = $this->DB->query("SELECT * FROM arp_chars WHERE guid='".$this->memberData['member_id']."' AND uid='".$this->request['uid']."'");
		$zap3 = $this->DB->execute($chars_pob);
                $do_szb = array();
		while($row1 = $this->DB->fetch($zap3))
		{
			$do_szb[] = $row1;
		}
		if($this->memberData['member_id'] != $row1['id'])
		{
			$this->registry->output->showError("Postać nie należy do Ciebie.");
		}
		$this->registry->output->addContent($this->registry->output->getTemplate('rp')->postac($do_szb));
		$this->registry->output->sendOutput();
	}
}

Tylko zmień w szablonie [guid'] na id itd, bo nie wiem po co to przypisujesz do kolejnej tablicy?

 

I nie dziw się, że $do_szb nic nie przekazuje, skoro ty definiowałeś $msg = $do_szb, a nie $do_szb = msg, czyli $msg było twoją tablicą ( która była pusta, bo $do_szb nie było nigdzie zdefiniowane ).

Wielkie dzięki, wszystko śmiga jak należy.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • 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ę.