Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Read More Funktion (Nach x Zeichen) in News Einbauen ?

billy23 / 8 Antworten / Baumansicht Nickles

Hallo,

es geht wieder mal um mein Newsscript. Folgendes würde ich gerne an Funktion hinzufügen, was mir aber nicht möglich ist.

Die News werden im Form eingetragen, von dort aus an die work.php gesandt und dort per Arrays in die Datenbank geschrieben. Anschliessend mittels $ausgabe[artikel] auf der ausgabe.php wieder angezeigt. Nur würde ich gerne nach sagen wir 20zeichen ein "read more" machen, sprich das ich auf den link klicke und ich dann den restlichen Text sehe. Nun gibt es dafür ja eine php Funktion, leider hat mich google im stich gelassen oder ich bin zu doof zum suchen.

Hier wäre der das Javascript des Klapptextes:

[Code]

script language=\'JavaScript\'
function swap_content( span ) {
displayType = ( document.getElementById( span ).style.display == \'none\' ) ? \'block\' : \'none\';
document.getElementById( span ).style.display = displayType;
}
/script>

[/CODE]

Und hier der klapptext ansich:

[CODE]

a href="#" onclick="swap_content(\'1\'); return false;">Read More/a>br>
span id="1" style="display: none">br>
Ich bin die ganze News :-)/span>

[/CODE]

Wie einbauen ? Wie vorgehen ? ich müsste die news ja schon beim Senden teilen lassen oder ? irgendwie mit VARCHAR die Zeichen begrenzen und den rest in eine andere Zeile eintragen lassen oder ? Falsche überlegung ? desweiteren wird ja mit ID\'s gearbeitet, wie kann ich derm script sagen das es sich immer die aktuelle ID holt, und diese auch der news zuordnet, nicht damit ich auf die oberste news klicke, und sich die unterste öffnet ;) .. müsste ich doch jeder gleichzeitig eine ID zuweisen oder irre ich mich ?

HILFE ! :) Fragen über Fragen, keine Antworten

Gruß

bei Antwort benachrichtigen
xafford billy23 „Read More Funktion (Nach x Zeichen) in News Einbauen ?“
Optionen

So wie dein Quelltext aussieht willst Du wohl mit JavaScript auf dem Client erst den Text "zerhacken", warum eigentlich? Wenn der User schon die Bandbreite Opfern mußte sich den ganzen Text vom Server zu laden, dann kannst Du ihn ihm auch gleich ganz zeigen, falls vom Design nichts dagegen spricht, die Ladezeit verkürzt das Ganze jedenfalls nicht.
Falls Du es doch unbedingt mit JavaScript auf dem Client lösen willst dann geht es folgendermaßen:

var sFullString="Der Text der vom Server kommt";
var sShortString=sFullString.substr(0,20);

Sinnvoller für bessere Ladezeiten ist es aber, wenn Du schon aus der Datenbank zuerst nur den Kurztext holst, und bei Bedarf vom Server dann den langen Text:

$sql="SELECT id,SUBSTRING(text,0,20) FROM tabelle ...";

und dann erst bei Bedarf den ganzen Text.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
billy23 xafford „So wie dein Quelltext aussieht willst Du wohl mit JavaScript auf dem Client erst...“
Optionen

hm okey, also das hört sich super an, scheint ja der zweite mit substring(text,0,20) der bessere zu sein, wie kann ich den jedoch verwenden, da ich ja mit arrays arbeite, und ich mit dem einbauen nur error erhielt.

ich habe mal alle meine 2 files auf meinen ftp geupped, damit du dir einen überblick machen kannst, und ich hier nicht den code halb rein posten muss.

ich habe die dateien in ausgabe.txt & work.txt umgenannt, damit du sie dir saugen kannst falls du mir helfen möchtest.

Wäre klasse, oder du mir evtl. eine url posten kannst, in der beschrieben ist wie man das korrekt eingliedert. auf meinen php seiten finde ich da keine hilfe dazu.

Gruß

http://www.e-twentythree.de/xafford/ausgabe.txt
http://www.e-twentythree.de/xafford/work.txt

bei Antwort benachrichtigen
xafford billy23 „hm okey, also das hört sich super an, scheint ja der zweite mit substring...“
Optionen

Ändern müsstest Du nur die ausgabe.php in:

<head>
<title>Inhalte ausgeben</title>
</head>
<body>
<?php

$host = "localhost";
$user = "root";
$password = "";
$dbname = "links";
$tabelle ="testdb";
$limit=30;

// Annahmen: Feld mit dem Artikeltext heisst artikel
$gid = ( !empty($_GET['id']) ? $_GET['id'] : false ) ;

$dbverbindung = mysql_connect ($host, $user, $password);
if(!$ID){
$dbanfrage = "SELECT `id`,`header`,`datum`,SUBSTRING(`artikel`,0,20) AS `artikel`, `name` FROM $tabelle WHERE 1 ORDER BY id DESC LIMIT $limit";
}else{
$dbanfrage = "SELECT `id`,`header`,`datum`,`artikel`, `name` FROM $tabelle WHERE id='$gid'";
}
if($result = mysql_query ($dbname, $dbanfrage, $dbverbindung)){
while ($ausgabe = mysql_fetch_array ($result)){
echo "
<table width=\"500\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\">
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Titel:</font> <font color=\"#996600\" face=\"verdana\" size=\"1\">{$ausgabe['header']}</font></td>
</tr>
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Date:</font> <font color=\"#666666\" face=\"verdana\" size=\"1\">{$ausgabe['datum']}</font></td>
</tr>
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Poster:</font> <font color=\"#666666\" face=\"verdana\" size=\"1\">{$ausgabe['name']}</font></td>
</tr>
<tr>
<td bgcolor=\"#e2e2e2\"><font color=\"#999999\" face=\"verdana\" size=\"1\">
{$ausgabe['artikel']}...<br />
<a href=\"{$_SERVER['PHP_SELF']}?id={$ausgabe['id']}\">mehr lesen</a>
</font></td>
</tr>
<tr>
<td> </td>
</tr>
</table>";
}
}

mysql_close ($dbverbindung)

?>
</body>

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
billy23 xafford „Ändern müsstest Du nur die ausgabe.php in: Inhalte ausgeben “
Optionen

Hallo xafford, hatte den teil jetzt einfach reingepinnt in mein file, und bekam einen fehler in zeile 23: wrong parameter for mysql_fetch_row oder so ähnlich. Habe dann das if($result = mysql_query ( in if($result = mysql_db_query ( geändert, und es ging.

Nun habe ich das javascript eingefügt, und es versucht zum laufen zu bringen, ohne erfolg.

www.e-twentythree.de/xafford/ausgabe_neu.txt ist das file, verstehe das nicht wie ich die dynamischen "id" auslese bzw. zuweise. Da sich sonst ja alle felder öffnen wenn sie die selbe "Id" haben.

Gruß

bei Antwort benachrichtigen
xafford billy23 „Hallo xafford, hatte den teil jetzt einfach reingepinnt in mein file, und bekam...“
Optionen

Javascript ist hier keines mehr nötig, das war eine entweder-oder Lösung. Wieso die selbe Id? Hast Du in der Datenbank kein Feld Id, das jedem Eintrag eine eindeutige Id zuweist?

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
billy23 xafford „Javascript ist hier keines mehr nötig, das war eine entweder-oder Lösung....“
Optionen

Achso, okey habe dann nur deinen teil komplett reinkopiert, und getestet. bekomme jedoch nur 3 punkte angezeigt wo normalerweise ja die ersten 20 zeichen sein sollten, und wenn ich auf "mehr lesen" klicke passiert nichts.

whats happened ?

gruß

bei Antwort benachrichtigen
xafford billy23 „Achso, okey habe dann nur deinen teil komplett reinkopiert, und getestet....“
Optionen

Ich hab 2 Fehler in das Script gebaut gehabt, ändere den PHP-Code mal folgendermaßen:

$host = "localhost";
$user = "root";
$password = "";
$dbname = "links";
$tabelle ="testdb";
$limit=30;
$maxlength=20;

// Annahmen: Feld mit dem Artikeltext heisst artikel
$gid = ( !empty($_GET['id']) ? $_GET['id'] : false ) ;

$dbverbindung = mysql_connect ($host, $user, $password);

if(!$gid){
$dbanfrage = "SELECT `id`,`header`,`datum`,CONCAT(SUBSTRING(`artikel`,1,$maxlength),'...<a href=\"{$_SERVER[\'PHP_SELF\']}?id=',id,'\">mehr lesen</a>') AS `artikel`, `name` FROM $tabelle WHERE 1 ORDER BY id DESC LIMIT $limit";
}else{
$dbanfrage = "SELECT `id`,`header`,`datum`,`artikel`, `name` FROM $tabelle WHERE id='$gid'";
}
if($result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung)){
while ($ausgabe = mysql_fetch_array ($result)){
echo "
<table width=\"500\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\">
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Titel:</font> <font color=\"#996600\" face=\"verdana\" size=\"1\">{$ausgabe['header']}</font></td>
</tr>
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Date:</font> <font color=\"#666666\" face=\"verdana\" size=\"1\">{$ausgabe['datum']}</font></td>
</tr>
<tr>
<td bgcolor=\"#CCCCCC\"><font color=\"#000000\" face=\"verdana\" size=\"1\">Poster:</font> <font color=\"#666666\" face=\"verdana\" size=\"1\">{$ausgabe['name']}</font></td>
</tr>
<tr>
<td bgcolor=\"#e2e2e2\"><font color=\"#999999\" face=\"verdana\" size=\"1\">
{$ausgabe['artikel']}...<br />
<a href=\"{$_SERVER['PHP_SELF']}?id={$ausgabe['id']}\" onclick=\"swap_content('1'); return false;\">mehr lesen</a>
</font></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td id=\"1\" style=\"display: none\"></td>
</tr>
<tr>
<td height=\"20\"> </td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>";
}
}

mysql_close ($dbverbindung)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
billy23 xafford „Ich hab 2 Fehler in das Script gebaut gehabt, ändere den PHP-Code mal...“
Optionen

Hallo,

hatte das jetzt probiert eingebaut und es lief auch, leider nicht so wie ich es mir vorstellte, da ja die gesamte News anschliessend auf einer Seperaten Seite angezeigt wird, und dieser Klappeffekt nicht vorkommt.

Nun habe ich ein bissle überlegt und habe einfach zwei Felder bei der Eingabe der news geamcht, das normale und das "read more" feld, in das ich den weiteren text in eine extra zeile schreibe. Das dann auch später mit zwei Arrays wieder auslese, und zwar $Array[artikel] und $Array[more] ... das funzt auch wunderbar. Jetzt habe ich dann versucht den Klapptext einzubauen, hat auch wunderbar funktioniert, ich habe nur ein problem, wie kann ich die id automatisch dem javascript zuweisen ? damit er auch immer den klapptext der aktuellen news öffnet ?!

Diese Zeile ist entscheident

id=\"1\" style=\"display: none\">$ausgabe[more]/font>/td>

da genau dort bei id=\"1\" ja die nummer zugewiesen wird, un eben selbige müsste dynamisch werden ?! .. *verwirrt*

Hier habe ich das Aktuelle File das so eigentlich läuft geupped:

www.e-twentythree.de/xafford/ausgabe.txt

bei Antwort benachrichtigen