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

E.Nourddine

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

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

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

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

    18

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

  1. فقط عليك بإضافة بعض الكود إلى ملف التنسيق، وخاصة الجزء المتعلق بـ Header، وتحقق من أنّ رابك الصورة مكتوب بشكل صحيح: #header{ background-image: url("https://www.gravatar.com/avatar/8bb98c95963486c35af93203a53f4c98?s=32&d=identicon&r=PG&f=1"); background-position: 50% 0; background-size:cover; font-size:2em; color:#fff; } <!DOCTYPE html> <html> <head> <title>Index</title> <link rel="stylesheet" type="text/css" href="mycss.css"> </head> <body> <div id="header">Hello</div> </body> </html>
  2. للعلم فزر "next" في هذه الحالة يأخذ منطقا مغايراً عن ذلك المنطق الافتراضي في html5، حيث يعتمد بشكل أساسي على كود javascript، هذا المثال التوضيحي من شأنه أن يُوضّح وظيفة next button: var getTrack = function( val ){ var obj = TRACKS; var track = obj.filter(function( obj ) { return obj.id == val; }); return track[0]; } var playlist = []; var TRACKS = [{ id: 0, name: 'music 1', src: 'path/to/file.mp3', icon: 'path/to/icon;jpg', foo: 'bar' },{ id: 1, name: 'music 2', src: 'path/to/file.mp3', icon: 'path/to/icon;jpg', foo: 'bar' }]; playlist = [1, 2]; var player = function(){ var currentPlaying = false; var playlistPos = false; var playlist = false; var trackList = false; this.setPlaylist = function( p ){ playlist = p; playlistPos = 0; setTrack(trackList[0], 0); return this; } this.setTrackList = function( t ){ trackList = t; return this; } this.setTrack = function( obj, i ){ currentPlaying = obj; playlistPos = i; audio.src = obj.src; audio.load(); return this; } this.play = function( obj ){ audio.play(); return this; } this.stop = function(){ audio.pause(); audio.currentTime = 0; return this; } this.pause = function(){ audio.pause(); } //هذه الدال هي ضالتك، الدالة المسؤولة عن المرور للقطعة التالية this.next = function(){ if(playlist && currentPlaying){ var next = (playlist[playlistPos++]) ? playlistPos++ : 0; setTrack(trackList[next], next); } return this; } } //Initialize إنشاء القارئ PLAYER = new player(); PLAYER.setTrackList(TRACK).setPlaylist(playlist).play();بعد ذلك يمكنك استعمال الحدث التالي لبدء التشغيل وأيضا الحدث الثاني للمرور للقطعة التالية، بهذا الشكل: PLAYER.next(); //or even $('.next').on('click', PLAYER.next);كما يمكنك استعمال هذا القارئ الموجود على Github : الرابط
  3. الطريقة المُتبعة ستبدو لك سهلة إن كنت ملماً بأساسيات التصميم على برنامج photoshop، وإليك الطريقة : أنشيء طبقة فوق طبقة صورة الكأس، وارسم في الطبقة شكل مستطيل كما هو مبيّن: عن طريق الأمر Ctrl+T سيظهر لك الشكل قابل للتغير في حجمه، قم بالضغط على الشكل بزر الفأرة الأيمن واختر الاختيارل Wrap: ثم عدّل على الشكل حتى يتوافق مع بنية الكأس، كما في الصورة: اختر الصورة التي تريد وضعها على الكأس: ثم باستعماا تقنية smart object، اجعل الصورة في حدود الشكل المُعدّل سابقاً: بنفس الطريقة تحصل على أنماط وأشكال عدة:
  4. تغيير اللون من الأشياء المطلوبة في تصاميم التلاعب بالصور، اتبع الخطوات التالية : أضف للمشروع طبقة بيضاء اللون، حيث يأتي ترتيبها في الأعلى أي فوق الصورة.غيّر من لون الطبقة عن طريق لوحة الألوان واختر اللون الذي تريده.بأداة الطلاء املأ الطبقة باللون المحدد سابقا.غيّر من خصائص الدمج 'blend mode 'الخاصة بالطبقة نحو القيمة Color.وبهذه الطريقة سيتغير اللون في الصورة حسب اللون المُختار، هكذا: عند تغيير اللون المستعمل في الطلاء يتغير الناتج، لتحصل على ألوان أخرى :
  5. خاصية TabIndex للعلم فقط تمكن مستخدم التطبيق من المرور على الصور - باقي الحقول أيضا تقبل هذه الخاصية- واحدة تلو الأخرى بزر Tab ويبقى الرقم الذي يُحدد في هذه الخاصية هو الرقم الترتيبي للحقول. في Visual Studio على الجانب الأيمن للبرنامج وعند تعيين أي حقل ستجد خاصية TabIndex ضمن الخصائص المتعلقة بالأداة، كما يمكن أيضا الولوج لها عبر الكود التالي: فرضاً أن هذه هي الصورة: <Image Name="img" Source="images/pineapple.jpg" /> يمكنك تعيين خاصية TabIndex بواسطة: KeyboardNavigation.SetTabIndex(img, 5); أو بكود xaml: <Image Name="img" Source="images/pineapple.jpg" KeyboardNavigation.TabIndex="1"/>
  6. عليك بتغيير السطر التالي : ft[i] = Convert.ToInt32(Console.ReadLine())بهذه الشفرة : string input = Console.ReadLine(); if (input == "*") break; int number; if (!int.TryParse(input, out number)) { Console.WriteLine("not a number"); } else { ft[i] = number; }ليصبح الكود الصحيح، على الشكل التالي: static void Main(string[] args) { // array int[] ft = new int[2]; for (int i = 0; i < 2; i++) { Console.WriteLine("number:"); string input = Console.ReadLine(); if (input == "*") // عليك التأكد من أن المستخدم لم يضغط على "*" لإنهاء التطبيق break; // الخروج من الحلقة; int number; if (!int.TryParse(input, out number)) // التحقق من المدخلات { Console.WriteLine("not a number"); // إظهار رسالة تفيد بأنه أدخر قيمة غير رقمية; } else { ft[i] = number; } } Console.Read(); }
  7. يمكنك فعل ذلك، وإليك الطريقة الصحيحة لتمرير قيمة من واجهة فرعية إلى Master ثم إلى جزء header: هذا جزء Users.blade.php : <?php $pagecss = '<link rel="stylesheet" href="links to css file" />'?> /****** Users.blade.php واجهة*********/ @extends('shared.master') @section('title', 'Dashboard')هذه صفحة Master، وللتذكير فقط فهذه الصفحة تعتبر بمثابة الهيكل العام لباقي الصفحات، حيث تعتبر المجمع الرئيسي لها: /******Shared/master.blade.php صفحة ********/ <html> <head> <title>@yield('title')</title> @include('shared.header') </head> <body > @yield('content') </body> </html>صفحة header.blade.php، وهو الجزء العلوي من كل الصفحات: /******Shared/header.blade.php جزء ********/ <link rel="stylesheet" href="links to bootstrap" /> @if(isset($pagecss)) {{ $pagecss }} @endif <link rel="stylesheet" href="links to other files" />هذا هو Master في حالتك: <html> <head> @include('test.header') </head> <body > @yield('content') </body> </html>header.blade.php : <link rel="stylesheet" href="links to bootstrap" /> @yield('pagecss') <link rel="stylesheet" href="links to other files" />users.blade.php : @extends('test.main') @section('content') CONTENT @endsection @section('pagecss') <link rel="stylesheet" href="links to css file" /> @endsectionفي نهاية الأمر سيكون الحاصل النهائي على الشكل التالي: <html> <head> <link rel="stylesheet" href="links to bootstrap" /> <link rel="stylesheet" href="links to css file" /> <link rel="stylesheet" href="links to other files" /> </head> <body > CONTENT </body> </html>
  8. من الأمور التي يعتمدها إطار العمل laravel توافق طرق إرسال http request مع المسارات routes المعيّنة في الملف الخاص بها، فمثلا في حالتك هذه أنت لا ترسل request Delete عن طريق استعمال الوسم <a>، بل يتوجب استعمل form وتضمين طريقة delete عند إرسال المعلومات حتى يتمكّن المسار من نقل الأمر إلى المتحكم Controller، وبطريقة أخرى الكود يجب أن يكون بالشكل التالي: <form method="POST" action="{{ url('cats/'.$cat->id.'/delete') }}"> {{ csrf_field() }} <input type="hidden" name="_method" value="DELETE"> <span class="glyphicon glyphicon-trash"></span> <button type="submit">Delete</button> </form>وللعلم فقط فـ استمارة form تدعم فقط POST و GET، بينما PUT وDELETE يمكن توظيفها بإضافة حقل ومخفي شرطَ أن يحمل اسم الوظيفة كما هو الشأن في المثال السابق: <input type="hidden" name="_method" value="DELETE">
  9. المشكل الأساسي هنا هو أن apach لا يتعرف على VirtualHost الجديد، بمعنى آخر يتوجب عليك إضافة مسار موقعك على الحاسوب ضمن لائحة virtualhosts، وذلك بتحرير ملف http.conf بهذا الشكل: # Your great site! <Directory "/Applications/XAMPP/xamppfiles/htdocs/wd"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory>الآن يمكنك الولوج إلى رابط الموقع على السيرفر المحلي دون تكرار خطأ الانتقال إلى XAMPP ، لكن من الممكن أن يحدث خطأ أثناء قراءة ملف index الخاص بالموقع وذلك بسبب عدم وجود الصلاحيات الكافية لقراءته، أي أنه محمي من القراء والكتابة، حينئذ عليك بالأمر التالي: RewriteEngine On RewriteBase / RewriteRule ^.*$ public/index.php [NC,L]
  10. حقيقة الأمر لا يمكنك استعمال متغيرات Blade في ملف javascript مستقل عنه، لأن laravel وكباقي أطر العمل يمكّن المبرمج من تمرير البيانات إلى view/template ، أما ملفات Javascript الخارجية لا تتدخل في ذلك، لكن يمكنك استخدام <script> فهذا الوسم يضع لك إمكانية إدراج سكريبت javascript في ملف الواجهة وبالتالي يمكن استعمال مختلف المتغيرات الموجودة فيview، هكذا: {{-- هذا الكود مدرج ضمن ملف الواجهة., view.blade.php --}} <script type="text/javascript"> var locations = [ @foreach ($articles as $article) [ "{{ $article->lat }}", "{{ $article->lng }}" ], @endforeach ]; </script>وعادة ما يوضع هذا الوسم في بداية الملف حتى يأخذ بعين الاعتبار ما سيأتي بعده من شفرة برمجية، وأيضا يمكن وضع آخر وسم body.
  11. جرّب الدالة Redirect: $this->redirect(Yii::app()->homeUrl); وإذا كنت تريد الانتقال للصفحة الرئيسية home page:$this->redirect("site/index"); أو:$this->owner->redirect(array("site/index")); المصدر
  12. يمكنك فعل هذا الأمر بالاستعانة بالدوال الحسابية -Arithmetic Operators -على لغة php ، $object = '<div class="row">'; // حلقات التكرار لإنشاء الجداول foreach($tables as $table): if($table['avail'] == 0) { $newObject = '<div class="col-sm-4"><div class="table full"><p> 0 seats are avaiable.</p></div></div>'; } else { $newObject = '<div class="col-sm-4"><div id="table_'. $table['id'] .'" class="table"><p>' . $table['avail'] . ' seats are avaiable.</p></div></div>'; } $i++;//انشاء متغير العداد if($i % 3 === 0) { // في حالة وصول العداد إلى 3 $newObject = $newObject . '</div><div class="row">'; } $object .= $newObject; endforeach; $object .= '</div>';
  13. سنستعمل دالة : explodeوالتي من شأنها أن تجعل من القيمة النصية للحقل، مصفوفة وذلك بإزالة الفواصل، ثم المرور على قيم المصفوفتين - لأن لدينا حقلين إثنين أي سينتج عنها مصفوفتين-، بواسطة حلقتي تكرار لكل منها مع إنجاز العمليات المذكورة في سؤالك، بهذا الشكل: $sum=0; $question=array(); $first=explode(',',$_POST['first']); $second=explode(',',$_POST['second']); for( $i=0; $i < count( $first ); $i++ ){ $row=array(); $tmp=array(); for( $j=0; $j < count( $second ); $j++ ){ $tmp[]='( '.$first[ $i ]. ' x '. $second[ $j ].' )'; $row[]=$first[ $i ] * $second[ $j ]; } $sum+=array_sum( $row ); $question[]=implode( ' + ', $tmp ); } echo 'The question is: [ ' . implode( ' ] + [ ', $question ).' ]<br />'; echo 'Total: '.$sum; على أن يتم إظهار القيمة المحصول عليها في متغير sum$ آخر الكود.
  14. تختلف الدالتين عن بعضها البعض، لكن للعلم فدالة: Auth::check()تقوم باستدعاء دالة: Auth::user()وتستعملها للتأكد من وجود المستخدم -User-،حيث أن Auth::check تُعيد لنا متغير من نوع boolean أي أنه يقبل إحدى القيمتين False أو True، وفي حالة Null فالمستخدم غير موجود - أي أنه لا يمتلك حساب على النظام -، وكما تبيّن الدالة check في الكود التالي: public function check() { return ! is_null($this->user()); }فهي تستعين بـ كلاس User للتأكد من وجود المستخدم.
  15. نعم، يمكن فعل ذلك، وذلك باستعمال الدالة case when والتي من شأنها التأكد من شرط معيّن، أو المرور على عدة شروط مرفقة بكود برمجي يفعّل إذا تحقق الشرط، وللتوضيح، أرفق هذا المثال للاستئناس به: CREATE FUNCTION myFunction(delivery_day INT(1),preferred INT(1)) RETURNS INT(2) BEGIN DECLARE shipping_cost INT(2) DEFAULT 0; CASE WHEN preferred = 1 THEN SET shipping_cost = 2; WHEN delivery_day = 1 THEN SET shipping_cost = 20; WHEN delivery_day = 2 THEN SET shipping_cost = 15; WHEN delivery_day = 3 THEN SET shipping_cost = 10; ELSE SET shipping_cost = 5; END CASE; RETURN shipping_cost; ENDحيث سيأخذ المتغير shipping_cost قيمة حسب الشرط case when. أما في حالة جملة الاستعلام الخاصة بك، ستكون على الشكل التالي: UPDATE personal SET name=?, gender=?, telp=?, address=?, date_deadline = case when ? is null then date_deadline else ? end WHERE id_personal = ? $stmt->bind_param('sssssss', $nm, $gd, $tl, $ar, $dt, $dt, $id);لاحظ : date_deadline = case when ? is null أي التحقق من أن المتغير date_deadline يحمل القيمة null، عندها سيتم تجاوز تغيير قيمته أثناء Update، ولن يتم تغييره. CASE When Syntax
  16. بعض الأمثلة : كما هو مبيّن في الأمثلة السابقة الحل الوحيد لاختيار المستخدم حلاً واحداً من بين عدّة اختيارات هو استعمال الوسم Select، والذي يمكنني كمبرمج من إدراج أي عدد من القيم التي أريد إظهارها، على أن يتمكن المستخدم من تعيين اختيار واحد فقط لا أكثر، مع تحديد قيمة افتراضية للوسم في حالة نسيان المستخدم أو تجاهله الاختيار. وهذا كود Html للوسم المذكور: <select> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select>حيث option تمثل وسم كل اختيار. HTML <select> Tag
  17. الشكل ككل لا بأس به، فقط بعض الملاحظات الضرورية في تجربة المستخدم والتي من شأنها تحسين منظر الحقول، وجعلها أفضل عند استعمال المستخدم لها، وأهم هذه الملاحظات اللون العام للجدول، أرى من الأفضل إرجاع الألوان إلى القيمة الافتراضية مع تغيير لون الحقل أثناء توفره على مؤشر الفأرةـ أي أثناء تحريره، حتى يتمكن المستخدم من معرفة الحقل المُحَرّر ولا يتيه في ازدحام الحقول، لأن الحقول كثيرة في حالتك هاته - وهذا ليس بالمشكل، فقط حتى يكون المستخدم أكثر تركيزا- وأقترح هذه الصورة للتوضيح: لاحظ الفرق قبل وبعد، تبدو الحقول أكثر وضوحاً من ذي قبل. وفي حالة كانت الحقول أقل من العدد السابق يمكنك الاستعانة بهذا التصميم:
  18. في أغلب المواقع التي تستعمل هذه الخاصية، أي خاصة التواصل مع الدعم الفني أو المحادثة الفورية، تضعها في أسفل الصفحة، وهذا الاختيار لم يأتي عشوائيا، حيث أن رأس الصفحة مخصص للشعار ومختلف أقسام الموقع، وقد جرت العادة أن نجد روابط الاتصال بالموقع وعناوين الشركة وكل المعلومات التي من شأنها أن تفيدنا بالاتصال بهم أسفلَ الصفحة، لذا أرى من الجيد اتباع ما اعتاد الناس عليه، حتى يسهل العثور على الزر. من جهة أخرى لا بأس من إدراج الزر في جميع الصفحات، شرط أن يكون في أسفل الصفحة، حتى لا يضايق باقي المستخدمين للموقع، أي أولئك الذين هم في غنىً عن استعماله مرحليا. بعض الصور التي تعزز فكرة وضع الزر أسفل الصفحة:
  19. الأمر ببساطة متعلق بطريقة إظهارك للوقت، أي أن ترفق الوقت مع مؤشر للمساء أو الصباح، AM أو PM، كهذه الصورة التي من الممكن تطوير شكل عرضها وجعلها أفضل، ولكن لتأخذ صورة حول ما أريد قوله: على أن تكون الدائرتين من نوع حقل radiobutton تتيح للمستخدم اختيار أحد الاختيارين. في الأخير فأنا أميل لاستعمال التوقيت ذو الشكل 00:00 نظراً لانتشاره واعتماده بشكل عالمي، وفي حين كنت مصرًا على AM و PM يبقى حل RadioButton هو الحل الأمثل في هذه الحالة.
  20. على برنامج Illustrator يمكنك التحكم في الزوايا الخارجية للشكل عن طريق نافذة Stroke من خلال القائمة : Window > Stroke أو: حيث يمكنك التحكم في كل جزئية من الزوايا الخارجية للشكل. كما يمكنك الوصول لنافذة Art Brush Options لاستعمال فرش وأشكال مختلفة . يمكن التوسع في الموضوع عبر : رابط فيديو
  21. قم بنسخ المستطيل وضع الشكل الثاني المُحصل عليه فوق المستطيل الأول. وبعد ذلك غيّر من حجم المستطيل الثاني قليلا -قم بتصغيره-. وغير من زواياه الخارجية لتأخذ الشكل الدائري. أعط للمستطيل الصغير اللون الفاتح، من بين اللون المتدرج الذي تريد. حدد الشكلين معًا، ثم ثم بدمجهما، من القائم Object > Blend ...>Make ستلاحظ ظهور تدرج اللون نحو الأمام. وفي حالة لم تحصل على تدرج لون أملس، يمكنك تغيير خصائصه من القائمة : Obkect > Blend ... >Blend Options اختر Smooth ِColor واضغط OK.
  22. لإنشاء طبقة تتميز بـ Grayscale على برنامج Photoshop، اتبع الخطوات التالية: من القائمة:Layer > Duplicate Layer > Hue/Saturation > DeSat ثم :Layer > Duplicate Layer > New Adjustment Layer > Hue/Saturation > DeSat > Merge Layer ولتخصيص وضبط المعايير أكثر -حسب الرغبة-:Layer > New Adjustment Layer > Black & White وبهذا الشكل تكون قد حصلت على طبقة بنمط grayscale على photoshop.
  23. نعم يمكنك فعل ذلك وذلك من خلال الذهاب إلى القائمة : Layer> New Layer Based Slice ثم إلى File>Save for web & Devices وعند الحفظ اختر "All Users Slices" إليك بعض المصادر : Saving layers as individual PNG files
  24. لا ليس بالضرورة وإن كان في جميع الدورات التدريبية ستجد المدرب يحث على هذا الأمر، لكن مسألة الدقة تعتمد بالأساس على أمرين اثنين، أولاهما هي طبيعة التصميم، أي في نهاية التصميم هل مصيره الطباعة أم فقط سينشر على الأنترنت كوثيقة إلكترونية (صورة، خلفية،...) أم سيطبع (بطاقة هوية،ملصق،فلاير..)، ففي الحالة الأولى تعتبر الدقة التي ينصح بها الخبراء في مجال التصميم هي 72dpi، بينما في التصاميم المخصصة للطباعة فتعتبر 300dpi الدقة المثالية لذلك، لكن في الحالة الثانية يعاني الأغلبية من ضعف وقدرة جهاز الحاسوب على تحمل واستيعاب الذاكرة لملف photoshop دقته 300dpi، وخاصة إذا كان الملف بمقاييس كبيرة، مما ينتج عنه بطء في الجهاز وعمل متقطع يدفع المصممين إلى تغيير الدقة نحو القيمة 150dpi، والتي تعتبر أقل جودة من 300 ولكنها تفي بالغرض.
  25. يلجأ عامة المصممين في تصاميمهم المخصصة للطباعة إلى ترك مسافة جانبية حول التصميم حتى لا تأتي عملية القص على محتوى التصميم، حيث تقدر المسافة المتروكة بين 3ملم و6ملم كأقصى مسافة، وهذه الأخيرة تأتي ضمن الجزء الجانبي من التصميم والذي لا يتوفر على أي نص أومعلومات ، وهذا مثال حقيقي لما أريد شرحه: حيث المسافة bleed هي المسافة المُهملة والتي من شأنها أن تُقص. وأيضا: وإذا ما أمعنت النظر في بعض علب الحليب أو العصير في الأسفل قد تجد علامات على شكل + أو دوائر صغيرة، هذه العلامات مخصصة لغرض معرفة حدود عملية القص، كهذه:
×
×
  • أضف...