Structure field—Default values

my blueprint

title: Expose
fields:
  title:
    label: Titel
    type:  text
  datenfelder:
    label: Tabelle
    type: structure
    entry: > 
      {{dftitle}} {{dftext}}
    default:
      -
        dftitle: Mietfläche 
        dftext: "7.000 {{m2}}"
      -
        dftitle: Grundriss
        dftext: " "
    fields:
      dftitle:
        label: Titel
        type: text
        required: true
      dftext:
        label: Text
        type: textarea
        buttons: false
        required: true

in my site.php

function blueprintStructureFromPage($page) {
	$yml = Yaml::decode(file_get_contents(kirby()->roots->blueprints() . DS . $page->template() . '.yml'));
	if(!$yml || count($yml) == 0) return null;

	$blueprint = new Structure($yml);
	$blueprint->set('fields', new Structure($blueprint->fields()));
	foreach ($blueprint->fields() as $fkey => $fval) {
		$blueprint->get('fields')->set($fkey, new Structure($fval));
            // NOTE: no more deeper nesting implemented
	}
	return $blueprint;
}

in my config.php

kirby()->hook('panel.page.create', function($page) {
  if($page->template() == 'expose') {
    $data = array();
    $blue = blueprintStructureFromPage($page);
    foreach ($blue->fields()->datenfelder()->default() as $default) {
      $a = print_r(a::get($default, 'dftitle'), true);
      $b = print_r(a::get($default, 'dftext'), true);
      if($a && $b) array_push($data, ['dftitle' => $a, 'dftext' => $b]);;
    }
    try { 
      $page->update(['datenfelder' => yaml::encode($data)]); 
    }
    catch(Exception $ex) {}
  }
});
1 Like