mirror of
https://github.com/processwire/processwire.git
synced 2025-08-14 18:55:56 +02:00
Add support for custom type-specific Inputfield classes and attributes to be added via markup array in InputfieldWrapper
This commit is contained in:
@@ -424,6 +424,34 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
|
|||||||
return $children;
|
return $children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cached class parents indexed by Inputfield class name
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static protected $classParents = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get array of parent Inputfield classes for given Inputfield (excluding the base Inputfield class)
|
||||||
|
*
|
||||||
|
* @param Inputfield|string $inputfield
|
||||||
|
* @return array
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function classParents($inputfield) {
|
||||||
|
$p = &self::$classParents;
|
||||||
|
$c = is_object($inputfield) ? $inputfield->className() : $inputfield;
|
||||||
|
if(!isset($p[$c])) {
|
||||||
|
$p[$c] = array();
|
||||||
|
foreach(wireClassParents($inputfield) as $parentClass) {
|
||||||
|
if(strpos($parentClass, 'Inputfield') !== 0 || $parentClass === 'Inputfield') break;
|
||||||
|
$p[$c][] = $parentClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $p[$c];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render this Inputfield and the output of its children.
|
* Render this Inputfield and the output of its children.
|
||||||
*
|
*
|
||||||
@@ -483,6 +511,24 @@ class InputfieldWrapper extends Inputfield implements \Countable, \IteratorAggre
|
|||||||
|
|
||||||
if($collapsed == Inputfield::collapsedHidden) continue;
|
if($collapsed == Inputfield::collapsedHidden) continue;
|
||||||
if($collapsed == Inputfield::collapsedNoLocked || $collapsed == Inputfield::collapsedYesLocked) $renderValueMode = true;
|
if($collapsed == Inputfield::collapsedNoLocked || $collapsed == Inputfield::collapsedYesLocked) $renderValueMode = true;
|
||||||
|
|
||||||
|
// allow adding custom classes and/or attributes at runtime (since 3.0.143)
|
||||||
|
$classParents = $this->classParents($inputfield);
|
||||||
|
$classParents[] = $inputfieldClass;
|
||||||
|
foreach($classParents as $classParent) {
|
||||||
|
if(!isset($_markup[$classParent])) continue;
|
||||||
|
$markupParent = $_markup[$classParent];
|
||||||
|
foreach(array('class', 'wrapClass', 'headerClass', 'contentClass') as $classKey) {
|
||||||
|
if(!empty($markupParent[$classKey])) $inputfield->addClass($markupParent[$classKey], $classKey);
|
||||||
|
}
|
||||||
|
foreach(array('attr', 'wrapAttr') as $attrKey) {
|
||||||
|
if(!empty($markupParent[$attrKey]) && is_array($markupParent[$attrKey])) {
|
||||||
|
foreach($markupParent[$attrKey] as $k => $v) {
|
||||||
|
$inputfield->$attrKey($k, $v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ffOut = $this->renderInputfield($inputfield, $renderValueMode);
|
$ffOut = $this->renderInputfield($inputfield, $renderValueMode);
|
||||||
if(!strlen($ffOut)) continue;
|
if(!strlen($ffOut)) continue;
|
||||||
|
Reference in New Issue
Block a user