1. نظرة عامة
هذا الدرس العملي هو استمرار للمفاهيم المقدَّمة في أساسيات Accelerated Mobile Pages. يجب أن تكون قد أكملت الدرس التطبيقي السابق قبل بدء هذا الدرس أو أن تكون على دراية بالمفاهيم الأساسية لـ AMP على الأقل.
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية تعامل AMP مع الإعلانات والإحصاءات وتضمين الفيديو والإدراج في وسائل التواصل الاجتماعي ولوحات العرض الدوّارة للصور وغير ذلك. لتحقيق ذلك، ستستند إلى المثال الوارد في الدرس التطبيقي حول الترميز: أسس إنشاء صفحات AMP من خلال إضافة هذه الميزات باستخدام مكوّنات AMP المختلفة.
أهداف الدورة التعليمية
- عرض الإعلانات الصورية باستخدام amp-ad
- تضمين فيديوهات YouTube وبطاقات Twitter وعناصر نصية متجاوبة
- يمكنك إنشاء منصات عرض دوّارة تتضمّن صورًا ومجموعات من المحتوى باستخدام amp-carousel.
- أنماط تتبُّع بسيطة باستخدام amp-analytics
- طرق لإضافة عناصر التنقّل في الموقع إلى صفحتك
- طريقة عمل الخطوط مع AMP
المتطلبات
- الرمز النموذجي
- متصفّح Chrome (أو متصفّح مكافئ يمكنه فحص "وحدة تحكّم JavaScript")
- Python (يُفضّل الإصدار 2.7) أو إضافة Chrome 200 OK Web Server
- أداة تعديل الرموز (مثل Atom وSublime وNotepad++)
2. الحصول على الرمز النموذجي
يمكنك إما تنزيل كل الرمز النموذجي على جهاز الكمبيوتر:
...أو استنسِخ مستودع GitHub من سطر الأوامر:
$ git clone https://github.com/googlecodelabs/accelerated-mobile-pages-advanced.git
سيتم تنزيل ملف ZIP يحتوي على عدة ملفات أمثلة للموارد وصفحة article.html الأولية.
فك ضغط المجلد وانتقِل إلى الدليل من خلال سطر الأوامر على الكمبيوتر.
3- تشغيل الصفحة النموذجية
لاختبار صفحتنا النموذجية، علينا الوصول إلى الملفات من خادم ويب. تتوفّر عدة طرق لإنشاء خادم ويب محلي مؤقت لأغراض الاختبار. في هذا الدرس العملي، سنقدّم تعليمات بشأن 3 خيارات متاحة:
- تطبيق Google Chrome "خادم الويب لمتصفّح Chrome": هذا هو الأسلوب المقترَح لأنّه أبسط حلّ متاح ومتوافق مع جميع الأنظمة الأساسية. ملاحظة: يتطلّب هذا الأسلوب تثبيت Google Chrome.
- استضافة Firebase: خيار بديل إذا كنت مهتمًا أيضًا باستكشاف منصة استضافة الأصول الثابتة الجديدة "استضافة Firebase". تكون طبقة المقابس الآمنة مفعّلة تلقائيًا.
- خادم HTTP محلي بلغة Python: يتطلّب الوصول إلى سطر الأوامر.
الخيار 1: Web Server for Chrome
يمكنك العثور على تطبيق "خادم الويب لمتصفّح Chrome" على هذا الرابط في "سوق Chrome الإلكتروني".

بعد تثبيت تطبيق Chrome، عليك توجيه التطبيق إلى مجلد معيّن من خلال الزر "اختيار مجلد". بالنسبة إلى تجربة الترميز هذه، عليك اختيار المجلد الذي فككت فيه ضغط ملفات الأمثلة الخاصة بتجربة الترميز.
بالإضافة إلى ذلك، يجب وضع علامة في المربّع بجانب الخيار "عرض index.html تلقائيًا" وضبط المنفذ على "8000". عليك إعادة تشغيل خادم الويب لتنفيذ هذه التغييرات.
يمكنك الوصول إلى عنوان URL هذا من خلال:
http://localhost:8000/article.amp.html
إذا تم تحميل عنوان URL أعلاه بنجاح، يمكنك الانتقال إلى القسم التالي.
الخيار 2: استضافة Firebase
إذا كنت مهتمًا باستكشاف خدمة استضافة الويب الثابتة الجديدة من Firebase، يمكنك اتّباع التعليمات المتاحة هنا لنشر موقعك الإلكتروني بتنسيق AMP على عنوان URL لاستضافة Firebase.
استضافة Firebase هي خدمة استضافة ثابتة يمكنك استخدامها لنشر واستضافة موقع إلكتروني ثابت ومواد عرضه بسرعة، بما في ذلك ملفات HTML وCSS وJavaScript. يستفيد المستخدمون من انخفاض وقت الاستجابة لأنّ المحتوى الثابت يتم تخزينه مؤقتًا في شبكة توصيل المحتوى (CDN) التي تتضمّن نقاط حضور (PoP) موزّعة في جميع أنحاء العالم.
أخيرًا، يتم دائمًا عرض "استضافة Firebase" عبر طبقة المقابس الآمنة، ما يجعلها خيارًا رائعًا لصفحات AMP والويب بشكل عام. إذا كنت مهتمًا بالتركيز على AMP فقط، يمكنك تجاهل هذا الخيار.
الخيار 3: خادم HTTP Python
إذا كنت لا تستخدم Chrome أو كنت تواجه صعوبة في تثبيت إضافة Chrome، يمكنك أيضًا استخدام Python من سطر الأوامر لتشغيل خادم ويب محلي.
لتشغيل خادم HTTP المضمّن في Python من سطر الأوامر، ما عليك سوى تنفيذ ما يلي:
python -m SimpleHTTPServer
ويمكنك الوصول إلى عنوان URL هذا:
http://localhost:8000/article.amp.html
4. التعرّف على مكوّنات AMP الأساسية
يتيح لنا نظام المكوّنات في AMP إنشاء ميزات فعّالة ومتجاوبة بسرعة في مقالاتنا بأقل جهد ممكن. تتضمّن مكتبة JavaScript الأساسية في AMP ضمن العلامة <head> العديد من المكوّنات الأساسية:
- amp-ad: حاوية لعرض إعلان
- amp-img: بديل لعلامة img في HTML
- amp-pixel: يُستخدَم كبكسل تتبُّع لحساب عدد مرات مشاهدة الصفحة.
- amp-video: بديل لعلامة الفيديو HTML5
يمكن استخدام جميع المكوّنات الأساسية المذكورة أعلاه على الفور في مستند AMP. يستخدم رمز المثال amp-img في صفحتنا، وقد استكشفنا كيفية ارتباطه بنظام تصميم AMP في الدرس التطبيقي حول ترميز أسس إنشاء صفحات AMP، لذا لنستكشف amp-ad في الفصل التالي.
5- إضافة إعلان
يجب أن تكون صفحة article.amp.html النموذجية على النحو التالي:
<!doctype html>
<html ⚡ lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<link rel="canonical" href="/article.html">
<link rel="shortcut icon" href="amp_favicon.png">
<title>News Article</title>
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<style amp-custom>
body {
width: auto;
margin: 0;
padding: 0;
}
header {
background: Tomato;
color: white;
font-size: 2em;
text-align: center;
}
h1 {
margin: 0;
padding: 0.5em;
background: white;
box-shadow: 0px 3px 5px grey;
}
p {
padding: 0.5em;
margin: 0.5em;
}
</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"https://example.com/my-article.html"
},
"headline": "My First AMP Article",
"image": {
"@type": "ImageObject",
"url": "https://example.com/article_thumbnail1.jpg",
"height": 800,
"width": 800
},
"datePublished": "2015-02-05T08:00:00+08:00",
"dateModified": "2015-02-05T09:20:00+08:00",
"author": {
"@type": "Person",
"name": "John Doe"
},
"publisher": {
"@type": "Organization",
"name": "⚡ AMP Times",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/amptimes_logo.jpg",
"width": 600,
"height": 60
}
},
"description": "My first experience in an AMPlified world"
}
</script>
</head>
<body>
<header>
News Site
</header>
<article>
<h1>Article Name</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam egestas tortor sapien, non tristique ligula accumsan eu.</p>
<amp-img src="mountains.jpg" layout="responsive" width="266" height="150"></amp-img>
</article>
</body>
</html>
الصفحة أعلاه هي صفحة بسيطة، وأكثر ما يميّزها هو أنّها تجتاز عملية التحقّق من صحة كلّ من AMP والبيانات الوصفية الخاصة بمحركات البحث في Schema.org. إذا تم نشر هذه الصفحة على موقع إلكتروني للأخبار، ستكون مؤهّلة للإدراج في منصة العرض الجديدة بعناصر متغيّرة على "بحث Google" المخصّصة لمحتوى AMP، لذا فهي نقطة بداية رائعة لعملنا.
قبل تعديل الصفحة، لنفتح "أدوات مطوّري برامج Chrome". عند العمل على موقع إلكتروني (خاصةً موقع إلكتروني مخصّصًا للأجهزة الجوّالة)، من المستحسن عادةً محاكاة تجربة الأجهزة الجوّالة عند الاختبار في المتصفّح. ابدأ بفتح Play Console في Chrome من خلال Menu > More Tools > Developer Tools:

الآن، افحص ناتج JavaScript في "لوحة بيانات المطوِّر". تأكَّد من اختيار علامة التبويب "وحدة التحكّم":

انقر الآن على زر محاكاة الجهاز في "وحدة تحكّم المطوّرين". يتم تمثيلها بهاتف وجهاز لوحي بجانب بعضهما البعض:

في القائمة التي تظهر، اضبط الجهاز على "Nexus 5X":

يمكننا الآن البدء في العمل على الصفحة نفسها. لنحاول إضافة إعلان إلى مقالة AMP.
يتم إنشاء جميع الإعلانات في AMP باستخدام المكوّن amp-ad. باستخدام هذا المكوّن، يمكننا ضبط إعلاناتنا بعدّة طرق، مثل العرض والارتفاع ووضع التنسيق. ومع ذلك، ستتطلّب العديد من المنصات الإعلانية إعدادات إضافية، مثل رقم تعريف الحساب على الشبكة الإعلانية، أو الإعلان الذي يجب عرضه، أو خيارات استهداف الإعلانات. بالنسبة إلى amp-ad، ما عليك سوى ملء الخيارات المختلفة المطلوبة كسمات HTML.
ألقِ نظرة على هذا المثال لإعلان Double Click:
<amp-ad
width="300"
height="250"
type="doubleclick"
data-slot="/35096353/amptesting/image/static">
</amp-ad>
كما ترى، هذا إعداد بسيط للغاية. دوِّن سمة type، فهذه السمة تُعلم مكوّن amp-ad بمنصة الإعلانات التي تريد استخدامها. في هذه الحالة، أردنا منصة Double Click، وبالتالي كانت قيمة النوع هي doubleclick.
تكون السمة data-slot أكثر تميزًا. أي سمات تبدأ بـ data- في amp-ad هي سمات خاصة بالمورّد. وهذا يعني أنّ بعض البائعين قد لا يحتاجون إلى هذه السمة أو قد لا يتفاعلون معها حتى إذا تم توفيرها. على سبيل المثال، قارِن بين مثال Double Click أعلاه وإعلان اختباري من منصة A9:
<amp-ad
width="300"
height="250"
type="a9"
data-aax_size="300x250"
data-aax_pubname="test123"
data-aax_src="302">
</amp-ad>
حاوِل إضافة المثالَين أعلاه إلى مقالتك بعد علامة <header> مباشرةً. أعِد تحميل الصفحة، وسيظهر إعلانان اختباريان:

لنستكشف بعض الخيارات الإضافية المتاحة للاستخدام مع Double Click. جرِّب إضافة إعدادَي استهداف جغرافي للإعلانات إلى صفحتك:
<amp-ad
width="300"
height="250"
type="doubleclick"
data-slot="/35096353/amptesting/geo/uk">
<div fallback>No ad appeared because you're not browsing from the UK!</div>
</amp-ad>
<amp-ad
width="300"
height="250"
type="doubleclick"
data-slot="/35096353/amptesting/geo/us">
<div fallback>No ad appeared because you're not browsing from the US!</div>
</amp-ad>
للأسف، لا يمكن التحكّم في الاستهداف الجغرافي من رمز الصفحة نفسه. ومع ذلك، تمّت إعداد هذه الإعلانات التجريبية مسبقًا في لوحة بيانات "DoubleClick" لعرضها في بلدان معيّنة فقط، وتحديدًا في المملكة المتحدة والولايات المتحدة الأمريكية.
يُرجى إعادة تحميل الصفحة وإلقاء نظرة. تم أخذ لقطة الشاشة التالية من أستراليا، لذا لا يتم تحميل أي من الإعلانين:

يوضّح مثال الاستهداف الجغرافي أعلاه كيف أنّ amp-ad مرن بما يكفي لجميع أنواع ميزات المنصات الإعلانية.
في ما يلي شبكات المواقع الإعلانية المتاحة حاليًا:
- A9
- Adblade
- Adform
- AdReactor
- AdSense
- AdTech
- Criteo
- Dot and Media
- Doubleclick
- Flite
- Industrybrains
- OpenX
- plista
- Smart AdServer
- Yieldmo
- Revcontent
- TripleLift
- Teads
- I-Mobile
- Webediads
احرص على الاطّلاع على صفحة المستندات الخاصة بمكوّن إعلان AMP للحصول على معلومات حول أحدث المنصات الإعلانية المتوافقة.
في الفصل التالي، سنتعرّف على المزيد من مكوّنات AMP المتقدّمة وكيفية تضمينها في مستندات AMP.
6. توسيع المحتوى باستخدام المكوّنات الموسّعة
من المفترض أنّ لديك الآن مستند AMP أساسي يتضمّن نصًا وصورة وحتى إعلانًا مضمّنًا في الصفحة، وكلّها عناصر أساسية لسرد قصة وتحقيق الربح من المحتوى. ومع ذلك، غالبًا ما تتضمّن المواقع الإلكترونية الحديثة وظائف أكثر من مجرد صور ونصوص.
لذا، دعونا ننتقل بمستند AMP إلى مستوى أعلى ونستكشف المكوّنات المتاحة بالإضافة إلى المكوّنات الأساسية المذكورة سابقًا.
في هذا الفصل، سنحاول إضافة المزيد من وظائف الويب المتقدّمة التي يتم العثور عليها عادةً في المقالات الإخبارية:
- فيديوهات على YouTube
- مشاركات Tweet
- اقتباسات من المقالات
تضمين فيديو YouTube
لنجرّب تضمين فيديو على YouTube في المستند. سيؤدي الرمز التالي إلى تضمين فيديو، إضافته إلى صفحتك:
<amp-youtube
data-videoid="mGENRKrdoGY"
layout="responsive"
width="480"
height="270">
<div fallback>
<p>The video could not be loaded.</p>
</div>
</amp-youtube>
أعِد تحميل الصفحة وانظر إليها. من المفترض أن يظهر لك هذا النص بدلاً من الفيديو: "تعذَّر تحميل الفيديو".
ستتلقّى رسالة الخطأ هذه حتى إذا كان بإمكان المتصفّح عرض فيديوهات YouTube بدون أي مشاكل. لماذا؟ لم يتعذّر تحميل الفيديو، بل تعذّر تحميل المكوّن نفسه.
يُرجى العِلم أنّ بعض المكوّنات غير مضمّنة في ملف JavaScript الأساسي لمكتبة AMP. علينا تضمين طلب JavaScript إضافي لمكوّن YouTube على وجه الخصوص. ستتطلّب جميع المكوّنات باستثناء مجموعة أساسية مراجع JavaScript الإضافية هذه.
أضِف الطلب التالي إلى علامة <head>:
<script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-0.1.js"></script>
أعِد تحميل الصفحة وسيظهر لك فيديو على YouTube:

لقد حدّدنا مرة أخرى عرض الفيديو وارتفاعه لكي يتمكّن نظام تنسيق AMP من احتساب نسبة العرض إلى الارتفاع. بالإضافة إلى ذلك، تم ضبط نوع التنسيق على "متجاوب"، ما يعني أنّ هذا الفيديو سيملأ عرض العنصر الرئيسي.
مزيد من المعلومات حول مكوّن YouTube
عرض تغريدة
يُعد تضمين تغريدات من Twitter منسَّقة مسبقًا ميزة شائعة في المقالات الإخبارية. يمكن لمكوّن Twitter في AMP توفير هذه الوظيفة بسهولة.
ابدأ بإضافة طلب JavaScript التالي إلى العلامة <head> في مستندك:
<script async custom-element="amp-twitter" src="https://cdn.ampproject.org/v0/amp-twitter-0.1.js"></script>
الآن، في مقالتك، أضِف الرمز التالي لتضمين التغريدة نفسها:
<amp-twitter
width="486"
height="657"
layout="responsive"
data-tweetid="638793490521001985">
</amp-twitter>
السمة data-tweetid هي مثال آخر على سمة مخصّصة يطلبها مورّد منصة معيّن. في هذه الحالة، يتعرّف Twitter على السمة data-tweetid على أنّها تتوافق مع تغريدة معيّنة سيتم تضمينها في الصفحة.
أعِد تحميل المتصفح وألقِ نظرة على الصفحة. من المفترض أن تظهر التغريدة:

مزيد من المعلومات عن مكوّن Twitter
تمييز اقتباس من مقالة
من العناصر الشائعة في المقالات الإخبارية تمييز مقتطفات نصية جذابة بشكل خاص من المقالة. على سبيل المثال، قد يتم تكرار اقتباس من مصدر معيّن أو حقيقة مهمة بخط أكبر لجذب انتباه القارئ.
ومع ذلك، بما أنّ بعض الاقتباسات أو المقتطفات النصية ليست بالضرورة بنفس طول سلسلة الأحرف، قد يكون من الصعب تحقيق التوازن بين حجم الخط الأكبر ومقدار المساحة التي سيشغلها النص المعيّن على الصفحة.
تتضمّن AMP مكوّنًا آخر مخصّصًا لهذا النوع من الحالات يُسمى amp-fit-text. تتيح لك هذه السمة تحديد عنصر بعرض وارتفاع ثابتَين وحد أقصى لحجم الخط. يضبط المكوّن حجم الخط بشكل ذكي ليناسب نص الاقتباس ضمن العرض والارتفاع المتاحَين.
لِنجرّب ذلك أولاً، أضِف مكتبة المكوّن إلى العلامة <head>:
<script async custom-element="amp-fit-text" src="https://cdn.ampproject.org/v0/amp-fit-text-0.1.js"></script>
أضِف ما يلي إلى صفحتك:
<amp-fit-text width="400" height="75" layout="responsive" max-font-size="42">
Big, bold article quote goes here.
</amp-fit-text>
أعِد تحميل الصفحة واطّلِع على النتيجة.
الآن، جرِّب المزيد. ماذا يحدث إذا كان الاقتباس أقصر بكثير؟
<amp-fit-text width="400" height="75" layout="responsive" max-font-size="42">
#YOLO
</amp-fit-text>
أو اقتباس أطول؟
<amp-fit-text width="400" height="75" layout="responsive" max-font-size="42">
And the Raven, never flitting, still is sitting, still is sitting. On the pallid bust of Pallas just above my chamber door; And his eyes have all the seeming of a demon's that is dreaming, And the lamp-light o'er him streaming throws his shadow on the floor; And my soul from out that shadow that lies floating on the floor. Shall be lifted—nevermore!
</amp-fit-text>
كتجربة أخيرة مع amp-fit-text، حاوِل إنشاء نص قصير مثل #YOLO بارتفاع أكبر بكثير، مثلاً قيمة 400، مع الحفاظ على قيمة السمة max-font-size البالغة 42. كيف ستبدو الصفحة الناتجة؟ هل يتوسّط النص عموديًا أم يتم تقليل ارتفاع علامة amp-fit-text لتلائم الحد الأقصى لحجم الخط؟ استنادًا إلى معلوماتك حول نظام تنسيقات AMP، حاوِل الإجابة عن السؤال قبل تعديل المستند.
7. العروض الدوّارة المعقّدة
من الميزات الشائعة الأخرى في تطوير الويب العرض الدوّار. تتضمّن AMP مكونًا عامًا مصمّمًا لتلبية هذه الحاجة. لنبدأ بمثال بسيط، مثل لوحة عرض دوّارة للصور.
تذكَّر تضمين مكتبة عناصر لوحة العرض الدوّارة من خلال إضافة طلب JavaScript التالي إلى العلامة <head> في مستندك:
<script async custom-element="amp-carousel" src="https://cdn.ampproject.org/v0/amp-carousel-0.1.js"></script>
بعد ذلك، سنضمّن منصة عرض بسيطة لصور بتصميم متجاوب وعرض وارتفاع محدّدين مسبقًا. أضِف ما يلي إلى صفحتك:
<amp-carousel layout="fixed-height" height="168" type="carousel" >
<amp-img src="mountains-1.jpg" width="300" height="168"></amp-img>
<amp-img src="mountains-2.jpg" width="300" height="168"></amp-img>
<amp-img src="mountains-3.jpg" width="300" height="168"></amp-img>
</amp-carousel>
أعِد تحميل صفحتك، ومن المفترض أن تظهر لك لوحة عرض دوّارة في صفحتك:

يمكن ضبط مكوّن لوحة العرض الدوّارة بعدة طرق. جرِّب تغيير النوع إلى slides بدلاً من ذلك واطّلِع على النتيجة. احرص على تغيير السمة layout الخاصة بالعنصر amp-carousel والصور داخله إلى responsive أيضًا.
بدلاً من قائمة العناصر التي يمكن الانتقال بينها، سيظهر عنصر واحد في كل مرة. جرِّب التمرير السريع أفقيًا للتنقّل بين العناصر. إذا مرّرت سريعًا إلى العنصر الثالث، لن تتمكّن من التمرير سريعًا إلى أي عنصر آخر.
بعد ذلك، أضِف السمة loop. أعِد تحميل الصفحة وحاوِل التمرير سريعًا إلى اليسار على الفور. تتكرّر اللوحة الدوّارة بلا نهاية.
أخيرًا، لنضبط هذا العرض الدوّار على التشغيل التلقائي بمعدّل كل ثانيتَين. أضِف السمة autoplay إلى الصفحة وسمة التأخير بالقيمة 2000 على النحو التالي: delay="2000".
يجب أن تبدو النتيجة النهائية على النحو التالي:
<amp-carousel layout="responsive" width="300" height="168"
type="slides" autoplay delay="2000" loop>
<amp-img src="mountains-1.jpg" width="300" height="168" layout="responsive"></amp-img>
<amp-img src="mountains-2.jpg" width="300" height="168" layout="responsive"></amp-img>
<amp-img src="mountains-3.jpg" width="300" height="168" layout="responsive"></amp-img>
</amp-carousel>
أعِد تحميل الصفحة وجرِّبها.
تُعدّ منصات العرض المتغيّرة للصور رائعة، ولكن ماذا لو أردنا أن يظهر محتوى أكثر تعقيدًا في منصة العرض المتغيّرة؟ لنجرّب إضافة بعض التنوّع من خلال وضع إعلان وبعض النصوص والصور معًا في لوحة عرض دوّارة واحدة. هل يمكن لمكوّن amp-carousel التعامل مع هذا المزيج كله في آن واحد؟ بالتأكيد.
لنبدأ بإضافة هذا التصميم إلى الصفحة لضمان عمل مكوّنَي amp-fit-text وamp-carousel معًا بأمان:
amp-fit-text {
white-space: normal;
}
جرِّب الآن وضع رمز منصة العرض الدوّارة التالي في صفحتك:
<amp-carousel layout="fixed-height" height="250" type="carousel" >
<amp-img src="blocky-mountains-1.jpg" width="300" height="250"></amp-img>
<amp-ad width="300" height="250"
type="doubleclick"
data-slot="/35096353/amptesting/image/static">
<div placeholder>This advert is still loading.</div>
</amp-ad>
<amp-fit-text width="300" height="250" layout="fixed">
Big, bold article quote goes here.
</amp-fit-text>
</amp-carousel>
أعِد تحميل الصفحة، وسيظهر لك ما يلي:


8. التتبُّع باستخدام amp-analytics
يتم عادةً دمج منصّات الإحصاء في المواقع الإلكترونية من خلال مقتطفات JavaScript المضمّنة واستدعاءات الدوال التي تؤدي إلى تشغيل الأحداث التي يتم إرسالها مرة أخرى إلى نظام الإحصاء. توفّر AMP بنية مرنة لضبط JSON لتكرار هذه العملية مع العديد من شركاء التحليلات.
في ما يلي مثال على تتبُّع "إحصاءات Google" المستند إلى JavaScript التقليدي والذي سنعيد كتابته بتنسيق JSON الخاص بمكوّن amp-analytics. أولاً، نهج JavaScript التقليدي:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
ما ورد أعلاه بسيط جدًا، فهو يرسل إشعارًا بحدث مشاهدة صفحة على الويب ليتم تتبُّعه.
لتكرار كل ما سبق في مكوّن amp-analytics، علينا أولاً تضمين مكتبة المكوّنات في <head> المستند:
<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>
ثم نضمّن المكوّن على النحو التالي:
<amp-analytics type="googleanalytics">
<script type="application/json">
{
"vars": {
"account": "UA-YYYY-Y"
},
"triggers": {
"default pageview": {
"on": "visible",
"request": "pageview",
"vars": {
"title": "Name of the Article"
}
}
}
}
</script>
</amp-analytics>
قد يبدو الأمر أكثر تعقيدًا، ولكنّه في الواقع تنسيق مرن جدًا لوصف عدة أنواع مختلفة من الأحداث. بالإضافة إلى ذلك، لا يتضمّن تنسيق JSON مجموعة رموز JavaScript في المثال التقليدي، ما قد يؤدي إلى حدوث أخطاء في حال تعديلها عن طريق الخطأ.
في تنسيق JSON، يتضمّن مفتاح المشغّلات مجموعة من المفاتيح التي تمثّل جميع مشغّلات الأحداث التي سنتتبّعها، ومفاتيح هذه المشغّلات هي أوصاف للحدث، مثل "مشاهدة صفحة على الويب التلقائية" في المثال أعلاه. تتعلّق قيمة مفتاح العنوان باسم الصفحة التي يتم عرضها.
بتوسيع المثال أعلاه، يمكننا إضافة مشغّل آخر "click on #header trigger":
<amp-analytics type="googleanalytics">
<script type="application/json">
{
"vars": {
"account": "UA-YYYY-Y"
},
"triggers": {
"default pageview": {
"on": "visible",
"request": "pageview",
"vars": {
"title": "Name of the Article"
}
},
"click on #header trigger": {
"on": "click",
"selector": "#header",
"request": "event",
"vars": {
"eventCategory": "examples",
"eventAction": "clicked-header"
}
}
}
}
</script>
</amp-analytics>
يعمل عامل التشغيل هذا تمامًا كما يبدو، فباستخدام أداة اختيار DOM "#header"، يمكننا البحث عن علامة تحمل المعرّف "header"، وعندما يتم "النقر" عليها أو النقر على الجهاز، نرسل إجراء حدث "clicked-header" إلى منصة الإحصاءات مع تصنيف "أمثلة".
إذا كان لديك منصة تتبُّع مخصّصة تريد دمجها، سيظلّ بإمكانك استخدام amp-analytics وتحديد نقاط نهاية عناوين URL المخصّصة لمعلومات التتبُّع. يمكنك الاطّلاع على مزيد من المعلومات عن مكوّن amp-analytics هنا.
9- التنقّل في موقعك الإلكتروني
من المتطلبات الشائعة للمواقع الإلكترونية المتوافقة مع الأجهزة الجوّالة تضمين قائمة تنقّل في الموقع. يمكن أن تتخذ هذه القوائم أشكالاً مختلفة. في ما يلي بعض الأمثلة على كيفية عرض عناصر التنقّل في مستند AMP:
- إضافة رابط يؤدي إلى صفحتك الرئيسية، وهو الخيار الأبسط
- قائمة عناوين فرعية من خلال مكوّن لوحة العرض الدوّارة
رابط الصفحة الرئيسية
أبسط طريقة لإتاحة خيارات التنقّل العادية في موقعك الإلكتروني للمستخدمين هي إعادة توجيههم إلى واجهة موقعك الإلكتروني العادية.
جرِّب إضافة رابط HTML هذا إلى العلامة <header>:
<header>
<a href="homepage.html">
<amp-img class="home-button" src="icons/home.png" width="36" height="36"></amp-img>
</a>
News Site
</header>
وأضِف هذه القاعدة إلى CSS المضمّن:
.home-button {
float: left;
}
الآن، أعِد تحميل الصفحة. من المفترض أن يظهر لك رابط في أعلى يمين الصفحة يشير إلى homepage.html. إذا نقرت على هذا الرابط، ستلاحظ سريعًا أنّه لا يؤدي إلى أي مكان.

يمكن استبدال هذا الرابط بعنوان URL الخاص بالصفحة الرئيسية لموقعك الإلكتروني لتمكين المستخدمين من الانتقال إلى أجزاء أخرى من موقعك الإلكتروني من خلال شريط التنقّل العادي في موقعك الإلكتروني.
كما ذكرنا، هذه هي أبسط طريقة متاحة، وهي تستفيد من التنقّل الحالي في موقعك الإلكتروني. بعد ذلك، سنستكشف بديلَين.
قائمة العناوين الفرعية
هناك طريقة أخرى لحلّ هذه المشكلة، وهي عرض قائمة التنقّل في موقعك الإلكتروني داخل مستند AMP. لإبقاء المحتوى محصورًا في قسم صغير من صفحتك، يمكننا استخدام لوحة عرض دوّارة لتقديم قائمة قابلة للتمرير أسفل عنوان الموقع الإلكتروني.
بما أنّنا نحتاج إلى مكوّن لوحة العرض الدوّارة، احرص على إضافة JavaScript الخاص بالمكوّن إلى العلامة <head> في صفحتك:
<script async custom-element="amp-carousel" src="https://cdn.ampproject.org/v0/amp-carousel-0.1.js"></script>
جرِّب إضافة مقتطف HTML هذا أسفل علامتك <header> مباشرةً:
...
</header>
<div class="sub-menu">
<amp-carousel layout="fixed-height" height="38" type="carousel">
<a href="#example1">Example 1</a>
<a href="#example2">Example 2</a>
<a href="#example3">Longer Named Example 3</a>
<a href="#example4">Example 4</a>
<a href="#example5">Example 5</a>
<a href="#example6">Example 6</a>
</amp-carousel>
</div>
<article>
...
وأضِف هذه القواعد إلى CSS المضمّن:
.sub-menu {
background: black;
}
.sub-menu a {
display: block;
background: tomato;
margin: 5px;
padding: 5px;
color: white;
text-decoration: none;
}
الآن، أعِد تحميل الصفحة. من المفترض أن تظهر قائمة بالروابط أسفل عنوان مقالتك. يمكن التنقّل في هذه القائمة أفقيًا لتخزين العديد من روابط التنقّل.

يُعدّ التنقّل في القائمة الفرعية طريقة رائعة لتخزين الكثير من الروابط بدون استهلاك مساحة كبيرة على صفحتك.
10. إضافة خطوط
كما ذكرنا سابقًا، لا يُسمح بطلبات أوراق الأنماط الخارجية في مستندات AMP. ومع ذلك، هناك استثناء واحد لهذه القاعدة، وهو الخطوط.
تشكّل الخطوط جزءًا مهمًا من تجربة قراءة المقالات لمستخدمي الويب، وبما أنّ متصفّحات الويب تسترد ملفات الخطوط من خلال طلبات أوراق الأنماط الخارجية، فإنّ هذا الاستبعاد في AMP ضروري.
لنجرّب إضافة مرجع إلى خط Raleway في المستند:
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Raleway">
الآن، عدِّل ملف CSS ليشمل مرجعًا إلى Raleway:
body {
width: auto;
margin: 0;
padding: 0;
font-family: 'Raleway', sans-serif;
}
أعِد تحميل صفحتك واطّلِع على شكلها الجديد. افحص أيضًا نتائج أداة التحقّق، وستلاحظ أنّه لا توجد أي شكاوى بشأن هذا الطلب الخارجي.
11. تهانينا!
لقد أنهيت الدرس التطبيقي حول ترميز AMP المتقدّم واستكشفت بنجاح العديد من المكوّنات الرئيسية في AMP.
نأمل أن يكون من الواضح لك كيف يمكن استخدام amp-ad وamp-analytics لدعم جميع أنواع المنصات الإعلانية ومورّدي الإحصاءات المختلفين. احرص على استكشاف القائمة الكاملة بمكوّنات AMP المتاحة.
في ما يلي بعض المواضيع والروابط الإضافية التي قد تهمّك لاستكشافها وتعزيز مهاراتك بشكل أكبر.
- AMP بالمثال: كتالوج شامل لأمثلة على مكوّنات AMP وأنماط المكوّنات
- أمثلة على إعلانات النقر المزدوج: فهرس شامل لأمثلة amp-ad.
- كل ما يهمّك حول ميزة "اقتراحات"
- علامات HTML غير مسموح بها
- قواعد CSS والرسوم المتحركة المحظورة
- مزيد من المعلومات عن إطارات iframe
- شبكة توصيل المحتوى (CDN) من AMP
- قائمة بمكوّنات AMP المتاحة