Menü

  Login

  Shoutbox

  Forum » Fragen zu Ilch » Module von dieser Seite » Top News Box


Top News Box
Peter
Jungspund

User Pic

Posts: 25
# 11.03.2015 - 15:59:15
    zitieren



Hallo,
ich nutze dein News Extendes Modul, was super genial ist.

Das einzige was ich dazu bräuchte wäre eine Box für die Top News. Das wenn eine News als Top News deklariert ist diese in der Box angezeigt werden.

ist es einfach solch eine Box zu erstellen in der immer die aktuellen Top News angezeigt werden?..

Danke

Gruß
Peter


Zuletzt modifiziert von Peter am 11.03.2015 - 18:26:49
Mairu
Administrator

User Pic

Posts: 1908
# 11.03.2015 - 18:46:34
    zitieren



Soll denn nur der Titel oder die komplette News angezeigt werden?

Von der Sache her müsste quasi nur der Code, der dafür zuständig ist aus der contents/news/news.php in eine Datei kopiert und im boxes Ordner eingefügt werden.
Peter
Jungspund

User Pic

Posts: 25
# 11.03.2015 - 19:01:26
    zitieren



also die kompletten news.. bis [previewende]

ja so ähnlich hatte ich das versucht wollte leider nur nicht so..

ich habe zumindest top news aus den standart news entfernt.. das hat auch geklappt.. weil ich will ja nicht 2 mal diese news. ^^
Mairu
Administrator

User Pic

Posts: 1908
# 12.03.2015 - 09:05:45
    zitieren



Ok die Funktion für die Gruppenrechte fehlt dann, aber das ist ja kein großes Hindernis.

 Php von Datei boxes/topnews.php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
  <?php
/**
 * Topnewsbox for NewsExtended
 */

//Gruppenrechte
$groups 0;
foreach (
$_SESSION['authgrp'] as $id => $bool){
    
$groups $groups pow(2$id);
}

// Topnews ausgeben
$tn_id intval(@db_result($news_opts db_query("SELECT v1, v2 FROM prefix_allg WHERE k = 'news' LIMIT 1"), 00));
$tn_koms = @db_result($news_opts01);
$tn_sql db_query("SELECT a.news_title as title, a.news_text, a.news_kat, a.news_recht, a.news_groups, a.html,
                DATE_FORMAT(a.news_time,'%d. %m. %Y - %H:%i Uhr') as datum,
                DATE_FORMAT(a.news_time,'%W') as dayofweek,
                b.name as username,
                c.name as editorname,
                a.html,
                a.edit_time,
                a.klicks,
                b.id as uid
            FROM prefix_news a
            LEFT JOIN prefix_user as b ON a.user_id = b.id
            LEFT JOIN prefix_user as c ON a.editor_id = c.id
            WHERE a.news_id = 
$tn_id AND a.`show` > 0 AND a.`show` <= UNIX_TIMESTAMP() AND (a.endtime IS NULL OR a.endtime > UNIX_TIMESTAMP()) AND
            (((" 
pow(2abs($_SESSION['authright'])) . " | a.news_recht) = a.news_recht) OR
            (a.news_groups != 0 AND ((a.news_groups ^ 
$groups) != (a.news_groups | $groups))))");
if (
db_num_rows($tn_sql) > 0) {
    
$tn_r db_fetch_assoc($tn_sql);

    
$dontShow false;
    if ((
pow(2abs($_SESSION['authright'])) | $tn_r['news_recht']) != $tn_r['news_recht']) {
        
$dontShow true;
    }
    if (
$dontShow) {
        foreach(
$_SESSION['authgrp'] as $id => $bool) {
            if (
$bool and (pow(2abs($id)) | $tn_r['news_groups'] == $tn_r['news_groups'])) {
                
$dontShow false;
                break;
            }
        }
    }
    if (!
$dontShow) {
        
$tn_tpl = new tpl ('news/top');
        if (
$tn_koms) {
            
$tn_r['kom'] = db_count_query("SELECT COUNT(id) FROM prefix_koms WHERE uid = $tn_id AND cat = 'NEWS'");
        }
        
$tn_r['showkom'] = $tn_koms;
        if (
strpos ($tn_r['news_text'], '[PREVIEWENDE]') !== false) {
            
$a explode('[PREVIEWENDE]' $tn_r['news_text']);
            
$tn_r['news_text']= $a[0];
            
$tn_r['readwholenews'] = '<a href="index.php?news-' $tn_id '" alt="mehr lesen" title="mehr lesen"><img src="include/images/icons/news/more.gif" alt="mehr lesen" border="0"></a>';
        } else {
            
$tn_r['readwholenews'] = '';
        }
        
$tn_r['id'] = $tn_id;
        
$tn_r['klicks'] = '<img src="include/images/icons/news/counter.gif" alt="' $tn_r['klicks']. ' mal gelesen" title="' $tn_r['klicks']. ' mal gelesen" border="0">';
        
$tn_r['datum']  = $lang[$tn_r['dayofweek']] . ' ' $tn_r['datum'];
        
$tn_r['edit']   = is_null($tn_r['edit_time']) ? '' '<br /><i>zuletzt ge&auml;ndert am ' date('d.m.Y - H:i'strtotime($tn_r['edit_time'])) . '&nbsp;Uhr';
        if (!empty(
$tn_r['edit']) and $tn_r['editorname'] != $tn_r['username']) {
            
$tn_r['edit'].= ' von ' $tn_r['editorname']. '</i>';
        } elseif (!empty(
$tn_r['edit'])) {
            
$tn_r['edit'].= '</i>';
        }

        
$tn_r['kate'] = news_find_kat($tn_r['news_kat']);
        
$tn_r['text'] = $tn_r['html']? $tn_r['news_text']: bbcode($tn_r['news_text']);
        
$tn_tpl->set_ar_out($tn_r0);
        unset(
$tn_tpl);
    }
} else {
    echo 
'Keine aktuelle Topnews';
}
Peter
Jungspund

User Pic

Posts: 25
# 12.03.2015 - 13:45:14
    zitieren



hammer!

vielen dank!

ehm in zeile 69 kommt bbcode klammer vor, wird an der stelle der text von bbcode in html umgewandelt?

ich würde gern den text anpassen, wenn zB ein Bild vor die news kommt. das ich in der topnews.htm eine variable {bild} habe dann könnte ich das besser positionieren.

zurzeit sprengt die box je nachdem was alles vor dem preview steht das design.

derzeit sieht meine top.htm so aus
 HTML
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 <div style='background-image: url(include/contents/news/img/lastnewsbg.png); background-repeat:no-repeat; color: #fff; padding-left:15px; height:325px;'>
<div class='container img-rounded' style='background-color: #222; font-size:14px; color: #fff; padding-top:2px; padding-bottom:2px;'>Top News</div>
<div class='img-rounded' style='padding-top:10px;'>
<div style="font-size:14px; color:#000;">{title}</div>
<div style="font-size:12px; color:#000;">
<?php
$text = {text};
$new_string = substr($text, 1, 10);
echo $new_string;
?>

</div>
<!--<div style="font-size:12px; color:#000;">{text}</div>-->
<div>{readwholenews}</div>
<div>{_if_{showkom}=='1'}<br /><a href="index.php?news-{id}">{kom} {_lang_comments} </a>{/_endif}</div>
</div>
</div>


bei dem php teil würde ich gern die {text} bearbeiten. Das substr ist derzeit nur ein test. man könnte dann mit preg_replace arbeiten um das bild rauszunehmen oder andere dinge am text anzupassen.

meine frage wäre nur wie bekomme ich den {text} nochmal in php bearbeitet

Zuletzt modifiziert von Peter am 12.03.2015 - 14:05:25
Mairu
Administrator

User Pic

Posts: 1908
# 12.03.2015 - 15:20:40
    zitieren



In dem Template kannst du auf jeden Fall kein php verwenden. Letztendlich kannst du aber genau das machen, was du wolltest, musst es halt in der php machen.

Die Variablen werden mit $tn_tpl->set_ar_out($tn_r, 0); ans Template übergeben, wenn du kannst also vorher $tn_r['text'] beliebig anpassen. (Ggf. darauf achten, dass der BBCode noch angwandt wird, also entsprechend davor (noch kein HTML) oder danach BBCode ist zu HTML umgewandelt) ansetzen.

Mir erschließt sich allerdings nicht ganz, warum du überhaupt ein Bild in der Topnews vor [PREVIEWENDE] einfügen willst, wenn du genau weiß, dass du damit die Box sprengst?

Ansonsten kann man auch einiges mit CSS lösen, indem du z.B. eine Klasse für die topnew box nutzt und dann z.B. Bilder eine maximale Größe gibst oder Text automatisch umbrechen willst.
Peter
Jungspund

User Pic

Posts: 25
# 12.03.2015 - 16:02:49
    zitieren



anders rum wenn die News die ich zu Top News machen möchte ein Bild enthält dann wird das bild auch in die Top News box übernommen und das sprengt dann das Design.

Deshalb würde ich gern den news_text anpassen z.B. tags rauszunehmen etc.

so hab das mal eingefügt geift aber irgendwie nicht..

 Php
1:
2:
3:
4:
5:
6:
7:
  <?php
        $tn_r
['kate'] = news_find_kat($tn_r['news_kat']);
        
$tn_r['text'] = preg_replace("#\[img](.*)\[/img\]#Uis"""$tn_r['text']);
        
$tn_r['text'] = preg_replace("#\[b](.*)\[/b\]#Uis"""$tn_r['text']);
        
$tn_r['text'] = $tn_r['html']? $tn_r['news_text']: bbcode($tn_r['news_text']); 
        
$tn_tpl->set_ar_out($tn_r0); 
?>


ps.: noch was anderes in der news extended 1.4c schreibst du es gibt einen filemanager.. wo find ich den? im news modul?
habs gefunden aber leider stimmt da was nicht.


Zuletzt modifiziert von Peter am 12.03.2015 - 18:56:20
Mairu
Administrator

User Pic

Posts: 1908
# 12.03.2015 - 18:53:12
    zitieren



Der Filemanager wird bei CKEditor verwendet. (Also HTML).

Was ich gerade erst in deinem Code gesehen hab, vor der letzten Zeile mit dem BBCode ist der Text nicht in $tn_r['text'] sondern in $tn_r['news_text'], also müsste diese angepasst werden. Wenn du BBCode ersetzt, solltest du es ggf. gleich mit if und else lösen, dass es nur ersetzt wird, wenn es auch eine BBCode News ist. Zumindest solltest du darauf achten, falls du beide Arten (BBCode und HTML) einsetzt.
Peter
Jungspund

User Pic

Posts: 25
# 12.03.2015 - 18:59:00
    zitieren



jap jetzt funktioniert das.. ist es möglich was ich da weg schneide als neue variable auch zu senden?
Mairu
Administrator

User Pic

Posts: 1908
# 12.03.2015 - 22:12:28
    zitieren



Weiß jetzt nicht genau, was du mit senden meinst?

Aber du könntest zum einen mit preg_match_all erst die Vorkommen suchen, bevor du sie ersetzt, oder alternativ mit preg_replace_callback das Ersetzen durch eine Callback durchführen lassen, die den Eingabewert speichert, aber trotzdem am Ende ein leeren String zurückgibt, also es komplett ersetzt.
Peter
Jungspund

User Pic

Posts: 25
# 13.03.2015 - 08:36:47
    zitieren



ja sorry manchmal druck ich mich zu blöde aus..

ich meine ans template übergeben.

wir können ja dann mit {text} den übergebenen Text aufrufen.

könnte man den teil den ich replace
 Code
1:
 [img]...[/img]
dann auch übergeben und evtl mit {bild} oder so aufrufen?

ich bin noch nicht so super fit in php und ich weiß das man mit POST und GET dinge übergeben kann aber an der stelle funktioniert das ja irgendwie anders.


PS.: da scheint was nicht mit dem Filemanager zu stimmen.


Zuletzt modifiziert von Peter am 13.03.2015 - 14:33:53
Mairu
Administrator

User Pic

Posts: 1908
# 13.03.2015 - 18:14:56
    zitieren



Also das mit {bild} hab ich mal umgesetzt.

 Php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
          $tn_r['kate'] = news_find_kat($tn_r['news_kat']);

        
$tn_r['text'] = $tn_r['news_text'];
        
$tn_r['bild'] = '';
        if (!
$tn_r['html']) {
            
//$tn_r['text'] = preg_replace("#\[img](.*)\[/img\]#Uis", "", $tn_r['text']);
            
$tn_r['text'] = preg_replace_callback(
                
"#\[img](.*)\[/img\]#Uis",
                function(
$matches) use (&$tn_r) {
                    if (empty(
$tn_r['bild'])) {
                        
$tn_r['bild'] = '<img src="' $matches[1] . '" />';
                    }
                    return 
'';
                },
                
$tn_r['text']
            );

            
$tn_r['text'] = preg_replace("#\[b](.*)\[/b\]#Uis"""$tn_r['text']);
            
$tn_r['text'] = bbcode($tn_r['text']);
        }


        
$tn_tpl->set_ar_out($tn_r0);
        unset(
$tn_tpl);


Das mit dem Filemanager kommt da in der Browserkonsole ein Fehler (F12 in den meisten Browsern) bzw. geht es in allen Browsern nicht, bzw. welchen benutzt du Auslachen
Peter
Jungspund

User Pic

Posts: 25
# 13.03.2015 - 20:19:58
    zitieren



jo geil funktioniert super!

zum Filemanager Problem:
ich habe das Problem in Mozilla und Chrome. In Mozilla habe ich keine meldung
ins Chrome diese:
 Zitat
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.


es sieht so aus als sei da eine box aber die höhe der box passt nicht..