HTML Code richtig kürzen

01/28/2015 20:42 Crossside#16
Quote:
Originally Posted by .StarSplash View Post
Ein Stack ist eine Datenstruktur, die nach dem L[ast]I[n]F[irst]O[ut]-Prinzip operiert.
Man kanns auch einfacher ausdrücken :D

Stell dir ein Stack vor wie ein Stapel Papier.
Du kannst dort Blätter drauf legen, und wieder runter nehmen.
Du kannst nun aber nur auf das oberste Blatt zugreifen, möchtest du an eins weiter unten musst du zunächst die andern Blätter wegnehmen (die dann aber weg sind).

Nutzt man beispielweise sehr gerne bei Assembler und anderen Sprachen beim Coden.

Halte das aber bisschen für übertrieben sowas zu Scripten wegen diesem Anwendungszweck.. ich weiß ja nicht aber wenn man mich frägt wirkt das nach "Rumgebastel" und nicht wie ne gute Lösung.. aber da scheiden sich die Geister wahrscheinlich.

Man kann sichs halt leicht machen, oder man macht sichs tierisch komplex und aufwändig und implentiert ne Stack-Funktion die Tags schließt.. o.O

grüße
01/28/2015 20:46 .StarSplash#17
Lies mehr als den ersten Satz! ;< Habe doch dasselbe Beispiel noch gebracht D:

Ich halte die Lösung mit Stacks für praktischer als deine, zum einen funktioniert sie immer, egal wie viel man vom Text angezeigt haben will, zum anderen muss man nicht erst im Text einen Marker setzen.
01/28/2015 20:49 NotEnoughForYou#18
Zu erwähnen ist noch, dass es auch das fifo Prinzip, first in first out gibt :P

Also ich fände ja ne Regex-Implementierung für genauso geeignet. Ist zwar vlt. etwas komplizierter, dafür haste ne schöne Regex-Übung drin was man immer brauchen kann.
01/28/2015 20:52 .StarSplash#19
Aber dann hast du keinen Stack sondern ne Queue. Das wäre hier aber das falsche Prinzip.
01/28/2015 20:53 NotEnoughForYou#20
Wollte es nur der Vollständigkeithalber erwähnen ;)
01/28/2015 20:55 Mr.Tr33#21
Okay also normal mit Arrays arbeiten >.> :D
Dann wären wir aber wieder bei dem was ich erwähnt habe mit den divs.

Hier ein Beispiel:
Code:
<div> bla bla text <div> zweite div und so</div>
Ich möchte jetzt natürlich am liebsten am Ende gar nichts angezeigt bekommen, weil es sonst vermutlich falsch aussieht, wenn ich eins der beiden divs lösche.
RegExp würde aber in diesem Fall sagen, dass das erste div ein Ende hat und das zweite eben keins und nun?
01/28/2015 20:55 Crossside#22
Quote:
Originally Posted by .StarSplash View Post
Ich halte die Lösung mit Stacks für praktischer als deine, zum einen funktioniert sie immer, egal wie viel man vom Text angezeigt haben will, zum anderen muss man nicht erst im Text einen Marker setzen.
Ich finde meine Idee ganz praktisch, vorallem weil sie sehr leicht umsetzbar ist.
Imho leichter als wenn man erst ne Stack-Funktion implentiert die dann die ganzen divs schließt usw usf^^

Meins ist nur folgender Code (habs mal in JS gescripted weil ich das am besten kann, sollte man dann php machen in der endfassung damit keine leute den text clientside komplett haben)..

Code:
<script>
//Zeigt nur ein Preview an
function ShowPreview(text,trennzeichen)
{
 return text.split(trennzeichen);
} 

var longtext = '<b>ich</b> bin Texttttttttt<br \><b>du</b> bist Texttttttttt<br \>{$PRVIEW_END}Premiuminhalt huiiii";
document.write(ShowPreview(longtext,"{$PRVIEW_END}")[0]);
</script>
Empfinde ich halt als schneller & einfacher.
Man muss dabei dann halt achten das man selbst die jeweiligen Tags schließt bevor das ende der Vorschau des Textes kommt, sonst kommts zum selben Problem. In so einem Fall wäre deine Lösung besser geb ich zu.

grüße
01/28/2015 20:55 .StarSplash#23
Sind sie aber D:

Ich glaube auch, dass es ihm egal ist, ob er mitten im Satz abschneidet, ungünstig wäre wohl nur mitten im Wort, aber das könnte man ja auch gleich mit PHP lösen, indem man bis zum letzen Leerzeichen zurückgeht und den Rest wegwirft.

@Mr.Tr33: Wenn du mit Stacks arbeitest, sieht es am Ende genau so aus, wie es aussehen soll. Der Stack sorgt ja gerade dafür, dass die Verschachtelung beibehalten wird und jeder Tag korrekt geschlossen wird. Such mal nach Klammerchecker oder sowas, das ist ne beliebte Übung, wenn es um die Einführung dieser Datenstruktur geht. Das ist genau dasselbe Prinzip.


@Crosside: Deine Idee funktioniert aber schlichtweg nicht, wenn es Tags gibt, die sehr viel Inhalt umspannen. Wenn er nur ~800 Zeichen anzeigen will, dort aber plötzlich ein Abschnitt in kursiv beginnt, der 2500 Zeichen lang ist, muss er den entweder komplett mit anzeigen, oder komplett ausblenden, damit alle Tags korrekt geschlossen werden. Ansonsten ist er nur so weit, wie er jetzt schon ist.
01/28/2015 21:03 Crossside#24
Quote:
Originally Posted by .StarSplash View Post
@Crosside: Deine Idee funktioniert aber schlichtweg nicht, wenn es Tags gibt, die sehr viel Inhalt umspannen. Wenn er nur ~800 Zeichen anzeigen will, dort aber plötzlich ein Abschnitt in kursiv beginnt, der 2500 Zeichen lang ist, muss er den entweder komplett mit anzeigen, oder komplett ausblenden, damit alle Tags korrekt geschlossen werden. Ansonsten ist er nur so weit, wie er jetzt schon ist.
Stimmt.
Deshalb schrieb ich Anfangs ja das er wenn er es so löst darauf achten muss beim schreiben des Textes & dies berücksichtigen muss.

Kannst du mal Pseudocode zeigen wie du das mit dem Stack lösen würdest?
Stelle mir das ziemlich aufwändig vor vom Code-Technischen her gesehen.

grüße^^
01/28/2015 21:06 .StarSplash#25
Das ist aber dann wohl nicht in seinem Sinne, sonst ständ er ja nun nicht vor diesem Problem.

In seiner jetzigen Situation ist die Implementierung mittels Stack wohl die einzige, die funktioniert und ihm bei jeder gegebenen Anzeigelänge korrekt formatierten Text ausgibt.

Und so aufwändig ist das nun auch nicht. Sollte auch nicht wesentlich länger als 30 Minuten dauern, das zu implementieren.
01/28/2015 21:21 Mr.Tr33#26
@.StarSplash
Wäre jetzt echt cool von dir, wenn du mich ein bisschen mehr in die richtige Richtung wirfst eventuell mit einem Codeschnipsell, damit ich das mit den Stacks richtig verstehe? :)
01/28/2015 21:32 NotEnoughForYou#27
Du pushst jeden tag der geöffnet wird auf den Stack. Sobald du auf ein end Tag triffst holst du mit pop das letzte Tag-Element (dieser Art) das auf dem Stack liegt (last in - first out). Wenn du dann durch bist mit deinem Durchgang und noch was auf dem Stack liegt zb. ein <a> weisst du, dass dieses a nicht geschlossen wurde. Welches a es ist kannst du dann einfach abzählen wenn es zb. sonst kein a mehr im stack gibt ist es das 1. a in deinem Code, etc.

Funktioniert natürlich nur, wenn deine Schachtelung korrekt ist.
01/28/2015 21:36 .Sags Barney .!#28
Da ich mich in Richtung PHP etc. noch nicht auskenne: Um Zeichen zu sparen, könntest du doch eine externe .css Datei anlegen und dort den Style deiner einzelnen Befehle definieren
01/28/2015 21:37 .StarSplash#29
Wie gesagt, google mal nach "Klammerchecker". Das Prinzip ist identisch, du müsstest bloß eben die simple Regel zum Abgleich zweier Klammern gegen eine komplexere mit den vielen Tags tauschen.

Auf dem Stack MUSS übrigens immer das entsprechende öffnende Tag ganz oben liegen, wenn du auf ein schließendes Tag stößt. Andernfalls ist die Verschachtelung falsch und das ganze Konstrukt nicht valide.

@SagsBarney: Was? Ich denke, du hast sein Problem nicht verstanden.
01/28/2015 21:40 .Sags Barney .!#30
Sein Problem habe ich schon verstanden, jedoch kann ihm nicht die professionelle Beratung geben, wie du oder die anderen. Habe mich drauf festgehakt, dass er seine Zeichen reduzieren wollte, daher habe ich mich nur auf den kleinen Tipp am Rande verlassen, um trotz meiner geringen Kenntniss, evtl. Hilfe zu bieten. :o