* zin: improve field and fieldList.

This commit is contained in:
sunhao
2024-01-12 08:51:41 +08:00
parent f928ae335f
commit 31bfec5a9d
3 changed files with 76 additions and 23 deletions
+46 -13
View File
@@ -194,6 +194,11 @@ class field extends setting
return $this->setVal($side == 'before' ? 'wrapBefore' : 'wrapAfter', $wrap);
}
function text(bool|string|null $text): field
{
return $this->setVal('text', $text);
}
function tip(bool|string|null $tip): field
{
return $this->setVal('tip', $tip);
@@ -242,21 +247,54 @@ class field extends setting
return $this->parent->control($this->toArray());
}
function items(array|object|false|null $items): field
/**
* Set items.
*
* @access public
* @param array|false $items - Items.
* @param bool $reset - Whether to reset items.
* @return field
*/
function items(array|false $items, bool $reset = false): field
{
if($items === false) return $this->remove('items');
return $this->addToList('items', $items);
if($reset) return $this->setVal('items', $items);
return $this->addToMap('items', $items);
}
function item(string|array|object|null $itemOrName, array|object|null $item = null): field
/**
* Add item.
*/
function item(array|object ...$items): field
{
if(is_null($itemOrName)) return $this;
if(is_string($itemOrName))
$list = array();
foreach($items as $item)
{
if(is_null($item)) return $this->removeItem($itemOrName);
return $this->addToList('items', array($itemOrName => $item));
$name = null;
if($item instanceof field)
{
$name = $item->getName();
}
if($item instanceof dataset)
{
$name = $item->get('name');
}
elseif(is_array($item))
{
if(isset($item['name'])) $name = $item['name'];
}
if(is_null($name))
{
trigger_error('[ZIN] The item for adding to field "' . $this->getName() . '" has no name.', E_USER_ERROR);
}
$list[$name] = $item;
}
return $this->addToList('items', array($itemOrName));
return $this->addToMap('items', $list);
}
function removeItem(string ...$names): field
{
return $this->removeFromMap('items', ...$names);
}
function itemBegin(?string $itemName = null): field
@@ -274,11 +312,6 @@ class field extends setting
return $this->parent;
}
function removeItem(string $itemName): field
{
return $this->removeFromList('items', $itemName);
}
function children(mixed ...$children): field
{
return $this->addToList('children', ...$children);
+16 -7
View File
@@ -16,11 +16,17 @@ namespace zin;
require_once __DIR__ . DS . 'field.class.php';
require_once __DIR__ . DS . 'fieldlist.class.php';
function defineFieldList(string $name = null, string|array|field|fieldList|null ...$args): fieldList
/**
* Define a field list.
*
* @param string $name The name of field list.
* @param string|array|field|fieldList|null ...$extends The extend fields and field list.
*
* @return fieldList
*/
function defineFieldList(string $name, string|array|field|fieldList|null ...$extends): fieldList
{
global $app;
if(is_null($name)) $name = $app->rawModule;
return fieldList::define($name, ...$args);
return fieldList::define($name, ...$extends);
}
function defineField(string $name, ?string $listName = null): field
@@ -29,7 +35,10 @@ function defineField(string $name, ?string $listName = null): field
{
list($listName, $name) = explode('/', $name);
}
return defineFieldList($listName)->field($name);
if(is_null($listName)) $listName = fieldList::$currentName;
$fieldList = fieldList::ensure($listName);
return $fieldList->field($name);
}
function fieldList(string $name)
@@ -37,9 +46,9 @@ function fieldList(string $name)
return fieldList::ensure($name);
}
function field(string $name): field
function field(string|object|array|null $nameOrProps = null): field
{
return new field($name);
return new field($nameOrProps);
}
function useFields(string|array|field|fieldList|null ...$args): fieldList
+14 -3
View File
@@ -150,10 +150,16 @@ class fieldList
return $this;
}
public function remove(string|array $names): fieldList
public function remove(string ...$names): fieldList
{
if(is_string($names)) $names = explode(',', $names);
foreach($names as $name) unset($this->fields[$name]);
foreach($names as $name)
{
$nameList = explode(',', $name);
foreach($nameList as $nameItem)
{
unset($this->fields[$nameItem]);
}
}
return $this;
}
@@ -182,6 +188,11 @@ class fieldList
return $this;
}
public function names(): array
{
return array_keys($this->fields);
}
public function batchSet(string|array $names, string|array $prop, mixed $value = null): fieldList
{
return $this;