دسته بندي ها

جستجو

لينک هاي روزانه

جعبه پیام




امکانات


آرشيو

خبرنامه

آمار

آنلاین : 1
بازدید امروز : 16
بازدید دیروز : 11
بازدید هفته گذشته : 50
بازدید ماه گذشته : 152
بازدید سال گذشته : 2205
کل بازدید : 10207

لينک دوستان

 
کاراکتر “$”: اين کاراکتر به طراحی وب معني پايان خط هست. دقيقاً عکس “^” عمل ميکنه.
کاراکتر “|”: اين کاراکتر به معني “يا” هست. مثلا براي بررسي مطابقت يا عدم مطابقت يه نويسه با يکي
از کلمات red يا bed اين الگو رو ميخوايم:
1
/^bed|red$/
پرانتز “()”: براي ايجاد زير الگوها در يک الگو ازش استفاده ميکنيم. مثلا اگه بخوايم نويسه اي با يکي از
 کلمات bed يا red مطابقت کنه به الگوي زير نياز داريم:
1
/^(r|b)ed$/
براکت “[]“: اينا وقتي کاربرد داره که بخوايم يه گروه خاص از کاراکترها رو با يه نويسه مقايسه کنيم. مثلا
واسه اينکه ببينيم يه نويسه از a و b و h تشکيل شده يا نه اين الگو رو مينويسيم:
1
/^[abh]+$/
کاراکتر “+” و “*”: “+” يکي يا بيشتر و “*” هيچي يا بيشتر. مثلا براي بررسي اينکه يه نويسه از نوع 
عدديه يا نه اين الگو لازمه:
1
/^[?-?]+$/
”{n,m}”: يعني هر الگويي که قبلش قرار داره بايد بين n تا m بار تکرار شده باشه.
و تابع preg_match که به ترتيب الگو و نويسه رو دريافت ميکنه و اگر نويسه با الگو مطابقت کنه true رو برمي گردونه.
خب فعلاً تا همين جا رو داشته باشيد تا بعد.

بهترين کتابخانه هاي کار با نرم افزارهاي آفيس Word , Excel , Power Point
Posted on ??/??/?? | PHP کدهاي آماده
15205298
مجموعه نرم افزاري آفيس يکي از پرکاربرد ترين نرم افزارهاي شرکت مايروسافته که تقريبا ميشه توي هر
 کامپيوتري اون رو پيدا کرد. براي اين پست تصميم گرفتم کتابخانه هايي رو معرفي کنم که کار مارو براي 
ارتباط با اين نرم افزار ها راحت تر ميکنه.


?- PHP PowerPoint

اين کتابخانه به کاربرا اجازه ميده به راحتي اسلايد هاي زيبا بسازند. . از قابليتهاي اين کتابخانه تعيين فون
 دلخواه ،اضافه کردن عکس ، قالب بندي متن و امکانات زياد ديگه اشاره کرد.



دانلود و آموزش : http://phppowerpoint.codeplex.com/



2- PHP Word

PHP Word يکي ديگه از کتابخانه هايي هست که براي ساخت فايلهاي word نوشته شده. اين کتابخانه
 فايلهايي با پسوند docx به کاربرا ميده.

اضافه کردن متنهاي قالب بندي شده ، اضافه کردن عکس ، اضافه کردن header و footer , … از قابليتهاي ا
ين کتابخانه هستند.



دانلود و آموزش : http://phpword.codeplex.com/



3- PHP Excel Reader

کتابخانه اي فقط براي خواندن فايلهاي excel .



دانلود و آموزش : http://code.google.com/p/php-excel-reader/



4 – Excel Writer (XML) For PHP

اين کتابخانه براي ساخت صفحات اکسل به وسيله php کاربرد داره.



دانلود و آموزش :http://sourceforge.net/projects/excelwriterxml/



5 -PHP Export Data

يک کتابخانه براي خروجي گرفتن از اطلاهات به صورت xml , CSV , TSV



دانلود و آموزش : https://github.com/elidickinson/php-export-data



6. PHP Excel

با استفاده از اين کتابخانه ميتونيم آرايه هاي ذو بعدي در php رو به فايلهاي اکسل تبديل کنيم.



دانلود و آموزش : http://code.google.com/p/php-excel/



7. SimpleExcel PHP

کتابخانه ساده اما قدرتمندي که براي نوشتن و خواندن فايلهاي اکسل به وسيله php کاربرد داره.

نوشته شده در دوشنبه 25 آذر 1392 ساعت 15:00 توسط : padideh | دسته : | 177 بازدید
  • []

  •  
    گاهي اوقات لازمه که ما طراحی وب سایت منو رو به صورت دايناميک بزاريم و اون رو يا به ديتابيس يا به  xml وصل کنيم
     اما ظاهر اون ما رو دچار مشکل مي کنه  براي تغيير ظاهر اون به وسيله css  بايد در قسمت properties ابزار
     منو ويژگي  CssClass  کلاس مربوط به منو خودتون رو انتخاب کنيد و ويژگي RenderingMode روي list قرار بدين
     در اين حالت مي تونيم استايل مورد علاقه خودمون رو به منو بديم .
    براي اين کار يک پروژه جديد ايجاد کنيد و يک چک باکس ، Button ،  CustomValidator  و يک ValidationSummary
     براي نمايش ارور به فرم اضافه کنيد .

    در قسمت properties مربوط به CustomValidator يک ErrorMessage وارد کنيد .

    حالا روي CustomValidator دو بار کليک کنيد تا وارد رويداد ServerValidate بشيد و سپس کد زير را در اين رويداد قرار داديد :

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
    //determine if CheckBox1 is checked or not, if it is validate it, else don't
    if (CheckBox1.Checked)
    args.IsValid = true;
    else
    args.IsValid = false;
    }
    پروژه رو اجرا کنيد و نتيجه کار رو ببينيد .
    Home » #C • ASP.NET » URL Rewriting در ASP.NET 4.0
    URL Rewriting در ASP.NET 4.0 نوشته شده توسط مصطفي#C, ASP.NET ?? بهمن ????
    در اين مقاله ياد مي گيريم که چطور به وسيله URL rewriting اقدام به بازنويسي url کنيم .
    زماني که ما از رشته هاي پرس و جو ( query string ) استفاده مي کنيم لزومي نداره که عين رشته رو کاربر ببينه :



    براي اين کار ابتدا يک پروژه خالي از نوع وب ايجاد کنيد و يک صفحه با نام Default.aspx ايجاد کنيد .

    يک hyperlink به صفحه اضافه کنيد .
    در قسمت properties مربوط به hyperlink به خاصيت NavigateUrl مقدار ( Home/~ ) بدهيد .
    به خاصيت text اون مقدار ( Home ) را بدهيد .
    hyperlink دوم رو به صفحه اضافه کنيد به خاصيت NavigateUrl اون مقدار ( About/~ ) و به خاصيت
     text اون مقدار ( About) را بدهيد .
    يک lable هم اضافه کنيد تا نتيجه خروجي رو ببينيم .
    پس تا اينجا ما دو تا لينک متفاوت داريم که نياز به بازنويسي دارد . براي اين کار بايد ابتدا URL mappings
     را در web.config فعال کنيم و دو تا url رو به صورت زير مشخص کنيم :

    <urlMappings enabled="true">
    <add url="~/Home" mappedUrl="~/Default.aspx?page=Home"/>
    <add url="~/About" mappedUrl="~/Default.aspx?page=About"/>
    </urlMappings>
    حالا براي مشاهده نام صفحه درخواست شده در رويداد لود صفحه کد زير رو قرار مي ديم :
    Label1.Text = Request.QueryString["page"];
    بدست آوردن mac address با asp.net نوشته شده توسط مصطفيASP.NET ?? مرداد ????
    براي نمايش mac address ابتدا فضاي نام :

    using System.Net.NetworkInformation;
    به صفحه وب خودمون اضافه مي کنيم و از طريق طراحی وب سایت کد زير mac address رودر label نمايش مي ديم :


    protected void Page_Load(object sender, EventArgs e)
    {

    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

    Label1.Text = nics[0].GetPhysicalAddress().ToString();

    }


    تبديل عکس رنگي به سياه و سفيد با css نوشته شده توسط مصطفيCSS ?? مرداد ????
    سلام خدمت کاربران عزيز و همچنان عدرخواهي به خاطر تاخير در مطالب !

    براي اينکه ما بتونيم تصوير رنگي رو به کمک css به صورت سياه و سفيد نمايش بديم بدون استفاده از 
    جاوا اسکريپت  و يا حتي آپلود دو نسخه از تصوير از کلاس :
    img.grayscale {

    /* Chrome 19+, Safari 6+ ... */
    -webkit-filter: grayscale(1);

    /* Firefox 3.5+, Firefox mobile */
    filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'>
    <filter id=\'gs\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0
     0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#gs");

    /* for IE6+ */
    filter: gray;
    }
    استفاده مي کنيم اين کلاس در تمام مرورگرها به درستي اجرا مي شود .

    و يک نکته رو اضافه کنم که خاصيت filter همونظور که مي دونيد از خاصيت هاي css3 هست و
     فقط مرورگرهاي به اصطلاح ( Webkit browsers ) اون رو پشتيباني مي کنند  ،

    webkit يک موتور مرورگر وب يا موتور رندر هست که در حال حاضر در دو مرورگر گوگل کروم و سافاري
    به کار رفته  به همين خاطر زماني که از ( webkit-filter ) استفاده مي کنيد تنها مرورگرهاي کروم و سافاري پشتيباني مي کنند .
    نوشته شده در سه شنبه 16 مهر 1392 ساعت 13:29 توسط : padideh | دسته : | 132 بازدید
  • []

  • چينش صفحه با ساختار دو ستون با عرض ثابت به وسيله CSS
    اين نوع از چينش در بسياري از وب سايت ها مورد استفاده قرار ميگيرد و شما مي توانيد نمونه اي 
    از اين نوع ساختار را در همين وبلاگ ملاحظه نمائيد. با توجه به نوع و تکنيک مورد استفاده در اين نوع از چينش 
    توضيحات بيشتري در مورد آن ارائه خواهد شد .

    در اين نوع از چينش يک بخش هايي با نام sideBar و contentBody اضافه شده است . با توجه به نوع و حتي 
    رنگ پس زمينه اين بخش ها , مي توان از تکنيک طراحی وب سایت هاي متفاوتي براي چينش صفحه استفاده نمود که در ادامه
     توضيحات بيشتري در اين زمينه ارائه خواهد شد.

    مهمترين نکته در اين نوع از طراحي همسان بودن ارتفاع sideBar و contentBody است . اين همساني ارتفاع
    در زماني نمايان خواهد بود که تفاوت رنگ و يا طرح در پس زمينه sideBar و contentBody وجود داشته باشد و در 
    غير اينصورت اين تفاوت ارتفاع به دليل يکسان بودن رنگ و طرح پس زمينه از ديد بازديد کنندگان پنهان خواهد بود .

    در نمونه و مثال نخست با توجه به نوع طرح و رنگ يکسان پس زمينه sideBar و contentBody همسان نبودن ارتفاع
     از ديد مخاطب پنهان خواهد ماند و نا هماهنگي در طرح ايجاد نخواهد کرد .

    DEMO

    ساختار HTML

    <div class="container">
    <div class="header">
    <h1><a href="http://www.webtarget.ir/">webtarget.ir</a></h1>
    <h2>دو ستون - عرض ثابت</h2>
    </div>
    <div class="navigation">
    <ul>
    <li><a href="#">خانه</a></li>
    <li><a href="#">درباره ما</a></li>
    <li><a href="#">خدمات</a></li>
    <li><a href="#">ارتباط با ما</a></li>
    </ul>
    </div>
    <div class="content">
    <div class="contentBody">
    <h2>آموزش چينش صفحات وب سايت با استفاده از CSS</h2>
    <p>کد نويسي بر اساس استاندارد W3C انجام شده است</p>
    <p>چينش بر اساس زبان فارسي و از راست به چپ است - rtl </p>
    <br class="clearfloat" />
    </div>
    <div class="sideBar">
    <h3>سر فصل براي ستون کناري</h3>
    <p>با ساختار و چينش هاي استاندارد آشنا مي شويد</p>
    </div>
    <br class="clearfloat" />
    </div>
    <div class="footer">
    Copyright©webtarget.ir|2011
    </div>
    </div>
    کدهاي CSS

    @charset "utf-8";
    /* CSS Document */
    /*-------------------------*/
    /* Design & Style by */
    /* Amir Sorouri */
    /* Sorouri.amir@gmail.com */
    /*-------------------------*/

    /*--------- reset ---------*/

    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, font, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    }
    ol, ul {
    list-style: none;
    }
    body { font:62.5%/1.7em Tahoma, Arial, sans-serif;direction:rtl;}

    /* ---------- Requirment ----------*/
    .container {font-size:1.2em;}
    .clearfloat {clear:both; height:1%;}
    h1 , h2 , h3 { font-family:Arial, Helvetica, sans-serif;}
    h1 { font-size:1.8em;}
    h2 { font-size:1.6em;}
    h3 { font-size:1.4em;}

    /* ---------- Main -----------*/
    .container
    {
    width:960px;
    margin: 0 auto;
    background:#fff;
    }

    .header
    {
    background:#ccc;
    padding: 20px;
    }
    .header h1 { text-align:left;}
    .header h1 a{ text-decoration:none; color:#09F;}
    .navigation
    {
    background:#333;
    height:30px;
    line-height:30px;
    }

    .navigation ul li
    {
    float:right;
    }

    .navigation li a
    {
    display: block;
    height:30px;
    padding:0 15px;
    color:#fff;
    text-decoration: none;
    border-left: 1px solid #fff;
    }

    .navigation li a:hover { background:#09F; }

    .content
    {
    background:#eee;
    }

    .contentBody
    {
    width:650px;
    float:right;
    padding:20px;
    }

    .contentBody p { text-align:justify; line-height:17px;}

    .contentBody h2
    {
    margin: 0 0 .5em;
    }

    .sideBar
    {
    width:250px;

    float:left ;
    padding:20px 0 20px 20px;

    }
    .sideBar h3
    {
    margin: 0 0 .5em;
    }

    .footer
    {
    background:#ccc;
    padding: 20px;
    text-align:left;
    }
    براي ظاهر شدن اين ناهماهنگي در چينش صفحه کافيست که sideBar و contentBody داراي رنگ پس زمينه متفاوتي شوند

    .sideBar
    {
    width:250px;
    float:left ;
    padding:20px 0 20px 20px;
    background:#ddd;

    }
    در اين رابطه بهتر است مطالب زير را مطالعه نمائيد

    آشنايي با مفهوم Margin , Padding , Border در CSS
    Margin , Padding – خلاصه نويسي دستورات CSS
    خلاصه نويسي دستورات CSS – Background
    رنگ مورد استفاده در پس زمينه sideBar در ابتدايطراحی وب سایت اين مثال را نيز حذف نمائيد .به همين
     سادگي به نظر مي رسد 
    که نا هماهنگي بر طرف شده باشد . ملاحظه مي نمائيد که با افزايش محتويات contentBody همچنان در چينش 
    ناهماهنگي به وجود نخواهد آمد و contentBody و sideBar داراي ارتفاع يکسان و رنگ پس زمينه متفاوت خواهند بود .

    نمايش صفحه

    ساختار HTML

    <div class="container">
    <div class="header">
    <h1><a href="http://www.webtarget.ir/">webtarget.ir</a></h1>
    <h2>دو ستون - عرض ثابت</h2>
    </div>
    <div class="navigation">
    <ul>
    <li><a href="#">خانه</a></li>
    <li><a href="#">درباره ما</a></li>
    <li><a href="#">خدمات</a></li>
    <li><a href="#">ارتباط با ما</a></li>
    </ul>
    </div>
    <div class="content">
    <div class="contentBody">
    <h2>آموزش چينش صفحات وب سايت با استفاده از CSS</h2>
    <p>کد نويسي بر اساس استاندارد W3C انجام شده است</p>
    <p>چينش بر اساس زبان فارسي و از راست به چپ است - rtl </p>
    <br class="clearfloat" />
    </div>
    <div class="sideBar">
    <h3>سر فصل براي ستون کناري</h3>
    <p>با ساختار و چينش هاي استاندارد آشنا مي شويد</p>
    </div>
    <br class="clearfloat" />
    </div>
    <div class="footer">
    Copyright©webtarget.ir|2011
    </div>
    </div>
    کدهاي CSS
    @charset "utf-8";
    /* CSS Document */
    /*-------------------------*/
    /* Design & Style by */
    /* Amir Sorouri */
    /* Sorouri.amir@gmail.com */
    /*-------------------------*/

    /*--------- reset ---------*/

    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, font, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    }
    ol, ul {
    list-style: none;
    }
    body { font:62.5%/1.7em Tahoma, Arial, sans-serif;/* font-size 1em = 10px */ direction:rtl;}

    /* ---------- Requirment ----------*/
    .container {font-size:1.2em;}
    .clearfloat {clear:both; height:1%;}
    h1 , h2 , h3 { font-family:Arial, Helvetica, sans-serif;}
    h1 { font-size:1.8em;}
    h2 { font-size:1.6em;}
    h3 { font-size:1.4em;}

    /* ---------- Main -----------*/
    .container
    {
    width:960px;
    margin: 0 auto;
    background:#fff;
    }

    .header
    {
    background:#ccc;
    padding: 20px;
    }
    .header h1 { text-align:left;}
    .header h1 a{ text-decoration:none; color:#09F;}
    .navigation
    {
    background:#333;
    height:30px;
    line-height:30px;
    }

    .navigation ul li
    {
    float:right;
    }

    .navigation li a
    {
    display: block;
    height:30px;
    padding:0 15px;
    color:#fff;
    text-decoration: none;
    border-left: 1px solid #fff;
    }

    .navigation li a:hover { background:#09F; }

    .content
    {
    background:url(sideBarBg.jpg) repeat-y left top #eee;
    }

    .contentBody
    {
    width:650px;
    float:right;
    padding:20px;
    }

    .contentBody p { text-align:justify; line-height:17px;}

    .contentBody h2
    {
    margin: 0 0 .5em;
    }

    .sideBar
    {
    width:250px;
    float:left ;
    padding:20px 10px;

    }
    .sideBar h3
    {
    margin: 0 0 .5em;
    }

    .footer
    {
    background:#ccc;
    padding: 20px;
    text-align:left;
    }
    نوشته شده در سه شنبه 2 مهر 1392 ساعت 14:18 توسط : padideh | دسته : | 192 بازدید
  • []


  • 1
    class Database
    2
    {
    3
    ….
    4
    public function select($query)
    5
    {
    6
    // کدهاي مربوط به تابع
    7
    }
    8
    }
    مقادير از ديتابيس مينويسيد.خب همينطور که ميدونيد بقيه اعضاي تيم بايد از اين متد استفاده کنن.اما يک تابع
    مينويسيد تا قبل از اجراي دستور select چک کنه که آيا جدول مورد نظر در ديتابيس وجود داره يا خير؟

    1
    function table_exists($table)
    2
    {
    3
    ///
    4
    }
    تابع table_exists تابعي هست که نبايد توسط بقيه استفاده بشه و فقط بايد توسط متدهاي اصلي کلاس
     استفاده بشن.يعني در متد select قبل از اجراي کوئري طراحی وب سایت مورد نظر چک کنه که آيا جدول مورد نظردر ديتابيس 
    وجود داره يا خير اگر نبود پيغام خطا بده :

    1
    function select()
    2
    {
    3
    if($this->table_exists($table))
    4
    {
    5

    6
    }else
    7
    {
    8
    return false;
    9
    }
    10
    }
    منظور من از مثال بالا اين بود که در برنامه نويسي شيء گرا بايد بعضي از متدها و متغيرهاي کلاس رو از ديد بقيه 
    کساني که از کلاس ما(که شامل بقيه کلاسها هم ميشه) استفاده ميکنن مخفي نگه داريم تا نتونن توي مقادير
     و نحوه کار کرد کلاس خواسته يا ناخواسته خلل ايجاد کنن.

    براي همين در شيء گرايي مفهومي ارايه شد به نام encapsulation که جدا از معني لغوي اين کلمه به نحوه
     دسترسي اعضاي کلاس شامل متد ها و متغير ها ، در خارج کلاس رو تعريف ميکنه.

    در برنامه نويسي شيء گرا سه نوع نحوه دسترسي داريم :

    Public

    Private

    Protected

    در ادامه به توضيح هر کدوم از اينها ميپردازيم.

    Public

    کلاسهايي که ما مينويسيم در اکثر موارد بايد شامل متدها و متغيرهايي باشن تا در خارج از کلاس بتونيم 
    بهشون دسترسي داشته باشيم.بهتره با يک مثال بريم جلو .

    کلاس ديتابيس رو در نظر بگيريد.متد select متدي هست که بايد در خارج از کلاس بهش دسترسي داشته باشيم.
    منظور از خارج از کلاس بقيه کاربران يا کلاسهايي هستند که ميخوان از کلاس ما استفاده کنن. براي دسترسي به 
    يک متغير يا تابع درخارج از کلاس بايد از کلمه کليدي public استفاده کنيم :

    1
    class Database
    2
    {
    3
    public function select()
    4
    {
    5
    ///codes
    6
    }
    7
    }
    هنگامي که از کلمه کليدي public قبل از function استفاده ميکنيم به محيط خارج از کلاس اجازه ميديم که به متد 
    ما دسترسي داشته باشن.

    1
    include 'database.php';
    2
    $db = new Database();
    3
    $db->select();
    با اجراي کد بالا ميبينيد که کلاس Database اجازه دسترسي به متد select رو به شما ميده.

    چون متد select به صورت public يا عمومي تعريف شده.

    Private

    در مثال اول ديديم که کاربران يا کلاسهاي ديگه نبايد به بعضي از متدها و متغيرهاي کلاس ما دسترسي داشته باشن
    .به همين منظور بايد توابع و متغيرهامون رو به صورت private يا خصوصي تعريف کنيم تا فقط در داخل کلاس بشه
    ازشون استفاده کرد.

    1
    class Database
    2
    {
    3
    public function select()
    4
    {
    5
    ///codes
    6
    }
    7
    private function table_exists($table)
    8
    {
    9
    ///
    10
    }
    11

    12
    }
    در کد بالا تابع table_exists در خارج از کلاس در دسترس نيست و با اجراي کد زير پيغام خطا دريافت خواهيد کرد:

    1
    include 'database.php';
    2
    $db = new Database();
    3
    $db->table_exists('users');
    Protected

    در مبحث ارث بري از اين نوع نحوه دستري زياد استفاده ميشه.پس بيايد ابتدا مروري بر ارث بري داشته باشيم
    تا کاربرد protected رو بيشتر متوجه بشيم.

    ارث بري

    در يک پروژه تيمي قسمتي از پروژه که بايد توسط شما آماده بشه گاهي اوقات ممکنه فقط شامل سک کلاس باشه ي
    ا ميتونه از چندين کلاس مختلف تشکيل بشه. در يک سيستم پيشرفته (وحتي متوسط) به شما ميگن بايد بخش 
    ديتابيس رو بنويسيد.(هي نگين گير داده به ديتابيس به خاطر اين ميگم ديتابيس که ميدونم همه باهاش کار کردين 
    و تصورش براتون راحت تره و کاربردي هم هست ;) ).ممکنه بخش ديتابيس يک سايت از چند کلاس مختلف تشکيل 
    شده باشه.يک کلاس براي ساخت خودکار کوئري ها ، يکي براي اجراي کوئري ها ، يکي براي مديريت خطاها و …

    در اين سيستم يک کلاس براي اجراي کوئري ها مثلا با نام Database مينويسيم.براي استفاده از اين کلاس دو راه داريم:

    ?- در هر جاي پروژه که بخوايم يک کوئري خاص رو اجرا کنيم بايد يک شيء از اين کلاس بسازيم بعد کوئري مورد نظر
     رو بهش پاس بديم تا اجرا بشه.

    ?- يک کلاس بنويسيم با نام Users که از کلاس Database ارث بري کنه.سپس به واسطه کلاس Users به متدهاي
    کلاس Database دسترسي پيدا کنيم.

    شايد بپرسيد که چه فرقي داره؟ در روش دوم هم ما بايد هر طراحی وب سایت جا تو پروژه نياز داشتيم از کلاس Users يک شيء بسازيم
    . اما نکته اي که هست اينه که ما ميتونيم به واسطه کلاس Users يه سري تنظيمات رو فقط يکبار تعريف کنيم. با 
    مثال بيشتر متجه ميشيد.

    روش اول :

    کلاس Database

    1
    class Database
    2
    {
    3
    private $table;
    4
    private $primary_key;
    5
    public function __construct($table , $pk)
    6
    {
    7
    $this->table = $table;
    8
    $this->primary_key = $pk;
    9
    }
    10

    11
    public function exec($query)
    12
    {
    13

    14
    // کدهاي مربوط
    15
    }
    16
    }
    در روش اول براي هر بار اجراي يک کوئري بايد ابتدا نام جدول سپس کليد اصلي جدول رو تنظيم کنيم :

    1
    include 'database.php';
    2
    $db = new Database('users' , 'user_id);
    روش دوم :

    کلاس Database رو مثل قبل مينويسيم با اين تفاوت که نوع متغيرهاي $table , $primary_key رو از نوع protected ميزاريم
     که بتونيم در کلاس فرزند بهشون مقدار بديم  :

    1
    class Database
    2
    {
    3
    protected $table;
    4
    protected $primary_key;
    5
    public function __construct($table , $pk)
    6
    {
    7
    $this->table = $table;
    8
    $this->primary_key = $pk;
    9
    }
    10

    11
    public function exec($query)
    12
    {
    13

    14
    // کدهاي مربوط
    15
    }
    16
    }
    در روش دوم بايد يک مرحله بيشتر انجام بديم. در اين روش بايد براي هر جدول در ديتابيس يک کلاس جدا
    بسازيم مثلا کلاس Users که بايد از کلاس Database ارث بري کنه (با استفاده از کلمه کليدي extends ):

    1
    class Users extends Database{
    2
    <pre> protected $table = &#039;users&#039;;
    3
    protected $primary_key = &#039;user_id&#039;;</pre>
    4
    }
    بيايد مزاياي روش دوم رو بررسي کنيم.

    فرض کنيد شما در پروژه ??? بار به ديتابيس متصل ميشيد و جدول users رو دستکاري ميکنيد. ممکنه در آينده نام 
    جدول يا نام کليد اصلي جدول رو بخوايد تغيير بديد. اگر از روش اول استفاده کنيد :

    1
    include 'database.php';
    2

    3
    $db = new Database
    4

    5
    ('users' , 'user_id);
    بايد همه جاهايي که کد بالا رو نوشتيد پيدا کنيد و تغييرش بديد.اما در روش دوم در صورتي هر تغييري در ديتابيس
     اجام بشه و نام فيلد اصلي و جدول تغيير کنه فقط با يکبار تغيير در کلاس Users ميتونيد توي کل پروژه اين تغيير 
    رو اعمال کنيد.ميبينيم روش دوم يکي از مزاياي شيء گرايي که ” نگهداري و توسعه آسان ” هست رو در اختيار ما ميذاره.

    بحث ارث بري يکي از شيرين ترين بحثهاي برنامه نويسي شيء گراست.تا اينجا رو گفتم که با مفهومش آشنا بشيد 
    و کاربردش رو ببينيد به اميد خدا حتما در يک پست جدا در موردش صحبت ميکنيم.

    حالا ببينيم کاربرد Protected در برنامه نويسي شيء گرا کجاست.

    Protected به کلاسهاي فرزند اجازه استفاده از توابع و متغيرها رو ميده اما در خارج از کلاس اين اجازه داده نميشه.

    يک مثال از دنياي واقعي : توي يک خانواده پدر ، مادر ، پسر ، دختر هستند.ممکنه در اين خانواده دختر و پسر
    از پدرشون به خاطر بعضي مسايل انتقاد کنن.اما همين پسر و دختر به کسي که خارج از اعضاي خانواده است اجازه 
    انتقاد از پدرشون رو نميدن.يعني فقط پسرو دختر و مادر حق انتقاد از پدر رو دارن.پس توي يک خانواده 
    ” انتقاد از پدر” به صورت protected تعريف شده و اگر کسي خارج از خانواده از پدر انتقاد کنه با کتک (پيغام خطا) مواجه ميشه.

    اين بحث هم به پايان رسيد.اميد وارم خوب توضيح داده باشم و مفهوم رو رسونده باشم.به هر حال چيزي که توي آموزش PHP مد نظرم هست اينه که مفهوم رو بفهميد و سعي کنيد خودتون رو درگير اصطلاحات مختلف نکنيد.برنامه نويسي شيء گرا واقعا لذت بخشه.
    نوشته شده در دوشنبه 18 شهريور 1392 ساعت 12:22 توسط : padideh | دسته : | 198 بازدید
  • [ادامه مطلب] []

  • کنترل دسترسي به اعضاي کلاس

    Encapsulation در سي‌شارپ بدين معناست که اطلاعات يک کلاس در برابر دسترسي‌هاي غيرمجاز و خراب‌کاري محفوظ نگه داشته شود. کلاس که امکان encapsulation را به شما مي‌دهد، دو مزيت عمده ديگر نيز به همراه دارد. اول اينکه داده‌ها را به کدهاي درون کلاس متصل مي‌کند. دوم اينکه دسترسي به اعضاي کلاس را کنترل مي‌کند. تا اينجا شما با دو نوع از اعضاي کلاس آشنا شده‌ايد که يکي public بود و ديگري private.

    زنگ سي‌شارپ - قسمت بيستم و چهارم

    عضوي که public است مي‌تواند آزادانه در خارج از کلاس خودش نيز قابل دسترسي باشد. اعضاي private فقط درون همان کلاس قابل دسترسي هستند و البته از طريق يک متد public مي‌توانند قابل دسترسي و کنترل باشند.


    محدود کردن دسترسي به اعضاي يک کلاس يکي از طراحی وب سایت بخش‌هاي اساسي برنامه‌نويسي شي‌گرا است چراکه از استفاده‌ي نادرست يک شيء جلوگيري مي‌کند. کنترل دسترسي از طريق access modifier ها انجام مي‌شود که public، private، protected و internal هستند. فعلاً به public و private مي‌پردازيم و protected و internal در جاي خود توضيح داده مي‌شوند. استفاده به‌موقع و به‌جا از public و private يکي از نکات مهم و کليدي برنامه‌نويسي شي‌گرا است. در زير به چند نکته در اين مورد اشاره شده:

    آن دسته از اعضاي کلاس که فقط در همان کلاس استفاده مي‌شوند بايد private باشند.
    داده‌هايي که بايد بين يک محدوده خاص باشند نيز بايد private باشند و دسترسي به آن‌ها از طريق يک متد public که بازه‌ي اعداد را بررسي مي‌کند، کنترل شود.
    اگر تغيير دادن يکي از اعضا موجب شود که تاثير اين تغيير از آن عضو فراتر رود (و بر قسمت‌هاي ديگر شيء تاثير گذارد)، آن عضو بايد private باشد و دسترسي به آن بايد کنترل شود.
    آن دسته از اعضا که درصورت استفاده نادرست موجب مي‌شوند که شيء آسيب ببينيد و آن‌طور که بايد رفتار نکند، بايد private باشند و دسترسي به آن‌ها از طريق متدهاي public انجام شود تا از استفاده‌ي نادرست آن‌ها جلوگيري شود.
    متدهايي که مقداري را به اعضاي private اختصاص مي‌دهند يا مقدار آن‌ها را مي‌خوانند، بايد public باشند.
    اگر هيچ دليلي براي private کردن متغيرهاي کلاس نيافتيد، مي‌توانيد آن‌ها را public در نظر بگيريد.
    البته نکات ظريف ديگري نيز وجود دارندکه در بالا به آن‌ها شاره نکرديم اما در کل اگر همين قوانين را رعايت کنيد اشيايي که مي‌سازيد به‌راحتي خراب نمي‌شوند و مورد سوءاستفاده قرار نمي‌گيرند.

    براي اين‌که درک بهتري از اين موارد داشته باشيد و بدانيد که چرا و چگونه از اين‌ها استفاده مي‌کنيم، مثالي از ساختمان داده‌ي stack مي‌تواند مفيد باشد. يکي از مثال‌هاي مفيد برنامه‌نويسي شي‌گرا کلاسي است که stack را پياده‌سازي و اجرا مي‌کند. همان‌طور که احتمالاً مي‌دانيد، stack ساختاري است براي ذخيره کردن اطلاعات که در آن اولين مقدار ذخيره شده، آخرين مقداري است که مورد استفاده قرار مي‌گيرد. اين‌طور تصور کنيد که تعدادي ظرف را روي ميزي (روي هم) قرار داده‌ايد. اولين ظرفي که روي ميز قرار داديد، آخرين ظرفي است که مي‌توانيد آن را برداريد يا برعکس، آخرين ظرفي که گذاشته‌ايد، اولين ظرفي است که مي‌توانيد آن را برداريد. به اين مکانيسم در اصطلاح Last-in, First-out مي‌گويند. کلاسي که ما براي اين منظور تعريف مي‌کنيم شامل محلي براي ذخيره‌سازي اطلاعات و متدهايي براي کنترل روي اين اطلاعات است بنابراين stack درواقع يک data engine است که اين اجبار را به‌وجود مي‌آورد تا عمليات Last-in, First-out اجرا شود. با اين تعاريف نياز است که يک‌سري از اعضاي کلاس private و يک‌سري ديگر public باشند تا بتوان مکانيسم Last-in, First-out را اجرا کرد.

    يک stack دو عملکرد پايه‌اي را انجام مي‌دهد که عمل push و pop هستند. Push يک مقدار را به بالاي stack اضافه مي‌کند و pop يک مقدار را از بالاي stack حذف مي‌کند. کلاسي که تعريف خواهيم کرد، شامل يک آرايه‌ي private براي ذخيره سازي اطلاعات و دو متد public که عمليات pop و push را انجام مي‌دهند و Last-in, First-out را پياده مي‌کنند:
    // A stack class for characters
    class Stack
    {
    // These members are private
    char[] stck; // holds the stack
    int tos; // index of the top of the stack

    // Construct an empty Stack given its size.
    public Stack(int size)
    {
    stck = new char[size]; // allocate memory for stack
    tos = 0;
    }

    // Push characters onto the stack
    public void Push(char ch)
    {
    if (tos == stck.Length)
    {
    Console.WriteLine("Stack is full!");
    return;
    }
    stck[tos] = ch;
    tos++;
    }

    // Pop a character from the stack.
    public char Pop()
    {
    if (tos == 0)
    {
    Console.WriteLine("Stack is empty!");
    return (char)0;
    }
    tos--;
    return stck[tos];
    }

    // Return true if the stack is full.
    public bool IsFull()
    {
    return tos == stck.Length;
    }

    // Return true if the stack is empty.
    public bool IsEmpty()
    {
    return tos == 0;
    }

    // Return total capacity of the stack.
    public int Capacity() { return stck.Length; }

    // Return number of objects currently on the stack.
    public int GetNum() { return tos; }
    }
    بهتر است به اين کلاس دقيق‌تر نگاه کنيم. کلاس Stack با تعريف اين دو instance variables شروع مي‌شود:

    1
    2
    3
    // These members are private
    char[] stck; // holds the stack
    int tos; // index of the top of the stack
    آرايه‌ي stck محلي براي ذخيره‌سازي اطلاعات در stack فراهم مي‌کند که اين آرايه کاراکتر را در خود نگه مي‌دارد. تخصيص آرايه توسط constructor انجام مي‌گيرد و متغير tos ايندکس (شماره) بالاترين خانه‌ي stack را در خود نگه مي‌دارد.

    هر دو عضو tos و stck به‌صورت private هستند و اين باعث مي‌شود که مکانيسم Last-in, First-out اجرا شود. اگر دسترسي اين دو به‌صورت public تعريف شود آن‌گاه عناصر stack مي‌توانند خارج از ترتيب قابل دسترسي باشند. همچنين از آن‌جا که متغير tos ايندکس بالاترين عنصر stack را نگهداري مي‌کند بايد دسترسي به آن محدود شود تا توسط کدهاي خارج از کلاس در دسترس و قابل دستکاري و خراب‌کاري نباشد. البته دسترسي به tos و stck از طريق متدهاي public امکان‌پذير است.

    در خط بعد constructor را مي‌بينيد:

    // Construct an empty Stack given its size.
    public Stack(int size)
    {
    stck = new char[size]; // allocate memory for stack
    tos = 0;
    }
    توسط constructor اندازه دل‌خواه stack مشخص شده و آرايه مورد نظر ساخته مي‌شود. همچنين به متغير tos مقدار صفر اختصاص مي‌يابد. بنابراين مقدار صفر براي tos مشخص مي‌کند که stack خالي است.

    متد ()Push که public تعريف شده، يک عنصر را به stack اضافه مي‌کند:


    // Push characters onto the stack
    public void Push(char ch)
    {
    if (tos == stck.Length)
    {
    Console.WriteLine("Stack is full!");
    return;
    }
    stck[tos] = ch;
    tos++;
    }
    عنصري که قرار است به stack افزوده شود از طريق پارامتر ch وارد stack مي‌شود. البته قبل از اين‌که عنصري به stack اضافه شود ابتدا بررسي مي‌شود که stack هنوز خانه‌ي خالي داشته باشد. اين‌کار با بررسي اين‌که tos از طول stck فراتر نرفته باشد انجام مي‌شود. سپس کاراکتر در ايندکسي که tos مشخص مي‌کند ذخيره مي‌شود و در نهايت tos يک واحد افزايش مي‌يابد. بنابراين tos هميشه ايندکس خانه‌ي بعدي stck را در خود نگه مي‌دارد.

    براي پاک کردن يک عنصر از stack از متد ()Pop استفاده مي‌کنيم:

    // Pop a character from the stack.
    public char Pop()
    {
    if (tos == 0)
    {
    Console.WriteLine("Stack is empty!");
    return (char)0;
    }
    tos--;
    return stck[tos];
    }
    در اين‌جا مقدار tos بررسي مي‌شود، اگر برابر با
    طراحی وب سایت
     صفر بود stack خالي است در غير اين‌صورت tos يک واحد کاهش مي‌يابد و عنصري که tos به آن اشاره مي‌کند return مي‌شود.

    اگرچه ()Push و ()Pop تنها متدهايي هستند که براي اجراي يک stack مورد نياز است اما تعريف چند متد ديگر نيز مي‌تواند مفيد باشد. ما در اين کلاس ? متد بيشتر تعريف کرده‌ايم که ()IsFull()، IsEmpty()، Capacity و ()GetNum نام دارند و اطلاعاتي را از وضعيت stack به ما مي‌دهند:

    // Return true if the stack is full.
    public bool IsFull()
    {
    return tos == stck.Length;
    }

    // Return true if the stack is empty.
    public bool IsEmpty()
    {
    return tos == 0;
    }


    // Now, pop from stk1 and push the element in stk2.
    // This causes stk2 to hold the elements in reverse order.
    Console.WriteLine("Now, pop chars from stk1 and push " +
    "them onto stk2.");
    while (!stk1.IsEmpty())
    {
    ch = stk1.Pop();
    stk2.Push(ch);
    }

    Console.Write("Contents of stk2: ");
    while (!stk2.IsEmpty())
    {
    ch = stk2.Pop();
    Console.Write(ch);
    }
    Console.WriteLine("\n");

    // Put 5 characters into stack.
    Console.WriteLine("Put 5 characters on stk3.");
    for (i = 0; i < 5; i++)
    stk3.Push((char)('A' + i));

    Console.WriteLine("Capacity of stk3: " + stk3.Capacity());
    Console.WriteLine("Number of objects in stk3: " +
    stk3.GetNum());
    }
    }
    خروجي:



    در مثال بعد قصد داريم برنامه دفترچه تلفن سابق را بيشتر شي‌گرا کنيم. در اين دفترچه تلفن يک کلاس براي مخاطب داريم و يک کلاس براي دفترچه تلفن. در کلاس مخاطب، متغيرهاي نام، آدرس و شماره تلفن قرار دارد. در کلاس دفترچه تلفن، متدهايي براي جستجو، افزودن مخاطب جديد و نمايش مخاطبان ذخيره شده وجود دارد:

    1using System;
    class MainClass
    {
    static void Main()
    {
    Phonebook myPhonebook = new Phonebook(5);
    while (true)
    {
    Console.Clear();
    Console.WriteLine("1. Add");
    Console.WriteLine("2. Search By Name");
    Console.WriteLine("3. Show all");
    Console.WriteLine("4. Exit");
    Console.WriteLine();
    Console.Write("Choose a number: ");
    string choice = Console.ReadLine();

    switch (choice)
    {
    case "1":
    Console.Clear();
    Person contact = new Person(
    GetString("Please enter your name: "),
    GetNum("Please enter your number: "),
    GetString("Please enter your address: ")
    );

    if(myPhonebook.Add(contact))
    Console.WriteLine("Your contact added successfully.");
    else
    Console.WriteLine("Fail!");

    break;
    case "2":
    myPhonebook.SearchByName(GetString("Please enter the name: "));
    break;
    case "3":
    Console.Clear();
    myPhonebook.ShowContacts();
    break;
    case "4":
    Environment.Exit(0);
    break;
    default:
    Console.WriteLine("Invalid Input!");
    break;
    }
    Console.ReadLine();
    }
    }
    static string GetString(string message)
    {
    Console.Write(message);
    return Console.ReadLine();
    }
    static int GetNum(string message)
    {
    Console.Write(message);
    return Convert.ToInt32(Console.ReadLine());
    }
    }
    class Person
    {
    string Name;
    int Number;
    string Address;

    public Person(string name, int number, string address)
    {
    Name = name;
    Number = number;
    Address = address;
    }

    public string GetName() { return Name; }
    public int GetNumber() { return Number; }
    public string GetAddress() { return Address; }
    }
    class Phonebook
    {
    Person[] Persons;
    int Current;
    bool Found;

    public Phonebook(int size)
    {
    Persons = new Person[size];
    Current = 0;
    }

    public bool Add(Person person)
    {
    if (Current < Persons.Length)
    {
    Persons[Current] = person;
    Current++;
    return true;
    }
    return false;
    }
    public void SearchByName(string search)
    {
    Found = false;
    for (int i = 0; i < Persons.Length; i++)
    {
    if (Persons[i] == null) break;
    if (search == Persons[i].GetName())
    {
    Found = true;
    Console.WriteLine();
    Console.WriteLine(Persons[i].GetName() + "\n" + Persons[i].GetNumber() +
    "\n" + Persons[i].GetAddress());
    }
    }
    if(!Found)
    Console.WriteLine("Not Found!");
    }
    public void ShowContacts()
    {
    for (int i = 0; i < Persons.Length; i++)
    {
    if (Persons[i] == null) return;
    Console.WriteLine(Persons[i].GetName() + "\n" + Persons[i].GetNumber() +
    "\n" + Persons[i].GetAddress() + "\n");
    }
    }
    }
    همان‌طور که مي‌بينيد نسبت به قبل از اشياء و کلاس‌هاي بيشتري استفاده کرديم و اين برنامه را بيشتر به سمت شي‌گرايي سوق داديم. در کلاس Person سه instance variable تعريف کرده‌ايم که هر سه private و شامل نام، آدرس و شماره تلفن هستند. همچنين از constructor براي مقداردهي به اين سه متغير استفاده کرده و از طريق متدهاي public اين متغيرها را Read-only کرديم. در کلاس Phonebook آرايه‌اي از جنس کلاس Person داريم. با اين‌کار در هر خانه‌ي آرايه، يک شيء از جنس Person ذخيره مي‌شود که شامل نام، آدرس و شماره تلفن است. از طريق constructor اين کلاس، آرايه ساخته و مقدار دهي مي‌شود. کلاس Phonebook همچنين شامل سه متد براي جستجو، افزودن مخاطب جديد و نمايش مخاطبان ذخيره شده دارد. همان‌طور که مي‌بينيد، متد ()Add يک شيء از جنس Person دريافت مي‌کند و آن را در آرايه‌اي که از جنس Person ساخته بوديم ذخيره مي‌کند و در نهايت اگر با موفقيت مخاطب جديد را ذخيره کرد، مقدار true را باز مي‌گرداند. در متد ()Main براي افزودن مخاطب جديد، يک شيء از کلاس Person ساخته و argument هاي لازم را به آن داده‌ايم. سپس متد ()Add را صدا زده‌ايم تا مخاطب جديد ذخيره شود.

    برچسب‌ها:
    نوشته شده در چهارشنبه 23 مرداد 1392 ساعت 14:58 توسط : padideh | دسته : | 202 بازدید
  • [ادامه مطلب] []




  • ا
    در هر جاي كامپيوتر كه دوست داريد فلدري به نام my-first-webpage بسازيد.

    textEditor خودتان را كه در جلسات قبل توضيح داديم باز كنيد كد زير را در آن كپي كنيد


    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


    The Most Basic Web Page in the World
    content="text/html; charset=utf-8"/>


    This is a very simple web page to get you started.
    Hopefully you will get to see how the markup that drives
    the page relates to the end result that you can see on
    screen.

     

    This is another paragraph, by the way. Just to show how it
    works.



    د:

    طراحی وب سایت 

    مسير فلدر قبل را بدهيد تا در آنجا ذخيره شود.

    نام فايل را انتخاب نماييد البته با پسوند html مانند my-first-webpage.html

    از منوي كشويي save as type گزينه all files را انتخاب نماييد

    از منوي كشويي Encoding گزينه UTF-8 را انتخاب نماييد.

    و حالا دكمه save را بزنيد.


    اهميت UTF-8

    اين كاراكتر ست (Character Set) اجازه مي دهد زبان هاي ديگر هم بتوانند به درستي صفحه شما را ببينند. فرض كنيد يك كاربر كره اي كه زبان انگليسي ندارد بخواهد صفحه شما را ببيند ، اين كاراكتر ست است كه اجازه ميدهد شما با مشكلي مواجه نشويد.

    اولين آناليز شما


    زمان مناسبي است كه در مورد 2 تگ p و h1 و البته عناصر ديگر صحبت كنيم.

    تيترها و سلسله مراتب آن (H)

    تيترها عناصر بلاك و بسته شونده (container)هستند و سلسله مراتب مخصوص به خود را دارند و از h1 تا h6 وجود دارند.
    از h1 براي مهم ترين تيتر از h2 براي تيتر كم ارزش تر و از h3 براي تيتر كم ارزش تر از h2 و به همين ترتيب تا h6

    پاراگراف (p)

    يك تگ بلاك و بسته شونده (container) است و براي يك بلوك متني استفاده مي شود اين بدان معني است كه متن هاي خوتان را بايد داخل اين تگ قرار دهيد.

    ليست (list)

    فرض كنيد مي خواهيد ليست وب سايت هاي طراحي شده خودتان را نمايش دهيد ،


    و اما ليست ها دو گونه اند:

    Ol-order list : براي ليست هاي ترتيبي

    Ul-unorder list: براي ليستهاي غير ترتيبي

    به مثال زير دقت كنيد:

    طراحی وب سایت 

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


    Lists - an introductioncontent="text/html; charset=utf-8"/>


    Lists - an introduction

     

    Here's a paragraph. A lovely, concise little paragraph.

     

    Here comes another one, followed by a subheading.

     

    A subheading here

     

    And now for a list or two:



      • This is a bulleted list
     
      • No order applied
     
      • Just a bunch of points we want to make


    And here's an ordered list:



      1. This is the first item
     
      1. Followed by this one





      ظاهر همه ليست ها به همين سادگي نيستند و امروزه در طراحي وب سايت حرفه اي استفاده زيادي دارد. براي نمونه مي توانيد به فوتر وب سايت شرکت طراحي سايت وب اسکالا نگاهي بياندازيد تا ديدتان نسبت به استفاده از اين عنصر بازتر شود.
    نوشته شده در شنبه 22 تير 1392 ساعت 13:01 توسط : padideh | دسته : | 180 بازدید
  • []

  •  گزينشکرها (selectors)

     
     
    در اين جلسه از آموزش طراحی وب سایت css با ساير گزينشگرهايي که در Css3 معرفي شده اند صحبت خواهيم کرد.
    اگر دومين پست از آموزش css را خوانده ايد، با هم درمورد گزينشکرها صحبت کرديم
    گفتيم که در css شش نوع گزينشگر براي انتخاب المنتها وجود دارد که يگي از ان ها کلاس هاي کاذب (pseudo-class) بودند، که اين سلکتورها براي نمايش رويدادهاي صفحه از جمله، کليک، هاور، فوکوس و ... استفاده مي شوند. در css کلاس هاي کاذب ديگري نيز وجود دارد که مربوط به طريقه انتخاب فرزندان (child) يک المنت پدراست. ما ميخواهيم در اين جلسه  طراحی وب سایت در مورد آن ها توضيح دهيم.
    کلاس هاي کاذب توارثي
     
     
    کد html زير را در نظر بگيريد
    1
    <ul>
    2
     <li>Lang
    3
     <ul>
    4
     <li>HTML</li>
    5
     <li>CSS</li>
    6
     <li>Javascript</li>
    7
     </ul>
    8
     </li>
    9
     
    10
    <li>CMS
    11
     <ul>
    12
     <li>Wordpress</li>
    13
     <li>Joomla</li>
    14
     <li>Drupal</li>
    15
     </ul>
    16
     </li>
    17
    </ul>
    حال اگر بخواهيم به هر يک از اين گزينه ها يک رنگ متفاوت اختصاص دهيم، چه ميکرديم؟ حتما براي هر يک class تعريف مي کرديم و رنگ مورد نظر را انتخاب مي کرديم. خب اين روش درست است اما اگر ندانيم class آن چيست چطور؟ اگر سايت  طراحی وب سایت دايناميک باشد، و اين اطلاعات بعدا اضافه شود به طوريکه نميتوان براي آن ها class تعريف کرد؟؟ در اين صورت بايد از کلاس هاي کاذب توارثي استفاده کنيم.
    کلاس هاي کاذب توارثي موجود در css به ترتيب اين ها هستند :
    nth-child(n)
    nth-last-child(n)
    first-child
    last-child
    حال به تعريف دقيقتر اين کلاس هاي کاذب مي پردازيم :
     
    nth-child(n) و nth-last-child(n)
     
     
    nth-child(n) : با استفاده از اين کلاس کاذب مي توان براي تک تک المنت هاي يک صفحه طراحی وب سایت ، بدون استفاده از id يا class براي آن ها يک استايل متفاوت تعيين کنيم.
    حرف n در داخل پرانتز يک عدد طبيعي است 1,2,3,...
    اين عدد تعيين کننده چندمين فرزند از يک المنت پدر است
    به طور مثال اولين تگ شماري 1 را دارد دومين شماره 2 و...
    به کد css زير دقت کنيد تا متوجه شويد چگونه ميتوانيم به هر يک از li هاي کد html بالا استايل متفاوت دهيم.
    1
    ul li {
    2
     color: blue;
    3
     font: 24px tahoma;
    4
     text-shadow: -1px 1px 1px #333;
    5
    }
    6
     
    7
    ul li:nth-child(1){color: red;}
    8
    ul li:nth-child(2){color: green;}
    9
    ul li:nth-child(1) li:nth-child(1){color: orange;}
    10
    ul li:nth-child(1) li:nth-child(2){color: brown;}
    11
    ul li:nth-child(1) li:nth-child(3){color: pink;}
    12
    ul li:nth-child(2) li:nth-child(1){color: gray;}
    13
    ul li:nth-child(2) li:nth-child(2){color: silver;}
    14
    ul li:nth-child(2) li:nth-child(3){color: yellow;}
    البته در مروگر ie فقط از نسخه 9+ کار ميکند.
    اگر کد را اجرا کنيد نتيجه اي شبيه زير خواهيد داشت.
     
    کلاس کاذب nth-last-child(n) برعکس nth-child(n) عمل ميکند، به اين صورت که از اخر به شمارش المنت ها ميپرداز.
    اگر nth-last-child را جايگزين nth-child در کد css بالا کنيم نتيجه کد  طراحی وب سایت  به شکل زير خواهد بود.
     
    first-child و last-child
     
     
    همانطور که از اسم کلاس ها معلومه first-child اولين فرزند از يک المنت پدر last-child آخرين فرزند از يک المنت پدر رو انتخاب ميکنند.
    کد css زير را به کدهاي css بالا اضافه کنيد
    1
    ul li:first-child li {font-size: 18px;}
    2
    ul li:last-child li {font-size: 14;}
    نتيجه
     
    ديگر کلاس هاي کاذب
     
     
    selection : اين کلاس  طراحی وب سایت  کاذب استايل المنت را هنگامي که ان را انتخاب ميکنيم، (در حالي که کليک چپ رو نگه داشتيم روي المنت ميکشيم يا CTRL + A ( در حالت پيشفرض مرورگرها
    هنگامي که به طور مثال متني رو انتخاب ميکنيم، رنگ متن سفيد، و پس زمينه ان آبي ميشود. ما توانيم با استفاده از اين کلاس کاذب اين رنگ را هر کدام از المنتها تغيير دهيم يا ان را براي کل صفحه تعيين کنيم.
    کد css :
    1
    ::selection {
    2
     background: #999;
    3
     color: #edb;
    4
    }
    5
     
    6
    ::-moz-selection {
    7
     background: #999;
    8
     color: #edb;
    9
    }
    10
     
    11
    ::-webkit-selection {
    12
     background: #999;
    13
     color: #edb;
    14
    }
    المنت هاي کاذب (pseudo-elemnt)
     
     
    بعلاوه کلاس هاي کاذبي  طراحی وب سایت  که گفتيم، المنت هاي کاذب نيز وجود دارند.
    ::first-letter تغيير استايل اولين کاراکتر از يک متن.
    کد html :
    1
    <p>7learn: javascript and web design tutarials</p>
    کد css :
     
    1
    p {font-size: 20px;}
    2
    p::first-letter {font-size: 36px;}
     
     
    ::first-line تغيير استايل اولين خط از يک متن.
     
    1
    <p>7learn: javascript and web design tutarials<br>7learn: javascript and web design tutarials</p>
    کد css :
     
    1
    p {font-size: 20px;}
    2
    p::first-line {font-size: 36px;}
    بسيار خب آموزش اين جلسه طراحی وب سایت نيز به پايان رسيد در جلسه بعدي به معرفي گزينشگرهاي صفت (attribute) و باقي گزينشگرها ميپردازيم.
    نوشته شده در سه شنبه 28 خرداد 1392 ساعت 12:31 توسط : padideh | دسته : | 253 بازدید
  • []

  •  PHP بهتر است يا ASP ؟ فرق PHP و ASP.NET در طراحی وب سايت

    فرستاده شده توسط nitaran در پ., 01/10/2013 - 16:43

    PHP و ASP زبان هاي متداول برنامه نويسي تحت وب هستند که براي طراحي سايت هاي دايناميک بکار مي روند. از نظر کاربرد هر دو مي توانند صفحات وب سايت با کارايي و طرح قالب مشابه را توليد کنند.

    اما اينکه کدام يک بهتر از ديگري است همواره موجب بحث هايي بين طراحان سايت قرار مي گيرد . واقعيت اين است که برنامه نويسان وب هر کدام بر يکي از اين دو زبان برنامه نويسي تسلط بيشتري دارند چرا که در انتخاب اوليه خود از بين PHP و ASP يکي را انتخاب کرده اند و بقول معروف در آن خبره شده اند طبيعتا در مقابل اين سوال ، بي درنگ از برتري 100 درصدي زباني که بر آن تسلط دارند مي گويند اما حقيقت چيز ديگري است.

    براي ما چند معيار در  طراحی وب سايت  اهميت دارد که روي انتخاب ما تاثير خواهد داشت.



    مقايسه اي بر طراحی وب سايت PHP و ASP.NET

    به نظرم مهم است که يک برنامه نويس و توسعه دهنده نرم افزار به زبانها و پلاتفرمهاي توسعه نرم افزار صرفا به عنوان يک ابزار نگاه کند و براساس نيازهاي کمپاني يا تيم نرم افزاري و نيازهاي نرم افزار پلاتفرم و ابزارهاي لازم را انتخاب کنند. مباحثي مثل علاقه شديد به مايکروسافت يا ضديت با آن به نظرم شيوه حرفه اي و درستي براي انتخاب ابزارهاي طراحي و توسعه نرم افزار نيست. اين روزها در ايران مقايسه و انتخاب دو زبان و تکنولوژي خاص يعني PHP و ASP.NET بحث داغي هستند و البته با گذشت زمان تقريبا هر گروه (بيشتر براساس سياست شرکتهايي که در آن کار ميکنند) يکي از اين تکنولوژي ها را به عنوان ابزار اصلي توسعه نرم افزار و سايتها انتخاب کرده است. بارها از من پرسيده شده است که کداميک از اين زبانها انتخاب بهتري است و دلايل آن چيست؟ به عنوان طراحی وب سايت برنامه نويسيکه در سالهاي قبل علاوه بر ASP با زبان PHP نيز کار مي کردم و در اين زمينه مقاله، سمينار معرفي کوچکي و فعاليتهاي در انجمن سابق ايران PHP (مانند تابع سورت فارسي) داشته ام و همچنين در سالهاي اخير نيز عموما از ASP.NET استفاده کردم و براساس تجربه و اطلاعات شخصي مقايسه مختصري درباره اين زبانها را ادامه خواهم داشت.

    پي اچ پي PHP

    زبان PHP با هدف نوشتن اسکريپتهاي وب نوشته شد. در واقع هدف فرار از پيچيدگيهاي Perl و نوشتن CGI با زبانهايي مثل C و ارائه دستوراتي ساده براي  طراحی وب سايت بود.پي اچ پي اوليه زباني با دستورات محدود و ساده بود که بيشتر براي کارهاي ساده و براي طراحان وب سايتها و نه برنامه نويسان حرفه اي بود. اين زبان کم کم پيشرفت کرد و بخصوص Open Source بودن آن باعث شد تسريع اين حرکت شد. در مرحله اول تعداد دستورات و توابع اين زبان گسترش پيدا کرد بطوريکه امروز نيز براحتي کارهاي نسبت پيچيده اي (مثل کار با سوکتها يا تصاوير) با توابع اين زبان قابل اجراست.همچنين از لحاظ معماري اين زبان با پشتيباني از طراحی وب سايت  شي گرايي پيشرفت مهم ديگري داشته است. پي اچ پي به طور کلي يکي از زبانهاي معمول براي نوشتن اسکريپتهاي اجرايي در محيط يونيکس ، لينوکس (هرچند که در ويندوز نيز به خوبي اجرا مي شود) و کار با نرم افزار مديريت بانک اطلاعات MySQL است.


    همانطور که اشاره شد هر دو زبان برنامه نويسي از نظر کارايي يکسان هستند يعني اگر بخواهيم هر وب سايت با هر قابليتي را طراحي و راه اندازي کنيم اينکار هم با ASP قابل اجرا است و هم با PHP

    بحث هزينه :

    ASP از طرف کمپاني ماکروسافت پشتيباني مي شود و براي اجراي آن در سرور نياز به محصولات اين کمپاني از جمله IIS است که آن هم در ويندوز اجرا مي شود. بنابراين براي سايت هاي ASP بايد از سرور ويندوز استفاده کرد. اما PHP هم در لينوکس و هم در ويندوز قابل اجرا است. پس اگر بخواهيم سايتمان بر اساس ASP طراحي شود فقط مي توانيم از هاست ويندوز استفاده کنيم. اما سرورهاي ويندوز از نظر هزينه ، گران تر هستند. يعني براي کارايي و کيفيت يکسان بايد هزينه بيشتري بابت هاست ويندوز پرداخت کرد.

    از طرف ديگر بسياري از ملزومات و اصطلاحا Addon ها براي ASP و سرور ويندوز هزينه در برخواهند داشت . حال آنکه PHP  يک زبان لايه باز است و ماژول هاي آن نياز به پرداخت هزينه ندارد.

     پس از نظر هزينه PHP براي  طراحی وب سايت  گزينه بهتري است.

     

    بحث عموميت :

    همانطور که اشاره شد پي اچ پي يک زبان لايه باز است به همين دليل عموميت بيشتري دارد. اسکريپت هاي زيادي براي آن يافت مي شود و همواره بحث هاي اينترنتي درباره برنامه هاي نوشته شده توسط PHP داغ تر است.  

    خيلي از چيزهايي که يک برنامه نويس و طراحی وب سايت  نياز دارد براي PHP بسرعت يافت مي شود از انواع سيستم هاي مديريت محتوا ( CMS ها ( گرفته تا فريم ورک ها و همين عموميت يکي از مزاياي اين زبان است.

    بازار طراحي وب سايت بر اساس PHP تقاضاي بسياري دارد . اگر يک طراح سايت بخواهد در اين بازار سهم بيشتري داشته باشد نبايد بر اهميت تمرکز روي PHP غافل شود.

    بنابراين با توجه به معيارهاي فوق استفاده از زبان برنامه نويسي PHP در طراحي سايت مطلوب تر است اما از نظر کارايي هر دو يکسان هستند.
     
    نوشته شده در يکشنبه 26 خرداد 1392 ساعت 13:18 توسط : padideh | دسته : | 312 بازدید
  • []


  • صفحه قبل 1 صفحه بعد
    سفارش تبليغات
    سفر به ترکیه | فرش کاشان | آژانس هواپیمایی | منزل مبله در شیراز | کفسابی | هتل و اقامت | آموزش بازاریابی | میز کانتر | گیت کنترل تردد | نوبت دهی پزشکان شیراز | پاپ آپ نمایشگاهی | دکتر نوروزیان | منزل مبله شیراز | طلایاب | سفر به تایلند| ثبت شرکت | راهنمای سفر | سفر به گرجستان | سفر به روسیه | منزل مبله | فلزیاب | محمد دبیری
    X
    تبليغات