News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 29
Seite [1] 2 >
Mel0ne


Wannabe poster




Beiträge: 24
# Thema - 30.01.2012 um 11:18 Uhr
Hi, ich hab das ganze gestern im Entwicklertreff gepostet, nun ist mir aaber aufgefallen das es hier besser reinpasst.

Also, ich bin gerade beim erstellen der 3ten Version unserer Vereinsseite, da wir extrem viel redaktionelle Arbeit machen, unter anderem auch einen Bereich für Gaming News haben, würde ein Tag-System das auch in die Suchfunktion eingebunden ist uns sehr weiterhelfen.

Leider reichen meine php Kentnisse nicht ganz aus um so etwas selbst zum machen, daher hoffe ich das ich hier ein bisschen Unterstützung dabei bekomme.




Also um das System kurz zu erläutern:

Jeder Newseintrag braucht ein weiteres Datenbankfeld in dem einzelne Begriffe (Tags) eingetragen werden (Trennung dieser Begriffe vielleicht über Kommas?)

Diese Tags ersetzten praktisch die Kategorien

Über einen Klick auf den Tag (in der news/view) sollen dann alle News mit dem Tag aufgelistet werden

Auch in der Suche sollen Tags mit einbezogen werden




Datenbankfeld anlegen sowie das eintragen und auslesen in der create, edit und view.php stellen keine Probleme da. Mein Problem liegt an der Funktion ein Datenbankfeld mit mehreren Wörtern durch eine "Sonderzeichen" (z. B. Kommas) zu Trennen.

Das anzeigen der News (in list oder recent) nach Tags bereitet mir auch Probleme.

Es wäre spitze wenn ihr einen Ansatz für dieses Vorhaben für mich habt.
Danke für eure Hilfe schonmal im vorraus.
LG, Tobi
Inaktiv
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 1 - 30.01.2012 um 11:36 Uhr
Tags schreiben bei News in einem input:

test, test 3,test 4

nachher:
explode(",",$array);

und zum Suchen:
SQL:
news_tags LIKE "peter";

Als Ansatz, das sind alles Befehle die dir helfen sollte. Bin leider auch grade Unterwegs, sieh das daher erst als Denkanstoß :p


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 2 - 30.01.2012 um 12:27 Uhr
okay, das sql feld funktioniert und die Tags lassen sich per create und edit eintragen, jetzt hab ich in der view die Ausgabe genau so wie die headline ausgegeben wird, jetzt muss ich da nur irgendwie den explode reinsetzten, aber wie?


Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 3 - 30.01.2012 um 13:50 Uhr
Naja, du hast ein String und explode macht ihn mit dem Limiter "," zu einem Array.

Somit kannst du dann mit CS eine LOOP Erstellen welche die einzelnen Tags mit Formatierung XY ausgibt.


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 4 - 30.01.2012 um 23:12 Uhr
Ich hab leider viel zu wenig Syntax Kenntnisse um das hinzubekommen, kannst du mir mal ein Beispiel anhand der news_headline geben?


Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 5 - 31.01.2012 um 00:06 Uhr
Wie man aus einem String mehrere Elemente macht?

Klar, schreibe ich eben nen Beispiel aus'm Kopf:

 
1.
2.
3.
4.
5.
6.
7.
8.
9.
1. / 2. / ... 
 
$tags
=explode(",",$news['news_tags']);
$tags_count=count($tags);

for(
$i=0$i<$tagscount$i++){
   
$data['tags'][$i]['name']=$tags[$i];
}



und schon könntest du mit

 
1.
2.
3.
4.
5.
6.
7.
1. / 2. / ... 
 
<ul>
   {
loop:tags}
   <
li>{tags:name}</li>
   {
stop:tags}
</
ul>


im Template eine Liste der Tags ausgeben, welche mit einem Komma getrennt in einem String gespeichert sind.

news_tags ist ein eigenes Feld, welches du angelegt hast. D.h. z.B. "gaming, headset, hardware"
dann würde in der Liste erscheinen
 
1.
2.
3.
4.
5.
6.
7.
1. / 2. / ... 
 
<ul>
   <
li>gaming</li>
   <
li>headset</li>
   <
li>hardware</li>
</
ul>


Hoffe das hilft dir was weiter, sonst frag gerne einfach nach!

Gruß.


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 6 - 01.02.2012 um 22:59 Uhr
Leider funktioniert es noch nicht ganz, einen Schreibfehler habe ich entdeckt. Im ersten Feld Zeile 5 müsste es tags_count anstelle von tagscount heißen (ist das logisch richtig?).

Da mein Datenbankfeld "news_tag" hab ich da in Zeile 2 ein "s" weggenommen.

Er gibt mir auf der Seite nach diesen Änderungen einfach nur das ul Element und nur ein li Element ohne Inhalt aus (obwohl es 3 Elemente sein müssen da in der DB auch 3 Elemente mit Komma getrennt sind.

Ist es irgendwie wichtig wo genau der code in der view.php steht?

Vielen Dank schonmal für deine Hilfe


Zuletzt editiert von Mel0ne am 01.02.2012 um 23:00 Uhr (1x Editiert)
Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 7 - 02.02.2012 um 00:29 Uhr
Mal mit
die(print_r($tags));

überprüft, ob das Array was durch's Explode erstellt wurde, gefüllt ist?


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 8 - 02.02.2012 um 00:38 Uhr
News - Details
Informationen zur ausgewählten Nachricht.
Array ( [0] => ) 1


Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 9 - 02.02.2012 um 00:48 Uhr
dannnnn muss ich dir sagen, machst du nicht alles richtig

Kopier mal die ganze view.php hier rein. in einem [ PHP ] tag


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 10 - 02.02.2012 um 00:50 Uhr
 
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
1. / 2. / ... 
<?php
// ClanSphere 2010 - www.clansphere.net
// $Id$

$cs_lang cs_translate('news');

$cs_get cs_get('id,where');

$cs_option cs_sql_option(__FILE__'news');
$abcode explode(","$cs_option['abcode']);

$cs_news_id = empty($cs_get['id']) ? $cs_get['id'];
if (!empty(
$cs_get['where'])) $cs_news_id $cs_get['where'];

$from 'news nws INNER JOIN {pre}_users usr ON nws.users_id = usr.users_id INNER JOIN {pre}_categories cat ON nws.categories_id = cat.categories_id';
$select 'nws.news_id AS news_id, nws.news_headline AS news_headline, nws.news_time AS news_time, nws.news_text AS news_text, nws.news_tag AS news_tag, nws.news_close AS news_close, nws.news_public AS news_public, nws.news_pictures as news_pictures, nws.users_id AS users_id, usr.users_nick AS users_nick, usr.users_active AS users_active, usr.users_delete AS users_delete, nws.categories_id AS categories_id, cat.categories_access AS categories_access, cat.categories_picture AS categories_picture, nws.news_mirror AS news_mirror, nws.news_mirror_name AS news_mirror_name, nws.news_readmore AS news_readmore, nws.news_readmore_active AS news_readmore_active';
$cs_news cs_sql_select(__FILE__,$from,$select,"news_id = '" $cs_news_id "'");

$head['head']['mod'] = $cs_lang['mod_name'];
$head['head']['action'] = $cs_lang['details'];
$topline = empty($cs_news['news_public']) ? 'not_public' 'news_info';
$head['head']['topline'] = $cs_lang[$topline];

echo 
cs_subtemplate(__FILE__,$head,'news','head');

$pub $cs_news['categories_access'] > $account['access_news'] ? $cs_news['news_public'];
if(!empty(
$pub)) {
  
$com_where "comments_mod = 'news' AND comments_fid = '" $cs_news['news_id'] . "'";
  
$data['news']['comments_count'] = cs_sql_count(__FILE__,'comments',$com_where);

  
$start floor($data['news']['comments_count'] / ($account['users_limit'] + 1)) * $account['users_limit'];
  
$cs_news_com_count $data['news']['comments_count'] - $start;
  
$data['news']['comments_link'] = cs_link($cs_lang['comments'],'news','view','id=' $cs_news['news_id'] . '&start=' $start '#com' $cs_news_com_count);

$tag=explode(",",$news['news_tag']);
$tag_count=count($tag);

for(
$i=0$i<$tag_count$i++){
   
$data['tag'][$i]['name']=$tag[$i];
}

die(
print_r($tag));

  
$cs_main['page_title'] = $cs_news['news_headline'];
  
$data['news']['news_headline'] = cs_secure($cs_news['news_headline']);
  
$data['news']['news_time'] = cs_date('unix',$cs_news['news_time'],1);
  
$data['news']['news_text'] = cs_secure($cs_news['news_text'], $abcode[0], $abcode[1], $abcode[2], $abcode[3], $abcode[4]);

  if(empty(
$cs_news['news_readmore_active']))
    
$data['news']['news_readmore'] = '';
  else {
    
$data['news']['news_readmore']  = cs_secure($cs_news['news_readmore'], $abcode[0], $abcode[1], $abcode[2], $abcode[3], $abcode[4]);
    
$data['news']['news_readmore'] .= cs_html_br(2);
  }
  
  
$data['news']['users_link'] = cs_user($cs_news['users_id'],$cs_news['users_nick'], $cs_news['users_active'], $cs_news['users_delete']);
  
$data['if']['catimg'] = empty($cs_news['categories_picture']) ? false true;
  
$data['news']['url_catimg'] = empty($data['if']['catimg']) ? '' 'uploads/categories/'.$cs_news['categories_picture'];

  
$data['news']['pictures'] = '';
  if(!empty(
$cs_news['news_pictures'])) {
    
$news_pics explode("\n",$cs_news['news_pictures']);
    
$data['news']['pictures'] = cs_html_br(2);
    foreach(
$news_pics AS $pic) {
      
$link cs_html_img('uploads/news/thumb-' $pic);
      
$data['news']['pictures'] .= cs_html_link('uploads/news/picture-' $pic,$link) . ' ';
    }
  }

  
$data['if']['show'] = false;

  if(!empty(
$cs_news['news_mirror'])) {
    
$data['if']['show'] = true;

    
$temp_mirror explode("\n"$cs_news['news_mirror']);
    
$temp_mirror_name explode("\n"$cs_news['news_mirror_name']);

    
$tpl_run 0;

    for(
$run_mirror=1$run_mirror count($temp_mirror); $run_mirror++) {
      
$num $run_mirror;

      if(
$run_mirror == (count($temp_mirror) - 1)) {
          
$data['mirror'][$tpl_run]['dot'] =  '';
      }
      elseif(!empty(
$run_mirror)) {
        
$data['mirror'][$tpl_run]['dot'] =  ' - ';
      }
      else {
        
$data['mirror'][$tpl_run]['dot'] =  ' - ';
      }
      
$url strpos($temp_mirror[$run_mirror],'://') === false 'http://' $temp_mirror[$run_mirror] : $temp_mirror[$run_mirror];
      
$data['mirror'][$tpl_run]['news_mirror'] = cs_html_link($url,$temp_mirror_name[$run_mirror]);
      
$tpl_run++;
    }
  }

  echo 
cs_subtemplate(__FILE__,$data,'news','view');

  echo 
cs_html_anchor('com0');
  include_once(
'mods/comments/functions.php');

  if(!empty(
$data['news']['comments_count'])) {
    echo 
cs_html_br(1);
    echo 
cs_comments_view($cs_news_id,'news','view',$data['news']['comments_count']);
  }
  echo 
cs_comments_add($cs_news_id,'news',$cs_news['news_close']);
}


In der tpl steht folgendes:
 
1.
2.
3.
4.
5.
1. / 2. / ... 
 <ul>
   {
loop:tag}
   <
li>{tag:name}</li>
   {
stop:tag}
</
ul>


Zuletzt editiert von Mel0ne am 02.02.2012 um 00:52 Uhr (1x Editiert)
Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 11 - 02.02.2012 um 00:52 Uhr
Überprüft in der DB obs gefüllt ist?


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 12 - 02.02.2012 um 00:57 Uhr


Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 13 - 02.02.2012 um 01:08 Uhr
Ham. Nun bin ich verwirrt.

Mach mal die($news['news_tag']);


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 14 - 02.02.2012 um 01:13 Uhr
Jetzt hast du mich verwirrt, was soll ich machen?

Edit: jetzt hab ich verstanden, der Artikel "die" hat mich irritiert

Edit2: da kommt nur das raus:

News - Details
Informationen zur ausgewählten Nachricht.

hab das andere die rausgenommen


Zuletzt editiert von Mel0ne am 02.02.2012 um 01:18 Uhr (2x Editiert)
Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 15 - 02.02.2012 um 01:21 Uhr
Dann zieht er die news_tag nicht aus der DB korrekt, hast du den Query mal überprüft?

Alternativ, die(print_r($cs_news));


Zuletzt editiert von Schalla ClanSphere Team am 02.02.2012 um 01:21 Uhr (1x Editiert)
Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 16 - 02.02.2012 um 01:25 Uhr
Doch, wenn ich folgendes mache dann gibt er mir die news_tag aus (natürlich ohne die "Komma-Trenn-Funktion"^^ (Zeile 36 )
 
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
1. / 2. / ... 
<?php
// ClanSphere 2010 - www.clansphere.net
// $Id$

$cs_lang cs_translate('news');

$cs_get cs_get('id,where');

$cs_option cs_sql_option(__FILE__'news');
$abcode explode(","$cs_option['abcode']);

$cs_news_id = empty($cs_get['id']) ? $cs_get['id'];
if (!empty(
$cs_get['where'])) $cs_news_id $cs_get['where'];

$from 'news nws INNER JOIN {pre}_users usr ON nws.users_id = usr.users_id INNER JOIN {pre}_categories cat ON nws.categories_id = cat.categories_id';
$select 'nws.news_id AS news_id, nws.news_headline AS news_headline, nws.news_time AS news_time, nws.news_text AS news_text, nws.news_tag AS news_tag, nws.news_close AS news_close, nws.news_public AS news_public, nws.news_pictures as news_pictures, nws.users_id AS users_id, usr.users_nick AS users_nick, usr.users_active AS users_active, usr.users_delete AS users_delete, nws.categories_id AS categories_id, cat.categories_access AS categories_access, cat.categories_picture AS categories_picture, nws.news_mirror AS news_mirror, nws.news_mirror_name AS news_mirror_name, nws.news_readmore AS news_readmore, nws.news_readmore_active AS news_readmore_active';
$cs_news cs_sql_select(__FILE__,$from,$select,"news_id = '" $cs_news_id "'");

$head['head']['mod'] = $cs_lang['mod_name'];
$head['head']['action'] = $cs_lang['details'];
$topline = empty($cs_news['news_public']) ? 'not_public' 'news_info';
$head['head']['topline'] = $cs_lang[$topline];

echo 
cs_subtemplate(__FILE__,$head,'news','head');

$pub $cs_news['categories_access'] > $account['access_news'] ? $cs_news['news_public'];
if(!empty(
$pub)) {
  
$com_where "comments_mod = 'news' AND comments_fid = '" $cs_news['news_id'] . "'";
  
$data['news']['comments_count'] = cs_sql_count(__FILE__,'comments',$com_where);

  
$start floor($data['news']['comments_count'] / ($account['users_limit'] + 1)) * $account['users_limit'];
  
$cs_news_com_count $data['news']['comments_count'] - $start;
  
$data['news']['comments_link'] = cs_link($cs_lang['comments'],'news','view','id=' $cs_news['news_id'] . '&start=' $start '#com' $cs_news_com_count);

  
$data['news']['news_tag'] = cs_secure($cs_news['news_tag']);

  
$cs_main['page_title'] = $cs_news['news_headline'];
  
$data['news']['news_headline'] = cs_secure($cs_news['news_headline']);
  
$data['news']['news_time'] = cs_date('unix',$cs_news['news_time'],1);
  
$data['news']['news_text'] = cs_secure($cs_news['news_text'], $abcode[0], $abcode[1], $abcode[2], $abcode[3], $abcode[4]);

  if(empty(
$cs_news['news_readmore_active']))
    
$data['news']['news_readmore'] = '';
  else {
    
$data['news']['news_readmore']  = cs_secure($cs_news['news_readmore'], $abcode[0], $abcode[1], $abcode[2], $abcode[3], $abcode[4]);
    
$data['news']['news_readmore'] .= cs_html_br(2);
  }
  
  
$data['news']['users_link'] = cs_user($cs_news['users_id'],$cs_news['users_nick'], $cs_news['users_active'], $cs_news['users_delete']);
  
$data['if']['catimg'] = empty($cs_news['categories_picture']) ? false true;
  
$data['news']['url_catimg'] = empty($data['if']['catimg']) ? '' 'uploads/categories/'.$cs_news['categories_picture'];

  
$data['news']['pictures'] = '';
  if(!empty(
$cs_news['news_pictures'])) {
    
$news_pics explode("\n",$cs_news['news_pictures']);
    
$data['news']['pictures'] = cs_html_br(2);
    foreach(
$news_pics AS $pic) {
      
$link cs_html_img('uploads/news/thumb-' $pic);
      
$data['news']['pictures'] .= cs_html_link('uploads/news/picture-' $pic,$link) . ' ';
    }
  }

  
$data['if']['show'] = false;

  if(!empty(
$cs_news['news_mirror'])) {
    
$data['if']['show'] = true;

    
$temp_mirror explode("\n"$cs_news['news_mirror']);
    
$temp_mirror_name explode("\n"$cs_news['news_mirror_name']);

    
$tpl_run 0;

    for(
$run_mirror=1$run_mirror count($temp_mirror); $run_mirror++) {
      
$num $run_mirror;

      if(
$run_mirror == (count($temp_mirror) - 1)) {
          
$data['mirror'][$tpl_run]['dot'] =  '';
      }
      elseif(!empty(
$run_mirror)) {
        
$data['mirror'][$tpl_run]['dot'] =  ' - ';
      }
      else {
        
$data['mirror'][$tpl_run]['dot'] =  ' - ';
      }
      
$url strpos($temp_mirror[$run_mirror],'://') === false 'http://' $temp_mirror[$run_mirror] : $temp_mirror[$run_mirror];
      
$data['mirror'][$tpl_run]['news_mirror'] = cs_html_link($url,$temp_mirror_name[$run_mirror]);
      
$tpl_run++;
    }
  }

  echo 
cs_subtemplate(__FILE__,$data,'news','view');

  echo 
cs_html_anchor('com0');
  include_once(
'mods/comments/functions.php');

  if(!empty(
$data['news']['comments_count'])) {
    echo 
cs_html_br(1);
    echo 
cs_comments_view($cs_news_id,'news','view',$data['news']['comments_count']);
  }
  echo 
cs_comments_add($cs_news_id,'news',$cs_news['news_close']);
}


Zuletzt editiert von Mel0ne am 02.02.2012 um 01:25 Uhr (1x Editiert)
Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 17 - 02.02.2012 um 01:30 Uhr
$tags=explode(",",$cs_news['news_tag']);

die(print_r($tags));


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 18 - 02.02.2012 um 01:32 Uhr
News - Details
Informationen zur ausgewählten Nachricht.
Array ( [0] => tag1 [1] => tag2 [2] => tag3 [3] => tag4 ) 1


Das sieht doch nach was aus, wie mach ich jetzt weiter?


Inaktiv
|
Deaktiviert

Supporter
Supporter



Beiträge: 1287
# Antwort: 19 - 02.02.2012 um 01:35 Uhr
 
1.
2.
3.
4.
5.
6.
7.
1. / 2. / ... 
 
$tag_count
=count($tags);

for(
$i=0;$i<$tag_count;$i++){
      
$data['tag'][$i]['name']=$tag[$i];
}


Funkt das dann Final?


Inaktiv
|
Mel0ne
Thread-Ersteller


Wannabe poster




Beiträge: 24
# Antwort: 20 - 02.02.2012 um 01:39 Uhr
Mit noch einer kleinen Änderung:
 
1.
2.
3.
4.
5.
1. / 2. / ... 
 $tag_count=count($tags);

for(
$i=0;$i<$tag_count;$i++){
      
$data['tag'][$i]['name']=$tags[$i];
}


funktioniert es!!!

Vielen Vielen Dank!


Inaktiv
|
Antworten: 29
Seite [1] 2 >


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo