Skocz do zawartości

Hosting dHosting.pl - 10% rabat!

mpowerek

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
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 :)';}}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
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ć.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
$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 );	

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)
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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×

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