Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam, jak rozbudować to zapytanie w modyfikacji (SOS30) View Reputation Points v1.0.0 aby wyciągało jeszcze dane z reputation_index => rep_msg , czyli konkretnie o połączenie modyfikacji [AH30] Reputation v1.0.2 z (SOS30) View Reputation Points v1.0.0.

		$this->DB->build( array( 'select' => 'r.*',
							 'from' 	=> array( 'reputation_index' => 'r' ),
							 'where'	=> 'r.type_id=' . intval( $this->request['p'] ) . $where,
							 'order'	=> 'r.rep_date desc',
							 'add_join'	=> array(
												array(
														'select'	=> 'm.members_display_name, m.members_seo_name, m.member_group_id',
														'from'		=> array( 'members' => 'm' ),
														'where'		=> 'm.member_id=r.member_id',
														'type'		=> 'left',
													 )

												 )
	) );

		$this->DB->execute();

Nie potrafię budować jeszcze zapytań w IPB, więc proszę o pomoc. :D

Opublikowano (edytowane)

Witam, jak rozbudować to zapytanie w modyfikacji (SOS30) View Reputation Points v1.0.0 aby wyciągało jeszcze dane z reputation_index => rep_msg , czyli konkretnie o połączenie modyfikacji [AH30] Reputation v1.0.2 z (SOS30) View Reputation Points v1.0.0.

		$this->DB->build( array( 'select' => 'r.*',
					 'from' 	=> array( 'reputation_index' => 'r' ),
					 'where'	=> 'r.type_id=' . intval( $this->request['p'] ) . $where,
					 'order'	=> 'r.rep_date desc',
					 'add_join'	=> array(
												array(
														'select'	=> 'm.members_display_name, m.members_seo_name, m.member_group_id',
														'from'		=> array( 'members' => 'm' ),
														'where'		=> 'm.member_id=r.member_id',
														'type'		=> 'left',
											 )

										 )
	) );

		$this->DB->execute();

Nie potrafię budować jeszcze zapytań w IPB, więc proszę o pomoc. :D

Witaj,

Tak na start Ci powiem, że dziwnie to zrobiłeś - funkcji intval() się powinno używać przed zapytaniem, a powodem jest fakt, że intval() sprawdza zmienną pod kątem integer, czyli liczby całkowitej. Potem można sprawdzić czy ta zmienna w ogóle należy do zbioru liczb całkowitych, ale technikę programowania zostawiam Tobie :-)

Budowa zapytania poprawna - powinno działać. I skoro chcesz wyciągnąć rep_msg, to przecież te dane powinieneś mieć. Sprawdź dokładnie funkcją print_r();

* oznacza, że pobierze wszystkie dane z danej tabeli, a skoro Ty chcesz otrzymać rep_msg z tabeli reputation_index to powinieneś je mieć!

Jeżeli nie o to Ci chodzi to opiszę Ci schemat IP.Board:

$this->DB->build - budujesz zapytanie, które ma zwrócić wiele rekordów. Opcjami dodatkowymi są:

  • select
    • Wybierasz, które dane chcesz wyciągnąć. * oznacza, że chcesz pobrać wszystkie elementy z tabeli.

    [*]from

    • Deklarujesz informację z której tabeli korzystasz. W przypadku dodania klauzuli add_join musisz stworzyć tablicę z 1 rekordem, składającym się z dwóch danych:
      • nazwę tabeli jako string bez prefix
      • literka, dotyczące aliasu tabeli

    [*]where

    • Warunki, które musi wykonać zapytanie MySQL lub inny sterownik baz danych. O warunkach poczytaj na oficjalnych stronach sterowników baz danych.

    [*]add_join

    • Deklarujesz tablicę numeryczną lub kolejne tablice i tworzysz normalnie zapytanie, ale z warunkiem where, który musi składać z kluczy, które połączą rekordy. Przykładem jest ibf_members.member_group_id i ibf_groups.g_id, ponieważ mają te same wartości i się odwołują do tych samych danych. Dodatkiem jest deklaracja typu zapytania, możliwe to:
      • left
      • inner
      • right

    [*]limit

    • Wymuszasz na bazie danych ile rekordów ma zostać pobranych. W IP.Board musisz stworzyć tablicę, która składa się w ten sposób:
      • start, od którego rekordu ma zacząć pobieranie baza danych.
      • ile baza ma pobrać danych.

    [*]order

    • Oznacza typ sortowania, składa się ze stringu i musi posiadać minimum 2 parametry. Nazwę pola do sortowania i typ, możliwe to:
      • desc
      • asc

    [*]group

    • Grupowanie zapytań to już średnia szkoła jazdy. Przykładem jest fakt, że potrzebujesz ile postów napisany w danym forum i w tej sytuacji używasz grupowania. Wymaganym parametrem jest nazwa pola po którym grupujemy - może być ich więcej niż jedna, ale każda kolejna ma mniejszy priorytet.

Mam nadzieję, że Ci pomogłem, jak nie, napisz dokładnie w czym masz problem i Ci pomogę! :-)

Pozdrawiam,

Largo

Edytowane przez Largo
  • Lubię to 1

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Opublikowano

Dzięki, jeszcze nic w tym kodzie nie zmieniałem, dałem dokładnie taki jaki autor podał w swojej modyfikacji. Bardzo dziękuje za wytłumaczenie, zobaczę co da się z tym zrobić.

Opublikowano

Dzięki, jeszcze nic w tym kodzie nie zmieniałem, dałem dokładnie taki jaki autor podał w swojej modyfikacji. Bardzo dziękuje za wytłumaczenie, zobaczę co da się z tym zrobić.

Według zapytania, rep_msg jest pobierane. Sprawdź to w kodzie używając funkcji print_r().

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Opublikowano (edytowane)

Dzięki, poradziłem sobie. Zostały mi 2 kwestie, w tym jedna czysto estetyczna:

1) Jak na załączonym screenie, wiadomość gdy nie ma dodanych żadnych punktów nie jest napisana również w nowym polu. Kod, w którym uważam tkwi problem:

$this->DB->build( array( 'select' => 'r.*',
 	from'		=> array( 'reputation_index' => 'r' ),
 	'where'	=> 'r.type_id=' . intval( $this->request['p'] ) . $where,
 	'order'	=> 'r.rep_date desc',
 	'add_join'	=> array(
						 	array(
										 'select'	=> 'm.members_display_name, m.members_seo_name, m.member_group_id',
												'from'		=> array( 'members' => 'm' ),
										 	'where'		=> 'm.member_id=r.member_id',
										 	'type'		=> 'left',
										 )
								 )
	) );

	$this->DB->execute();

	if ( $this->DB->getTotalRows() )
	{
 while ( $r = $this->DB->fetch() )
	{
	$points[ $r['member_id'] ] = $r;
	}
}

	$this->returnHtml( $registry->output->getTemplate('topic')->repGiven( $points ) );
}
}

Oraz to co dodaje to styli:

<table class='ipb_table'>
<tr class='header'>
	<th width='10%'>{$this->lang->words['showrep_tipo']}</th>
	<th width='20%'>{$this->lang->words['showrep_usuario']}</th>
	<th width='20%'>{$this->lang->words['showrep_data']}</th>
	<th width='60%'>{$this->lang->words['showrep_msg']}</th>
</tr>
<if test="hasPosters:|:count($points) AND is_array($points)">
	{parse striping="whoposted" classes="row1,row2"}
	<foreach loop="whoposted:$points as $row">
		<tr class='{parse striping="whoposted"}'>
			<td><if test="$row['rep_rating'] == '-1'">
{parse replacement="rep_down"}
<else />
{parse replacement="rep_up"}
</if>
</td>
			<td class="altrow">
			{IPSLib::makeProfileLink(IPSLib::makeNameFormatted( $row['members_display_name'], $row['member_group_id']), $row['member_id'])} {parse template="user_popup" group="global" params="$row['member_id'],$row['members_display_name']"}
			</td>
			<td>{parse date="$row['rep_date']" format="short"}</td>
			<td>'{$row['rep_msg']}'</td>
		</tr>
	</foreach>
<else />
		<tr class='{parse striping="whoposted"}'>
			<td colspan='3'><em>{$this->lang->words['showrep_nothing']}</em></td>
		</tr>
</if>
</table>

Dodałem nową komórkę "<td>'{$row['rep_msg']}'</td>" chociaż możliwe że w zły sposób. =) Gdzieś zapewne czegoś nie dodałem, stąd taki efekt.

2) Chciałbym by treść oceny nie była skracana do tylko tylu znaków. Nie wiem gdzie szukać czegoś takiego, może ktoś ma chociaż mgliste pojęcie?

post-213-1269370657,4355_thumb.png

post-213-1269370667,4962_thumb.png

Edytowane przez Dr R.I.P
Opublikowano (edytowane)

Ad2. Nieaktualne - gafa. :D

Witaj,

Kolego, HTML się kłania :-) Styl colspan określa ile komórek będzie zawierała cała tabela. Zmień colspan na 4, ponieważ masz 4 komórki tabeli. Poprzez tą operację tabela powinna zostać wyśrodkowana i dodaj klasę short, aby to wykonać wg, standardów CSS wykonanych przez programistów IPS. W jaki sposób? Oto cały, poprawiony kod:

<table class='ipb_table'>
	<tr class='header'>
	<th width='10%'>{$this->lang->words['showrep_tipo']}</th>
	<th width='20%'>{$this->lang->words['showrep_usuario']}</th>
	<th width='20%'>{$this->lang->words['showrep_data']}</th>
	<th width='60%'>{$this->lang->words['showrep_msg']}</th>
	</tr>
	<if test="hasPosters:|:count($points) AND is_array($points)">
	{parse striping="whoposted" classes="row1,row2"}
	<foreach loop="whoposted:$points as $row">
	<tr class='{parse striping="whoposted"}'>
	<td><if test="$row['rep_rating'] == '-1'">
{parse replacement="rep_down"}
<else />
{parse replacement="rep_up"}
</if>
</td>
	<td class="altrow">
	{IPSLib::makeProfileLink(IPSLib::makeNameFormatted( $row['members_display_name'], $row['member_group_id']), $row['member_id'])} {parse template="user_popup" group="global" params="$row['member_id'],$row['members_display_name']"}
	</td>
	<td>{parse date="$row['rep_date']" format="short"}</td>
	<td>'{$row['rep_msg']}'</td>
	</tr>
	</foreach>
	<else />
	<tr class='{parse striping="whoposted"}'>
	<td class='short' colspan='4'><em>{$this->lang->words['showrep_nothing']}</em></td>
	</tr>
	</if>
</table>

Życzę powodzenia w nauce PHP, HTML i CSS, a także poznawanie IP.Board :-)

Pozdrawiam,

Largo

Edytowane przez Largo
  • Lubię to 1

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

  • Manager
Opublikowano

Problem ROZWIĄZANY. Jeśli są jakiekolwiek wątpliwości, pytania proszę o założenie nowego tematu.

Wszelkie uzasadnione reklamacje/pretensje/sugestie/rady przyjmuje ekipa forum.

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

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