نمایش نتایج 1 تا 9 از 9

نام تاپیک: طراحی مناسب برای ویزارد

  1. #1

    طراحی مناسب برای ویزارد

    سلام

    ویزارد ها در وب کاربردهای زیادی دارن. مثلا فرایند ثبت نام در دانشگاه، کنکور، خرید بیلیط و فروش و ... . دوستان من دنبال یک طراحی ( Design) مناسب برای پیاده سازی این نمونه از ویزارد ها هستم

  2. #2

    نقل قول: طراحی مناسب برای ویزارد

    سلام ... آقا سیستم عامل کجا اینجا کجا ؟ من گاهی وبلاگ شما رو دنبال می کردم ...

    منظورت از ویزارد چیه ؟ طراحی رابط کاربری ؟ یا طراحی فرآیند ها ؟

    سوالات قبلی که پرسیده بودی من با Angularjs کار نکرده بودم . اما اینجا مطالب خوبی در مورد کار با این کتابخانه هست که فکر می کنم پاسخ سوال شما هم درش هست .

  3. #3

    نقل قول: طراحی مناسب برای ویزارد

    برای کار با Wizardها باید از مدیریت Session یا Cookie درکنار یک قالب مناسب برای نمایش مثل Bootstrap و امثال اون (برای جذابیت فرم) یا jQueryUI و YUI و... برای ایجاد حالت Tab در صفحه استفاده کنید.

  4. #4

    نقل قول: طراحی مناسب برای ویزارد

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


    منظورت از ویزارد چیه ؟ طراحی رابط کاربری ؟ یا طراحی فرآیند ها ؟
    برای کار با Wizardها باید از مدیریت Session یا Cookie درکنار یک قالب مناسب برای نمایش مثل Bootstrap و امثال اون (برای جذابیت فرم) یا jQueryUI و YUI و... برای ایجاد حالت Tab در صفحه استفاده کنید.

    بذارید بهتر توضیح بدم. هر ویزارد از یه جنبه هایی شبیه ماشین های FSM است. با این فرق که loop بینهایت نداره. یعنی اینکه از یکسری مرحله (صفحه) تشکیل شده که من دوست دارم اون رو state نام گذاری کنم. در هنگام ورود به هر وضعیت (state) باید ورودی های قبلی چک بشن ( برای امنیت بیشتر و جلوگیری از برخی از نفوذ ها ) و همچنین در هنگام خروج باید ورودی های جدید بررسی بشن. مثلا برای روند خرید کالا یک همچین ماشین وضعیتی (FSM) خواهیم داشت:

    انتخاب کالا ->‌وارد کردن مشخصات فردی -> انتخاب سامانه پرداخت -> پرذاخت بانک -> برگشت از بانک و تایید و ...

    اگر با روش معمول پیش بریم و برای هر کدوم از این مراحل یک تابع بسازیم و بعد فراخوانی کنیم. کد بسرعت بزرگ و پیچیده میشه (اسپاگتی). دنبال یه دیزاین می گردم که بتونم خوب کد رو مدیریت کنم. به شکلی که با حداقل کد بتونم این کار رو انجام بدم. فعلا یه چیزهایی تو ذهنم هست منتها باید یه مقدار بیشتر اونها رو مدیریت کنم.
    آخرین ویرایش به وسیله pswin.pooya : سه شنبه 19 آذر 1392 در 11:36 صبح

  5. #5

    نقل قول: طراحی مناسب برای ویزارد

    خوب شما توی سشن یا کوکی کلاینت، آرایه بسازین برای Stepها و هر Step، خودش باز یک آرایه است شامل انتخابهای کاربر یعنی وقتی به مرحله قبل یا بعد میره، اطلاعات فرم موجود در همون مرحله توی خونه موردنظر از آرایه سشن ذخیره میشه. اینطوری توی هر مرحله میتونید چک کنید سشن مراحل قبل وجود داره یا نه.

  6. #6

    نقل قول: طراحی مناسب برای ویزارد

    چیزی که فعلا تو ذهنم هست یه چیزی شبیه کد زیر است:

    <?php
    //################################################## ############################
    //# title: Wizard Manager
    //# c-date: Dec-10-2013
    //# author: Pooya Shahinfar (Pswin) - pswinpo@gmail.com
    //################################################## ############################


    interface iState
    {
    //! executes when when we start state
    public function enter();

    //! exectues when we are in the state
    public function execute();

    //! executes when we exit
    public function exit();
    }

    class WizardManager
    {
    //====================
    // public members
    //====================

    //! parent
    public $parent = null;

    //====================
    // public methods
    //====================

    //! change state
    public function changeState( $_new_state )
    {
    //! call exit method from current state
    if ( $this->cur_state != null )
    {
    $this->cur_state->exit();
    }

    //! change state
    $this->cur_state = $_new_state;

    //! call enter method of new state
    $this->cur_state->enter();
    }

    //! changes global state
    public function changeGlobal( $_new_state )
    {
    //! call exit method from current state
    if ( $global_state != null )
    {
    $this->global_state->exit();
    }

    //! change global state
    $this->global_state = $_new_state;

    //! call enter method of new gloabl state
    $this->global_state->enter();
    }

    //! run
    public function execute()
    {
    if ( $this->cur_state != null )
    {
    $this->cur_state->execute();
    }

    if ( $this->global_state != null )
    {
    $this->global_state->execute();
    }
    }

    //! validation
    public function validate( $_seq )
    {
    // converting checking seqance into an array
    $ar = implode( '->', $_seq );

    //! checking for array
    if ( !is_array( $ar ) ) return false;

    try
    {
    foreach ( $ar as $i => $key )
    {
    if ( $this->parent->$key() == false )
    {
    return false;
    }
    }
    }
    catch( Exception $ex )
    {
    // set_error('10114E101');
    // log_error('Error in wizard: '. $ex->getMessage() );
    return false;
    }

    return true;
    }

    //====================
    // private members
    //====================

    //! current state
    private $cur_state = null;

    //! previous state
    private $prv_state = null;
    }

    ?>


    البته فعلا تستش نکردم.

    اصول کار اینجوری که شما برای هر کدو از مراحل یک کلاس از کلاس iState میسازید ( حالا میتونید این کلاس رو در همون فایل یا فایلهای جدا بذارید). بعد به کمک متد changeState از مدیر ویزارد وضعیت رو عوض می کنید.

    حالا چرا هر وضعیت سه تا تابع داره:

    ۱. تابع enter: زمانی است که برای اولین بار وضعیت رو اجرا می کنید. می تونید از اون برای بررسی داده های وضعیت های قبلی استفاده کنید.
    ۲. تابع execute: زمانی است که وضعیت تکرار میشه. برای مواقعی که کاربر مثلا داده های رو تو فروم اشتباه وارد کرده به درد می خوره
    ۳. تابع exit: زمانی است که از وضعیت خارج میشید. می تونید از اون برای چک نهایی داده ها استفاده کنید.

    حالا با هر بار رفرش صفحه شما کافیه متد execute از مدیر ویزارد رو اجرا کنید و بقیه کارها اتوماتیک انجام میشه.

    من تو کد زنی متوجه شدم که بیشترین کدها مربوط به چک داده های کاربره برای همین متد validate رو اضافه کردم که یک رشته به صورت زیر میگیره:

    check_info->chek_user-> ...


    حالا هر کدوم از عبارتهای بین -< یک متد در کلاس پدر است که می تونید اون رو به کمک عضو parent از کلاس مدیر ویزاد ست کنید. این متدها باید مقدار true یا false بر گردونن که اعتبار داده ها رو نشون بدن.

  7. #7

    نقل قول: طراحی مناسب برای ویزارد

    خوب این روش هم روش خوب و کاملیه و میتونید با Serializeکردن یا json_encode و...، اشیاء رو توی سشن یا کوکی یا دیتابیس یا هرجای دیگه که بخواین، نگهداری کنید.

  8. #8

    نقل قول: طراحی مناسب برای ویزارد

    خوب این روش هم روش خوب و کاملیه و میتونید با Serializeکردن یا json_encode و...، اشیاء رو توی سشن یا کوکی یا دیتابیس یا هرجای دیگه که بخواین، نگهداری کنید.

    اینم ایده خوبیه. همین الان داشتم رو همین کار می کردم که چه شکلی وضعیت و پارامترهای اون رو نگهداری کنم. فقط اگر اندازه داده سریالی شده بزرگ بشه مشکل ایجاد نمی کنه؟! ( از نظر ذخیره توی session‌)

  9. #9

    نقل قول: طراحی مناسب برای ویزارد

    تو شرایط عادی نه ولی اگه تعداد بازدید همزمانتون بالا بره، چون سشن توی رم سرور ذخیره میشه، به سرور فشار میاره و از اونجا که اطلاعات ویزارد برای هر کاربر، فقط به درد خودش میخوره و مختص هر کاربره و معمولاً هم تا وقتی توی دیتابیس ثبت نشده، امنیتش مهم نیست، بهتره از کوکی برای اینکار استفاده کنید که برای هر کاربر، روی کامپیوتر خودش ذخیره بشه. با کمک کوکی حتی میشه براش طول عمر هم بگذارین تا در دفعات بعدی که به سایت مراجعه میکنه (مثلاً تا 2 هفته) بتونه بقیه Wizard رو انجام بده.

تاپیک های مشابه

  1. سوال: کتاب مناسب برای طراحی کامپایلر
    نوشته شده توسط Alt+F4 در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 7
    آخرین پست: پنج شنبه 09 دی 1389, 13:54 عصر
  2. گفتگو: گزینه ی مناسب برای نوشتن یک محیط طراحی (نقاشی)
    نوشته شده توسط Mrs.Net در بخش تحلیل و طراحی نرم افزار
    پاسخ: 2
    آخرین پست: شنبه 31 مرداد 1388, 22:30 عصر
  3. پاسخ: 1
    آخرین پست: شنبه 19 بهمن 1387, 15:36 عصر
  4. پاسخ: 0
    آخرین پست: یک شنبه 22 بهمن 1385, 09:31 صبح
  5. پاسخ: 2
    آخرین پست: پنج شنبه 19 بهمن 1385, 21:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •