Page 1 of 1

Mettere automaticamente su due colonne il contenuto di una news

Posted: Tue Aug 25, 2009 8:16 am
by protempore
come si fa?

provo a spiegare meglio.

Ho un layout di impaginazione del contenuto molto largo, per cui risulta difficile la lettura dei testi... mi servirebbe metterli su due colonne... semplice, direte, basta mettere due div affiancati invece che uno... sì, ma come faccio a gestire le due colonne? io vorrei che il contenuto della news, in base alla sua lunghezza si posizioni metà nel primo e metà nel secondo... ma anche dividendolo manualmente, non saprei come fare a gestirlo, visto che il modulo News non mi da la possibilità di due content... o si?

Re: Mettere automaticamente su due colonne il contenuto di una news

Posted: Wed Aug 26, 2009 1:36 pm
by nervino
Secondo me, o modifichi il codice delle News (ma eviterei per ovvi problemi di aggiornamento) oppure inserisci 2 DIV usando il float, direttamente nella textarea delle News, e distribuisci il testo della notizia tra di loro.

Tipo così:

Code: Select all

<div style="float:left;width:400px">

        <p>PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna
 PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna PRIMA colonna 
PRIMA colonna PRIMA colonna PRIMA
 colonna PRIMA colonna </p>
    </div>
    <div style="margin-left:400px;width:400px">
        <p>Seconda Colonna Seconda Colonna Seconda Colonna Seconda 
Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna
 Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda
 Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda 
Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda 
Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna 
Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda 
Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna 
Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda 
Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna 
Seconda Colonna Seconda Colonna Seconda Colonna Seconda Colonna Seconda
 Colonna Seconda Colonna Seconda Colonna Seconda </p>
    </div>
Altro non mi viene in mente...

Re: Mettere automaticamente su due colonne il contenuto di una news

Posted: Wed Aug 26, 2009 10:00 pm
by protempore
nervino wrote:... e distribuisci il testo della notizia tra di loro....
è proprio questo il problema dividere il testo... difficile farlo in automatico...

inserire i "div" manualmente nel content della news necessita una certa capacità e conoscenza di html... e un utente normale, non ce l'ha...

ho "risolto" con un UDT... non è proprio ciò che volevo, ma me lo faccio andare bene...

in pratica si tratta di considerare i paragrafi del testo e "distribuire", a dx e sx, quelli. L'accortezza è di stabilire che la colonna di sx consideri di essere mediamente più lunga della metà del testo...

questo è l'UDT... il prametro che bisogna passargli è $entry->content

Code: Select all

$detail=$params['detail'];

$string_div=str_replace('<div>','',$detail);
$string_br=str_replace('</div>','<br />',$string_div);
$string_br=str_replace('. <br />','.<br />',$string_br);

$count_br = substr_count($string_br, '.<br />');

$numTotalChar = strlen(strip_tags($string_br));
$minCharLeft = ceil($numTotalChar/2+(($numTotalChar/2)*3/100));

$blocks = explode('.<br />', $string_br);

$charBlock = 0;
$i = 0;
foreach ($blocks as $block){
	if ($i == 0 && $charBlock < $minCharLeft){
		$charBlock = $charBlock + strlen(strip_tags($block));
		$return .= '<div class="news_content_left">'."\n";
		$return .= $block.'.<br />';
		$i++;
	} else if ($i < $count_br && $charBlock > $minCharLeft) {
		$charBlock = $charBlock + strlen(strip_tags($block));
		if ($divRight != 'Y') {
			$return .= '</div>'."\n".'<div class="news_content_right">'."\n";
			$divRight = 'Y';
			$pos = strpos($block, '<br />');
			if ($pos == 0) {
				$return .= substr_replace($block, '', 0, 6).'.<br />';
				$i++;
			} else if ($pos == 1) {
				$return .= substr_replace($block, '', 0, 7).'.<br />';
				$i++;
			} else {
				$return .= $block.'.<br />';
				$i++;
			}
		} else {
			$return .= $block.'.<br />';
			$i++;
		}
	} else if ($i < $count_br)  {
		$charBlock = $charBlock + strlen(strip_tags($block));
		$return .= $block.'.<br />';
		$i++;
	}

}

$return .= "\n".'</div>'."\n";
echo $return;