69b9b1e7993169c3e1c40e1b6a942463

دوباره حق حق گریه، دوباره آه
سلام بی تو به عکست به هر پگاه

منی که مرده ام اینجا بدون تو
تویی که خفته ای آنجا چو تکه ماه

4369a9c7951a8b60333d29d9bea3ac72

من دارم از این گور خالی میکنم دل
از سوگواری های عالی میکنم دل

از این مسافر های گرد از راه رفته
از چشم خیس و راه خالی میکنم دل

849fc5c969613c90dc5dadcd3b864d47

من شبی خواب تو را دیدم و شیدا گشتم
از خودم گم شدم و در تو هویدا گشتم

قصر رنگین و قمر، قرص و هوا، بی مانند
این همه بود و تو را دیدم و پیدا گشتم

6429aed0c33cd4fa24863a9a8a14ec27

نم نم قطره ی بارون
روی گونه ی خیابون

توی دریای خیالت
میزنه موج پریشون

61d6899b684c1b132394651d1cc45556

جامی از نور به دستان شب است.

پلک خود میبندم

تا در اندیشه ی دل، با ماه، پرواز کنم.

داشتن چینش مختلف برای تک آیتم و مجموعه در K2

چهارشنبه, 28 فروردين 1392 ساعت 10:34

سلام

گاهی در وب سایت ها نیاز داریم که 3 نوع چینش ماژول داشته باشیم، یا به قولی سه عدد Master Page داشته باشیم.

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

  • یک صفحه ی نخست
  • صفحه ی هر سرویس خبری
  • صفحه ی نمایش یک آیتم

به عنوان نمونه من در وب سایت زیر در قسمت سرویس های خبری این کار رو انجام دادم:

پایگاه خبری تحلیلی فانوس نیوز

متاسفانه جوملا و K2 به صورت عادی این امکان رو در اختیار ما نمیگذارند که بتونیم به این شکل صفحه بندی داشته باشیم.

اما برای اینکه بتونیم یه همچین امکانی رو داشته باشیم، من دو راه به ذهنم میرسه.

یک راه هک هسته ی جوملا هست و اضافه کردن یک پارامتر اضافی در هنگام بارگزاری شدن ماژول ها هست که دوست خوبم آقای مهدی محمدی به من یاد دادند.

دیگری هک یک فایل از K2 که در این مقاله توضیح خواهم داد.

 این مقاله در مورد k2 ورژن 2.6.1 هست و ممکنه مقداری تغییر در ورژن های دیگه داشته باشه.

جوملا برای تشخیص صفحات از پارامتری با نام Itemid استفاده میکنه.

و این همون چیزی هست که زمانی که میخوایم یک ماژول رو ذخیره کنیم تحت عنوان اینکه در چه صفحاتی نمایش داده خواهد شد استفاده میشه.

Itemid ها در حقیقت شماره ی id منو های ما هستند.

کاری که لازمه انجام بدیم این هست که سه نوع منو داشته باشیم و کاری کنیم که جوملا هر کدوم از سطوح سه گانه ی ما که شامل صفحه ی اصلی، مجموعه، آیتم میشه رو به یکی از منو ها مرتبط کنه.

خوب صفحه ی اصلی که مشخصه.

یک آیتم منو برای مجموعه ای که میخواهیم نمایش بدیم از نوع categories میسازیم و ماژول هاش رو ست میکنیم.

یک آیتم منو هم برای نمایش تکی یک آیتم K2 میسازیم و اون رو روی آیتم خاصی ست نمیکنیم.

لینکش به این شکل خواهد بود:

index.php?option=com_k2&view=item&layout=item&id=0

حالا باید سراغ تغییر در کد های فایل زیر بریم:

components\com_k2\helpers\route.php

وقتی فایل رو باز کنیم، در تابع _findItem حدود خط 160 تا 170 به کد زیر بر میخوریم:

else
{
    if ((@$item->query['view'] == $needle) && (@$item->query['id'] == $id))
    {
        $match = $item;
        break;
    }
}

این کد رو با این خطوط جایگزین میکنیم:

else if ((@$item->query['view'] == $needle) && (@$item->query['id'] == $id))
{
        $match = $item;
        break;
}
else if ((@$item->query['view'] == 'item') && (@$item->query['id'] == '' || @$item->query['id'] == '0'))
{
        $match = $item;
        break;
}

 توضیح اینکه، k2 برای تنظیم Itemid ها به این فایل مراجعه میکنه، و این تابع چک میکنه و دنبال منویی میگرده که مستقیما به مطلب (آیتم) ما لینک شده.

ما با تغییر مختصری که دادیم میگیم اگر منویی مستقیم به این آیتم لینک نشده بود، بگرد و ببین اگر منویی هست که به یک آیتم غیر مشخص (مثل اون منویی که ساختیم) لینک شده، اون رو انتخاب کن.

امیدوارم توضیحاتم واضح باشه.

سوالی بود در کامنت ها مطرح کنید. ایشالا که بتونم کمکی کنم.

یا علی

تعداد بازدید 9327 دفعه

نوشتن دیدگاه


/component/jcomments/captcha/61569.html
تصویر امنیتی جدید

استفاده از مطالب با ذکر منبع بلا مانع است.