2 resultaten weergeven
Normaal zou ik dit met een while functie doen. Maar omdat class bij beide resultaten anders is, heb ik het op deze manier gedaan.
Nu is mijn vraag, of er een nettere/betere manier is om dit te doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
$qry ='
SELECT
referenties.id,
referenties.naam,
referenties.tekst,
referenties.beoordeling,
referenties.medium,
referenties.datum,
referenties_medium.naam as mediumnaam,
referenties_medium.link
FROM
referenties
INNER JOIN
referenties_medium
ON
referenties.medium = referenties_medium.id
ORDER BY
RAND()
LIMIT
1';
if(!$result = $connection->query($qry)) {
echo 'Fout in query: '.$connection->error;
} else {
$list = $result->fetch_assoc();
$main .='
<blockquote class="blockquote1 first wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.1s">
<cite>'.$list['tekst'].'</cite>
<span class="author">'.$list['naam'].'</span>
<span class="date">'.$list['datum'].'</span>
<span class="star">'.$list['beoordeling'].'</span>
<a href="'.$list['link'].'" target "_blank">'.$list['mediumnaam'].'</a>
</blockquote>';
}
$qry2 ='
SELECT
referenties.id,
referenties.naam,
referenties.tekst,
referenties.beoordeling,
referenties.medium,
referenties.datum,
referenties_medium.naam as mediumnaam,
referenties_medium.link
FROM
referenties
INNER JOIN
referenties_medium
ON
referenties.medium = referenties_medium.id
WHERE
referenties.id != '.$list['id'].'
ORDER BY
RAND()
LIMIT
1';
if(!$result2 = $connection->query($qry2)) {
echo 'Fout in query: '.$connection->error;
} else {
$list2 = $result2->fetch_assoc();
$main .='
<blockquote class="blockquote1 second wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.2s">
<cite>'.$list2['tekst'].'</cite>
<span class="author">'.$list2['naam'].'</span>
<span class="date">'.$list2['datum'].'</span>
<span class="star">'.$list2['beoordeling'].'</span>
<a href="'.$list2['link'].'" target "_blank">'.$list2['mediumnaam'].'</a>
</blockquote>';
}
SELECT
referenties.id,
referenties.naam,
referenties.tekst,
referenties.beoordeling,
referenties.medium,
referenties.datum,
referenties_medium.naam as mediumnaam,
referenties_medium.link
FROM
referenties
INNER JOIN
referenties_medium
ON
referenties.medium = referenties_medium.id
ORDER BY
RAND()
LIMIT
1';
if(!$result = $connection->query($qry)) {
echo 'Fout in query: '.$connection->error;
} else {
$list = $result->fetch_assoc();
$main .='
<blockquote class="blockquote1 first wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.1s">
<cite>'.$list['tekst'].'</cite>
<span class="author">'.$list['naam'].'</span>
<span class="date">'.$list['datum'].'</span>
<span class="star">'.$list['beoordeling'].'</span>
<a href="'.$list['link'].'" target "_blank">'.$list['mediumnaam'].'</a>
</blockquote>';
}
$qry2 ='
SELECT
referenties.id,
referenties.naam,
referenties.tekst,
referenties.beoordeling,
referenties.medium,
referenties.datum,
referenties_medium.naam as mediumnaam,
referenties_medium.link
FROM
referenties
INNER JOIN
referenties_medium
ON
referenties.medium = referenties_medium.id
WHERE
referenties.id != '.$list['id'].'
ORDER BY
RAND()
LIMIT
1';
if(!$result2 = $connection->query($qry2)) {
echo 'Fout in query: '.$connection->error;
} else {
$list2 = $result2->fetch_assoc();
$main .='
<blockquote class="blockquote1 second wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.2s">
<cite>'.$list2['tekst'].'</cite>
<span class="author">'.$list2['naam'].'</span>
<span class="date">'.$list2['datum'].'</span>
<span class="star">'.$list2['beoordeling'].'</span>
<a href="'.$list2['link'].'" target "_blank">'.$list2['mediumnaam'].'</a>
</blockquote>';
}
Gewijzigd op 22/01/2016 04:22:43 door J C
In plaats van 2 keer ORDER BY RAND() LIMIT 1 kun je toch 1 keer ORDER BY RAND() LIMIT 2 gebruiken?
En daarna gewoon tijdens het ophalen de class per iteratie van je loop veranderen, bijvoorbeeld met een modulo operatie.
@ ward:
Dat kan inderdaad, ik kom alleen in de knoop met de blockquote, deze is bij beide weergave anders.
@Ben
Bedoel je dan zoiets?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
for($i = 0; $i < 2; $i++) {
if($i == 1){
$main .=' first';
} elseif ($i == 2){
$main .=' second';
}
}
if($i == 1){
$main .=' first';
} elseif ($i == 2){
$main .=' second';
}
}
Ik heb hier mee zitten stoeien maar kreeg het niet werkend, dus dacht het op deze manier niet kon.
edit: ik kreeg ineens een ingeving. Voor the while loop geef ik an:
$i = 0;
En dan in the while loop:
$i++
if($i==1){
...
} elseif ($i==2){
...
}
Weet niet of dit de meest handige manier is maar het werkt wel.
Gewijzigd op 22/01/2016 20:45:46 door J C
Kun je mee beetje helpen met de uitleg van de functie?
$i++ verhoogt $i elke keer met 1 als de functie langs komt
%2 2 keer uitvoeren of als $i gelijk is aan 2 dan $i is gelijk aan 0?
Geef eerst de waarde van $i terug
Verhoog vervolgens $i
Wanneer $i gelijk is aan 2 wordt deze gelijk gemaakt aan 0, de modulo operatie. Zie http://php.net/manual/en/language.operators.arithmetic.php
Het eindresultaat hiervan is een interpolatie tussen de getallen 0 en 1.
Dit is ook te bereiken met iets als $i & 1. Een eenvoudige AND operatie.
Ik heb dit gemaakt
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$i=0;
$stars = '<img src="'.$url.'images/star.png" alt="Star"/>';
$totalstars ='';
$count = $list['beoordeling'];
for($i = 0; $i < $count; $i++) {
$totalstars .= $stars;
}
?>
$i=0;
$stars = '<img src="'.$url.'images/star.png" alt="Star"/>';
$totalstars ='';
$count = $list['beoordeling'];
for($i = 0; $i < $count; $i++) {
$totalstars .= $stars;
}
?>
Waarbij $list['beoordeling'] als waarde 5 heeft.
Het script werkt prima, maar wilde even kijken of mijn manier nu de juiste is.
Gewijzigd op 23/01/2016 01:30:13 door J C
Code (php)
1
2
3
4
2
3
4
<?php
$stars = '<img src="'.$url.'images/star.png" alt="Star"/>';
$totalstars = str_repeat($stars, $list['beoordeling']);
?>
$stars = '<img src="'.$url.'images/star.png" alt="Star"/>';
$totalstars = str_repeat($stars, $list['beoordeling']);
?>
Gewijzigd op 23/01/2016 11:29:05 door Ben van Velzen