اذهب إلى المحتوى

E.Nourddine

الأعضاء
  • المساهمات

    1458
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    18

كل منشورات العضو E.Nourddine

  1. تختلف Objective-C قليلا عن C في هذه الجزئية، فـ enum لا يعرّف بنفس الطريقة متل C، حيث نجد: enum tagname x; // enum tagname من نوع x تعريف متغير tagname x; //C++ بينما يعتبر صحيحاً على Objective-C سيحدث خطأ في ويمكن أيضا تعريف متغير بنفس اسم متغير enum على الشكل: enum tagname { ... }; typedef enum tagname tagname; // enum tagname كنوع من 'tagname'تعريف متغير ويمكن اختصاره على في سطر واحد بالشكل التالي: typedef enum tagname { ... } tagname; وفي الأخير في حال كنت لا تريد ربط enum tagname بـ tagname : typedef enum { ... } tagname; https://www.binpress.com/tutorial/objectivec-lesson-7-enumerated-types-and-typedefs/72
  2. ستحتاج إلى تحويل المتغير ككل، مثال على ذلك: % perl -e 'print "5.45" + 0.1;' 5.55وفي حالة كان يتوفر على أحرف مع أرقام، يمكنك استعمال هذه الطريقة : my $var1 = "123abc"; print $var1 + 0;لنحصل على النتيجة: 123 ولملاحظة الفرق، إليك هذا المثال الثالث: my $var2 = "abc123"; print $var2 + 0;سنحصل على : 0وهذا جدول حالات التحويلات التي من الممكن مصادفتها: Original As string As number 42 "42" 42 0.3 "0.3" 0.3 "42" "42" 42 "0.3" "0.3" 0.3 "4z" "4z" 4 (*) "4z3" "4z3" 4 (*) "0.3y9" "0.3y9" 0.3 (*) "xyz" "xyz" 0 (*) "" "" 0 (*) "23\n" "23\n" 23المزيد عن الموضوع
  3. على لغة Perl يمكننا مقارنة متغيرين نصيين كالآتي: if ( fc($x) eq fc($y) ) { print ' متساويتينy و x قيمة كل من ' ; } وهناك أيضا عوامل مقارن المتغيرات: "<" : تُرجع قيمة true في حالة كان المتغير الأول أكبر من المتغير الثاني.">": تُرجع قيمة true في حالة كان المتغير الأول أصغر من المتغير الثاني."<=":تُرجع قيمة true في حالة كان المتغير الأول أكبر من أو يساوي المتغير الثاني.">=": تُرجع قيمة true في حالة كان المتغير الأول أصغر من أو يساوي المتغير الثاني.هناك أيضا : "lt":"gt" ,"le", "ge", "==" , "!=" ,"<=>" يمكن التعرّف على وظيفتها من خلال الرابط
  4. نعم يمكن ذلك،وإليك هذه الأداة الفعّالة لذلك : Smop هو محوّل من Matlap غلى لغة python وهذه بعض استعمالاته: 01 function mv = solver(ai,af,w) 01 def solver_(ai,af,w,nargout=1): 02 nBlocks = max(ai(:)); 02 nBlocks=max_(ai[:]) 03 [m,n] = size(ai); 03 m,n=size_(ai,nargout=2)04 I = [0 1 0 -1]; 04 I=matlabarray([0,1,0,- 1]) 05 J = [1 0 -1 0]; 05 J=matlabarray([1,0,- 1,0]) 06 a = ai; 06 a=copy_(ai) 07 mv = []; 07 mv=matlabarray([])08 while ~isequal(af,a) 08 while not isequal_(af,a): 09 bid = ceil(rand*nBlocks); 09 bid=ceil_(rand_() * nBlocks) 10 [i,j] = find(a==bid); 10 i,j=find_(a == bid,nargout=2) 11 r = ceil(rand*4); 11 r=ceil_(rand_() * 4) 12 ni = i + I(r); 12 ni=i + I[r] 13 nj = j + J(r); 13 nj=j + J[r]14 if (ni<1) || (ni>m) || 14 if (ni < 1) or (ni > m) or (nj<1) || (nj>n) (nj < 1) or (nj > n): 15 continue 15 continue 16 end 16 17 if a(ni,nj)>0 17 if a[ni,nj] > 0: 18 continue 18 continue 19 end 19 20 [ti,tj] = find(af==bid); 20 ti,tj=find_(af == bid,nargout=2) 21 d = (ti-i)^2 + (tj-j)^2; 21 d=(ti - i) ** 2 + (tj - j) ** 2 22 dn = (ti-ni)^2 + (tj-nj)^2; 22 dn=(ti - ni) ** 2 + (tj - nj) ** 2 23 if (d<dn) && (rand>0.05) 23 if (d < dn) and (rand_() > 0.05): 24 continue 24 continue 25 end 25 26 a(ni,nj) = bid; 26 a[ni,nj]=bid 27 a(i,j) = 0; 27 a[i,j]=0 28 mv(end+1,[1 2]) = [bid r]; 28 mv[mv.shape[0] + 1,[1,2]]=[bid,r] 29 end 29 30 30 return mvستلاحظ وجود كود matlab مع مثيله بلغة python.
  5. أضف المكتبة المسؤولة عن مسح barcode: ثم أضف الإعدادات التالية في ملف AndroidManifest/xml: <!-- ZXing activities --> <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="com.phonegap.plugins.barcodescanner.SCAN"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.encode.EncodeActivity" android:label="@string/share_name"> <intent-filter> <action android:name="com.phonegap.plugins.barcodescanner.ENCODE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application>في ملف Index.html: <a href="#" class="btn" onclick="scanCode();">Scan Code</a> <a href="#" class="btn enc" onclick="encodeText();">Encode Text</a> <a href="#" class="btn enc" onclick="encodeEmail();">Encode Email</a> <a href="#" class="btn enc" onclick="encodePhone();">Encode Phone</a> <a href="#" class="btn enc" onclick="encodeSMS();">Encode SMS</a> يمكنك التوسع في الموضوع عن طريق الدرس التالي : TMT3 Add the PhoneGap Barcode Scanner Plugin to a Project, Write an App using Barcode Scanner Technology
  6. بالنسبة لملف التنسيق css أضفه بالشكل التالي: wp_register_style( 'namespace', 'http://locationofcss.com/mycss.css' ); بالنسبة لـ jquery سنستعمل enqueue لربط pluging به، بهذا الشكل: wp_enqueue_script('jquery');كما يمكننا أيضا ربط ملف javascript مع jquery معاً في حال كنا سنستخدم الاثنين معاً: wp_enqueue_script('namespaceformyscript', 'http://locationofscript.com/myscript.js', array('jquery'));Using jQuery in own Plugins
  7. تندرج هذه النوعية من الرسائل تحت اسم DialogResult حيث يكون الهدف منها هو الحصول على رأي المستخدم عن طريق توفير أكثر من زر على نافذة الرسالة، مع توفر الرسالة على سؤال يحتمل الإجابة بنعم أو لا 'Yes' - 'No'، ويكون الكود المُنتج للرسالة بالشكل التالي: DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.YesNo); if(dialogResult == DialogResult.Yes) { //do something } else if (dialogResult == DialogResult.No) { //do something else }ويمكن أيضا تضمين حقل نصي في نافذة الرسالة، بهذا الشكل: بهذا الكود: string value = "Document 1"; if (Tmp.InputBox("New document", "New document name:", ref value) == DialogResult.OK) { myDocument.Name = value; }
  8. تأكد من استعمالك للمكتبة System.Net.Mail وليس System.Web.Mail بالطريقة التالية: // استعمال المكتبات الضرورية لارسال الرسالة الالكترونية using System.Net; using System.Net.Mail; // تعريف المتغيرات اللازمة للرسالة كالمُرسل،المُرسَل إليه،الرسالة،الموضوع... var fromAddress = new MailAddress("from@gmail.com", "From Name"); var toAddress = new MailAddress("to@example.com", "To Name"); const string fromPassword = "fromPassword"; const string subject = "Subject"; //محتوى الرسالة const string body = "Body"; // اللروتوكول اللازم لارسال الرسالة الالكترونيةsmtp إعدادات var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { // ارسال الرسالة smtp.Send(message); }
  9. الخطوة الأولى هي تنفيذ productAllFeatures من بين لائحة الإعدادات، بالشكل التالي: var bind = productsDoc.Descendants("products").Select(product => new { ... productAllFeatures = product.Element("productFeatures") .Descendants("Feature") .Select(x => x.Value) .ToList() }).OrderBy(product => product.productName).ToList();ثم نظهر العناصر في الواجهة بالشكل التالي: <Columns> ... <TemplateField HeaderText="Features"> <ItemTemplate> <!-- xml تتم هما عملية جلب المعلومات من ملف --> <asp:Repeater runat="server" DataSource='<%# Eval("productAllFeatures") %>'> <ItemTemplate> <!-- عرض البيانات--> <%# Container.DataItem.ToString() %> </ItemTemplate> </asp:Repeater> </ItemTemplate> </TemplateField>
  10. يوفر إطار العمل sinatra الوظيفة request والتي تمكن من استعمال عنوان Ip الخاص بالمستخدم الحالي للتطبيق، وذلك باستخدام request.ip: get '/' do "Your IP address is #{request.ip}" endIntro to Sinatra - Make an IP Checker Get client's IP address in Sinatra?
  11. من خلال الموقع الرسمي لـsinatra يمكن أن نستخلص: ثبت rerun إن لم تكن قد ثبّتها من قبل. $ gem install rerun شغّل تطبيق sintra بالشكل التالي: $ ruby app.rbالآن سيتم إعادة تخصيص التطبيق بعد كل تغيير من خلال: $ rerun 'ruby app.rb'
  12. sinatra من أطر العمل التي لا تلقى إقبالاً كبيراً في العالم العربي مع الأسف، لكن كمثيلتها Rails المبرمجة بلغة روبي، حيث يمكننا تشغيل التطبيق المبرمج بـ sinatra عن طريق الأمر التالي: thin -R config.ru start # قبل إنشاء المشروع ننفذ الأمر التالي monk add riblits git://github.com/Phrogz/riblits.git #داخل الملف الفارغ المنشأ monk init -s riblitsملف الواجهة: config.ru app.rb helpers/ init.rb partials.rb models/ init.rb user.rb routes/ init.rb login.rb main.rb views/ layout.haml login.haml main.hamlconfig.ru: root = ::File.dirname(__FILE__) require ::File.join( root, 'app' ) run MyApp.newapp.rb: # encoding: utf-8 require 'sinatra' require 'haml' class MyApp < Sinatra::Application enable :sessions configure :production do set :haml, { :ugly=>true } set :clean_trace, true end configure :development do # ... end helpers do include Rack::Utils alias_method :h, :escape_html end end require_relative 'models/init' require_relative 'helpers/init' require_relative 'routes/init' helpers/init.rb: # encoding: utf-8 require_relative 'partials' MyApp.helpers PartialPartials require_relative 'nicebytes' MyApp.helpers NiceByteshelpers/partials.rb: # encoding: utf-8 module PartialPartials def spoof_request(uri,env_modifications={}) call(env.merge("PATH_INFO" => uri).merge(env_modifications)).last.join end def partial( page, variables={} ) haml page, {layout:false}, variables end endhelpers/nicebytes.rb: # encoding: utf-8 module NiceBytes K = 2.0**10 M = 2.0**20 G = 2.0**30 T = 2.0**40 def nice_bytes( bytes, max_digits=3 ) value, suffix, precision = case bytes when 0...K [ bytes, 'B', 0 ] else value, suffix = case bytes when K...M then [ bytes / K, 'kiB' ] when M...G then [ bytes / M, 'MiB' ] when G...T then [ bytes / G, 'GiB' ] else [ bytes / T, 'TiB' ] end used_digits = case value when 0...10 then 1 when 10...100 then 2 when 100...1000 then 3 else 4 end leftover_digits = max_digits - used_digits [ value, suffix, leftover_digits > 0 ? leftover_digits : 0 ] end "%.#{precision}f#{suffix}" % value end module_function :nice_bytes # Allow NiceBytes.nice_bytes outside of Sinatra endmodels/init.rb: # encoding: utf-8 require 'sequel' DB = Sequel.postgres 'dbname', user:'bduser', password:'dbpass', host:'localhost' DB << "SET CLIENT_ENCODING TO 'UTF8';" require_relative 'users'models/user.rb: # encoding: utf-8 class User < Sequel::Model # ... endroutes/init.rb: # encoding: utf-8 require_relative 'login' require_relative 'main'routes/login.rb: # encoding: utf-8 class MyApp < Sinatra::Application get "/login" do @title = "Login" haml :login end post "/login" do # Define your own check_login if user = check_login session[ :user ] = user.pk redirect '/' else redirect '/login' end end get "/logout" do session[:user] = session[:pass] = nil redirect '/' end end routes/main.rb: # encoding: utf-8 class MyApp < Sinatra::Application get "/" do @title = "Welcome to MyApp" haml :main end endviews/layout.haml: !!! XML !!! 1.1 %html(xmlns="http://www.w3.org/1999/xhtml") %head %title= @title %link(rel="icon" type="image/png" href="/favicon.png") %meta(http-equiv="X-UA-Compatible" content="IE=8") %meta(http-equiv="Content-Script-Type" content="text/javascript" ) %meta(http-equiv="Content-Style-Type" content="text/css" ) %meta(http-equiv="Content-Type" content="text/html; charset=utf-8" ) %meta(http-equiv="expires" content="0" ) %meta(name="author" content="MeWho") %body{id:@action} %h1= @title #content= yield
  13. أولا عليك بكتابة كود صفحةjsp على الشكل: <!DOCTYPE html> <html lang="en"> <head> <title>SO question 4112686</title> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> $(document).on("click", "#somebutton", function() { // When HTML DOM "click" event is invoked on element with ID "somebutton", execute the following function... $.get("someservlet", function(responseText) { // Execute Ajax GET request on URL of "someservlet" and execute the following function with Ajax response text... $("#somediv").text(responseText); // Locate HTML DOM element with ID "somediv" and set its text content with the response text. }); }); </script> </head> <body> <button id="somebutton">press here</button> <div id="somediv"></div> </body> </html>ثم servlet باسم doGet: @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String text = "some text"; response.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect. response.setCharacterEncoding("UTF-8"); // You want world domination, huh? response.getWriter().write(text); // Write response body. }الآن نضيف اسم servlet إلى ملف الخريطة map للموقع: <servlet> <servlet-name>someservlet</servlet-name> <servlet-class>com.example.SomeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>someservlet</servlet-name> <url-pattern>/someservlet/*</url-pattern> </servlet-mapping>سنغير في كود servlet وذلك باضافة كود ajax: @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String foo = request.getParameter("foo"); String bar = request.getParameter("bar"); String baz = request.getParameter("baz"); boolean ajax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); if (ajax) { // Handle ajax (JSON) response. } else { // Handle regular (JSP) response. } }
  14. إليك هذا المثال في الرابط، ثم سأقدم لك المتال التالي: ملف التنسيق:a.selected { background-color:#1F75CC; color:white; z-index:100; } .messagepop { background-color:#FFFFFF; border:1px solid #999999; cursor:default; display:none; margin-top: 15px; position:absolute; text-align:left; width:394px; z-index:50; padding: 25px 25px 20px; } label { display: block; margin-bottom: 3px; padding-left: 15px; text-indent: -15px; } .messagepop p, .messagepop.div { border-bottom: 1px solid #EFEFEF; margin: 8px 0; padding-bottom: 8px; }ملف javascript مع الاستعانة بمكتبة Jquery:function deselect(e) { $('.pop').slideFadeToggle(function() { e.removeClass('selected'); }); } $(function() { $('#contact').on('click', function() { if($(this).hasClass('selected')) { deselect($(this)); } else { $(this).addClass('selected'); $('.pop').slideFadeToggle(); } return false; }); $('.close').on('click', function() { deselect($('#contact')); return false; }); }); $.fn.slideFadeToggle = function(easing, callback) { return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback); }; And finally the html: <div class="messagepop pop"> <form method="post" id="new_message" action="/messages"> <p><label for="email">Your email or name</label><input type="text" size="30" name="email" id="email" /></p> <p><label for="body">Message</label><textarea rows="6" name="body" id="body" cols="35"></textarea></p> <p><input type="submit" value="Send Message" name="commit" id="message_submit"/> or <a class="close" href="/">Cancel</a></p> </form> </div> <a href="/contact" id="contact">Contact Us</a>رابط إظهار النافذة تامنبثقة:<div> <div class="messagepop pop"></div> <a href="/contact" id="contact">Contact Us</a> </div> كود إظهار النافذة عن طريق jquery:$("#contact").on('click', function() { if($(this).hasClass("selected")) { deselect(); } else { $(this).addClass("selected"); $.get(this.href, function(data) { $(".pop").html(data).slideFadeToggle(function() { $("input[type=text]:first").focus(); }); } } return false; });
  15. نعم يمكنك فعل ذلك دون اللجوء إلى jquery، وذلك باستخدام vanilla script بالشكل التالي: <script type="text/javascript"> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE ) { if(xmlhttp.status == 200){ document.getElementById("myDiv").innerHTML = xmlhttp.responseText; } else if(xmlhttp.status == 400) { alert('There was an error 400') } else { alert('something else other than 200 was returned') } } } xmlhttp.open("GET", "ajax_info.txt", true); xmlhttp.send(); } </script>أما الطريقة الاعتيادية فهي باستخدام jquery: $.ajax({ url: "test.html", context: document.body, success: function(){ $(this).addClass("done"); } }); وهذه بعض المقارنات بين jquery و vanila: Events:// jQuery $(document).ready(function() { // code }) // Vanilla document.addEventListener('DOMContentLoaded', function() { // code }) // jQuery $('a').click(function() { // code… }) // Vanilla [].forEach.call(document.querySelectorAll('a'), function(el) { el.addEventListener('click', function() { // code… }) }) Selector:// jQuery var divs = $('div') // Vanilla var divs = document.querySelectorAll('div') // jQuery var newDiv = $('<div/>') // Vanilla var newDiv = document.createElement('div') A Guide to Vanilla Ajax Without jQuery
  16. أولا، علينا معرفة أن الحقول والوسوم بشكل عام على صفحات html يمكن تعريفها وإعطائها قيم ليتم التعرُف عليها من خلال css أو Jquery، حتى نتمكن من الوصول إليها وجلب محتواها، تغيره، تغير خصائص الحقل... وهذا التعريف يكون إما بـ Id الذي لا يجب أن يتكرر عند وسمين مثل "id="myTextforName أوclass التي عادة ما نعطيها لمجموعة من الوسوم لها نفس التنسيق "class="post. مثال على ملف html: <html> <head> <title>id - class مثال توضيحي لـ</title> </head> <body> <!-- class لاحظ الخاصية --> <div><div class="ads-in-post hide_if_width_less_800"> </div></div><h2>TextBox value : <label id="msg"></label></h2> <div style="padding:16px;"> TextBox : <input type="textbox" value="Type something"></input> </div> <!-- idلاحظ الخاصية --><input type="texte id="txtname" > <button id="Get">Get TextBox Value</button> <button id="Set">Set To "ABC"</button> <button id="Reset">Reset It</button> </body> </html>ويمكننا الوصول للحقل المقصود من خلال Id الخاص به أو class، وذلك من خلال كود الجافسكريبت التالي: var myInput =document.getElementById('txtname').value; // الآن قيمة الحقل مخزنة في المتغير، يمكننا استعمالها حسب الحاجة alert(myInput);
  17. بالنسبة لتغيير model/tabel فقط عليك بالأمر التالي: ./manage.py schemamigration yourapp rename_foo_to_bar --empty وفي حال كنت تستعمل نسخة قديمة، استبدل startmigration عوضschemamigration. ليكون التغيير اليدوي للكود بالشكل التالي: class Migration(SchemaMigration): def forwards(self, orm): db.rename_table('yourapp_foo', 'yourapp_bar') def backwards(self, orm): db.rename_table('yourapp_bar','yourapp_foo') يمكنك إنجاز هذه العملية -تغيير الاسم- باستخدام db_table من Model الخاصة بالجدول، لكن في كل مرة تفعل ذلك سيبقى مشكل الاحتفاظ بالاسم القديم في بعد مواضع الموقع، لذا تستحب الطريقة الأولى لتفادي أي مشكل. مما يدعو إلى ظهور هذه الرسالة : The following content types are stale and need to be deleted: yourapp | foo Any objects related to these content types by a foreign key will also be deleted. Are you sure you want to delete these content types? If you're unsure, answer 'no'.
  18. أولا لنجعل القائمة داخل مصفوفات، بهذا الشكل: <?php $menu_name = 'main_nav'; $locations = get_nav_menu_locations(); $menu = wp_get_nav_menu_object( $locations[ $menu_name ] ); $menuitems = wp_get_nav_menu_items( $menu->term_id, array( 'order' => 'DESC' ) ); ?>لتصفح القوائم عن طريق حلقات التكرار وإظهارها في كود داخل وسم <nav>: <nav> <ul class="main-nav"> <?php $count = 0; $submenu = false; foreach( $menuitems as $item ): // set up title and url $title = $item->title; $link = $item->url; // item does not have a parent so menu_item_parent equals 0 (false) if ( !$item->menu_item_parent ): // save this id for later comparison with sub-menu items $parent_id = $item->ID; ?>كتابة أول عنصر بداخل وسم <li>: <li class="item"> <a href="<?php echo $link; ?>" class="title"> <?php echo $title; ?> </a> <?php endif; ?>التأكّد من أن العنصر يقع داخل القائمة الأم: <?php if ( $parent_id == $item->menu_item_parent ): ?>القوائم الفرعية: <?php if ( !$submenu ): $submenu = true; ?> <ul class="sub-menu"> <?php endif; ?>كتابة القوائم الفرعية: <li class="item"> <a href="<?php echo $link; ?>" class="title"><?php echo $title; ?></a> </li>القائمة التالية لا يجب أن تتوفر على نفس parent_id: <?php if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id && $submenu ): ?> </ul> <?php $submenu = false; endif; ?> <?php endif; ?>في حالة كان للقائمة parent_id مختلف نغلق وسم <li>: <?php if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id ): ?> </li> <?php $submenu = false; endif; ?> <?php $count++; endforeach; ?> </ul> </nav>wp_custom_nav
  19. للتأكد من أن المستخدم الحالي للموقع هو الأدمن، فقط بسطر واحد يمكننا فعل ذلك: if(is_admin()) { /* *يمكنك إنجاز الأمر أو الأوامر البرمجية هنا في حالة كان المستخدم يملك صفة أدمن الموقع */ }كما يمكنك التأكد من أن المستخدم قد ولج إلى الموقع عن طريق login او هو مستخدم زائر فقط: <?php $current_user = wp_get_current_user(); if ( 0 == $current_user->ID ) { // مستخدم زائر غير مسجل على الموقع } else { // login مستخدم مسجل على الموقع، ولجه عن طريق } ?>User is Adminwp get current user
  20. هذه الدالة من شأنها مساعدتك: function admin_default_page() { return '/new-dashboard-url'; } add_filter('login_redirect', 'admin_default_page');بينما يمكنك التأكد من صلاحيات المستخدم وتتم إحالته للصفحة المناسبة حسب ما تمكّنه صلاحياته، بهذا الشكل: <?php /** *هذه الدالة تحيل المستخد بعد عملية الولوج إلى صفحة معينة حسب صلاحياته */ function my_login_redirect( $url, $request, $user ){ if( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) { if( $user->has_cap( 'administrator' ) ) { $url = admin_url(); } else { $url = home_url('/members-only/'); } } return $url; } add_filter('login_redirect', 'my_login_redirect', 10, 3 );كما يمكن الاعتماد على custom user meta لتحديد وجهة المستخدم: <?php function my_login_redirect( $url, $request, $user ){ if( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) { if( 'cool' == get_user_meta( $user->ID, '_is_cool', true ) ) { $url = home_url('/cool-people-only/'); } } return $url; } add_filter('login_redirect', 'my_login_redirect', 10, 3 );
  21. نعم يوجد اختلاف بين حلقتي التكرار، فـ For loop تعتمد بشكل أساس على وجود عداد يتم في كل حلقة أخذ قيمة، سواء بشكل تصاعدي أو تنازلي، مثلاً: for (int x = 0; x < 100; x++) { //سيتكرر هذا الأمر مئة مرة // سيأخذ جميع القيم من 0 إلى 99xأي أن المتغير // عند القيمة 99 سينفذ الكود الموجود داخل الحلقة ثم تنتهي حلقة التكرار هاته }في حين أن حلقة while Loop رهينة بتحقق شرط معين، ولا يمكن أن تتكرر إلا حين تحقق هذا الشرط -أو تتحقق مرة واحدة فقط-،وهي تكتب على شكل كتابتين، مثال: الكتابة الأولى:int count = 0; while (count < 100) { //count<100 لتتكرر الحلقة يجب تحقق الشرط أعلاه // count ثم تضاف قيمة إلى العداد count++; }الكتابة الثانية:int count=0; do { //تنجز حلقة مرة ثم يتم التحقق من الشرط بعد ذلك count+; } while (count<100); والفرق بين نوعي while واضح، حيث أن النوع الأول يستلزم بالأساس تحقق الشرط للدخول للحلقة، في حين أن النوع الثاني تنجز الحلقة الأولى ليتبعها التحقق من الشرط. والفرق بين for و while هو أن لكل منهما استعمالاته الخاصة، حيث أن for غالبا تستعمل في حال كانت قيمة العداد معروفة ونهائية، أما while تستعمل في الحالات التي يكون العداد غير محدد ويصعب تحديد مكان توقفه. *ملاحظة: الأمثلة السابقة بلغة C. Loops
  22. html5 توفرإمكانية رفع الملفات باستخدام تقنية Ajax ومكتبة Jquery، بل وأكثر من هذا تُمكن من تحديد معاير الملف (name,size...). كود html: <form enctype="multipart/form-data"> <input name="file" type="file" /> <input type="button" value="Upload" /> </form> <progress></progress>يمكن التأكد من نوع الملف وخصائصه عن طريق ملف javascript: $(':file').change(function(){ var file = this.files[0]; var name = file.name; var size = file.size; var type = file.type; //تأكد من خصائص لملف، حسب المعايير التي تريده });تقنية Ajax لإرسال الملف: $(':button').click(function(){ var formData = new FormData($('form')[0]); $.ajax({ url: 'upload.php', //رابط ملف رفع الملف type: 'POST', xhr: function() { // XMLHttpRequest var myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ // التأكد من وجود خاصية رفع الملفات myXhr.upload.addEventListener('progress',progressHandlingFunction, false); } return myXhr; }, //Ajax beforeSend: beforeSendHandler, success: completeHandler, error: errorHandler, // dataالبيانات data: formData, // في حالة عدم نجاح عملية الرفع cache: false, contentType: false, processData: false }); });التأكد من تقدم رفع الملف حتى الانتهاء: function progressHandlingFunction(e){ if(e.lengthComputable){ $('progress').attr({value:e.loaded,max:e.total}); } }
  23. جرّب هذا الكود، حيث في أول الأمر سنكتب الدالة الخاصة بملء القائمة المنسدلة: private List<string> _MyComboBoxData; public List<string> MyComboBoxData { //جلب العناصر من مصفوفة get { return _MyComboBoxData; } //إدخال القيم للمصفوفة set { _MyComboBoxData = value; OnPropertyChanged(() => MyComboBoxData); } }ثم نجلب البيانات من القاعدة -قاعدة البيانات-، ونضيفها للقائمة المنسدلة بالشكل التالي: ConDb.Open(); OleDbCommand DBSelect = new System.Data.OleDb.OleDbCommand("select FName, LName,ID_NAME from NameList", ConDb); // جلب البيانات OleDbDataReader reader = DBSelect.ExecuteReader(); // قراءة البيانات while (reader.Read()) { string eNAME = ""; eID = reader["ID_NAME"].ToString(); eNAME += reader["FName"].ToString(); eNAME += " " + reader["LName"].ToString(); // إضافة المعلومات المستخرجة من قاعدة البيانات إلى القامة المنسدلة MyComboBoxData.Add(eNAME); }
  24. بالنسبة لـ SystemAltHighColorBrush لا يستعمل لتغيير اللون على Windows10، لكن يمكنك استعمال موارد النظام من خلال الرابط: C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10240.0\Generic\generic.xamlفي حال كنت تريد تغيير لون خلفية الصفحة، عليك بتغيير ApplicationPageBackgroundThemeBrush بهذا الشكل: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">ومن موارد التطبيق على ملف Xaml يمكنك تغيير لون الخلفية (11cc11#) من خلال الخاصية color : <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <Color x:Key="SystemAltHighColor">#11CC11</Color> <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="{ThemeResource SystemAltHighColor}" /> </ResourceDictionary> <ResourceDictionary x:Key="Dark"> <Color x:Key="SystemAltHighColor">#11CC11</Color> <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="{ThemeResource SystemAltHighColor}" /> </ResourceDictionary> </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Application.Resources>
  25. استعمل dispatchertimer بهذا الشكل: public MainWindow() { InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 20); timer.Start(); timer.Tick += timer_Tick; } void timer_Tick(object sender, EventArgs e) {//RandomHRValue تنظم الوقت بشكل منتظم وتستدعي دالةtimer_Tickدالة DataGenerator dg = new DataGenerator(); a.Text = dg.RandomHRValue().ToString(); }ثم دالة RandomHRValue التي تعيد لنا القيم العددية: public int RandomHRValue() {// توليد قيم عددية بين 0و100 Random random = new Random(); int RandomNumber = random.Next(0, 100); //return إعادة الرقم المولّد عن طريق return RandomNumber; }
×
×
  • أضف...