En kolonne/flere kolonner

3 views
Skip to first unread message

Dennis Munding

unread,
Mar 1, 2018, 4:10:13 PM3/1/18
to
Hej - så er jeg her igen...

Jeg har endnu engang udfordret mig selv lidt, men har det med at gabe
over for meget... (læs: min indsigt i php rækker ikke så vidt - endnu)

Jeg har lavet en hjemmeside, hvor der hentes nyheder fra en database.
De udskrives fint i en kolonne, som jeg har defineret, at de skal.
Men på "arkiv-siden" kunne jeg godt tænke mig, at der ved et givent
antal gamle nyheder udskrives i to kolonner i stedet for en.

Opsætningen er p.t. denne:

<CODE>
if($connect->affected_rows > 0) {
echo '<div style="width:80%;">';
while($data = $res->fetch_assoc()) {
$id = $data['NID'];
$dato = $data['dato'];
$nHead = $data['nHead'];
$nyhed = $data['nyhed'];
$imgArray = unserialize($data['imgLinks']);
?>
<div class="nyhed">
<header>
<p><?php echo $dato; ?></p>
<h4>
<?php echo $nHead; ?> - Vis
</h4>
</header>

<div class="hide">
<?php
echo "<p>" . $nyhed . "</p>";
?>

<div class="nyhedsBilleder">
<?php
foreach ($imgArray['pics'] as $images) {
$tmb = substr($images, 0, -4)."_news.jpg";
$img = substr($images, 0, -4)."_gal.jpg";

echo "<a class='lightBox' href='".$img."'
data-lightbox='".$nHead."' title='".$nHead."'><img class='newsThumb'
src='". $tmb ."' alt='".$nHead."' /></a>";
}
?>
</div>
</div>
</div>
<?php
}
echo "</div>";
}
</CODE>


Jeg tænker lidt i retningen af...:

if($connect... < 20) {
echo '<div style="width:80%;">';
} else {

echo '<div style="width:50%">'; // Det er så her "muren" er - for
således virker det ikke efter hensigten naturligvis. :-)
}


Hvis det er muligt uden at besidde en akademiker-grad, så vil et spark
i den rigtige retning (gerne til php-manualen) blive modtaget (som
altid) med stor taknemmelighed.

Hvis forståelsen bliver nemmere med et link til siden, så skal jeg nok
smide det - ellers undlader jeg at "reklamere". :-)


--
Med venlig hilsen

Dennis Munding

Bertel Lund Hansen

unread,
Mar 2, 2018, 2:34:18 AM3/2/18
to
Dennis Munding skrev:

> Jeg har lavet en hjemmeside, hvor der hentes nyheder fra en database.
> De udskrives fint i en kolonne, som jeg har defineret, at de skal.
> Men på "arkiv-siden" kunne jeg godt tænke mig, at der ved et givent
> antal gamle nyheder udskrives i to kolonner i stedet for en.

Kan det ikke nemmest klares med CSS? Der sker vel ikke noget ved
at der altid skrives i to kolonner uanset om der er få eller
mange nyheder?

--
/Bertel

Dennis Munding

unread,
Mar 2, 2018, 5:42:16 AM3/2/18
to
Hej Bertel,

Jo, column-count er det letteste at gå til, men med det nuværende
setup, er det desværre ikke den mest hensigtsmæssige, da column-count
auto-justerer ud fra kolonnernes højde og ikke fra antallet af bokse i
hver kolonne.
Jeg vil dog ikke helt forkaste idéen, da der blot skal lidt ændringer
til.

P.t. er arkivet stillet således op, at man skal klikke på overskriften
for at få vist selve nyheden. Det er her column-count bliver
uhensigtsmæssig at benytte, da det giver en "dansende" effekt på de
omkringliggende nyheder.

Har midlertidigt lavet siden med column-count (kan ses frem til kl. 16
i dag):
http://1dpb.dk/?side=arkiv


Men vil prøve at finde et alternativ sammen med min gode ven Google...
:-)


Tak for indsparket. :-)

Jan Hansen

unread,
Mar 2, 2018, 8:24:42 AM3/2/18
to
Dennis Munding skrev:

> Har midlertidigt lavet siden med column-count (kan ses frem til kl. 16
> i dag):
> http://1dpb.dk/?side=arkiv

Jeg har lavet et eksempel, der deler siden op i 2 kolonner, hvis der er mere end 20 indlæg.
Du ved meget mere om <div> end jeg gør, så skriv selv om, hvis ikke det må være <table>.
Det er måske en større gang roderi for at lave en eller to kolonner, men så virker det til
gengæld også med fem eller syv kolonner.

De nyeste indlæg står i venstre kolonne, de ældre i højre:

<CODE>
if($connect->affected_rows > 0) {

$antalkolonner = ($connect->affected_rows > 20) ? 2 : 1;
$news_pr_kolonne=ceil($connect->affected_rows / $antalkolonner);
$antalnews=0;

echo '<table style="width:80%;"><tr>';
while($data = $res->fetch_assoc()) {
$id = $data['NID'];
$dato = $data['dato'];
$nHead = $data['nHead'];
$nyhed = $data['nyhed'];
$imgArray = unserialize($data['imgLinks']);
if ($antalnews==0) echo '<td style="vertical-align:top;">';
$antalnews++;
if ($antalnews==$news_pr_kolonne) { $antalnews=0; echo '</td>'; }
}
// indsæt afslutende </td> hvis antalnews ikke er deleligt med antal kolonner
if ($antalnews!=$news_pr_kolonne) echo '</td>';
echo "</tr></table>";
}


--
mvh Jan.
Help Microsoft stamp out piracy. Give
Linux to a friend today!

Jan Hansen

unread,
Mar 2, 2018, 8:29:49 AM3/2/18
to
Jan Hansen skrev:

> De nyeste indlæg står i venstre kolonne, de ældre i højre:
Skal de nyeste stå øverst i kolonnerne, ville jeg lave det sådan:

<CODE>
if($connect->affected_rows > 0) {

$antalkolonner = ($connect->affected_rows > 20) ? 2 : 1;

for($i=0;$i<$antalkolonner;$i++) {
$kolonne[$i]='';
}
$aktuelkolonne=0;


while($data = $res->fetch_assoc()) {
$id = $data['NID'];
$dato = $data['dato'];
$nHead = $data['nHead'];
$nyhed = $data['nyhed'];
$imgArray = unserialize($data['imgLinks']);
$kolonne[$aktuelkolonne] .=' <div class="nyhed">
<header>
<p>'.$dato.'</p>
<h4>
'.$nHead.' - Vis
</h4>
</header>

<div class="hide">'. $nyhed . '</p>
<div class="nyhedsBilleder">';
foreach ($imgArray['pics'] as $images) {
$tmb = substr($images, 0, -4)."_news.jpg";
$img = substr($images, 0, -4)."_gal.jpg";

$kolonne[$aktuelkolonne] .='<a class="lightBox" href="'.$img.'" data-lightbox="'.$nHead.'" title="'.$nHead.'"><img class="newsThumb" src="'. $tmb .'" alt="'.$nHead.'" /></a>';
}
$kolonne[$aktuelkolonne] .=' </div>
</div>
</div>';
$aktuelkolonne++;
if ($aktuelkolonne==$antalkolonner)$aktuelkolonne=0;
}
echo '<table style="width:80%;"><tr>';
for($i=0;$i<$antalkolonner;$i++) {
echo '<td style="vertical-align:top;">'.$kolonne[$i].'</td>';

Dennis Munding

unread,
Mar 2, 2018, 12:51:02 PM3/2/18
to
Hej Jan,

Jeg tager et kig på begge dine forslag henover weekenden.
Det ideelle vil være, at jeg kan undgå tabeller, men det vil jeg prøve
at arbejde på ud fra dine forslag.

Tusind tak for indsparket. :-)

Jeg vender tilbage, når jeg har fundet ud af en model. :-)

Dennis Munding

unread,
Mar 4, 2018, 6:05:26 AM3/4/18
to
Jeg har nu lavet en testside med ovenstående og det ser ud til at virke
perfekt.

Dog er der en lille detalje, som undrer/irriterer mig (satser på at jeg
finder en løsning/svar på det):

Når man klikker på en overskrift for at få vist selve nyheden, så
bliver den spalte breddere end den anden...?

Vil lige prøve med fikseret bredde på td'erne.


Testsiden er her: http://1dpb.dk/?side=test

Jan Hansen

unread,
Mar 4, 2018, 7:57:17 AM3/4/18
to
Dennis Munding skrev:

> Jeg har nu lavet en testside med ovenstående og det ser ud til at virke
> perfekt.
>
> Dog er der en lille detalje, som undrer/irriterer mig (satser på at jeg
> finder en løsning/svar på det):
>
> Når man klikker på en overskrift for at få vist selve nyheden, så
> bliver den spalte breddere end den anden...?
>
> Vil lige prøve med fikseret bredde på td'erne.
>
>
> Testsiden er her: http://1dpb.dk/?side=test

Det er rigtigt, jeg havde glemt at sætte spaltebredde på. Det skulle være rettet
nu, sammen med min fejl i hvornår, der skal sættes en </td> på til sidst:

<CODE>
if($connect->affected_rows > 0) {

$antalkolonner = ($connect->affected_rows > 20) ? 2 : 1;
$news_pr_kolonne=ceil($connect->affected_rows / $antalkolonner);
$antalnews=0; $bredde = 100 / $antalkolonner ;


echo '<table style="width:80%;"><tr>';
while($data = $res->fetch_assoc()) {
$id = $data['NID'];
$dato = $data['dato'];
$nHead = $data['nHead'];
$nyhed = $data['nyhed'];
$imgArray = unserialize($data['imgLinks']);
if ($antalnews==0) echo '<td style="vertical-align:top; width:'.$bredde.'%">';
if ($antalnews!=0) echo '</td>';
echo "</tr></table>";
}

Jan Hansen

unread,
Mar 4, 2018, 8:27:06 AM3/4/18
to
Dennis Munding skrev:

> Jeg har nu lavet en testside med ovenstående og det ser ud til at virke
> perfekt.
>
> Dog er der en lille detalje, som undrer/irriterer mig (satser på at jeg
> finder en løsning/svar på det):
>
> Når man klikker på en overskrift for at få vist selve nyheden, så
> bliver den spalte breddere end den anden...?
>
> Vil lige prøve med fikseret bredde på td'erne.

Det er rigtigt, jeg havde glemt at sætte spaltebredde på. Det skulle være rettet
nu, sammen med min fejl i hvornår, der skal sættes en </td> på til sidst:

<CODE>
if($connect->affected_rows > 0) {

$antalkolonner = ($connect->affected_rows > 20) ? 2 : 1;
$news_pr_kolonne=ceil($connect->affected_rows / $antalkolonner);
$antalnews=0; $bredde = 100 / $antalkolonner ;


echo '<table style="width:80%;"><tr>';
while($data = $res->fetch_assoc()) {
$id = $data['NID'];
$dato = $data['dato'];
$nHead = $data['nHead'];
$nyhed = $data['nyhed'];
$imgArray = unserialize($data['imgLinks']);
if ($antalnews==0) echo '<td style="vertical-align:top; width:'.$bredde.'%">';
if ($antalnews!=0) echo '</td>';
echo "</tr></table>";
}



Reply all
Reply to author
Forward
0 new messages