簡體   English   中英

Joomla插件唯一別名

[英]Joomla plugin unique alias

我需要從Joomla 3.3中標題相同的兩篇文章中自動生成不同的別名。 用戶將在前端添加文章。 我發現此代碼:

<?php

defined( '_JEXEC' ) or die;

class plgContentRandom_Alias extends JPlugin
{

  function onContentBeforeSave($context, &$article, $isNew) {


  if(!$isNew){
    return;
  }

  $alias = $article->alias;
  $n = substr( "abcdefghijklmnopqrstuvwxyz" ,mt_rand( 0 ,25 ) ,1 ) .substr( md5( time( ) ) ,1 );


  $table = JTable::getInstance('content');
  while ($table->load(array('alias' => $alias))) {
    $new_alias = $alias . $n;
  }
  $article->alias = $new_alias;   
  return true;
  }

}
?>

,並為Joomla制作了插件,但該插件在Joomla 3.3中不起作用。

有什么建議么?

您可以使用以下代碼編寫自己的插件,盡管此功能應該已經是joomla核心的一部分。 我之所以使用它,是因為在使用其插入內容形式時出現Seblod錯誤。

文件:

Joomla安裝程序描述符: uniqueAliasGenerator.xml

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="content" method="upgrade">
    <name>Content - Unique alias generator</name>
    <author>McGiogen</author>
    <creationDate>May 2015</creationDate>
    <copyright></copyright>
    <license></license>
    <authorEmail>mcgiogen@hotmail.it</authorEmail>
    <authorUrl>www.joomla.org</authorUrl>
    <version>1.0</version>
    <description>
        Automatic generator of unique alias.
        At save time it append "-X" (where X is a numeric identifier)
        if article alias is already in database.
    </description>
    <files>
        <filename plugin="uniqueAliasGenerator">uniqueAliasGenerator.php</filename>
        <filename>index.html</filename>
    </files>
    <config>
    </config>
</extension>

插件代碼: uniqueAliasGenerator.php

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

class plgContentUniqueAliasGenerator extends JPlugin
{   
    /**
     * Alias check and generation before save content method.
     * Content is passed by reference. Method is called before the content is saved.
     *
     * @param   string  $context  The context of the content passed to the plugin (added in 1.6).
     * @param   object  $article  A JTableContent object.
     * @param   bool    $isNew    If the content is just about to be created.
     *
     * @return  void
     */
    public function onContentBeforeSave($context, $article, $isNew)
    {
        if ($context == 'com_content.article' && $article->alias && $isNew) {
            $oldAlias = $article->alias;
            $categoryId = $article->catid;  //An alias must be unique only in its category
            $article->alias = $this->getUniqueAlias($oldAlias, $categoryId);
        }
        return true;
    }

    /**
     * Find unique Alias name if current doesn't exist.
     * @param string $alias Alias of the article
     * @param string $catId Id of article's category
     * 
     * @return string Return the unique alias value.
     */
    protected function getUniqueAlias($alias, $catId)
    {
        $alias_ini = $alias;

        for ($i = 2; $this->isAliasExist($alias, $catId); $i++) {
            $alias = $alias_ini . '-' . $i;   
        }
        return $alias;
    }

    /**
     * Check the 'alias' in the database.
     *
     * @return boolean If found return true else false.
     */
    protected function isAliasExist($alias, $catId) 
    {
        $db = JFactory::getDBO();
        $query = $db->getQuery(true);

        $query
            ->select('COUNT(*)')
            ->from($db->quoteName('#__content'))    //Articles table
            ->where($db->quoteName('alias') . ' = ' . $db->quote($alias))
            ->where($db->quoteName('catid') . ' = ' . $db->quote($catId));  //Category ID
        $db->setQuery($query);

        return ($db->loadResult() ? true : false);
    }
}
?>

的index.html

<!DOCTYPE html><title></title>

如何使用:

創建具有相同名稱的文件,將其放在名為“ uniqueAliasGenerator”的文件夾中,在“ uniqueAliasGenerator.zip”中壓縮,然后上傳並安裝到您的joomla上。

與Joomla 3.x兼容,已在Joomla 3.4.1上進行了測試

更新2017年11月11日

添加了對$ isNew的檢查。 謝謝@ robert-drygas。

在McGiogen代碼行中

if ($context == 'com_content.article' && $article->alias) {

可以寫成

if ($context == 'com_content.article' && $article->alias && $isNew) {

因此,唯一的別名將僅針對新文章進行合並(在編輯舊文章時不會更改現有別名)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM