Laravel 6

Calendrier

Avatar de Clement04
Clement04

bonsoir bonsoir !

Je créer un calendrier (basique) qui affiche tout les jours du mois pour un système de cadeau journalier. Ma bdd est structuré comme ça pour la table giftlogs: id, user_id, day j'ai inserré ceci dedans: (1, 1, 23-05-2020)

On est donc le 23-05-2020, je fais donc un if($gift->day == '23-05-2020') et ça maffiche partout dans toutes les cases "déjà récuperer", alors que j'aimerai juste uniquement afficher dans la case du jour en question et également si on est le 23/05 que si j'ai récuperer le cadeau du 22/05 ca me l'écrit.

calendrier.blade

  @for ($i = 0; $i < date('t'); $i++)
                                    <div class="col-xl-2 day-calendar">
                                        <h1 class="align-left day">{{ $i+1 }}</h1>
                                            @if($gift->day == '23-05-2020')
                                                déja recuperer
                                            @endif 
                                            @if($i == date('d'))
                                            <form method="post" action="{{ route('calendar') }}">
                                                @csrf
                                                <button type="submit" class="btn-calendar">Recuperer</button>
                                            </form>
                                            @else
                                            <div class="calendar-give-off"></div>
                                            @endif
                                    
                                    </div>
                                    @endfor

Controller

$date = date('d-m-Y');
        $gift = GiftLogs::where('user_id', Auth::user()->id)
                        ->where('day', $date)
                        ->first();
        return view('client.calendar')->with('gift', $gift);
Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

T'as mis ton @if($gift->day == '23-05-2020') dans ta boucle for c'est donc normal que ce soit juste soit tout le temps, soit jamais. En plus, tu récupère le premier enregistrement. Si tu veux pouvoir afficher un calendrier complet, tu te faut récupérer tous les jours du mois, et non pas un seul il me semble.

En restant sur un seul jour, tu pourrais peut-être faire ta boucle comme ça:

@for ($i = 1; $i <= date('t'); $i++)
    <div class="col-xl-2 day-calendar">
        <h1 class="align-left day">{{ $i }}</h1>
            @if($gift->day ==  $i.'-05-2020')
                déja recuperé
            @endif 
            @if($i == date('d'))
            	<form method="post" action="{{ route('calendar') }}">
                	@csrf
                	<button type="submit" class="btn-calendar">Recuperer</button>
            	</form>
            @else
            	<div class="calendar-give-off"></div>
            @endif
    </div>
@endfor

La concatenation dans @if($gift->day == $i.'-05-2020'), je ne suis pas certain que ça fonctionne, il faut tester. Voilà, j'espère que ça aide.

Ps: attention aux fautes type é/er (j'ai créer / déjà récupérer) Ca ne change rien dans le code mais dans la vie ca fait la différence :)

Posté il y a 1 mois
Avatar de Clement04
Clement04

Hola ! Merci de ta réponse, je ne l'avais pas vu. Voici où en est mon code actuellement:

                                    @for ($i = 1; $i < intval(date('t')+1); $i++)
                                    <div class="col-xl-2 day-calendar">
                                        <h1 class="align-left day">{{ $i }}</h1>
                                            @if($i === intval(date('d')))
                                                @if($now->active == 0)
                                                <form method="post" action="{{ route('calendar') }}">
                                                    @csrf
                                                    <button class="btn-calendar" type="submit">Récuperer mon cadeau</button>
                                                    <div class="open-day">
                                                        @if($now->cadeau == 'credits')
                                                            <div class="credit-calendar"></div>
                                                        @endif
                                                        @if($now->cadeau == 'pixels')
                                                            <div class="pixel-calendar"></div>
                                                        @endif
                                                    </div>
                                                </form>
                                                @else
                                                <div class="check-circle">
                                                    <div class="check"></div>
                                                </div>
                                                @endif
                                            @else
                                                @forelse($gift as $data)
                                                
                                                    @if($data->day == $i AND $data->active == 1 AND $data->month == date('m') AND $data->year == date('Y'))
                                                        déjà récuperer
                                                    @endif
                                               
                                                @empty
                                                tu ne peux pas le récuperer
                                                @endforelse
                                            @endif
                                    </div>
                                    @endfor
 public function index()
    {
        $dateNow = date('d-m-Y');
        $date = explode('-', $dateNow);
        $gift = GiftLogs::where('user_id', Auth::user()->id)->where('month', intval($date[1]))->where('year', intval($date[2]))->where('active', 1)->get();

        $array = ['pixels' => 10, 'credits' => 90];
        $random = $this->random($array);

        $now = GiftLogs::where('user_id', Auth::user()->id)->where('month', intval($date[1]))->where('year', intval($date[2]))->where('day', intval($date[0]))->first();
        if(!$now)
        {
            GiftLogs::create([
                'user_id' => Auth::user()->id,
                'month' => intval($date[1]),
                'year' => intval($date[2]),
                'day' => intval($date[0]),
                'daygift' => $dateNow,
                'cadeau' => $random,
                'active' => 0
            ]);
            return redirect()->route('calendar');
        }

        return view('client.calendar')->with('gift', $gift)->with('random', $random)->with('now', $now);
    }

voici un screen de la page: https://image.noelshack.com/fichiers/2020/22/1/1590438410-capture.png

là où dans les cases il ni y a rien je veux afficher "tu ne peux pas le récuperer" mais çe ne s'affiche pas visiblement..

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

En fait je crois que le @empty ne se produit que si $gift est vide et s'il y a au moins un résultat dans tout le calendrier c'est qu'il n'est pas vide. Toi tu veux plutôt boucler sur $gift et s'il n'y a pas eu de résultat, alors tu note "Tu ne peux paps récupérer".

Essaie avec ça plutôt pour voir (à la place du forelse):

@foreach($gift as $data)
    @if($data->day == $i AND $data->active == 1 AND $data->month == date('m') AND $data->year == date('Y'))
        @php
            $recup = TRUE;
        @endphp
        Déjà récuperé        
    @endif
@endforeach
@if( $recup == FALSE )
    Tu ne peux pas le récupérer
@endif

C'est pas top mais ça devrait fonctionnner. Tu peux instancier directement $recup = FALSE à la création de la page pour que ce soit plus propre.

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.