PDA

View Full Version : حرفه ای: ایجاد پست های ثابت در پست های در حال تولید



belief.savior
یک شنبه 06 اردیبهشت 1394, 17:23 عصر
سلام و خدا قوت به همکاران عزیز؛

سوالی برایم پیش اومد که پس از کلنجار رفتن های متمادی به نتیجه ای رسیدم که برای اینکه به روشم مطمئن بشم به اینجا اومدم تا نظر دیگر همکارانم رو در این زمینه بدونم.

سایتی رو در نظر بگیرید مانند تویئتر و پست سر هم مطلب در سایت قرار میگیره.
حالا شما می خواهید در پست شماره 10 ام خبر، پستی به صورت ویژه و اختصاصی قرار دهید.

مثلا کاربری از توئیتر رو چون پستش خیلی مهم هست ستاره دار می کنیم، روی پست شماره 10 ام فیکس میشه و بقیه مطالب میان و میرن . طبق تصویر پیوست

یا در نظر بگیرید بین هر 10 تا پست می خوام تبلیع بذارم و ...


چیزی که به ذهن من اومد این بود که موقعیت یا پوزیشن یا order برای هر پست تعریف کنم، مثل سیستم جوملا

حالا شما دوستان هم نظری دارید که منو راهنمایی کنید ؟

زبان برنامه نویسی PHP و پایگاه داده my SQL و فریم ورک از پایه بر اساس MVC می باشد.


130649

-سیّد-
دوشنبه 07 اردیبهشت 1394, 08:39 صبح
سلام
اول بیاین بدون این چیزی که گفتید، صفحه رو طراحی کنیم. شما می‌خواین تمام پست‌های یه مطلب، به ترتیب زمان، از جدید به قدیم نمایش داده بشن. خوب برای این کار یه query می‌زنید و توش ORDER BY time DESC می‌زنید. بعد توی یه حلقه، همه رو نمایش می‌دید. حالا ممکنه بخواین تعداد رو محدود کنید و صفحه‌بندی هم بذارید.

حالا بریم سراغ تبلیغ. اگه می‌خواین به صورت ثابت، در تمام صفحات، بعد از دهمین پست یه تبلیغ نشون بدید مثلاً، خوب خیلی ساده توی اون حلقه بررسی می‌کنید به شماره‌ی ۱۰ رسیدید یا نه. اگر رسیدید، بعد از نمایش پست، تبلیغ مورد نظر رو نمایش می‌دید.
یا مثلاً اگه می‌خواین بعد از هر ۱۰ پست یه تبلیغ نشون بدید، چک می‌کنید که آیا شمارنده‌ی حلقه بر ۱۰ بخش‌پذیر هست یا نه.

اما اگه اون یکی حالت باشه که یه پست خاص رو توی یه صفحه‌ی خاص می‌خواین توی یه جای خاص نشون بدید، کنار اون query ای که می‌زنید، می‌تونید یه query دیگه هم بزنید و تمام پست‌های ویژه‌ی این تاپیک رو استخراج کنید. اون وقت کافیه که اون پست‌های ویژه مکانشون مشخص باشه. بعد توی حلقه‌ی مورد نظر، وقتی به مکان مورد نظر رسیدید، اول پست ویژه رو نمایش می‌دید، بعد به سراغ ادامه‌ی حلقه می‌رید.

پس ۲ تا جدول داریم: یکی جدول پست‌های عادی، یکی هم جدول پست‌های ویژه. البته می‌شه هم توی یه جدول کنار هم گذاشتشون، ولی برای سادگی طراحی، جداشون می‌کنیم.
توی پست‌های عادی، اطلاعات پست (عنوان، مطلب، فرستنده، تاپیک) رو داریم و زمان رو.
توی پست‌های ویژه، علاوه بر اطلاعات پست، مکانش رو هم داریم.
برای این مثالی که زدید مثلاً اینطوری می‌شه:

جدول پست‌های معمولی:



ID

title
post
sender
Topic_id
time


1
Test1
Abcd
A
100



2
Test2
Efgh
B
100



3
Test3
Ijkl
C
100



4
Test4
Mnop
D
100





جدول پست‌های ویژه:



ID

title
post
sender
Topic_id
time
fixed_row


1
special
aaaa
X
100

2

arash691
دوشنبه 07 اردیبهشت 1394, 11:08 صبح
همون یه جدول کافیه ، فقط کافیه به جدول post یه فیلد type بهش اضافه بشه

-سیّد-
دوشنبه 07 اردیبهشت 1394, 11:51 صبح
همون یه جدول کافیه ، فقط کافیه به جدول post یه فیلد type بهش اضافه بشه
البته فقط با یه فیلد type نمی‌شه حلش کرد، حداقل باید fixed_row رو هم اضافه کنید تا مکانش مشخص باشه.
ولی همونطور که گفتم شاید بشه با یه جدول درستش کرد، ولی یه مقدار پیچیدگی ایجاد می‌کنه. البته راستش نمی‌دونم اصلاً شدنی هست یا نه!
مثلاً فرض کنید می‌خواین ۱۰ تا پست رو بیشتر نشون ندید. برای این کار میاین توی query می‌گین LIMIT 10 . حالا در نظر داشته باشید که این پست‌های خاص، ممکنه توی یه بازه‌ی زمانی توی این ۱۰ تا قرار بگیرن، و توی یه بازه‌ی زمانی دیگه خارج این ۱۰ تا. بنابراین نتیجه‌ی query در زمان‌های مختلف فرق می‌کنه و این شما رو بیچاره می‌کنه!

MMSHFE
سه شنبه 08 اردیبهشت 1394, 12:36 عصر
میشه فقط فیلد fixed_row گذاشت و nullable باشه. اینطوری پستهای عادی این فیلدشون null هست و پستهای ویژه این فیلد رو مقداردهی میکنن. حالا میتونید این فیلد رو unique هم کنید که هیچ دو پست ویژه ای توی این فیلد مشترک نباشن و نخوان توی یک ردیف نشون داده بشن. بهرحال هرچقدر بیشتر سناریوی پروژه شما مشخص بشه، بهتر میشه توی طراحی کمک کرد.