• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Codetags mit Zeilenangaben

Status
Für weitere Antworten geschlossen.
C

Commodore

Guest
Hi,


Die PHP-Codetags haben ja momentan bekannterweise keinerlei Zeilenangaben:

PHP:
$text = "Hallo Welt";
//Hallo Welt

Aber das kann ziemlich praktisch sein, beispielsweise bei Fehlermeldungen mit Zeilenangaben oder um jemanden sagen zu können "Guck mal in Zeile xyz".


Allerdings gibt es das bekannte Problem mit dem Copy & Paste, bei dem die Zahlen mitkopiert werden. Für dieses Problem habe ich eine Lösung gefunden:

HTML:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/html1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de" style="height:100%;">
<head>
<title>test</title>
<style type="text/css">
.code{
font-family:monospace;
font-size:13.3px;
overflow:auto;
}
</style>
</head>
<body>
<div class="code" style="background-color:lightgrey; width:700px;">
<div style="display:inline; float:left;">1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8
</div>
<div style="margin-left:30px;">text<br />
text<br />
text<br />
text<br />
text<br />
text<br />
text<br />
text<br />
</div>
</div>
</body>
</html>
bzw. Hier mit einem echtem PHP-Code:
HTML:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/html1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de" style="height:100%;">
<head>
<title>test</title>
<style type="text/css">
.var{
color:#00B;
}
.func{
color:#070;
}
.tvar{
color:#D00;
}
.com{
color:#FF8000;
}
.code{
font-family:monospace;
font-size:13.3px;
overflow:auto;
}
</style>
</head>
<body>
<div class="code" style="background-color:lightgrey; width:700px;">
<div style="display:inline; float:left; font-weight:bold;">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8</div>
<div style="margin-left:30px;"><span class="func">echo</span> <span class="tvar">"Testseite\n"</span><span class="func">;</span><br />
<span class="com">// Ausgabe</span><br /><br />
<span class="func">function</span> <span class="var">connect</span> <span class="func">(){</span><br />
<span class="func">@</span><span class="var">mysql_connect</span><span class="func">(</span><span class="var">MYSQL_HOST</span><span class="func">, </span><span class="var">MYSQL_USER</span><span class="func">, </span><span class="var">MYSQL_PASS</span><span class="func">);</span><br />
<span class="var">mysql_select_db</span><span class="func">(</span><span class="tvar">"Datenbank"</span><span class="func">);</span><br />
<span class="func">}</span><br />
<span class="com">//Verbindung zur DB</span>
</div>
</div>
</body>
</html>

Wenn ihr in diesem Beispiel den Code kopiert, dann werden die Zahlen nicht mitkopiert (es sei denn ihr geht mit der Maus sehr weit nach links).

Das Script, welches die Zeilenangaben macht, könnte ja zuerst die Anzahl an Zeilenumbrüchen zwischen den Codetags auszählen und dann in einer Schleife den div mit den Zahlen erstellen. Danach wird der normale Code eingesetzt.


Bitte eure Meinung dazu :D
 
Werbung:
Geht mit tabellen ebenfalls...

Du solltestes noch so gestallten das die größe der zeilenummern nicht dazu führt das sie sich nach unten verschieben.
 
Geht mit tabellen ebenfalls...
Meinst du sowas:
HTML:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/html1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>test</title>
</head>
<body>
<table>
<tr>
<td>1</td>
<td>Foo</td>
</tr>
<td>2</td>
<td>Bar</td>
</tr>
</table>
</body>
</html>
Weil genau das klappt nicht.
Du solltestes noch so gestallten das die größe der zeilenummern nicht dazu führt das sie sich nach unten verschieben.
Die Zahlen sind genausogroß wie die Schrift und auch ein Monospace-font. Da sollte auch bei 100 Zeilen nichts passieren ;)
 
Werbung:
Habe es aber getestet und es passiert was ;)

Nein ich meinte es so:
HTML:
<table>
  <tr>
    <td>
      1<br />
      2<br />
      3<br />
    </td>
    <td>
      Erste Zeile<br />
      Zweite Zeile<br />
      Dritte Zeile<br />
    </td>
  </tr>
</table>
 
Also bei 30 Zeilen passier bei mir überhaupt nichts:
HTML:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/html1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de" style="height:100%;">
<head>
<title>test</title>
<style type="text/css">
.code{
font-family:monospace;
font-size:13.3px;
overflow:auto;
}
</style>
</head>
<body>
<div class="code" style="background-color:lightgrey; width:700px;">
<div style="display:inline; float:left;">1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
14<br />
15<br />
16<br />
17<br />
18<br />
19<br />
20<br />
21<br />
22<br />
23<br />
24<br />
25<br />
26<br />
27<br />
28<br />
29<br />
30<br />
31<br />
32<br />
33<br />
34<br />
35<br />
36
</div>
<div style="margin-left:30px;">
text1<br />
text2<br />
text3<br />
text4<br />
text5<br />
text6<br />
text7<br />
text8<br />
text9<br />
text10<br />
text11<br />
text12<br />
text13<br />
text14<br />
text15<br />
text16<br />
text17<br />
text18<br />
text19<br />
text20<br />
text21<br />
text22<br />
text23<br />
text24<br />
text25<br />
text26<br />
text27<br />
text28<br />
text29<br />
text30<br />
text31<br />
text32<br />
text33<br />
text34<br />
text35<br />
text36
</div>
</div>
</body>
</html>
 
Also ich find auch, dass das ne gute Idee ist, die auch umgesetzt werden sollte.
Wie commodore ja schon sagte, kann man so viel besser helfen und sieht schneller im Code durch, gerade bei Fehlermeldungen..

Ich hab mir auch paar Gedanken zu Umsetzung gemacht:
Also die Zeilen könte man sich so anzeigen lassen (inhalt des divs):
PHP:
$rows = implode("<br />", range(1, $lastrow = count(explode("<br />", $code))));
Und für die Breite der Zeilenangabe sowas:
PHP:
$rowswidth = strlen($lastrow)*10+10;

Das müsste in die handler Funktionen für html, code und php der bbcode Klasse, hinter der folgenden Zeile stehen. (In der code funktion müsste allerdings explode("\n",$code) verwendet werden)

PHP:
$code = $this->strip_front_back_whitespace($code, 1);

Nun müsste nurnoch in die Templates für die jeweiligen bbcodes der code von Commodore eingearbeitet werden, so z.b.:
PHP:
<div style="display:inline; float:left; font-weight:bold; text-align:right;">{$rows}</div>
<div style="margin-left:{$rowswidth}px;">{$code}</div>
Hoffe ihr setzt das mal um :)
Gruß
 
Werbung:
Wo wir dann schon wohl beim nächstem Problem sind:
Es sollen nur relevante Codeausschnitte gepostet werden, was aber dann die Zeilennummerirung verfälscht. Man müsste eingeben können, ab welcher Zahl aus nummerriert werden soll.

MFG
Alti
 
Das wäre schon eine größere Veränderung an sourcecode.


Idee:

Man steckt die Ausgabe der Zahlen in eine eigene Funktion mit einem optionalen Parameter (Standardwert:1). Dann macht man einen zusätzlichen Regex für einen Code, der z.B. so aussehen kann:

[php;65]
//Zeile 65
//Viel code
[/php]

Der regex wäre dann in etwa so:
Code:
'/\[php;(\d)\](.*)\[\/php\]/isU'

An die Funktion zum erstellen wird dann als erste Variable der zweite Treffer im Regex übergeben (der eigentliche String) und als zweite Variable die Zahl die als erstes gematcht wurde (optional). Diese Zahl wird dann zum anfangs und endwert der Schleife addiert.
 
Sorry für Doppelpost, aber interessiert sich hierfür keiner? Kann den nichtmal einer der Admins was dazu sagen?
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben