Seite 1 von 1

Text nicht mitten im Wort abschneiden ... wordwrap????

Verfasst: Di 30. Aug 2005, 07:00
von zimboo
Moin Contenidos,

ich benötige Eure Hüülfeee... Ich bastel an einer Artikelliste rum und habe schon ein paar "Herausforderungen" gemeistert - aber nun komme ich irgendwie nicht weiter.

Die Artikelliste die ich benutze ist diese:
Eingabe:

Code: Alles auswählen

$selected = "CMS_VALUE[0]"; // selected category 

echo '      <table cellspacing="0" cellpadding="10" border="0">',chr(10); 
echo '        <tr valign="top">',chr(10); 
echo '          <td class="text_medium">Kategorie w&auml;hlen:</td>',chr(10); 
echo '          <td class="text_medium"><select name="CMS_VAR[0]">',chr(10); 

if ($selected != "0" && $selected != "") { 
   echo '                <option value="0">--- kein ---</option>',chr(10); 
} else { 
   echo '                <option selected="selected" value="0">--- kein ---</option>',chr(10); 
} 

// fetch all categorys 
$query =  "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, "; 
$query .= $cfg["tab"]["cat"]." AS B,  ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat "; 
$query .= "AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' "; 
$query .= "AND C.visible=1 ORDER BY A.idtree"; 

// execute query 
$db->query($query); 

// loop result and build the options 
while ($db->next_record()) { 
   $spaces = "|";               // indent spacer 
   $levels = $db->f("level");   // how many levels 

   for ($i = 0; $i < $levels; $i++) { 
      $spaces = $spaces . "--"; // add 2 spaces for every level 
   } 

   $spaces .= ">"; 

   if ($selected == $db->f("idcat")) { 
      // selected category 
      echo '<option selected="selected" value="'. $db->f("idcat") .'">'. $spaces . $db->f("name") .'</option>',chr(10); 
   } else { 
      // category 
      echo '<option value="'. $db->f("idcat") .'">'. $spaces . $db->f("name") .'</option>',chr(10); 
   } 
} 

echo '              </select>',chr(10); 
echo '          </td>',chr(10); 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium">&Uuml;berschrift</td>',chr(10); 
echo '          <td class="text_medium"><input type="text" name="CMS_VAR[2]" value="CMS_VALUE[2]"></td>',chr(10); 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium">Angezeigte L&auml;nge in Zeichen</td>',chr(10); 
if (!is_numeric("CMS_VALUE[3]")) { 
   echo '          <td class="text_medium"><input type="text" name="CMS_VAR[3]" value="50"></td>',chr(10); 
} else { 
   echo '          <td class="text_medium"><input type="text" name="CMS_VAR[3]" value="CMS_VALUE[3]"></td>',chr(10); 
} 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium" style="vertical-align: top;">Sortiert nach:</td>',chr(10); 
echo '          <td class="text_medium"><select name="CMS_VAR[4]">',chr(10); 
if ("CMS_VALUE[4]" == "" || "CMS_VALUE[4]" == "CATART.idart") { 
   echo '                <option value="CATART.idart" selected>Artikel-ID</option>',chr(10); 
} else { 
   echo '                <option value="CATART.idart">Artikel-ID</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "CONTENT.value") { 
   echo '                <option value="CONTENT.value" selected>Topic</option>',chr(10); 
} else { 
   echo '                <option value="CONTENT.value">Topic</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.created") { 
   echo '                <option value="ARTLANG.created" selected>Erstellungsdatum</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.created">Erstellungsdatum</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.lastmodified") { 
   echo '                <option value="ARTLANG.lastmodified" selected>Änderungsdatum</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.lastmodified">Änderungssdatum</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.title") { 
   echo '                <option value="ARTLANG.title" selected>Seitentitel (Backend)</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.title">Seitentitel (Backend)</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.pagetitle") { 
   echo '                <option value="ARTLANG.pagetitle" selected>Seitentitel (Frontend)</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.pagetitle">Seitentitel (Frontend)</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.summary") { 
   echo '                <option value="ARTLANG.summary" selected>Zusammenfassung (Backend)</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.summary">Zusammenfassung (Backend)</option>',chr(10); 
} 
if ("CMS_VALUE[4]" == "ARTLANG.artsort") { 
   echo '                <option value="ARTLANG.artsort" selected>Sort No.</option>',chr(10); 
} else { 
   echo '                <option value="ARTLANG.artsort">Sort No.</option>',chr(10); 
} 
echo '              </select><br>',chr(10); 
if ("CMS_VALUE[5]" != "DESC") { 
   echo '             <input type="radio" name="CMS_VAR[5]" value="ASC" checked>Aufsteigend&nbsp;<input type="radio" name="CMS_VAR[5]" value="DESC">Absteigend',chr(10); 
} else { 
   echo '             <input type="radio" name="CMS_VAR[5]" value="ASC">Aufsteigend&nbsp;<input type="radio" name="CMS_VAR[5]" value="DESC" checked>Absteigend',chr(10); 
} 
echo '          </td>',chr(10); 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium" style="vertical-align: top;">Startartikel:</td>',chr(10); 
if ("CMS_VALUE[6]" != "enabled") { 
   echo '          <td class="text_medium"><input type="checkbox" name="CMS_VAR[6]" value="enabled">Anzeigen&nbsp;'; 
} else { 
   echo '          <td class="text_medium"><input type="checkbox" name="CMS_VAR[6]" value="enabled" checked>Anzeigen&nbsp;'; 
} 
if ("CMS_VALUE[7]" != "enabled") { 
   echo '<input type="checkbox" name="CMS_VAR[7]" value="enabled">An erster Stelle</td>',chr(10); 
} else { 
   echo '<input type="checkbox" name="CMS_VAR[7]" value="enabled" checked>An erster Stelle</td>',chr(10); 
} 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium" style="vertical-align: top;">Topic-Identifikation:</td>',chr(10); 
echo '          <td class="text_medium" style="vertical-align: top;">Inhaltstyp:&nbsp;<select name="CMS_VAR[9]">',chr(10); 
if (!is_numeric("CMS_VALUE[9]") || !in_array("CMS_VALUE[9]", array("1","2","3","9"))) { 
   echo '                <option value="1" selected>CMS_HTMLHEAD</option>',chr(10); 
} else { 
   echo '                <option value="1">CMS_HTMLHEAD</option>',chr(10); 
} 
if ("CMS_VALUE[9]" == "2") { 
   echo '                <option value="2" selected>CMS_HTML</option>',chr(10); 
} else { 
   echo '                <option value="2">CMS_HTML</option>',chr(10); 
} 
if ("CMS_VALUE[9]" == "3") { 
   echo '                <option value="3" selected>CMS_TEXT</option>',chr(10); 
} else { 
   echo '                <option value="3">CMS_TEXT</option>',chr(10); 
} 
if ("CMS_VALUE[9]" == "9") { 
   echo '                <option value="9" selected>CMS_HEAD</option>',chr(10); 
} else { 
   echo '                <option value="9">CMS_HEAD</option>',chr(10); 
} 
echo '            </select><br>',chr(10); 
if (!is_numeric("CMS_VALUE[8]")) { 
   echo '          Typ-Nummer (z.B. 3 bei CMS_HTML[3]): <input type="text" name="CMS_VAR[8]" length="5" maxlength="10" value="1">',chr(10); 
} else { 
   echo '          Typ-Nummer (z.B. 3 bei CMS_HTML[3]): <input type="text" name="CMS_VAR[8]" length="5" maxlength="10" value="CMS_VALUE[8]">',chr(10); 
} 
echo '          </td>',chr(10); 
echo '        </tr>',chr(10); 
echo '        <tr>',chr(10); 
echo '          <td class="text_medium">Artikelanzahl (0 = keine Begrenzung):</td>',chr(10); 
if (!is_numeric("CMS_VALUE[10]")) { 
   echo '          <td class="text_medium"><input type="text" name="CMS_VAR[10]" value="0"></td>',chr(10); 
} else { 
   echo '          <td class="text_medium"><input type="text" name="CMS_VAR[10]" value="CMS_VALUE[10]"></td>',chr(10); 
} 
echo '        </tr>',chr(10); 
echo '      </table>',chr(10);
Ausgabe:

Code: Alles auswählen

<?php 
$selCat     = "CMS_VALUE[0]"; // selected category 
$maxChar = "CMS_VALUE[3]"; // Max. shown topic length 
$str = "CMS_VALUE[2]";

function TextAbschneiden($Text, $Laenge)
{
	return substr($Text, 0, strpos(wordwrap($Text, $Laenge)));
}

$Text = "CMS_VALUE[2]";
$Laenge = $maxChar;

if (!is_numeric($maxChar) || $maxChar < 1) { 
   $maxChar = "50"; 
} 


if(is_numeric($selCat) && $selCat != "0") { 
   // select all articles in category without start article 
   $query =  "SELECT CONTENT.value AS headline, ARTLANG.idart AS id, ARTLANG.lastmodified AS lastmodified, ARTLANG.modifiedby AS modifiedby FROM "; 
   $query .= $cfg["tab"]["cat_art"]." AS CATART, "; 
   $query .= $cfg["tab"]["art_lang"]." AS ARTLANG, "; 
   $query .= $cfg["tab"]["content"]." AS CONTENT "; 
   $query .= "WHERE CATART.idcat = '$selCat' "; 
   $query .= "AND ARTLANG.idart != '$idart' ";
   if ("CMS_VALUE[6]" != "enabled") { 
      $query .= "AND CATART.is_start = '0' "; 
   } 
   $query .= "AND CONTENT.idartlang = ARTLANG.idartlang "; 

   // Content-Type-Number 
   if (!is_numeric("CMS_VALUE[8]")) { 
      $query .= "AND CONTENT.typeid = '1' "; 
   } else { 
      $query .= "AND CONTENT.typeid = 'CMS_VALUE[8]' "; 
   } 

   // Content-Type 
   if (!is_numeric("CMS_VALUE[9]")) { 
      $query .= "AND CONTENT.idtype = '1' "; 
   } else { 
      $query .= "AND CONTENT.idtype = 'CMS_VALUE[9]' "; 
   } 

   $query .= "AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' "; 
   $query .= "AND ARTLANG.online = '1' ORDER BY "; 
   if ("CMS_VALUE[6]" == "enabled" && "CMS_VALUE[7]" == "enabled") { // Startartikel an erster Stelle 
      $query .= "CATART.is_start DESC, "; 
   } 

   // Sort by 
   if ("CMS_VALUE[4]" == "") { 
      $query .= "CATART.idart "; 
   } else { 
      $query .= "CMS_VALUE[4] "; 
   } 

   // ASC/DESC 
   if ("CMS_VALUE[5]" == "") { 
      $query .= "DESC "; 
   } else { 
      $query .= "CMS_VALUE[5] "; 
   } 

   // LIMIT 
   if (is_numeric("CMS_VALUE[10]") && "CMS_VALUE[10]" > 0) { 
      $query .= "LIMIT 0, CMS_VALUE[10]"; 
   } 

   // execute query 
   $db->query($query); 
   

   if ($db->num_rows() > 0) { 
    
     echo '<div class="article"><p class="nachricht">CMS_VALUE[2]<br><span class="text">'; 
      
      while ($db->next_record()) { 

         $headline = strip_tags ($headline);
         $headline = urldecode($db->f("headline"));
         $pos1 = strpos ($headline, "src");
         $pos2 = strpos ($headline, "\"",$pos1+6);
         $img = substr($headline,$pos1,$pos2-$pos1+1);
         $erstellt = date("d.m.y",strtotime($db->f("lastmodified")));
         $von = $db->f("modifiedby");
         $headline = strip_tags ($headline); 
         if (strlen($headline) > $maxChar) { 
            TextAbschneiden($Text, $Laenge);
            $headline .= '...';     
        
                 } 
 
         $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selCat&idart=".$db->f("id")."&m=$m&s=$s"); 
        
         echo '<a style="text-decoration:none;" href="' .$link. '"><img style="float:left; padding:5px;"' .$img. '  height="75px" border="0" alt="Artiekvoransicht"></a>' .$headline .'<br>';
         echo '<br>&raquo;&nbsp;<a style="font-size:10px;" href="'.$link.'">Diesen Artikel weiterlesen</a></span></p>';
         echo '<p class="footer">Artikel aktualisiert: ' .$erstellt. ' von ' .$von. '</p>';
      
     
         
      } 
      unset($headline); 
      echo '</div>'; 
   } // end while 
  
} // end if
 
?> 
naja das ganze wird über CSS "formatiert"...

Nun möchte ich nicht, dass die Worte des "Anreisstextes" mitten drin abgeschnitten werden... dazu habe ich folgene Funktion herausgefunden:

Code: Alles auswählen

function TextAbschneiden($Text, $Laenge)
{
	return substr($Text, 0, strpos(wordwrap($Text, $Laenge)));
}

$Text = "CMS_VALUE[2]";
$Laenge = $maxChar;

Code: Alles auswählen

 if (strlen($headline) > $maxChar) { 
            TextAbschneiden($Text, $Laenge);
            $headline .= '...';     
        
                 } 
Aber wenn ich dann meine "Startseite" aufrufe sieht diese so aus:
Bild

Ich habe wirklich keinen Plan, was ich da falsch mache...

Kann mir bitte jemand helfen????

Vielen Dank


Jörg

Verfasst: Di 30. Aug 2005, 09:19
von kummer
folgende funktion macht, was du gerne möchtest:

Code: Alles auswählen

	function shortenText($text,$length) {
		
		$text = strip_tags(trim(urldecode($text)));
		
		if (strlen($text) > $length) {
			$newtext = '';
			$worte = explode (" ",$text);
			$zulang = false;
			foreach ($worte as $wort) {
				if (strlen($newtext." ".$wort) >= $length) $zulang = true;
				$newtext = (!$zulang)?($newtext." ".$wort):($newtext);
			}
			$newtext .= "...";
		} else {
            $newtext = $text;
        }
        
        return $newtext;
	}
$text ist der zu kürzende text und $length die maximallänge, die der text haben darf. zurück gegeben wird ein string maximal der bezeichneten länge ohne trennung innerhalb eines wortes.

gruss,
andreas

Verfasst: Di 30. Aug 2005, 10:20
von zimboo
Hallo Andreas,

danke für Deine function... aber irgendwie klappert das nisch.
Ich bekomme immer noch diese Fehlermeldung:
[30-Aug-2005 11:14:47] PHP Warning: strpos(): Offset not contained in string. in /homepages/14/d41006292/htdocs/testdocs/kvkoeln/front_content.php(558) : eval()'d code on line 530
[30-Aug-2005 11:14:47] PHP Fatal error: Cannot redeclare shortentext() (previously declared in /homepages/14/d41006292/htdocs/testdocs/kvkoeln/front_content.php(558) : eval()'d code:439) in /homepages/14/d41006292/htdocs/testdocs/kvkoeln/front_content.php(558) : eval()'d code on line 560
Wenn Du willst kannst Du dir das ja mal unter http://www.test.drk-koeln.de/kvkoeln/ anschauen...

Also ich weiß mir nun keinen Rat mehr...

Grüße aus Colonia

Jörg

Verfasst: Di 30. Aug 2005, 10:22
von Oldperl
Vorschlag von mir wäre auf die Contenido eigenen Stringfunktionen zurück zu greifen.
:arrow: http://www.thilo-sommer.de/PHPMyFAQ/ind ... 83&lang=de

Gruß aus Franken

Ortwin

Verfasst: Di 30. Aug 2005, 10:45
von zimboo
Hallo Ortwin,

DAS war der rettende Beitrag !!!! :lol:

Ich danke Dir... Du solltest jezz mal sehen wie ich hier um den Tisch tanze :lol:

Schöne Grüße us Kölle

Jörg

Verfasst: Di 30. Aug 2005, 10:52
von Oldperl
zimboo hat geschrieben:Hallo Ortwin,

DAS war der rettende Beitrag !!!! :lol:

Ich danke Dir... Du solltest jezz mal sehen wie ich hier um den Tisch tanze :lol:
Aber nichts umschmeißen :wink:

Naja, vielleicht dürfen wir uns dann ja auch mal an dem fertigen Modul erfreuen. 8)

Gruß aus Franken

Ortwin

Verfasst: Di 30. Aug 2005, 11:36
von zimboo
Oldperl hat geschrieben: Aber nichts umschmeißen :wink:
Ich gebe mir große Mühe :wink:
Oldperl hat geschrieben: Naja, vielleicht dürfen wir uns dann ja auch mal an dem fertigen Modul erfreuen. 8)

Gruß aus Franken

Ortwin
sicher, sicher... kuckst Du hier:
http://www.contenido.org/forum/viewtopic.php?t=9292

Danke nochmals !!!1

Gruß us Kölle


Jörg

Verfasst: Di 30. Aug 2005, 12:03
von Oldperl
Kommt gut deine Vorschauseite :D

Na vielleicht greif ich mir das Modul mal und arbeite es auf die 4.5er Version um, wenn dann die Zeit mal reicht :roll:

Na dann noch viel Spaß beim Coden :wink:

Gruß aus Franken

Ortwin

Verfasst: Di 30. Aug 2005, 12:15
von zimboo
Danke für die Blumen....

Jau mach das... Ist das ein großer Unterschied zu 4.4.5 ??? PHP ist doch PHP (außer wenn jetzt halt PHP 5 unterstützt wird... da gibt es ja doch einige Änderungen...) ????ß

Gruß

Jörg

Verfasst: Di 30. Aug 2005, 19:54
von Oldperl
zimboo hat geschrieben:Danke für die Blumen....
Gern geschehen ... ja ein BlumenSmilie fehlt hier noch :wink:
Jau mach das... Ist das ein großer Unterschied zu 4.4.5 ??? PHP ist doch PHP (außer wenn jetzt halt PHP 5 unterstützt wird... da gibt es ja doch einige Änderungen...) ????ß
Hmm, nunja, beim umstricken von so ein paar modulen ist mir aufgefallen, das in der 4.5er ein paar Contenidofunktionen geändert wurden, auch hast du einige Contenidoklassen, die doch manches Modul so um einiges an Code verkürzen, wenn man sie dann nutzt.
Desweiteren hat sich der Umgang mit den CMS_CONTAINERN ein bisserl geändert
:arrow: http://www.thilo-sommer.de/PHPMyFAQ/ind ... 71&lang=de
und so weiter und so fort.
Ich hab mich ein bisserl drauf festgelegt die Module die ich nutze auf die 4.5er anzupassen, da ich davon ausgehe, das diese, bzw. die dann erscheinende 4.6er stable sich durchsetzen wird, da doch etliche neue Funktionalitäten hinzugekommen sind.

Aber das ist ein längeres Thema, und wenn ich ehrlich bin fehlt mir im Moment etwas die Zeit um mich zu lang darüber auszulassen.

Ich tipper jetz mal weiter an meinem Plugin rum :roll:

Schöne Grüße nach Kölle

Ortwin