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

Próba napisania własnej aplikacji


Rekomendowane odpowiedzi

Witam, chcę się podjąć napisania aplikacji typu portal. Ma to być prosta aplikacja generalnie, która będzie wyświetlać mi np. pierwsze 10 tematów z danego działu, który w kodzie będzie wpisany na sztywno. Nie chodzi mi tutaj o to aby pisać aplikację razem z ustawieniami do wyboru. Idąc sobie metodą prób i błędów zrobiłem aplikację, która ładuje mi temat o określonym ID po czym wyświetlam ją w bicie. I teraz pojawia się pytanie. Co zrobić aby rzeczywiście załadowało mi np. pierwsze 5 tematów do zmiennej i wyświetliło je poprawnie. Męczę się z tym już sporo czasu. W IPB 3.4 było to dla mnie proste, zrozumiałe i przejrzyste, tutaj już niestety nie jest. Generalnie rzecz biorąc napisałem już kiedyś sobie taką aplikację w 3.4.9 i chcę teraz przepisać to na 4.3.6. 

 

Generalnie to co zrobiłem to użyłem funkcji:

$topic = \IPS\forums\Topic::load(2);

Gdzie na sztywno wpisałem dany temat.

 

Następnie w pliku z bitem umieściłem taki kod:

 

<ips:template parameters="$topic" />
<li class="cForumRow ipsBox ipsSpacer_bottom" style="list-style: none;">
	<h2 class="ipsType_sectionTitle ipsType_reset cForumTitle">
        <div style='float: left;margin-right:15px;'>{template="userPhoto" group="global" app="core" params="$topic->author(), 'tiny', $topic->warningRef()"}</div>
			<a href="#">
                {$topic->title}                    
            </a>
                <br>
            <span class='ipsType_normal' style='font-size: 12px; text-transform: none;'>
				{{if $topic->isQuestion()}}
					{lang="ask_byline_no_date" htmlsprintf="$topic->author()->link( $topic->warningRef() )"}
				{{else}}
					{lang="byline_itemprop" htmlsprintf="$topic->author()->link()"} <span class='ipsType_light'>{datetime="$topic->start_date"} {lang="in"} <a href="{$topic->container()->url()}">{$topic->container()->_formattedTitle|raw}</a></span>
				{{endif}}
            </span>
	</h2>		
	<ol class="ipsDataList ipsDataList_large ipsDataList_zebra ipsAreaBackground_reset" data-role="forums">
        <li class="cForumRow ipsDataItem ipsDataItem_responsivePhoto  ipsClearfix" data-forumid="2">
            <div class="ipsDataItem_main">
                            {$topic->content()|raw}
            </div>
                            
         </li>
	</ol>			
</li>

 

Dodatkowo miałbym pytanie

W 4.3 da się wywołać czysty kod PHP w bicie? Tak jak miało to miejsce w 3.4 i robiło się to umieszczając kod php w następujący sposób:

<php>
  $a += 1;
  $b++;
  echo $a.'<br>'.$b;
</php>

Dziękuję za pomoc. Jeżeli mogę prosić to proszę o naprowadzenie mnie lub napisanie gotowego kodu jednak z małym objaśnieniem. Zależy mi głównie na tym aby się tego nauczyć aby w przyszłości móc pomagać takim jak ja.

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
10 godzin temu, mpowerek napisał:

Co zrobić aby rzeczywiście załadowało mi np. pierwsze 5 tematów do zmiennej i wyświetliło je poprawnie.

5 pierwszych na jakiej podstawie?

10 godzin temu, mpowerek napisał:

W 4.3 da się wywołać czysty kod PHP w bicie?

Da się. Robisz tak:

{{$toJestCzystyKod = 'Swieta racja :)';}}

 

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

8 godzin temu, DawPi napisał:

5 pierwszych na jakiej podstawie?

Da się. Robisz tak:


{{$toJestCzystyKod = 'Swieta racja :)';}}

 

 

Zapytaniem do bazy danych.  

$select = \IPS\Db::i()->query('SELECT * FROM `ips_forums_topics` WHERE `forum_id` =2');

lub 

$select = \IPS\Db::i()->select( '*', 'forums_topics', 'forum_id=2', 'tid DESC');

Tyle, że nie wiem co dalej. Jak to połączyć.

Odnośnik do komentarza
Udostępnij na innych stronach

1 minutę temu, DawPi napisał:

Ale co połączyć? Gdzie limit? :)

 

Okej, fakt limitu nie dodałem ale mniejsza, wiem jak to zrobić. Chodzi o to aby przesłać to do bitu a później to wypisać. Okej mam w tym wypadku zmienną "$select" teraz przydało by się załadować wszystkie tematy na podstawie zapytania.

$topic = \IPS\forums\Topic::load( ???? );

Następnie przesyłam to outputem do bitu mniej więcej tak:

 

\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'portal' )->portal_show($topic);	

Kolejne pytanie jak to wypisać? Wiem, że muszę użyć najprawdopodobniej pętli foreach ale co dalej już nie bardzo.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
$topics = array();

foreach( \IPS\Db::i()->select( '*', 'forums_topics', 'forum_id=2', 'tid DESC' ) as $topic )
{
	$topics[] = $topic;
}

\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'portal' )->portal_show( $topics );	

 

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 27.11.2018 o 11:29, DawPi napisał:

$topics = array();

foreach( \IPS\Db::i()->select( '*', 'forums_topics', 'forum_id=2', 'tid DESC' ) as $topic )
{
	$topics[] = $topic;
}

\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'portal' )->portal_show( $topics );	

 

Działa należycie. Można zamknąć.

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

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