PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : استفاده از session بین جوملا و اسکریپت php



farajian86
02-21-2012, 07:20 AM
درود
در حال حاضر من یک سایت دارم که قسمتی از اون جوملایی و قسمتی php هست. مشکلی که الان وجود داره به این صورت هست که session ایجاد شده در قسمت php سایت ، در قسمت

جوملایی قابل دسترسی نیست .

بعد ازجستجوی که انجام دادم به نظر میاد که اون session ایجاد شده توی جوملا restart میشه .

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

safajuy
02-21-2012, 07:28 AM
سلام

شماميخواييد از نشست جوملا براي اسكريپتتون استفاده كنيد يا از نشست اسكريپتتون براي جوملا؟

توجه داشته باشيد كه نشستي كه اون اسكريپتتون توليد مي كنه بايد طبق استاندارد جوملا باشه و از توابع جوملا پيروي كنه. اسكريپتتون چنين خاصيتي داره؟

دركل مي خواييد از نشست چه استفاده اي بكنيد؟ شايد راه بهتري بود

موفق باشيد

farajian86
02-21-2012, 08:14 AM
من میخوام از نشست اسکریپتم توی جوملا استفاده کنم.
اگه منظور شما اینه که مثل چیزی که اینجا : "<b><font color=red>فقط کاربران عضو انجمن می توانند لینک ها را مشاهده کنند</font></b> _script (<b><font color=red>فقط کاربران عضو انجمن می توانند لینک ها را مشاهده کنند</font></b> _script)" گفته عمل کنم، امتحان کردم و جواب نداده.
بذارید بیشتر توضیح بدم:
توی صفحه ی اصلی سایتم یه if ... else دارم که یه متغیر رو توی نشست اسکریپت خودم بررسی می کنه.
اگه اون متغیر مقداردهی نشده باشه کدهای جوملا اجرا می شه و صفحه ی جوملایی نمایش داده می شه. در غیر این صورت اسکریپتی که خودم نوشتم اجرا میشه.
بررسی کردم و دیدم تا قبل از اینکه کدهای جوملا پردازش بشن مقادیر موجود توی نشست اسکریپت خودم قابل دسترس هستن؛ اما با اجرا شدن جوملا ظاهراً نشست اسکریپت من هم ریستارت میشه و مقادیرش از بین میره. :(
من حتی این راه رو امتحان کردم که قبل از هر کد دیگه ای یه متغیر گذاشتم که مقدار مورد نظزمو از نشست خودم می خونه و نگه می داره و توی نشست جوملا ذخیره کنه، ولی باز هم توی جوملا که بررسی می کنم مقدار نگرفته.

shmata
02-21-2012, 08:50 AM
این درسته که جوملا session ها ریست میکنه ولی مکانیزمی داره که شما نیازی به value نشست نخواهید داشت
با استفاده از

if ($user->guest)

میتونید مشخص کنید که کاربر login کرده یا خیر.
(اگر نیاز به value داشته باشید به این صورت
$session =& JFactory::getSession();
$session->set('name', "value"); میتونید به اون دسترسی داشته باشید)

اما راه حل مشکل شما :


$user =& JFactory::getUser();
if (!$user->guest) {
// YOU'r Bussiness logic
}else{
header("Location: YOUR LOGIN PAGE.php");
}

farajian86
02-21-2012, 03:30 PM
راه حل پیشنهادی شما توی لینکی که گذاشتم اومده ولی برای من جواب نداد.

کد من همچین چیزیه:

<?php
//اینجا متغیر خودمو بررسی می کنم که ست شده یا خیر
//اگه ست نشده باشه میره سراغ جوملا و اگه ست شده باشه اسکریپتی که خودم نوشتم اجرا می شه
if (!isset($_SESSION['started']))
{
$started = $_SESSION['started'];
// Set flag that this is a parent file.
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
define('JPATH_BASE', dirname(__FILE__));
require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';


// Mark afterLoad in the profiler.
JDEBUG ? $_PROFILER->mark('afterLoad') : null;

// (۱)
// ست کردن مقدار در نشست جوملایی
if(isset($started))
{
$session =& JFactory::getSession();
$session->set( 'started', $started );
}


// Instantiate the application.
$app = JFactory::getApplication('site');

// Initialise the application.
$app->initialise();

// Mark afterIntialise in the profiler.
JDEBUG ? $_PROFILER->mark('afterInitialise') : null;

// Route the application.
$app->route();

// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER->mark('afterRoute') : null;

// Dispatch the application.
$app->dispatch();

// Mark afterDispatch in the profiler.
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;

// Render the application.
$app->render();

// Mark afterRender in the profiler.
JDEBUG ? $_PROFILER->mark('afterRender') : null;

// Return the response.
echo $app;

}
else // اگه مقدار گرفته باشه این کار رو انجام بده
{
// (۲)
$_SESSION['started'] = 1;
echo "started!";
}
?>


بعد توی یکی از ماژولهای جوملا همچین اسکریپتی دارم که مقدار msg رو از توی نشست جوملایی می خونه و اگه مقدار داشت ازش استفاده می کنه:

<?php
defined('_JEXEC') or die;
JHtml::_('behavior.keepalive');
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
$session =& JFactory::getSession();
$started = $session->get( 'started' );
if(isset($started))
{
switch ($started)
{
case 1:
// some code
break;

case 2:
// some code else
break;

case 3:
// another some code
break;

default:
// Do nothing
}
}
// و ادامه اسکریپت ...
?>

اما مشکل اینه که توی ماژول (یعنی همین کد آخری) همواره "ست نشده" باقی می مونه!

محمد محسنی
02-22-2012, 05:54 AM
با سلام

لطفا نمونه کد های خود را برای من بفرستید

info [at] msm.ir

در ضمن توضیح کامل را هم بنویسید.
که از کجا به کجا میحواهید برسیدو
مبدا به مقصد


یا حق.