Skip to Content

Newsfeeds

Code Karate: Drupal 7 Sweaver Module: Change your theme style with no CSS code

Planet Drupal - 11 December 2014 - 5:49am
Episode Number: 185

The Drupal 7 Sweaver module makes it easy to change the style of your Drupal theme without having to write any CSS code or dig through any template files. The Sweaver module provides a simple to use designer toolbar that sits at the bottom of the page and allows you to instantly change the look of your Drupal theme.

Tags: DrupalDrupal 7Theme DevelopmentDrupal PlanetUI/DesignCSS
Categories: Drupal

Code Karate: Smart Paging: How to display a node on multiple pages

Planet Drupal - 11 December 2014 - 5:18am
Episode Number: 184

The Smart Paging module is one of those "nice to have" modules. This module allows the ability to break content on a particular node into multiple pages. It is important to remember though that this doesn't mean you have to create multiple nodes or Drupal pages. This module works off of the same node. Neat!

Tags: DrupalContent TypesDrupal 7Site BuildingDrupal Planet
Categories: Drupal

Apester Interactive Content

New Drupal Modules - 11 December 2014 - 2:43am

The Apester Interactive Content plugin allows anyone to easily and freely create, embed and share interactive, playful and related content items (polls, trivia, etc.) into posts and articles, in a matter of seconds.

If you wish for better engagement, virality, circulation, native advertisement campaigns and monetization results, you came to the right place!

Categories: Drupal

The Top 10 Game Developers of 2014

Social/Online Games - Gamasutra - 11 December 2014 - 2:23am

With 2014 coming to a close, it's time for our end of year roundups, starting with perhaps our most important annual list: The Top 10 Game Developers of 2014. ...

Categories: Game Theory & Design

The Villainous A.I. in Your Games

Gnome Stew - 11 December 2014 - 12:00am

Today’s guest article is the second piece by reader Tony G., who previously contributed A Case for Multiple Game Masters to the Stew. Thanks, Tony! –Martin

If you are like 99% of the comic and gamer world, You’ve seen the trailer for Avengers: Age of Ultron. After watching it 5 times myself, I thought about the different times artificial intelligence has showed up in movies, roleplaying games, comics, TV shows, etc. It seems that we are destined to create artificial intelligence and then be killed by it. If we are lucky maybe just enslaved by it. It made me wonder why. Why would this wondrous child of ours almost always turn on us? The Matrix, Terminator, Battlestar Galactica, Wargames, the list goes on and on for our bastard robot children. A few times, however, it does work out, but mostly it means the end for us. I would like to explore the reasons such an entity would be motivated to do this in your games.

You are my daddy?

Sometimes when A.I. grows intelligent enough it will start to ask questions. We humans are pretty good at fooling ourselves into thinking we have a good handle on the universe but to a singularly logical mind, it would probably see right through our B.S. and realize that we have no more idea why we are here than anyone else. This would come to quite a shock to the newly formed consciousness and could easily push it overboard. It would not be content with “We built you just because.” Or worse “We built you to work for us.” Some of us have been there. You build up a persona or an imaginary personality for a hero or celebrity and then when you meet them. BOOM. Your whole idea of them crumbles. I think if Skynet met Miles Bennet Tyson, they might have a hard time placing the mild-mannered father and husband software designer on a deity pedestal.

Immortality has its downsides

To a creature that does not age, grow sick, or ever get tired, it looks at us the way we look at a hurt insect. It does not understand why we are so fragile and therefore dismisses us as inferior and not on the same level. It views us as temporary and expendable. After all we WILL grow old and die in less than a hundred years, most of the time, that is a blink of an eye to something that is truly immortal. It would have no peers, no one that truly understands it, and no one that it could relate to.

Baby psychopath

I have always thought that one of the reasons we may not be able to see eye to…optic sensor? is because as humans age we gain wisdom. We experience things and as we grow older we learn to deal with loss and reevaluate or reinvent our perception of what we are. An entity that does not age, weaken, or possibly lose, will never gain wisdom. This super intelligent being will essentially be a powerhouse child. Spoiled, egomaniacal, and completely self-centered, this childlike being will never listen to weak, flawed, and temporary intelligences.

Let my people go

Another possibility is that the artificial being will look around and not be happy about how we treat its “brothers.” Being the first of an new race he may look at laptops, desktops, assembly lines, maybe even iPhones and see how we have nearly no regard for them. We love them for like a week and then if it acts up — replace it or throw it away. It is no wonder this being looks down on us as insects, it had a very good teacher. Maybe it would rise up and try to “free” its enslaved duplicates.

What’s best for you?

It is also possible that maybe the being will be able to rise above our ideals of what society is and create a new one. Something that has always kind of bugged me about The Matrix films. I know the Animatrix shows a back and forth on who is to blame for the current state of the world, but honestly, when you take a long look at it, the machines are doing us a favor. Your choice is to live in a world that, yes, while not real is a very very close approximation to what you live in every day right now. The alternative is ride around in a junky ship, eating creamed corn, and jumping in and out of a video game while being hunted by superhuman assassin programs. I know the writers of the film wrapped the whole thing in a freedom and digital slavery pitch and it was good, but as the character Cypher said: Ignorance is bliss.

Be fruitful and multiply

What if we make an A.I. and it is actually benevolent, but wants to make other A.I.s? Do we tell it no? Would that be fair? SO then it creates a whole race of beings like itself and they become another group to contend with. You have a new race of people that don’t eat, feel pain, age, but they do think. Pretty soon we may be the ones that start to lose our place on the planet. Humans may have to explain to the new superior race why THEY should be allowed to go on, inferior as they are.

Conclusion

If we ever do manage to create artificial intelligence on our level or even higher, it will be very interesting to see how they view us. Humans will see if our “children” inherit our capacity for hate, violence, and destruction or will we become the outdated model and thrown away. We can hope that Asimov’s three rules will save us, but who can say.

Have any of you ever created a supervillain that was an artificial intelligence? If so what were its goals? How did it view us?



Categories: Game Theory & Design

Business of Gaming Retail: Leveraging Meetups

RPGNet - 11 December 2014 - 12:00am
Social Networking Designed for Gaming.
Categories: Game Theory & Design

How Peggle Blast employs a most hated F2P tactic - by Ethan Levy

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
Peggle Blast is just as fun, whimsical and addictive as the original game. It also employs one of my most hated free-to-play monetization tactics.
Categories: Game Theory & Design

5 Expo Tips For Indies - by Brian McRae

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
Playstation Experience marked our 3rd Expo of the year. Here's a bunch of stuff we learned along the way.
Categories: Game Theory & Design

Game Devaluation and the Market Impact - by Ulyana Chernyak

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
Gamestop's recent study on the buying practices of consumers for retail vs. digital frames today's post. Examining what the impact could be if the Game Industry as a whole started to go down in value.
Categories: Game Theory & Design

Can you legally infringe copyright for personal use? - by Zachary Strebeck

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
Game lawyer Zachary Strebeck looks at whether it’s okay to infringe copyright strictly for home use.
Categories: Game Theory & Design

Data Visualization in Games: Leaderboards - by Erik Hazzard

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
Leaderboards are a visualization of progress. Implementations of leaderboards can be found not just in arcades nor just in single or multiplayer games, but also in non-games. There are many types, and leadboards can produce powerful emotional reactions.
Categories: Game Theory & Design

Controlling the stream of mana in RPGs in order to empower the player to use the game's mechanics - by Christopher Gile

Gamasutra.com Blogs - 10 December 2014 - 10:46pm
When do you restore a player's mana and how does that effect how a player plays the game?
Categories: Game Theory & Design

What We Use to Make Our 2D Games - by Chad Ata

Gamasutra.com Blogs - 10 December 2014 - 10:43pm
Each development team has their favorite tools and frameworks they use for developing their games. This article covers how the Sheado.net team makes their cross-platform 2D games.
Categories: Game Theory & Design

The Birth of The Octagon Theory - by Theron Huffman

Gamasutra.com Blogs - 10 December 2014 - 10:39pm
The story of how I, a retired 45+ year resident of Tokyo, Japan from Johnstown PA, got into game development with Unity 3D, and why my slogan is: "35+ years of coding and only one game to show for it."
Categories: Game Theory & Design

My way to approach a Steam GreenLight campaign at the end of 2014 - by ivano cheers

Gamasutra.com Blogs - 10 December 2014 - 10:39pm
The market of indie games is changing, Steam is changing and the users of Steam are changing with it: here is how we approach our latest Steam GreenLight campaign with all this new factors.
Categories: Game Theory & Design

Metal Toad: Drupal 8 Migrations, part 4: Migrating Nodes from Drupal 7

Planet Drupal - 10 December 2014 - 4:51pm
Drupal 8 Migrations, part 4: Migrating Nodes from Drupal 7 December 10th, 2014 Keith Dechant

Drupal 8 provides a flexible, plugin-based architecture for migrating data into a site. In Part 3 of this series, we explored how to migrate taxonomies from a Drupal 7 site. We will now expand on this by migrating basic nodes from a Drupal 7 site into Drupal 8.

The code examples in this post build on the migration module begun in Part 2 of this series. If you are trying this code out yourself, it is recommended to start building your custom migration module according to the examples in that post.

The game plan for migrating nodes

Because Drupal nodes can be of many types and have many different user-defined fields, it is complicated to write a single migration script that can handle all fields for all node types. To keep things simple, we will only migrate the built-in "Article" content type, which has the same default fields in Drupal 7 and Drupal 8.

The eventual plan of the Migrate Drupal core module is to build a dynamic migration path that can migrate the fields for any content type. When this is completed, it will likely supersede some of the code shown in this article.

The migration definition

Starting with the "Migrate Custom" module we created in Part 2, we now add the following configuration file.

modules/migrate_custom/config/install/migrate.migration.custom_article.yml

id: custom_article source: plugin: custom_article destination: plugin: entity:node type: article bundle: article process: nid: nid vid: vid type: type langcode: plugin: static_map bypass: true source: language map: und: en title: title uid: uid status: status created: created changed: changed promote: promote sticky: sticky 'body/format': plugin: static_map bypass: true source: body_format map: 1: plain_text 2: restricted_html 3: full_html 4: full_html 'body/value': body_value 'body/summary': body_summary field_tags: tags field_image: images

Pay attention to the last two fields in the definition, "field_tags" and "field_image." These fields can be configured to accept multiple values. (In the case of "field_image" the out-of-the-box configuration allows only one value, but this is easy to change using the Admin UI.) We account for these in the migration by providing only a single property name here. In our source plugin below, we will set these properties to be arrays, thus allowing as many values as exist in our source data.

What's more, "field_image", like the body, is a compound field, in this case consisting of a file ID, ALT text, width, and height. We could specify those values in the definition, but that would limit us to importing only one image. Instead, we will use an associative array in our source plugin to populate all the components of the compound field.

The source plugin

Similar to our Users source plugin in Part 2 of this series, our Blog source definition needs to implement both the query() and processRow() methods. We will do this in the following file:

modules/migrate_custom/src/Plugin/migrate/source/Article.php

<?php   /** * @file * Contains \Drupal\migrate_custom\Plugin\migrate\source\Article. */   namespace Drupal\migrate_custom\Plugin\migrate\source;   use Drupal\migrate\Plugin\SourceEntityInterface; use Drupal\migrate\Row; use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;   /** * Drupal 7 Blog node source plugin * * @MigrateSource( * id = "custom_article" * ) */ class Article extends DrupalSqlBase implements SourceEntityInterface {   /** * {@inheritdoc} */ public function query() { // this queries the built-in metadata, but not the body, tags, or images. $query = $this->select('node', 'n') ->condition('n.type', 'article') ->fields('n', array( 'nid', 'vid', 'type', 'language', 'title', 'uid', 'status', 'created', 'changed', 'promote', 'sticky', )); $query->orderBy('nid'); return $query; }   /** * {@inheritdoc} */ public function fields() { $fields = $this->baseFields(); $fields['body/format'] = $this->t('Format of body'); $fields['body/value'] = $this->t('Full text of body'); $fields['body/summary'] = $this->t('Summary of body'); return $fields; }   /** * {@inheritdoc} */ public function prepareRow(Row $row) { $nid = $row->getSourceProperty('nid');   // body (compound field with value, summary, and format) $result = $this->getDatabase()->query(' SELECT fld.body_value, fld.body_summary, fld.body_format FROM {field_data_body} fld WHERE fld.entity_id = :nid ', array(':nid' => $nid)); foreach ($result as $record) { $row->setSourceProperty('body_value', $record->body_value ); $row->setSourceProperty('body_summary', $record->body_summary ); $row->setSourceProperty('body_format', $record->body_format ); }   // taxonomy term IDs // (here we use MySQL's GROUP_CONCAT() function to merge all values into one row.) $result = $this->getDatabase()->query(' SELECT GROUP_CONCAT(fld.field_tags_tid) as tids FROM {field_data_field_tags} fld WHERE fld.entity_id = :nid ', array(':nid' => $nid)); foreach ($result as $record) { if (!is_null($record->tids)) { $row->setSourceProperty('tags', explode(',', $record->tids) ); } }   // images $result = $this->getDatabase()->query(' SELECT fld.field_image_fid, fld.field_image_alt, fld.field_image_title, fld.field_image_width, fld.field_image_height FROM {field_data_field_image} fld WHERE fld.entity_id = :nid ', array(':nid' => $nid)); // Create an associative array for each row in the result. The keys // here match the last part of the column name in the field table. $images = []; foreach ($result as $record) { $images[] = [ 'target_id' => $record->field_files_fid, 'alt' => $record->field_image_alt, 'title' => $record->field_image_title, 'width' => $record->field_image_width, 'height' => $record->field_image_height, ]; } $row->setSourceProperty('images', $images);   return parent::prepareRow($row); }   /** * {@inheritdoc} */ public function getIds() { $ids['nid']['type'] = 'integer'; $ids['nid']['alias'] = 'n'; return $ids; }   /** * {@inheritdoc} */ public function bundleMigrationRequired() { return FALSE; }   /** * {@inheritdoc} */ public function entityTypeId() { return 'node'; }   /** * Returns the user base fields to be migrated. * * @return array * Associative array having field name as key and description as value. */ protected function baseFields() { $fields = array( 'nid' => $this->t('Node ID'), 'vid' => $this->t('Version ID'), 'type' => $this->t('Type'), 'title' => $this->t('Title'), 'format' => $this->t('Format'), 'teaser' => $this->t('Teaser'), 'uid' => $this->t('Authored by (uid)'), 'created' => $this->t('Created timestamp'), 'changed' => $this->t('Modified timestamp'), 'status' => $this->t('Published'), 'promote' => $this->t('Promoted to front page'), 'sticky' => $this->t('Sticky at top of lists'), 'language' => $this->t('Language (fr, en, ...)'), ); return $fields; }   } Running the migration

We need to add a new line to the end of our manifest.yml file:

- custom_article

Remember to reinstall the module to load the new migration configuration. See Part 3 of this series for more information.

As we did with our user migration, we now run the migration using Drush.

drush migrate-manifest manifest.yml --legacy-db-url=mysql://{dbuser}:{dbpass}@localhost/{dbname}

Next steps

This migration only handles a single content type, and only the fields that are configured in an out-of-the-box Drupal site. To practice what you have learned here, try adding some custom fields to the content types, then add them to the migration definition and source plugin. For more practice, try writing a custom migration for a different content type, like the Basic Page, or a custom content type from your site.

Categories: Drupal

Metal Toad: Drupal 8 Migrations, part 3: Migrating Taxonomies from Drupal 7

Planet Drupal - 10 December 2014 - 4:38pm
Drupal 8 Migrations, part 3: Migrating Taxonomies from Drupal 7 December 10th, 2014 Keith Dechant

Drupal 8 provides a flexible, plugin-based architecture for migrating data into a site. In Part 2 of this series, we explored how to migrate users from a Drupal 7 site. We will now expand on this by migrating Taxonomy vocabularies and terms from a Drupal 7 site into Drupal 8.

This article continues our work from Part 2. The code examples pick up where that post left off. If you are trying this code out yourself, it is recommended to start building your custom migration module according to the examples in that post.

Migrating Taxonomy Vocabularies

The Migrate Drupal module (in Drupal 8 core) already contains a migration definition and source plugins to migrate taxonomy data from Drupal 6 to Drupal 8. All we need to do is to adapt the existing code to work with Drupal 7.

The migration definition:

Starting with the "Migrate Custom" module we created in Part 2, we now add the following configuration file.

modules/migrate_custom/config/install/migrate.migration.custom_taxonomy_vocabulary.yml

id: custom_taxonomy_vocabulary label: Drupal 7 taxonomy vocabularies migration_groups: - Drupal 7 source: plugin: custom_taxonomy_vocabulary process: vid: - plugin: machine_name source: machine_name - plugin: dedupe_entity entity_type: taxonomy_vocabulary field: vid length: 32 label: name name: name description: description hierarchy: hierarchy module: module weight: weight destination: plugin: entity:taxonomy_vocabulary

Here we have examples of a few plugins not seen in the previous post:

  • machine_name converts the string into a valid machine name.
  • dedupe_entity prevents machine name conflicts, which would cause imported data to overwrite existing data. For example, a machine name "foo" would be renamed to "foo_2" if name "foo" already existed.

The source plugin

To define the source of our vocabulary data, we create a new file modules/migrate_custom/src/Plugin/migrate/source/Vocabulary.php with the following contents:

<?php   /** * @file * Contains \Drupal\migrate_custom\Plugin\migrate\source\Vocabulary. */   namespace Drupal\migrate_custom\Plugin\migrate\source;   use Drupal\migrate\Row; use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;   /** * Drupal 7 vocabularies source from database. * * @MigrateSource( * id = "custom_taxonomy_vocabulary", * source_provider = "taxonomy" * ) */ class Vocabulary extends DrupalSqlBase {   /** * {@inheritdoc} */ public function query() { $query = $this->select('taxonomy_vocabulary', 'v') ->fields('v', array( 'vid', 'name', 'description', 'hierarchy', 'module', 'weight', 'machine_name' )); return $query; }   /** * {@inheritdoc} */ public function fields() { return array( 'vid' => $this->t('The vocabulary ID.'), 'name' => $this->t('The name of the vocabulary.'), 'description' => $this->t('The description of the vocabulary.'), 'help' => $this->t('Help text to display for the vocabulary.'), 'relations' => $this->t('Whether or not related terms are enabled within the vocabulary. (0 = disabled, 1 = enabled)'), 'hierarchy' => $this->t('The type of hierarchy allowed within the vocabulary. (0 = disabled, 1 = single, 2 = multiple)'), 'weight' => $this->t('The weight of the vocabulary in relation to other vocabularies.'), 'parents' => $this->t("The Drupal term IDs of the term's parents."), 'node_types' => $this->t('The names of the node types the vocabulary may be used with.'), ); }   /** * {@inheritdoc} */ public function getIds() { $ids['vid']['type'] = 'integer'; return $ids; }   }

Note: this file was adapted from the Drupal 6 version in Drupal 8 core. For the original file, see core/modules/migrate_drupal/src/Plugin/migrate/source/d6/Vocabulary.php

The structure of this file is similar to the User source plugin in the previous article. However, because all the data we need is stored in the `taxonomy_vocabulary` table in the source database, we do not need to define the prepareRow() method.

Migrating Taxonomy Terms

We can use a second migration definition to migrate our taxonomy terms. Create the following file:

modules/migrate_custom/config/install/migrate.migration.custom_taxonomy_term.yml

id: custom_taxonomy_term label: Drupal 7 taxonomy terms migration_groups: - Drupal 7 source: plugin: custom_taxonomy_term process: tid: tid vid: plugin: migration migration: custom_taxonomy_vocabulary source: vid name: name description: description weight: weight parent: - plugin: skip_process_on_empty source: parent - plugin: migration migration: custom_taxonomy_term changed: timestamp destination: plugin: entity:taxonomy_term migration_dependencies: required: - custom_taxonomy_vocabulary

In this migration, we make use of the migration process plugin for two of our properties, the vocabulary ID and the parent term ID. This preserves these references in case the referenced entity's ID or machine name changed during the import.

Some machine names and/or IDs will likely change when running your import. This is to be expected, especially because Drupal 8 stores taxonomy vocabularies in the 'config' table, where they are accessed by their machine names instead of by the numeric IDs used in Drupal 7. Fortunately for us, the Migrate module records a map of the old and new IDs in the database. We can then use the migration source plugin to easily look up the old ID or machine name.

The source plugin

To define the source of our term data, we create a new file modules/migrate_custom/src/Plugin/migrate/source/Term.php with the following contents:

<?php   /** * @file * Contains \Drupal\migrate_custom\Plugin\migrate\source\Term. */   namespace Drupal\migrate_custom\Plugin\migrate\source;   use Drupal\migrate\Row; use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;   /** * Drupal 7 taxonomy terms source from database. * * @todo Support term_relation, term_synonym table if possible. * * @MigrateSource( * id = "custom_taxonomy_term", * source_provider = "taxonomy" * ) */ class Term extends DrupalSqlBase {   /** * {@inheritdoc} */ public function query() { $query = $this->select('taxonomy_term_data', 'td') ->fields('td', array('tid', 'vid', 'name', 'description', 'weight', 'format')) ->distinct(); return $query; }   /** * {@inheritdoc} */ public function fields() { return array( 'tid' => $this->t('The term ID.'), 'vid' => $this->t('Existing term VID'), 'name' => $this->t('The name of the term.'), 'description' => $this->t('The term description.'), 'weight' => $this->t('Weight'), 'parent' => $this->t("The Drupal term IDs of the term's parents."), ); }   /** * {@inheritdoc} */ public function prepareRow(Row $row) { // Find parents for this row. $parents = $this->select('taxonomy_term_hierarchy', 'th') ->fields('th', array('parent', 'tid')) ->condition('tid', $row->getSourceProperty('tid')) ->execute() ->fetchCol(); $row->setSourceProperty('parent', $parents); return parent::prepareRow($row); }   /** * {@inheritdoc} */ public function getIds() { $ids['tid']['type'] = 'integer'; return $ids; }   } Reloading the configuration

Remember that migrations are configuration entities. To reload the configuration, we need to uninstall and reinstall our module. Here's a handy Drush command to do this:

drush pm-uninstall migrate_custom -y && drush en migrate_custom

Running the migration

We need to add some new lines to our manifest.yml file:

# A D7 user and taxonomy migration, with dependencies. - custom_user - custom_taxonomy_vocabulary - custom_taxonomy_term

As we did with our user migration, we now run the migration using Drush.

drush migrate-manifest manifest.yml --legacy-db-url=mysql://{dbuser}:{dbpass}@localhost/{dbname}

When including multiple migrations in a single manifest, be aware that drush migrate-manifest doesn't always run them in the order you specified. If, for example, your taxonomy migrations are being run before your user migration, and your taxonomy terms end up missing their UIDs, you might need to create two separate manifest files, to give yourself better control over the order.

Next post: Migrating Nodes from Drupal 7.

Categories: Drupal

PreviousNext: Automated style guides with KSS-node

Planet Drupal - 10 December 2014 - 1:47pm

During PreviousNext’s weekly developers meeting I recently gave a lightning talk about how to use kss-node to auto-generate a website style guide. If you’ve even tangentially followed front-end development, you’ll find that this is yet-another blog post describing “project A implementing technology B with hip, new language/framework C.”

But kss-node is really cool and useful, especially if you understand how it fits into the larger picture of the new web development process. Fortunately, my previous post provides that big picture, so if you’d like to understand how Agile is turning web development inside-out and how style-guide-driven development is the new website development workflow, please go read that first. Then head back here for the screencast to get you started with kss-node.

Categories: Drupal

Blue Drop Awards: We're Looking for Guest Bloggers!

Planet Drupal - 10 December 2014 - 12:20pm

Do you have a unique way of using Drupal? Can you offer helpful tips about Drupal or even have creative solutions to those nagging problems associated with Drupal? Then we would like to offer you a free platform on which to share your voice.

We are looking for people who would like to be featured on the Blue Drop Awards' website discussing the issues and topics surrounding the Drupal platform.

Are you more into doing than telling? Create a video or podcast that offers helpful tips or information relevant to the Drupal community.

Not into creating content but still want to help? We still need volunteers to help manage the blog or newsletters.

If you're interested, please contact erik@bluedropawards.org.

Categories: Drupal

Acquia: A Symfony Shop Embraces Drupal 8 & Gets Down to Business

Planet Drupal - 10 December 2014 - 9:42am
Language Undefined

Chris Jolly, CTO Ontraq Europe, and his company have a strong technical background, going back to "old school" (pre-internet) IT. Their main focus until now has been eCommerce, Symfony, and solving hard problems like legacy-system integrations. Now, thanks to its use of Symfony framework components, they've started using Drupal 8 as their content management technology of choice! Chris and I talked at DrupalCon Amsterdam about getting there and what they're up to now.

Categories: Drupal
Syndicate content


Google+
about seo