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:

  • entity_id
  • revision_id
  • bundle
  • entity_type

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