يمكنك أيضاً استخدام الإضافة is-next-server الخاصة بال next وببساطة يتم استخدامها كالتالي
const isServer = require("is-next-server");
export default () => (
if (isServer) {
// الخادم
} else {
// المتصفح
}
)
أعتقد أنك تريد تغيير عنوان الرابط الأول عند الضغط على زر آخر ويمكنك عمل ذلك من خلال تغيير ال href بواسطة javascript كالتالي
var button = document.getElementById("button"); //الزر يقوم بتغيير الرابط
var link = document.getElementById("mylink");//الرابط
button.addEventListener("click", function(){
link.setAttribute('href', "http://الرابط الذي تريده");
})
أولاً يجب أن تعرف أنه لا يوجد وجه مقارنة بين ال master وال origin وهذه المصطلحات ليست مفاهيم في ال git أو github إنما
origin هى إختصار لرابط المستودع البعيد و أعتقد أنك ترى العديد من الشروحات التي تستخدم الأمر
git push origin master
ولكن هنا origin تستخدم كإختصار
بالنسبة ل master فهو اسم الفرع أو ال branch حيث أن يمكن أن يكون للrepo أكثر من branch وهو ليس بالضرورة أن يكون master إنما يمكن أن يكون main أو أي اسم آخر
إذا أردت البحث عن المزيد من المعلومات يمكنك البحث عن git branch و ال origin
بالطبع يفضل الإلتزام بالترتيب حيث توجد بعض الدروس التي تعتمد على الدروس السابقة فمثلاً عند دراسة المسار " قواعد البيانات " يجب عليك على الأقل دراسة المسار " أساسيات البرمجة " لذلك معظم الدروس مرتبطة ببعضها وبرما تكون هناك دروس غير مرتبطة بما قبلها ولكن حتى لا تفوت عليك بعض المعلومات يجب عليك الإلتزام بالترتيب إلا في حالة أنك على علم بأحد المسارات وقد درسته دراسة وافية وأيضاً لا يفضل ذلك
يمكنك استخدام with في ال error handling و ال management resources غالباً في بث الملفات حيث تستخدم في عدة عمليات مرتبطة ومترتبة على بعضها ويمكنك استخدامها كالتالي
with open('file.txt', 'w') as f:
f.write('hello')
في هذه الحالة لا تحتاج لاستخدام f.close فهي تقوم بذلك بدلاً عنك
بالطبع لا مشكلة في استخدام with بل اعد الأفضل في بعض الإستخدامات يمكنك بالطبع استخدام try except بدلاً منها ولكن with توفر عليك بعض المهام وإختصار للكود
حتى تستطيع استخدام with يجب توفير الدعم لها من خلال إنشاء Context Manager على هيئة كائن حتى يتواجد الدوال __enter__ و __exit__ لتستطيع العمل ب with هناك العديد من الدوال والمكتبات التي بدأت توفير الدعم للعمل ب with
بما أننا نستخدم nextjs يمكننا الحصول على ال query من خلال ال useRouter hook كالتالي
import { useRouter } from 'next/router' // hook نقوم باستدعاء ال
const Index = () => {
const router = useRouter()
const {id} = router.query //query يمكننا هنا الوصول لل
return(<div>{id}</div>)
}
كما وضح عبدالمجيد أن الكود الذي يتم تنفيذه في المتصفح أي في ال client side يجب وضعه في ال lifecyle componentDidMount والبديل عن هذه ال lifecyle في ال function component ال useEffect ويتم تنفيذ المطلوب كالتالي
import React, {useEffect } from 'react';
function Index() {
//componentDidMount and componentDidUpdate مشابه ل
useEffect(() => {
console.log('window.innerHeight', window.innerHeight);
},[]);
ذلك بسبب أن ال export default من خصائص ال es6 وتعتبر هذه النسخة من JavaScript غير مدعومه حالياً لذلك ينبغي عليك عند استخدام التصدير بالشكل التالي
export default Social
استخدام transpiler مثل babel لتقوم بتحويل ال es6والإصدارات اللاحقة إلى كود مدعوم من جميع المنصات والمتصفحات
ليس هناك وجه مقارنة بين getStaticPaths و getStaticProps حيث
getStaticProps تقوم بجلب البيانات
getStaticPaths تقوم بإنشاء paths بناء على هذه البيانات من ال getStaticProps
في السطر التالي نقوم يإنشاء ال paths من خلال البيانات حيث من خلال ال post.id التي تصلنا يمكننا إنشاء ال paths
const paths = posts.map((post) => ({
params: { id: post.id },
}))
يمكنك استخدام الإضافة next-seoحيث توفر لك مميزات كثيرة فيمكنك إضافة meta لصفحة معينة أو إضافة meta إفتراضية لجميع الصفحات أو الموقع كالتالي
إنشاء custom App يسمى app.js_
ثم يمكنك استدعاء DefaultSeo من next-seo ثم إضافة الإعدادات التي تريدها
import App, { Container } from 'next/app';
import { DefaultSeo } from 'next-seo';
// import your default seo configuration
import SEO from '../next-seo.config';
export default class MyApp extends App {
render() {
const { Component, pageProps } = this.props;
return (
<Container>
<DefaultSeo // Component يجب أن تكون في البداية قبل ال
openGraph={{
type: 'website',
locale: 'en_IE',
url: 'https://www.url.ie/',
site_name: 'SiteName',
}}
twitter={{
handle: '@handle',
site: '@site',
cardType: 'summary_large_image',
}}
/>
<Component {...pageProps} />
</Container>
);
}
}
نعم يعتبر استخدامهما متماثل ولكن هناك اختلاف في الحالات اليت يجب استخدام أياً من هما حيث تعتبر في كثير من الحالات التي ستستخدم فيها ال getStaticProps مثل
البيانات المطلوبة لجعل الصفحة متاحة في وقت البناء جاهزة
في حالة أنك تقوم بجلب البيانات من headless CMS.
في حالة أنك تهتم كثيراً بال SEO
والحالة التي يمكنك استخدام getServerSideProps فيها هي
في حالة أنه يتم جلب البيانات عند كل request من المستخدم لبناء الصفحة
يمكنك أيضاً استخدام المكتبة Pymongo عن طريق json_util كالتالي
def parse_json(data):
return json.loads(json_util.dumps(data))
# يمكنك استخدام هذه الدالة عند إرجاع البيانات
كما وضح وائل في التعليق السابق أنه يمكنك تنفيذ ما تريده من خلال طريقتين سواء ال referencing أو ال subdocument يفضل استخدام الطريقة الثانية لأنها تقوم بإدراج ال authorSchema مباشرة في ال bookSchema فالميزة هنا أنها تحفظ البيانات كاملة في مكان واحد فيساعد على زيادة الأداء وتقليل زمن ال query لأنها لن تبحث في عدة أماكن لذلك يكون من الأفضل استخدام الطريقة الثانية في حالة
أن البينات في ال subdocument ليست كبيرة
في حالة أن البيانات لا يحدث لها تغيير كثيراً
وأيضاً هناك استخدامات تجعل من ال referencing أفضل
توجد دالة في لغة بايثون تقوم بالفكرة التي تريد تنفيذها وهي wrap من textwrap ويمكنك استخدامها كالتالي
from textwrap import wrap #لاتنسى استدعائها أولاً
s = '1234567890'
wrap(s, 2) # نمرر أولاً النص ثم نمرر العرض أو عدد الحروف التي تريدها
#الناتج
# ['12', '34', '56', '78', '90']
بالإضافة للطرق السابقة يمكنك أيضاً استخدام المكتبة util عن طريق الدالة util.inspect() كالتالي
const util = require('util')
console.log(util.inspect(myObject, false, null, true /* enable colors */))
من الطبيعي والإفتراضي أن تأخذ العناصر مكانها في الموقع على حسب وجودها في الكود أو شيفرة html فمثلًا العنصر الموجود في الكود أولاً يكون موجود في الموقع أولاً
ولكن عند إضافة الخاصية position تقوم هذه الخاصية بتغيير مكان العنصر الإفتراضي والطبيعي والفرق بين ال relative و ال absolute
Relative تمكننا من تحريك العنصر من مكانه الطبيعي أي يبقى العنصر في مكانه في حالة عدم تحديد خصائص left right top or bottom
أما بالنسبة ل absolute تمكننا من تحريك العنصر ولكن ليس من كانه الطبيعي، بل، من أقرب عنصر له خاصية position relative أو إن لم تكن موجودة يكون من ال body
ويتم توضيح الشرح من خلال الصورة التالية
يمكنك قراءة المزيد من المعلومات من هنا
يمكنك تنفيذ ذلك في next من خلال الملفات بسهولة من خلال ال dynamic route حيث سيكون شكل الملفات كالتالي " pages/post/[id].js " ثم يمكنك عرض ال post كالتالي
import { useRouter } from 'next/router'
const Post = () => {
const router = useRouter()
const { pid } = router.query
return <p>Post: {pid}</p>
}
export default Post
يمكنك أن تجد المزيد من المعلومات هنا
ربما يحدث ذلك لعدة أسباب وبما أنك متأكد أنه لم يتم تخطي الحد الأقصى (مع أن ذلك لا يقوم بإخفاء البيانات ) وأنك لم تحذف البيانات
حاول تجربة فتح ال database من خلال لوحة التحكم من متصفح آخر حيث ربما تمنع بعض الإضافات من ظهور البيانات مثل ad blocker فتأكد أنك لا تستخدم ad blocker في المتصفح
توجد عدة طرق لتنفيذ ذلك يمكننا استخدام ال hook التالي useIsFocused ثم استخدام هذه القيمة ك dependency ل sideEffect لتنفيذ دالة ما كالتالي
const componentB = (props) => {
// يتأكد ما إذا كانت هذه الصفحة مفتوحة أم لا
const isFocused = useIsFocused();
useEffect(() => {
updateSomeFunction()//isFocused يتم تنفيذ هذه الدالة بناءاً على القيمة
},[isFocused]);
}
ربنا إنشاء المجلد data/db لن يحل المشكلة لذلك سنحاول تنفيذ الامر التالي ك administrator من خلال ال cmd
cd C:\Program Files\MongoDB\Server\4.0\bin
mongod --dbpath="C:\Program Files\MongoDB\Server\4.0\data"
نعم ليس هناك فرق كبير في الأداء بين الطريقتين حيث أن ال module يتم إستدعائه في كلا الطريقتين لذلك يمكنك استخدام الطريقة التي تفضلها فمثلاً
الطريقة الأولى لا تحتاج لأكثر من Import لاستخدام عدة دوال بينما في الطريقة الثانية تحتاج لذلك
في الطريقة الأولى عند استخدام دالة تحتاج للوصول لها كالتالي module.method مما قد تبدو ممله بينما في الطريقة الثانية لا تحتاج لذلك
لذلك بالأخير فإنه يمكنك استخدام الطريقة التي تفضلها وتسهل العمل عليك
يمكنك تنفيذ المطلوب من خلال ال cookies كالتالي
<?php
if (!isset($_COOKIE['firsttime'])) //إذا كان المستخدم يزور الموقع لأول مرة
{
setcookie("firsttime", "no", /*cookie قم بتحديد فترة إنتهاء ال */);
header('Location: first-time.php');
exit();
}
else
{
header('Location: index.php');
exit();
}
?>
نعم يوجد إختصار لل if في البايثون ولكن ليس مثل javascript وهو كما في المثال التالي
a,b=5,7
x = a > b and "True" or "False"
#or يتم إرجاع ما بعد ال false وإذا كان and يتم إرجاع ما بعد ال true في حالة
يمكنك تحقيق ذلك أيضاً من خلال التالي
s = set(list2) #set ل list2 نحول أولاً ال
list3 = [x for x in list1 if x not in s] #temp3 نقومب إرجاع الإختلافات بينهما في ال