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).