Use prism for code syntax highlighting
This commit is contained in:
parent
356c9dca43
commit
adf3c67355
|
@ -1,9 +1,12 @@
|
|||
pre
|
||||
display: block
|
||||
overflow: auto
|
||||
word-break: normal
|
||||
word-wrap: no-wrap
|
||||
|
||||
pre code
|
||||
white-space: pre
|
||||
word-break: normal
|
||||
|
||||
code.hljs
|
||||
background-color: inherit
|
||||
|
|
|
@ -5,6 +5,6 @@
|
|||
"compass-breakpoint": "breakpoint-sass#~2.6.1",
|
||||
"font-awesome": "fontawesome#~4.5.0",
|
||||
"jquery2": "^2.0.0",
|
||||
"highlightjs": "^9.9.0"
|
||||
"prism": "prismjs#^1.6.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ var config = {
|
|||
gulp.task('styles', function() {
|
||||
return gulp.src([
|
||||
config.bowerDir + '/font-awesome/css/font-awesome.css',
|
||||
config.bowerDir + '/highlightjs/styles/default.css',
|
||||
config.bowerDir + '/prism/themes/prism-tomorrow.css',
|
||||
config.sass.sourceDir + config.sass.pattern
|
||||
])
|
||||
.pipe(plugins.plumber())
|
||||
|
@ -50,7 +50,8 @@ gulp.task('scripts', function() {
|
|||
return gulp.src([
|
||||
config.bowerDir + '/jquery2/jquery.js',
|
||||
config.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.js',
|
||||
config.bowerDir + '/highlightjs/highlight.pack.js',
|
||||
config.bowerDir + '/prism/prism.js',
|
||||
config.bowerDir + '/prism/components/prism-{apacheconf,bash,css,ini,json,nginx,php,sass,scss,sql,less,twig,xml,yaml}.js',
|
||||
config.js.sourceDir + config.js.pattern
|
||||
])
|
||||
.pipe(plugins.plumber())
|
||||
|
|
|
@ -14,19 +14,19 @@ To start with, I wanted to have something that described what the list was displ
|
|||
|
||||
I scrolled down until I found the piece of code that displayed the terms list:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php if ($terms): ?>
|
||||
<div class="terms terms-inline">
|
||||
<?php print t('Posted in') . $terms; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
~~~
|
||||
```
|
||||
|
||||
Adding `print t(' Posted in ')` will print the words 'Posted in' before outputing the terms.
|
||||
|
||||
I then added some CSS to re-size the spacing between the items, and then add the commas between them to seperate them:
|
||||
|
||||
~~~css
|
||||
```language-css
|
||||
.terms ul.links li {
|
||||
margin-right: 1px;
|
||||
padding: 0;
|
||||
|
@ -39,22 +39,22 @@ I then added some CSS to re-size the spacing between the items, and then add the
|
|||
.terms ul.links li.last:after {
|
||||
content: ".";
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
I created a file named **script.js** in my theme folder with the following code in it. After clearing Drupal's caches, this file is automatically recognised by Drupal 6.
|
||||
|
||||
~~~js
|
||||
```language-js
|
||||
if (Drupal.jsEnabled) {
|
||||
$(document).ready(function() {
|
||||
$('.terms ul.links li.last').prev().addClass('test');
|
||||
})
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
This code finds the last item in the list, uses **.prev** to select the one before it, and then uses **.addClass** to assign it the HTML class of "test". We can then use this class to target it with specific CSS.
|
||||
|
||||
~~~css
|
||||
```language-css
|
||||
.terms ul.links li.test:after {
|
||||
content: " and";
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
|
|
@ -10,7 +10,9 @@ use: [posts]
|
|||
---
|
||||
I created a new Webform to serve as a simple Contact form, but left the main configuration until after I created the form components. I added 'Name', 'Email', 'Subject' and 'Message' fields, as well as a 'Category' select list. Below 'Options', I entered each of my desired options in the following format:
|
||||
|
||||
Email address|Visible name
|
||||
```language-ini
|
||||
Email address|Visible name
|
||||
```
|
||||
|
||||
I went back to the form configuration page and expanded 'Conditional Email Recipients', and selected my Category. Note that the standard 'Email To' field above it needs to be empty. Originally, I made the mistake of leaving addresses in that field which resulted in people being sent emails regardles of which category was selected. I then configured the rest of the form.
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ I added the dimensions of my images, the type of animation, specified the node t
|
|||
|
||||
I added the following code into my About page, as described in the Fancy Slide readme.txt file - the number representing the ID of the slideshow.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php print theme('fancy_slide', 1); ?>
|
||||
~~~
|
||||
```
|
||||
|
||||
In my opinion, this adds a nice effect to the About page. I like it because it's easy to set up, and easy to add additional images later on if required.
|
||||
|
|
|
@ -20,21 +20,21 @@ I didn't want to manually open each post and add the new tag, so I decided to ma
|
|||
|
||||
The first thing I did was create the 'Drupal Planet' term in my Tags vocabulary. I decided to do this via the administration area of my site, and not via the database. Then, using [Sequel Pro](http://www.sequelpro.com), I ran the following SQL query to give me a list of Blog posts on my site - showing just their titles and nid values.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT title, nid FROM node WHERE TYPE = 'blog' ORDER BY title ASC;
|
||||
~~~
|
||||
```
|
||||
|
||||
I made a note of the nid's of the returned nodes, and kept them for later. I then ran a similar query against the term_data table. This returned a list of Taxonomy terms - showing the term's name, and it's unique tid value.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT NAME, tid FROM term_data ORDER BY NAME ASC;
|
||||
~~~
|
||||
```
|
||||
|
||||
The term that I was interested in, Drupal Planet, had the tid of 84. To confirm that no nodes were already assigned a taxonomy term with this tid, I ran another query against the database. I'm using aliases within this query to link the node, term_node and term_data tables. For more information on SQL aliases, take a look at <http://w3schools.com/sql/sql_alias.asp>.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT * FROM node n, term_data td, term_node tn WHERE td.tid = 84 AND n.nid = tn.nid AND tn.tid = td.tid;
|
||||
~~~
|
||||
```
|
||||
|
||||
As expected, it returned no rows.
|
||||
|
||||
|
@ -42,9 +42,9 @@ The table that links node and term_data is called term_node, and is made up of t
|
|||
|
||||
To confirm everything, I ran a simple query against an old post. I know that the only taxonomy term associated with this post is 'Personal', which has a tid value of 44.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT nid, tid FROM term_node WHERE nid = 216;
|
||||
~~~
|
||||
```
|
||||
|
||||
Once the query had confirmed the correct tid value, I began to write the SQL Insert statement that would be needed to add the new term to the required nodes. The nid and vid values were the same on each node, and the value of my taxonomy term would need to be 84.
|
||||
|
||||
|
|
|
@ -23,39 +23,39 @@ When I compare this to the previous gallery, I can see several differences whic
|
|||
|
||||
To do this, I'd need to query my website's database. To begin with, I wanted to have a list of all the galleries on my site which are published, and what they're unique node ID values are. To do this, I opened Sequel Pro and entered the following code:
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT title
|
||||
AS title, nid
|
||||
AS gallery_idFROM node
|
||||
WHERE type = 'gallery'
|
||||
AND status = 1;
|
||||
~~~
|
||||
```
|
||||
|
||||
As the nid value of each gallery corresponds with the 'field_gallery_nid' field within the content_type_photo field, I can now query the database and retrieve information about each specific gallery.
|
||||
|
||||
For example, using [aliasing](http://www.w3schools.com/sql/sql_alias.asp) within my SQL statement, I can retrieve a list of all the published photos within the 'British Squad 2008' gallery by using the following code:
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT n.title, n.nid, p.field_gallery_nid
|
||||
FROM node n, content_type_photo p
|
||||
WHERE p.field_gallery_nid = 105
|
||||
AND n.status = 1
|
||||
AND n.nid = p.nid;
|
||||
~~~
|
||||
```
|
||||
|
||||
I can easily change this to count the number of published nodes by changing the first line of the query to read SELECT COUNT(*).
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT COUNT(*)
|
||||
FROM node n, content_type_photo p
|
||||
WHERE p.field_gallery_nid = 105
|
||||
AND n.status = 1
|
||||
AND n.nid = p.nid;
|
||||
~~~
|
||||
```
|
||||
|
||||
As I've used the [Views Attach](http://drupal.org/project/views_attach) module, and I'm embedding the photos directly into the Gallery nodes, I easily add this to each gallery by creating a custom node-gallery.tpl.php file within my theme. I can then use the following PHP code to retrieve the node ID for that specific gallery:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
$selected_gallery = db_result(db_query("
|
||||
SELECT nid
|
||||
|
@ -64,11 +64,11 @@ WHERE type = 'gallery'
|
|||
AND title = '$title'
|
||||
"));
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
I can then use this variable as part of my next query to count the number of photos within that gallery, similar to what I did earlier.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
$gallery_total = db_result(db_query("
|
||||
SELECT COUNT(*)
|
||||
|
@ -76,11 +76,11 @@ FROM {content_type_photo}
|
|||
WHERE field_gallery_nid = $selected_gallery
|
||||
"));
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
Next, I wanted to display the date that the last photo was displayed within each album. This was done by using a similar query that also sorted the results in a descending order, and limited it to one result - effectively only returning the created date for the newest photo.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
$latest_photo = db_result(db_query("
|
||||
SELECT n.created
|
||||
|
@ -90,11 +90,11 @@ AND n.nid = p.nid
|
|||
ORDER BY n.created DESC LIMIT 1
|
||||
"));
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
This was all then added into a 'print' statement which displayed it into the page.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
if ($selected_gallery_total != 0) {
|
||||
$output = '<i>There are currently ' . $selected_gallery_total . ' photos in this gallery.';
|
||||
|
@ -102,13 +102,13 @@ if ($selected_gallery_total != 0) {
|
|||
print $output;
|
||||
}
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
OK, so let's take a look at the Gallery so far:
|
||||
|
||||
You will notice that the returned date value for the latest photo added is displaying the UNIX timestamp instead of in a more readable format. This can be changed by altering the 'print' statement to include a PHP 'date' function:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
if ($selected_gallery_total != 0) {
|
||||
$output = '<i>There are currently ' . $selected_gallery_total . ' photos in this gallery.';
|
||||
|
@ -116,7 +116,7 @@ if ($selected_gallery_total != 0) {
|
|||
print $output;
|
||||
}
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
The values that I've entered are from [this page](http://php.net/manual/en/function.date.php) on PHP.net, and can be changed according on how you want the date to be displayed.
|
||||
|
||||
|
|
|
@ -13,18 +13,18 @@ At the end of my last post, I'd finished creating the first part of the new pho
|
|||
|
||||
Firstly, I'll refer to the previous list of published galleries that I created before, and create something different that also displays the created and modified dates. Picking the node ID of the required gallery, I used the following SQL query to display a list of photos.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT n.title, n.nid, n.created, n.changed, p.field_gallery_nid
|
||||
FROM node n, content_type_photo pWHERE n.type = 'photo'
|
||||
AND p.field_gallery_nid = 103AND n.nid = p.nid
|
||||
ORDER BY n.nid ASC;
|
||||
~~~
|
||||
```
|
||||
|
||||
When I look back at the old photo gallery, I can see that the previous 'last added' date was June 27, 2008. So, how do I update my new photos to reflect that date? Using <http://www.onlineconversion.com/unix_time.htm>, I can enter the required date in its readable format, and it will give me the equivilent UNIX timestamp. To keep things relatively simple, I'll set all photos within this gallery to the same time.
|
||||
|
||||
The result that I'm given is '1217149200'. I can now use an UPDATE statement within another SQL query to update the created and modified dates.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
UPDATE node
|
||||
INNER JOIN content_type_photo
|
||||
ON node.nid = content_type_photo.nid
|
||||
|
@ -32,7 +32,7 @@ SET
|
|||
node.created = 1217149200,
|
||||
node.changed = 1217149200
|
||||
WHERE content_type_photo.field_gallery_nid = 103
|
||||
~~~
|
||||
```
|
||||
|
||||
Now when I query the database, both the created and modified databases have been updated, and when I return to the new photo gallery, the updated value is being displayed.
|
||||
|
||||
|
|
|
@ -15,17 +15,23 @@ Earlier this year, I posted a solution to [an issue](http://drupal.org/node/7538
|
|||
{% block content %}
|
||||
To begin with, a download a fresh copy of Drupal 6.19 and created a copy of the original user.pages.inc file. Within the duplicate file, I made the same changes to the function that I did in earlier code, and saved the changes. Now, within my Terminal, I can navigate to Drupal's root directory and create the patch.
|
||||
|
||||
diff -rup modules/user/user.pages.inc modules/user/user.pages2.inc > /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```language-bash
|
||||
diff -rup modules/user/user.pages.inc modules/user/user.pages2.inc > /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```
|
||||
|
||||
This command compares the differences between the two files, and creates the specified patch file.
|
||||
|
||||
To apply the patch to my Drupal installation, I go back to Terminal and run the following code:
|
||||
|
||||
patch -p0 < /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```language-bash
|
||||
patch -p0 < /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```
|
||||
|
||||
If, for some reason, I need to reverse the patch, I can run this code:
|
||||
|
||||
patch -p0 -R < /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```language-bash
|
||||
patch -p0 -R < /Users/oliver/Desktop/different_messages_for_blocked_users.patch
|
||||
```
|
||||
|
||||
And that's it!
|
||||
|
||||
|
|
|
@ -11,19 +11,19 @@ I've called it 'Taxonomy', and it's similar to the original 'All Galleries' view
|
|||
|
||||
Within that file, I can remove the standard content output. This still outputs the heading information from the original View. I can now use the function called 'views_embed_view' to embed my taxonomy display onto the display. The views_embed_view function is as follows:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php views_embed_view('my_view', 'block_1', $arg1, $arg2); ?>
|
||||
~~~
|
||||
```
|
||||
|
||||
So, to display the galleries that are assigned the taxonomy of 'tournaments', I can use the following:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php print views_embed_view('photo_gallery', 'page_2', 'tournaments'); ?>
|
||||
~~~
|
||||
```
|
||||
|
||||
To reduce the amount of code needed, I can use the following 'while' loop to generate the same code for each taxonomy term. It dynamically retrieves the relevant taxonomy terms from the database, and uses each name as the argument for the view.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
$terms = db_query("SELECT * FROM {term_data} WHERE vid = 1");
|
||||
while ($term = db_fetch_array($terms)) {
|
||||
|
@ -31,4 +31,4 @@ while ($term = db_fetch_array($terms)) {
|
|||
print views_embed_view('gallery', 'page_2', $term['name']);
|
||||
}
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
|
|
@ -7,7 +7,7 @@ use: [posts]
|
|||
---
|
||||
Today, I realised that I hadn't published the code that I used to create the total figures of galleries and photos at the top of the gallery (I said at the end of [Part 2](/blog/create-better-photo-gallery-drupal-part-2/ "Create a Better Photo Gallery in Drupal - Part 2") that I'd include it in [Part 3](/blog/create-better-photo-gallery-drupal-part-3/ "Create a Better Photo Gallery in Drupal - Part 3"), but I forgot). So, here it is:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
// Queries the database and returns a list of nids of published galleries.
|
||||
|
@ -51,6 +51,6 @@ else {
|
|||
}
|
||||
print '.';
|
||||
?>
|
||||
~~~
|
||||
```
|
||||
|
||||
It was applied to the view as a header which had the input format set to PHP code.
|
||||
|
|
|
@ -12,17 +12,17 @@ use: [posts]
|
|||
---
|
||||
As in [the original post](/blog/add-taxonomy-term-multiple-nodes-using-sql/ "Quickly adding a taxonomy term to multiple nodes using SQL"), I'd generated a list of node ID values, and needed to add structure the SQL update statment formatted in a certain way. However, I changed my inital query slightly to out put the same nid value twice.
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
SELECT nid, nid FROM node WHERE TYPE = 'blog' ORDER BY nid ASC;
|
||||
~~~
|
||||
```
|
||||
|
||||
Then, I could select all of the returned rows, copy the values, and paste them into Coda:
|
||||
|
||||
As before, I needed my SQL update statement to be in the following format:
|
||||
|
||||
~~~sql
|
||||
```language-sql
|
||||
INSERT INTO term_node VALUE (nid, vid, tid), (nid2, vid2, tid);
|
||||
~~~
|
||||
```
|
||||
|
||||
As I mentioned previously, the nid and vid values are the same for each node, and the tid will remain constant. In this case, the tid value that I needed to use was '63'.
|
||||
|
||||
|
|
|
@ -12,11 +12,11 @@ For example, mine is <https://www.facebook.com/pages/edit/?id=143394365692197&am
|
|||
|
||||
I've also wrapped the output in a number_format() function so that it properly formatted with commas etc - like where I've used it within the [Gold Event listing](http://www.horseandcountry.tv/events/paid) on the Horse & Country TV website.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$page_id = "143394365692197";
|
||||
$xml = @simplexml_load_file("http://api.facebook.com/restserver.php?method=facebook.fql.query&query=SELECT%20fan_count%20FROM%20page%20WHERE%20page_id=".$page_id."") or die ("a lot");
|
||||
$fans = $xml->page->fan_count;
|
||||
print number_format($fans);
|
||||
~~~
|
||||
```
|
||||
|
||||
This code was originally found at <http://wp-snippets.com/display-number-facebook-fans>.
|
||||
|
|
|
@ -13,11 +13,15 @@ Note: As I was using Ubuntu, I was using the 'apt-get' command to download and i
|
|||
|
||||
Firstly, I'm going to ensure that all of my installed packages are up to date, and install any available updates.
|
||||
|
||||
$ sudo apt-get update
|
||||
```language-bash
|
||||
$ sudo apt-get update
|
||||
```
|
||||
|
||||
Now, I need to download the subversion, subversion-tools and libapache2 packages.
|
||||
|
||||
$ sudo apt-get install subversion subversion-tools libapache2-svn
|
||||
```language-bash
|
||||
$ sudo apt-get install subversion subversion-tools libapache2-svn
|
||||
```
|
||||
|
||||
These are all of the packages that are needed to run a Subversion server.
|
||||
|
||||
|
@ -25,55 +29,71 @@ These are all of the packages that are needed to run a Subversion server.
|
|||
|
||||
Now, I need to create the directory where my repositories are going to sit. I've chosen this directory as I know that it's one that is accessible to my managed backup service.
|
||||
|
||||
$ sudo mkdir /home/svn
|
||||
```language-bash
|
||||
$ sudo mkdir /home/svn
|
||||
```
|
||||
|
||||
## Create a test repository
|
||||
|
||||
First, I'll create a new folder in which I'll create my test project, and then I'll create a repository for it.
|
||||
|
||||
$ sudo mkdir ~/test
|
||||
$ sudo svnadmin create /home/svn/test -m 'initial project structure'
|
||||
```language-bash
|
||||
$ sudo mkdir ~/test
|
||||
$ sudo svnadmin create /home/svn/test -m 'initial project structure'
|
||||
```
|
||||
|
||||
This will create a new repository containing the base file structure.
|
||||
|
||||
## Adding files into the test project
|
||||
|
||||
$ cd ~/test
|
||||
$ mkdir trunk tags branches
|
||||
```language-bash
|
||||
$ cd ~/test
|
||||
$ mkdir trunk tags branches
|
||||
```
|
||||
|
||||
I can now import these new directories into the test repository.
|
||||
|
||||
$ sudo svn import ~/test file:///home/svn/test -m 'Initial project directories'
|
||||
```language-bash
|
||||
$ sudo svn import ~/test file:///home/svn/test -m 'Initial project directories'
|
||||
```
|
||||
|
||||
This both adds and commits these new directories into the repository.
|
||||
|
||||
In order for Apache to access the SVN repositories, the `/home/svn` directory needs to be owned by the same user and group that Apache runs as. In Ubuntu, this is usually www-data. To change the owner of a directory, use the chown command.
|
||||
|
||||
$ sudo chown -R www-data:www-data /home/svn
|
||||
```language-bash
|
||||
$ sudo chown -R www-data:www-data /home/svn
|
||||
```
|
||||
|
||||
## Configuring Apache
|
||||
|
||||
The first thing that I need to do is enable the dav_svn Apache module, using the a2enmod command.
|
||||
|
||||
$ sudo a2enmod dav_svn
|
||||
```language-bash
|
||||
$ sudo a2enmod dav_svn
|
||||
```
|
||||
|
||||
With this enabled, now I need to modify the Apache configuration file.
|
||||
|
||||
$ cd /etc/apache2
|
||||
$ sudo nano apache2.conf
|
||||
```language-bash
|
||||
$ cd /etc/apache2
|
||||
$ sudo nano apache2.conf
|
||||
```
|
||||
|
||||
At the bottom of the file, add the following lines, and then save the file by pressing Ctrl+X.
|
||||
|
||||
~~~
|
||||
```language-apacheconf
|
||||
<Location "/svn">
|
||||
DAV svn
|
||||
SVNParentPath /home/svn
|
||||
</Location>
|
||||
~~~
|
||||
```
|
||||
|
||||
With this saved, restart the Apache service for the changes to be applied.
|
||||
|
||||
sudo service apache2 restart
|
||||
```language-bash
|
||||
sudo service apache2 restart
|
||||
```
|
||||
|
||||
I can now browse through my test repository by opening Firefox, and navigating to `http://127.0.0.1/svn/test`. Here, I can now see my three directories, although they are currently all empty.
|
||||
|
||||
|
@ -85,7 +105,7 @@ Before I start committing any files to the test repository, I want to ensure tha
|
|||
|
||||
Re-open apache2.conf, and replace the SVN Location information with this:
|
||||
|
||||
~~~~
|
||||
```language-apacheconf
|
||||
<Location "/svn">
|
||||
DAV svn
|
||||
SVNParentPath /home/svn
|
||||
|
@ -94,11 +114,13 @@ Re-open apache2.conf, and replace the SVN Location information with this:
|
|||
AuthUserFile /etc/svn-auth
|
||||
Require valid-user
|
||||
</Location>
|
||||
~~~~
|
||||
```
|
||||
|
||||
Now I need to create the password file.
|
||||
|
||||
$ htpasswd -cm /etc/svn-auth oliver
|
||||
```language-bash
|
||||
$ htpasswd -cm /etc/svn-auth oliver
|
||||
```
|
||||
|
||||
I'm prompted to enter and confirm my password, and then my details are saved. The Apache service will need to be restarted again, and then the user will need to authenticate themselves before viewing the repositories.
|
||||
|
||||
|
@ -108,15 +130,19 @@ I'm prompted to enter and confirm my password, and then my details are saved. Th
|
|||
|
||||
For example, now want to checkout the files within my repository into a new directory called 'test2' within my home directory. Firstly, I need to create the new directory, and then I can issue the checkout command.
|
||||
|
||||
$ cd ~
|
||||
$ mkdir test2
|
||||
$ svn checkout http://127.0.0.1/svn/test/trunk test2
|
||||
```language-bash
|
||||
$ cd ~
|
||||
$ mkdir test2
|
||||
$ svn checkout http://127.0.0.1/svn/test/trunk test2
|
||||
```
|
||||
|
||||
I'm passing the command two arguments - the first is the URL of the repository's trunk directory, and the second is the directory where the files are to be placed. As no files have been commited yet into the trunk, it appears to be empty - but if you perform an ls -la command, you'll see that there is a hidden .svn directory.
|
||||
|
||||
Now you can start adding files into the directory. Once you've created your files, perform a svn add command, passing in individual filenames as further arguments.
|
||||
|
||||
$ svn add index.php
|
||||
$ svn add *
|
||||
```language-bash
|
||||
$ svn add index.php
|
||||
$ svn add *
|
||||
```
|
||||
|
||||
With all the required files added, they can be committed using `svn commit -m 'commit message'` command, and the server can be updated using the svn up command.
|
||||
|
|
|
@ -14,20 +14,28 @@ In this tutorial I'll be showing how to create an [Omega](http://drupal.org/proj
|
|||
|
||||
The first thing that I need to do is download the Omega theme and the Omega Tools and [LESS](http://drupal.org/project/less "LESS module on drupal.org") modules, and then to enable both modules. I'm doing this using Drush, but you can of course do this via the admin interface at admin/modules.
|
||||
|
||||
$ drush dl less omega omega_tools;
|
||||
$ drush en -y less omega_tools
|
||||
```language-bash
|
||||
$ drush dl less omega omega_tools;
|
||||
$ drush en -y less omega_tools
|
||||
```
|
||||
|
||||
With the Omega Tools module enabled I get the drush omega-subtheme command that creates my Omega subtheme programatically. Using this command, I'm creating a new subtheme, enabling it and setting it as the default theme on my site.
|
||||
|
||||
$ drush omega-subtheme "Oliver Davies" --machine_name="oliverdavies" --enable --set-default
|
||||
```language-bash
|
||||
$ drush omega-subtheme "Oliver Davies" --machine_name="oliverdavies" --enable --set-default
|
||||
```
|
||||
|
||||
By default, four stylesheets are created within the subtheme's css directory. The first thing that I'm going to do is rename `global.css` to `global.less`.
|
||||
|
||||
$ mv css/global.css css/global.less
|
||||
```language-bash
|
||||
$ mv css/global.css css/global.less
|
||||
```
|
||||
|
||||
Now I need to find all references to global.css within my oliverdavies.info file. I did this using `$ nano oliverdavies.info`, pressing `Ctrl+W` to search, then `Ctrl+R` to replace, entering `global.css` as the search phrase, and then `global.less` as the replacement text. After making any changes to oliverdavies.info, I need to clear Drupal's caches for the changes to be applied.
|
||||
|
||||
$ drush cc all
|
||||
```language-bash
|
||||
$ drush cc all
|
||||
```
|
||||
|
||||
I tested my changes by making some quick additions to my global.less file and reloading the page.
|
||||
|
||||
|
|
|
@ -19,31 +19,31 @@ Today, I had a situation where I was displaying a list of teasers for news artic
|
|||
|
||||
I have previously seen it done this way by adding this into in a node.tpl.php file:
|
||||
|
||||
~~~~
|
||||
```language-php
|
||||
if ($teaser) {
|
||||
// The teaser output.
|
||||
}
|
||||
else {
|
||||
// The whole node output.
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
However, I decided to do something different and create a separate template file just for teasers. This is done using the hook_preprocess_HOOK function that I can add into my theme's template.php file.
|
||||
|
||||
The function requires the node variables as an argument - one of which is theme_hook_suggestions. This is an array of suggested template files that Drupal looks for and attempts to use when displaying a node, and this is where I'll be adding a new suggestion for my teaser-specific template. Using the `debug()` function, I can easily see what's already there.
|
||||
|
||||
~~~~php
|
||||
```language-php
|
||||
array (
|
||||
0 => 'node__article',
|
||||
1 => 'node__343',
|
||||
2 => 'node__view__latest_news',
|
||||
3 => 'node__view__latest_news__page',
|
||||
)
|
||||
~~~~
|
||||
```
|
||||
|
||||
So, within my theme's template.php file:
|
||||
|
||||
~~~~php
|
||||
```language-php
|
||||
/**
|
||||
* Implementation of hook_preprocess_HOOK().
|
||||
*/
|
||||
|
@ -55,11 +55,11 @@ function mytheme_preprocess_node(&$variables) {
|
|||
$variables['theme_hook_suggestions'][] = 'node__' . $node->type . '_teaser';
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
After adding the new suggestion:
|
||||
|
||||
~~~~php
|
||||
```language-php
|
||||
array (
|
||||
0 => 'node__article',
|
||||
1 => 'node__343',
|
||||
|
@ -67,7 +67,7 @@ array (
|
|||
3 => 'node__view__latest_news__page',
|
||||
4 => 'node__article_teaser',
|
||||
)
|
||||
~~~~
|
||||
```
|
||||
|
||||
Now, within my theme I can create a new node--article-teaser.tpl.php template file and this will get called instead of the node--article.tpl.php when a teaser is loaded. As I'm not specifying the node type specifically and using the dynamic <em>$node->type</em> value within my suggestion, this will also apply for all other content types on my site and not just news articles.
|
||||
{% endblock %}
|
||||
|
|
|
@ -14,14 +14,16 @@ Rather than delete these files or change the file permissions manually for each
|
|||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
When you download [Drupal](http://drupal.org/project/drupal), there are several text files that are placed in the root of your installation. You don't want or need these to be visible to anyone attempting to view them in a browser - especially CHANGELOG.txt as that includes the exact version of Drupal you are running and could therefore have security implications.
|
||||
When you download [Drupal](http://drupal.org/project/drupal), there are several text files that are placed in the root of your installation. You don't want or need these to be visible to anyone attempting to view them in a browser - especially `CHANGELOG.txt` as that includes the exact version of Drupal you are running and could therefore have security implications.
|
||||
|
||||
Rather than delete these files or change the file permissions manually for each file, I can add the following lines into my VirtualHost configuration:
|
||||
|
||||
<Files ~ "\.txt$">
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
||||
```language-apacheconf
|
||||
<Files ~ "\.txt$">
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
||||
```
|
||||
|
||||
This prevents any files with a .txt extension from being accessed and rendered in a web browser.
|
||||
{% endblock %}
|
||||
|
|
|
@ -13,9 +13,14 @@ How to checkout a specific revision from a SVN (Subversion) repository.
|
|||
{% block content %}
|
||||
If you're checking out the repository for the first time:
|
||||
|
||||
svn checkout -r 1234 url://repository/path
|
||||
```language-bash
|
||||
$ svn checkout -r 1234 url://repository/path
|
||||
```
|
||||
|
||||
If you already have the repository checked out:
|
||||
|
||||
svn up -r 1234
|
||||
```language-bash
|
||||
$ svn up -r 1234
|
||||
```
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -18,11 +18,13 @@ How to use a date popup calendar within your custom module.
|
|||
{% block content %}
|
||||
First, I need to download the [Date](http://drupal.org/project/date "Date module on Drupal.org") module, and make my module dependent on date_popup by adding the following line into my module's .info file.
|
||||
|
||||
dependencies[] = date_popup
|
||||
```language-ini
|
||||
dependencies[] = date_popup
|
||||
```
|
||||
|
||||
Within my form builder function:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$form['date'] = array(
|
||||
'#title' => t('Arrival date'),
|
||||
|
||||
|
@ -38,5 +40,5 @@ $form['date'] = array(
|
|||
// Default value must be in 'Y-m-d' format.
|
||||
'#default_value' => date('Y-m-d', time()),
|
||||
);
|
||||
~~~
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -16,16 +16,20 @@ How to use the .htaccess file to forward to a different domain.
|
|||
{% block content %}
|
||||
Within the mod_rewrite section of your .htaccess file, add the following lines:
|
||||
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.co\.uk$
|
||||
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
|
||||
```language-apacheconf
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.co\.uk$
|
||||
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
|
||||
```
|
||||
|
||||
This automatically forwards any users from http://yoursite.co.uk to http://yoursite.com. This can also be used to forward multiple domains:
|
||||
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.co\.uk$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.info$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.biz$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.eu$
|
||||
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
|
||||
```language-apacheconf
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.co\.uk$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.info$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.biz$ [OR]
|
||||
RewriteCond %{HTTP_HOST} ^yoursite\.eu$
|
||||
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
|
||||
```
|
||||
|
||||
If any of the RewriteCond conditions apply, then the RewriteRule is executed.
|
||||
{% endblock %}
|
||||
|
|
|
@ -13,7 +13,7 @@ An example .info file for a Drupal 7 theme.
|
|||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
~~~
|
||||
```language-ini
|
||||
name = My Theme
|
||||
description = A description of my theme
|
||||
core = 7.x
|
||||
|
@ -41,5 +41,5 @@ stylesheets[print][] = css/print.css
|
|||
|
||||
# Add javascript files
|
||||
styles[] = js/mytheme.js
|
||||
~~~
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -20,7 +20,7 @@ If you use a lot of process and preprocess functions within your Drupal theme, t
|
|||
|
||||
The first step is to use the default mytheme_process() and mytheme_preprocess() functions to utilise my custom function. So within my template.php file:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
@ -40,11 +40,11 @@ function mytheme_preprocess(&$variables, $hook) {
|
|||
function mytheme_process(&$variables, $hook) {
|
||||
mytheme_invoke('process', $hook, $variables);
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
Now, to write the `mytheme_invoke()` function:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ function mytheme_invoke($type, $hook, &$variables) {
|
|||
$function($variables);
|
||||
}
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
As `mytheme_invoke()` checks to see if the function already exists before searching for checking the include files, I could still add the functions into template.php as normal and this would override any corresponding include file.
|
||||
{% endblock %}
|
||||
|
|
|
@ -23,13 +23,13 @@ This week I released the first version of the Nomensa Accessible Media Player mo
|
|||
|
||||
The library can be downloaded directly from GitHub, and should be placed within you *sites/all/libraries/nomensa_amp* directory.
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
drush dl libraries nomensa_amp
|
||||
git clone https://github.com/nomensa/Accessible-Media-Player sites/all/libraries/nomensa_amp
|
||||
cd sites/all/libraries/nomensa_amp
|
||||
rm -rf Accessible-media-player_2.0_documentation.pdf example/ README.md
|
||||
drush en -y nomensa_amp
|
||||
~~~~
|
||||
```
|
||||
|
||||
### Configure the Module
|
||||
|
||||
|
@ -41,11 +41,15 @@ Within your content add links to your videos. For example:
|
|||
|
||||
### YouTube
|
||||
|
||||
<a href="http://www.youtube.com/watch?v=Zi31YMGmQC4">Checking colour contrast</a>
|
||||
```language-html
|
||||
<a href="http://www.youtube.com/watch?v=Zi31YMGmQC4">Checking colour contrast</a>
|
||||
```
|
||||
|
||||
### Vimeo
|
||||
|
||||
<a href="http://vimeo.com/33729937">Screen readers are strange, when you're a stranger by Leonie Watson</a>
|
||||
```language-html
|
||||
<a href="http://vimeo.com/33729937">Screen readers are strange, when you're a stranger by Leonie Watson</a>
|
||||
```
|
||||
|
||||
## Adding captions
|
||||
|
||||
|
@ -56,8 +60,10 @@ The best way that I can suggest to do this is to use a File field to upload your
|
|||
3. Right-click the uploaded file, copy the link location, and use this for the path to your captions file.
|
||||
|
||||
For example:
|
||||
|
||||
<a href="http://www.youtube.com/watch?v=Zi31YMGmQC4">Checking colour contrast</a> <a class="captions" href="http://oliverdavies.co.uk/sites/default/files/checking-colour-contrast-captions.xml">Captions for Checking Colour Contrast</a>
|
||||
|
||||
```language-html
|
||||
<a href="http://www.youtube.com/watch?v=Zi31YMGmQC4">Checking colour contrast</a> <a class="captions" href="http://oliverdavies.co.uk/sites/default/files/checking-colour-contrast-captions.xml">Captions for Checking Colour Contrast</a>
|
||||
```
|
||||
|
||||
## Screencast
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ For reference, this is the code needed to display a menu in a Drupal 7 template
|
|||
{% block content %}
|
||||
For reference, this is the code needed to display a menu in a Drupal 7 template file, including the navigation ARIA role.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$menu_name = 'menu-footer-menu';
|
||||
$menu_id = 'footer-menu';
|
||||
print theme('links', array(
|
||||
|
@ -28,5 +28,5 @@ print theme('links', array(
|
|||
'class'=> array('links', 'inline')
|
||||
)
|
||||
));
|
||||
~~~
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -18,7 +18,7 @@ These preferences ensure that the code is compliant with [Drupal coding standard
|
|||
|
||||
These can be changed by going to Preferences > Settings - User.
|
||||
|
||||
~~~
|
||||
```language-json
|
||||
{
|
||||
"color_scheme": "Packages/Theme - Aqua/Color Schemes/Tomorrow Night Aqua.tmTheme",
|
||||
"default_line_ending": "unix",
|
||||
|
@ -79,18 +79,18 @@ These can be changed by going to Preferences > Settings - User.
|
|||
"trim_trailing_white_space_on_save": true,
|
||||
"word_wrap": false
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
## Key bindings
|
||||
|
||||
These can be changed by going to Preferences > Key Bindings - User.
|
||||
|
||||
~~~
|
||||
```language-json
|
||||
[
|
||||
{ "keys": ["alt+s"], "command": "toggle_side_bar" },
|
||||
{ "keys": ["alt+r"], "command": "reindent" }
|
||||
]
|
||||
~~~
|
||||
```
|
||||
|
||||
## Packages
|
||||
|
||||
|
|
|
@ -14,7 +14,9 @@ How to open Sublime Text from the command line.
|
|||
{% block content %}
|
||||
Paste the following code into the Mac OS X Terminal, assuming that you've installed Sublime Text 2 into the /Applications folder.
|
||||
|
||||
$ ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/sublime
|
||||
```language-bash
|
||||
$ ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/sublime
|
||||
```
|
||||
|
||||
Now you can type `sublime <filename>` open a file or directory in Sublime Text, or `sublime .` to open the current directory.
|
||||
|
||||
|
|
|
@ -29,17 +29,21 @@ Alternatively, you could use a base theme like [Sasson](http://drupal.org/projec
|
|||
|
||||
The first thing to do is download the PHPSass library from [GitHub](https://github.com/richthegeek/phpsass "PHPSass on GitHub"), as this is a requirement of the Sassy module and we can't enable it without the library. So, in a Terminal window:
|
||||
|
||||
$ mkdir -p sites/all/libraries;
|
||||
$ cd sites/all/libraries;
|
||||
$ wget https://github.com/richthegeek/phpsass/archive/master.tar.gz;
|
||||
$ tar zxf master.tar.gz;
|
||||
$ rm master.tar.gz;
|
||||
$ mv phpsass-master/ phpsass
|
||||
```language-bash
|
||||
$ mkdir -p sites/all/libraries;
|
||||
$ cd sites/all/libraries;
|
||||
$ wget https://github.com/richthegeek/phpsass/archive/master.tar.gz;
|
||||
$ tar zxf master.tar.gz;
|
||||
$ rm master.tar.gz;
|
||||
$ mv phpsass-master/ phpsass
|
||||
```
|
||||
|
||||
Or, if you're using Drush Make files:
|
||||
|
||||
libraries[phpsass][download][type] = "get"
|
||||
libraries[phpsass][download][url] = "https://github.com/richthegeek/phpsass/archive/master.tar.gz"
|
||||
```language-ini
|
||||
libraries[phpsass][download][type] = "get"
|
||||
libraries[phpsass][download][url] = "https://github.com/richthegeek/phpsass/archive/master.tar.gz"
|
||||
```
|
||||
|
||||
The PHPSass library should now be located at `sites/all/libraries/phpsass`.
|
||||
|
||||
|
@ -47,8 +51,10 @@ The PHPSass library should now be located at `sites/all/libraries/phpsass`.
|
|||
|
||||
This is easy if you use [Drush](http://drupal.org/project/drush):
|
||||
|
||||
$ drush dl libraries prepro sassy
|
||||
$ drush en -y libraries prepro sassy sassy_compass
|
||||
```language-bash
|
||||
$ drush dl libraries prepro sassy
|
||||
$ drush en -y libraries prepro sassy sassy_compass
|
||||
```
|
||||
|
||||
Otherwise, download the each module from it's respective project page and place it within your `sites/all/modules` or `sites/all/modules/contrib` directory.
|
||||
|
||||
|
|
|
@ -17,35 +17,35 @@ I see this regularly when working on Drupal sites when someone wants to check wh
|
|||
{% block content %}
|
||||
I see this regularly when working on Drupal sites when someone wants to check whether the current user is logged in to Drupal (authenticated) or not (anonymous):
|
||||
|
||||
~~~~
|
||||
```language-php
|
||||
global $user;
|
||||
if ($user->uid) {
|
||||
// The user is logged in.
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
~~~~
|
||||
```language-php
|
||||
global $user;
|
||||
if (!$user->uid) {
|
||||
// The user is not logged in.
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
The better way to do this is to use the [user_is_logged_in()](http://api.drupal.org/api/drupal/modules!user!user.module/function/user_is_logged_in/7) function.
|
||||
|
||||
~~~~
|
||||
```language-php
|
||||
if (user_is_logged_in()) {
|
||||
// Do something.
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
This returns a boolean (TRUE or FALSE) depending or not the user is logged in. Essentially, it does the same thing as the first example, but there's no need to load the global variable.
|
||||
|
||||
A great use case for this is within a `hook_menu()` implementation within a custom module.
|
||||
|
||||
~~~~
|
||||
```language-php
|
||||
/**
|
||||
* Implements hook_menu().
|
||||
*/
|
||||
|
@ -58,7 +58,7 @@ function mymodule_menu() {
|
|||
|
||||
return $items;
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
There is also a [user_is_anonymous()](http://api.drupal.org/api/drupal/modules!user!user.module/function/user_is_anonymous/7) function if you want the opposite result. Both of these functions are available in Drupal 6 and higher.
|
||||
{% endblock %}
|
||||
|
|
|
@ -32,7 +32,7 @@ We will be using the fictional *foo* module to demonstrate this.
|
|||
|
||||
The first thing that we need to do is define the new token type and/or the token itself, along with it's descriptive text. To view the existing tokens and types, use `dpm(token_get_info());`, assuming that you have the [Devel module](http://drupal.org/project/devel) installed.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
/**
|
||||
* Implements hook_token_info().
|
||||
*/
|
||||
|
@ -45,7 +45,7 @@ function foo_token_info() {
|
|||
// Return them.
|
||||
return $info;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
In this case, the token called *bar* resides within the *foo* group.
|
||||
|
||||
|
@ -55,7 +55,7 @@ If I needed to add a new token within an existing token type, such as 'node', th
|
|||
|
||||
Now that the Token module is aware of our new token, we now need to determine what the token is replaced with. This is done using `hook_tokens()`. Here is the basic code needed for an implementation:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
/**
|
||||
* Implements hook_tokens().
|
||||
*/
|
||||
|
@ -67,11 +67,11 @@ function foo_tokens($type, $tokens, array $data = array(), array $options = arra
|
|||
// Return the replacements.
|
||||
return $replacements;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
The first thing to check for is the type of token using an `if()` function, as this could be an existing type like 'node', 'user' or 'site', or a custom token type like 'foo'. Once we're sure that we're looking at the right type(s), we can use `foreach ($tokens as $name => $original)` to loop through each of the available tokens using a `switch()`. For each token, you can perform some logic to work out the replacement text and then add it into the replacements array using `$replacements[$original] = $new;`.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
/**
|
||||
* Implements hook_tokens().
|
||||
*/
|
||||
|
@ -100,13 +100,13 @@ function foo_tokens($type, $tokens, array $data = array(), array $options = arra
|
|||
// Return the replacements.
|
||||
return $replacements;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
An example from Copyright Block module:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
/**
|
||||
* Implements hook_tokens().
|
||||
*/
|
||||
|
@ -128,17 +128,17 @@ function copyright_block_tokens($type, $tokens, array $data = array(), array $op
|
|||
|
||||
return $replacements;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
## Using token_replace()
|
||||
|
||||
With everything defined, all that we now need to do is pass some text through the `token_replace()` function to replace it with the values defined within `hook_token()`.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$a = t('Something');
|
||||
// This would use any token type - node, user etc.
|
||||
$b = token_replace($a);
|
||||
// This would only use foo tokens.
|
||||
$c = token_replace($a, array('foo'));
|
||||
~~~
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -14,9 +14,11 @@ After reading numerous blog posts about how to install [Sublime Text 2](http://w
|
|||
{% block content %}
|
||||
After reading numerous blog posts about how to install [Sublime Text 2](http://www.sublimetext.com/2 "Sublime Text 2") in [Ubuntu](http://www.ubuntu.com/2 "Ubuntu"), this is definitely the quickest way! Just paste the following lines into your Terminal:
|
||||
|
||||
$ sudo add-apt-repository ppa:webupd8team/sublime-text-2
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get install sublime-text
|
||||
```language-bash
|
||||
$ sudo add-apt-repository ppa:webupd8team/sublime-text-2
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get install sublime-text
|
||||
```
|
||||
|
||||
After running this, Sublime Text 2 has been installed within the */usr/lib/sublime-text-2* directory and can be launched from the Dashboard, or by typing `subl`, `sublime-text` or `sublime-text-2` into a Terminal window.
|
||||
{% endblock %}
|
||||
|
|
|
@ -18,20 +18,22 @@ Whilst watching [Drupalize.me](http://drupalize.me "Drupalize.me")'s recent [Int
|
|||
|
||||
For example (with some slight modifications):
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
oliver@oliver-mbp:~/Development/drupal(master) $
|
||||
oliver@oliver-mbp:~/Development/a11y_checklist(7.x-1.0) $
|
||||
~~~~
|
||||
```
|
||||
|
||||
Here's how to do it.
|
||||
|
||||
To begin with, create a new file to contain the functions,
|
||||
|
||||
vim ~/.bash/git-prompt
|
||||
```language-bash
|
||||
vim ~/.bash/git-prompt
|
||||
```
|
||||
|
||||
Paste the following code into the file, and save it.
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
parse_git_branch () {
|
||||
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
|
||||
}
|
||||
|
@ -47,18 +49,20 @@ parse_git_branch_or_tag() {
|
|||
fi
|
||||
echo $OUT
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
Edit your `.bashrc` or `.bash_profile` file to override the PS1 value.
|
||||
|
||||
vim ~/.bashrc
|
||||
```language-bash
|
||||
vim ~/.bashrc
|
||||
```
|
||||
|
||||
Add the following code at the bottom of the file, and save it.
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
source ~/.bash/git-prompt
|
||||
PS1="\u@\h:\w\$(parse_git_branch_or_tag) $ "
|
||||
~~~~
|
||||
```
|
||||
|
||||
Restart your Terminal or type `source ~/.bashrc` to see your changes.
|
||||
{% endblock %}
|
||||
|
|
|
@ -20,15 +20,15 @@ The [Domain Access project](https://drupal.org/project/domain "The Domain Access
|
|||
|
||||
Rather than changing the domain settings within the Domain module itself, the best solution I think is to use table prefixes and create a different domain table per environment. With a live, staging and local domains, the tables would be named as follows:
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
live_domain
|
||||
local_domain
|
||||
staging_domain
|
||||
~~~~
|
||||
```
|
||||
|
||||
Within each site's settings.php file, define the prefix for the domain table within the databases array so that each site is looking at the correct table for its environment.
|
||||
|
||||
~~~~php
|
||||
```language-php
|
||||
$databases['default']['default'] = array(
|
||||
'driver' => 'mysql',
|
||||
'database' => 'foobar',
|
||||
|
@ -41,7 +41,7 @@ $databases['default']['default'] = array(
|
|||
// Add any other prefixed tables here.
|
||||
),
|
||||
);
|
||||
~~~~
|
||||
```
|
||||
|
||||
Within each environment-specific domain table, update the subdomain column to contain the appropriate domain names.
|
||||
|
||||
|
|
|
@ -16,11 +16,15 @@ How to use [Drush](https://drupal.org/project/drush) to quickly build a new sub-
|
|||
{% block content %}
|
||||
First, download the [Zen](https://drupal.org/project/zen "The Zen theme") theme if you haven't already done so.
|
||||
|
||||
$ drush dl zen
|
||||
```language-bash
|
||||
$ drush dl zen
|
||||
```
|
||||
|
||||
This will now enable you to use the "drush zen" command.
|
||||
|
||||
$ drush zen "Oliver Davies" oliverdavies --description="A Zen sub-theme for oliverdavies.co.uk" --without-rtl
|
||||
```language-bash
|
||||
$ drush zen "Oliver Davies" oliverdavies --description="A Zen sub-theme for oliverdavies.co.uk" --without-rtl
|
||||
```
|
||||
|
||||
The parameters that I'm passing it are:
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ There are times when doing Drupal development when you need to run a custom PHP
|
|||
|
||||
To bootstrap Drupal, you would need to add some additional lines of code to the stop of your script. Something like:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
// Bootstrap Drupal.
|
||||
|
@ -28,28 +28,32 @@ drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
|
|||
|
||||
// Do stuff.
|
||||
$node = node_load(1);
|
||||
~~~
|
||||
```
|
||||
|
||||
The script would need be placed in the root of your Drupal directory, and you would then have had to open a browser window and visit http://example.com/foo.php to execute it. This is where the "drush php-script" command (or "drush scr" for short) is useful, and can be used to execute the script from the command line.
|
||||
|
||||
$ drush scr foo.php
|
||||
```language-bash
|
||||
$ drush scr foo.php
|
||||
```
|
||||
|
||||
It also means that I no longer need to manually bootstrap Drupal, so my script is much cleaner.
|
||||
|
||||
~~~~
|
||||
<?php
|
||||
|
||||
```language-php
|
||||
// Just do stuff.
|
||||
$node = node_load(1);
|
||||
~~~~
|
||||
```
|
||||
|
||||
I prefer to keep these scripts outside of my Drupal directory in a separate "scripts" directory (with Drupal in a "drupal" directory on the same level). This makes it easier to update Drupal as I don't need to worry about accidentally deleting the additional files. From within the drupal directory, I can now run the following command to go up one level, into the scripts directory and then execute the script. Note that you do not need to include the file extension.
|
||||
|
||||
$ drush scr ../scripts/foo
|
||||
```language-bash
|
||||
$ drush scr ../scripts/foo
|
||||
```
|
||||
|
||||
Or, if you're using [Drush aliases](http://deeson-online.co.uk/labs/drupal-drush-aliases-and-how-use-them "Drupal, Drush aliases, and how to use them"):
|
||||
|
||||
$ drush @mysite.local scr foo
|
||||
```language-bash
|
||||
$ drush @mysite.local scr foo
|
||||
```
|
||||
|
||||
If you commonly use the same scripts for different projects, you could also store these within a separate Git repository and checkout the scripts directory using a [Git submodule](http://git-scm.com/book/en/Git-Tools-Submodules "Git Submodules").
|
||||
{% endblock %}
|
||||
|
|
|
@ -17,11 +17,15 @@ Testing a patch file is usually a two-step process. First you download the patch
|
|||
|
||||
You can save time and typing by running the two commands on one line:
|
||||
|
||||
$ curl http://drupal.org/files/[patch-name].patch | git apply -v
|
||||
```language-bash
|
||||
$ curl http://drupal.org/files/[patch-name].patch | git apply -v
|
||||
```
|
||||
|
||||
Or, if you don't have curl installed, you can use wget:
|
||||
|
||||
$ wget -q -O - http://drupal.org/files/[patch-name].patch | git apply -v
|
||||
```language-bash
|
||||
$ wget -q -O - http://drupal.org/files/[patch-name].patch | git apply -v
|
||||
```
|
||||
|
||||
These commands need to be run within the root of your Git repository (i.e. where the .git directory is).
|
||||
|
||||
|
|
|
@ -20,23 +20,31 @@ I still maintain a number of Drupal 6 sites and occassionally need to download D
|
|||
|
||||
By declarding the core version of Drupal, such as "drupal-6", Drush will download that instead.
|
||||
|
||||
$ drush dl drupal-6
|
||||
```language-bash
|
||||
$ drush dl drupal-6
|
||||
```
|
||||
|
||||
This downloads the most recent stable version of Drupal 6. If you don't want that, you can add the --select and additionally the --all options to be presented with an entire list to chose from.
|
||||
|
||||
$ drush dl drupal-6 --select
|
||||
$ drush dl drupal-6 --select --all
|
||||
```language-bash
|
||||
$ drush dl drupal-6 --select
|
||||
$ drush dl drupal-6 --select --all
|
||||
```
|
||||
|
||||
If you want the most recent development version, just type:
|
||||
|
||||
$ drush dl drupal-6.x
|
||||
```language-bash
|
||||
$ drush dl drupal-6.x
|
||||
```
|
||||
|
||||
The same can be done for other core versions of Drupal, from Drupal 5 upwards.
|
||||
|
||||
# This will download Drupal 5
|
||||
$ drush dl drupal-5
|
||||
# This will download Drupal 8
|
||||
$ drush dl drupal-8
|
||||
```language-bash
|
||||
# This will download Drupal 5
|
||||
$ drush dl drupal-5
|
||||
# This will download Drupal 8
|
||||
$ drush dl drupal-8
|
||||
```
|
||||
|
||||
For a full list of the available options, type "drush help pm-download" into a Terminal window or take a look at the entry on [drush.ws](http://drush.ws/#pm-download, "The entry for pm-download on drush.ws").
|
||||
{% endblock %}
|
||||
|
|
|
@ -11,23 +11,25 @@ Here are some bash aliases that I use and find helpful for quickly writing Git a
|
|||
{% block content %}
|
||||
Here are some bash aliases that I use and find helpful for quickly writing Git and Git Flow commands. These should be placed within your `~/.bashrc` or `~/.bash_profile` file:
|
||||
|
||||
alias gi="git init"
|
||||
alias gcl="git clone"
|
||||
alias gco="git checkout"
|
||||
alias gs="git status"
|
||||
alias ga="git add"
|
||||
alias gaa="git add --all"
|
||||
alias gc="git commit"
|
||||
alias gcm="git commit -m"
|
||||
alias gca="git commit -am"
|
||||
alias gm="git merge"
|
||||
alias gr="git rebase"
|
||||
alias gps="git push"
|
||||
alias gpl="git pull"
|
||||
alias gd="git diff"
|
||||
alias gl="git log"
|
||||
alias gfi="git flow init"
|
||||
alias gff="git flow feature"
|
||||
alias gfr="git flow release"
|
||||
alias gfh="git flow hotfix"
|
||||
```language-bash
|
||||
alias gi="git init"
|
||||
alias gcl="git clone"
|
||||
alias gco="git checkout"
|
||||
alias gs="git status"
|
||||
alias ga="git add"
|
||||
alias gaa="git add --all"
|
||||
alias gc="git commit"
|
||||
alias gcm="git commit -m"
|
||||
alias gca="git commit -am"
|
||||
alias gm="git merge"
|
||||
alias gr="git rebase"
|
||||
alias gps="git push"
|
||||
alias gpl="git pull"
|
||||
alias gd="git diff"
|
||||
alias gl="git log"
|
||||
alias gfi="git flow init"
|
||||
alias gff="git flow feature"
|
||||
alias gfr="git flow release"
|
||||
alias gfh="git flow hotfix"
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -23,7 +23,9 @@ There is an option that the maintainer can add to the end of their commit messag
|
|||
|
||||
For example:
|
||||
|
||||
--author="opdavies <opdavies@381388.no-reply.drupal.org>"
|
||||
```language-bash
|
||||
--author="opdavies <opdavies@381388.no-reply.drupal.org>"
|
||||
```
|
||||
|
||||
This differs slightly different for each Drupal user, and the code can be found on their Drupal.org profile page.
|
||||
|
||||
|
@ -43,13 +45,15 @@ From the [manual page](http://git-scm.com/docs/git-format-patch):
|
|||
|
||||
Here is a section of a patch that I created for the [Metatag module](http://drupal.org/project/metatag) using `git format-patch`:
|
||||
|
||||
From 80c8fa14de7f4a83c2e70367aab0aedcadf4f3b0 Mon Sep 17 00:00:00 2001
|
||||
From: Oliver Davies <oliver@oliverdavies.co.uk>
|
||||
Date: Mon, 12 May 2014 14:53:55 +0100
|
||||
Subject: [PATCH] Exclude comment entities when checking if this is the page,
|
||||
otherwise comment_fragment.module will break metatag
|
||||
```language-bash
|
||||
From 80c8fa14de7f4a83c2e70367aab0aedcadf4f3b0 Mon Sep 17 00:00:00 2001
|
||||
From: Oliver Davies <oliver@oliverdavies.co.uk>
|
||||
Date: Mon, 12 May 2014 14:53:55 +0100
|
||||
Subject: [PATCH] Exclude comment entities when checking if this is the page,
|
||||
otherwise comment_fragment.module will break metatag
|
||||
|
||||
---
|
||||
---
|
||||
```
|
||||
|
||||
As mentioned above, the patch is structured in an email format. The commit message is used as the subject line, and the date that the commit was made locally is used for the date. What we’re interested in is the “From” value. This contains your name and email address from your `~/.gitconfig` file and is used to author the patch automatically.
|
||||
|
||||
|
@ -78,15 +82,19 @@ If you need to commit a patch that was created using `git format-patch`, the bes
|
|||
|
||||
For example, within your repository, run:
|
||||
|
||||
$ git am /path/to/file
|
||||
$ git am ~/Code/metatag-comment-fragment-conflict-2265447-4.patch
|
||||
```language-bash
|
||||
$ git am /path/to/file
|
||||
$ git am ~/Code/metatag-comment-fragment-conflict-2265447-4.patch
|
||||
```
|
||||
|
||||
You should end up with some output similar to the following:
|
||||
|
||||
Applying: #2272799 Added supporters section
|
||||
Applying: #2272799 Added navigation tabs
|
||||
Applying: #2272799 Fixed indentation
|
||||
Applying: #2272799 Replaced URL
|
||||
```language-bash
|
||||
Applying: #2272799 Added supporters section
|
||||
Applying: #2272799 Added navigation tabs
|
||||
Applying: #2272799 Fixed indentation
|
||||
Applying: #2272799 Replaced URL
|
||||
```
|
||||
|
||||
Each line is the commit message associated with that patch.
|
||||
|
||||
|
|
|
@ -32,7 +32,9 @@ Once you have a list of the components that you need to add, you can export the
|
|||
|
||||
For example:
|
||||
|
||||
$ drush features-export -y myfeature field_base:field_foo field_instance:user-field_foo
|
||||
```language-bash
|
||||
$ drush features-export -y myfeature field_base:field_foo field_instance:user-field_foo
|
||||
```
|
||||
|
||||
In this example, the base for field_boo and it's instance on the user object is being added to the "myfeature" feature.
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ How to use an @each loop in SASS to quickly include multiple font files within y
|
|||
{% block content %}
|
||||
Using a file structure similar to this, organise your font files into directories, using the the font name for both the directory name and for the file names.
|
||||
|
||||
~~~~
|
||||
```language-bash
|
||||
.
|
||||
├── FuturaBold
|
||||
│ ├── FuturaBold.eot
|
||||
|
@ -38,11 +38,11 @@ Using a file structure similar to this, organise your font files into directorie
|
|||
│ ├── FuturaItalic.svg
|
||||
│ ├── FuturaItalic.ttf
|
||||
│ └── FuturaItalic.woff
|
||||
~~~~
|
||||
```
|
||||
|
||||
Within your SASS file, start an `@each` loop, listing the names of the fonts. In the same way as PHP's `foreach` loop, each font name will get looped through using the `$family` variable and then compiled into CSS.
|
||||
|
||||
~~~~
|
||||
```language-scss
|
||||
@each $family in FuturaBook, FuturaBold, FuturaBoldItalic, FuturaItalic {
|
||||
@font-face {
|
||||
font-family: #{$family};
|
||||
|
@ -55,9 +55,11 @@ Within your SASS file, start an `@each` loop, listing the names of the fonts. In
|
|||
font-style: normal;
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
```
|
||||
|
||||
When the CSS has been compiled, you can then use in your CSS in the standard way.
|
||||
|
||||
font-family: "FuturaBook";
|
||||
```language-scss
|
||||
font-family: "FuturaBook";
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Download the [Stage File Proxy](https://www.drupal.org/project/stage_file_proxy)
|
|||
|
||||
As this module is only going to be needed on pre-production sites, it would be better to configure this within your settings.php or settings.local.php file. We do this using the `$conf` array which removes the need to configure the module through the UI and store the values in the database.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
// File proxy to the live site.
|
||||
$conf['stage_file_proxy_origin'] = 'http://www.example.com';
|
||||
|
||||
|
@ -24,11 +24,11 @@ $conf['stage_file_proxy_hotlink'] = TRUE;
|
|||
|
||||
// Image style images are the wrong size otherwise.
|
||||
$conf['stage_file_proxy_use_imagecache_root'] = FALSE;
|
||||
~~~
|
||||
```
|
||||
|
||||
If the origin site is not publicly accessible yet, maybe it's a pre-live or staging site, and protected with a basic access authentication, you can include the username and password within the origin URL.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$conf['stage_file_proxy_origin'] = 'http://user:password@prelive.example.com';
|
||||
~~~
|
||||
```
|
||||
{% endblock %}
|
||||
|
|
|
@ -19,7 +19,7 @@ I was recently doing some work on a site hosted on [Pantheon](http://getpantheon
|
|||
|
||||
The way that was recommended was by using a `switch()` function based on Pantheon's environment variable. For example:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
switch ($_SERVER['PANTHEON_ENVIRONMENT']) {
|
||||
case 'dev':
|
||||
// Development environment.
|
||||
|
@ -38,7 +38,7 @@ switch ($_SERVER['PANTHEON_ENVIRONMENT']) {
|
|||
$base_url = 'live-my-site.gotpantheon.com';
|
||||
break;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
Whilst this works, it doesn't conform to the DRY (don't repeat yourself) principle and means that you also might get a rather long and complicated settings file, especially when you start using multiple switches and checking for the value of the environment multiple times.
|
||||
|
||||
|
@ -46,7 +46,7 @@ My alternative solution to this is to include an environment-specific settings f
|
|||
|
||||
To do this, add the following code to the bottom of settings.php:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
if (isset($_SERVER['PANTHEON_ENVIRONMENT'])) {
|
||||
if ($_SERVER['PANTHEON_ENVIRONMENT'] != 'live') {
|
||||
// You can still add things here, for example to apply to all sites apart
|
||||
|
@ -60,7 +60,7 @@ if (isset($_SERVER['PANTHEON_ENVIRONMENT'])) {
|
|||
include $environment_settings;
|
||||
}
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
This means that rather than having one long file, each environment has it's own dedicated settings file that contains it's own additional configuration. This is much easier to read and make changes to, and also means that less code is loaded and parsed by PHP. Settings that apply to all environments are still added to settings.php.
|
||||
|
||||
|
@ -68,7 +68,7 @@ Below this, I also include a [similar piece of code](/blog/include-local-drupal-
|
|||
|
||||
Within the sites/default directory, I also include an example file (example.settings.env.php) for reference. This is duplicated, renamed and populated accordingly.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
@ -83,7 +83,7 @@ Within the sites/default directory, I also include an example file (example.sett
|
|||
*/
|
||||
|
||||
$base_url = '';
|
||||
~~~
|
||||
```
|
||||
|
||||
The environment specific files are also committed into Git and pushed to Pantheon, and are then included automatically on each environment.
|
||||
{% endblock %}
|
||||
|
|
|
@ -17,12 +17,12 @@ How to create and include a local settings file to define and override environme
|
|||
{% block content %}
|
||||
At the bottom of settings.php, add the following code:
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$local_settings = __DIR__ . '/settings.local.php';
|
||||
if (file_exists($local_settings)) {
|
||||
include $local_settings;
|
||||
}
|
||||
~~~
|
||||
```
|
||||
|
||||
This allows for you to create a new file called settings.local.php within a sites/* directory (the same place as settings.php), and this will be included as an extension of settings.php. You can see the same technique being used within Drupal 8's [default.settings.php](http://cgit.drupalcode.org/drupal/tree/sites/default/default.settings.php#n621) file.
|
||||
|
||||
|
@ -30,18 +30,20 @@ Environment specific settings like `$databases` and `$base_url` can be placed wi
|
|||
|
||||
settings.php though is ignored by default by Git by a .gitignore file, so it won't show up as a file available to be committed. There are two ways to fix this. The first is to use the `--force` option when adding the file which overrides the ignore file:
|
||||
|
||||
git add --force sites/default/settings.php
|
||||
```language-bash
|
||||
git add --force sites/default/settings.php
|
||||
```
|
||||
|
||||
The other option is to update the .gitignore file itself so that settings.php is no longer ignored. An updated .gitignore file could look like:
|
||||
|
||||
~~~
|
||||
```language-bash
|
||||
# Ignore configuration files that may contain sensitive information.
|
||||
sites/*/settings.local*.php
|
||||
|
||||
# Ignore paths that contain user-generated content.
|
||||
sites/*/files
|
||||
sites/*/private
|
||||
~~~
|
||||
```
|
||||
|
||||
This will allow for settings.php to be added to Git and committed, but not settings.local.php.
|
||||
{% endblock %}
|
||||
|
|
|
@ -22,33 +22,33 @@ As we don't need the module configured on production (we don't need to reroute a
|
|||
|
||||
The first thing that we need to do is to enable rerouting. Without doing this, nothing will happen.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$conf['reroute_email_enable'] = TRUE;
|
||||
~~~
|
||||
```
|
||||
|
||||
The next option is to whether to show rerouting description in mail body. I usually have this enabled. Set this to TRUE or FALSE depending on your preference.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$conf['reroute_email_enable_message'] = TRUE;
|
||||
~~~
|
||||
```
|
||||
|
||||
The last setting is the email address to use. If you're entering a single address, you can add it as a simple string.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$conf['reroute_email_address'] = 'person1@example.com';
|
||||
~~~
|
||||
```
|
||||
|
||||
In this example, all emails from the site will be rerouted to person1@example.com.
|
||||
|
||||
If you want to add multiple addresses, these should be added in a semicolon-delimited list. Whilst you could add these also as a string, I prefer to use an array of addresses and the `implode()` function.
|
||||
|
||||
~~~php
|
||||
```language-php
|
||||
$conf['reroute_email_address'] = implode(';', array(
|
||||
'person1@example.com',
|
||||
'person2@example.com',
|
||||
'person3@example.com',
|
||||
));
|
||||
~~~
|
||||
```
|
||||
|
||||
In this example, person2@example.com and person3@example.com would receive their emails from the site as normal. Any emails to addresses not in the array would continue to be redirected to person1@example.com.
|
||||
{% endblock %}
|
||||
|
|
|
@ -26,7 +26,9 @@ What I'm going to be doing for my contrib projects is defining a minimum version
|
|||
|
||||
You can define a simple dependency for your module by adding a line this this to your project's .info file:
|
||||
|
||||
dependencies[] = views
|
||||
```language-bash
|
||||
dependencies[] = views
|
||||
```
|
||||
|
||||
This would make your module dependant on having the [Views](https://www.drupal.org/project/views) module present and enabled, which you'd need if you were including views as part of your module, for example.
|
||||
|
||||
|
@ -34,12 +36,16 @@ This would make your module dependant on having the [Views](https://www.drupal.o
|
|||
|
||||
In the previous example, our module would enable if _any_ version of Views was enabled, but we need to specify a specific version. We can do this by including version numbers within the dependencies field in the following format:
|
||||
|
||||
dependencies[] = modulename (major.minor)
|
||||
```language-bash
|
||||
dependencies[] = modulename (major.minor)
|
||||
```
|
||||
|
||||
This can be a for a specific module release or a branch name:
|
||||
|
||||
dependencies[] = modulename (1.0)
|
||||
dependencies[] = modulename (1.x)
|
||||
```language-bash
|
||||
dependencies[] = modulename (1.0)
|
||||
dependencies[] = modulename (1.x)
|
||||
```
|
||||
|
||||
We can also use the following as part of the field for extra granularity:
|
||||
|
||||
|
@ -52,7 +58,9 @@ We can also use the following as part of the field for extra granularity:
|
|||
|
||||
In the original scenario, we want to specify that the module can only be enabled on Drupal core 7.36 or later. To do this, we can use the "greater than or equal to" option.
|
||||
|
||||
dependencies[] = system (>=7.36)
|
||||
```language-ini
|
||||
dependencies[] = system (>=7.36)
|
||||
```
|
||||
|
||||
Because we need to check for Drupal's core version, we're using the system module as the dependency and specifying that it needs to be either equal to or greater than 7.36. If this dependency is not met, e.g. Drupal 7.35 is being used, then the module cannot be enabled rather than showing a function not found error for `user_has_role()` when it is called.
|
||||
|
||||
|
|
|
@ -27,24 +27,28 @@ There had been commits to the main repo since my pull request was merged, I didn
|
|||
|
||||
I had a quick look for a *Update my fork* button or something, but couldn't see one to I added the main repository as an additional remote called `upstream` and fetched the changes.
|
||||
|
||||
$ git remote add upstream https://github.com/sculpin/sculpin.io.git
|
||||
```language-bash
|
||||
$ git remote add upstream https://github.com/sculpin/sculpin.io.git
|
||||
|
||||
$ git fetch upstream
|
||||
remote: Counting objects: 33, done.
|
||||
remote: Total 33 (delta 6), reused 6 (delta 6), pack-reused 27
|
||||
Unpacking objects: 100% (33/33), done.
|
||||
From https://github.com/sculpin/sculpin.io
|
||||
* [new branch] master -> upstream/master
|
||||
* [new branch] pr/4 -> upstream/pr/4
|
||||
$ git fetch upstream
|
||||
remote: Counting objects: 33, done.
|
||||
remote: Total 33 (delta 6), reused 6 (delta 6), pack-reused 27
|
||||
Unpacking objects: 100% (33/33), done.
|
||||
From https://github.com/sculpin/sculpin.io
|
||||
* [new branch] master -> upstream/master
|
||||
* [new branch] pr/4 -> upstream/pr/4
|
||||
```
|
||||
|
||||
Now my local site knows about the upstream repo, and I could rebase the changes (`git pull upstream master` should have worked too) and push them back to origin.
|
||||
|
||||
$ git rebase upstream/master
|
||||
First, rewinding head to replay your work on top of it...
|
||||
...
|
||||
Fast-forwarded master to upstream/master.
|
||||
```language-bash
|
||||
$ git rebase upstream/master
|
||||
First, rewinding head to replay your work on top of it...
|
||||
...
|
||||
Fast-forwarded master to upstream/master.
|
||||
|
||||
$ git push origin master
|
||||
$ git push origin master
|
||||
```
|
||||
|
||||
This seems to have worked OK - the commits are still authored by the correct people and at the correct date and time - and I went ahead and created a new feature branch and pull request based on that master branch.
|
||||
|
||||
|
|
|
@ -39,15 +39,17 @@ This now that Jenkins would be checking for any updates to the repo each minute,
|
|||
|
||||
Within the **Builds** section of the item, I added an *Execute Shell* step, where I could enter a command to execute. Here, I pasted a modified version of the original publish.sh script.
|
||||
|
||||
#!/bin/bash
|
||||
```language-bash
|
||||
#!/bin/bash
|
||||
|
||||
set -uex
|
||||
set -uex
|
||||
|
||||
sculpin generate --env=prod --quiet
|
||||
if [ $? -ne 0 ]; then echo "Could not generate the site"; exit 1; fi
|
||||
sculpin generate --env=prod --quiet
|
||||
if [ $? -ne 0 ]; then echo "Could not generate the site"; exit 1; fi
|
||||
|
||||
rsync -avze 'ssh' --delete output_prod/ prodwww2:/var/www/html/oliverdavies.uk/htdocs
|
||||
if [ $? -ne 0 ]; then echo "Could not publish the site"; exit 1; fi
|
||||
rsync -avze 'ssh' --delete output_prod/ prodwww2:/var/www/html/oliverdavies.uk/htdocs
|
||||
if [ $? -ne 0 ]; then echo "Could not publish the site"; exit 1; fi
|
||||
```
|
||||
|
||||
This essentially is the same as the original file, in that Sculpin generates the site, and uses rsync to deploy it somewhere else. In my case, `prodwww2` is a Jenkins node (this alias is configured in `/var/lib/jenkins/.ssh/config`), and `/var/www/html/oliverdavies.uk/htdocs` is the directory from where my site is served.
|
||||
|
||||
|
@ -57,25 +59,29 @@ There is some dynamic content on my site, specifically on the Talks page. Each t
|
|||
|
||||
The YAML front matter:
|
||||
|
||||
---
|
||||
...
|
||||
talks:
|
||||
- title: Test Drive Twig with Sculpin
|
||||
date: 2015-07-24
|
||||
location: DrupalCamp North
|
||||
---
|
||||
```language-yaml
|
||||
---
|
||||
...
|
||||
talks:
|
||||
- title: Test Drive Twig with Sculpin
|
||||
date: 2015-07-24
|
||||
location: DrupalCamp North
|
||||
---
|
||||
```
|
||||
|
||||
The Twig layout:
|
||||
|
||||
{% raw -%}
|
||||
{% for talk in talks|reverse if talk.date >= now %}
|
||||
{# Upcoming talks #}
|
||||
{% endfor %}
|
||||
```language-twig
|
||||
{% raw -%}
|
||||
{% for talk in talks|reverse if talk.date >= now %}
|
||||
{# Upcoming talks #}
|
||||
{% endfor %}
|
||||
|
||||
{% for talk in talks if talk.date < now %}
|
||||
{# Previous talks #}
|
||||
{% endfor%}
|
||||
{%- endraw %}
|
||||
{% for talk in talks if talk.date < now %}
|
||||
{# Previous talks #}
|
||||
{% endfor%}
|
||||
{%- endraw %}
|
||||
```
|
||||
|
||||
I also didn’t want to have to push an empty commit or manually trigger a job in Jenkins after doing a talk in order for it to be positioned in the correct place on the page, so I also wanted Jenkins to schedule a regular build regardless of whether or not code had been pushed, so ensure that my talks page would be up to date.
|
||||
|
||||
|
@ -97,24 +103,30 @@ Since publishing this post, I've added some more items to the original build scr
|
|||
|
||||
### Updating Composer
|
||||
|
||||
if [ -f composer.json ]; then
|
||||
/usr/local/bin/composer install
|
||||
fi
|
||||
```language-bash
|
||||
if [ -f composer.json ]; then
|
||||
/usr/local/bin/composer install
|
||||
fi
|
||||
```
|
||||
|
||||
Updates project dependencies via [Composer](https://getcomposer.org/doc/00-intro.md#introduction) if composer.json exists.
|
||||
|
||||
### Updating Sculpin Dependencies
|
||||
|
||||
if [ -f sculpin.json ]; then
|
||||
sculpin install
|
||||
fi
|
||||
```language-bash
|
||||
if [ -f sculpin.json ]; then
|
||||
sculpin install
|
||||
fi
|
||||
```
|
||||
|
||||
Runs `sculpin install` on each build if the sculpin.json file exists, to ensure that the required custom bundles and dependencies are installed.
|
||||
|
||||
### Managing Redirects
|
||||
|
||||
if [ -f scripts/redirects.php ]; then
|
||||
/usr/bin/php scripts/redirects.php
|
||||
fi
|
||||
```language-bash
|
||||
if [ -f scripts/redirects.php ]; then
|
||||
/usr/bin/php scripts/redirects.php
|
||||
fi
|
||||
```
|
||||
|
||||
I've been working on a `redirects.php` script that generates redirects from a .csv file, after seeing similar things in the [Pantheon Documentation](https://github.com/pantheon-systems/documentation) and [That Podcast](https://github.com/thatpodcast/thatpodcast.io) repositories. This checks if that file exists, and if so, runs it and generates the source file containing each redirect.
|
||||
|
|
|
@ -24,7 +24,7 @@ Here are the steps that I took to be able to load, render and embed the form.
|
|||
|
||||
The first thing that I needed to do to render the form was to load an empty instance of the entityform using `entityform_empty_load()`. In this example, `newsletter` is the name of my form type.
|
||||
|
||||
```php
|
||||
```language-php
|
||||
$form = entityform_empty_load('newsletter');
|
||||
```
|
||||
|
||||
|
@ -36,8 +36,9 @@ The next step was to be able to render the form. I did this using the `entity_fo
|
|||
|
||||
As this function is within the `entityform.admin.inc` file and not autoloaded by Drupal, I needed to include it using `module_load_include()` so that the function was available.
|
||||
|
||||
```php
|
||||
```language-php
|
||||
module_load_include('inc', 'entityform', 'entityform.admin');
|
||||
|
||||
$output = entityform_form_wrapper($form, 'submit', 'embedded'),
|
||||
```
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ It supports both the [PSR-0][3] and [PSR-4][4] standards, as well as providing a
|
|||
|
||||
To use it, download and enable it from Drupal.org as you would for any other module, and then add it as a dependency within your module. The xautoload project page suggests including a minimum version in this format:
|
||||
|
||||
```ini
|
||||
```language-ini
|
||||
dependencies[] = xautoload (>= 7.x-5.0)
|
||||
```
|
||||
|
||||
|
@ -33,7 +33,7 @@ This will ensure that the version of xautoload is 7.x-5.0 or newer.
|
|||
|
||||
Here is an example .info file for a migrate module.
|
||||
|
||||
```ini
|
||||
```language-ini
|
||||
; foo_migrate.info
|
||||
|
||||
name = Foo Migration
|
||||
|
@ -49,7 +49,7 @@ In this example, each custom migration class is stored in it’s own file within
|
|||
|
||||
One thing that the xautoload module does to enable for the use of wildcards within this syntax. By using wildcards, the module file can be simplified as follows:
|
||||
|
||||
```
|
||||
```language-ini
|
||||
files[] = includes/**/*.inc
|
||||
```
|
||||
|
||||
|
@ -72,7 +72,7 @@ In order to do so, you’ll need to complete the following steps:
|
|||
|
||||
Now your class may look something like this:
|
||||
|
||||
```php
|
||||
```language-php
|
||||
<?php
|
||||
|
||||
namespace Drupal\foo_migrate\Node;
|
||||
|
@ -88,7 +88,7 @@ With these steps completed, any imports within your .info file can be removed as
|
|||
|
||||
Within `foo_migrate.migrate.inc`, I can now reference any class names using their full namespace:
|
||||
|
||||
```php
|
||||
```language-php
|
||||
$node_arguments['ArticleNode'] = array(
|
||||
'class_name' => 'Drupal\foo_migrate\Node\FooArticleNodeMigration',
|
||||
'source_type' => 'story',
|
||||
|
|
|
@ -15,7 +15,7 @@ The library contains two classes - `GmailFilter` which is used to create each fi
|
|||
|
||||
For example:
|
||||
|
||||
```php
|
||||
```language-php
|
||||
# test.php
|
||||
|
||||
require __DIR__ '/vendor/autoload.php';
|
||||
|
@ -47,15 +47,21 @@ It’s a simple filter that accepts a boolean and returns `true` or `false` as a
|
|||
|
||||
Before:
|
||||
|
||||
{% raw %}{{ filter.isArchive ? 'true' : 'false' }}{% endraw %}
|
||||
```language-twig
|
||||
{% raw %}{{ filter.isArchive ? 'true' : 'false' }}{% endraw %}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
{% raw %}{{ filter.isArchive|boolean_string }}{% endraw %}
|
||||
```language-twig
|
||||
{% raw %}{{ filter.isArchive|boolean_string }}{% endraw %}
|
||||
```
|
||||
|
||||
This can then be used to generate output like this, whereas having blank values would have resulted in errors when importing to Gmail.
|
||||
|
||||
<apps:property name='shouldArchive' value='true'/>
|
||||
```language-xml
|
||||
<apps:property name='shouldArchive' value='true'/>
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ Here are the scripts that I’m using - they are slightly different from those i
|
|||
|
||||
### composer.json
|
||||
|
||||
```json
|
||||
```language-json
|
||||
"scripts": {
|
||||
"clean": "rm -rf output_*/",
|
||||
"dev": "sculpin generate --clean --no-interaction --server --watch",
|
||||
|
@ -33,7 +33,7 @@ Here are the scripts that I’m using - they are slightly different from those i
|
|||
Run with `composer run <name>`, e.g. `composer run dev`.
|
||||
### package.json
|
||||
|
||||
```json
|
||||
```language-json
|
||||
"scripts": {
|
||||
"init": "yarn && bower install",
|
||||
"dev": "gulp watch",
|
||||
|
|
|
@ -4,7 +4,8 @@ tags: [nginx]
|
|||
use: [posts]
|
||||
---
|
||||
This is an example of how my Nginx configuration looked to redirect from an old domain to a new one, and also to redirect from the root `example.com` domain to the canonical `www` subdomain.
|
||||
```
|
||||
|
||||
```language-nginx
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
|
@ -22,11 +23,15 @@ This was fixed by making a small change to my `return` statement.
|
|||
|
||||
Before:
|
||||
|
||||
return 301 https://www.example.com$uri;
|
||||
```language-nginx
|
||||
return 301 https://www.example.com$uri;
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
return 301 https://www.example.com$uri$is_args$args;
|
||||
```language-nginx
|
||||
return 301 https://www.example.com$uri$is_args$args;
|
||||
```
|
||||
|
||||
`$is_args` is an empty string if there are no arguments, or a `?` to signify the start of the query string. `$args` then adds the arguments (`$query_string` could also be used with the same result).
|
||||
|
||||
|
|
|
@ -11,7 +11,3 @@
|
|||
{% include 'post/pager' %}
|
||||
{% include 'post/about-author' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script>hljs.initHighlightingOnLoad();</script>
|
||||
{% endblock %}
|
||||
|
|
Reference in a new issue