webForumDet fria alternativet

Visa kod i flera kolumner

PHP

5 svar · 458 visningar · startad av Type

Medlem sedan mars 20021 239 inlägg
Frågan#1

Hej
Jag har försökt söka en stund nu men hittar inte vad jag letar efter. Jag har text som från början kommer från en databas. Den ska visas i ett antal kolumner, säg 3. Från början sparade jag in en tabell i databasen men det känns väldigt bökigt. Istället vill jag parsa via tex php, är det smart?

Hur gör jag?
Jag antar att man ska beräkna antalet tecken i texten och dela på 3, men bryter den inte var som helst då, mitt i ord osv?

// Mvh Erik

Medlem sedan mars 20021 239 inlägg
#2

Jag hittade ett exempel tror jag:

<?php /*________________________________________________________________

lixlpixel PHParadise

_______________________________________________________________________

category :		string handling

snippet :		string to columns

downloaded :	04.22.2008 - 07:02

file URL :		http://www.fundisom.com/phparadise/php/string_handling/string_to_columns

description :	this will "columnize" your long text.
long text, especially on large screens is really hard to read.
thats why in the "real world" newspapers use columns to layout text.

with this script you just paste the text and specify the numbers of columns.
it will split the text into more reader-friendly chunks.

___________________________START___COPYING___HERE__________________*/ ?>

<?php

$marginpercent = 3;
$topmarginpx = 200;
$bgcolor = 'whitesmoke';
$paddingpx = 5;
$seperators = array(' ' => 'words', '. ' => 'sentences', '<p>' => 'paragraphs');
if($_POST['string'])
{
    if($_POST['column']) $columns = $_POST['column'];
    else $columns = 3;
    if($_POST['seperator']) $seperator = $_POST['seperator'];
    else $seperator = ' ';
    $widthpercent = ceil(((100-(2*$marginpercent))/$columns)-2);
    $stringlen = strlen($_POST['string']);
    $percolumn = ceil($stringlen/$columns);
    for($x = 0; $x < $columns; $x++)
    {
        $leftpx = (($x*ceil((100-(2*$marginpercent))/$columns))+$marginpercent);
        $string = stripcslashes(substr($_POST['string'],($percolumn*$x),$percolumn));
        $nextstring = stripcslashes(substr($_POST['string'],($percolumn*($x+1)),$percolumn));
        $nextpos = strpos(strtolower($nextstring),strtolower($seperator));
        $nextword = substr($nextstring,0,($nextpos+strlen($seperator)));
        $string = substr($string,$oldpos,$percolumn);
        $string = $string.$nextword;
        $oldpos = $nextpos+strlen($seperator);
        echo '
    <div style="position:absolute; 
    			left:'.$leftpx.'%; 
    			top:'.$topmarginpx.'px; 
    			padding:'.$paddingpx.'px; 
    			width:'.$widthpercent.'%; 
    			background-color:'.$bgcolor.';">
        ';
        if($x > 0 && $_POST['heightpx']) echo '
        <div style="height:'.$_POST['heightpx'].'px; width:'.$widthpercent.'%;">&nbsp;</div>';
        echo $string;
        echo '
    </div>
';
    }
}else{
    echo '
    <div style="position:absolute; 
    			left:'.$marginpercent.'%; 
    			top:'.$topmarginpx.'px; 
    			padding:'.$paddingpx.'px; 
    			width:'.(100-(2*$marginpercent)).'%; 
    			background-color:'.$bgcolor.';">
        <form method="post" action="'.$_SERVER['PHP_SELF'].'">
        <textarea name="string" cols="70" rows="20"></textarea><br />
        <input type="text" name="column" value="3" size="3" /> columns | text split at 
        <input type="text" name="seperator" size="3" />
        <select name="preset" onchange="seperator.value=this.value">';
     foreach($seperators as $k => $v)
    {
        echo '
            <option value="'.$k.'">'.$v.'</option>';
    }        
    echo '
        </select> | 
        <input type="text" name="heightpx" value="" size="3" /> topmargin on column 1+ | 
        <input type="submit" value="columnize" />
        </form>
    </div>
';
}

?>

<?php /*_____________________END___OF___THE___CODE______________________

get more code from http://www.fundisom.com/phparadise/

___________________________________________________________________*/ ?>
Medlem sedan mars 20021 239 inlägg
#3

Nu har jag fått ett problem. Wordpress som sparar texten lägger till <p> och </p> före och efter texten. Det kan också hända att de finns i texten. Hur ska jag kunna ta hänsyn till de om jag använder koden ovan? Jag lyckas inte få det att lira riktigt.

Medlem sedan mars 20021 239 inlägg
#4

Nu har jag löst det tror jag. Så här blir det:

<?php
    $marginpercent = 0;
	$paddingpx = 0;
	$columns = 3;
	$seperator = ' ';
	$data = apply_filters("the_content", $post->post_content);
    
    $widthpercent = ceil(((100-(2*$marginpercent))/$columns)-2);
    $stringlen = strlen($data);
    $percolumn = ceil($stringlen/$columns);
    echo '<table cellpadding="4"><tr>';
    for($x = 0; $x < $columns; $x++)
    {
        $leftpx = (($x*ceil((100-(2*$marginpercent))/$columns))+$marginpercent);
        $string = stripcslashes(substr($data,($percolumn*$x),$percolumn));
        $nextstring = stripcslashes(substr($data,($percolumn*($x+1)),$percolumn));
        $nextpos = strpos(strtolower($nextstring),strtolower($seperator));
        $nextword = substr($nextstring,0,($nextpos+strlen($seperator)));
        $string = substr($string,$oldpos,$percolumn);
        $string = $string.$nextword;
        $oldpos = $nextpos+strlen($seperator);
    
        echo '<td valign="top" width="'.$widthpercent.'%" style="text-align:justify;">';
        if(substr($string,0,3)!="<p>"){
        	echo "<p>";
        }
        echo $string;
        if(substr($string,strlen($string)-4,4)!="</p>"){
        	echo "</p>";
        }
        echo '</td>';
    }   
    echo '</tr></table>';  
?>
Medlem sedan mars 20021 239 inlägg
#5

Jag har inte fått några svar i den här tråden men jag har ett jätteproblem som jag verkligen behöver hjälp med. Jag kör med denna kod ovan och det funkar bra för text. Om jag får för mig att lägga in en bild bland texten lär det ju bli knas. Finns det något bra sätt att lösa det med bilder och text blandat?

Tacksam för hjälp.

Medlem sedan mars 20021 239 inlägg
#6

Jag funderar lite kring om det är så att man vet hur stor bilden är borde man väl kunna modifiera koden ovan lite o få chans att lägga in bilder. Vad tror ni om detta? Går det att modifiera?

272 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)