Zet een header boven alle results na een bepaald aantal dagen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Snelle Jaap

Snelle Jaap

22/03/2017 10:32:43
Quote Anchor link
Ik heb een aantal facebook posts op een pagina. Wanneer een post ouder is dan 80 dagen wil ik dat er een header (met de tekst archief) boven de 1e post die ouder is dan 80 dagen (dus niet boven elke post die dat is).

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>


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
 
PHP hulp

PHP hulp

27/11/2024 01:38:01
 
Ivo P

Ivo P

22/03/2017 10:39:06
Quote Anchor link
wat zit er in $feed_data->updated_time?

iets als '2017-03-22 10:39'?
 
Snelle Jaap

Snelle Jaap

22/03/2017 10:48:16
Quote Anchor link
Ivo P op 22/03/2017 10:39:06:
wat zit er in $feed_data->updated_time?

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.
 
Ivo P

Ivo P

22/03/2017 10:51:01
Quote Anchor link
stel de ouderdom is 1 dag:

$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$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');
?>


tot
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $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.
 
Snelle Jaap

Snelle Jaap

22/03/2017 11:07:29
Quote Anchor link
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?
 
Ivo P

Ivo P

22/03/2017 11:17:28
Quote Anchor link
debuggen:
kijk even wat er bij elke post in $result of $ouderdom zit.
 
Snelle Jaap

Snelle Jaap

22/03/2017 11:28:55
Quote Anchor link
Wanneer ik $result op de plek van de datum zet krijg ik overal het juiste aantal te zien. Zowel met de check op $reachedarchive als zonder.

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.
 
Ivo P

Ivo P

22/03/2017 11:43:01
Quote Anchor link
wat ik net zei:

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
 
Snelle Jaap

Snelle Jaap

22/03/2017 11:50:43
Quote Anchor link
Inderdaad, het is nu gefixed zoals ik het wil, thanks!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.