Skocz do zawartości
Zaloguj się, aby obserwować  
kris2005a

Mod tagów

Polecane posty

kris2005a    4

Witam

Piszę właśnie modyfikację do IP.Board 2.3.x, konkretnie przerabiam opis tematu na mod tagów. Zmieniłem już to i owo. Tagi wyświetlają się w temacie po wpisaniu w stare pole "Opis tematu". Strona z wyszukiwarką tagów i ostatnio wyszukiwanymi tagami jest gotowa ale jest pewien mały problem. A mianowicie nie ma zupełnie pojęcia jak zrobić, że na np. stronie głównej forum w specjalnie utworzonej tabelce (jest już taka) ściągnąć z danego forum (wybranego) opisy tematów wpisane przez użytkowników podczas pisania tematu.

Czy mógłbym liczyć na jakąś pomoc?

Pz

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

rozumiem, że chodzi Ci o sam kod SQL, czy cały PHP obsługujący tą czynność?

jeśli SQL to nic prostszego jak:

SELECT description FROM ibf_topics WHERE forum_id IN(1,2,3)

oczywiście jeśli to ma być tylko z jednego konkretnego forum to warunek

WHERE forum_id IN(1,2,3)

zamień na:

WHERE forum_id=1

dodatkowo możesz posortować te teagi w jakiejś kolejności jeśli to jest Ci potrzebne lub posortować losowo wtedy przy każdym odświeżeniu strony będzie inny układ :)

Jeśli nie zrozumiałem dobrze to napisz co jeszcze potrzebujesz

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Chcę to dać pod statystyki na forum

Chodzi mi o kod php, który mi ściągnie opis tematu z danego działu mojego forum

Mam np dział forum o nazwie O (Grach Forumowych) - ID 30 i teraz chcę, żeby kod php ściągnał mi wszystkie opisy tematów z tego działu.

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

$this->ipsclass->DB->simple_construct(array('SELECT' => "description", 'from' => 'topics', 'where' => 'forum_id=30'));
$this->ipsclass->DB->simple_exec();

$result = array();

while($row = $this->ipsclass->DB->fetch_row())
{
$result[] = $row['description'];
}[/code] jeżeli słowa mają być w postaci linków to:
[code]$result[] = $row['description'];
zamień na
$result[] = '<a href="LINK">' .$row['description'] .'</a>';
ten kod należy wstawić w sources/lib/func_boardstats.php znajdując:
/*-------------------------------------------------------------------------*/
//
// SHOW TOTALS
//
/*-------------------------------------------------------------------------*/

function show_totals()
{
$stats_html = "";[/code] pod tym wstawiasz powyższy kod, a pod nim wstaw coś takiego:
[code]$stats_html .= $this->ipsclass->compiled_templates['skin_boards']->calendar_events( join(', ', $result) );

tyle, że będzie to wyświetlane tak jak wydarzenia w kalendarzu, ale to taki szczegół ;) jak coś to można stworzyć dedykowany bit szablonu, który będzie to wyświetlać :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Tylko jest jedno małe ale tego nie da się wstawić

$this->ipsclass->DB->simple_construct(array('SELECT' => "description", 'from' => 'topics', 'where' => 'forum_id=30'));

$this->ipsclass->DB->simple_exec();


$result = array();


while($row = $this->ipsclass->DB->fetch_row())

{

   $result[] = $row['description'];

}

Do bita skina. Zwraca coś takiego:

These template bits could not be saved because they cause an error when parsed. Please check the data including any HTML logic used and any input data variables.

A ja chciałem to dodać poprzez edycję html skina.

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

Oczywiście, ale nie da się zrobić tak, żebyś w bicie szablonu wstawił sobie coś i żeby Ci wyświetliło te dane, bez uprzedniego pobrania i obrobienia ich w PHP

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

No fakt. Ale akurat w php jestem dość słaby.

Dobra wykonałem to w lib (wcześniej źle to zrozumiałem i wstawiłem).

Czy funkcja do bita powinna zaczyna się miej więcej tak?

$this->ipsclass->member['members_display_name']

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

jeśli wszystko zrobiłeś tak jak pisałem to powinny się pojawić nad statystykami w wydarzeniach kalendarza te tagi. Jeśli natomiast masz jakiś własny bit stworzony, to wystarczy że w Varible tego bitu dasz np. $tagi, a następnie w bicie szablonu używasz już bezpośrednio $tagi w miejscu, gdzie ma się wyświetlić ta lista tagów.

Używając własnego bitu szablonu musisz odpowiednio poprawić

$stats_html .= $this->ipsclass->compiled_templates['skin_boards']->calendar_events( join(', ', $result)  );

tzn zamiast skin_boards musisz użyć nadrzędnej grupy dla Twojego bitu nie wiem gdzie umieściłeś czy w globals czy w boards, a następnie calendar_events zamieniasz na taką nazwę jak nazwałeś bit szablonu i wszystko działa ślicznie ładnie :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Zniknęło pole z nadchodzącymi wydarzeniami.

Ale tagów jak nie wyświetlało tak nie wyświetla.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

jaki masz kod w bicie szablonu ?? i jaką Varible mu ustawiłeś ?? jak obecnie wygląda Twoja funkcja (function show_totals()) w lib'ie ?? jak coś to jak wrócę z pracy to odezwij się na GG to Ci pomogę jeśli tutaj się nie uda :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Wstawiłem tak jak mówiłem i $tagi o statów.

Sam nie wiem.

Nie śpieszy się z tym modem. Na spokojnie. Teraz idę robić nowe skiny :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

ok, znalazłem błąd :) SELECT powinno być małymi literami, czyli

$this->ipsclass->DB->simple_construct(array('SELECT' => "description", 'from' => 'topics', 'where' => 'forum_id=30'));
zamień na
$this->ipsclass->DB->simple_construct(array('select' => "description", 'from' => 'topics', 'where' => 'forum_id=30'));

i będzie działać. ja dla testów stworzyłem sobie bit szablonu i przetestowałem i działa ślicznie :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Ślicznie nie działa. Ale działa. Tylko teraz tak:

ID forum zmieniłem na 144 (na ID 30 nie mam tagów), wyświetla tagi ale prze nimi jest mnóstwo przecinków:

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Changelog, 42, poprawki, Changelog, 43, Changelog, 44, nowe, buźki, Changelog #45, nowe, beta, board gcpl.pl,

Jak tego się pozbyć?

I jeszcze jedno chodzi mi o wybór forum (ID) do wyświetlania. Czy da się to ustawić tak, żeby to wyświetlało np tagi z forum o ID 144, 145, 146?

No i jeszcze ten nieszczęsny bit. Utworzyłem ale nie umiem tego tak zakodować, żeby odpowiadał tylko za linię z tagami. Obsługę tagów i kalendarza (na statystykach forum) pełni bit calendar_events. Jak to przeprogramować?

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

Chcesz na stałe zdefiniować te ID'ki ?? jeśli tak to zamień

forum_id=30
w zapytaniu na
forum_id IN(144,145,146)
natomiast aby uniknąć przecinków na początku, które biorą się z tąd że są puste description użyj takiego zapytania:
$this->ipsclass->DB->simple_construct(array('select' => "description", 'from' => 'topics', 'where' => 'forum_id IN(144,145,146) AND description != ""'));
co do bitu szablonu to zrób sobie tak: ACP -> LOOK & FEEL -> Dany skin -> Edit Template HTML -> Board Index zejdź na sam dół i daj Add Template Bit i wypełnij tak pola: New Template Bit Name tagi New Template Bit Incoming Data Variables $tags New Template Bit Group... skin_boards Następnie daj Continue... i w okienko wklej takie coś:
<tr>
<td class="formsubtitle" colspan="2">Tagi</td>
</tr>
<tr>
<td class="row2" colspan="2">$tags</td>
</tr>[/html] i na sam koniec zamień w sources/lib/func_boardstats.php
[code]$stats_html .= $this->ipsclass->compiled_templates['skin_boards']->calendar_events( join(', ', $result) );[/code]
na
[code]$stats_html .= $this->ipsclass->compiled_templates['skin_boards']->tagi( join(', ', $result) );[/code]

i Voila działa :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Ok. Dzięki. Potem sprawdzę bo już muszę od komputera odchodzić. Maturę mam - w piątek ostatni egzamin (ang - ustny).

Dam znać jakby coś nie wypaliło (w co wątpię)....

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

spoko, jak coś to pomogę.

PS. powodzenia na maturze

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Teraz jest git z jednym wyjątkiem tagi powtarzają mi się dwa razy.

post-274-1242240354_thumb.jpg

Przepraszam za dublowanie ale błąd naprawiony. Moja wina (nie zauważyłem i zostawiłem dwa razy .= $stats_html)

Jutro postaram się napisać poradnik instalacji tego moda i umieszczę na tym forum.

A jeszcze coś. Widzę, że wyniki pobierania tagów są ograniczone na jakieś konkretnej liczbie, jak to przestawić?

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

hmm, nie powinno być żadnych ograniczeń, ale jeśli są to możesz dać

$this->ipsclass->DB->simple_construct(array('select' => "description", 'from' => 'topics', 'where' => 'forum_id IN(144,145,146) AND description != ""', 'limit' => array(0, 100));

wtedy zwróci Ci 100 pierwszych rekordów. bo standardowo nie ma ograniczenia co do ilości pobranych danych.

Wielkie dzięki za poradnik, jakby co to mogę Ci pomóc stworzyć do tego instalator UMI

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Wiesz w porównaniu z MinerwaSeo i problemami jakie stwarza to ten mod i tak jest o 99% łatwiejszy w instalacji.

Jurto napiszę instrukcję. Ale chyba nie da rady do tego dopasować UMI bo ja mam jeszcze w tym swojego dopiski (edycja górnego panelu tematu i wykasowanie opisu tematu), zmiana tłumaczeń, wgranie tabelki pod temat.

Jak wpisałem tę funkcją z ogranicznikiem to mam zwrot:

Parse error: syntax error, unexpected ';' in /home/kris2005/public_html/sources/lib/func_boardstats.php on line 571

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

$this->ipsclass->DB->simple_construct(array('select' => "description", 'from' => 'topics', 'where' => 'forum_id IN(144,145,146) AND description != ""', 'limit' => array(0, 100)));

tak to jest jak się pisze rozpędem na forum, zgubiłem jeden nawias zamykający.

Wszystkiego napewno się nie da wrzucić ale część pewnie tak

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Witaj

Właśnie ktoś z zagranicy pyta dlaczego nie ma w modzie tagów takiego czegoś, że kiedy klikniemy na stronie głównej forum w dany part tagów to on nam ich nie wyszuka poprzez opcję "szukaj" gdzie dokładnie znajdują się tematy z taką lub podobną zawartością tagów.

Przydało by się taki coś lecz nie wiem jak to wykonać.

http://www.gcpl.pl/index.php?act=Search&CODE=kris

Próbował wpisać dany part tagów w prefix szukania ale nie za bardzo wychodzi. Wychodzi mi jedynie wyprowadzenie tego do wyszukiwarki ale nie do tematów.

Czy wiesz może jak to można wykonać? (mała podpowiedź).

Pz

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spanner    4247

Jak rozumiem, chodzi Ci o to, aby dało się wyszukiwać po tagach ? i teraz pytanie, czy wpisując w wyszukiwarkę słowo jakieś mają być brane pod uwagę także tagi, czy np. wystarczy tylko coś takiego, aby wyszukiwanie następowało tylko przez odpowiednio spreparowany link wyszukiwarki np.

http://www.gcpl.pl/index.php?act=Search&CODE=tag&tag=kris
?? krócej niestety się nie da zrobić linka wyszukującego :) jeśli to drugie wystarczy to za chwilę dam odpowiedni kod, tylko go stworzę :) Otwórz: /sources/action_public/search.php Znajdź:
case 'getactive':
$this->ipsclass->input['active'] = 1;
$this->get_new_posts();
break;[/code] [b]Dodaj pod:[/b]
[code]case 'tags':
$this->get_topic_from_tags();
break;
Znajdź:
}

?>[/code] [b]Wstaw przed:[/b]
[code]function get_topic_from_tags()
{
if(!isset($this->ipsclass->input['tag']) || empty($this->ipsclass->input['tag']))
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_search_results' ) );
}

$this->cached_query = 0;
$this->cached_matches = 0;

//-----------------------------------------
// Grab forums lib
//-----------------------------------------

require_once( ROOT_PATH."sources/action_public/forums.php" );
$this->forums = new forums();
$this->forums->ipsclass =& $this->ipsclass;
$this->forums->init();

$this->ipsclass->DB->simple_construct( array( 'select' => 't.*',
'from' => 'topics t',
'where' => "t.description LIKE '%{$this->ipsclass->clean_perm_string($this->ipsclass->input['tag'])}%'",
'order' => "t.pinned DESC, t.start_date DESC",
) );
$outer = $this->ipsclass->DB->simple_exec();

//-----------------------------------------
// PRINT: Any returned rows?
//-----------------------------------------
$this->output .= $this->ipsclass->compiled_templates['skin_search']->start( '', '' );

if ( $this->ipsclass->DB->get_num_rows($outer) )
{
$topic_ids = array();
$the_topics = array();

while ( $row = $this->ipsclass->DB->fetch_row($outer) )
{
$this->output .= $this->ipsclass->compiled_templates['skin_search']->RenderRow( $this->parse_entry($row) );
}

}
else
{
$this->output .= $this->ipsclass->compiled_templates['skin_search']->no_results_row();
}

$this->output .= $this->ipsclass->compiled_templates['skin_search']->end_results_table();
}
i działa, teraz w przeglądarkę jak wpiszesz
http://www.gcpl.pl/index.php?act=Search&CODE=tags&tag=kris

pojawią się wyniki wyszukiwania dla danego tagu. Oczywiście można jeszcze dorobić stronicowanie itp, ale to taki główny szkielet :]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
kris2005a    4

Działa. Dzięki. teraz mam to co potrzebowałem. Ale mamy mały kłopot chciałem zrobić tak, żeby po kliknięciu na tag (strona główna forum) wyszukało mi w wyszukiwarce daną frazę do tego potrzebny był mi prefix ale jak teraz wpisać frazę tagu (danego) do wyszukiwarki?

Np. Mam tag <Imperium Azteków> i klikam na niego i mi z pomocą

index.php?act=Search&CODE=tags&tag="
wyszukuje. Czy da się to wpisać do funkcji w sourses/lib/func_boradstats.php?
$result[] = '<a href="index.php?act=Search&CODE=tags&tag=nazwa tagu">' .$row['description'] .'</a>';
Wiesz jak to zrobić? Ja próbuje i nic! ************** Poprawka udało mi się to zrobić Wystarczy dodać zamiast linku:
$result[] = '<a href="index.php?act=Search&CODE=tags&tag=' .$row['description'] .' ">' .$row['description'] 


.'</a>';

I wyszukuje

Przepraszam za spam ale zaktualizowałem wersję moda. Teraz już wyszukuje tagi po kliknięciu. Dodaje do Downloadu.

Edytowano przez kris2005a

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.
Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

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

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.