Zet een header boven alle results na een bepaald aantal dagen
Even een simpel voorbeeld:
post
post
post
archief
post (ouder dan 80 dagen)
post (ouder dan 80 dagen)
post (ouder dan 80 dagen)
post (ouder dan 80 dagen)
Ik ben er bijna qua code maar krijg het archief nog niet op de juiste plek.
Wat ik nu heb:
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
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
<?PHP
$reachedArchive = false;
foreach ( $feedarray->data as $key => $feed_data )
{
if($feed_data->full_picture != ''){
$fbimage = $feed_data->full_picture;
}else{
$fbimage = 'images/placeholder/placeholder.png';
}
$shortstrfb = substr($feed_data->message, 0, 70) . '...';
// if($feed_data->message != ''){
// $f++;
// }
$date1 = date("y-m-d");
$date2 = date("y-m-d",strtotime($feed_data->updated_time));
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
$result = $interval->format('%R%a');
// if($f > 5){
// break;
// }
if($feed_data->message != '' && $feed_data->from->name == 'Facebook pagina naam'){
if($result > -80 && $reachedArchive != true){
$reachedArchive = true;
$dagen = 'minder dan 80';
$facebookfeed .= '<h2>Archive</h2>';
}else{
$dagen = 'meer dan 80';
}
$facebookfeed .= '
'.$archive.'
<div class="col-md-4 col-sm-6 col-xs-12 item">
<div class="vk-project vk-project-grid-item">
<div class="vk-img-frame">
<span class="datecorner">'.date("d-m-Y",strtotime($feed_data->updated_time)).''.$dagen.'</span>
<a href="'.$feed_data->permalink_url.'" class="vk-img">
<img style="width:370px;height:270px;object-fit:cover;" src="'.$fbimage.'" alt="">
</a>
</div>
<div class="content-hidden">
<p class="inbeeldtext"><a href="'.$feed_data->permalink_url.'">'.$shortstrfb.'</a></p>
</div>
</div>
</div>';
}
}
echo $facebookfeed;
?>
$reachedArchive = false;
foreach ( $feedarray->data as $key => $feed_data )
{
if($feed_data->full_picture != ''){
$fbimage = $feed_data->full_picture;
}else{
$fbimage = 'images/placeholder/placeholder.png';
}
$shortstrfb = substr($feed_data->message, 0, 70) . '...';
// if($feed_data->message != ''){
// $f++;
// }
$date1 = date("y-m-d");
$date2 = date("y-m-d",strtotime($feed_data->updated_time));
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
$result = $interval->format('%R%a');
// if($f > 5){
// break;
// }
if($feed_data->message != '' && $feed_data->from->name == 'Facebook pagina naam'){
if($result > -80 && $reachedArchive != true){
$reachedArchive = true;
$dagen = 'minder dan 80';
$facebookfeed .= '<h2>Archive</h2>';
}else{
$dagen = 'meer dan 80';
}
$facebookfeed .= '
'.$archive.'
<div class="col-md-4 col-sm-6 col-xs-12 item">
<div class="vk-project vk-project-grid-item">
<div class="vk-img-frame">
<span class="datecorner">'.date("d-m-Y",strtotime($feed_data->updated_time)).''.$dagen.'</span>
<a href="'.$feed_data->permalink_url.'" class="vk-img">
<img style="width:370px;height:270px;object-fit:cover;" src="'.$fbimage.'" alt="">
</a>
</div>
<div class="content-hidden">
<p class="inbeeldtext"><a href="'.$feed_data->permalink_url.'">'.$shortstrfb.'</a></p>
</div>
</div>
</div>';
}
}
echo $facebookfeed;
?>
Ik bereken eerst het aantal dagen tussen de post en vandaag, als dat meer is dan 80 dan veranderd $reachedarchive van false in true (alleen als die niet true is).
Alleen hij stopt met het goed berekenen van de dagen wanneer ik '&& $reachedArchive != true' bij de if plaats. Wat doe ik fout?
Alleen de eerste post laat 'minder dan 80 dagen' zien terwijl de +- 5 opvolgende posts ook korter dan 80 dagen geleden zijn geplaatst. En de tekst 'archief' zet hij gelijk bij de eerste post.
Gewijzigd op 22/03/2017 10:35:56 door Snelle Jaap
iets als '2017-03-22 10:39'?
Ivo P op 22/03/2017 10:39:06:
wat zit er in $feed_data->updated_time?
iets als '2017-03-22 10:39'?
iets als '2017-03-22 10:39'?
Ja inderdaad met de tijdzone erbij, komt uit een json object via de facebook api. Maar met strtotime wordt het gewoon een normale datum precies in hetzelfde format als de variabele waar de huidige datum in zit.
$result is dan -1
if($result > -80 && $reachedArchive != true){
$reachedArchive = true;
}
-1 is groter dan -80 en we hadden het archief nog niet bereikt.
Dan zeg je nu direct "$reachedArchive = true"
rekenen met negatieve getallen is lastig :-)
ik denk dat je dit in kunt korten:
Code (php)
tot
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$datetime1 = new DateTime();
$datetime2 = new DateTime($feed_data->updated_time);
$interval = $datetime2->diff($datetime1);
$ouderdom = $interval->format('%a');
?>
$datetime1 = new DateTime();
$datetime2 = new DateTime($feed_data->updated_time);
$interval = $datetime2->diff($datetime1);
$ouderdom = $interval->format('%a');
?>
Zonder argument gaat DateTime() uit van vandaag/nu.
Aangenomen dat je artikelen niet uit de toekomst komen, kun je ook er vanuit gaan dat het getal altijd positief/negatief gaat worden. Ouderdom is mi. een duidelijkere naam die een positieve waarde kan bevatten.
Klopt. Maar wanneer ik jou kortere datum code vervang met de mijne dan is elke post meer dan 80 (of ik nou > of < gebruik). Wanneer ik mijn datum code gebruik en '&& $reachedArchive != true' weglaat dan laat hij overal wel juist zien of het bericht ouder is dan 80 dagen. Met dat stuk erbij werkt het niet meer, hoe kan dat?
kijk even wat er bij elke post in $result of $ouderdom zit.
Screenshot: https://i.gyazo.com/80923f215849ee795c6d19fb4e80d7e0.jpg
Maar als ik dan $dagen er weer inzet is alleen de 1e post minder dan 80 dagen en de rest meer. Terwijl zoals je ziet de 1e 3 minder dan 80 dagen geleden zijn gepost. Ik verander niets in de code alleen echo ik iets meer... wanneer ik de check op $reachedarchive weer weghaal dan laat hij $dagen wel zien met de juiste info.
Snap er niets van, in de check zelf veranderd niets ik echo alleen wat anders.
if($result > -80
-12 IS groter dan -80
maar toch zet je ArchiveReached op TRUE
dat zou je pas willen doen als $result inderdaad kleiner is dan -80
Inderdaad, het is nu gefixed zoals ik het wil, thanks!