SlideShare a Scribd company logo
Display	
  suite	
  
of	
  your	
  display	
  
Drupalaton	
  2013	
  
Bram	
  Goffings	
  
Drupal	
  developer	
  @	
  nascom	
  
Twi?er:	
  @aspilicious	
  
D.o:	
  @aspilicious	
  
Co-­‐maintainer	
  Display	
  Suite	
  
Play	
  a	
  mean	
  game	
  of	
  table	
  tennis	
  
About	
  me	
  
Quick	
  demo	
  
What	
  has	
  changed?	
  
ConfiguraNon	
  management	
  (cmi)	
  
	
  
SeQngs	
  are	
  stored	
  in	
  configuraNon	
  files	
  
	
  
	
  #	
  ds.config.yml	
  
	
  field_template:	
  '0'	
  
	
  .-­‐default:	
  theme_field	
  
	
  .-­‐kill-­‐colon:	
  '0’	
  
	
  
ConfiguraNon	
  management	
  (cmi)	
  
	
  
Custom	
  fields	
  made	
  in	
  the	
  UI	
  are	
  saved	
  in	
  yml	
  files.	
  
	
  
	
  #	
  ds.field.test.yml	
  
	
  proper:es:	
  
	
  	
  	
  code:	
  
	
  	
  	
  	
  	
  value:	
  test	
  
	
  	
  	
  	
  	
  format:	
  ds_code	
  
	
  	
  	
  	
  use_token:	
  0	
  
	
  field:	
  test	
  
	
  label:	
  test	
  
	
  ui_limit:	
  ''	
  
	
  en::es:	
  
	
  	
  	
  node:	
  node	
  
	
  field_type:	
  code_field	
  
	
  
ConfiguraNon	
  management	
  (cmi)	
  
	
  
Custom	
  field	
  and	
  region	
  classes	
  are	
  saved	
  in	
  yml	
  files	
  
	
  
	
  #	
  ds.classes.yml	
  
	
  regions:	
  'test_region_class'	
  
	
  fields:	
  'test_fields_class'	
  
ConfiguraNon	
  management	
  (cmi)	
  
	
  
ConfiguraNon	
  schema’s	
  are	
  NOT	
  YET	
  wri?en	
  
Twig	
  
	
  
	
  
	
  
Display	
  suite	
  uses	
  twig	
  templates	
  now	
  
	
  
	
  
Twig	
  	
  
Display	
  Suite	
  one-­‐col	
  layout	
  
{#	
  
/**	
  
	
  *	
  @file	
  
	
  *	
  Display	
  Suite	
  1	
  column	
  template.	
  
	
  *	
  
	
  *	
  Available	
  variables:	
  
	
  *	
  -­‐	
  ds_content_wrapper:	
  @todo	
  
	
  *	
  -­‐	
  a?ributes:	
  @todo	
  
	
  *	
  -­‐	
  Ntle_suffix:	
  @todo	
  
	
  *	
  -­‐	
  ds_content:	
  @todo	
  
	
  */	
  
#}	
  
<{{	
  ds_content_wrapper	
  }}	
  class="ds-­‐1col	
  {{	
  a?ributes.class	
  }}	
  clearfix"	
  {{	
  a?ributes	
  }}	
  >	
  
	
  	
  	
  
	
  	
  {%	
  if	
  Ntle_suffix.contextual_links	
  is	
  not	
  null	
  %}	
  
	
  	
  	
  	
  {{	
  Ntle_suffix.contextual_links	
  }}	
  
	
  	
  {%	
  endif	
  %}	
  
	
  
	
  	
  {{	
  ds_content	
  }}	
  
</{{	
  ds_content_wrapper	
  }}>	
  
	
  
{%	
  if	
  drupal_render_children	
  is	
  not	
  null	
  %}	
  
	
  	
  {{	
  drupal_render_children	
  }}	
  
{%	
  endif	
  %}	
  
Twig	
  	
  
Display	
  Suite	
  one-­‐col	
  layout	
  
{#	
  
/**	
  
	
  *	
  @file	
  
	
  *	
  Display	
  Suite	
  1	
  column	
  template.	
  
	
  *	
  
	
  *	
  Available	
  variables:	
  
	
  *	
  -­‐	
  ds_content_wrapper:	
  @todo	
  
	
  *	
  -­‐	
  a?ributes:	
  @todo	
  
	
  *	
  -­‐	
  Ntle_suffix:	
  @todo	
  
	
  *	
  -­‐	
  ds_content:	
  @todo	
  
	
  */	
  
#}	
  
<{{	
  ds_content_wrapper	
  }}	
  class="ds-­‐1col	
  {{	
  a?ributes.class	
  }}	
  clearfix"	
  {{	
  a?ributes	
  }}	
  >	
  
	
  	
  	
  
	
  	
  {%	
  if	
  Ntle_suffix.contextual_links	
  is	
  not	
  null	
  %}	
  
	
  	
  	
  	
  {{	
  Ntle_suffix.contextual_links	
  }}	
  
	
  	
  {%	
  endif	
  %}	
  
	
  
	
  	
  {{	
  ds_content	
  }}	
  
</{{	
  ds_content_wrapper	
  }}>	
  
	
  
{%	
  if	
  drupal_render_children	
  is	
  not	
  null	
  %}	
  
	
  	
  {{	
  drupal_render_children	
  }}	
  
{%	
  endif	
  %}	
  
ç	
  comments	
  
Twig	
  	
  
Display	
  Suite	
  one-­‐col	
  layout	
  
{#	
  
/**	
  
	
  *	
  @file	
  
	
  *	
  Display	
  Suite	
  1	
  column	
  template.	
  
	
  *	
  
	
  *	
  Available	
  variables:	
  
	
  *	
  -­‐	
  ds_content_wrapper:	
  @todo	
  
	
  *	
  -­‐	
  a?ributes:	
  @todo	
  
	
  *	
  -­‐	
  Ntle_suffix:	
  @todo	
  
	
  *	
  -­‐	
  ds_content:	
  @todo	
  
	
  */	
  
#}	
  
<{{	
  ds_content_wrapper	
  }}	
  class="ds-­‐1col	
  {{	
  a?ributes.class	
  }}	
  clearfix"	
  {{	
  a?ributes	
  }}	
  >	
  
	
  	
  	
  
	
  	
  {%	
  if	
  Ntle_suffix.contextual_links	
  is	
  not	
  null	
  %}	
  
	
  	
  	
  	
  {{	
  Ntle_suffix.contextual_links	
  }}	
  
	
  	
  {%	
  endif	
  %}	
  
	
  
	
  	
  {{	
  ds_content	
  }}	
  
</{{	
  ds_content_wrapper	
  }}>	
  
	
  
{%	
  if	
  drupal_render_children	
  is	
  not	
  null	
  %}	
  
	
  	
  {{	
  drupal_render_children	
  }}	
  
{%	
  endif	
  %}	
  
ç	
  Contextual	
  links	
  support	
  
Twig	
  	
  
Display	
  Suite	
  one-­‐col	
  layout	
  
{#	
  
/**	
  
	
  *	
  @file	
  
	
  *	
  Display	
  Suite	
  1	
  column	
  template.	
  
	
  *	
  
	
  *	
  Available	
  variables:	
  
	
  *	
  -­‐	
  ds_content_wrapper:	
  @todo	
  
	
  *	
  -­‐	
  a?ributes:	
  @todo	
  
	
  *	
  -­‐	
  Ntle_suffix:	
  @todo	
  
	
  *	
  -­‐	
  ds_content:	
  @todo	
  
	
  */	
  
#}	
  
<{{	
  ds_content_wrapper	
  }}	
  class="ds-­‐1col	
  {{	
  a?ributes.class	
  }}	
  clearfix"	
  {{	
  a?ributes	
  }}	
  >	
  
	
  	
  	
  
	
  	
  {%	
  if	
  Ntle_suffix.contextual_links	
  is	
  not	
  null	
  %}	
  
	
  	
  	
  	
  {{	
  Ntle_suffix.contextual_links	
  }}	
  
	
  	
  {%	
  endif	
  %}	
  
	
  
	
  	
  {{	
  ds_content	
  }}	
  
</{{	
  ds_content_wrapper	
  }}>	
  
	
  
{%	
  if	
  drupal_render_children	
  is	
  not	
  null	
  %}	
  
	
  	
  {{	
  drupal_render_children	
  }}	
  
{%	
  endif	
  %}	
  
ç	
  DS	
  form	
  support	
  
Twig	
  	
  
Display	
  Suite	
  one-­‐col	
  layout	
  
{#	
  
/**	
  
	
  *	
  @file	
  
	
  *	
  Display	
  Suite	
  1	
  column	
  template.	
  
	
  *	
  
	
  *	
  Available	
  variables:	
  
	
  *	
  -­‐	
  ds_content_wrapper:	
  @todo	
  
	
  *	
  -­‐	
  a?ributes:	
  @todo	
  
	
  *	
  -­‐	
  Ntle_suffix:	
  @todo	
  
	
  *	
  -­‐	
  ds_content:	
  @todo	
  
	
  */	
  
#}	
  
<{{	
  ds_content_wrapper	
  }}	
  class="ds-­‐1col	
  {{	
  a?ributes.class	
  }}	
  clearfix"	
  {{	
  a?ributes	
  }}	
  >	
  
	
  	
  	
  
	
  	
  {%	
  if	
  Ntle_suffix.contextual_links	
  is	
  not	
  null	
  %}	
  
	
  	
  	
  	
  {{	
  Ntle_suffix.contextual_links	
  }}	
  
	
  	
  {%	
  endif	
  %}	
  
	
  
	
  	
  {{	
  ds_content	
  }}	
  
</{{	
  ds_content_wrapper	
  }}>	
  
	
  
{%	
  if	
  drupal_render_children	
  is	
  not	
  null	
  %}	
  
	
  	
  {{	
  drupal_render_children	
  }}	
  
{%	
  endif	
  %}	
  
Actual	
  template!	
  
Twig	
  
	
  
	
  
	
  
Drush	
  layout	
  script	
  is	
  not	
  yet	
  (completely)	
  working	
  
	
  
	
  
RouNng,	
  controllers	
  and	
  Symfony	
  
	
  
•  Converted	
  hook_menu	
  to	
  the	
  new	
  rouNng	
  system	
  
•  Converted	
  procedural	
  callbacks	
  to	
  controller	
  classes	
  
•  Converted	
  form	
  callbacks	
  to	
  form	
  classes	
  
•  Made	
  use	
  of	
  the	
  symfony	
  request	
  objects.	
  
•  …	
  
RouNng,	
  controllers	
  and	
  Symfony	
  
	
  
	
  
	
  
I	
  need	
  a	
  few	
  hours	
  to	
  go	
  through	
  all	
  these	
  changes.	
  
RouNng,	
  controllers	
  and	
  Symfony	
  
	
  
	
  
I	
  need	
  a	
  few	
  hours	
  to	
  go	
  through	
  all	
  the	
  changes.	
  
	
  
Browse	
  through	
  the	
  Display	
  Suite	
  UI	
  module	
  source	
  code	
  if	
  
you’re	
  curious	
  how	
  the	
  rouNng	
  system	
  is	
  working	
  in	
  D8	
  now.	
  
RouNng,	
  controllers	
  and	
  Symfony	
  
	
  
	
  
I	
  need	
  a	
  few	
  hours	
  to	
  go	
  through	
  all	
  the	
  changes.	
  
	
  
Browse	
  through	
  the	
  Display	
  Suite	
  UI	
  module	
  source	
  code	
  if	
  
you’re	
  curious	
  how	
  the	
  rouNng	
  system	
  is	
  working	
  in	
  D8	
  now.	
  
	
  
The	
  router	
  stuff	
  will	
  sNll	
  change	
  a	
  lot	
  before	
  Drupal	
  8	
  is	
  released.	
  
Plugins	
  
Plugins	
  
	
  
	
  
Display	
  suite	
  uses	
  plugins	
  for	
  custom	
  fields	
  wri?en	
  in	
  code	
  
	
  
Plugins	
  
	
  
	
  
Display	
  suite	
  uses	
  plugins	
  for	
  custom	
  fields	
  wri?en	
  in	
  code	
  
	
  
Plugins	
  replace	
  hook_ds_fields_info	
  
	
  
Plugins	
  
	
  
	
  
Display	
  suite	
  uses	
  plugins	
  for	
  custom	
  fields	
  wri?en	
  in	
  code	
  
	
  
Plugins	
  replace	
  hook_ds_fields_info	
  
	
  
Hook_ds_fields_info_alter	
  sNll	
  exists	
  
	
  
What	
  is	
  a	
  DS	
  field	
  plugin?	
  
What	
  is	
  a	
  DS	
  field	
  plugin?	
  
	
  
	
  
A	
  class	
  that	
  implements	
  the	
  DsFieldInterface	
  interface	
  
What	
  is	
  a	
  DS	
  field	
  plugin?	
  
	
  
	
  
A	
  class	
  that	
  implements	
  the	
  DsFieldInterface	
  interface	
  
	
  
Placed	
  in	
  the	
  DsField	
  namespace	
  
	
  
namespace	
  Drupal<module>PluginDsField;	
  
What	
  is	
  a	
  DS	
  field	
  plugin?	
  
	
  
	
  
A	
  class	
  that	
  implements	
  the	
  DsFieldInterface	
  interface	
  
	
  
Placed	
  in	
  the	
  DsField	
  namespace	
  
	
  
namespace	
  Drupal<module>PluginDsField;	
  
	
  
	
  
What	
  does	
  that	
  mean???	
  
Let’s	
  build	
  an	
  example	
  module	
  to	
  find	
  out!!	
  
ds_example.info.yml	
  
name:	
  'Display	
  Suite	
  example'	
  
descripNon:	
  'My	
  first	
  awesome	
  field	
  plugin'	
  
type:	
  module	
  
core:	
  8.x	
  
package:	
  'Display	
  Suite'	
  
	
  
ds_example.info.yml	
  
name:	
  'Display	
  Suite	
  example'	
  
descripNon:	
  'My	
  first	
  awesome	
  field	
  plugin'	
  
type:	
  module	
  
core:	
  8.x	
  
package:	
  'Display	
  Suite'	
  
	
  
ds_example.module	
  
<?php	
  
	
  
ds_example.module	
  
<?php	
  
	
  
Seriously?	
  
ds_example.module	
  
<?php	
  
	
  
Seriously?	
  
	
  
	
  
Yeah…	
  ;-­‐(	
  	
  
But	
  hopefully	
  we	
  can	
  make	
  this	
  file	
  opNonal	
  soon.	
  
Hello	
  plugin	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
•  Place	
  inside	
  the	
  Drupal<module>PluginDsField	
  namespace	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
•  Place	
  inside	
  the	
  Drupalds_examplePluginDsField	
  namespace	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
•  Place	
  inside	
  the	
  Drupalds_examplePluginDsField	
  namespace	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
•  Place	
  inside	
  the	
  Drupalds_examplePluginDsField	
  namespace	
  
That	
  are	
  a	
  lot	
  of	
  directories!!	
  
Hello	
  plugin	
  
•  A	
  field	
  that	
  prints	
  hello	
  
•  Place	
  inside	
  the	
  Drupalds_examplePluginDsField	
  namespace	
  
That	
  are	
  a	
  lot	
  of	
  directories!!	
  
	
  
Get	
  used	
  to	
  it	
  J	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Hello	
  plugin	
  
<?php	
  
	
  
namespace	
  Drupalds_examplePluginDsField;	
  
	
  
use	
  DrupalCoreAnnotaNonTranslaNon;	
  
use	
  DrupaldsAnnotaNonDsField;	
  
use	
  DrupaldsPluginDsFieldDsFieldBase;	
  
	
  
/**	
  
	
  *	
  @DsField(	
  
	
  *	
  	
  	
  id	
  =	
  "hello",	
  
	
  *	
  	
  	
  Ntle	
  =	
  @TranslaNon("Hello"),	
  
	
  *	
  	
  	
  enNty_type	
  =	
  "node",	
  
	
  *	
  	
  	
  module	
  =	
  "ds_example"	
  
	
  *	
  )	
  
	
  */	
  
class	
  Hello	
  extends	
  DsFieldBase	
  {	
  
	
  
	
  	
  public	
  funcNon	
  render($field)	
  {	
  
	
  	
  	
  	
  return	
  "hello";	
  
	
  	
  }	
  
	
  
}	
  
	
  
Quick	
  demo	
  (part	
  2)	
  
Other	
  funcNonal	
  changes	
  
•  Field	
  templates	
  are	
  moved	
  from	
  ds	
  extras	
  to	
  
ds	
  core	
  
•  CTools	
  integraNon	
  is	
  gone.	
  So	
  no	
  fancy	
  
dynamic	
  field	
  integraNon	
  at	
  the	
  moment.	
  
Your	
  quesNons?!	
  
Please	
  test	
  it!	
  
	
  
and	
  file	
  a	
  bug	
  report	
  when	
  it	
  fails*	
  
*	
  When	
  filing	
  a	
  bug	
  report,	
  be	
  sure	
  it	
  isn’t	
  filed	
  yet.	
  Try	
  to	
  be	
  as	
  specific	
  as	
  possible.	
  Don’t	
  run	
  Display	
  Suite	
  on	
  a	
  
“real”	
  drupal	
  8	
  site	
  yet	
  (if	
  they	
  exist).	
  Stuff	
  could	
  break.	
  We	
  are	
  not	
  responsible	
  for	
  the	
  mental	
  pain	
  a	
  broken	
  
Display	
  Suite	
  module	
  causes	
  when	
  there	
  isn’t	
  an	
  official	
  release	
  yet.	
  Not	
  everything	
  is	
  converted	
  yet,	
  you	
  can	
  ask	
  
us	
  in	
  irc	
  if	
  you’re	
  in	
  doubt.	
  

More Related Content

Viewers also liked

Chương 3 + chương 4
Chương 3 + chương 4Chương 3 + chương 4
Chương 3 + chương 4Nguyễn Liên
 
Drupalcamp Leuven 2013 - Display Suite, the future of your display
Drupalcamp Leuven 2013 - Display Suite, the future of your displayDrupalcamp Leuven 2013 - Display Suite, the future of your display
Drupalcamp Leuven 2013 - Display Suite, the future of your display
Bram Goffings
 
Medieval research assignment
Medieval research assignmentMedieval research assignment
Medieval research assignmentecrowe
 
Dev days Szeged 2014: Plugin system in drupal 8
Dev days Szeged 2014: Plugin system in drupal 8Dev days Szeged 2014: Plugin system in drupal 8
Dev days Szeged 2014: Plugin system in drupal 8
Bram Goffings
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitaesrdominguez
 
REPTLIA
REPTLIAREPTLIA
Bimbingan & konseling
Bimbingan & konselingBimbingan & konseling
Bimbingan & konseling
Gita Paramitha
 
PISCES PPT
PISCES PPTPISCES PPT
PISCES PPT
Gita Paramitha
 

Viewers also liked (12)

Tugas 2
Tugas 2Tugas 2
Tugas 2
 
Chương 3 + chương 4
Chương 3 + chương 4Chương 3 + chương 4
Chương 3 + chương 4
 
Chương 1 + 2
Chương 1 + 2Chương 1 + 2
Chương 1 + 2
 
Drupalcamp Leuven 2013 - Display Suite, the future of your display
Drupalcamp Leuven 2013 - Display Suite, the future of your displayDrupalcamp Leuven 2013 - Display Suite, the future of your display
Drupalcamp Leuven 2013 - Display Suite, the future of your display
 
Tugas 2
Tugas 2Tugas 2
Tugas 2
 
Medieval research assignment
Medieval research assignmentMedieval research assignment
Medieval research assignment
 
Chương 1 + 2
Chương 1 + 2Chương 1 + 2
Chương 1 + 2
 
Dev days Szeged 2014: Plugin system in drupal 8
Dev days Szeged 2014: Plugin system in drupal 8Dev days Szeged 2014: Plugin system in drupal 8
Dev days Szeged 2014: Plugin system in drupal 8
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitae
 
REPTLIA
REPTLIAREPTLIA
REPTLIA
 
Bimbingan & konseling
Bimbingan & konselingBimbingan & konseling
Bimbingan & konseling
 
PISCES PPT
PISCES PPTPISCES PPT
PISCES PPT
 

Similar to Presentation drupalaton august 2013

Display Suite: A Themers Perspective
Display Suite: A Themers PerspectiveDisplay Suite: A Themers Perspective
Display Suite: A Themers PerspectiveMediacurrent
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
manugoel2003
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
Shabir Ahmad
 
Building a Custom Theme in Drupal 8
Building a Custom Theme in Drupal 8Building a Custom Theme in Drupal 8
Building a Custom Theme in Drupal 8
Anne Tomasevich
 
Mastering Drupal 8’s Twig
Mastering Drupal 8’s TwigMastering Drupal 8’s Twig
Mastering Drupal 8’s Twig
John Albin Wilkins
 
Ruby For Startups
Ruby For StartupsRuby For Startups
Ruby For Startups
Mike Subelsky
 
Building and Maintaining a Distribution in Drupal 7 with Features
Building and Maintaining a  Distribution in Drupal 7 with FeaturesBuilding and Maintaining a  Distribution in Drupal 7 with Features
Building and Maintaining a Distribution in Drupal 7 with Features
Nuvole
 
Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012
Rene Bakx
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
btopro
 
Drupal 8: What's new? Anton Shubkin
Drupal 8: What's new? Anton ShubkinDrupal 8: What's new? Anton Shubkin
Drupal 8: What's new? Anton ShubkinADCI Solutions
 
Drupal training-by-ruchiwebsolutions
Drupal training-by-ruchiwebsolutionsDrupal training-by-ruchiwebsolutions
Drupal training-by-ruchiwebsolutions
php2ranjan
 
Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)
Katy Slemon
 
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
Drupaltour
 
The Flexibility of Drupal 8 | DCNLights 2017
The Flexibility of Drupal 8 | DCNLights 2017The Flexibility of Drupal 8 | DCNLights 2017
The Flexibility of Drupal 8 | DCNLights 2017
Michael Miles
 
Overwriting code in Drupal
Overwriting code in DrupalOverwriting code in Drupal
Overwriting code in Drupal
Amazee Labs
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 
8 things to know about theming in drupal 8
8 things to know about theming in drupal 88 things to know about theming in drupal 8
8 things to know about theming in drupal 8
Logan Farr
 
Drupal 8 - Corso frontend development
Drupal 8 - Corso frontend developmentDrupal 8 - Corso frontend development
Drupal 8 - Corso frontend development
sparkfabrik
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Maurizio Pelizzone
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
John Cleveley
 

Similar to Presentation drupalaton august 2013 (20)

Display Suite: A Themers Perspective
Display Suite: A Themers PerspectiveDisplay Suite: A Themers Perspective
Display Suite: A Themers Perspective
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
Building a Custom Theme in Drupal 8
Building a Custom Theme in Drupal 8Building a Custom Theme in Drupal 8
Building a Custom Theme in Drupal 8
 
Mastering Drupal 8’s Twig
Mastering Drupal 8’s TwigMastering Drupal 8’s Twig
Mastering Drupal 8’s Twig
 
Ruby For Startups
Ruby For StartupsRuby For Startups
Ruby For Startups
 
Building and Maintaining a Distribution in Drupal 7 with Features
Building and Maintaining a  Distribution in Drupal 7 with FeaturesBuilding and Maintaining a  Distribution in Drupal 7 with Features
Building and Maintaining a Distribution in Drupal 7 with Features
 
Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012Twig for Drupal @ Frontendunited Amsterdam 2012
Twig for Drupal @ Frontendunited Amsterdam 2012
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
 
Drupal 8: What's new? Anton Shubkin
Drupal 8: What's new? Anton ShubkinDrupal 8: What's new? Anton Shubkin
Drupal 8: What's new? Anton Shubkin
 
Drupal training-by-ruchiwebsolutions
Drupal training-by-ruchiwebsolutionsDrupal training-by-ruchiwebsolutions
Drupal training-by-ruchiwebsolutions
 
Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)Build a video chat application with twilio, rails, and javascript (part 1)
Build a video chat application with twilio, rails, and javascript (part 1)
 
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
 
The Flexibility of Drupal 8 | DCNLights 2017
The Flexibility of Drupal 8 | DCNLights 2017The Flexibility of Drupal 8 | DCNLights 2017
The Flexibility of Drupal 8 | DCNLights 2017
 
Overwriting code in Drupal
Overwriting code in DrupalOverwriting code in Drupal
Overwriting code in Drupal
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 
8 things to know about theming in drupal 8
8 things to know about theming in drupal 88 things to know about theming in drupal 8
8 things to know about theming in drupal 8
 
Drupal 8 - Corso frontend development
Drupal 8 - Corso frontend developmentDrupal 8 - Corso frontend development
Drupal 8 - Corso frontend development
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 

Recently uploaded

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 

Recently uploaded (20)

Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 

Presentation drupalaton august 2013

  • 1. Display  suite   of  your  display   Drupalaton  2013  
  • 2. Bram  Goffings   Drupal  developer  @  nascom   Twi?er:  @aspilicious   D.o:  @aspilicious   Co-­‐maintainer  Display  Suite   Play  a  mean  game  of  table  tennis   About  me  
  • 5. ConfiguraNon  management  (cmi)     SeQngs  are  stored  in  configuraNon  files      #  ds.config.yml    field_template:  '0'    .-­‐default:  theme_field    .-­‐kill-­‐colon:  '0’    
  • 6. ConfiguraNon  management  (cmi)     Custom  fields  made  in  the  UI  are  saved  in  yml  files.      #  ds.field.test.yml    proper:es:        code:            value:  test            format:  ds_code          use_token:  0    field:  test    label:  test    ui_limit:  ''    en::es:        node:  node    field_type:  code_field    
  • 7. ConfiguraNon  management  (cmi)     Custom  field  and  region  classes  are  saved  in  yml  files      #  ds.classes.yml    regions:  'test_region_class'    fields:  'test_fields_class'  
  • 8. ConfiguraNon  management  (cmi)     ConfiguraNon  schema’s  are  NOT  YET  wri?en  
  • 9. Twig         Display  suite  uses  twig  templates  now      
  • 10. Twig     Display  Suite  one-­‐col  layout   {#   /**    *  @file    *  Display  Suite  1  column  template.    *    *  Available  variables:    *  -­‐  ds_content_wrapper:  @todo    *  -­‐  a?ributes:  @todo    *  -­‐  Ntle_suffix:  @todo    *  -­‐  ds_content:  @todo    */   #}   <{{  ds_content_wrapper  }}  class="ds-­‐1col  {{  a?ributes.class  }}  clearfix"  {{  a?ributes  }}  >            {%  if  Ntle_suffix.contextual_links  is  not  null  %}          {{  Ntle_suffix.contextual_links  }}      {%  endif  %}        {{  ds_content  }}   </{{  ds_content_wrapper  }}>     {%  if  drupal_render_children  is  not  null  %}      {{  drupal_render_children  }}   {%  endif  %}  
  • 11. Twig     Display  Suite  one-­‐col  layout   {#   /**    *  @file    *  Display  Suite  1  column  template.    *    *  Available  variables:    *  -­‐  ds_content_wrapper:  @todo    *  -­‐  a?ributes:  @todo    *  -­‐  Ntle_suffix:  @todo    *  -­‐  ds_content:  @todo    */   #}   <{{  ds_content_wrapper  }}  class="ds-­‐1col  {{  a?ributes.class  }}  clearfix"  {{  a?ributes  }}  >            {%  if  Ntle_suffix.contextual_links  is  not  null  %}          {{  Ntle_suffix.contextual_links  }}      {%  endif  %}        {{  ds_content  }}   </{{  ds_content_wrapper  }}>     {%  if  drupal_render_children  is  not  null  %}      {{  drupal_render_children  }}   {%  endif  %}   ç  comments  
  • 12. Twig     Display  Suite  one-­‐col  layout   {#   /**    *  @file    *  Display  Suite  1  column  template.    *    *  Available  variables:    *  -­‐  ds_content_wrapper:  @todo    *  -­‐  a?ributes:  @todo    *  -­‐  Ntle_suffix:  @todo    *  -­‐  ds_content:  @todo    */   #}   <{{  ds_content_wrapper  }}  class="ds-­‐1col  {{  a?ributes.class  }}  clearfix"  {{  a?ributes  }}  >            {%  if  Ntle_suffix.contextual_links  is  not  null  %}          {{  Ntle_suffix.contextual_links  }}      {%  endif  %}        {{  ds_content  }}   </{{  ds_content_wrapper  }}>     {%  if  drupal_render_children  is  not  null  %}      {{  drupal_render_children  }}   {%  endif  %}   ç  Contextual  links  support  
  • 13. Twig     Display  Suite  one-­‐col  layout   {#   /**    *  @file    *  Display  Suite  1  column  template.    *    *  Available  variables:    *  -­‐  ds_content_wrapper:  @todo    *  -­‐  a?ributes:  @todo    *  -­‐  Ntle_suffix:  @todo    *  -­‐  ds_content:  @todo    */   #}   <{{  ds_content_wrapper  }}  class="ds-­‐1col  {{  a?ributes.class  }}  clearfix"  {{  a?ributes  }}  >            {%  if  Ntle_suffix.contextual_links  is  not  null  %}          {{  Ntle_suffix.contextual_links  }}      {%  endif  %}        {{  ds_content  }}   </{{  ds_content_wrapper  }}>     {%  if  drupal_render_children  is  not  null  %}      {{  drupal_render_children  }}   {%  endif  %}   ç  DS  form  support  
  • 14. Twig     Display  Suite  one-­‐col  layout   {#   /**    *  @file    *  Display  Suite  1  column  template.    *    *  Available  variables:    *  -­‐  ds_content_wrapper:  @todo    *  -­‐  a?ributes:  @todo    *  -­‐  Ntle_suffix:  @todo    *  -­‐  ds_content:  @todo    */   #}   <{{  ds_content_wrapper  }}  class="ds-­‐1col  {{  a?ributes.class  }}  clearfix"  {{  a?ributes  }}  >            {%  if  Ntle_suffix.contextual_links  is  not  null  %}          {{  Ntle_suffix.contextual_links  }}      {%  endif  %}        {{  ds_content  }}   </{{  ds_content_wrapper  }}>     {%  if  drupal_render_children  is  not  null  %}      {{  drupal_render_children  }}   {%  endif  %}   Actual  template!  
  • 15. Twig         Drush  layout  script  is  not  yet  (completely)  working      
  • 16. RouNng,  controllers  and  Symfony     •  Converted  hook_menu  to  the  new  rouNng  system   •  Converted  procedural  callbacks  to  controller  classes   •  Converted  form  callbacks  to  form  classes   •  Made  use  of  the  symfony  request  objects.   •  …  
  • 17. RouNng,  controllers  and  Symfony         I  need  a  few  hours  to  go  through  all  these  changes.  
  • 18. RouNng,  controllers  and  Symfony       I  need  a  few  hours  to  go  through  all  the  changes.     Browse  through  the  Display  Suite  UI  module  source  code  if   you’re  curious  how  the  rouNng  system  is  working  in  D8  now.  
  • 19. RouNng,  controllers  and  Symfony       I  need  a  few  hours  to  go  through  all  the  changes.     Browse  through  the  Display  Suite  UI  module  source  code  if   you’re  curious  how  the  rouNng  system  is  working  in  D8  now.     The  router  stuff  will  sNll  change  a  lot  before  Drupal  8  is  released.  
  • 21. Plugins       Display  suite  uses  plugins  for  custom  fields  wri?en  in  code    
  • 22. Plugins       Display  suite  uses  plugins  for  custom  fields  wri?en  in  code     Plugins  replace  hook_ds_fields_info    
  • 23. Plugins       Display  suite  uses  plugins  for  custom  fields  wri?en  in  code     Plugins  replace  hook_ds_fields_info     Hook_ds_fields_info_alter  sNll  exists    
  • 24. What  is  a  DS  field  plugin?  
  • 25. What  is  a  DS  field  plugin?       A  class  that  implements  the  DsFieldInterface  interface  
  • 26. What  is  a  DS  field  plugin?       A  class  that  implements  the  DsFieldInterface  interface     Placed  in  the  DsField  namespace     namespace  Drupal<module>PluginDsField;  
  • 27. What  is  a  DS  field  plugin?       A  class  that  implements  the  DsFieldInterface  interface     Placed  in  the  DsField  namespace     namespace  Drupal<module>PluginDsField;       What  does  that  mean???  
  • 28. Let’s  build  an  example  module  to  find  out!!  
  • 29. ds_example.info.yml   name:  'Display  Suite  example'   descripNon:  'My  first  awesome  field  plugin'   type:  module   core:  8.x   package:  'Display  Suite'    
  • 30. ds_example.info.yml   name:  'Display  Suite  example'   descripNon:  'My  first  awesome  field  plugin'   type:  module   core:  8.x   package:  'Display  Suite'    
  • 32. ds_example.module   <?php     Seriously?  
  • 33. ds_example.module   <?php     Seriously?       Yeah…  ;-­‐(     But  hopefully  we  can  make  this  file  opNonal  soon.  
  • 35. Hello  plugin   •  A  field  that  prints  hello  
  • 36. Hello  plugin   •  A  field  that  prints  hello   •  Place  inside  the  Drupal<module>PluginDsField  namespace  
  • 37. Hello  plugin   •  A  field  that  prints  hello   •  Place  inside  the  Drupalds_examplePluginDsField  namespace  
  • 38. Hello  plugin   •  A  field  that  prints  hello   •  Place  inside  the  Drupalds_examplePluginDsField  namespace  
  • 39. Hello  plugin   •  A  field  that  prints  hello   •  Place  inside  the  Drupalds_examplePluginDsField  namespace   That  are  a  lot  of  directories!!  
  • 40. Hello  plugin   •  A  field  that  prints  hello   •  Place  inside  the  Drupalds_examplePluginDsField  namespace   That  are  a  lot  of  directories!!     Get  used  to  it  J  
  • 41. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 42. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 43. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 44. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 45. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 46. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 47. Hello  plugin   <?php     namespace  Drupalds_examplePluginDsField;     use  DrupalCoreAnnotaNonTranslaNon;   use  DrupaldsAnnotaNonDsField;   use  DrupaldsPluginDsFieldDsFieldBase;     /**    *  @DsField(    *      id  =  "hello",    *      Ntle  =  @TranslaNon("Hello"),    *      enNty_type  =  "node",    *      module  =  "ds_example"    *  )    */   class  Hello  extends  DsFieldBase  {        public  funcNon  render($field)  {          return  "hello";      }     }    
  • 49. Other  funcNonal  changes   •  Field  templates  are  moved  from  ds  extras  to   ds  core   •  CTools  integraNon  is  gone.  So  no  fancy   dynamic  field  integraNon  at  the  moment.  
  • 51. Please  test  it!     and  file  a  bug  report  when  it  fails*   *  When  filing  a  bug  report,  be  sure  it  isn’t  filed  yet.  Try  to  be  as  specific  as  possible.  Don’t  run  Display  Suite  on  a   “real”  drupal  8  site  yet  (if  they  exist).  Stuff  could  break.  We  are  not  responsible  for  the  mental  pain  a  broken   Display  Suite  module  causes  when  there  isn’t  an  official  release  yet.  Not  everything  is  converted  yet,  you  can  ask   us  in  irc  if  you’re  in  doubt.