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

Niedziałająca paginacja


Sebaa

Rekomendowane odpowiedzi

Cześć, dodałem do szablonu recordRow warunek, że jak jestem na konkretnej stronie to ma sprawdzać czy ogłoszenie jest oznaczone w bazie jako archiwalne. Samo wyświetlanie działa poprawnie, ale niestety paginacja pokazuje cały czas całkowitą ilość ogłoszeń i większość stron w paginacji jest pusta. Bardzo proszę o podpowiedź jak mogę rozwiązać ten problem.

Odnośnik do komentarza
Udostępnij na innych stronach

Dodałem na jedną ze stron bazę {database="xxx"} i paginacja wygenerowała się automatycznie. W szablonie recordRow stworzyłem warunek, że jak jest ta baza to ma pokazywać tylko dane które nie są oznaczone jako archiwum. Dlatego zmniejszyła mi się ilość stron do wyświetlenia ale paginacja dalej pokazuje całkowitą wartość.

 

Pojawił mi się też drugi problem, próbowałem dodać dwie bazy na stronę. Po zapisaniu wyskoczył błąd ale niestety zmiany się zapisały i mam na stronie dwie tabele. Nie mogę tego cofnąć bo przy każdej próbie zapisania wyskakuje komunikat ale już nie zapamiętuje zmian. Można to jakoś zresetować, wyłączyć na chwilę bazy czy zostaje usunąć stronę i stworzyć od nowa?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
Godzinę temu, Sebaa napisał:

W szablonie recordRow stworzyłem warunek, że jak jest ta baza to ma pokazywać tylko dane które nie są oznaczone jako archiwum. Dlatego zmniejszyła mi się ilość stron do wyświetlenia ale paginacja dalej pokazuje całkowitą wartość.

No właśnie, tak tego nie zrobisz. Paginacja przelicza (w plikach forum) całkowitą ilość wpisów, a potem dzieli na strony jeśli konieczne.

Zabierz się od tego od strony plików - ostrzegam, będzie trudno. :)

 

Godzinę temu, Sebaa napisał:

Pojawił mi się też drugi problem, próbowałem dodać dwie bazy na stronę. Po zapisaniu wyskoczył błąd ale niestety zmiany się zapisały i mam na stronie dwie tabele. Nie mogę tego cofnąć bo przy każdej próbie zapisania wyskakuje komunikat ale już nie zapamiętuje zmian. Można to jakoś zresetować, wyłączyć na chwilę bazy czy zostaje usunąć stronę i stworzyć od nowa?

Trudno na tej podstawie coś poradzić innego jak usunięcie i postawienie od nowa - lub po prostu dodać nową stronę.

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

A jak w bloku zrobię sobie pobieranie danych z bazy to mogę jakoś do tego dodać paginację? np jakoś zmienić poniższy kod żeby obsługiwał mi moje zapytanie z bazy i moje wyświetlanie tabeli? Jakkolwiek dodać paginację do własnej tabeli?

 

{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Definiujesz limit i jak będzie więcej pozycji na stronę niż wspomniany limit to się "samo paginuje":

	/**
	 * @brief	Number of records to show
	 */
	public $limit = 25;

 

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 ustawiony taki limit w Table.php i niestety nic to nie daje. Robię nowy blok typu wtyczka, wybieram kanał danej bazy i ustawiam limit do wyświetlenia na 99. Inny sposób którym robię to blok z kodem html, który łączy się z bazą i wyciąga dane (\IPS\Db::i()->select('*', 'nazwa_bazy') i generuje sobie tabelę w foreach. W obu przypadkach ilość wyświetlanych danych jest znacznie większa niż ustawiony limit. Czy czegoś nie dodaję do kodu? Trzeba tam jakoś wcisnąć kod odpowiadający za wygenerowanie paginacji?

Odnośnik do komentarza
Udostępnij na innych stronach

Przy tworzeniu bloku z kanałem bazy nie ma możliwości integrowania w kod, a w tym przypadku paginacja także się nie wyświetla. Wklejam kod bloku który wyświetla mi tabelę pobraną z bazy:

 

{{if (\IPS\Request::i()->url()->data['path'] == "/ogloszenia_sprzet.html/") }}

{{$rows  = \IPS\Db::i()->select('*', 'cms_database', array('field_157=?', 1 ));}}

<div class="ipsPageHeader ipsClearfix ipsSpacer_bottom" style="margin-top: 30px;">
		<h1 class="ipsType_pageTitle">Ogłoszenia promowane - sprzęt</h1>
</div>

<div class='ipsBox' id="sponsoredBox" data-baseurl='https://www.audiostereo.pl/ogloszenia_sprzet.html/?page=1&amp;d=30' data-resort='listResort' data-controller='core.global.core.table,core.front.core.moderation'>
  <div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear" style="height: 40px;"></div>
	<ol class='ipsDataList ipsDataList_zebra ipsClear cCmsListing' id='elTable_test' data-role="tableRows">

{{foreach $rows as $row}}
{{if $row['field_158'] == 0 }}
	<li class="cCmsRecord_row ipsDataItem ipsDataItem_responsivePhoto" data-rowID="{$row['primary_id_field']}">
			<div class='ipsDataItem_icon ipsPos_top'>
			</div>
		<div class='ipsDataItem_main'>
			<h4 class='ipsDataItem_title ipsContained_container'>

				<span class='ipsContained ipsType_break'>              
					<a href="https://www.audiostereo.pl/ogloszenia_sprzet.html/{$row['record_dynamic_furl']}-r{$row['primary_id_field']}">{$row['field_146']}</a>
				</span>
			</h4>
              <span class="only-first one-line">
              </span>

			<div class='ipsDataItem_meta ipsType_blendLinks'>
			</div>
              
		</div>
          
		<ul class='ipsDataItem_stats'>
			
				<li>
					<span class="ipsDataItem_stats_number">{$row['record_comments']}</span>
					<span class="ipsDataItem_stats_type"> komentarz</span>
				</li>
				<li>
					<span class="ipsDataItem_stats_number">{$row['record_views']}</span>
					<span class="ipsDataItem_stats_type"> wyświetleń</span>
				</li>			
			
		</ul>
          
		<div class="ipsDataItem_price">
        	  {$row['field_149']}
		</div>
		<div class="ipsDataItem_type">
				{{if ($row['field_142'] == 1)}}
      				Kupię
				{{elseif ($row['field_142'] == 2)}}
    				Zamienię
				{{elseif ($row['field_142'] == 3)}}
                  	Sprzedam
				{{endif}}
		</div>
		<div class="ipsDataItem_city">
        	  {$row['field_152']}
		</div>
      	<div class='ipsDataItem_modCheck'>

		</div>
     </li>
{{endif}}
{{endforeach}}
  </ol>
  <div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear" style="height: 40px;"></div>
  </div>

{{endif}}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

No nie masz bo mówię, że to w plikach forum, a nie skinie. I to nie na zasadzie, że prosty kod i prosta zmiana.

Jeśli nie możesz tego zrobić to można napisać moda od tego.

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

Ja w skinach nic nie zmieniam jeżeli chodzi o ten problem. Opiszę jeszcze raz o co mi chodzi. Trzy różne przypadki:

Przypadek pierwszy: w szablonie recordRow zrobiłem warunek, że jeżeli  pobiera dane z "baza x" to wyświetlaj tylko posty nie oznaczone jako archiwalne - paginacja pokazuje i tak całość więc mam sporo pustych stron.

W innym przypadku robię blok jako wtyczka z kanałem "bazy y" i ustawiam limit 99 - wyświetla co trzeba ale brak paginacji.

I ostatni przypadek to własny blok którego kod wkleiłem wyżej. Pobieranie i wyświetlanie danych z "baza z". Tu również brakuje paginacji.

 

Myślałem, że może np w przypadku trzecim wystarczy dodać trochę kodu który wygeneruje mi paginację na podstawie danych które pobieram z bazy.

 

Z tego co zrozumiałem ze wcześniejszych odpowiedzi to paginacja powinna generować się sama jeżeli przekroczony zostanie limit 25, a w moich przypadkach nic takiego się nie robi.

 

Rozumiem, że nie da się tego tak zrobić i jedyne rozwiązanie to napisać mod? Mógłbyś podpowiedzieć co miałby robić taki moduł?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Paginacja działa zawsze w ten sam sposób:

kod wypluwa powiedzmy 100 wpisów na podstawie podanych warunków.

Limit na stronę to 25 więc paginacja wyświetla 4 strony w menu nawigacyjnym.

Nie możesz potem na stronie z wynikami ich modyfikować i usuwać bo forum "myśli", że tam nadal jest 25 pozycji (a nie mniej).

Więc może da się zrobić w Twoim przypadku by podczas pobierała sprawdzało czy coś jest archiwalne? Wtedy miałoby to sens i generalnie działało poprawnie.

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

No dobra w tym przypadku to zrozumiałe że dodaję warunek a on i tak patrzy na całą bazę. Ale co z blokiem, który jest stworzony jako kanał bazy? Tam nie integruję w kod, więc tworzy się wszystko automatycznie a paginacji dalej nie ma. Limit mam ustawiony na 25. Tak samo jak sam napiszę blok, który wczytuje dane z bazy, tworzy tabelę i wypluwa więcej wpisów niż 25 a paginacji nie widać.

 

Może do tabeli trzeba dodać jakiś kod żeby wyłapał że ma tam zrobić paginację?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

No może pokazuje tylko X ostatnich wpisów - wtedy bez paginacji?

Pokaż screen co tam dokładnie dodajesz to popatrzę w pliki.

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

Tabeli, nie tabel. W foreach robią się li, a całość ma postać tabeli. Jest jakaś różnica jak ją tworzę? Podpowiesz coś konkretniej z tą paginacją czy tak tylko będziemy sobie pisali? :)

 

Są jakieś wymagania w kodzie żeby tworzyła się paginacja? Przy kanale bazy też się sama nie tworzy.

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

  • Manager

Kod:

        /* Create the table */
	    $table = new \IPS\Helpers\Table\Db( 'dp43extendedprofile_items', \IPS\Http\Url::internal( 'app=core&module=members&controller=profile&id=' . $this->member->member_id . '&tab=node_dp43extendedprofile_extendedProfileProfile' ), array( array( $where ) ) );
        $table->limit = 20;

I potem w skinie:

	{{if $table->pages > 1}}
	<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
		<div data-role="tablePagination">
			{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
		</div>
	</div>
	{{endif}}

 

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

  • 2 tygodnie później...
  • Manager

To jest wycinek. Poszukaj podobnych fragmentów w plikach forum i dopasuj do swoich potrzeb. :) A konkretne pytania - wal śmiało.

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

  • 4 tygodnie później...
  • Manager

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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