Skip to content

Commit

Permalink
add Crafts Link field support
Browse files Browse the repository at this point in the history
  • Loading branch information
RobinSecondred committed Mar 4, 2025
1 parent 2c28a20 commit 736b6de
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 6 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Craft Seeder Changelog


## 5.0.2 - 2025-03-04

### added

- added crafts Link field

## 5.0.1 - 2024-12-17

### changed
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "anubarak/craft-seeder",
"description": "Easy entries seeder for Craft CMS",
"version": "5.0.1",
"version": "5.0.2",
"type": "craft-plugin",
"keywords": [
"craft",
Expand Down
16 changes: 16 additions & 0 deletions src/controllers/SeederController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
use Craft;
use craft\db\Query;
use craft\db\Table;
use craft\elements\Entry;
use craft\errors\ElementException;
use craft\fieldlayoutelements\CustomField;
use craft\fieldlayoutelements\TitleField;
Expand Down Expand Up @@ -534,4 +535,19 @@ protected function getElementsByIds(array $ids): array
->fixedOrder()
->all();
}

// public function actionTest()
// {
// /** @var \craft\fields\Link $field */
// $field = Craft::$app->getFields()->getFieldByHandle('linkField');
//
//
// $entry = Entry::findOne(5);
// Seeder::$plugin->getSeeder()->populateFields($entry, ['linkField']);
// $s = Craft::$app->getElements()->saveElement($entry);
// echo "<pre>";
// var_dump($s);
// echo "</pre>";
// die();
// }
}
12 changes: 7 additions & 5 deletions src/services/SeederService.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
use craft\fields\Dropdown;
use craft\fields\Email;
use craft\fields\Lightswitch;
use craft\fields\Link;
use craft\fields\Matrix;
use craft\fields\Money;
use craft\fields\MultiSelect;
Expand Down Expand Up @@ -198,6 +199,7 @@ public function getRegisteredFieldTypes(): Collection
PlainText::class => fields\PlainText::class,
Email::class => fields\Email::class,
Url::class => fields\Url::class,
Link::class => fields\CraftLink::class,
Color::class => fields\Color::class,
Checkboxes::class => fields\Checkboxes::class,
RadioButtons::class => fields\RadioButtons::class,
Expand Down Expand Up @@ -351,20 +353,20 @@ public function numerateElements(array $elements, array $config, string $format
try {
foreach ($elements as $i => $entry) {
$hasCustomField = false;
foreach ($config as $fieldHandle){
if($fieldHandle === 'title'){
foreach ($config as $fieldHandle) {
if ($fieldHandle === 'title') {
$entry->title = $formatter->format($format, [
'i' => $i,
'i' => $i,
'value' => $this->factory->words(random_int(2, 6), true)
], Craft::$app->language);
} else {
// custom field
$field = $entry->getFieldLayout()->getFieldByHandle($fieldHandle);
if(!$field){
if (!$field) {
continue;
}
$value = $formatter->format($format, [
'i' => $i,
'i' => $i,
'value' => $this->getFieldData($field, $entry)
], Craft::$app->language);

Expand Down
42 changes: 42 additions & 0 deletions src/services/fields/CraftLink.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace anubarak\seeder\services\fields;

use craft\base\ElementInterface;
use craft\base\FieldInterface;
use craft\elements\Asset;
use craft\elements\Entry;

class CraftLink extends BaseField
{
/**
* @param \craft\fields\Link $field
*
* @inheritDoc
*/
public function generate(FieldInterface $field, ElementInterface $element = null)
{

$type = $this->factory->randomElement($field->getLinkTypes());
$value = match ($type::class) {
\craft\fields\linktypes\Entry::class => Entry::find()
->limit(1)
->orderBy(\anubarak\seeder\helpers\DB::random())
->one()->id,
\craft\fields\linktypes\Asset::class => Asset::find()
->limit(1)
->orderBy(\anubarak\seeder\helpers\DB::random())
->one()->id,
\craft\fields\linktypes\Email::class => $this->factory->email(),
\craft\fields\linktypes\Phone::class => $this->factory->phoneNumber(),
\craft\fields\linktypes\Url::class => $this->factory->url(),
};

return [
'type' => $type::id(),
'value' => $value,
'target' => $this->factory->randomElement(['', '_blank']),
'title' => random_int(0, 1) === 1? $this->factory->words(3, true) : null,
];
}
}

0 comments on commit 736b6de

Please sign in to comment.