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

قالب typography تحويل قالب Typography ثابت إلى قالب ووردبريس


عمر الوريكات

html-to-wordpress.png

هذا هو الدرس الأخير من هذه السلسلة، ففي الدرس الأول قمنا بتصميم الواجهة باستخدام برنامج الفوتوشوب، وفي الدرس الثاني قمنا بتحويل التصميم إلى نموذج HTML5، أمّا في هذا الدرس فسوف نقوم ببناء قالب ووردبريس كامل وجاهز للاستخدام.

Figure1-typo-wordpress-theme-sm.jpg

إذا كان هذا هو أول درس تتابعه من هذه السلسلة فدعني أخبرك قليلًا عنها. أردنا في هذه السلسلة بناء قالب ووردبريس كامل، وكما ذكرت سابقًا فهذا هو الدرس الثالث والأخير من هذه السلسلة. وقلنا بأنّ اسم القالب سيكون "Typo" وبأنه سيعتمد بشكل كلي على فن Typography من دون استعمال أي صور حتى يكون التركيز بالكامل على المحتوى.

اضغط هنا لمعاينة القالب بشكله النهائي.

ملفات قالب الووردبريس

Figure2-files.png

بما أنّ القالب بسيط فسوف نقوم بإنشاء القالب باستخدام ملفات القوالب المعتادة والمألوفة، كما أنّه سيتم تقسيم نموذج HTML5 الذي قمنا بإنشائه سابقًا على ملفات القالب من أجل إنشاء الصفحات المختلفة للقالب. سنقوم أيضًا بنسخ جميع الصور وملفات CSS إلى مجلد القالب.

ملف Style.css الخاص بالقالب

Theme Name: Typo
Theme URI: http://blog.spoongraphics.co.uk/
Description: A premium theme by Chris Spooner of Blog.SpoonGraphics.
Version: 1.0
Author: Chris Spooner
Author URI: http://blog.spoongraphics.co.uk/
body, div, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, img, form, fieldset, input, textarea, blockquote {
	margin: 0; padding: 0; border: 0;
}
body {
	background: #dedede url(images/bg.jpg);
	font-family: 'Droid Serif', serif; font-size: 14px;
	line-height: 24px;
	color: #666;
}

قمنا في بداية الملف بإضافة مجموعة من التفاصيل التي تخص القالب حتى يتعرف عليه الووردبريس، كما أننا قمنا بنسخ بعض التنسيقات الموجودة في نموذج HTML5 الذي أنشأناه سابقًا.

ملف Header.php

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>
    <link href="<?php bloginfo('stylesheet_url'); ?>" rel="stylesheet" />
    <link href="http://fonts.googleapis.com/css?family=Droid+Serif:400,400italic" rel="stylesheet" />
    <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!--[if lt IE 9]>
    <link href="<?php bloginfo('template_url); ?>/css/ie.css" rel="stylesheet" />
    <![endif]-->
    
    <!--WP generated header-->
    <?php wp_head(); ?>
    <!--End WP generated header-->
    
</head>

<body>

  <div id="container">
    <header>
      <h1><a href="<?php echo get_option('home'); ?>" title="Return to the hompage">Typo</a></h1>
      
      <nav role="navigation">
        <ul>
          <li><a href="<?php echo get_option('home'); ?>">Home</a></li>
          <?php wp_list_pages('title_li=' ); ?>
        </ul>
      </nav>
    </header>

قمنا بنسخ الجزء الأول من الشيفرة البرمجية الموجودة في ملف index.html الخاص بالنموذج إلى ملف header.php. فقد قمنا بنسخ كل شيء ابتداءً من Doctype وانتهاءً بمحتويات الوسم <head> ووضعناه في ملف header.php، بعد ذلك أضفنا بعض الوسوم الخاصة بقوالب ووردبريس، وكمثال على ذلك فقد قمنا بإضافة <? ;()php wp_title?> لإظهار عنوان التدوينة أو الصفحة و<? ;('php wp_list_pages('title_li?> لعرض قائمة بجميع الصفحات، فالقيمة title_li استخدمت لإزالة الإعداد الإفتراضي الذي يقوم بإظهار العنوان "Pages" أعلى القائمة.

ملف Index.php

<?php get_header(); ?>

  <div id="content" role="main">

    <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>

      <article <?php post_class(); ?>>
        <h2 class="post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

        <? php the_content(''); ?>

        <ul class="postinfo">
          <li><?php the_time('jS F Y'); ?></li>
          <li>Posted in <?php the_cetegory(', '); ?></li>
          <li><a href="<? php the_permalink(); ?>">Continue Reading &raquo;</a></li>
        </ul>
    </article>

    <?php endwhile; ?>

    <nav id="pagination">
      <ul>
        <li class="older"><?php next_posts_link('Older posts'); ?></li>
        <li class="newer"><?php previous_posts_link('Newer posts'); ?></li>
      </ul>
    </nav>

    <? php else : ?>

    <article class="nothing">
      <h2>Nothing Found</h2>
      <p>Sorry, but you are looking for something that isn't here</p>
      <p><a href="<?php echo get_option('home'); ?>">Return to the homepage</a></p>
    </article>

    <?php endif; ?>

  </div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

قمنا بعد ذلك بنسخ الشيفرات البرمجية من عند نهاية ما هو موجود في ملف header.php وحتى بداية القائمة الجانبية، بعدها أضفنا حلقة ووردبريس (WordPress loop) لنتفحص فيما إذا كان هناك محتوى/تدوينات أم لا. وإذا كنت تذكر ففي ملف HTML الثابت الذي أنشأناه سابقًا قمنا بوضع 3 تدوينات بنصوص عشوائية، ولكننا الآن لن نحتاج لها لأن الووردبريس سوف يعرض التدوينات باستخدام الكود الموجود بين while وendwhile، ففي داخل هذه الحلقة تبقى بنية HTML موجودة ولكن العناصر التي تحتاج أن تكون متغيرة/ديناميكية (dynamic) استُبدِلت بوسوم PHP مناسبة، فعلى سبيل المثال فإنّ الكود <? ;()php the_permalink?> سوف يعرض عنوان URL الخاص بالتدوينة داخل وسم <a> وأمّا الكود <? ()php the_category?> سوف يقوم بعرض فئة التدوينة.

وبالنسبة للمحتوى العشوائي فإنه يمكن استبداله بوسم واحد وهو <? ;()php the_content?> بحيث سيقوم الووردبريس بإدخال كل المحتوى المحفوظ في قاعدة البيانات من محرر النصوص بدل ذلك الوسم.

أمّا في أعلى وأسفل هذا الملف فقد قمنا باستدعاء ملفات القالب للحصول على صفحة كاملة، فالوسم <? ;()php get_header?> يقوم بمناداة وإدخال ملف header.php، بينما يقوم الوسم <?  ;()php get_sidebar?> بمناداة وإدخال ملف sidebar.php وهكذا بالنسبة لجميع الملفات.

ملف Sidebar.php

<aside id="sidebar">
      <section id="about">
        <h3>About me</h3>
        <p><?php echo get_option('omr_about_excerpt');?> <a href="<?php echo get_option('omr_about_link');?>">Find out more &raquo;</a></p>
      </section>
      <section id="categories">
        <h3>Categories</h3>
        <ul>
          <?php wp_list_categories('show_count=0&title_li=&hide_empty=0&exclude=1'); ?>
        </ul>
      </section>
      <section id="social">
        <h3>Social</h3>
        <ul>
          <?php if( !get_option('omr_social-one') ) { ?>
          <?php } else { ?>
            <li><a href="<?php echo get_option('omr_social-one_url');?>"><?php echo get_option('omr_social-one');?></a></li>
          <?php } ?>
          <!-- more custom tags for theme settings page -->          
          <?php if( !get_option('omr_social-six') ) { ?>
          <?php } else { ?>
            <li><a href="<?php echo get_option('omr_social-six_url');?>"><?php echo get_option('omr_social-six');?></a></li>
            <?php } ?>
        </ul>
      </section>  
      <section id="latest">
        <h3>Latest Posts</h3>
        <ul>
          <?php query_posts('showposts=6');
            if ( have_posts() ) : whitle ( have_posts() ) : the_post();?>
          <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>  
          <?php endwhile; else: ?>
            <li>No posts found</li>
          <?php endif;?>
        <?php wp_reset_query();?>
        </ul>
      </section>
      
      <section id="search" role="search">
        <h3>Search</h3>
        <form action="<?php bloginfo('url'); ?>/" method="get">
          <fieldset>
            <input type="text" id="searchbar" placeholder="I'm looking for&hellip;" name="s" />
            <input type="submit" id="searchsubmit" value="Search" />
          </fieldset>
        </form>
      </section>        
    </aside>

الجزء التالي هو القائمة الجانبية بحيث تكون عناصره بين وسمي <aside>. نفس القاعدة تنطبق على أي محتوى عشوائي بحيث يتم استبداله بوسم PHP بحيث يتم ادخال المحتوى بشكل ديناميكي. ومن الأمثلة على ذلك <? ;()php wp_list_categories?> مع مجموعة من المتغيرات لتخصيص مخطّط الصفحة (layout).

في هذا القالب هناك الكثير من الوسوم المخصصة التي تسمح للمستخدم بتخصيص القالب كما يريد باستخدام صفحة إعدادات خاصة، فجميع الوسوم التي تبدأ بـ _omr تقوم باستدعاء إعدادات مخصصة مثل جزء About وروابط الشبكات الاجتماعية.

ملفات Archive.php وSearch.php

<footer>
      <ul id="credits">
        <li class="wordpress"><a href="http://wordpress.org">Powered by WordPress</a></li>
        <li class="spoonghraphics"><a href="http://blog.spoongraphics.co.uk">Theme by SpoonGrahpics</a></li>
      </ul>
      <p id="back-top"><a href="#">Back to top</a></p>
      
    </footer>
  </div>
  
  <!-- <?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?> seconds. -->
  
  <!--WP generated footer-->
  <?php wp_footer(); ?>
  <!--END WP generated footer--> 
</body>
</html>

البنية الرئيسية للصفحة يتم إنشاؤها باستخدام header.php ،index.php ،sidebar.php وfooter.php، ولكن index.php تُستخدم فقط في الصفحة الرئيسية (إذا كانت هناك تدوينات ليتم عرضها على الصفحة الرئيسية). هناك بدائل لـ index.php يتم استخدامها لخصائص متعددة في المدونة مثل تصفح التدوينات بناءً على ترشيح (filter) معين (كالترشيح حسب الفئة أو التاريخ أو حتى حسب الكاتب)، أو عند تصفح التدوينات بناءً على نتيجة بحث معينة.
هنا يأتي دور archive.php وsearch.php، فمحتوى هذين الملفين يشبه إلى حد كبير محتوى ملف index.php باستثناء أنّ هذين الملفين يحتويان على عناوين إضافية لوصف المحتوى المعروض على الصفحة.

ملفات Page.php وSingle.php

<?php get_header(); ?>
   <div id="content" role=''main">
   <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
      <artic1e <?php post_c1ass(); ?>>
          <h2 c1ass="post-title"><?php the_title(); ?></h2>
          <?php the_content("); ?>
      </article>
<?php endwhile; ?>
<?php endif; ?>>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
<?php get_header(); ?>
   <div id="content" role=''main">
   <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
      <artic1e <?php post_c1ass(); ?>>
          <h2 c1ass="post-title"><?php the_title(); ?></h2>
          <?php the_content("); ?>
      </article>
<?php endwhile; ?>
<?php endif; ?>>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

عندما يتم تصفّح تدوينة أو صفحة واحدة فإنّ ملفات index.php ،archive.php أو search.php يتم استبدالها بملفات page.php أو single.php. هذه الملفات أيضًا متشابهة ولكن التخطيط الخاص بها عادةً لا يحتوي على بعض الخصائص مثل رابط العنوان (يصبح العنوان نص عادي وليس رابط)، معلومات التدوينة، اقرأ المزيد وروابط ترقيم الصفحات (pagination) لانّ هذه الأمور لم تعد مطلوبة ومهمة عند تصفح المحتوى أو التدوينات بشكل فردي. كما أنّ ملف single.php يحتوي على قسم التعليقات وقد تمت إضافته باستخدام وسم <? ;()php commentstemplate?>.

ملف Comments.php

<?php
 // Do not delete these lines 
if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) die (‘Please do not load this page directly. Thanks!');
if ( post_password_required() ) { ?>
    <p c1ass="nocomments">This post is password protected. Enter the password to view comments.</p>
<?php 
    return;
}
?>
<div id="comments">
    <h3><?php comments_number('No Comments‘, '1 Comment’, '% Comments’ );?></h3>
    <?php if ( have_comments() ) : ?>
<ol class="commentlist">
<?php wp_list_comments('avatar_size=&type=comment'); ?>

<div class="pagination">
    <p class="prev"><?php previous_comments_link(‘Older comments‘) ?></p>
    <p class="next"><?php next_comments_link(‘Newer comments‘) ?></p>  </diV>
<?php endif; ?>

<?php if ( comments_open() ) : ?>
  <div id="respond">
    <h3>Leave a response</h3>
      <form action="<?php echo get_option('siteurl'); ?> /wp-comments-post.php" method="post" id="commentform">
        <fieldset>
          <label for="author">Name:</label>
          <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" />

          <label for="email">Email:</label>
          <input type=“text" name="email" id="email" value="<?php echo $comment_author_email; ?>" />
  
          <label for="url">Website:</label>
          <input type="text" name="url" id="url" value="<?php echo scomment_author_url; ?>" />

          <label for="comment">Comment:</label>
          <textarea name="comment" id="comment” rows="" cols=""></textarea>  <input type="submit" class="commentsubmit" value="Submit" />

          <?php comment_id_fields(); ?>
          <?php do_action('comment_form', $post->ID); ?>
        </fieldset>
      </form>

      <p class="cancel"><?php cancel_comment_reply_link('Cancel Reply'); ?></p>
    </div>
    <?php else : ?>
      <h3>Comments are now closed.</h3>
    <?php endif; ?>
  </div><!--Comments-->

يمكنك القول بأنّ ملف comments.php هو أحد أكثر الملفات التي يمكن إعادة استخدامها في كل القوالب التي تصنعها لأنّ هذا الملف ومحتوياته لا يتغير كثيرًا. جميع التعليقات يتم إنشاؤها وإظهارها في الصفحة باستخدام وسم واحد فقط وهو <? ;()php wplistcomments?> ثم تحتاج إلى بعض تنسيقات CSS لتنسيق المحتوى، وفي نهاية الملف يوجد نموذج كتابة التعليقات.

خاتمة

Figure-testing.jpg

يمكنك بعد إنشاء جميع ملفات القاب أن تقوم برفعها واختبارها على مدونة ووردبريس. حاول بعد ذلك تعديل بعض الإعدادات وإضافة بعض المحتوى (كتابة تدوينةأو تعليق مثلًا) حتى تتأكد أنّ كل شيء يعمل كما هو مطلوب.

كما رأيت فعملية بناء قالب ووردبريس تتطلب نسخ ولصق العديد من الأكواد، وإذا كنت تبحث عن أي وسم لاستخدامه يمكنك اللجوء إلى موقع WordPress Codex فهو يحتوي على جميع الوسوم التي يمكنك استخدامها.

يمكنك معاينة القالب من هنا.

ترجمة -وبتصرف- للمقال: Create a Typography Based WordPress Blog Theme لصاحبه: Iggy.



1 شخص أعجب بهذا


تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن

×