الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس حول تصميم موقع

مثبّترائج
بدأه بسام العيساوي في 12 يناير 2009 · 80 رد · 113,343 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#51

فكرة الموقع الذي سنقوم بإنشاءه ...

الموقع عباره عن موقع المجله ... يحتوي على أزرار في الآعلى وهي :

من نحن , وثائق , تحميل , الرئيسيه

وأزرار بأسفل الترويسه وهي القائمة الرئيسيه وتحتوي على :

الرئيسيه , عن المجله , مجتمع , المنتدى , الإضافات , مصادر , وثائق , مطورين , شراء

في الصفحة الرئيسيه تظهر مقدمه يمكن من خلالها تحميل آخر نسخة وتحتوي على آخر الأخبار بطريقه ما

وعن الدخول إلى صفحة وثائق ستظهر قائمة على اليمين تحتوي على شروحات على شكل دورس وكل درس له رابط وعند الضغط على أي درس ستبقى القائمة وستظهر محتويات الدرس في باقي الصفحة على اليسار

بعض الدروس تحتوي على روابط لمصادر أو ملفات وغيرها لذلك إذا كان الدرس يحتوي على أي روابط أخرى ستظهر هذه الروابط في أعلى الصفحة

عند الضغط على إضافات ستظهر الإضافات بشكل مرتب وكل إضافة يتم تحميلها ستنزل دون تدخل منا. طبعا لن تكون هناك قائمة على اليمين فهذه القائمة تظهر فقط في الوثائق

عند الضغط على مطورين ستظهر قائمة على اليمين تحوي أسماء جميع المطورين وعند الضغط على أي إسم يتظهر معلومات عن هذا الشخص والمواضيع التي قام بتحميلها تكون بشكل قائمة على جهة اليسار وعند الضغط على أي موضوع سيظهر محتوياته في وسط الصفحة وتبقى قائمة المواضيع والمطورين

صفحة شراء لن يتمكن من الدخول إليها إلا الأعضاء لذلك هناك صفحات يمكن إخفاؤها عن الزوار وإظهارها للأعضاء

في ذيل الصفحة سيوجد أزرار مثل إتصل بنا , القصاصات , تسجيل , الرئيسيه

كما يوجد آخر خمسة أخبار تم إضافتها للموقع .

الصفحة الرئيسيه عباره عن بورتال يحتوي على الأخبار وعدد الأعضاء وتصويت , وأهم الإضافات , وأهم القوالب وآخر الدروس وغيرها

مما سبق أريد أن أظهر مدى إمكانيه المجله في إنشاء المواقع المختلفه وفيما يلي من دورس وشروحات سيتم فهم كيف يتم ذلك بكل سهوله وأرجوا من جميع القراء الإهتمام والسؤال عن أي إشكاليه , الفكرة من هذه المجله هو سهوله الإستخدام فكثير منا قام بتحميل جوملا وورد بريس على موقعه ولكنه سرعان ماقام بحذفه لصعوبه التحكم فيه ومن يقول أن استخدام هذه المجلات سهل يكون له خبره كبيره في مجال البرمجه بالإضافه إلى خبره في دراسه المجله وكيفيه التعديل على القوالب فهذه المجلات التحكم في خصائصها أصعب من التحكم في خصائص المنتديات وأقول هذا الكلام بعد التجربه فقد كنت أنوي عمل قالب لجوملا فوجدت أن الأمر صعب جدا

من خلال هذه المجله سيكون أمر تركيب القالب بسيط جدا ولكن ضريبه هذه السهوله هو قله الإمكانيات فهي مخصصه للمواقع التي تحتاج إلى قوائم وأعضاء , تقريبا مثل مجلات الأخبار والمواقع الإخباريه ومواقع أصحاب الشركات والمصانع ولكن لن يستفيد منها إلا المطورين لذلك يمكنك بعد هذه الشروحات من تصميم موقع وبيعه بإذن الله إن كان لديك معرفه بسيطه في البي أتش بي والماي سيكول وتصميم الموقع بشكل عام , ومايهمك هو سرعه إنجاز الموقع من خلال هذه المجله

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#52

تم إضافة نموذج للتسجيل وفصل الستايل(CSS) عن الهتمل (HTML) كما يلي :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta name="author" content="bastr3" />
        <meta name="keywords" content="bss cms" />
        <meta name="description" content="Blood Sopt Site CMS, simple cms project " />
        <meta name="robots" content="all" />
        <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="?rss=php" />
        <link href="demo.css" rel="stylesheet" type="text/css" />
        <title>Demo blood spot site template</title>
    </head>
    <body>
        <div id="main">
            <div id="header">
                <div id="up_button">
                    <div id="right_col">
                        <ul>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                        </ul>
                    </div>

                    <div id="left_col">
                        <div id="logo"></div>
                    </div>
<div id="login">
           <form name="loginForm" action="/">
                        <input class="loginBox" name="name">
                        <input class="loginBox" name="pass">
                        <input value="Login" type="submit">
        </form>
</div>
                </div>
                <div class="clear"></div>



                <div id="search">
                    <form name="searchForm" action="/">
                        <input class="searchBox" value="Search entire site" name="Search">
                        <input value="Search" type="submit">
                    </form>
                </div>


                <div id="main_header_menu">
                    <ul>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                    </ul>
                </div>
            </div>

            <div class="clear"></div>
            <div id="content">
                <div class="box">box1</div>
                <div class="box left_side" style="width:200px;float:left;">box1 left</div>
                <div class="box right_side" style="width:700px;float:right;">box1 right</div>
                <div class="clear"></div>

            </div>
            <div id="footer">footer
                <ul>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                </ul>
            </div>
        </div>

    </body>
</html>

نلاحظ في البايه بعض المتغيرات التي يجب أن يتم تعبئتها من خلال لوحة التحكم , خصوصا أني ذكرت إمكانيه بيع الموقع ومن سيشتري الموقع لن يكون قادرا على التعديل على أي شيء في القالب لذلك أصبح من الضروري إعطاء إمكانيه تغيير متغيرات في القالب ... سنرى عن ماذا أتحدث :

       <meta name="author" content="****" />
        <meta name="keywords" content="******" />
        <meta name="description" content="********" />
        <meta name="robots" content="all" />
        <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="?rss=php" />
        <link href="demo.css" rel="stylesheet" type="text/css" />
        <title>******</title>

في هذه الحاله فقط قم بكتابه أي متيرات تريدها ولكن بين علامتي بالمئه %% مثل :

        <meta name="author" content="%author%" />
        <meta name="keywords" content="%keywords%" />
        <meta name="description" content="%description%" />
        <meta name="robots" content="all" />
        <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="?rss=php" />
        <link href="demo.css" rel="stylesheet" type="text/css" />
        <title>%title%</title>

ثم نذهب إلى صفحة الإعدادات في لوحة التحكم ونضيف إعدادات جديده تحمل نفس إسم المتغير كما في الصورة

post-21336-12615082724865_thumb.png

الآن فهمنا أن أي متغير يمكننا إضافته داخل القالب بهذه الطريقة مثل حقوق الملكيه وغيرها وبهذا يمكن لصاحب الموقع التحكم فيه بدون أن يتدخل في القالب

الآن يجب أن نعرف متغيرات مهمه في القوالب وسنتحدث عنها كل في مكانه

أول متغير هو مكان القالب

%template:path%

لكي تتمكن من استدعاء الستايل وملفات الجافاسكريبت والصور كما في المثال :

        <link href="%template:path%demo.css" rel="stylesheet" type="text/css" />

الآن نبدأ بالتفكير في كيفيه تقسيم الموقع ... يوجد لدينا صفحات تحتوي على عمودين وأخرى تحتوي على عمود واحد وبعضها على ثلاثه أعمده كما يوجد صفحات تحتوي على مقدمة كالصفحة الرئيسيه وتحتوي على مجموعه من الحاويات (Containers) وصفحات تحتوي فقط على الماده (content) فقط مثل الصفحات التي نريد استدعاؤها عن طريق الأجاكس ... إذن نبدأ بتقسيم القالب إلى عدة قوالب كل قالب في ملف منفصل ويحمل أي اسم تريده ولكن يفضل أن يكون الإسم يدل على المحتوى

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#53

قلنا سنقسم القالب إلى قوالب مفصله وكل قالب في ملف لنحصل مبدئيا على الملفات التاليه

header.inc

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta name="author" content="%author%" />
        <meta name="keywords" content="%keywords%" />
        <meta name="description" content="%description%" />
        <meta name="robots" content="all" />
        <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="?rss=php" />
        <link href="%template:path%demo.css" rel="stylesheet" type="text/css" />
        <title>%title%</title>
    </head>
    <body>
        <div id="main">
            <div id="header">
                <div id="up_button">
                    <div id="right_col">
                        <ul>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                        </ul>
                    </div>

                    <div id="left_col">
                        <div id="logo"></div>
                    </div>
<div id="login">
           <form name="loginForm" action="/">
                        <input class="loginBox" name="name">
                        <input class="loginBox" name="pass">
                        <input value="Login" type="submit">
        </form>
</div>
                </div>
                <div class="clear"></div>



                <div id="search">
                    <form name="searchForm" action="/">
                        <input class="searchBox" value="Search entire site" name="Search">
                        <input value="Search" type="submit">
                    </form>
                </div>


                <div id="main_header_menu">
                    <ul>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                    </ul>
                </div>
            </div>

            <div class="clear"></div>

الملف الثاني :

footer.inc

            <div id="footer">footer
                <ul>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                </ul>
            </div>
        </div>

    </body>
</html>

الملف الثالث وهو الموقع بعمود واحد وكما نعلم سنقوم بإستدعاء الترويسه والذيل لكي تكتمل الصفحة ويكون كما يلي :

1colm.inc

{%template:header.inc%}
            <div id="content">
                <div class="box">box1</div>
            </div>
{%template:footer.inc%}

سأشرح ماتم فيما سبق ... وضعنا متغيرين في الأعلى هو

{%template:header.inc%}

يعني إستدعاء القالب الخاص بالترويسه والثاني في آخر الشيفرة لإستدعاء الذيل , مما سبق يمكننا استدعاء اي قالب داخل قالب آخر ونستفيد من مثل هذه التقنيات تصنيف القوالب واستخدامها داخل الصفحات , توضيح أكثر : تخيل أن لديك قالب لتسجيل الدخول أو البحث وتريد استخدامه داخل صفحة ما , يمكنك ذلك بدون إعادة كتابه الشيفره مرة أخرى فقط تستدعي القالب داخل محتوى الصفحة وهناك الكثير من الأمثله التي ستتبادر لذهنك عندما تصلك الفكرة .

القالب الخاص بعمودين :

2colm.inc

{%template:header.inc%}
            <div id="content">
                <div class="box left_side" style="width:200px;float:left;">box1 left</div>
                <div class="box right_side" style="width:700px;float:right;">box1 right</div>
                <div class="clear"></div>

            </div>
 {%template:footer.inc%}

قالب ثلاثة أعمده

3colm.inc

{%template:header.inc%}
            <div id="content">
                <div class="box">box1</div>
                <div class="box left_side" style="width:200px;float:left;">box1 left</div>
                <div class="box right_side" style="width:700px;float:right;">box1 right</div>
                <div class="clear"></div>

            </div>
{%template:footer.inc%}

بقي القالب الأخير وهو الخاص بتقنيه الأجاكس وهو ملف فارغ حتى الآن ويحمل الإسم

ajax.inc

لرؤية الملفات داخل القالب الرئيسي وهو بإسم demo

demo.rar

لو قمنا بتصفح الموقع بهذا الشكل فسنجد صفحة بيضاء لآننا لم ننشئ بعد أي صفحة ولم نضع المتغيرات الخاصه بما سيظهر من محتوى داخل الصفحات ...

تم تعديل هذه المشاركة بواسطة bastr3 في 2 يناير 2010 في 04:11

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#54

وصلنا فيما سبق إلى كيفيه تقسيم القوالب وإستدعائها ,ولكن كيف ستجعل المستخدم يختار القالب الخاص بعمودين لصفحة ما وكيف ستخفي عنه قالب الترويسه لآنه ببساطه يتم استدعاؤه فلا حاجه بنا لإظهاره إلى المستخدم ...

الأمر أصبح كالتالي :

في بداية كل قالب ( السطر الأول ) سنضع متغيرين بينهما فاصله منقوطه الأول خاص بالإسم الذي سيظهر في لوحة التحكم والثاني ليتم إستخدامه في البرمجه

الشروط في الإسم الآول لاشيء

في الإسم الثاني إستخدام الحروف والأرقام فقط بدون سيس أو أي علامات أخرى

ستكون النتيجه في قالب

3colm.inc

Pages of three columns;colm3
{%template:header.inc%}
            <div id="content">
                <div class="box">box1</div>
                <div class="box left_side" style="width:200px;float:left;">box1 left</div>
                <div class="box right_side" style="width:700px;float:right;">box1 right</div>
                <div class="clear"></div>

            </div>
{%template:footer.inc%}

بالنبسه للقوالب التي لانريد إظهارها في لوحة التحكم يكون الإسم لها none , لنأخذ قالب ذيل الصفحة كمثال :

footer.inc

none;footer
            <div id="footer">footer
                <ul>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                </ul>
            </div>
        </div>

    </body>
</html>

لنرى كيف ستظهر أسماء القوالب في لوحة التحكم :

post-21336-12615930760406_thumb.png

بعد أن إخترنا قالب لكل صفحة نأتي إلى الموقع لنراه كما في الصورة

post-21336-12615921700872_thumb.png

وشيفرة الصفحة هي :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta name="author" content="Bassam essa [bastr3]" />
        <meta name="keywords" content="simple cms project" />
        <meta name="description" content="Blood Sopt Site CMS, simple cms project " />
        <meta name="robots" content="all" />
        <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="?rss=php" />
        <link href="template/demo/demo.css" rel="stylesheet" type="text/css" />
        <title>simple CMS </title>
    </head>
    <body>
        <div id="main">
            <div id="header">
                <div id="up_button">
                    <div id="right_col">
                        <ul>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                            <li><a href="#">button1</a></li>
                        </ul>
                    </div>
                    <div id="left_col">
                        <div id="logo"></div>
                    </div>
<div id="login">
           <form name="loginForm" action="/">
                        <input class="loginBox" name="name">
                        <input class="loginBox" name="pass">
                        <input value="Login" type="submit">
        </form>
</div>
                </div>
                <div class="clear"></div>
                <div id="search">
                    <form name="searchForm" action="/">
                        <input class="searchBox" value="Search entire site" name="Search">
                        <input value="Search" type="submit">
                    </form>
                </div>
                <div id="main_header_menu">
                    <ul>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                        <li><a href="#">button1</a></li>
                    </ul>
                </div>
            </div>
            <div class="clear"></div>
            <div id="content">
                <div class="box">box1</div>
            </div>
            <div id="footer">footer
                <ul>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                </ul>
            </div>
        </div>
    </body>
</html>

نلاحظ تغير جميع المتغيرات وفتح الموقع بالصورة التي صممناها فيه أول مرة

تم تعديل هذه المشاركة بواسطة bastr3 في 2 يناير 2010 في 04:13

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#55

نبدأ بتعريف أماكن ظهور الأزرار أو روابط الصفحات , وكما ذكرنا هناك خمسة أماكن

الأول في أعلى الصفحة وسنرمز له UP

الثاني في القائمة العلويه الرئيسيه وسنرمز لها بــ HEADER_MENU

الثالث في الأسفل رمزه DOWN

والمكان الرابع هو مكان إظهار روابط الدروس رمزه Lessons

الخامس هو الأخبار وهناك أكثر من ذلك ولكن لتتوضح الصورة سنكتفي بهذه الأماكن في هذا الشرح

سنذهب إلى إعدادات الموقع ونضيف أو نعد إذا كانت موجوده أصلا على الإعداد

%place pages%

ونجعل قيمته هي قيمة الرموز التي إخترناها كما في الصورة :

post-21336-12616276691553_thumb.png

نلاحظ من الصورة أن جميع الأماكن مكتوبه بطريقة المتغيرات في البي أتش بي يعني تحمل شروط متيرات البي أتش بي , وبين كل رمز وآخر فاصله كما ترى

الآن سنقوم بتعريف القوالب على هذه الرموز والأماكن لكي يتم وضع الروابط في الأماكن التي نحددها

نأخذ مثلا قالب ذيل الصفحة

none;footer
            <div id="footer">footer
                <ul>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                </ul>
            </div>
        </div>

    </body>
</html>

نلاحظ أن الروابط تقع مكان هذه الشيفره :

                 <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>
                    <li><a href="#">button1</a></li>

لذلك سنقوم بإستبدالها بالمتير الخاص بمكان إظهار الروابط في هذا المكان والذي يحمل الرمز

DOWN

لتصبح الشيفرة كما يلي :

none;footer
            <div id="footer">footer
                <ul>
                    %DOWN%
                </ul>
            </div>
        </div>
    </body>
</html>

جميل حتى الآن :) , طيب كيف سنقوم بربط كل رابط مع تصميم الروابط وهي هذه الشيفره

                    <li><a href="#">button1</a></li>

سنقوم بعمل قالب جديد بأي إسم ويفضل إستخدام أسماء دلاليه لنقوم بتسميه القالب

footer_menu.inc

ونضع الشيفرة السابقه ولكن قبل الشيفرة سنصع متغيرات السطر الأول التي تكلمنا عنها وهي إسم القالب وهل سيظهر في لوحة التحكم أم لا ويجب أن يكون إسم القالب هذه المرة هو نفس رمز المكان الذي كتبناه في إعدادات الموقع وفي القوالب لتصبح الشيفرة كمايلي :

none;DOWN
<li><a href="?id=%id%" %current%>%page_name%</a></li>

السطر الأول فهمناه , السطر الثاني يحتوي على ثلاث متيرات ماذا تعني ومن أين أتينا بها ؟

سأتكلم عن المتغير الثابت وهو بإسم

%current%

يتم إستبداله بــ

class="active"

في حال كانت الصفحة المطلوبه هي نفي الصفحة التي يحملها هذا الرابط لكي تتمكن من تغيير شكلها وتمييزها ويمكنك الرجوعلدورة تصميم web2 لتتعلم كيفيه إستخدام الستايل

طيب ... المتغيرات الأخرى ماهي ؟

سنعود الآن إلى قاعدة البيانات لتفهم الفكرة أكثر

post-21336-12616285784041_thumb.png

ماذا يعني !! لاحظ المتغيرات السابقة هي أسماء الحقول في جدول الصفحات ولكنها بين علامتي بالمئة , يعني لو أردت وضع إسم الصفحة ونبذه عنها وإضغط للمزيد ماعليك إلا تصميم الشكل ومن ثم وضع بدل إسم الصفحة حقل إسم الصفحة بين علامتي بالمئة ومكان النبذه القصيرة إسم الحقل description بين علامتي بالمئة وتقوم بتوجيه رابط إقرأ المزيد إلى المعرف للصفحة كما هو في المثال السابق

<a href="?id=%id%"

بعد أن قمنا بإنشاء قوالب لكل مكان بنفس الطريقة التي شرحناها نكمل .....

الآن نأتي إلى كيفيه إظهار الصفحات على صفحات الموقع وكل صفحة نريدها في مكانها

لننشئ أول شيء الصفحات التي ذكرناها

post-21336-12616268745613_thumb.png

عمليه إضافة صفحات في أماكن أخرى مثل الصفحة الرئيسيه تكون كالتالي :

إنشاء صفحة جديده ومن ثم وضع رابط الصفحة التي تريدها كما في الشكل

post-21336-12616272118312_thumb.png

كما ترى يوجد تعبئة تلقائيه بحيث تكتب إسم الصفحة فتظهر جميع الصفحات التي تحتوي على الأحرف التي أدخلتها وعند إختيار الصفحة يقوم بشكل تلقائي بوضع رابط الصفحة

شكل الموقع حتى الآن :

post-21336-12616289262371_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#56

عملية إظهار المحتوى الخاص بالصفحة التي تم فتحها

نأتي لصفحة الوثائق حتى نضرب عصفورين بحجر , يعني نشوف كيف رح تظهر قائمة الدروس ومحتوى كل درس في العمود الثاني وفي اعلى الصفحة العمود الثالث يتم وضع نبذه عن الصفحة المطلوبه

نقوم بفتح ملف القالب الخاص بثلاثة أعمدة وهو

3colm.inc

Pages of three columns;colm3
{%template:header.inc%}
            <div id="content">
                <div class="box">%this_description%</div>
                <div class="box left_side" style="width:200px;float:left;"><ul class="lessons">%Lessons%</ul></div>
                <div class="box right_side" style="width:700px;float:right;">%this_page_cont%</div>
                <div class="clear"></div>

            </div>
{%template:footer.inc%}

المتغيرات الجديده هي نفس المتغيرات لإظهار الروابط ولكن مع إضافة كلمة this وتعني هذه الصفحة أي التي تم فتحها

%this_description%

تعني النبذه للصفحة التي تم فتحها أو تصفحها

طبعا المتير

%Lessons%

معروف مامعناه وهو مكان لإظهار الروابط الخاصه بالدروس تم عمل قالب له كما في السابق

وسنقوم بعمل نفس الشيء على كل قالب نريد إظهار محتوى الصفحة المطلوبه فيه

ننظر إلى الموقع بعد عمليه إضافة المحتوى :

post-21336-12616329803048_thumb.png

تم تعديل هذه المشاركة بواسطة bastr3 في 2 يناير 2010 في 04:13

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#57

عملية إدارة الأعضاء

لعمل نموذج تسجيل الدخول هناك شروط وهي أسماء الحقول ثابته سأضعها في اللون الأحمر

<form name="loginForm" method="post">

<input class="loginBox" name="user">

<input class="loginBox" name="pass">

<input value="Login" name="submit_lgn" type="submit">

</form>

تستطيع تغيير شكل النموذج ولكن هذه الأسماء تبقى كماهي لآن عملية تسجيل الدخول تعتمد عليها

النموذج بتنسيق كود :

<form name="loginForm" method="post">
                        <input class="loginBox" name="user">
                        <input class="loginBox" name="pass">
                        <input value="Login" name="submit_lgn" type="submit">
        </form>

ولكن كيف سأخفي النموذج بعد عمليه تسجيل الدخول وكيف سأظهر جمله ترحيب بالعضو أو بإسمه؟

سيكون في هذه الحاله كود خاص بالقوالب لهذه المهمه وهو بسيط فقط تسأل هل هو مسجل أم غير مسجل كما يلي :

<div id="login">
[IF:login]
Welcome %user_name% <a href="?out=1"> LOGOUT </a>
[ENDIF]

[IF:notlogin]
<form name="loginForm" method="post">
                        <input class="loginBox" name="user">
                        <input class="loginBox" name="pass">
                        <input value="Login" name="submit_lgn" type="submit">
        </form>
[ENDIF]
</div>

وهذا الكود ثابت يعني لا تستطيع كتابة الأمر

[iF:login]

بهذه الطريقه

[if:login]

لآنه حساس للأحرف وحتى السبيس وغيرها

هناك متغير في رسالة الترحيب وهو

%user_name%

ماهو ومن أين جاء ؟

لنلقي نظره على جدول الأعضاء

post-21336-12617381081684_thumb.png

لاحظ الحقول المحدده بالأحمر لايمكنك تغييرها أما الحقول الباقيه فلك أن تقوم بتغيير مسمياتها كما تريد ولن يتأثر الكود بها , لم تفهم !! حسنا لنعد إلى المتغير في رساله الترحيب يحتوي على قسمين القسم الأول

user_

والقسم الثاني هو إسم الحقل في قاعدة البيانات وجميهم بين علامتي بالمئة , يعني لو أردنا إظهار بريده الإلكتروني نقوم بكتابة المتغير كمايلي :

%user_email%

ويمكن أن تصبح رساله الترحيب كما يلي :

[IF:login]
Welcome <a href="mailto:%user_email%">%user_name%</a> <a href="?out=1"> [LOGOUT] </a>
[ENDIF]

post-21336-12617385558966_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#58

عمل نموذج تسجيل أعضاء

لعمل مثل هذا النموذج نقوم بإنشاء صفحة من مدير الصفحات في لوحة التحكم ونضع بها الشروط التي نريدها والصور وأهم ما فيها هو النموذج الخاص بالتسجيل وهو كما يلي مع مراعاة أن اسماء الحقول ثابته كما شرحنا سابقا

<form method="post" name="loginForm">
	enter user name <br />
	<input class="loginBox" name="user" /> <br />
	<br />
	enter password <br />
	<input class="loginBox" name="pass" /> <br />
	<input name="submit_mem" type="submit" value="Register" /></form>

طبعا بإمكانك إضافة المزيد من الحقول ولكن يجب أن يكون إسم الحقل مأخوذ من جدول الأعضاء فمثلا هناك حقل البريد الإلكتروني ثابت أي لا تقوم بإستخدامه إلا كبريد إلكتروني ولا يمكنك التعديل عليه في الجدول أما الحقول info1.... info2....info40 هذه الحقول بإمكانك التعديل عليها أو حذف ما تشاء منها ويمكنك إضافة المزيد من الحقول إلى النموذج السابق كمايلي ولاحظ اسماء الحقول وقارنها بالجدول في الصورة بالأعلى :

<form method="post" name="loginForm">
	enter user name <br />
	<input class="loginBox" name="user" /> <br />
	<br />
	your email <br />
	<input class="loginBox" name="email" /> <br />
	<br />
	real name <br />
	<input class="loginBox" name="info1" /> <br />
	<br />
	enter password <br />
	<input class="loginBox" name="pass" /> <br />
	<input name="submit_mem" type="submit" value="Register" /></form>

تمت عملية التسجيل الآن ولكن صفحة التسجيل التي تحتوي على النموذج الخاص بالتسجيل يجب أن نقوم بإزالتها في حال قام العضو بتسجيل الدخول ... هناك صلاحيات تم إنشاؤها لكل صفحة وهي ثلاث حالات

الأول : للجميع Public أي أن أي زائر يمكنه مشاهدة وتصفح هذه الصفحة

الثاني : لمن قام بتسجيل الدخول Login أي الأعضاء المسجلين فقط يمكنهم رؤية هذه الصفحة وتصفحها

الثالث : لم هو غير مسجل Not Login أي الزوار والأعضاء الغير مسجلين أما العضو المسجل فلا يرى هذه الصفحة ويمكن طرح مثال على هذه الخاصيه بصفحة تسجيل الدخول تكون ظاهره للعضو والزائر ولكن حين يقوم العضو بتسجيل الدخول لا يرى صفحة تسجيل الدخول لآنه بالفعل مسجل دخوله

إذا صفحة سجل معنا وهي التي أنشأناها ستأخذ صلاحية Not Login

وفي الصورة توضيح لكيفيه إختيار الصلاحيات لكل صفحة

post-21336-12617506311571_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#59

رسائل التسجيل وتسجيل الدخول

مما سبق رئينا كيف يتم إستخدام نماذج تسجيل الدخول والتسجيل بالموقع ولكن عندما يخطئ العضو في إدخال اسم المستخدم أو كملة السر كيف سنخبرة بأن الإسم أو الرقم السري خطأ ؟

وعند إتمام عمليه التسجل ماهي الرساله التي ستظهر ؟ وإذا كان المستخدم موجود أصلا كيف سنخبره أن الإسم الذي إخترته محجوز ؟ هذه الرسائل يمكن استخدامها كما تم في عمليه إظهار نموذج تسجيل الدخول يعني لدينا هذه الأوامر لكل عمليه

[IF:login]....[ENDIF]
[IF:notlogin]....[ENDIF]
[IF:user already register]....[ENDIF]
[IF:register done]....[ENDIF]
[IF:user not active]....[ENDIF]
[IF:login error]....[ENDIF]

بدل النقط نضع كود الهتمل الذي نريده والرسال مع أنها واضحة ولكن سأشرح عمل كل أمر

login العضو يتصفح الموقع

notlogin زائر يتصفح الموقع

user already register عند عمليه التسجيل إذا كان الإسم المستخدم محجوز

register done عند إتمام عمليه التسجيل

user not active إذا قام العضو بتسجيل الدخول بشكل سليم ولكنه موقوف أو غير فعال (يمكن لمدير الموقع إيقاف أي عضو من خلال لوحة التحكم في صفحة المستخدمين)

login error إذا قام العضو بتسجيل الدخول بشكل خاطئ يعني الرقم السري أو اسم المستخدم غير صحيحين

لنرى مثال صفحة التسجيل في الموقع :

<p>
[IF:user already register] %already register% [ENDIF]
[IF:register done] thank you for registration:) [ENDIF]</p>
<form method="post" name="loginForm">
	enter user name <br />
	<input class="loginBox" name="user" /> <br />
	<br />
	your email <br />
	<input class="loginBox" name="email" /> <br />
	<br />
	real name <br />
	<input class="loginBox" name="info1" /> <br />
	<br />
	enter password <br />
	<input class="loginBox" name="pass" /> <br />
	<input name="submit_mem" type="submit" value="Register" /></form>

لاحظ كيف تم إستخدام الأوامر الرسال الأولى %already register% قمنا باستحداث متغير كما تعلمنا في المشاركه 147 لكي نعطي لمدير الموقع إمكانيه تعديل الرساله من الإعدادات والرساله الثانيه

thank you for registration:)

قمنا بوضعها بشكل عادي وللعلم يمكنك استخدام هذه الأوامر والرسائل داخل الصفحات التي تنشؤها من لوحة التحكم أو في القوالب لك حرية الإختيار وهذا يعطي مرونه أكبر للصتميم وإمكانيات أكثر للمجله

انظر للصورة توضح كيفيه إظهار الرسائل في كل مرة

post-21336-12617572182509_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#60

كيف نقوم بجعل الأعضاء يتفاعلون مع الموقع ؟

الآن نقوم بإستحدات صفحة جديده بإسم أضف موضوع مثلا بحيث يتمكن العضو بعد عملية تسجيل الدخول من إضافة مواضيع

من لوحة التحكم > مدير الصفحات > أضف صفحة فيها بيانات كما تريد ونموذج كمايلي :

<form method="POST">
عنوان الموضوع <br /> <input name="info1" /><br />
<br />
القسم الخاص بهذا الموضوع<br />
قسم الكتاب<input type="radio" name="info2" value="1" checked="checked" /><br />
قسم الشعراء<input type="radio" name="info2" value="2" checked="checked" />      <br />
قسم الأخبار<input type="radio" name="info2" value="3" checked="checked" />            <br />
<br />
مصدر الموضوع
<select name="info3" size="1">
<option value="1" selected="selected">أنا كاتب الموضوع</option>
<option value="2">منقول</option>
<option value="3">معدل</option>
</select>
<br /><br />
الموضوع
<textarea name="info4"></textarea><br /><br />
<input type="submit" name="auid" value="أضف موضوع جديد" />
</form>

نموذج عادي جدا وكما عرفنا أسماء الحقول قمنا بأخذها من أسماء الحقول في جدول الأعضاء ففيه يتم تخزين المقالات الخاصه بهم أيضا ولكن يهمنا زر الإرسال فيجب أن يكون بهذا الإسم

auid

وتعمدت وضع حقول مختلفه مثل إختيار من متعدد وقائمة منسدله حتى نرى كيف يتم إرجاع قيمهما في حالة أردت عمل تعديل للموضوع بعد إضافة الصفحة يجب عليك القيام بتعديل خصائصها فهي غير مفعله حتى الآن لذلك تقوم بإظهار جميع الصفحات وتفعل الصفحة التي ضفتها وتقوم بجعل صلاحياتها فقط للأعضاء وتختار القالب المناسب لها

الآن لو قمت بتصفح الموقع وأنت مسجل كعضو ستظهر لك رابط الصفحة قم بإضافة أي خبر ويتم إضافته فورة إلى قاعدة البيانات

للنظر إلى صورة الصفحة في الموقع كيف أصبحت :

post-21336-12618362377747_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#61

بعد أن تم إضافة موضوع من قبل العضو كيف لنا إظهار هذه المواضيع بالطريقة التي نريدها ؟

أولا وقبل كل شيء يجب أن نفهم كيف يتم تخزين بيانات العضو في نفس جدول الأعضاء !!!

يوجد في جدول الأعضاء حقول مهمه وذكرت بعدم التعديل عليها أو حذفها لآنها تستخدم في البرمجه (ويمكنك التعديل عليها إذا قمت بتفحص الكود وتعديل ماتريد منه بعد نزول النسخة القادمة من هذه المجله)

المستخدمون نوعان الأول مستخدم للوحة التحكم ويعطى رقم واحد في قاعدة البيانات في الحقل نوع

type=1

الثاني هو العضو الخاص بالموقع ويعطى الرقم إثنان

type=2

يعني لو أردنا إظهار جميع الأعضاء نكتب جمله سيكول كما يلي :

SELECT * FROM `members` where type=2

المواضيع تحمل النوع 0 يعني لإظهار جميع مواضيع الأعضاء نستخدم في جملة السيكول

SELECT * FROM `members` where type=0

وعندما يقوم عضو بكتابه موضوع يتم تخزين موضوعه بشكل عادي ولكن هناك حقل إسمه type_to أي تابع إلى ويأخذ هذا الحقل رقم المعرف للعضو الذي قام بتعبئة هذا السجل

يعني لإظهار سجل عضو ما نحتاج لمعرفة المعرف الخاص به id ونكتب جملة السيكول كما يلي :

SELECT * FROM `members` where type_to=4

هذه مقدمة لآن الباقي يعتمد عليها ,,,

سنقوم الآن بإظهار جميع مواضيع العضو المسجل لدينا , نقوم بإنشاء صفحة بإسم مواضيعي ونضع فيها مانريد من بيانات , ثم نضع هذا الكود في المكان الذي نريد لمواضيع هذا العضو أن تظهر فيه ,

<p>
	هذه هي المواضيع التي قمت بالمشاركة فيها</p>
<p>
	[SQL:members(;)type=0(;)5(;)1(;)name(;)1(;)
<a href="?id=3&euid=%row:id%"> %row:info1% </a> <br />
	[ENDSQL]</p>

الأمر السابق يحتوي على عدة متغيرات بين كل متغير والثاني هذه العلامه

(;)

لنقم بشرح هذا الأمر

[sql:

إفتتاحية لتعريف المجله بأن هذا خاص بجمله سيكول

members

المتغير الأول وهو يحمل إسم الجدول الذي تريد التعامل معه أي أن باستطاعتك إنشاء جدول في قاعدة البيانات والتحكم به من خلال هذا الأمر وتطبيقه على أي جدول آخر

type=0

الشرط .. يمكنك تركه فارغا إذا كانت تريد إظهار جميع محتويات الجدول أو وضع شرط كما في الجمل التي وضعتها لنأخذ مثلا الجمله

SELECT * FROM `members` where type_to=4

هنا الشرط هو

type_to=4

ويمكن أن يكون أكثر من شرط مثل

type_to=4 and active=1

فهو عباره عن تتمه لجملة السيكول

5

هذا المتغير يعبر عن عدد السجلات التي تريد إظهارها في كل صفحة يعني خمس سجلات أظهر من النتائج فقط

1

هذا المتغير يعبر عن هل تريد إظهار عدد تعدد الصفحات بعد النتائج بحيث إذا كان عدد السجلات أكثر من خمسه يظهر أرقام للصفحات المتبقيه ليتمكن الزائر أو العضو من الضغط على الصفحة التاليه ورؤية السجلات الأخرى , إذا تركته فارغ فسيتم عرض فقط خمس سجلات أما إذا وضعت فيه قيمة رقمية مثل 1 فسيتم إظهار تعدد الصفحات

name

هذا المتغير يحمل إسم الحقل الذي تريد ترتيب عرض السجلات بناء عليه يعني ستظهر السجلات مرته تنازليا بناء على حقل name

1

هذا المتغير للترتيب التصاعدي أما إذا تركته فارغ فسيتم ترتيب السجلات بشكل تنازلي بناء على المتغير الذي قبله وهو الname

<a href="?id=3&euid=%row:id%"> %row:info1% </a> <br />

هذا المتغير يحمل قالب كل سجل وجميع المتغيرا السابقه يجب أن تكون على سطر واحد أما هذا المتغير فبإمكانك وضعه في عدة أسطر ويحتوي كما نرى على متغيرات وأعتقد أنها مفهومه , هذه المتيرات هي أسماء الحقول التي نريد عرضها مسبوقع بكلمة row: وبين علامتي بالمئة

أخيرا إخبار المجله بأن جملة السيكول قد إنتهت من خلال

[ENDSQL]

الأمر السابق يظهر جميع المواضيع لأن الشرط

type=0

وقد علمنا أن هذا النوع للمواضيع , إذن كيف يمكنني عرض مواضيع هذا العضو بالذات ؟

قلنا أن الحقل type_to يحتوي على رقم المعرف الخاص بالعضو لكل موضوع

إذن لو عرفنا رقم العضو نستطيع عرض مواضيعه من خلال الشرط

type_to=id

وكما علمنا سابقا أن رقم العضو يمكن الحصول عليه من خلال المتغير

%user_id%

صح ؟

إذا نكتب الشرط كما يلي :

type_to=%user_id%

حاسس حالي بعطي حصه رياضيات :)

لنرى صورة كيفيه ظهور المواضيع وتعدد الصفحات

post-21336-1261846481692_thumb.png

كما ترى شكل تعدد الصفحات عادي ويمكنك إستخدام الستايل للتعديل على مظهره وهذا هو الستايل الخاص به تقوم بدمجة مع القوالب أو في ملف الستايل

       /**************counter pages************/

div.pagination {
padding: 3px;
margin: 3px;
text-align:center;
}

div.pagination a {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #ff0000;
background-color: #ffcccc;

text-decoration: none; /* no underline */
color: #330000;
}
div.pagination a:hover, div.digg a:active {
border: 1px solid #ffff66;

color: #ffff66;
}
div.pagination span.current {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #ffff66;

font-weight: bold;
background-color: #330000;
color: #FFF;
}
div.pagination span.disabled {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #EEE;

color: #DDD;
}
/********************************/

بعد وضع الستايل نظره أخرى إلى الصفحة :

post-21336-12618472790177_thumb.png

لاحظ أن عدد الصفحات عندما يكون كبير يتم وضع نقاط :) هذه ميزه

بالنسبه للقالب الخاص بعرض الحقول يمكنك إستخدام أي قالب موجود يعني تستطيع إنشاء قالب وإستدعاؤه كما يلي :

[SQL:members(;)type_to=%user_id%(;)2(;)5(;)name(;)1(;) {%template:my_subject.inc%} [ENDSQL]

وهذه الطريقه أفضلها أكثر من الطريقه السابقه وهي إضافة كود هتمل في نفس الصفحة

تم تعديل هذه المشاركة بواسطة bastr3 في 2 يناير 2010 في 04:11

1

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#62

عند إضافة موضوع يمكنك إستخدام الشرط إذا تمت العمليه أو لم تتم أو لم يتم طلب العمليه أصلا لتصبح الصفحه كما يلي :

<p>
	[IF:user added topic] thank you [ENDIF] 
[IF:error user added topic] there are error [ENDIF]
 [IF:not user added topic] 
<span style="color: rgb(255, 0, 0);"><span style="font-size: 14px;"><strong>يمكنك المشاركة بإضافة مواضيع يتم عرضها على صفحات موقعنا من خلال هذا الموذج <br />
	</strong></span></span></p>
<form method="POST">
	عنوان الموضوع <br />
	<input name="info1" /><br />
	<br />
	القسم الخاص بهذا الموضوع<br />
	قسم الكتاب<input checked="checked" name="info2" type="radio" value="1" /><br />
	قسم الشعراء<input checked="checked" name="info2" type="radio" value="2" /> <br />
	قسم الأخبار<input checked="checked" name="info2" type="radio" value="3" /> <br />
	<br />
	مصدر الموضوع <select name="info3" size="1"> <option selected="selected" value="1">أنا كاتب الموضوع</option> <option value="2">منقول</option> <option value="3">معدل</option> </select> <br />
	<br />
	الموضوع <textarea name="info4"></textarea><br />
	<br />
	<input name="auid" type="submit" value="أضف موضوع جديد" /></form>
<p>
	[ENDIF]</p>

من خلال شيفرة الصفحة يمكنك ملاحظة أن العضو عندما يقوم بالدخول إلى هذه الصفحة سيرى نموذج الإدخال وعندما يقوم بإرسال النموذج ويحدث خطأ ما ستظهر له رساله الخطأ ويبقى النموذج ظاهر أما في الحاله الثالثه إذا تمت العمليه بنجاح فستظهر له رساله الشكر , ورساله الخطأ تظهر لأسباب منها إرسال النموذج فارغ أو إرسال النموذج أكثر من مرة خلال خمسة ثوان وهذا لإغلاق ثغرة السبام فلو قمنا بعمل إرسال النموذج مفتوح تكون هناك ثغره يمكن إغلاق السيرفر كامل بسببها وذلك بإرسال ألف طلب مثلا دفعه واحده أو أكثر ويمكن عمل إضافة لإرسال الطلب مع صورة عشوائيه captcha

1

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#63

بعد عرض مواضيع الأعضاء كيف لنا أن نعرض تفاصيل الموضوع عند الضغط على رابط الموضوع؟

لاحظ أننا قمنا في قالب عرض الموضوع بوضع رقم الصفحة التي ستعرض فيها المواضيع ومتغير يحمل المعرف الخاص بهذا الموضوع أنظر مرة أخرى إلى القالب :

<a href="?id=3&euid=%row:id%"> %row:info1% </a>

* معلومة : يمكنك وضع أي متغير وإستخدامه داخل القوالب من خلال إستدعاءه ويتم ذلك كما يلي :

في القالب المتغير الذي إقترحناه هو : euid

طريقة إستدعائه من خلال القوالب أو الصفحات تتم كمايلي :

%var_euid%

مما سبق يمكن عرض محتويات الموضوع من خلال إنشاء صفحة وكتابة الشيفرة التاليه داخلها :

[SQL:members(;)id=%var_euid% and type=0(;)1(;)0(;)name(;)0(;)

عنوان الموضوع

%row:info1%


القسم الخاص بهذا الموضوع

%row:info2%


مصدر الموضوع

%row:info3%


الموضوع

%row:info4%


[ENDSQL]

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#64

فيما سبق لو قمنا بعرض الصفحة ستظهر بهذا الشكل

post-21336-1262403590117_thumb.png

تلاحظ أنه قام بإسترجاع القيمة التي تم إدخالها من القائمة المنسدله , وتم وضع القيمة كرقم ليسهل تصنيف الأقسام وعمليه إسترجاعها من قاعدة البيانات كما هو معروف , كيف يمكن أن نرجع قيمة القائمة المنسدله التي تظهر للمستخدم ؟ لنرجع إلى شيفرة القائمة المنسدله للأقسام :

       القسم الخاص بهذا الموضوع<br />
        قسم الكتاب<input checked="checked" name="info2" type="radio" value="1" /><br />
        قسم الشعراء<input checked="checked" name="info2" type="radio" value="2" /> <br />
        قسم الأخبار<input checked="checked" name="info2" type="radio" value="3" /> <br />

لاحظ قسم الكتاب قيمته واحد والشعراء إثنين والأخبار ثلاثه

هناك متغيرات يمكن إستخدامها لتحل هذه المشكله وهي إضافة خاصيه لوسم الهتمل وهي :

                   row_selected_field="value"  change to >>  selected
                   row_checked_field="value"   change to >>  checked="checked" 
                   row_show_field="value"  change to >>  style="visibility:visible;display:block"
                   row_hide_field="value"  change to >>  style="visibility:hidden;display:none"

كما تلاحظ من الأوامر السابقة كل أمر يتم إستبداله بالجمله المذكوره , كيف نستخدم هذه الأوامر ؟

سنرى كيف يتم كتابه شيفرة الصفحة السابقه لتظهر إسم القسم بدل رقمه

<style>
.hide{
visibility:hidden;
display:block;
}
</style>

[SQL:members(;)id=%var_euid% and type=0(;)1(;)0(;)name(;)0(;)
عنوان الموضوع<br>
%row:info1%<br>
<br>

القسم الخاص بهذا الموضوع<br>
<span class="hide" row_show_info2="1">قسم الكتاب</span>
<span class="hide" row_show_info2="2"> قسم الشعراء</span> 
<span class="hide" row_show_info2="3"> قسم الأخبار</span>
<br><br>

مصدر الموضوع<br>
<span class="hide" row_show_info3="1">أنا كاتب الموضوع</span> 
<span class="hide" row_show_info3="2">منقول</span> 
<span class="hide" row_show_info3="3">معدل</span>
<br><br>

الموضوع<br>
%row:info4%
<br><br>

[ENDSQL]

لاحظ كيف قمنا بوضع الأقسام في وسم سبان وأعطيناه الكلاس إخفاء لكي يتم إخفاء جميع الأقسام ثم وضعنا الخاصيه التي ذكرناها ليتم إستبدالها بإضهار القسم المطلوب والخاصيه هي :

row_show_info2="1"

ومعناها أظهر الحقل الذي إسمه info2 وقيمته 1

لتصبح الصفحة بعد التعديل كما يلي :

post-21336-12624045262078_thumb.png

تم تعديل هذه المشاركة بواسطة bastr3 في 2 يناير 2010 في 06:58

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#65

الآن سنعطي للعضو إمكانيه التعديل على مواضيعه وكذلك حذفها

نقوم في البداية بتعديل القالب الخاص بإظهار مواضيع العضو ليحتوي على رابط تعديل الموضوع ورابط لحذفه : فيصبح كالتالي :

none;my_subject
<a href="?id=26&euid=%row:id%"> %row:info1% </a> [
<a href="?id=27&edit_id=%row:id%"> EDIT </a> |
<a href="?id=%var_id%&delete_id=%row:id%"> DELETE </a> ]<br />

فيما سبق المتغيرات تم وضعها من عندنا يعني تستطيع إستخدام أي متيرات تريد بدل

edit_id و delete_id و euid

كما تم شرحها مسبقا

كما تلاحظ في الرابط الخاص بالحذف نريده أن يحذف ويبقى في نفس الصفحة لذلك إستخدمنا المتغير id

?id=%var_id%

للتعديل علينا إظهار النتائج للموضوع الذي نريده داخل نموذج يشبه نموذج الإضافه وبذلك تكون صفحة التعديل كما يلي :

<p>
    [IF:user added topic] thank you [ENDIF]
    [IF:error user added topic] there are error [ENDIF]
    [IF:not user added topic]
    يمكنك المشاركة بإضافة مواضيع يتم عرضها على صفحات موقعنا من خلال هذا الموذج <br />
</p>
[SQL:members(;)id=%var_edit_id% and type=0(;)1(;)0(;)name(;)0(;)
<form method="POST">
	عنوان الموضوع <br />
    <input name="info1" value="%row:info1%" /><br />
    <br />
	القسم الخاص بهذا الموضوع<br />
	قسم الكتاب<input row_checked_info2="1" name="info2" type="radio" value="1" /><br />
	قسم الشعراء<input row_checked_info2="2" name="info2" type="radio" value="2" /> <br />
	قسم الأخبار<input row_checked_info2="3" name="info2" type="radio" value="3" /> <br />
    <br />
	مصدر الموضوع
    <select name="info3" size="1">
        <option row_selected_info3="1" value="1">أنا كاتب الموضوع</option>
        <option row_selected_info3="2" value="2">منقول</option>
        <option row_selected_info3="3" value="3">معدل</option> </select> <br />
    <br />
	الموضوع <textarea name="info4">%row:info4%</textarea><br />
    <br />
    <input name="suid" type="hidden" value="%row:id%" />
    <input type="submit" value="update topic" /></form>

	[ENDIF]
[ENDSQL]

فيما سبق نرى أن الصفحة شبيه إلى حد كبير لصفحة الإضافة ولكن النموذج داخل جملة سيكول لعرض نتائج الموضوع ووضع كل قيمة في الحقل المناسب له

لا تسألني من أين جئت بهذا المتغير

%var_edit_id%

فقد علمنا أنه تم استحداثه من خلال القالب السابق ويحتوي على معرف الموضوع الذي تم الضغط على رابط تعديل الخاص به

وهذه المتغيرات والخائص للقائمة المنسدله وللإختيار

row_checked_info2="1"

فهي ترجع قيمة لتحديد القيمة التي تم إختيارها مسبقا

أخيرا يوجد هذا السطر المهم والذي يعطي للعضو إمكانيه التعديل وبدونه لا يمكن التعديل على الموضوع فهو يخبر المجله أن هذا الموضوع صاحب هذا المعرف هو مايحتاج إلى تعديل

<input name="suid" type="hidden" value="%row:id%" />

للحذف نستخدم نفس جمله سيكول الخاصه بالعرض ولكن مع وضع القالب كلمة

DELETE

فقط وكما هي مكتوبه بالأحرف الكبيره وبما أن الحذف سيتوجه إلى نفس الصفحة إذن في البدايه نكتب جمله السيكول كما يلي :

[SQL:members(;)id=%var_delete_id% and type=0 and type_to=%user_id%(;)1(;)0(;)name(;)0(;)DELETE[ENDSQL]

الرقم واحد في الجمله السابقة يعبر عن عدد السجلات التي سيتم حذفها يعني بإمكانك جعل العضو يحذف جميع السجلات التي تنطبق عليها شرط السيكول بجعل الرقم واحد صفر

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#66

السلام عليكم ورحمة الله وبركاته ...

جميل اخي العزيز , الله يعطيك العافيه ... دروس جميله جدا , فعلا بدأت اتعلم :) ..

بالتوفيق ان شاء الله

#67

بارك الله بجميع المشاركين :)

حقيقه هناك مواضيع كثيره أود المشاركه بها لتعم الفائدة ولكن الوقت ضيق جدا , لذلك أفكر في عمل ورشه وأرجو من الجميع المشاركة بها فقد بحثت عن أكواد جاهزه تخدم هذا المشروع ولكن دون فائدة

سأتحدث عن الموضوع بشكل مفصل وسريع ...

المشروع عباره عن عمل تقارير دايناميكيه , شرح أكثر

تخيل أنك قمت بعمل ويب أبليكيشن , يعني برنامج يعمل على متصفح الإنترنت وللعلم كثر الطلب على مثل هذه البرامج , كانت هذه البرامج مقتصره على لغات الدوت نت والفجوال بيسك والسي وغيرها من لغات الأبليكيشن ولكن أصحاب الشركات إلتفتوا أخيرا إلى أن برامج الويب أكثر قوه وراحة لأنها تعمل على جميع الأنظمه وأقصد بذلك لغة البي أتش بي بالإضافة إلى ماي سيكول , وهي مجانيه إذا تم تنزيلها على سيرفر لينكس , ولا تحتاج إلى تدريب المستخدم فهي صفحة انترنت , نرجع لموضوعنا , بعد الإنتهاء من عمل أي موقع يطلب منك تقارير عن عدد الزوار وعدد المستخدمين و تقرير عن آخر مستخدمين تم تسجيلهم خلال يوم أو شهر وما هي المنتجات التي تم إدخالها ومن قام بإدخالها والمواضيع التي تم إدخالها وفي الفتره من يوم كذا إلى يوم كذا ماهي المواضيع أو المنتجات أو الأعضاء الذين قامو بعمل كذا , هذه التقارير تأخذ وقت طويل في البرمجه خصوصا عندما تنتهي من برمجتها ويطلي منك أن تقوم بتغيير نظام التقرير فتظطر إلى إعادة البرمجه , لقد طلب مني تقارير كثيره لأخر مشروع قمت به عددها تقريبا مئة تقرير :( لو فكرت في عملها ستأخذ مني وقت طويل وعمل كثير وما إلى ذلك , فكرت في عمل دايناميك ريبورت بحيث يقوم صاحب الموقع بإختيار قاعدة البيانات والجداول ومن قم يختار الحقول التي يريد إظهارها ويضع لكل حقل شرط وبعد ذلك يخرن التقرير بإسم معين حتى يقوم بالرجوع إليه فيما بعد وبذلك يمكنني عمل المئة تقرير بكل سهوله وإذا طلب مني تعديل تقرير معين أقوم به بدون أي مشكله تذكر ,

هل وصلت الفكرة؟

سأبدا بهذا المشروع من اليوم وأرى أنه يحتاج تقريبا ثلاث أيام لإنهائه فمن يريد المشاركة فاليبدأ من الآن وسنحتاج فيما بعد لجعله على شكل كلاس حتى يتمكن الجميع من إستخدامه

شكرا لكم

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#68

بسم الله الرحمن الرحيم ...

سأقوم بإستخدام برنامج آكسس لشرح الجداول والعلاقه بينهم >> مش معنى ذلك إني بحب برنامج آكسس :)

رح أعمل ثلاث جداول الأول المستخدمين , الثاني القطاعات , الثالث المنتجات

بحيث يقوم المستخدم بتعبئة المنتج وإختيار قطاع لهذا المنتج ويتم تخزين تايخ تعبئة المنتج ومن قام بالتعبئة , طبعا مارح أبني نظام لتعبئة المنتجات وإنما سأكتفي بتعبئة مدخلات جاهزه عشوائيه وبعد ذلك نبدأ بإذن الله ببناء نظام التقارير لكي نستطيع تجربه ماقمنا به أولا بأول ...

صوره توضح الحقول لكل جدول العلاقه بين الجداول :

post-21336-12691929740606_thumb.png

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#69

تم تجهيز قاعدة البيانات وتحميل بيانات عشوائيه , فكرت في نظام أكسس عند عمل تقارير , أنظر إلى الصورة حتى تتضح فكرة المشروع مبدئيا

post-21336-12691972987041_thumb.png

أنظر كيف يتنم إختيار الحقول وعمل الشرط وغير ذلك , سنقوم بعمل نموذج واضح أكثر من هذا النموذج :) إن شاء الله

سأقوم بعمل أبديت لهذه المشاركه في كل مرة أنهي فيها جزء من هذا المشروع , صاحي للصبح :sleep:

هيكل قاعدة البيانات :

-- --------------------------------------------------------

--
-- Table structure for table 'category'
--

CREATE TABLE category (
  id int(1) NOT NULL auto_increment,
  cat_name varchar(25) NOT NULL,
  PRIMARY KEY  (id)
) ;

-- --------------------------------------------------------

--
-- Table structure for table 'product'
--

CREATE TABLE product (
  id int(11) NOT NULL auto_increment,
  name_product varchar(250) NOT NULL,
  category_id int(11) NOT NULL,
  description text NOT NULL,
  entered_time varchar(10) NOT NULL,
  entered_by int(11) NOT NULL,
  PRIMARY KEY  (id)
) ;

-- --------------------------------------------------------

--
-- Table structure for table 'users'
--

CREATE TABLE users (
  id int(1) NOT NULL,
  user_name varchar(25) NOT NULL
) ;

الآن نبدأ في عمليه البرمجه ...

بعد عمل إتصال بقاعدة البيانات يهمنا إظهار جميع الجداول الموجوده فيها ونستخدم لذلك جمله سيكول بسيطه :

show tables;

ليصبح الكود كما يلي :

<?

/*
>> connection
*/
	$DB_SERVER          = "localhost";
	$DB_SERVER_USER     = "root";
	$DB_SERVER_PASSWORD = "";
    $DB_NAME            = "rebort";
$link = mysql_connect($DB_SERVER,$DB_SERVER_USER,$DB_SERVER_PASSWORD)or die ('I cannot connect to the database because: ' . mysql_error());
$db_selected = mysql_select_db($DB_NAME, $link);


    $result1=mysql_query ( "show tables" );
    while ( $row = mysql_fetch_array ( $result1 ) ) {
        echo " $row[0] <br />";
    }

?>

ناتج الصفحة كما يلي حتى الآن :

category

product

users

سنقوم بعد ذلك بإظهار جميع الحقول لكل جدول

يمكننا ذلك من خلال جملة السيكول التاليه :

show fields from $row[0]

لاحظ المتغير يرجع إسم الجدول , هذه الجمله ترجع إسم الحقل ونوعه وغيرها ولكن مايهمنا هو الإسم والنوع وهاهو الكود حتى الآن :

    $result1=mysql_query ( "show tables" );
    while ( $row = mysql_fetch_array ( $result1 ) ) {
        echo " $row[0] <br />";
            $result2=mysql_query ( "show fields from $row[0]" );
            while ( $row_fields = mysql_fetch_array ( $result2 ) ) {
                 echo "Field name: $row_fields[0] , Field type: $row_fields[1]  <br />";
            }
            echo "<hr>";

    }

الكود السابق يعيد هذه الصفحة :

post-21336-12692039823312_thumb.png

هنا نحن نريد نوع الحقل بدون تفاصيل أخرى لذلك سنقوم بتعديل على الكود لإرجاع فقط نوع الحقل

سنقوم بعمل تفجير :) للنوع بحيث يعيد لنا فقط النوع أنظر إلى الشيفره :

              $row_fields_1=explode("(",$row_fields[1]);
                 echo "Field name: $row_fields[0] , Field type: $row_fields_1[0]  <br />";

شكل الصفحة بعد التعديل :

post-21336-12692042558931_thumb.png

لاحظ النوع فقط ,,,,

الآن بعد هذا العمل الشاق :P طبعا مابلشنا بس أول الطريق خطوه ولا تنظر إلى كم بقي من المسافه ولكن أنظر إلى كم قطعت >> حكم

الآن سنقوم بعمل نموذج من خلاله يمكن للمستخدم إختيار الحقول التي يريد إظهارها وعمليه إظهار هذه الحقول , في البدايه سنقوم بإظهار حقول كل جدول منفصل بعد ذلك نتطرق إلى عمليه الربط بين الجداول (relationships)

تم إنشاء النموذج بتعريف متغيرين الأول يحمل ترويسة النموذج والثاني ذيل النموذج وفي الشيفره وضعنا صندوق إختيار كما يلي :

/*bild the form */
$form_start='<form method="post">';

    $result1=mysql_query ( "show tables" );
    while ( $row = mysql_fetch_array ( $result1 ) ) {
        $echo_text= " $row[0] <br />";
            $result2=mysql_query ( "show fields from $row[0]" );
            while ( $row_fields = mysql_fetch_array ( $result2 ) ) {
              $row_fields_1=explode("(",$row_fields[1]);
                 $echo_text.= "<input type='checkbox' name='field[]' value='$row_fields[0]' />Field name: $row_fields[0] , Field type: $row_fields_1[0]  <br />";
            }
            $echo_text.= "<hr>";
            $form_end='<input type="submit" name="tbl" value="'.$row[0].'"></form>';
            echo "$form_start $echo_text $form_end";
    }

عند تنفيذ الصفحة سنحصل على هذا الشكل :

post-21336-12692051262654_thumb.png

الآن عمليه إظار ما تم إختياره طبعا كما تلاحظ كل جدول له زر إرسال لإظهار الحقول لهذا الجدول فقط :

if(is_array($_POST[field]) && $_POST[tbl]){
   foreach($_POST[field] as $fld){
    $SQL.="$coma $fld";
    $coma=",";
   }
   $SQL="SELECT $SQL FROM $_POST[tbl]";
   echo $SQL;
}

ستعيد هذه الشيفره جمله سيكل بناء على ماتم إختياره وعند التنفيذ ظهرت هذه الجمله :

SELECT id, description, entered_by FROM product

وهي صحيحه ولله الحمد

عمليه الربط بين الجداول بعلاقة :

هذه العمليه معقدة أصلا :) فكيف لما بدنا نعملها بشكل أوتوماتيكي ؟

لننظر إلى العلاقه التي ظهرت عند عمل ربط للجداول وعمل كويري في برنامج الآكسس

SELECT product.name_product, product.description, users.user_name
FROM users INNER JOIN (category INNER JOIN product ON category.id = product.category_id) ON users.id = product.entered_by

من هنا سنبدأ بفهم طريقة ربط الجداول , سنقوم بعمل تفصيل أكثر للجمله السابقه

1- إسم الحقل يجب أن يتبع (بضم الياء) بإسم الجدول

2- يجب تحديد العلاقه بين كل جدول وآخر

حتى هذه هي المتطلبات , لنبدأ في إنشاء نموذج لإختيار العلاقة بين كل جدول وآخر

تم عمل النموذج بحمد الله , وقد تم بناء نظام خطوات يعني الخطوه الأولى ستكون بناء العلاقة بين الجداول والخطوة الثانيه هي عملية بناء التقرير

قمنا بتعريف متغير العلاقات ومتغير الخطوات كمتغيرات جلسه عمل حتى نتمكن من الإستمرار في كل خطوه

أصبحت الشيفره كما يلي :

<?
session_start();
if(!session_is_registered('RELATION')) session_register('RELATION');
if(!session_is_registered('STEPS')){ session_register('STEPS'); $STEPS=1;}
/*
>> connection
*/
	$DB_SERVER          = "localhost";
	$DB_SERVER_USER     = "root";
	$DB_SERVER_PASSWORD = "";
    $DB_NAME            = "rebort";
$link = mysql_connect($DB_SERVER,$DB_SERVER_USER,$DB_SERVER_PASSWORD)or die ('I cannot connect to the database because: ' . mysql_error());
$db_selected = mysql_select_db($DB_NAME, $link);


/*bild the form */
$form_start='<form method="post">';

    $result1=mysql_query ( "show tables" );
    while ( $row = mysql_fetch_array ( $result1 ) ) {
        $echo_text= "";
            $result2=mysql_query ( "show fields from $row[0]" );
            while ( $row_fields = mysql_fetch_array ( $result2 ) ) {
              $row_fields_1=explode("(",$row_fields[1]);
                 $echo_step1.= "<input type='radio' name='$row[0][]' value='$row[0].$row_fields[0]' />Field name: $row_fields[0] , Field type: $row_fields_1[0]  <br />";
                 $echo_step2.= "<input type='checkbox' name='field[]' value='$row[0].$row_fields[0]' />Field name: $row_fields[0] , Field type: $row_fields_1[0]  <br />";
            }
            if(is_array($last_tbl))
                foreach($last_tbl as $tbl_rel)
                    $form_end1.='<input type="submit" name="tbl" value="'.$row[0].'=> '.$tbl_rel.'">';
            $form_end2='<input type="submit" name="tbl" value="'.$row[0].'"></form>';
            $echo1.= "$row[0] <br /> $echo_step1 <hr>";
            $echo2.= " $row[0] <br /> $form_start $echo_step2 $form_end2 <hr>";
            $echo_step2='';$echo_step1='';
            $last_tbl[]=$row[0];
    }


if(is_array($_POST[field]) && $_POST[tbl]){
   foreach($_POST[field] as $fld){
    $SQL.="$coma $fld";
    $coma=",";
   }
   $SQL="SELECT $SQL FROM $_POST[tbl]";
   echo $SQL;
}
/*STEPS*/
switch ($STEPS) {
    case 1:
        echo "STEP 1 <hr /> $form_start $echo1 $form_end1 </form>";
        break;
    case 2:
        echo "STEP 2 <hr /> ".$echo2;
        break;
}
/*bild the form */
//echo "$form_start $echo_text $form_end";
//echo $echo_text;

?>

بجوز الكود معجق :blink: مش مشكله المهم الأفكار تكون واضحه , تنفيذ الصفحة يعطينا حتى الآن هذا المنظر ... تأمل :

post-21336-12692086519744_thumb.png

لاحظ كل جدول تحته الحقول الخاصه به وفي نهاية الصفحة جميع الروابط المتاحه بين الجداول , يعني بدك تعمل رابط بين جدول المستخدمين والمنتجات بتختار الحقل الرئيسي من جدول المستخدمين والحقل المرتبط به من جدول المنتجات وبعدها تضغط على زر مستخدمين => منتجات ومن ثم تعيد الكرة (بتشديد الراء) للجدول الآخر وعند الإنتهاء من هذا العمل أكون قد قمت بعمل زر إنهاء وإنتقال للخطوة الثانيه :P

تمت عمليه الربط بين الجداول والشيفره هي :

/*Do action for STEP1*/
// Do relation
if($_POST[tbl] && $_SESSION[STEPS]==1){
  $tbl=explode("=>",$_POST[tbl]);
  $RELATION["$tbl[0]_$tbl[1]"]= "$tbl[0] INNER JOIN $tbl[1] ON ".$_POST[$tbl[0]]." = ".$_POST[$tbl[1]];
}
// Delete relation
if($_GET[delete_relation]) unset($RELATION[$delete_relation]);

فيما سبق قمنا بعمل تفجير :) للمتغير الذي يحمل إسم الجدولين في الزر لنعرف أن العلاقه ستكون بين هذين الجدولين , ومن ثم قمنا بأخذ قيمة الحقل المحدد لكل جدول وعملنا جملة السيكول وخزناها في متغير الجلسه كمصفوفه

وفي عمليه إظهار النموذج قمنا بإظهار العلاقه التي تمت بين كل جدولين مع إمكانيه حذف أي علاقه , على أساس إذا بالغلط عملت علاقة بين جدولين وهمه فعليا ما في بينهم علاقه ممكن تحذفها أما عمليه التعديل فتتم بدون الحاجه لحذف العلاقه إذا كان بها خلل ما , وهذه هي شيفرة اظهار النموذج بعد التعديل :

    case 1:
        echo "STEP 1 <hr /> $form_start $echo1 $form_end1 </form><br /> RELATION:<hr /> ";
        foreach($_SESSION[RELATION] as $k=>$v)
            echo "$k => $v <a href='?delete_relation=$k'>DELETE</a> <br />";
        break;

بعد تنفيذ الصفحة نحصل على هذا الشكل :

post-21336-12692107095462_thumb.png

الآن سنقوم بإنشاء زر الإنتقال إلى المرحلة الثانيه وقد تم منها عمليه إظهار الجداول وإظهار ماتم إختياره بدون علاقه بين الجداول لذلك سنقوم بعمل إظهار الحقول المحدده بناء على العلاقه التي قمنا بإختيارها

أكتب لكم بعد ساعه من التفكير ....

ربط الجداول بين جدولين الأمر هين وثلاثه برضو هين بس لما عملت خمس جداول وبيناتهم علاقات معقدة صارت جملة السيكول كثير معقدة

خلينا نوضح بمثال :

العمليه بين جدولين واضحه وعملناها وهذه هي جمله السيكول :

usr INNER JOIN pro ON usr.id = pro.id_usr

عمليه الربط بين ثلاث جداول بتصير أعقد شويه , لازم نغير إسم الجدول في الجمله السابقة مع جمله الربط بين جدولين لنرى الجمل التي حصلنا عليها من السكريبت :

usr_pro => usr INNER JOIN pro ON usr.id = pro.id_usr
 cty_pro => cty INNER JOIN pro ON cty.id = pro.id_cty

وعمليه الربط بعد وضع الجمله الأولى بمكان أي جدول موجود في الجمله الحاليه أي الجمله الثانيه وهو جدول pro كما هو ملاحظ :

cty INNER JOIN (usr INNER JOIN pro ON usr.id = pro.id_usr)ON cty.id = pro.id_cty

الآن أي جدول يتم ربطه يكون بنفس الطريقه السابقة ولكن إذا وجد جدول مرتبط مع جدول سابق والجدول السابق مرتبط أصلا مع جدول آخر , يعني جدولين ا و ب مرتبطات مع ج , ا و ب مرتبطات مع د وأخيرا وهنا المشكله عندما يكون ا مرتبط مع ب لا يمكن تطبيق ماتوصلت له لأن في ذلك تكرار لأحد الجداول داخل جمله السيكول مما يعطل الجمله , بعد النظر والملاحظه بتحس حالك بتقرا قصه بوليسيه :P , لاحظت إني ممكن أعمل تصنيف لجميع الجداول المرتبطه وأرى أي الجداول هو الماستر يعني الأكثر إرتباط مع الجدوال الأخرى وأشوف الجدول الي بعدة والمرتبط مع جداول مرتبط معها الجدول الماستر وبعد ذلك أقوم بعمل شيء معين , خليني أجرب وراجع إن شاء الله :) على فكرة إذا ماتوصلت لحل مثالي كمان ساعه رح أكمل على ربط مع جدولين أو أكثر بناء على أن القاعدة السابقه تمشي على السكريبت وبعدين منفكر سوى وحط خمسين خط تحت سوى مشان نطور السكريبت ونتوصل لحل مثالي بإذن الله ... أدعولنا

تم تعديل هذه المشاركة بواسطة bastr3 في 22 مارس 2010 في 02:51

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#70

وصلت إلى طريق مسدود في العلاقه بين أكثر من جدولين لذلك وضعت موضوع في قسم الخوارزميات على أمل أن نتوصل لحل من خلال أخواننا في قسم الخوارزميات , على هذا الرابط

/index.php?showtopic=217206&view=findpost&p=1074943

نكمل على أساس ان العلاقه بين جدولين فقط وعند الإنتهاء من الخوارزميه السابقه نقوم بتطوير السكريبت ليتوافق مع أي علاقه بين الجداول إن شاء الله

حتى الان هذه هي الداله الخاصه بإنشاء جمله سيكول للربط بين الجداول وكما قلنا علاقه تكون بين جدولين حتى الآن لا أكثر

function make_rel(){
           foreach($_SESSION[RELATION] as $k=>$v){
                $tbl=explode("_",$k);
                if(strpos($relationship,"$tbl[0] INNER JOIN")!== false){
                   $relationship=str_replace("$tbl[0] INNER JOIN","($v) INNER JOIN",$relationship);
                }elseif(strpos($relationship,"INNER JOIN $tbl[0]")!== false){
                   $relationship=str_replace("INNER JOIN $tbl[0]","INNER JOIN ($v)",$relationship);
               }elseif(strpos($relationship,"INNER JOIN $tbl[1]")!== false){
                    $relationship=str_replace("INNER JOIN $tbl[1]","INNER JOIN ($v)",$relationship);
               }elseif(strpos($relationship,"$tbl[1] INNER JOIN")!== false){
                   $relationship=str_replace("$tbl[1] INNER JOIN","($v) INNER JOIN",$relationship);
                }else{
                  $relationship.=$v;
                }
           }
            return "<hr />".$relationship."<hr />";
}

ترجع الداله بناء على هذه العلاقات :

product_category => product INNER JOIN category ON product.category_id = category.id 
product_mall => product INNER JOIN mall ON product.id = mall.id_product 
users_product => users INNER JOIN product ON users.id = product.entered_by

هذه الجمله :

((users INNER JOIN product ON users.id = product.entered_by) INNER JOIN mall ON product.id = mall.id_product) INNER JOIN category ON product.category_id = category.id

وهي صحيحه 100% :)

وهذه الصورة توضح العلاقة السابقة :

post-21336-12693245527562_thumb.png

تم تعديل هذه المشاركة بواسطة bastr3 في 23 مارس 2010 في 09:11

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#71

إلى هذه اللحظه هذه هي الشيفرة :

<?
session_start();
error_reporting(1);
if(!session_is_registered('RELATION')) session_register('RELATION');
if(!session_is_registered('STEPS')) { session_register('STEPS'); $STEPS=1;}
if($_POST[MOVE]=="Next") $STEPS++; elseif($_POST[MOVE]=="Back") $STEPS--;
if($STEPS>2) $STEPS=2; elseif($STEPS<1) $STEPS=1;
/*
>> connection
*/
$DB_SERVER          = "localhost";
$DB_SERVER_USER     = "root";
$DB_SERVER_PASSWORD = "";
$DB_NAME            = "rebort";
$link = mysql_connect($DB_SERVER,$DB_SERVER_USER,$DB_SERVER_PASSWORD)or die ('I cannot connect to the database because: ' . mysql_error());
$db_selected = mysql_select_db($DB_NAME, $link);


/*where options*/
$option_where='
<select name="where[[id]]" size="1">
<option value="0"></option>
<option value="=">=</option>
<option value="LIKE">LIKE</option>
<option value=">">></option>
<option value="<"><</option>
<option value="BETWEEN">BETWEEN</option>
</select>
<input name="where_is[[id]]" />
';


/*bild the form */
$form_start='<form method="post">';

$result1=mysql_query ( "show tables" );
while ( $row = mysql_fetch_array ( $result1 ) ) {
    $echo_text= "";
    $result2=mysql_query ( "show fields from $row[0]" );
    while ( $row_fields = mysql_fetch_array ( $result2 ) ) {
        $i++;
        $row_fields_1=explode("(",$row_fields[1]);
        $echo_step1.= "<input type='radio' name='$row[0]' value='$row[0].$row_fields[0]' />Field name: $row_fields[0] , Field type: $row_fields_1[0]  <br />";
        $echo_step2.= "<input type='hidden' name='all_fld[$i]' value='$row[0].$row_fields[0]' /><input type='checkbox' name='field[$i]' value='$row[0].$row_fields[0]' />Field name: $row_fields[0] , Field type: $row_fields_1[0]
            ".str_replace("[id]",$i,$option_where)." <br />";
    }
    if(is_array($last_tbl))
        foreach($last_tbl as $tbl_rel)
            $form_end1.='<input type="submit" name="tbl" value="'.$row[0].'=>'.$tbl_rel.'">';
    $form_end2='Please select condition type <select name="and_or"><option value="AND">AND</option><option value="OR">OR</option></select><br />
<input type="submit" name="tbl" value="Submit"><input type="submit" name="MOVE" value="Next"><input type="submit" name="MOVE" value="Back"></form>';
    $echo1.= "$row[0] <br /> $echo_step1 <hr>";
    $echo2.= " $row[0] <br /> $echo_step2 <hr>";
    $echo_step2='';$echo_step1='';
    $last_tbl[]=$row[0];
}

/*Do action for STEP1*/
// Do relation
if($_POST[tbl] && $_SESSION[STEPS]==1) {
    $tbl=explode("=>",$_POST[tbl]);
    $RELATION["$tbl[0]_$tbl[1]"]= "$tbl[0] INNER JOIN $tbl[1] ON ".$_POST[$tbl[0]]." = ".$_POST[$tbl[1]];

}
// Delete relation
if($_GET[delete_relation]) {
    unset($RELATION[$delete_relation]);
    header("location:?");
}
/*Do action for STEP2*/
if(is_array($_POST[field]) && $_POST[tbl] && $_SESSION[STEPS]==2) {
    foreach($_POST[all_fld] as $k_fld => $fld) {
        if($_POST[where_is][$k_fld]) { // use condition
            if($_POST[where][$k_fld]=="BETWEEN") { // if use condition between
                $between=explode(",",$_POST[where_is][$k_fld]);
                $where_sql.=" $AND $fld ".$_POST[where][$k_fld]." '".$between[0]."' AND '".$between[1]."' ";
            }else {
                $where_sql.=" $AND $fld ".$_POST[where][$k_fld]." '".$_POST[where_is][$k_fld]."' ";
            }
            $AND=$_POST[and_or]; // add (and, or) between conditions
        }
        if($_POST[field][$k_fld]) {
            $SQL.="$coma $fld";
            $coma=","; // add coma between fields
        }
    }
    if($where_sql) $where_sql=" where ".$where_sql;
    $SQL="SELECT $SQL FROM ".make_rel().$where_sql;
    echo $SQL."<hr>";
    echo make_report($SQL);
}
/*STEPS*/
switch ($STEPS) {
    case 1:
        echo "STEP 1 <hr /> $form_start $echo1 $form_end1 <br /> <input type='submit' name='MOVE' value='Next'></form> </form><br /> RELATION:<hr /> ";
        echo make_rel()."<hr />";
        foreach($_SESSION[RELATION] as $k=>$v)
            echo "$k => $v <a href='?delete_relation=$k'>DELETE</a> <br />";

        break;
    case 2:
        echo "STEP 2 <hr />$form_start $echo2 <br />$form_end2<br />";
        break;
}


function make_rel() {
    foreach($_SESSION[RELATION] as $k=>$v) {
        $tbl=explode("_",$k);
        if(strpos($relationship,"$tbl[0] INNER JOIN")!== false) {
            $relationship=str_replace("$tbl[0] INNER JOIN","($v) INNER JOIN",$relationship);
        }elseif(strpos($relationship,"INNER JOIN $tbl[0]")!== false) {
            $relationship=str_replace("INNER JOIN $tbl[0]","INNER JOIN ($v)",$relationship);
        }elseif(strpos($relationship,"INNER JOIN $tbl[1]")!== false) {
            $relationship=str_replace("INNER JOIN $tbl[1]","INNER JOIN ($v)",$relationship);
        }elseif(strpos($relationship,"$tbl[1] INNER JOIN")!== false) {
            $relationship=str_replace("$tbl[1] INNER JOIN","($v) INNER JOIN",$relationship);
        }else {
            $relationship.=$v;
        }
    }
    return $relationship;
}

function make_report($SQL) {
    echo "START";
    $result=mysql_query ( $SQL );
    echo "Number of rows: " . mysql_num_rows($result) . "<br />";
    while ( $row = mysql_fetch_array ( $result,MYSQL_ASSOC ) ) {
        $return.="<tr>";
        foreach($row as $k=>$v) {
            if(!$is_header) {
                $header.="<td>$k</td>";
            }
            $tbody.="<td>$v</td>";
        }
        $is_header=1;
        $return.=$tbody."</tr>";
        $tbody='';
    }
    $return="<table border=3><tr>".$header."</tr>".$return."</table>";
    return $return;
}
?>

يمكنك إختيار الحقول التي تظهر ووضع شروط لأي حقل حتى لو لم تكن مختاره لأن الذي تختاره يظهر ولا يؤثر هذا على الشرط , عند إختيار الشرط between يجب أن تكتب في الحقل النصي بجانبه القيمتين بينهما فاصله بعد ذلك تختار كيف سيتم التعامل مع الشروط أي يجب أن تتحقق كلها أم أي واحده منها وذلك بإختيار AND , OR

أي آراء أرجو أن تكتبوها حول تطوير السكريبت فهذا سيفيد الجميع

مايجب عمله :

- إختيار المجاميع مثل SUM,AVG,GROUP BY, وغيرها

- إختيار ترتيب النتائج بناء على أي حقل وهل هو تصاعدي أو تنازلي

- عمل تعدد صفحات وإختيار عدد الصفوف التي ستظهر في كل صفحة

- إمكانيه تخزين النتائج على شكل ملف بي دي أف أو وورد أو إكسل أو صفحة إنترنت

- عمل كريستال ريبورت (إمكانيه التعديل على النتائج وعمل تعديل عليها في قاعدة البيانات من خلال التقرير)

- إظهار الشرط بناء على نوع الحقل (يعني إذا كان من نوع رقمي مش لازم يظهر شرط like)

- عمل تعرف تلقائي على العلاقه بين الجداول وإعطاء إمكانيه لتعديلها

- عمل حفظ للتقرير بحيث يمكن الرجوع إليه في أي وقت.

أي آراء أخرى ؟

لتجربة ماتوصلنا له حتى الآن :

http://www.bloodspotsite.com/report/report.php?

post-21336-12694345632576_thumb.png

تم تعديل هذه المشاركة بواسطة bastr3 في 24 مارس 2010 في 15:48

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#72

بارك الله بكي ....

أنتظروا النسخة التجريبيه لهذه المجله قبل نهايه هذا الشهر إن شاء الله , أعمل عليها حاليا , أدعوا لي :)

شكرا لكم

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#73

أخي الكريم

المجله مفتوحة المصدر الآن وهي في موقعها ويمكنك الإبلاغ عن أي مشاكل أو إقتراحات أو أي شيء ومتابعه الموقع لأنه يحتوي على الكثير من المقالات والتنبيهات

موقع مجله مدارك

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#74

بالنسبه للطلب الأول سأعمل على ذلك قدر المستطاع خلال الأسبوع القادم ولكني ﻻ أعدك بسبب الوقت الضيق :(

بالنسبه لتحميل المجله يوجد عدة روابط وهي

http://sourceforge.net/projects/bsscms/

http://www.urorbit.com/urorbit_cms_1.04_beta.rar

ﻻ تنسى هناك دورة ستقام قريبا بإذن الله ويمكنك الإطلاع على التفاصيل من هنا

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#75
اقتباس
السلام عليكم

ماهي مشكلة الرابط

http://cms.urorbit.c...le/article/2/0/

لا يعمل عندي

هل هناك من اقتراح

معلش أمور متداخله :) تم إنشاء الموقع باللغه الإنجليزيه والآن نقوم ببيع موقع متكامل من خلال الرابط

http://urorbit.com

وبعد المعاينه إتضح أن نعود إلى الأصل يعني العربيه أفضل , لذلك يتم حاليا صياغه الموقع باللغه العربيه وسيتم إعادة الشروحات ولكن لأحدث إصدار من المجله واطار العمل فبفضل الله تم إنجاز عمل ممتاز وسيتم شرحه حال الإنتهاء منه

شكرا للمتابعين :)

1

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

مواضيع مشابهة