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

Gesperrt
zimboo
Beiträge: 171
Registriert: Fr 20. Mai 2005, 09:43
Wohnort: Köln - Rondorf
Kontaktdaten:

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

Beitrag 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
Jörg Zimmermann
Köln Rondorf
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
zimboo
Beiträge: 171
Registriert: Fr 20. Mai 2005, 09:43
Wohnort: Köln - Rondorf
Kontaktdaten:

Beitrag 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
Jörg Zimmermann
Köln Rondorf
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
zimboo
Beiträge: 171
Registriert: Fr 20. Mai 2005, 09:43
Wohnort: Köln - Rondorf
Kontaktdaten:

Beitrag 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
Jörg Zimmermann
Köln Rondorf
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
zimboo
Beiträge: 171
Registriert: Fr 20. Mai 2005, 09:43
Wohnort: Köln - Rondorf
Kontaktdaten:

Beitrag 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
Jörg Zimmermann
Köln Rondorf
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
zimboo
Beiträge: 171
Registriert: Fr 20. Mai 2005, 09:43
Wohnort: Köln - Rondorf
Kontaktdaten:

Beitrag 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
Jörg Zimmermann
Köln Rondorf
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Gesperrt