راکت

ساخت صفحه آرشیو با php

8 پاسخ

سلام وقت بخیر
ببخشید من یه وب دارم که ماهنامه ها رو میخوام داخلش بزارم
یه آرشیو دارم مال سال 97 و یه سری هم مال سال 98 یعنی 6 ماه گدشته

حالا میخوام یه صفحه درست کنم به اسم بایگانی آرشیو یا هر چیز دیگه ای
میخوام وقتی وارد صفحه آرشیو میشم
به شکلی که میگم برای آرشیو کنه

مثلا بزنه
آرشیو سال 97
روش که کلیک کردم تمام pdf های سال 97 بیاد

و یه آرشیوم برای سال 98 ایجاد کنه و این 6 ماه رو بریزه داخلش

و وقتی سال 98 به اسفند رسیدیم تموم شد خودکار یکی برای 99 ایجاد کنه

چطور اینو میتونم درست کنم؟

@ali.bayat
@Alimotreb
@hesammousavi
@khanzadimahdi

ثبت پرسش جدید

پاسخ‌ها

8
محمدرضا کیانی
محمدرضا کیانی
@MoReKiani

تخصص: توسعه دهنده وب و موبایل

سلام خسته نباشید
با کوئری می تونید اینکار رو انجام بدید و فقط لازمه که ببینید چه تایمی این اطلاعات وارد شده و یا اگه مشخص نیست از طریق ایدی باید ببینید که چه زمانی بارگزاری شده یعنی از ایدی 1 تا 50 تو سال 97 بوده بعد شما کوئری می زنید که از ایدی 1 تا 50 را تو آرشیو 97 نشان بده
کار سختی نیست

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

درود
بسادگی با الکوئنت یا کوئری بیلدر می‌تونید این کارو انجام بدید
شما به کد SQL ای شبیه زیر احتیاج دارید، مثلا برای جدول posts:

select 
    year(created_at) year,
    count(*) posts
from posts
group by year;

که اگر بخواهیم با الکوئنت همین کوئری رو بزنیم به شکل زیر میشه:

App/Post::selectRaw('
    year(created_at) year,
    count(*) posts
')->groupBy('year')
    ->get()
    ->toArray();

برای نمایش آرشیو مربوط به هر سال می‌تونید از بدنه درخواست (body of request).. سال و ماه مورد نظر برای اعمال تفکیک رو، از Querystring دریافت کنید.. یعنی هر گزینه آرشیو لینکی داشته باشه شبیه زیر:

http://domain/archive/?year=1398

سپس در کنترلر برای تشخیص این داده‌ها به شکل زیر (توجه داشته باشید که الکوئنت متدی به نام whereYear هم داره که در اینجا ازش استفاده می‌کنیم):

$posts = Post::latest();
if ($year = request('year')) {
    $posts->whereYear('created_at', $year)
}

اگر قصد دارید چنین آرشیوی بسازید پیشنهاد می‌کنم قابلیت تفکیک به صورت ماهانه هم داشته باشید
موفق باشید

شاید پاسخ شما همین‌جا باشد

Davood
Davood
@dfardabasi

تخصص: PHP - Laravel

@ali.bayat

select 
    year(created_at) year,
    count(*) posts
from posts
group by year;

خیلی عذر میخوام میشه اون تیکه قبل از from posts رو برام توضیح بدید
مثلا کنار count(*) چرا posts رو نوشتید یا کنار year(created_at ) چرا year رو نوشتید؟؟؟؟

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

درود.
در سینتکس SQL می‌تونیم به اطلاعاتی که می‌خواهیم اصطلاحا یه Alias بدیم. یا یه نام که میشه با اون در جاهای دیگه‌ کوئری شروطی رو نوشت.. مثلا در این حالت به جای اینکه نام ستون رو created_at برگردونه.. به نام year برمی‌گردونه

در نظر بگیرید کوئری بالا در واقع شبیه زیره:

select 
    year(created_at) AS year,
    count(*) AS posts
...

حالا این AS آپشنال هست و می‌تونیم استفاده هم نکنیم

Davood
Davood
@dfardabasi

تخصص: PHP - Laravel

@ali.bayat
خیلی عالی و کامل
ممنون

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

خواهش می‌کنم
موفق باشید

soraal
soraal
@solmaz.ranji

تخصص: full stack web developer

اگه بخوایم به صورت ماهانه هم جدا کنیم باید چیکار کنیم؟

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

@solmaz.ranji
همون روش بالاست ولی کمی عوض میشه:

کوئری:

App/Post::selectRaw('
    year(created_at) year,
    month(created_at) month,
    count(*) posts
')->groupBy('year', 'month')
    ->get()
    ->toArray();

کنترلر:

$posts = Post::latest();
if ($year = request('year')) {
    $posts->whereYear('created_at', $year)
}
if ($month = request('month')) {
    $posts->whereMonth('created_at', $month)
}
$posts = $posts->get();

کنترلر فقط یک مثاله و روش های تمیز تری هم هست

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام