Zet een header boven alle results na een bepaald aantal dagen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

OutSystems Developer / International environment /

Functieomschrijving Would you like to work in a professional and international working environment and do you have experience in the field of OutSystems? Apply now! Translate wishes and requirements into technical designs; Design and develop new software feautures and technologies, mainly in the field of logistics/planning; Maintainance, administration and improvement of the OutSystems platform; Solving issues and bugs within the software; Define and run test plans; Documentation of development and bugfixes; Constant improvement of the OutSystems platform and follow-up of newest innovations within this field. Functie-eisen Knowledge of and experience with OutSystems is required. Experience with other low-code platforms is

Bekijk vacature »

Senior OutSystems Developer / International enviro

Functieomschrijving Would you like to work in a professional and international working environment and do you have extensive experience in the field of OutSystems? Apply now! Translate wishes and requirements into technical designs; Design and develop new software feautures and technologies, mainly in the field of logistics/planning; Maintainance, administration and improvement of the OutSystems platform; Solving issues and bugs within the software; Define and run test plans; Documentation of development and bugfixes; Constant improvement of the OutSystems platform and follow-up of newest innovations within this field. Functie-eisen Knowledge of and multiple of years experience with OutSystems is required. Experience with

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

26/09/2020 02:07:08
 
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.