How can i do the following query inside a block (i use php filter)
<?php
global $language;
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', array('product'))
->propertyCondition('status', NODE_PUBLISHED)
->propertyCondition('language', $language->language, '=')
->fieldCondition('field_texture', 'fid', 'NULL', '!=')
->propertyOrderBy("type", "ASC")
->addMetaData('account', user_load(1));
$entities = $query->execute();
$items = '<option value="" selected="selected">Default</option>';
if (isset($entities['node'])) {
foreach($entities['node'] as $obj) {
$node = node_load($obj->nid);
$uri = $node->field_texture['und'][0]['uri'];
$url = file_create_url($uri);
$title = $node->title;
$items .= "<option value={$url}>{$title}</option>";
}
}
?>
<form id="textures-form" accept-charset="UTF-8">
<div class="form-wrapper">
<div class="form-item form-type-select" id="form-group-floors">
<label for="floor-texture">Floors Texture:</label>
<select id="floor-texture" name="floor_texture" class="form-select">
<?php print $items; ?>
</select>
</div>
<div class="form-item form-type-select" id="form-group-walls">
<label for="wall-texture">Walls Textures:</label>
<select id="wall-texture" name="wall_texture" class="form-select">
<?php print $items; ?>
</select>
</div>
<div class="form-item form-type-select" id="form-group-terrazo">
<label for="terrazo-texture">Terrazo Textures:</label>
<select id="terrazo-texture" name="terrazo_texture" class="form-select">
<?php print $items; ?>
</select>
</div>
<input type="button" value="Change" class="form-submit" onclick="return sendMessage()" />
<input type="reset" value="Reset" class="form-submit" />
</div>
</form>
<div class="full">
<h3>How to use</h3>
<p>
Please wait until software loads the simulator, then choose wall and/or floor textures and click Change button to see the new materials applied.
</p>
</div>
Comments
Can you describe what is not working in the above?
I see a few potential issues with the above. One of them is:
$node = node_load($obj->nid);
EntityFieldQuery returns an array of objects. Each object (in Backdrop) contains the following properties:
So, $obj->nid doesn't exist. You should do:
$node = node_load($obj->entity_id);
By the way, it's always a good idea to run any executable PHP code through Devel's Execute PHP Code window to test it - that will make it easier to catch problems like the one I described above.
Also best to load all nodes with node_load_multiple() then loop over them:
$nodes = node_load_multiple(array_keys($entities['node']));
foreach ($nodes as $node) {
$uri = $node->field_texture['und'][0]['uri'];
// etc.
}
And of course, probably best to create your block in code (in a module) than in a custom block (which I'm assuming is being done here).