Git Product home page Git Product logo

silverstripe-linkable's Introduction

SilverStripe Linkable

This module is no longer maintained. Please checkout the following excellent alternatives

Requirements

See 1.x branch/releases for SilverStripe 3.x support

Maintainers

Description

This module contains a couple of handy FormFields / DataObjects for managing external and internal links on DataObjects, including oEmbed links.

Installation with Composer

composer require "sheadawson/silverstripe-linkable"

Link / LinkField

A Link Object can be linked to a URL, Email, Phone number, an internal Page or File in the SilverStripe instance. A DataObject, such as a Page can have many Link objects managed with a grid field, or one Link managed with LinkField.

Example usage

class Page extends SiteTree
{
	private static $has_one = [
		'ExampleLink' => 'Link',
	];

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

		$fields->addFieldToTab('Root.Link', LinkField::create('ExampleLinkID', 'Link to page or file'));

		return $fields;
	}
}

In your template, you can render the links anchor tag with

$ExampleLink

Adding custom class to link

The anchor tag can be rendered with a class or classes of your choosing by passing the class string to the setCSSClass() method within your template.

$ExampleLink.setCSSClass(your-css-class)

Customising link templates

Link tags are rendered with the Link.ss template. You can override this template by copying it into your theme or project folder and modifying as required.

You can also specify a custom template to render any Link with by calling the renderWith function and passing in the name of your custom template

$ExampleLink.renderWith(Link_button)

Finally, you can optionally offer CMS users the ability to select from a list of templates, allowing them to choose how their Link should be rendered. To enable this feature, create your custom template files and register them in your site config.yml file as below.

Sheadawson\Linkable\Models\Link:
  templates:
    button: Description of button template # looks for Link_button.ss template
    iconbutton: Description of iconbutton template # looks for  Link_iconbutton.ss template

Limit allowed Link types

To limit link types for each field.

LinkField::create('ExampleLinkID', 'Link Title')->setAllowedTypes(array('URL','Phone'))

You can also globally limit link types. To limit types define them in your site config.yml file as below.

Sheadawson\Linkable\Models\Link:
  allowed_types:
    - URL
    - SiteTree

The default types available are:

URL: URL
Email: Email address
Phone: Phone number
File: File on this website
SiteTree: Page on this website

Adding custom Link types

Sometimes you might have custom DataObject types that you would like CMS users to be able to create Links to. This can be achieved by adding a DataExtension to the Link DataObject, see the below example for making Product objects Linkable.

class CustomLink extends DataExtension
{
    private static $has_one = [
        'Product' => 'Product',
    ];

    private static $types = [
        'Product' => 'A Product on this site',
    ];

    public function updateCMSFields(FieldList $fields)
    {
		// update the Link Type dropdown to contain your custom Link types
        $fields->dataFieldByName('Type')->setSource($this->owner->config()->types);

		// Add a dropdown field containing your ProductList
		$fields->addFieldToTab(
            'Root.Main',
            DropdownField::create('ProductID', 'Product', Product::get()->map('ID', 'Title')->toArray())
                ->setHasEmptyDefault(true)
                ->displayIf('Type')->isEqualTo('Product')->end()
        );
	}

In your config.yml

Sheadawson\Linkable\Models\Link:
  extensions:
    - CustomLink

Please see the wiki for more customisation examples.

EmbeddedObject/Field

Use the EmbeddedObject/Field to easily add oEmbed content to a DataObject or Page.

Example usage

class Page extends SiteTre
 {
	private static $has_one = [
		'Video' => 'EmbeddedObject',
	];

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

		$fields->addFieldToTab('Root.Video', EmbeddedObjectField::create('Video', 'Video from oEmbed URL', $this->Video()));

		return $fields;
	}
}
	...

In your template, you can render the object with the name of the has_one relation

$Video

You can also access other metadata on the object via

<h1>$Video.Title</h1>
$Video.Description
$Video.ThumbURL

See EmbeddedObject.php for a list of properties saved available in $db.

Custom query params

Sometimes you may want to add custom query params to the GET request which fetches the LinkEditForm. This is very useful in a situation where you want to customise the form based on specific situation. Custom query params are a way how to provide context for your LinkEditForm.

To add custom params you need to add data-extra-query.

$linkField->setAttribute('data-extra-query', '&param1=value1');

You can then use the updateLinkForm extension point and extract the param value with following code:

$param1 = Controller::curr()->getRequest()->requestVar('param1');

Development

Front end uses pre-processing and requires the use of Yarn.

silverstripe-linkable's People

Contributors

davejtoews avatar dependabot[bot] avatar dorsetdigital avatar drmartingonzo avatar fonsekaean avatar gorriecoe avatar grgcnnr avatar hdpero avatar heyimphil avatar ivoba avatar jason-zz avatar leapfrognz avatar martinduparc avatar mediabeastnz avatar mfendeksilverstripe avatar mlewis-everley avatar nyeholt avatar priyashantha avatar rsmclaren avatar satrun77 avatar scott1702 avatar sheadawson avatar spekulatius avatar sunnysideup avatar swilsonau avatar vinstah avatar wilr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

silverstripe-linkable's Issues

How does one change the fields?

I have been overriding this by including a CSS which hides some fields but I guess there is probably a better way.

I normally either only want the URL, disregarding the remaining fields, and in other use cases, I remove the extra CSS field.

Can you provide any tips how to do that?

Changing Link type does not display additional fields in 3.3.*

In the CMS the popup loads, with Title and Link Type fields, but when you select a type from the dropdown no additional fields appear.

Looks like it might be an issue with display logic?

Code we are using to add the field is:

class SomeClass extends DataObject {
    static $has_one = array(
        'Link'      => 'Link'
    );

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

    $fields->addFieldToTab(
        'Root.Main', 
        LinkField::create('LinkID', 'Link to page or file')
    );

        return $fields;
    }
}

This is on a vanilla Silverstripe 3.3.1 install. It works fine on 3.1.* :-s

Mo

Error when adding Link to SS4 data object

I'm trying to add a link field to one of the data objects in SS4, but get an error when doing dev/build: "Uncaught SilverStripe\Core\Injector\InjectorNotFoundException: ReflectionException: Class Link does not exist in /[...]/vendor/silverstripe/framework/src/Core/Injector/InjectionCreator.php:17"

I'm adding it like this:

use Sheadawson\Linkable\Models\Link;

class Promo extends DataObject
{
	private static $db = array (
		"Title" => "Varchar(100)",
		"Text" => "HTMLText",
		"LinkTest" => "Link"
	);
}

I've also tried:

"LinkTest" => Link::class

What am I doing wrong?

Multiple Link fields conflict

Found an issue when there is multiple Link fields on the same object, the Type dropdown field does not always render. This seems to be related to issue #6 (or thereabouts), which work-around looks to have been reverted in commit 809510d.

Steps to reproduce:

  1. Create two Link fields on an object.
  2. In the CMS populate one of the fields with a link.

screen shot 2017-05-29 at 12 52 36 pm

  1. Refresh the page.
  2. Select the Add Link action on the un-populated link.
  3. close the popup.
  4. Select the Edit action on the populated link.
  5. Dropdown is hidden.

screen shot 2017-05-29 at 12 52 56 pm

Future compatibility

Hey Shea,

Just tried installing SS 3.3 (dev) and noticed this happens:

  - Removing sheadawson/silverstripe-linkable (1.2.0)
  - Installing sheadawson/silverstripe-linkable (1.1.1)

Given that future minor releases of SS should be backwards compatible can I suggest that you set a minimum minor version requirement instead of a specific one? ^3.2 means >= 3.2.0 and < 4.0.0, so that could be a good option.

I can see why you might want to restrict people from installing this module until you've tested with 3.3, but if it means people still get the module just an older version then it's probably counter-productive :)

Having 2 LinkField on the same page will interfere with each other

Starting point

Let's say you have 2 LinkFields on the same DataObject and you are editing your DataObject in the backend.

Step to reproduce the issue

  • Add or Edit a link on the first LinkFiled. Save you changes.
  • Try adding or editing a link on the second LinkFiled.
  • The Dialogue box doesn't show and the following error is log to the JS Console.
Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'open'

If you close the first dialogue box (as opposed to saving your changes), the second dialogue box will open fine.

Possible cause of the problem

I think the problem is cause by the onunmatch function on line 66:

$('.linkfield-dialog.ui-dialog-content').remove();

I think this line is too generic and will affect all dialogue boxes, not just the one that just got save.

If I comment out line 66, the issue goes away.

I would do a pull request, but I'm not quite sure what to replace line 66 with ... or if deleting it altogether would have other side affects.

markup in dropdown for file selection

In the dropdown for file selection there is escaped markup rendered for folder (at least in my installation).
Like this:

  • <span class="jstree-foldericon"></span><span class="item">hoerfunk</span>

    How come?
    When i get the time i investigate myself, but maybe you are faster ;)

  • SSv4: DB table name changed from `EmbeddedObject` to `LinkableEmbed`

    Not sure if there's a reason for changing the db table name for EmbeddedObject(?)
    But currently when updating from Silverstripe 3 to 4, all EmbeddedObjects disappear due to the database table having changed between 3 & 4.

    Quick fix is to revert the table name back to the previous value from config.yml:

    Sheadawson\Linkable\Models\EmbeddedObject:
      table_name: 'EmbeddedObject'

    Embed Library needs updating

    I'm using the embed library on my project and noticed that Google Maps weren't working, this is because Linkable is using version 2 of the Embed library.

    Is it possible to use version 3 in the next version? I'm aware that is requires PHP 5.5.

    For now i've had to not use this module as embeds are more important :/

    Missing return $fields in README.md

    Hi,

    first of all thank you for the great plugin!
    And just 4 info - you are missing the return $fields in your example code for updating the CMSFields in the README.md.

    All the best!

    One final release?

    Can we get one final release say tag 2.1.0 which is just masters current state?

    Cheers

    LinkField readonly

    Currently, my project required to put members into different groups with different permissions. One of that group will only be able to see the content of DataObject (Title, Content..etc) when they log in to admin. I managed well with all other fields, except for this LinkField. In my opinion, when an user of this group log in, they can see the link, but they should not see the button (Add, Edit, Remove).

    I checked the code, but cannot find a solution for this.

    Incompatibility with Silverstripe latest

    Silverstripe framework (4.0.3) installs embed v3.0.3 by default
    Currently the embed version in silverstripe-linkable is set to ^3.2 so it can't be installed with the latest Silverstripe.

    Relation name 'Link' conflicts with SiteTree '$Link' template variable

    Hi there!

    Just tried to implement a LinkField and got confused. Tried to add a to my default Page class with a relationship as follows:

    private static $has_one = array(
        'ComplementaryLink' => 'Link',
    );
    

    Along with that, I added the field to the getCMSFields method:

    $fields->addFieldToTab("Root.Complementary", LinkField::create('LinkID', 'Link to page or site'));
    

    Found out that this doesn't work. Changing the relation in the field to ComplementaryLinkID didn't work. I had to change the relation name from ComplementaryLink to just Link for it to work.

    After that, the problem I found was that the template variable of $Link conflicts with the default one used by the SiteTree class. All I get is the path of the current page with no other variables attached to $Link (ie. LinkURL ).

    Err...am I missing something? Thx in advance! :)

    requires unclecheese/display-logic ^1.4

    with SS 4.1
    and unclecheese/display-logic ^2.0 already installed
    composer installation failed because "requirements could not be resolved to an installable set of packages"

    Composer require error - no client/js directory

    Hi
    I'm getting an error when running composer require "sheadawson/silverstripe-linkable": "dev-master".
    Error:
    [ErrorException]
    copy(C:\wamp64\www\ss4\vendor\sheadawson\silverstripe-linkable\client\js):
    failed to open stream: No such file or directory

    When I look in the linkable directory there is no /client/js directory but in the composer.json for the linkable module it has:
    "expose": [
    "client/js"
    ]

    There is a js directory under /client/dist/js perhaps it should point there or else be removed?
    image

    Thanks,
    JC

    Issue when duplicating a page

    If you duplicate a page, and then modify the link (change Title, change link etc) those changes will be reflected on the original page (and any other duplicates). This is probably very similar to #52

    I've implemented a temporary workaround, for example in Page.php

    public function onBeforeDuplicate(){
            parent::onBeforeDuplicate();
    
            if($this->LinkID >= 0){
                $this->LinkID = 0;
            }
        }
    

    SS4 migration (Discussion)

    Hey Shea, I'm keen to start migrating linkable to SS4 and think that this will be a perfect time to make some big changes. Here are just some of my thoughts on it.

    • Separate the module into 2, Linkable and Embedable.
    • Remove redundancies.
    • Embedable to save images to site so they can be manipulated.
    • Linkable to have consistent styles to embedable and uploadfield. (Move from popup to inline for better mobile experience)

    Anyway these are my thoughts. As I said I'm keen to start migrating but I don't want to make huge changes if everyone disagrees.

    Also if anyone else has any ideas feel free to comment ๐Ÿ˜„

    YouTube issue

    With the latest update to YouTube embedding a YouTube video no longer works. Simply adding the URL and clicking on Inspect removes the entire EmbeddedObjectField after a short period of loading.

    .upgrade.yml has wrong namespace for LinkField

    .upgrade.yml file uses wrong namespace (Sheadawson\Linkable\Extensions\Forms) for LinkField. It should be: Sheadawson\Linkable\Forms.

    Will cause problems if using SS4 Upgrade module.

    thanks!

    updateCMSFields called twice on Link extensions

    Hello,

    There is an issue with updateCMSFields being called twice, since the getCMSFields function in Link.php makes a reference to the parent method (which also calls updateCMSFields), and then calls updateCMSFields at Line 76.

    Problem with composer installation

    Hi,

    I get the following error when trying to install the library using composer:

      $ composer install
      Loading composer repositories with package information
      Installing dependencies (including require-dev)
      Your requirements could not be resolved to an installable set of packages.
      Problem 1
        - Installation request for sheadawson/silverstripe-linkable dev-master -> satisfiable by sheadawson/silverstripe-linkable[dev-master].
        - sheadawson/silverstripe-linkable dev-master requires silverstripe/display-logic dev-master -> no matching package found.
    

    Do you want to install the module unclecheese/display-logic instead of silverstripe/display-logic?

    Cheers,
    Fabian

    Usage on Nested DataObjects

    I have a model set up like this:
    Page has_many ImageSets
    ImageSet has_many Images
    Image has_one Link

    I dont think the Javascript is being included correctly because the DisplayLogic fields arent working. Probably an issue with DisplayLogic but I thought i'd mention it here. Give it a test.

    Page has_many links

    If I try to add a "has_many" relation on a page, the "SiteTreeID" is picked up by the gridfield as the relation, effectively preventing the link to target another page.

    I solved this by adding an extra relation

    private static $has_one = array(
        'File' => 'File',
        'SiteTree' => 'SiteTree',
        'ParentSiteTree' => 'SiteTree'
    );
    

    and hiding it

    $fields->removeByName('ParentSiteTreeID');

    Link naming gotcha

    Hey Shea, thanks for this dandy module.

    Just noticed a bit of a gotcha with the name of the Link class. I defined a block with a has_one 'Link' => 'Link' but of course it doesn't work because Block already has a Link() method. It's a common pattern to use an object's class name as the relation name so wonder if this has tripped other people up too? It's also a bit against SS conventions to get anything but a URL string from $Link in templates so I was wondering if you might consider renaming the base class here in the next major version? Maybe FlexiLink or something. Then you could maybe rename LinkURL to Link and things would be a bit more consistent - e.g. doing $FlexiLink.Link in templates instead of $Link.LinkURL.

    Link popup Collate Fields error

    When I open the link popup i get a 500 error saying

    ERROR [User Error]: collateDataFields() I noticed that a field called 'FileID' appears twice in your form: '(unknown form)'. One is a 'TreeDropdownField' and the other is a 'DropdownField'

    This happens because the FileID field is not removed correctly.

    in Link.php -> getCMSFields function

    $fields->removeByName('File');

    has to be replaced with

    $fields->removeByName('FileID');

    Happened with SilverStripe 3.1.12

    Thanks

    Nivanka

    Embed/embed requires php 5.4 (~1.8.3 for PHP 5.3)

    Linkable states php5.3+ required, Embed v2 requires php5.4+ (so I just found out in testing :) )

    I've tried replacing Embed v2 with Embed 1.8.3 (php5.3), which basically seems to work OK except for the getImage(), which returns nothing. I'm having trouble debugging this, else I'd made a PR.

    SQL Error - Unknown column 'LinkType' in 'where clause'

    In the CMS, the "link existing" ajax call triggers the following error:

    ERROR [Emergency]: Uncaught SilverStripe\ORM\Connect\DatabaseException: Couldn't run query:
    
    SELECT DISTINCT "LinkableLink"."ClassName", "LinkableLink"."LastEdited", "LinkableLink"."Created", "LinkableLink"."Anchor", "LinkableLink"."Title", "LinkableLink"."Type", "LinkableLink"."URL", "LinkableLink"."Email", "LinkableLink"."Phone", "LinkableLink"."OpenInNewWindow", "LinkableLink"."Template", "LinkableLink"."SiteTreeID", "LinkableLink"."FileID", "LinkableLink"."ID", 
    			CASE WHEN "LinkableLink"."ClassName" IS NOT NULL THEN "LinkableLink"."ClassName"
    			ELSE 'Sheadawson\\Linkable\\Models\\Link' END AS "RecordClassName"
    
    FROM "LinkableLink"
    
    WHERE ("LinkableLink"."ID" NOT IN 
    SELECT DISTINCT "LinkableLink"."ID"
    
    FROM "LinkableLink"
    INNER JOIN "ContactUsPage_LinkedPages" ON "ContactUsPage_LinkedPages"."LinkableLinkID" = "LinkableLink"."ID"
    
    WHERE ("ContactUsPage_LinkedPages"."ContactUsPageID" = ?)))
     AND (("LinkableLink"."Title" LIKE ?)
     OR ("LinkType" LIKE ?)
     OR ("LinkURL" LIKE ?))
    
    ORDER BY "LinkableLink"."Title" ASC
    
    LIMIT 20
    
    Unknown column 'LinkType' in 'where clause'
    IN GET /admin/pages/edit/EditForm/7/field/LinkedPages/search?gridfield_relationsearch=test
    Line 64 in /var/www/html/vendor/silverstripe/framework/src/ORM/Connect/DBConnector.php
    
    Source
    ======
      55:          if (!empty($sql)) {
      56:              $formatter = new SQLFormatter();
      57:              $formattedSQL = $formatter->formatPlain($sql);
      58:              $msg = "Couldn't run query:\n\n{$formattedSQL}\n\n{$msg}";
      59:          }
      60:  
      61:          if ($errorLevel === E_USER_ERROR) {
      62:              // Treating errors as exceptions better allows for responding to errors
      63:              // in code, such as credential checking during installation
    * 64:              throw new DatabaseException($msg, 0, null, $sql, $parameters);
      65:          } else {
      66:              user_error($msg, $errorLevel);
      67:          }
      68:      }
      69:  
      70:      /**
    

    linkable_error

    composer installation on SS4.1 not working?

    I use composer for the first time today, so maybe this is due to me not knowing what I do:
    I installed SS4.1 via composer with php7.19. Now I wanted to install silverstripe-linkable with the command provided under Readme. I did this by changing directory in cmd to the folder where I installed SS4.1. The following message appeared:
    Using version ^1.3 for sheadawson/silverstripe-linkable
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.

    Problem 1
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.7
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.6
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.5
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.4
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.3
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.2
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.1
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.0
    - Conclusion: remove embed/embed v3.3.1
    - Installation request for sheadawson/silverstripe-linkable ^1.3 -> satisfiable by sheadawson/silverstripe-linkable[1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.3.x-dev].
    - Conclusion: don't install embed/embed v3.3.1
    - sheadawson/silverstripe-linkable 1.3.x-dev requires embed/embed ~2.2.2 -> satisfiable by embed/embed[v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7].
    - Can only install one of: embed/embed[v2.2.2, v3.3.1].
    - Can only install one of: embed/embed[v2.2.3, v3.3.1].
    - Can only install one of: embed/embed[v2.2.4, v3.3.1].
    - Can only install one of: embed/embed[v2.2.5, v3.3.1].
    - Can only install one of: embed/embed[v2.2.6, v3.3.1].
    - Can only install one of: embed/embed[v2.2.7, v3.3.1].
    - Installation request for embed/embed (locked at v3.3.1) -> satisfiable by embed/embed[v3.3.1].
    Installation failed, reverting ./composer.json to its original content.

    Was I missing anything? I assumed composer works like npm when there is a dependency e.g. to the display-logic module that it automatically downloads this as well. I read in a previous issue that someone already installed the display-logic and got an error. Not sure if this one is related to that issue.

    Version Bump

    Can we get a version bump on this for the tags?

    has_many picking up SiteTreeID

    I may be, and probably am, misunderstanding the implementation, but the read me says I can attach many link and use a GridField to manage them. So I have the following page:

    private static $has_many = array( 'ManyLinks' => 'Link' );

    And to manage the relation I'm using:

    $config = GridFieldConfig_RelationEditor::create(); $bishopLinksField = new GridField('ManyLinks', 'ManyLinks', $this->ManyLinks(), $config);

    However, when attempting to add a link, if I choose "Page on this website" I don't get the SiteTree dropdown. Instead I get the Title of the page I'm attempting to add the link to e.g. "Home".

    Am I doing this incorrectly and, if so, is there an example of the correct way to do it?

    Cant install using Silverstripe v4

    vagrant@homestead:~/code/myapiary_website$ composer require "sheadawson/silverstripe-linkable"
    Using version ^1.3 for sheadawson/silverstripe-linkable
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.

    Problem 1
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.7
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.6
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.5
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.4
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.3
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.2
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.1
    - Conclusion: don't install sheadawson/silverstripe-linkable 1.3.0
    - Conclusion: remove embed/embed v3.3.3
    - Installation request for sheadawson/silverstripe-linkable ^1.3 -> satisfiable by sheadawson/silverstripe-linkable[1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.3.x-dev].
    - Conclusion: don't install embed/embed v3.3.3
    - sheadawson/silverstripe-linkable 1.3.x-dev requires embed/embed ~2.2.2 -> satisfiable by embed/embed[v2.2.2, v2.2.3, v2.2.4, v2.2.5, v2.2.6, v2.2.7].
    - Can only install one of: embed/embed[v2.2.2, v3.3.3].
    - Can only install one of: embed/embed[v2.2.3, v3.3.3].
    - Can only install one of: embed/embed[v2.2.4, v3.3.3].
    - Can only install one of: embed/embed[v2.2.5, v3.3.3].
    - Can only install one of: embed/embed[v2.2.6, v3.3.3].
    - Can only install one of: embed/embed[v2.2.7, v3.3.3].
    - Installation request for embed/embed (locked at v3.3.3) -> satisfiable by embed/embed[v3.3.3].

    compose.json

    {
        "name": "silverstripe/installer",
        "type": "silverstripe-recipe",
        "description": "The SilverStripe Framework Installer",
        "require": {
            "php": ">=5.6.0",
            "silverstripe/recipe-plugin": "^1",
            "silverstripe/recipe-cms": "1.1.1@stable",
            "silverstripe-themes/simple": "~3.2.0",
            "cyber-duck/silverstripe-seo": "^4.1",
            "dnadesign/silverstripe-elemental": "2.x-dev",
            "ryanpotter/silverstripe-cms-theme": "^3.0",
            "silverstripe/blog": "^3.1",
            "silverstripe/elemental-blocks": "^1.0",
            "symbiote/silverstripe-gridfieldextensions": "^3.1"
        },
        "require-dev": {
            "phpunit/phpunit": "^5.7"
        },
        "extra": {
            "branch-alias": {
                "4.x-dev": "4.2.x-dev",
                "dev-master": "5.x-dev"
            },
            "project-files-installed": [
                "mysite/.htaccess",
                "mysite/_config.php",
                "mysite/_config/mysite.yml",
                "mysite/code/Page.php",
                "mysite/code/PageController.php"
            ],
            "public-files-installed": [
                ".htaccess",
                "index.php",
                "install-frameworkmissing.html",
                "install.php",
                "web.config"
            ]
        },
        "config": {
            "process-timeout": 600
        },
        "prefer-stable": true,
        "minimum-stability": "dev"
    }
    

    UploadField for files?

    The tree dropdown field used for Files makes it hard to find a specific file and means you can't upload new ones. Just wondering if there is a reason you opted for the tree field? If not would you like to see a PR to switch to using an UploadField?

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google โค๏ธ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.