Merge branch 'master' into develop
This commit is contained in:
commit
5c896fab85
|
@ -10,6 +10,9 @@ main
|
||||||
img
|
img
|
||||||
@extend .img-responsive
|
@extend .img-responsive
|
||||||
|
|
||||||
|
p img
|
||||||
|
margin: 1.5em 0
|
||||||
|
|
||||||
.embed-container
|
.embed-container
|
||||||
padding: 56.25% 0 0
|
padding: 56.25% 0 0
|
||||||
position: relative
|
position: relative
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
pre
|
|
||||||
display: block
|
|
||||||
overflow: auto
|
|
||||||
word-break: normal
|
|
||||||
word-wrap: no-wrap
|
|
||||||
|
|
||||||
pre[class*="language-"]
|
|
||||||
border: 0
|
|
||||||
border-radius: 0
|
|
||||||
|
|
||||||
pre code
|
|
||||||
white-space: pre
|
|
||||||
word-break: normal
|
|
||||||
|
|
||||||
code.hljs
|
|
||||||
background-color: inherit
|
|
||||||
padding: 0
|
|
39
assets/sass/blog-post.sass
Normal file
39
assets/sass/blog-post.sass
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
|
||||||
|
|
||||||
|
.post-pager
|
||||||
|
clear: both
|
||||||
|
margin-top: 2em
|
||||||
|
|
||||||
|
.post-pager div
|
||||||
|
flex: 1
|
||||||
|
|
||||||
|
pre
|
||||||
|
display: block
|
||||||
|
overflow: auto
|
||||||
|
word-break: normal
|
||||||
|
word-wrap: no-wrap
|
||||||
|
|
||||||
|
pre[class*="language-"]
|
||||||
|
border: 0
|
||||||
|
border-radius: 0
|
||||||
|
margin: 1.5em 0
|
||||||
|
|
||||||
|
pre code
|
||||||
|
white-space: pre
|
||||||
|
word-break: normal
|
||||||
|
|
||||||
|
code.hljs
|
||||||
|
background-color: inherit
|
||||||
|
padding: 0
|
||||||
|
|
||||||
|
code[data-gist-id]
|
||||||
|
background: transparent
|
||||||
|
padding: 0
|
||||||
|
|
||||||
|
.about-author
|
||||||
|
+clearfix
|
||||||
|
|
||||||
|
img
|
||||||
|
float: left
|
||||||
|
margin: 0 1em 1em 0
|
||||||
|
width: 50px
|
|
@ -1,3 +1,5 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
|
||||||
|
|
||||||
.page--blog__list
|
.page--blog__list
|
||||||
ul.posts
|
ul.posts
|
||||||
list-style: none
|
list-style: none
|
|
@ -1,7 +0,0 @@
|
||||||
.about-author
|
|
||||||
+clearfix
|
|
||||||
|
|
||||||
img
|
|
||||||
float: left
|
|
||||||
margin: 0 1em 1em 0
|
|
||||||
width: 50px
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables'
|
||||||
|
@import 'mixins'
|
||||||
|
|
||||||
.experience-item
|
.experience-item
|
||||||
margin-bottom: $padding-large-vertical * 3
|
margin-bottom: $padding-large-vertical * 3
|
||||||
+clearfix
|
+clearfix
|
12
assets/sass/main.sass
Normal file
12
assets/sass/main.sass
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap'
|
||||||
|
|
||||||
|
@import 'base'
|
||||||
|
@import 'mixins'
|
||||||
|
|
||||||
|
@import 'base/layout'
|
||||||
|
@import 'base/typography'
|
||||||
|
|
||||||
|
@import 'components/availability'
|
||||||
|
@import 'components/badges'
|
||||||
|
@import 'components/footer'
|
||||||
|
@import 'components/meetups'
|
|
@ -1,3 +1,6 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables'
|
||||||
|
@import 'mixins'
|
||||||
|
|
||||||
.project-company
|
.project-company
|
||||||
&.has-logo
|
&.has-logo
|
||||||
a:link,
|
a:link,
|
|
@ -1,21 +0,0 @@
|
||||||
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap'
|
|
||||||
|
|
||||||
@import 'base'
|
|
||||||
@import 'mixins'
|
|
||||||
|
|
||||||
@import 'base/layout'
|
|
||||||
@import 'base/typography'
|
|
||||||
@import 'base/code'
|
|
||||||
|
|
||||||
@import 'components/about-author'
|
|
||||||
@import 'components/availability'
|
|
||||||
@import 'components/badges'
|
|
||||||
@import 'components/blog-list'
|
|
||||||
@import 'components/footer'
|
|
||||||
@import 'components/meetups'
|
|
||||||
@import 'components/page-about'
|
|
||||||
@import 'components/page-post'
|
|
||||||
@import 'components/page-experience'
|
|
||||||
@import 'components/page-talk'
|
|
||||||
@import 'components/project-company'
|
|
||||||
@import 'components/testimonials'
|
|
14
assets/sass/talk.sass
Normal file
14
assets/sass/talk.sass
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables'
|
||||||
|
@import 'mixins'
|
||||||
|
|
||||||
|
.talk-full h1
|
||||||
|
margin-bottom: 25px
|
||||||
|
|
||||||
|
.presentation
|
||||||
|
background: url('../images/loading.gif') no-repeat center
|
||||||
|
min-height: 275px
|
||||||
|
width: 100%
|
||||||
|
+tablet
|
||||||
|
min-height: 460px
|
||||||
|
+desktop
|
||||||
|
min-height: 540px
|
|
@ -1,15 +1,3 @@
|
||||||
.talk-full h1
|
|
||||||
margin-bottom: 25px
|
|
||||||
|
|
||||||
.presentation
|
|
||||||
background: url('../images/loading.gif') no-repeat center
|
|
||||||
min-height: 275px
|
|
||||||
width: 100%
|
|
||||||
+tablet
|
|
||||||
min-height: 460px
|
|
||||||
+desktop
|
|
||||||
min-height: 540px
|
|
||||||
|
|
||||||
.talk-event-table
|
.talk-event-table
|
||||||
& > thead > tr > th,
|
& > thead > tr > th,
|
||||||
& > tbody > tr > td
|
& > tbody > tr > td
|
|
@ -1,3 +1,7 @@
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix'
|
||||||
|
@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables'
|
||||||
|
@import 'mixins'
|
||||||
|
|
||||||
.testimonial
|
.testimonial
|
||||||
+clearfix
|
+clearfix
|
||||||
margin-bottom: 10px
|
margin-bottom: 10px
|
31
gulpfile.js
31
gulpfile.js
|
@ -20,12 +20,10 @@ var config = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
gulp.task('styles', function () {
|
var app = {};
|
||||||
return gulp.src([
|
|
||||||
config.bowerDir + '/font-awesome/css/font-awesome.css',
|
app.sass = function (sourceFiles, filename) {
|
||||||
config.bowerDir + '/prism/themes/prism-twilight.css',
|
return gulp.src(sourceFiles)
|
||||||
config.sass.sourceDir + config.sass.pattern
|
|
||||||
])
|
|
||||||
.pipe(plugins.plumber())
|
.pipe(plugins.plumber())
|
||||||
.pipe(plugins.if(!config.production, plugins.sourcemaps.init()))
|
.pipe(plugins.if(!config.production, plugins.sourcemaps.init()))
|
||||||
.pipe(plugins.sassGlob())
|
.pipe(plugins.sassGlob())
|
||||||
|
@ -34,7 +32,7 @@ gulp.task('styles', function () {
|
||||||
browsers: ["last 2 versions", "> 5%"],
|
browsers: ["last 2 versions", "> 5%"],
|
||||||
cascade: false
|
cascade: false
|
||||||
}))
|
}))
|
||||||
.pipe(plugins.concat('site.css'))
|
.pipe(plugins.concat(filename))
|
||||||
.pipe(plugins.if(config.production, plugins.purifycss([
|
.pipe(plugins.if(config.production, plugins.purifycss([
|
||||||
'source/**/*.html',
|
'source/**/*.html',
|
||||||
'source/**/*.md',
|
'source/**/*.md',
|
||||||
|
@ -44,6 +42,25 @@ gulp.task('styles', function () {
|
||||||
.pipe(plugins.if(!config.production, plugins.sourcemaps.write('.')))
|
.pipe(plugins.if(!config.production, plugins.sourcemaps.write('.')))
|
||||||
.pipe(plugins.if(!config.production, plugins.refresh()))
|
.pipe(plugins.if(!config.production, plugins.refresh()))
|
||||||
.pipe(gulp.dest(config.sass.outputDir));
|
.pipe(gulp.dest(config.sass.outputDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
gulp.task('styles', function () {
|
||||||
|
app.sass([
|
||||||
|
config.bowerDir + '/font-awesome/css/font-awesome.css',
|
||||||
|
config.sass.sourceDir + '/main.sass'
|
||||||
|
], 'main.css');
|
||||||
|
|
||||||
|
app.sass(config.sass.sourceDir + '/about.sass', 'about.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/blog.sass', 'blog.css');
|
||||||
|
app.sass([
|
||||||
|
config.bowerDir + '/prism/themes/prism-twilight.css',
|
||||||
|
config.sass.sourceDir + '/blog-post.sass'
|
||||||
|
], 'blog-post.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/experience.sass', 'experience.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/project.sass', 'project.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/talk.sass', 'talk.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/talks-table.sass', 'talks-table.css');
|
||||||
|
app.sass(config.sass.sourceDir + '/testimonials.sass', 'testimonials.css');
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('scripts', function () {
|
gulp.task('scripts', function () {
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<head>
|
|
||||||
{% include 'title' %}
|
|
||||||
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
|
|
||||||
{% if page.meta.description %}
|
|
||||||
<meta name="description" content="{{ page.meta.description|e('html') }}">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% include 'og' with { og: page.meta.og } %}
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/site.css">
|
|
||||||
{% block styles %}{% endblock %}
|
|
||||||
|
|
||||||
{% for size in site.apple_touch_icon_sizes %}
|
|
||||||
<link rel="apple-touch-icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% for size in site.favicon_sizes %}
|
|
||||||
<link rel="icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
|
||||||
{% endfor %}
|
|
||||||
</head>
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
title: Turning Your Custom Drupal Module into a Feature
|
||||||
|
tags:
|
||||||
|
- drupal
|
||||||
|
- drupal-7
|
||||||
|
- drupal-planet
|
||||||
|
- features
|
||||||
|
slug: turning-drupal-module-into-feature
|
||||||
|
---
|
||||||
|
{% block excerpt %}
|
||||||
|
Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’t present within the standard installation profile used to run tests.
|
||||||
|
|
||||||
|
I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and therefore present on the testing site once the module is installed.
|
||||||
|
|
||||||
|
To do this, I needed to expose the module to the Features API.
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’t present within the standard installation profile used to run tests.
|
||||||
|
|
||||||
|
I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and therefore present on the testing site once the module is installed.
|
||||||
|
|
||||||
|
To do this, I needed to expose the module to the Features API.
|
||||||
|
|
||||||
|
All that’s needed is to add this line to the `mymodule.info` file:
|
||||||
|
|
||||||
|
```language-ini
|
||||||
|
features[features_api][] = api:2
|
||||||
|
```
|
||||||
|
|
||||||
|
After clearing the cache, the module is now visible in the Features list - and ready to have the appropriate configuration added to it.
|
||||||
|
|
||||||
|
!['The features list showing the custom module'](/assets/images/blog/custom-module-as-a-feature.png)
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
[0]: https://www.drupal.org/project/features
|
|
@ -13,8 +13,8 @@
|
||||||
|
|
||||||
{% include 'og' with { og: page.meta.og } %}
|
{% include 'og' with { og: page.meta.og } %}
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/site.css">
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/main.css">
|
||||||
{% block styles %}{% endblock %}
|
{% block stylesheets '' %}
|
||||||
|
|
||||||
{% for size in site.apple_touch_icon_sizes %}
|
{% for size in site.apple_touch_icon_sizes %}
|
||||||
<link rel="apple-touch-icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
<link rel="apple-touch-icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
||||||
|
@ -62,6 +62,6 @@
|
||||||
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
|
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% block scripts %}{% endblock %}
|
{% block scripts '' %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -11,3 +11,7 @@
|
||||||
{% include 'post/pager' %}
|
{% include 'post/pager' %}
|
||||||
{% include 'post/about-author' %}
|
{% include 'post/about-author' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/blog-post.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -11,3 +11,7 @@
|
||||||
{% include 'project/skills' %}
|
{% include 'project/skills' %}
|
||||||
{% include 'project/company' %}
|
{% include 'project/company' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/project.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -41,3 +41,8 @@
|
||||||
{% include "talks-table" with { events: events, hide_talk: true } %}
|
{% include "talks-table" with { events: events, hide_talk: true } %}
|
||||||
</div>{# .talk-events #}
|
</div>{# .talk-events #}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/talk.css">
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/talks-table.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
BIN
source/assets/images/blog/custom-module-as-a-feature.png
Normal file
BIN
source/assets/images/blog/custom-module-as-a-feature.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
|
@ -41,3 +41,7 @@ use: [posts]
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block body_classes 'page--blog page--blog__list' %}
|
{% block body_classes 'page--blog page--blog__list' %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/blog.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -99,38 +99,44 @@ experiences:
|
||||||
Maintaining and adding new features to the Horse & Country TV website (Drupal 6).
|
Maintaining and adding new features to the Horse & Country TV website (Drupal 6).
|
||||||
use: [posts]
|
use: [posts]
|
||||||
---
|
---
|
||||||
<h1>Experience</h1>
|
{% block content %}
|
||||||
|
<h1>Experience</h1>
|
||||||
|
|
||||||
{% for experience in page.experiences %}
|
{% for experience in page.experiences %}
|
||||||
{% set company = site.companies[experience.company] %}
|
{% set company = site.companies[experience.company] %}
|
||||||
|
|
||||||
<div class="experience-item{% if company.logo %} has-logo{% endif %}">
|
<div class="experience-item{% if company.logo %} has-logo{% endif %}">
|
||||||
{% if company.logo %}
|
{% if company.logo %}
|
||||||
<div class="experience-item-logo">
|
<div class="experience-item-logo">
|
||||||
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
|
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="experience-item-inner">
|
|
||||||
<h2>{{ company.name }}</h2>
|
|
||||||
|
|
||||||
{% if company.url -%}
|
|
||||||
<a class="experience-item-website" href="{{ company.url }}">
|
|
||||||
{{- company.url -}}
|
|
||||||
</a>
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
<div class="experience-item-role">
|
|
||||||
{{- experience.role }} from {{ experience.start }} to {{ experience.end|default('Present') -}}
|
|
||||||
{%- if experience.location %} ({{ experience.location }}){% endif %}.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if experience.description %}
|
|
||||||
<div class="experience-item-description">
|
|
||||||
{{ experience.description|markdown }}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>{# /.inner #}
|
<div class="experience-item-inner">
|
||||||
</div>
|
<h2>{{ company.name }}</h2>
|
||||||
{% endfor %}
|
|
||||||
|
{% if company.url -%}
|
||||||
|
<a class="experience-item-website" href="{{ company.url }}">
|
||||||
|
{{- company.url -}}
|
||||||
|
</a>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
<div class="experience-item-role">
|
||||||
|
{{- experience.role }} from {{ experience.start }} to {{ experience.end|default('Present') -}}
|
||||||
|
{%- if experience.location %} ({{ experience.location }}){% endif %}.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if experience.description %}
|
||||||
|
<div class="experience-item-description">
|
||||||
|
{{ experience.description|markdown }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>{# /.inner #}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/experience.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -18,11 +18,12 @@ tools:
|
||||||
- { title: Ansible, website: http://www.ansible.com }
|
- { title: Ansible, website: http://www.ansible.com }
|
||||||
use: [posts, testimonials]
|
use: [posts, testimonials]
|
||||||
---
|
---
|
||||||
|
{% block content %}
|
||||||
# About Me
|
# About Me
|
||||||
|
|
||||||
<img src="{{ site.images_url }}{{ site.avatar.url }}" alt="Picture of Oliver" class="me img-circle">
|
<img src="{{ site.images_url }}{{ site.avatar.url }}" alt="Picture of Oliver" class="me img-circle">
|
||||||
|
|
||||||
My name is Oliver Davies (aka [opdavies][1]) - a Web Developer and System Administrator based in Wales, UK. I’m a PHP specialist, a {{ site.work.role }} at [{{ site.companies[site.work.company].name }}][20], former Developer at the [{{ site.companies.drupal_association.name }}][39], part-time freelancer, open source contributor, mentor and conference speaker.
|
My name is Oliver Davies (aka [opdavies][1]) - a Web Developer and System Administrator based in Wales, UK. I’m a PHP specialist, a {{ site.work.role }} at [{{ site.companies[site.work.company].name }}][20], former Developer at the [{{ site.companies.drupal_association.name }}][39], part-time freelancer, open source contributor and advocate, mentor and conference speaker.
|
||||||
|
|
||||||
I’m a provisional member of the [Drupal Security team][14] and a webmaster and documentation maintainer for Drupal.org. [I speak at various user groups and conferences][40], and co-organise the [Drupal Bristol user group][15], [PHPSW][17] and [DrupalCamp Bristol][18].
|
I’m a provisional member of the [Drupal Security team][14] and a webmaster and documentation maintainer for Drupal.org. [I speak at various user groups and conferences][40], and co-organise the [Drupal Bristol user group][15], [PHPSW][17] and [DrupalCamp Bristol][18].
|
||||||
|
|
||||||
|
@ -47,6 +48,11 @@ I’m a provisional member of the [Drupal Security team][14] and a webmaster and
|
||||||
- [Stack Overflow][37]
|
- [Stack Overflow][37]
|
||||||
- [Disqus][38]
|
- [Disqus][38]
|
||||||
- IRC (freenode) - {{ site.irc.name }}
|
- IRC (freenode) - {{ site.irc.name }}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/about.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
[1]: https://www.google.com/#q=opdavies
|
[1]: https://www.google.com/#q=opdavies
|
||||||
[2]: https://www.drupal.org
|
[2]: https://www.drupal.org
|
||||||
|
|
|
@ -5,40 +5,46 @@ meta:
|
||||||
description: 'Information about previous and upcoming talks that Oliver has presented at conferences and user groups'
|
description: 'Information about previous and upcoming talks that Oliver has presented at conferences and user groups'
|
||||||
use: [talks, posts]
|
use: [talks, posts]
|
||||||
---
|
---
|
||||||
<h1>Talks</h1>
|
{% block content %}
|
||||||
|
<h1>Talks</h1>
|
||||||
|
|
||||||
<p>I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please <a href="/contact/">get in touch</a>.</p>
|
<p>I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please <a href="/contact/">get in touch</a>.</p>
|
||||||
|
|
||||||
<p>There is also information about events that I’ve attended and spoken at on my <a href="{{ site.lanyrd.url }}">Lanyrd</a> and <a href="{{ site.joindin.url }}">Joind.in</a> profiles.</p>
|
<p>There is also information about events that I’ve attended and spoken at on my <a href="{{ site.lanyrd.url }}">Lanyrd</a> and <a href="{{ site.joindin.url }}">Joind.in</a> profiles.</p>
|
||||||
|
|
||||||
{% set upcoming_events = [] %}
|
{% set upcoming_events = [] %}
|
||||||
{% set past_events = [] %}
|
{% set past_events = [] %}
|
||||||
|
|
||||||
{% for talk in data.talks %}
|
{% for talk in data.talks %}
|
||||||
{% for event in talk.events if event.date >= 'today'|date('Y-m-d') %}
|
{% for event in talk.events if event.date >= 'today'|date('Y-m-d') %}
|
||||||
{% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %}
|
{% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %}
|
||||||
{% set upcoming_events = upcoming_events|merge([event]) %}
|
{% set upcoming_events = upcoming_events|merge([event]) %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for event in talk.events if event.date < 'today'|date('Y-m-d') %}
|
||||||
|
{% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %}
|
||||||
|
{% set past_events = past_events|merge([event]) %}
|
||||||
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for event in talk.events if event.date < 'today'|date('Y-m-d') %}
|
{% if upcoming_events is not empty %}
|
||||||
{% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %}
|
<h2>Upcoming Talks</h2>
|
||||||
{% set past_events = past_events|merge([event]) %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% if upcoming_events is not empty %}
|
{% include "talks-table" with {
|
||||||
<h2>Upcoming Talks</h2>
|
events: upcoming_events|sortbyfield('date'),
|
||||||
|
hide_feedback: true,
|
||||||
|
} %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<h2>Last 5 Talks</h2>
|
||||||
|
|
||||||
{% include "talks-table" with {
|
{% include "talks-table" with {
|
||||||
events: upcoming_events|sortbyfield('date'),
|
events: past_events|sortbyfield('date')|reverse[:5]
|
||||||
hide_feedback: true,
|
|
||||||
} %}
|
} %}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h2>Last 5 Talks</h2>
|
<p>You can view more talks in the <a href="/talks/archive">talks archive</a>.</p>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% include "talks-table" with {
|
{% block stylesheets %}
|
||||||
events: past_events|sortbyfield('date')|reverse[:5]
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/talks-table.css">
|
||||||
} %}
|
{% endblock %}
|
||||||
|
|
||||||
<p>You can view more talks in the <a href="/talks/archive">talks archive</a>.</p>
|
|
||||||
|
|
|
@ -89,3 +89,7 @@ use: [posts]
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block body_classes 'page--testimonials' %}
|
{% block body_classes 'page--testimonials' %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ site.url }}/assets/css/testimonials.css">
|
||||||
|
{% endblock %}
|
||||||
|
|
Loading…
Reference in a new issue