-
المساهمات
1070 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
15
إجابات الأسئلة
-
إجابة Mohamd Imran سؤال في هل يمكن تغيير اسم التطبيق بعد نشره كانت الإجابة المقبولة
مرحباً بك @مروان مروان3
جوجل بلاي وأبل ستور تقريباً نفس السياسة من ناحية تغيير إسم التطبيق بعد نشره أي يصبح Live , بالنسبة لجوجل بلاي إن قمت بنشر التطبيق أي بعد ما تنتهي فترة مراجعته من جوجل ويصبح متاح للتحميل من الجوجل بلاي ,أي تعديل ستقوم به سواء تحديث إسم التطبيق أو سياسة الخصوصية أو تقريباً أي شيء مشابه لذلك , سيتطلب مراجعة أخرى من جوجل بلاي وبعد أن تتم الموافقة يتم تطبيق التغييرات التي قمت بها ,أما من ناحية أبل الأبل ستور إن أردت تغيير إسم التطبيق ستحتاج إلى عمل نسخة أخرى من التطبيق أي من ال Xcode بإصدار أعلى أو أحدث من النسخة السابقة التي مرفوعة مسبقاً على المتجر ,وهذه النسخة الأخرى التي قمت بعملها ستكون كتحديث للتطبيق في المتجر وهنا يمكنك تغيير إسم التطبيق فقط , أو يمكنك تغيير إسم التطبيق في حالة أن التطبيق ليس Live أو لم تتم الموافقة عليه من أبل - أي تم رفضه - ,هذه السياسة المتبعة لكل من جوجل بلاي وأبل ستور .
-
إجابة Mohamd Imran سؤال في لماذا خاصية max-width لا تقوم بعملها ؟ كانت الإجابة المقبولة
مرحباً @مصطفى اوريك
سأوضح لك سبب ذلك ثم كيفية إصلاحه , عند إستخدام الخاصية
max-width فأنها تقوم بمنع العنصر أو حاوية العنصر من زيادة حجمها عن القيمة المخصصة من خلال الخاصية
width أي عندما تقوم بذلك فانك تقول إذا قيمة width زادت عن قيمة max-width قم بخفضها إلى قيمة ال max-width وإذا ال width أقل من ال max-width فقم بجعله متناسب مع قيمة width , الأن المشكلة لديك ,هي لديك العنصر الذي يحمل الكلاس search-section في سطر رقم 7 في ملف ال css في العنصر section سطر رقم 1 في ملف ال html وهو الحاوية الرئيسية لجميع العناصر التي تريدها أو التي تقع تحتها الكلاس input-content يحوي الخاصية display: flex قم بإزالتها
display: flex; لأن flex تقوم بعرض العناصر كأعمدة أو صفوف ,حتى يتغير حجم ال input أو العنصر ذو الكلاس المرغوبة قم بإزالتها .الشكل النهائي يصبح هكذا
.search-section { height: 100vh; align-items: center; justify-content: center; background-color: #B6D6D6; } بعد ذلك ستصبح العناصر متناسبة مع الأحجام الأخرى .
-
إجابة Mohamd Imran سؤال في كيف أضيف أعلان بيني بعد عدة ضغطات على recycler view ؟ كانت الإجابة المقبولة
وعليكم السلام ورحمة الله @عبدالرحمن العنزي4
ما وصفته هو ليس خاصية بمعنى الكلمة بل هي أمور يتم عملها برمجياً من قِبل أصحاب التطبيق ,ويمكن عملها بعدة طرق من خلال إستخدام ال OnClick ميثود حيث نقوم بعمل متغير من نوع int وظيفته سيقوم بجمع كم عدد المرات يلي ضغط المستخدم في على ال itemView بناء على النتيجة نقوم بإظهار نوع الإعلان الذي نريده في حالتك هوinterstitial ,والأن لإظهار الإعلان نقوم بالتالي مع إستبدال الوحدة الإعلانية بالوحدة الخاصة بك
interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); الأن لنقوم بالأمر كاملاً أولاً نقوم بعمل متغير من نوع int سيحوي عدد المرات التي ضغط فيها المستخدم ال itemView فلنضع إسم المتغير clickCount وقيمته الإفتراضية 0
int clickCount = 0; والأن في ال OnClickListener نقوم بزيادة هذا المتغير مرة واحدة عند الضغط أي هكذا
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; } }); وبعدها نقوم بوضع شرط عند وصول clickCount إلى 3 نقوم بإظهار نوع الإعلان الذي نريد هكذا
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; if(clickCount == 3){ interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); } } }); وأخيراً نقوم بتغيير قيمة المتغير clickCount إلى 0 عند حصول الشرط الخاص بنا وهو وصول عدد الضغطات إلى 3 ,لكن لماذا !؟ , الجواب هو لأن المتغيير سيبقى يزداد مع كل ضغطة في ال itemView أي سيتعدى العدد 3 وهذا ما لا نريد لذلك لحل المشكلة نقوم بجعله صفر عند حصول الشرط أي هكذا الشكل النهائي (لاحظ clickCount = 0;)
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; if(clickCount == 3){ clickCount = 0; interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); } } });
-
إجابة Mohamd Imran سؤال في اريد جعل تطبيق ال ios من اليمين لليسار (. RTL ) عند بداية المشروع كانت الإجابة المقبولة
آه معلش أعتذر لم إنتبه إلى إنك تستخدم react native قم بإزالة الفنكشن والكود الذي ذكرته لك في تعليقي الأول وإتبع التالي لرياكت , بالنسبة للكود المرفق الخاص بك هو Objective-c ,الأن في رياكت للIOS لجعل الفيو من اليمين لليسار , قم بإضافة سطر الإستيراد التالي في أعلى الكود قبل
#import "AppDelegate.h" أي هكذا
#import <React/RCTI18nUtil.h> #import "AppDelegate.h" ثم بعد ذلك قم بحذف الكاش من خلال الذهاب إلى المشروع في ال Xcode ثم ضغط Command + Shift + K وبعد ذلك , قم بإضافة الأسطر التالية في الميثود didFinishLaunchingWithOptions
[[RCTI18nUtil sharedInstance] allowRTL:YES]; [[RCTI18nUtil sharedInstance] forceRTL:YES]; لإجبار الفيو أن يٌعرض من اليمين لليسار
didFinishLaunchingWithOptions قبل أن يتم إرجاع Yes أي هكذا في الكود الخاص بك أي هنا
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FIRApp configure]; قبل
return YES; بعد ذلك المفترض أن يعمل معك الفيو من اليمين لليسار .
-
إجابة Mohamd Imran سؤال في مشكله عند تحميل Android x وتشغيل الكود deprecated gradle features كانت الإجابة المقبولة
@Abdullha Mohammad
هل يمكنك إرفاق ملف المشروع بشكل مضغوط أي بصيغة .zip حتى اتفقد لك المشكلة وحلها , في حال غير ممكن ذلك ,يرجى تغيير إصدار Gradle لديك إلى 7.0.2 هكذا
أو الطريقة الأفضل هي إفتح ملف
gradle-wrapper.properties
ثم إذهب إلى السطر الذي يحوي أو مشابه لــ
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip
وإستبدله بالتالي
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
ثم إذهب إلى شريط القوائم وإختر Build ثم إضغط على ِClean Project وبعد إنتهاء البرنامج من التنفيذ إذهب مرة أخرى إلى شريط القوائم وإختر Build ثم إضغط على Rebuild Project وإنتظر حتى الإنتهاء , بعدها المفترض أن تحل المشكلة , والسبب الرئيسي لها هو أن المشروع تم تحديث بعض المكتبات فيه إلى إصدارات أخرى تتطلب إصدار bin الخاص بمكتبات الwindows binary إصدار 7.0.2 , وأعلمني بالنتيجة
-
إجابة Mohamd Imran سؤال في إيقاف التشغيل الحالي عند تشغيل أغنية جديدة في كوتلن كانت الإجابة المقبولة
بالتأكيد @Yahia Nasrallahضعه في ال OnClickListener هكذا يصبح الشكل النهائي
var mediaPlayer=MediaPlayer() my_view.btn_all.setOnClickListener { if (ber){ if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.reset(); mediaPlayer.release(); } mediaPlayer = MediaPlayer.create(context, songs[position]); mediaPlayer.start(); ber=!ber sed.btn_all.setImageResource(R.drawable.ic_baseline_pause_24) }else if (!ber){ mediaPlayer.pause() ber=!ber sed.btn_all.setImageResource(R.drawable.ic_baseline_play_arrow_24) } }
-
إجابة Mohamd Imran سؤال في كيف أرسل بيانات من recycler view متواجد في fragment الى fragment اخرى؟ {يفضل استخدام الكوتلن او جافا } كانت الإجابة المقبولة
@عبدالرحمن العنزي4
يوجد عدة طرق لقيام بذلك لكن بما أن البيانات تريد إرسالها من Recycler View إلى Fragment فيجب أن نقوم أولاً بعمل interface مع القيم التي نريد تمريرها لربط ال adapter مع الfragment الذي يحوي الRecycler View الأن كيف نقوم بذلك أولاً نقوم بعمل ملف ال interface مع البيانات التي نريد تمريرها في حالتنا هي الposition و title
public interface FragmentCommunication { void respond(int position,String title); } والأن في ملف ال Recycler view adapter نقوم بعمل object من ال interface أعلاه هكذا بعد القوس { في بداية الكلاس أي بعد هذا الجزء
class tvTitleAdapter (val context: Context,val TITLE_LIST : ArrayList<TvTitlesViewModel>) : RecyclerView.Adapter<tvTitleAdapter.ViewHolder>() { private FragmentCommunication Communicator; ثم أيضاً نقوم بعمل object من ال layoutinflater
private LayoutInflater inflater; ثم نقوم بعمل object من المودل الخاصة بك
private List<TvTitlesViewModel> dList; بعدها نقوم بعمل constructer للبيانات أعلاه
public tvTitleAdapter (Context context, List<TvTitlesViewModel> clist,FragmentCommunication communication) { inflater = LayoutInflater.from(context); dList= clist; Communicator=communication; } والأن في الميثود onCreateViewHolder
قم بإضافة الview holder وإرجاعه ك view رئيسي هكذا بعد السطر
val view = LayoutInflater.from(parent.context).inflate(R.layout.tv_titles_design, parent, false) ViewHolder holder = new ViewHolder(view,mCommunicator); ثم نقوم بإرجاعه بدل
return ViewHolder(view) هكذا
return holder; والأن نقوم بإستخدام Bundle لتمرير البيانات التي نريدها أولاً في ال onclicklistener نقوم بتمرير ال title بهذا الشكل إستبدل Fragment2 بإسم الfragment الأخر
Fragment2 fragment2=new Fragment2(); Bundle bundle=new Bundle(); bundle.putString("TITLE",tvShow.title); fragment2.setArguments(bundle); أخيراً في الكلاس ViewHolder
class ViewHolder(Itemview : View): RecyclerView.ViewHolder(Itemview){ قم بعمل object من ال interface التي قمنا بعملها في البداية
FragmentCommunication Comminication; ثم قم بإضافة الFragmentCommunication إلى الكلاس بجانب Itemview أي هكذا
class ViewHolder(Itemview : View,FragmentCommunication : Communicator): RecyclerView.ViewHolder(Itemview){ ثم نقوم بعمل constructor ونسند له الobjects يلي عملنها فوق بهذا الشكل
ViewHolder(itemView : View,Communicator :FragmentCommunication ) { super(itemView); val titleShow = itemView.findViewById<TextView>(R.id.tvTitle) Comminication=Communicator; titleShow.setOnClickListener(this); } ثم
@Override public void onClick(View view) { Comminication.respond(getAdapterPosition(),dList.get(getAdapterPosition()).name); } ثم في الFragment الذي يحوي ال Recycler view أضف مع إستبدال Fragment2 بإسم الfragment الثاني الذي ستشارك معه البيانات
FragmentCommunication communication=new FragmentCommunication() { @Override public void respond(int position,String title) { Fragment2 fragment2=new Fragment2(); Bundle bundle=new Bundle(); bundle.putString("TITLE",title); fragment2.setArguments(bundle); FragmentManager manager=getFragmentManager(); FragmentTransaction transaction=manager.beginTransaction(); transaction.replace(R.id.dumper,fragment2).commit(); } }; أخيراً في الFragment الثاني الذي شاركنا معه البيانات قم بتعريف متغير سيحمل الtitle في بداية الكلاس الرئيسي
String title; ثم في ال oncreate ميثود بعد super.onCreate نقوم بإرجاع الtitle هكذا
title=getArguments().getString("TITLE"); ثم في ال onCreateView ميثود نقوم بوضع ال title الذي قمنا بإرجاعه فوق في ال textView
إستبدل
return inflater.inflate(R.layout.fragment_tv_titles, container, false) ب
View view = inflater.inflate(R.layout.fragment_tv_titles, container, false) val titleShow = itemView.findViewById<TextView>(R.id.tvTitle) titleShow.setText(title); return view; بعد ذلك سيتم إرسال البيانات وعرضها في الfragment الأخر , في حال واجهت مشكلة في ذلك أرفق لي ملف التطبيق بشكل كامل حتى أستطيع المساعدة بشكل أكبر
-
إجابة Mohamd Imran سؤال في مشكلة تسجيل دخول بستخدام حساب جوجل flutter كانت الإجابة المقبولة
@مروان مروان3
سبب ذلك بالعادة هو جوجل بلاي ويبدو إنك قمت بتفعيل خاصية خدمة التوقيع الخاصة بجوجل عند عمل حساب جوجل بلاي لأول مرة الأن ما تقوم به جوجل بعد أن تقوم بتفعيل ذلك هو تقوم بتوليد keystore جديد وتقوم بإزالة المفتاح الخاص بك وإضافة ال keystore الخاص بهم لأغراض الحماية وبالنهاية يصبح تطبيقك غير موقع أو لا يملك الصلاحيات المناسبة لأنه تم توقيعه بإستخدام keystore آخر وهو الخاص بجوجل , الأن لحل المشكلة ما سنقوم به هو من Google Play Console من القائمة اليمني "للغة الإنجليزية" إضغط على "Release Management" ثم إذهب إلى
App signing -> App signing certificate
أرفقت صورة للمسار أعلاه في Google Play Console
وقم بنسخ المفتاح SHA-1 أو SHA-256 وأيضاً نسخ مفتاح SHA-1 الخاص بقسم "Upload Certificate" ثم أضفهن جميعاً في ال firebase console بعد ذلك قم بتنزيل ملف google-services.json الجديد وأضفه إلى التطبيقك وقم بعمل نسخة جديدة من التطبيق بنفس ال keystore الذي إستخدمته عند رفع أو نسخة من التطبيق أو النسخة المرفوعة حالياً على المتجر بعد ذلك سيعمل معك تسجيل الدخول كما في السابق
-
إجابة Mohamd Imran سؤال في عندما قمت بتحويل الخريطة الى animated فانها اختفت وظهرت بلون شبيه بالرمادى ولكن marker عليها عادى .. لا اعرف ما السبب كانت الإجابة المقبولة
@أحمد ابراهيم عبد الله تمام لا يوجد مشكلة , لا أعلم ما لديك في ال constructor أو ال style أنت هنا تقوم بوضع الستايل style={{flex: 1}} فقط يجب أن تقوم بإضافة الستايل الخاصة بالخريطة من خلال عمل absoluteFillObject يحوي عدة خصائص أي هكذا أولاً قم بتعريف styles لكل من مكون الخارطة و الكونتينر هكذا
const styles = StyleSheet.create({ container: { ...StyleSheet.absoluteFillObject, height: 400, width: 400, justifyContent: 'flex-end', alignItems: 'center', }, map: { ...StyleSheet.absoluteFillObject, }, }); ثم قم بتغيير
style={{flex: 1}} إلى
style={styles.map} وأيضاً إذا لا تستخدم جوجل مابس في مشروعك قم بإزالة هذا السطر
provider={PROVIDER_GOOGLE} وهنا
<View style={styles.markerTitleContainer}> قم بتغييره إلى
<View style={styles.container}> لأن هذا ما قمنا بتعريفه في styles ثم أعد التجربة
-
إجابة Mohamd Imran سؤال في كيفية تمرير البيانات من خلال sign_in_with_apple في flutter كانت الإجابة المقبولة
السلام عليكم @مروان مروان3
لا يوجد لديك خطأ في الكود بل المشكلة هي من أبل أبل فقط تعيد إسم المستخدم بالكامل وكذلك الإيميل فقط مرة واحد عند أو عملية تسجيل دخول على نفس الجهاز من خلال التطبيق , وإن عاودت تسجيل الدخول ستحصل على null هذا من أبل لكن للحصول على البيانات مرة أخرى بغرض الإختبار , في جهاز الأيفون إذهب إلى Settings > Apple ID, iCloud, iTunes & App Store > Password & Security > Apps Using Your Apple ID ثم إضغط على التطبيق الخاص بك ثم إختر Stop Using Apple ID بعد ذلك يمكنك تسجيل الدخول مرة أخرى وستحصل على البيانات
-
إجابة Mohamd Imran سؤال في رسالة حسب العمر في C# كانت الإجابة المقبولة
مرحباً @Ali Proof
في الصورة المرفقة الخطأ واضح دعني أوضحه أكثر وما سببه , أنت تقوم بتعريف متغير من int اي رقم لكن تقوم بلتحقق منه في جملة الشرط كنص أي String لأنك تضعه بين علامتي تنصيص "" وغير ذلك لا يمكنك إستخدام علامات > أو = أو علامات المقارنة المشابه لمقارنة نص , الأن لحل المشكلة يمكننا إما تعريف المتغير age كنص String وإستخدام المقارنة من خلال الميثود Compare أو الإبقاء على المتغير كما هو أي int و تحويل مدخل المستخدم إلى رقم لأنه الميثود Console.ReadLine() تقوم بأخذ مدخل المستخدم كنص لذلك يظهر لك الخطأ في تلك الميثود لأن المتغير age من نوع int أي رقم بينما القيمة التي نأخذها من المستخدم هي قيمة نصية , الأن لتحويل مدخل المستخدم إلى نص أولاً نقوم بجعل المتغير age متغير نص أي String بدلاً من int ومن ثم نقوم بإستخدام الميثود Convert.ToInt32 التي ستقوم بتحويل النص إلى رقم ونمرر لها القيمة النصية أي هكذا
Convert.ToInt32(age); ونقوم بإستخدامها هكذا ووأيضاً قم بإزالة علامتي التنصيص من حول الرقم 15 لأنه رقم وليس نص
using System; class myclass { static void Main(string[] args){ Console.WriteLine("Enter your age : "); String age = Console.ReadLine(); if (Convert.ToInt32(age) <= 15){ Console.WriteLine("Go back to school -_-!"); } } }
-
إجابة Mohamd Imran سؤال في الخطأ slot undefined في لارافل كانت الإجابة المقبولة
السلام عليكم @Mohammad Kiblawi
سبب الخطأ كما يظهر في الصورة المرفقة هو لديك متغير بإسم slot غير معرف في ملف app.blade.php في مجلد
resources ->views -> layouts السطر رقم 65 يمكنك إما إرجاع ذلك المتغير في الميثود create في كونترولر الadmin من خلال
return view('admin.create')->compact($slot); أو
return view('admin.create')->with('slot',$slot); على حسب الإستخدام الخاص بذلك المتغير , أو إزالة ذلك المتغير وإستخداماته في ملف app.blade.php في حال لا تحتاجه.
-
إجابة Mohamd Imran سؤال في مساعدة في إصلاح ستايل الأيقونة كانت الإجابة المقبولة
أهلاً بك @عبدالله محمد
تفقدت الصفحة الخاصة بك وإذا لاحظت هنا في السطر رقم 32 تقوم بإسناد القيمة forwards للخاصية animation-fill-mode وعند إسناد القيمة forwards سيتم الإحتفاظ بآخر التنسيقات التي وصل إليها آخر keyframe وفي حالتك أخر keyframe هو إلى اليمين الخروج إلى اليمين ,أي سيبقى خارج إلى اليمين والستايل لن يرجع إلى التنسيق الأصلي ,الأن لحل المشكلة ببساطة نقوم بإسناد القيمة backwards إلى الخاصية animation-fill-mode في السطر رقم 32 وما ستقوم به هو إرجاع العنصر إلى ستايله الأصلي أو مكانه الأصلي بالأحرى الستايل الخاص بأول keyframe , بعد ذلك ستحل المشكلة لديك
-
إجابة Mohamd Imran سؤال في إنشاء قاعدة البيانات لتطبيق تسوق بإستعمال sequelize كانت الإجابة المقبولة
وعليكم السلام @Brahim Semmani
يمكنك عمل عمل ذلك من خلال عمل Sequelize مودل ثم نقوم بإستدعاءها وتنفيذ العمليات التي نريدها عليها من خلال إستخدام Sequelize ميثودز سواء للحذف أو الإضافة أو تحديث ,الأن لعمل جدول Products من خلال Sequelize مودل نقوم بعمل Sequelize مودل بإسم فليكن product.model.js في مجلد models ثم نقوم بإضافة الحقول وخصائصها لهذا الشكل
module.exports = (sequelize, Sequelize) => { const Product = sequelize.define("product", { title: { type: Sequelize.STRING }, price: { type: Sequelize.DOUBLE }, description: { type: Sequelize.STRING }, published: { type: Sequelize.BOOLEAN } }); return Product; }; بعد أن نقوم بعمل ذلك عند عمل Initialize أو تفعيل لتلك المودل من خلال إستدعائها مثلاً في ملف index.js سيتم عمل الجدول وأعمدته بشكل تلقائي التي قمنا بإضافتها إلى المودل أعلاه ,لن نحتاج إلى كتابة ال CRUD فنشكنز لأن Sequelize تدعهمهن كلهن بشكل تلقائي فقط سنقوم بإستدعاء المودل في الكونترولر الخاص بنا وإستخدام إحدى الفنشكنز التي نحتاجها على حسب طبيعة التطبيق ويوجد العديد من تلك الفنشكنز يمكنك الإطلاع عليها وعلى Sequelize بشكل عام من هنا
-
إجابة Mohamd Imran سؤال في التحقق في تطبيق رياكت من أن المستخدم عادي أو مسؤل كانت الإجابة المقبولة
السلام عليكم @Brahim Semmani
يوجد عدة طرق لذلك , لكن سأذكر الطريقة الأفضل ,يمكننا عمل ذلك من خلال إضافة حقل فليكن role لجدول المستخدمين وأيضاً نقوم بعمل جدول بإسم roles هذا الجدول يحوي فليكن حقلين حقل id وحقل اسم الدور او ال role ثم نضيف له دورين دور admin ودور user بعد ذلك عند تسجيل أي مستخدم جديد نقوم بإعطاءه دور user بشكل تلقائي وهذه القيمة يتم تخزينها في حقل role الذي قمنا بإضافته في جدول المستخدمين بعد ذلك ببساطة ما سنقوم به في التطبيق هو فقط التأكد من أن المستخدم هو admin أو user ثم نقوم بعرض ما يتناسب معه له ,هذه الطريقة الأفضل سواء لتطبيقات أو مواقع لعمل صلاحيات للمستخدمين
-
إجابة Mohamd Imran سؤال في إمكانية إضافة stored procedure كانت الإجابة المقبولة
وعليكم السلام @نصرالدين صالح عطيفة
بالتأكيد يمكنك لكن يعتمد على نوع قواعد البيانات المبني عليها الموقع مثلاً إن كان SQL يمكنكم ذلك وهذا مثال بسيط لكيفية عمل ذلك
CREATE PROCEDURE SelectAllProducts AS SELECT * FROM Products GO; ثم نقوم بتنفيذ الprocedure (الإجراء) الذي قمنا بعمله اعلاه هكذا
EXEC SelectAllProducts; -
إجابة Mohamd Imran سؤال في جلب البيانات من قاعدة البيانات بدون إعادة تحميل الصفحة في PHP كانت الإجابة المقبولة
السلام عليكم @Hamada Ahmed
يوجد عدة طرق لذلك لكن سأعطي مثال لكيفية عمل ذلك من خلال Ajax نقوم بعمل طلب لإرجاع البيانات من السيرفر كل مدة معينة مثلا كل 3 ثواني بدون الحاجة إلى تحديث الصفحة هكذا
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/ jquery.min.js"></script> <script> (function worker() { $.ajax({ url: 'https://mywebsite.com/display_online_memper.php', success: function(data) { $('#content_online_memper').html(data); }, complete: function() { // Isuue The Second request when the current one's complete setTimeout(worker, 3000); } }); })(); </script> بعد ذلك سيتم إرسال طلب للسيرفر لجلب البيانات الجديدة كل 3 ثواني أو يمكنك وضع التوقيت الذي يناسبك (لكن لاحظ الثانية = 1000) بدون اعادة تحميل الصفحة
-
إجابة Mohamd Imran سؤال في عرض سكربتchocolatey قبل التنزيل كانت الإجابة المقبولة
السلام عليكم @سرين رحمة
يجب أولاً أن تقومي بتثبيت chocolatey الذي بدوره سيقوم بتثبيت إصدار 4 من إطار .Net في حال لم يملكه الجهاز الخاص بك ,الأن لثتبيته إذهبي إلى قائمة إبدأ ثم إبحثي عن "موجه الأوامر" أو "cmd" ثم إضغطي بزر الماوس الأيمن وإختاري تشغيل كمسؤول بعد ذلك من خلال نافذة الأوامر قومي بتنفيذ الأمر التالي
@powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) ثم إنتظري إلى حين الإنتهاء من التنزيل والتثبيت ,بعد ذلك إن لم يظهر لكي أي رسالة خطأ إذا تم تثبيته بنجاح وجاهز للإستخدام ويمكنك إختبار ذلك من خلال الأمر choco ولتنزيل أي برنامج من خلال chocolatey إستخدمي الأمر هكذا cinst vlc أو هكذا choco install vlc حيث "vlc" هو إسم البرنامج الذي ترغبين في تنزيله
-
إجابة Mohamd Imran سؤال في كيف اغيير قيمة sharedpreference بشكل تلقائي؟ كانت الإجابة المقبولة
السلام عليكم @عبدالرحمن العنزي4
لا أعلم إن كنت تقصد shared preferences في Java أم في Dart , لكن تقريباً الفكرة نفسها يمكنك عمل ذلك مثلاً في الأندرويد ستديو (Java) أو جافا إجمالاً من خلال أولاً تخزين القيمة الأولية(dynamic value) من المتغير(الذي قيمته تتغير dynamic) فلتكن مثلاً 10 كما ذكرت ومن ثم نقوم بعمل شرط إن كان القيمة الأولية (10) التي تغيرت لا تساوي القيمة المخزنة في shared pref نقوم بإفراغها(shared pref) ثم تخزين القيمة التي تغيرت برمجياً (shared pref) قمت بعمل كود صغير يوضح ذلك برمجياً يمكنك عمله بأكثر من طريقة ويعتمد على كيف تتغير القيمة هل يتم تغييرها من خلال Api أم من خلال كود معين كل عدد معين من الثواني ,تفضل
int dynamicValue = 10; SharedPreferences sharedPref = getSharedPreferences("name", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt("dynamicKey", dynamicValue); editor.commit(); if (dynamicValue != sharedPref.getInt("dynamicKey",0)) { /** * Clear dynamicKey value with 0 * Then Insert the dynamicValue to the dynamicKey */ sharedPref.edit().putInt("dynamicKey",0).apply(); sharedPref.edit().putInt("dynamicKey",dynamicValue).apply(); } -
إجابة Mohamd Imran سؤال في تمت برمجة موقع لي لاكن نسيت معلومات الدخول للوحة التحكم ما الحل؟ كانت الإجابة المقبولة
السلام عليكم @Reda Boukheche
كلمة المرور يجب أن تكون بتشفير md5 حتى تستطيع تغييرها لحل المشكلة أدخل على قاعدة البيانات ثم اسم المستخدم الذي تريد تغيير كلمة المرور له , ثم في حقل كلمة المرور إضغط تعديل وإحذف التشفير القديم ,وإستبدله بالكلمة التالي قمت بعملها لك هي تشفير لكلمة سر "admin" قم بنسخها بدون مسافات واستبدلها
21232f297a57a5a743894a0e4a801fc3
بعد ذلك يمكنك تسجيل الدخول بإسم المستخدم الخاص بك وكلمة المرور admin
-
إجابة Mohamd Imran سؤال في كيف يمكن جعل الزائر يصوت لمرة واحدة فقط كانت الإجابة المقبولة
أهلاً بك @اسماعيل صدوقي
يمكن عمل ذلك ليس فقط من خلال الكوكيز , بل من خلال أيضاً sessionStorage أو localStorage , لكن على ما طلبت من خلال الكوكيز يمكنك عمل ميوثود في الكونترولر المسؤول وهذه الميثود وظيفتها تخزين قيمة مثلاً 1 في حالة قام بالتصويت أو 0 في حالة لم يصوت بعد ,لكن لا أنصح بذلك مباشرة لأنه ممكن أن ينشأ عن ذلك ثغرة أمنية , لكن الأفضل عند قيام المستخدم بالتصويت تقوم بحفظ القيمة 1 أو 0 في حقل مثلاً voted بعد ذلك نقوم بإسترجاع تلك القيمة من قاعدة البيانات وتخزينها في الكوكي هكذا مثال نقوم بعمل ميثود لتخزين و إسترجاع الكوكي في الكونترولر هكذا
public function setVotedCookie(Request $request) { $minutes = 1; $voteResult = Vote::findOrFail($request->id)->setVoted('1'); $voteResult->withCookie(cookie('isvoted', '1', $minutes)); return $voteResult; ثم نقوم بإعادة قيمة الكوكي إلى الواجهة هكذا
public function getVotedCookie(Request $request) { $value = $request->cookie('isvoted'); return view('main.votes',$value); } بعد ذلك فقط تتأكد من قيمة الكوكي الذي تم إرجاعها في الواجهة مثلاً
if (!$value == 1) { {{echo "Not Voted!"}} }else{ {{echo "Already Voted!,Show Error MSG"}} } ,ملاحظة الطريقة المستخدمة في الموقع إن كان قيمة الكوكي فقط تخزن في الجلسة الحالية فطريقة الموقع لا أنصح بها , لأنه ببساطة يمكن للمستخدم تغيير قيمة الكوكي ويصبح لم يصوت ! بينما هو قام بالتصويت ,إن كان لا يوجد عمليات تحقق إضافية .
-
إجابة Mohamd Imran سؤال في الحصول على مسار فيديو في java كانت الإجابة المقبولة
وعليكم السلام @خضر علي2
يمكنك القيام بذلك بعدة طرق من خلال الحصول على البيانات الراجعة من ال Intent هكذا الميثود getPath يتم تمرير المسار من ال intent بعد الإختيار وتقوم
Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select Your Video"),REQUEST_TAKE_GALLERY_VIDEO); public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) { Uri selectedImageUri = data.getData(); //Device FILE Manager filemanagerstring = selectedImageUri.getPath(); // Path From GALLERY selectedImagePath = getPath(selectedImageUri); if (selectedImagePath != null) { // new Intent that holdes selected path so we can use it in VideoAvtivity class or whatever your class is Intent intent = new Intent(Mainctivity.this, VideoAvtivity.class); intent.putExtra("path", selectedImagePath); startActivity(intent); } } } } public String getPath(Uri uri) { String[] projection = { MediaStore.Video.Media.DATA }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { // NULLPOINTER IF CURSOR IS NULL // FILE MANAGER FOR PICKING THE MEDIA int column_index = cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } else return null; } -
إجابة Mohamd Imran سؤال في كيفية معرفة مسار سكريبت بايثون الحالي؟ كانت الإجابة المقبولة
السلام عليكم @Fahmy Mostafa
حسب ما فهمت , إنك تريد طريقة لكيفية تشغيل السكربت الخاص بك من خلال ال terminal بغض النظر عن مكان وجوده ,إن كان كذلك الطريقة سهلة , أنشأ مجلد سيحتوي على سكربتات البايثون التي تريد ان تشغلها من اي مكان , فليكن الإسم myscript في المسار C:\Users\fahmy بعد ذلك ما سنقوم به هو إضافته كمسار عام من خلال الذهاب إلى جهاز الكمبيوتر ثم "Properties" ثم "Advanced system settings" ثم "Advanced" بعدها "Environment Variables" ثم قم بإختيار "Path" بعدها إضغط على زر "Edit" من النافذة التي ظهرت إضغط على زر "New" من الجزر الأيمن ثم نقوم بإضافة المسار الكامل إلى المجلد الذي قمنا بعمله مسبقاً أي هكذا
C:\Users\fahmy\myscript بعدها إضغط تطبيق او موافق ثم أغلق اي واجهة اوامر او terminal كانت مفتوحة واعد تشغيل واجهة الأوامر مرة أخرى وجرب تشغيل السكربت الخاص بك من خلال الأمر مع اسم السكربت مثال test.py وسيعمل السكربت بدون مشاكل من اي مكان ,أما إن كان تريد معرفة مسار وجود ملف معين يمكنك إستخدام الأمر dir مع جزء او اسم الملف كاملاً هكذا وسيظهر لك الملف ومساره على جهاز الكمبيوتر
dir script.py /s /p
-
إجابة Mohamd Imran سؤال في إضافة كود جافا سكريبت لشات ليظهر في جميع صفحات موقع كانت الإجابة المقبولة
السلام عليكم @Reda Boukheche
مكان وضع هذا الكود حتى يظهر على جميع الصفحات يختلف من نظام إدارة محتوى إلى آخر , على العموم يجب وضعه في قسم يكون موجود في جميع الصفحات مثلاً الهيدر يكون متواجد في جميع صفحات الموقع لكن الكود الذي لديك هو جافا سكربت لذلك يفضل وضعه في الفوتر قبل نهاية الوسم </body> حتى لا يؤثر على سرعة تحميل الصفحات والفوتر يتم تحميله في جميع صفحات الموقع بالعادة لذلك الكود سيظهر على جميع الصفحات ,بالنسبة لإضافة شات تدعم اللغة العربية يرجى ذكر نظام إدارة المحتوى لديك حتى أقترح عليك واحدة ,لكن الأفضل هو zendesk التي تستخدمها يمكنك تعطيل طلب البريد الإلكتروني من خلال Settings > Widget > Forms
ثم قم بإلغاء تفعيل Visitor profile عند القيام بذلك لن يتم طلب الإسم والإيميل من الزبون
-
إجابة Mohamd Imran سؤال في موقع خرائط بلغة أندرويد كانت الإجابة المقبولة
يوجد عدة طرق لذلك ,أولها وأتوقع أفضلها في حالتك وهو من خلال عمل تطبيق خاص بك وهذه التطبيق يثبت على جوال سائق الإسعاف ويقوم بإرسال بيانات موقعه أول بأول على السيرفر الخاص بك ومن ثم تقومين بأخذ تلك الإحداثيات وإعادة رسمها على الخريطة في تطبيقك أو نسخة تطبيقك الأخرى أو في التطبيق نفسه لكن فليكن مثلا التطبيق الخاص بك يحتوي صلاحيات معينة وعند توفر تلك الصلاحيات يمكنك الإطلاع على موقع أقرب إسعاف بناء على بيانات الموقع الخاص بالسائق التي تم إرسالها مسبقا إلى السيرفر مثل تطبيقات أوبر وغيرها أو الديليفري,والطريقة الأخرى هي بالإعتماد على مواقع المستشفيات المقدم من خرائط جوجل للمدينة المتواجدة بها أنت لكن أتوقع ليست مناسبة في حال أردتي موقع سائق السيارة بالضبط لكن الطريقة الأولى على المستخدمة في هكذا نوع من التطبيقات