Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
Koly007

Ankündigung in allen Kategorien!

Recommended Posts

Ich bin diesen Mod (http://mods.ibplanet.com/db/?mod=2251) nochmal Schritt für schritt durchgegangen. Jetzt funktioniert er. :):D

Wer Problem mit der englischen install.txt hat, kann diese Anleitung hier nehmen.

Ich habe sie auch gleich mit eingedeutscht. Das heisst, die englischen Texte ins deutsche sinngemäss übersetzt.

-----------------------------------------------------------

GLOBAL ANNOUNCEMENTS by thafreaK For IPB 1.3 Final

Original for IPB 1.1 by Manick

-----------------------------------------------------------

===========================================================

Diese Dateien uploaden

- skin_announce.php  nach  /Skin/s*/ (Der * steht für die Skin ID, z.B.: /Skin/s1/)

- lang_announce.php  nach  /lang/en/

- announce.php      nach /sources/

- ad_announce.php  nach  /sources/Admin/

- announce.gif  nach  /style_images/s*/ (Der * steht für die Skin ID, z.B.: /style_images/s1/)

- ibfcode_old_ann.js  nach  /html/

- db_hack.php  ins Hauptverzeichnis root. Ausführen und dann wieder löschen!!!

Jetzt werden diese Dateien editiert. Danach werden dann die Instruktionen am Ende dieser install.txt ausgführt!!!

-------------------------------------------------------------------------------------------------

-----------------------------------------------------------

öffne /lang/en/lang_online.php

-----------------------------------------------------------

Suche nach:

<?php

Füge darunter ein:

$lang['WHERE_SA']  = "Ankündigung anschauen";

-----------------------------------------------------------

öffne /lang/en/lang_forum.php

-----------------------------------------------------------

Suche nach:

<?php

Füge darunter ein:

$lang['announcement_topics']  = "Ankündigungen";

$lang['announcement_start']  = "Ankündigung starten:";

$lang['announcement_end']  = "Ankündigung beenden:";

$lang['announcement']  = "Ankündigung:";

-----------------------------------------------------------

öffne /lang/en/lang_error.php

-----------------------------------------------------------

Suche nach:

<?php

Füge darunter ein:

$lang['no_view_announcement'] = "Sorry, es können nur registrierte Mitglieder diese Ankündigung lesen.";

-----------------------------------------------------------

öffne /Skin/s*/skin_forum.php (Der * steht für die Skin ID, z.B.: /Skin/s1/)

-----------------------------------------------------------

Suche nach:

<?php

class skin_forum {

Füge darunter ein:

function announce_start() {

global $ibforums;

return <<<EOF

    <!-- START ANNOUNCEMENTS -->

    <tr>

      <td align='center' class='darkrow1'>&nbsp;</td>

      <td align='center' class='darkrow1'>&nbsp;</td>

  <td align='left' class='darkrow1' colspan='5' style='padding:6px'><b>Global Announcements</b></td>

    </tr>

EOF;

}

function RenderAnnouncement($Data) {

global $ibforums;

return <<<EOF

    <!-- Begin Announcement Entry {$Data['a_id']} -->

    <tr>

  <td align='center' class=row4><{B_LOCKED}></td>

      <td align='center' class='row2'><{F_ANN}></td>

      <td class='row4'>

<span class='linkthru'>{$Data['go_new_post']}<b>{$ibforums->lang['announcement']}</b> <a href='{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}?act=SA&a={$Data['a_id']}&s={$ibforums->session_id}' id='linkthru' title='View this announcement'><b>{$Data['a_title']}</b></a></span>

      <br><span class='desc'>{$Data['a_desc']}</span></td>

      <td align='center' class='row4'>{$Data['starter']}</td>

      <td align='center' class='row4'>--</td>

      <td align='center' class='row4'>{$Data['a_views']}</td>

      <td class='row4'>{$ibforums->lang['announcement_start']} <B>{$Data['start_date']}</B>{$Data['end_date']}</td>

    </tr>

    <!-- End Announcement Entry {$Data['a_id']} -->

EOF;

}

-----------------------------------------------------------

öffne /sources/functions.php

-----------------------------------------------------------

Suche nach:

$this->time_options = array( 'JOINED' => $INFO['clock_joined'],

          'SHORT'  => $INFO['clock_short'],

          'LONG'  => $INFO['clock_long']

          );

Ersetze durch:

$this->time_options = array( 'JOINED' => $INFO['clock_joined'],

          'SHORT'  => $INFO['clock_short'],

          'LONG'  => $INFO['clock_long'],

          'ANN' => "m-d-y"

          );

-----------------------------------------------------------

öffne /sources/Forums.php

-----------------------------------------------------------

Suche nach:

var $pinned_print = 0;

Füge darunter ein:

var $announce_print = 0;

Suche nach:

//+----------------------------------------------------------------

  // Start printing the page

  //+----------------------------------------------------------------

 

  $this->output .= $this->html->PageTop($this->forum);

 

  //+----------------------------------------------------------------

  // Do we have any topics to show?

  //+----------------------------------------------------------------

 

  if ($total_possible['max'] < 1)

  {

  $this->output .= $this->html->show_no_matches();

  }

Ersetze durch:

//+----------------------------------------------------------------

  // Start printing the page

  //+----------------------------------------------------------------

 

  $this->output .= $this->html->PageTop($this->forum);

  //+----------------------------------------------------------------

  // Annoucements?

  //+----------------------------------------------------------------

  if ($ibforums->input['st'] < 1 or !$ibforums->input['st'])

  {

  $time_now = time();

  $announce = $DB->query("SELECT a.*,m.name,m.title FROM ibf_announcements a, ibf_members m WHERE a.a_mid=m.id AND (a.a_forum='".$this->forum['id']."' OR a.a_forum='0') AND ((a.a_start < '".$time_now."' AND a.a_end > '".$time_now."') OR a.a_expire = '0') ORDER by !a.a_forum DESC, a.a_start DESC");

  $ann_print = "";

  if ($result = $DB->fetch_row())

  {

  $this->output .= $this->html->announce_start();

  $this->announce_print = 1;

  $ann_print = "1";

    do

    {

 

  $this->output .= $this->render_announce( $result );

    } while ($result = $DB->fetch_row());

  }

  }

 

  //+----------------------------------------------------------------

  // Do we have any topics to show?

  //+----------------------------------------------------------------

 

  if ($total_possible['max'] < 1 AND !$ann_print)

  {

  $this->output .= $this->html->show_no_matches();

  }

Suche nach:

$topic['prefix']    = $ibforums->vars['pre_pinned'];

  $topic['topic_icon'] = "<{B_PIN}>";

Darüber einfügen:

$this->announce_print = 0;

Suche nach:

// This is not a pinned topic, so lets check to see if we've

  // printed the footer yet.

Füge darunter ein:

if ($this->announce_print == 1)

  {

    $p_end = $this->html->render_pinned_end();

    $this->announce_print = 0;

  }

Suche am Ende der Datei nach:

}

?>

Füge darüber ein:

function render_announce($topic) {

  global $DB, $std, $ibforums;

 

  $topic['starter']    = ($topic['a_mid']    != 0)

        ? "<a href='{$this->base_url}&act=Profile&CODE=03&MID={$topic['a_mid']}'>{$topic['name']}</a>"

        : "-".$topic['name']."-";

 

 

  $last_time = $this->read_array[ 'ann_' . $topic['a_id'] ] > $ibforums->input['last_visit'] ? $this->read_array[ 'ann_' . $topic['a_id'] ] : $ibforums->input['last_visit'];

 

  if ($last_time  && ($topic['a_start'] > $last_time))

  {

  $topic['go_new_post']  = "<a href='{$this->base_url}&act=SA&a={$topic['a_id']}'><{NEW_POST}></a>";

 

  }

  else

  {

  $topic['go_new_post']  = "";

  } 

  $topic['folder_img']    = "";

 

  $topic['topic_icon']    = "";

 

  $topic['start_date'] = $std->get_date( $topic['a_start'], 'ANN' );

  $topic['end_date'] = $topic['a_expire'] ? "<br>{$ibforums->lang['announcement_end']} <B>".$std->get_date( $topic['a_end'], 'ANN' )."</B>" : "";

  return $this->html->RenderAnnouncement( $topic );

}

-----------------------------------------------------------

öffne /index.php

-----------------------------------------------------------

Suche nach:

'ModCP'    => 'mod_cp',

Füge darunter ein:

'SA'    => 'announce',

-----------------------------------------------------------

öffne /admin.php

-----------------------------------------------------------

Suche nach:

function info($INFO)

{

  //global $INFO;

  $this->vars = $INFO;

Füge darunter ein:

$this->vars['EMOTICONS_URL']  = $INFO['html_url'] . '/emoticons';

Suche nach:

/*----------------------------------

  What do you want to require today?

------------------------------------*/

$choice = array(

      "idx"      => "doframes",

      "menu"    => "menu",

Füge darunter ein:

'announcement' => 'announce',

-----------------------------------------------------------

öffne /sources/Admin/admin_pages.php

-----------------------------------------------------------

Suche nach:

8 => array( 'Topic Multi-Moderation', 'act=multimod'          ),

Füge darunter ein:

9 => array( 'Announcements'        , 'act=announcement'      ),

-------------------------------------------------------------------------------------------------

Ende der Dateieneditierung.

Jetzt:

1. gehe ins Admin CP --> Skins & Templates --> Macros

2. wähle jetzt den Skin aus, auf dem du das Macro anwenden möchtest und klicke auf Edit

3. Jetzt auf "Add a macro" klicken und folgendes eingeben

Macro Key: F_ANN

Macro Replacement: <img src='style_images/<#IMG_DIR#>/announce.gif' border='0'  alt=''>

-------------------------------------------------------------------------------------------------

Jetzt kann man unter Forum Control, die Announcements einstellen.

Viel Spass!!!

Kontakt : via MSN: freak_beta@hotmail.com

(deutsche Übersetzung "mfgkfor")

Share this post


Link to post

So, da ich auch so einen Mod gesucht habe, habe ich den von IBPlanet soeben mal getestet, und muss ja mit schrecken feststellen, das das der größte mist ist, den ich je gesehen habe ;)

1. Im AdminCP muss man wieder für jedes einzelne Forum ein neues Thema erstellen, somit könnte man auch in jedem Forum ein Thema erstellen und dieses pinnen.

2. Der Mod nutzt einen eigenen Skin in der Themen Anzeige und auch in der Zeile für die Ankündigung. Wäre auch ein Riesen aufwand, das beides anzupassen an einen Custom Skin, und bei der zusätzlichen Skin Datei für das Thema der Ankündigung Funktionieren z.b. Signaturen nicht Richtig. Vom Design mal ganz zu schweigen :D

Darum meine Frage an Christian: Kannst du deinen Mod nochmal überprüfen? Bei mir Funktionierte der nicht, hat nur mit wilden MySQL Errors umsich geschmissen in der "Foren Ansicht". ;)

Share this post


Link to post

mhm.. mir würde auch ein "Ankündigungs-mod" ziemlich gefalln..christian.. ;) :-*

In der 2.0 gibts aber ankündigungen ohne mod, soweit ich weiß..?

Share this post


Link to post

In der 2.0 gibts aber ankündigungen ohne mod, soweit ich weiß..?

Ja, soweit ich es auch weiß, soll es in der Version vorhanden sein. :)

Share this post


Link to post

Ich werde Heute Abend nach 20 Uhr (Feierabend :D) dann nochmal den Mod von Christian Lokal testen, und schauen ob ich den Fehler finde. Wenn nicht, vielleicht Hilft Stefan mir dann ja noch kurz? :D :P

Share this post


Link to post

Genau das ist dieser besagte Mod, von dem wir hier reden. Wie gesagt, habe selten so einen "schlecht" gelungenen Mod gesehen ;) Bevor man den Mod Installiert, kann man auch genausogut Themen im Forum erstellen und diese dann Pinnen, es kommt aufs gleiche raus, nur halt das dann jedenfalls alle Funktionen funktionieren, nicht so wie bei dem Mod, da Funktioniert nichtmal die Signatur.

Share this post


Link to post

Darf ich mal ganz vorwitzig anfragen, wie weit dein Mod, Christian, so gelungen ist? Ich habe erst den schlechten Mod eingebaut, würde aber lieber den von Christian einbauen.

Wobei die Unterteilung in Ankündigung im Forum und globale Ankündigung von dem schlechten Mod gar keine so schlechte Idee ist...

Edited by Dirk

Share this post


Link to post

Hab' gerade den mod eingebaut, bekomm' jetzt aber in der Forenansicht folgende Fehlermeldung:

mySQL query error: SELECT DISTINCT(ibf_posts.author_id), ibf_topics.* FROM ibf_topics

              LEFT JOIN ibf_posts ON

              (ibf_topics.tid=ibf_posts.topic_id AND ibf_posts.author_id=1)

              WHERE ((ibf_topics.forum_id=2)

OR (ibf_topics.announcement = 1)

              and ibf_topics.approved=1

              and (ibf_topics.pinned=1 or ibf_topics.last_post > 0) ORDER BY announcement DESC, pinned DESC, last_post DESC LIMIT 0,15

mySQL error: Fehler in der Syntax bei 'ORDER BY announcement DESC, pinned DESC, last_post DESC LIMIT 0,' in Zeile 7.

mySQL error code:

Date: Friday 16th of April 2004 10:25:11 PM

Ich bin mir fast sicher, dass es an dem Teil der sources/Forums.php liegt; laut Anleitung soll es so gehen:

2.

$query .= " ORDER BY pinned DESC, $sort_key $r_sort_by LIMIT $First,".$ibforums->vars['display_max_topics'];

ersetze durch:

$query .= " ORDER BY announcement DESC, pinned DESC, $sort_key $r_sort_by LIMIT $First,".$ibforums->vars['display_max_topics'];

4.

# suche:

WHERE ibf_topics.forum_id=".$this->forum['id']."

# ersetze durch:

WHERE ((ibf_topics.forum_id=".$this->forum['id'].")

OR (ibf_topics.announcement = 1)

# suche: (einige Zeilen tiefer)

WHERE forum_id=".$this->forum['id']."

# ersetze durch:

WHERE ( (forum_id=".$this->forum['id'].")

OR (announcement =1) )

Bei mir sieht das jetzt so aus:

  $query .= " ORDER BY announcement DESC, pinned DESC, $sort_key $r_sort_by LIMIT $First,".$ibforums->vars['display_max_topics'];
 	 $query = "SELECT DISTINCT(ibf_posts.author_id), ibf_topics.* FROM ibf_topics

              LEFT JOIN ibf_posts ON

              (ibf_topics.tid=ibf_posts.topic_id AND ibf_posts.author_id=".$ibforums->member['id'].")

              WHERE ((ibf_topics.forum_id=".$this->forum['id'].")

OR (ibf_topics.announcement = 1)

              and ibf_topics.approved=1

              and (ibf_topics.pinned=1 or ibf_topics.last_post > $Prune)";

  }

  else

  {

 	 $query = "SELECT * from ibf_topics WHERE ((forum_id=".$this->forum['id'].")

OR (announcement = 1)) and approved=1 and (last_post > $Prune OR pinned=1)";

  }

Ich glaub', da hab' ich was falsch gemacht, ich komm aber nicht drauf.. :(

Könnte mir da jemand weiterhelfen?

mfg,

Tom

Share this post


Link to post

Es liegt hier dran:

WHERE ((ibf_topics.forum_id=".$this->forum['id'].")
OR (ibf_topics.announcement = 1)
Ersetz das mal durch das:
WHERE ((ibf_topics.forum_id=".$this->forum['id'].")
OR (ibf_topics.announcement = 1) )

Share this post


Link to post

Yep, danke! Das ist mir auch gerade aufgefallen.. :)

Allerdings hab' ich ein neues Problem: jetzt kommt zwar keine Fehlermeldung mehr, aber ich seh' in der Forenansicht nur mehr die gepinnten Beiträge, sonst nichts - wenn ich aber in der Boardansicht einen Beitrag anklicke, kann ich ihn sehen (liegt also nicht an der Berechtigung, sondern "nur" an der Ansicht..).

Tom

Share this post


Link to post

Hm - Sorry - hatte es gerade gestern Abend mal Lokal getestet, und da lief es alles. Habe testweise eine Ankündigung erstellt, ein Thema gepinnt und ein Normales erstellt, klappt alles ;)

Share this post


Link to post

Hab's gefunden - war mein Fehler.. ;) (hab' ich aber eh' vermutet, dass ich was in der Forums.php vermurkst hab..

Ich hab' unter 3.

if ($topic['pinned'] == 1)
nicht ersetzt, sondern unabsichtlich gleich daneben weitergemacht mit
//--- global announce mod start

  if ($topic['announcement'] == 1)

usw.

;)

Jetzt klappt's! Danke, Rigo.. :)

mfg,

Tom

Share this post


Link to post

So, ich hab den Mod auch mal lokal getestet. Bis auf den Klammer-Fehler den Rigo bereits korrigiert hat und einem kleinen Fehler in der "Anleitung" funktioniert jetzt alles bestens. Vielleicht sollte man den Thread mal in "Fertige Modifikationen" verschieben? ;)

Share this post


Link to post

Na lieber nicht den ganzen Tread. Dann soll Christian das ganze mal lieber in der Anleitung anpassen, eine HTML Anleitung erstellen (wenn er keine Zeit hat, einfach Bescheid sagen, dann bastel ich die Anleitung schnell) und dann Releasen!

:)

Wollen hier doch keine Unübersichtlichkeit wie in anderen Foren einziehen lassen :D :P

Share this post


Link to post

Wollen hier doch keine Unübersichtlichkeit wie in anderen Foren einziehen lassen

Nein, natürlich nicht. ;)

Ein Fehler taucht bei mir aber doch noch auf: Wenn ich über die Themenoptionen "Globale Ankündigung AN bzw. AUS" wähle, kommt immer folgende Fehlermeldung:

Fatal error: Call to a member function on a non-object in Moderate.php on line 2137 bzw. 2149

So sieht der entsprechende Teil aus:

//--- global announce mod start

function announce_on()

{

	global $ibforums, $DB;

	if($ibforums->member['g_can_announce'] == 1)

	{

  $DB->query("UPDATE ibf_topics

    SET announcement = 1

    WHERE tid = " . $this->topic['tid']);

	}

	$print->redirect_screen( $ibforums->lang['announce_on'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

}


function announce_off()

{

	global $ibforums, $DB;

	if($ibforums->member['g_can_announce'] == 1)

	{

  $DB->query("UPDATE ibf_topics

    SET announcement = 0

    WHERE tid = " . $this->topic['tid']);

	}

	$print->redirect_screen( $ibforums->lang['announce_off'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

}

//--- global announce mod end

Edited by kingofcomedy

Share this post


Link to post

Beta 2:

Status:

  • In dem Forum in dem sie gestartet wurden, haben sie keinen besonderen status (es empfiehlt sich ein extra Forum dafür einzurichten)
  • In allen anderen Foren erscheinen die globalen Ankündigungen optisch gleich der Abgrenzung der gepinnten Beiträge, jedoch darüber

Also bei mir (v1.3) hat der entsprechende Thread auch im Forum in dem er gestartet wurde einen "besonderen Status".

Share this post


Link to post

Ich erhalte folgenden Fehler, wenn ich die Ankündigung wieder ausschalten will:

Fatal error: Call to a member function on a non-object in ...\sources\Moderate.php on line 2166

Da wird folgender Code ausgeführt:

$print->redirect_screen( $ibforums->lang['announce_off'], "act=ST&f=".$this->forum['id']."&t=".$this->topic['tid']."&st=".$ibforums->input['st'] );

Übergeben wird bei dem Aufruf folgendes:

act=ST&f=6&t=57&st=0

Sollte doch so funktionieren oder nicht?

GEFUNDEN !!!

Es fehlt

, $print

bei den globalen Variablen. Muss also so aussehen:

global $ibforums, $DB, $print;
Edited by MatneX

Share this post


Link to post

Danke MatneX, ich habe das aktualisiert.

@Rigo: aber ich hatte vergessen, die Datei zu aktualisieren ;)

Trat bei jemand anderes auch der fehler von kingofcomedy auf? bei mir geht es, aber es kann ja etwas in der Anleitung falsch sein.

Share this post


Link to post

Also bei meinen Tests wars genauso, das das Thema auch in dem Forum als Ankündigung war. Fand es aber weniger als Fehler, als ganz nützlich, wenns überall angezeigt wird :)

@Chris: Ging mir auch nur darum, das er die Lösung eine Seite weiter vor schon gefunden hätte :D

Achja, wenn du mit dem Mod soweit durch bist sag bescheid, ich erstellt dir dann fix die Anleitung. :)

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  

×