سؤال

باستخدام وحدة Pathauto و Token في Drupal 6 سمح لك بإنشاء اسم مستعار عناوين URL باستخدام نمط مثل SO: [Termpath-Raw]/[title-Raw].

ومع ذلك ، فإن هذا ليس هو الحال في Drupal 7. أفهم أن D7 لا يزال في ألفا ، ولكن يبدو أن الإصدار التجريبي موجود هنا قريبًا جدًا وهو أجمل كثيرًا أن D6 IMO.

هل هذه الوظيفة غير متوفرة بعد؟

هل كانت مفيدة؟

المحلول

في دروبال 7 ، الكلمة طريق يعني شيئًا محددًا للغاية ، ويبدو أن شيئًا مختلفًا عن ماذا TermPath سوف تشير إلى ، ولا يبدو أن هناك أي إجراء تم اتخاذه لاستبدال [*path] الرموز بعد ذلك (على الرغم من أنها قضية معروفة): Bikeshed: رمز لمصطلح أو تسلسل هرمي لعنصر القائمة.

يبدو أيضًا أنه لن يدخل الأمر في جوهره ، وسيظل جزءًا من رمز المساهمين ، وحتى المشاريع التي تم تحضيرها في #D7CX تتمتع حتى الإصدار النهائي لإكمال منافذ Drupal 7 ، والتي يمكن أن تكون قريبة من نهاية عام.

نصائح أخرى

رمز الوحدة النمطية المشاركة هنا. هناك المزيد في العمل هنا لأن رموز التصنيف ليست بسيطة للغاية. إنهم الآن حقول ، ولم نكتب دعمًا رمزيًا لحقول D7 حتى الآن. إنه شيء يتعين علينا القيام به.

لقد كنت كسر رأسي عن هذه المشكلة منذ عدة أشهر ، ووجدت أخيرًا حلًا يبدو أنه يعمل:

http://drupal.org/node/741914#comment-5025862

باختصار ، قمت بإنشاء وحدة مخصصة تكشف عن عدد قليل من الرموز الإضافية (والتي يمكن استخدامها في وحدات مثل عنوان الصفحة أو Pathauto). في الكود-يتم استبدال الرموز المميزة بمسار التصنيف الهرمي الكامل لعقدة أو مصطلح التصنيف (هناك الرموز المميزة التي تهدف إلى عنوان URL وغيرها الذي يستهدف عنوان الصفحة).

يمكن العثور على التنفيذ الفعلي في المناقشة في الصفحة المرتبطة.

آمل أن يساعد هذا بعض الأشخاص في تطبيقاتهم الخاصة.

يمكنك استخدام ال التصنيف _entity_index وحدة مع بقع من قائمة انتظار القضية. الشيء الوحيد السيئ حقًا هو أنه يتعين عليك استخدام أمر drush لإنشاء الفهرس على موقع العمل أو إعادة استيعاب محتويات الموقع الحالي بطريقة أو بأخرى.

لا أتذكر أي مشروع Sandbox الذي وجدته هذا ، لكنه الحل الأمثل.

التصنيف _path_token.info

name = Taxonomy Path Token
description = Taxonomy path token creates a path of parent taxonomy terms of a node
package = Token 
core = 7.x

dependencies[] = token

التصنيف _path_token.module

<?php

/**
 * Implements hook_tokens().
 */
function taxonomy_path_token_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();

  if (!empty($tokens['taxonomy_path']) && !empty($data['node'])) {
    if(!empty($options['sanitize'])) {
       $sanitize = $options['sanitize'];
    } else {
      $sanitize = FALSE;
    }

    $node = $data['node'];
    $replacements[$tokens['taxonomy_path']] = $sanitize ? check_plain(taxonomy_path_token_get_parents($node)) : taxonomy_path_token_get_parents($node);
  }

  if ($type == 'array' && !empty($data['array'])) {
    $array = $data['array'];

    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'join-path-except-first':
          module_load_include('inc', 'pathauto');
          $values = array();
          foreach (element_children($array) as $key) {
            $value = is_array($array[$key]) ? render($array[$key]) : (string) $array[$key];
            $value = pathauto_cleanstring($value);
            $values[] = $value;
          }
                    array_shift($values);
          $replacements[$original] = implode('/', $values);
          break;
      }
    }
  }

  return $replacements;
}

/**
 * Implements hook_token_info().
 */
function taxonomy_path_token_token_info() {
  $info['tokens']['node']['taxonomy_path'] = array(
    'name' => t('taxonomy_path'),
    'description' => t('Custom taxonomy_path token.'),
  );

    $info['tokens']['array']['join-path-except-first'] = array(
    'name' => t('Joined path'),
    'description' => t('The array values each cleaned by Pathauto and then joined with the slash into a string that resembles an URL.'),
  );

  return $info;
}

function taxonomy_path_token_get_parents($node) {
  module_load_include('inc','pathauto','pathauto');

    if(!empty($node->field_tags)){
        $tid = current($node->field_tags);
        $tid = $tid[0]['tid'];
    }
    else{
     return '';
    }

  $parents = taxonomy_get_parents_all($tid);
  $paths = array();

  foreach ($parents as $parent) {
    $paths[] = pathauto_cleanstring($parent->name);
  }

    $paths = array_reverse($paths);
    array_shift($paths);
  $pathauto = implode('/', $paths);

  return $pathauto;
}

ثم أضف هذا [Node: Taxonomy_Path]/[Node: Title] إلى أنماط pathauto الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top