定制 fromholdio/silverstripe-superlinker-targets 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

fromholdio/silverstripe-superlinker-targets

最新稳定版本:4.0.0

Composer 安装命令:

composer require fromholdio/silverstripe-superlinker-targets

包简介

A SilverStripe module providing basic link/target data objects built using the Superlinker foundation

README 文档

README

Basic link/target DataObjects built on SuperLinker foundation.

Overview

Provides a Target class that extends SuperLink for general-purpose link objects. Useful for:

  • Related links
  • Resource links
  • Navigation links
  • Any generic link collection

Requirements

  • SilverStripe Framework ^6.0
  • fromholdio/silverstripe-superlinker ^4.0.0

Installation

composer require fromholdio/silverstripe-superlinker-targets

Run dev/build:

vendor/bin/sake dev/build flush=1

Usage

Basic Usage

use Fromholdio\SuperLinkerTargets\Model\Target;

class Page extends SiteTree
{
    private static $has_many = [
        'RelatedLinks' => Target::class
    ];
}

CMS Fields

use Fromholdio\MiniGridField\MiniGridField;

public function getCMSFields(): FieldList
{
    $fields = parent::getCMSFields();

    $fields->addFieldToTab('Root.Links',
        MiniGridField::create('RelatedLinks', 'Related Links', $this)
            ->setLimit(10)
    );

    return $fields;
}

Templates

<% if $RelatedLinks %>
    <div class="related-links">
        <h3>Related Links</h3>
        <ul>
            <% loop $RelatedLinks %>
                <li>
                    <a href="$URL" $AttributesHTML>$Title</a>
                </li>
            <% end_loop %>
        </ul>
    </div>
<% end_if %>

Usage Examples

Example 1: Footer Links

namespace App\Extensions;

use Fromholdio\SuperLinkerTargets\Model\Target;
use SilverStripe\Core\Extension;

class SiteConfigExtension extends Extension
{
    private static $has_many = [
        'FooterLinks' => Target::class
    ];
}
SilverStripe\SiteConfig\SiteConfig:
  extensions:
    - App\Extensions\SiteConfigExtension

Template:

<footer>
    <nav class="footer-nav">
        <% loop $SiteConfig.FooterLinks %>
            <a href="$URL" $AttributesHTML>$Title</a>
        <% end_loop %>
    </nav>
</footer>

Example 2: Resource Links

class ResourcePage extends Page
{
    private static $has_many = [
        'ResourceLinks' => Target::class
    ];

    public function getValidResourceLinks(): ArrayList
    {
        return Target::excludeInvalidLinks($this->ResourceLinks());
    }
}

Template:

<% if $ValidResourceLinks %>
    <div class="resources">
        <h2>Resources</h2>
        <% loop $ValidResourceLinks %>
            <div class="resource-item">
                <a href="$URL" $AttributesHTML>
                    <strong>$Title</strong>
                    <% if $Description %>
                        <p>$Description</p>
                    <% end_if %>
                </a>
            </div>
        <% end_loop %>
    </div>
<% end_if %>

Example 3: Social Media Links

namespace App\Extensions;

use Fromholdio\SuperLinkerTargets\Model\Target;
use SilverStripe\Core\Extension;

class SiteConfigExtension extends Extension
{
    private static $has_many = [
        'SocialLinks' => Target::class
    ];
}

With Icons:

Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - Fromholdio\SuperLinker\Extensions\SuperLinkIconExtension

Template:

<div class="social-links">
    <% loop $SiteConfig.SocialLinks %>
        <a href="$URL" target="_blank" rel="noopener" class="social-link">
            <% if $Icon %>
                <img src="$Icon.URL" alt="$Title">
            <% else %>
                $Title
            <% end_if %>
        </a>
    <% end_loop %>
</div>

Example 4: Card Links with Images

Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - Fromholdio\SuperLinker\Extensions\SuperLinkImageExtension
    - Fromholdio\SuperLinker\Extensions\SuperLinkDescriptionExtension
class HomePage extends Page
{
    private static $has_many = [
        'FeatureCards' => Target::class
    ];
}

Template:

<div class="feature-cards">
    <% loop $FeatureCards %>
        <a href="$URL" class="card">
            <% if $Image %>
                <img src="$Image.FocusFill(400,300).URL" alt="$Title">
            <% end_if %>
            <div class="card-content">
                <h3>$Title</h3>
                <% if $Description %>
                    <p>$Description</p>
                <% end_if %>
            </div>
        </a>
    <% end_loop %>
</div>

Customization

Adding Custom Fields

Extend the Target class:

namespace App\Extensions;

use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Core\Extension;

class TargetExtension extends Extension
{
    private static $db = [
        'CustomField' => 'Varchar(255)'
    ];

    public function updateCMSFields(FieldList $fields): void
    {
        $fields->addFieldToTab('Root.Main',
            TextField::create('CustomField', 'Custom Field')
        );
    }
}
Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - App\Extensions\TargetExtension

Creating Subclasses

For specific use cases, create subclasses:

namespace App\Model;

use Fromholdio\SuperLinkerTargets\Model\Target;

class SocialLink extends Target
{
    private static $table_name = 'App_SocialLink';

    private static $singular_name = 'Social Link';
    private static $plural_name = 'Social Links';

    private static $allowed_types = [
        'external'
    ];
}

Alternative for New Projects

Instead of using this module, create your own link classes:

namespace App\Model;

use Fromholdio\SuperLinker\Model\SuperLink;

class Link extends SuperLink
{
    private static $table_name = 'App_Link';

    private static $singular_name = 'Link';
    private static $plural_name = 'Links';
}

This gives you full control without an extra dependency.

Documentation

For complete SuperLinker documentation, see:

License

BSD-3-Clause

Support

统计信息

  • 总下载量: 790
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: BSD-3-Clause
  • 更新时间: 2020-07-19

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固