database schema
Articles » Getting DataObjects and rendering them onto a template in Silverstripe

Getting DataObjects and rendering them onto a template in Silverstripe

15 April, 2020

Let’s say we have a DataObject called ‘Product’ and this doesn’t have any relationship to any page type but rather managed through a ModelAdmin.

<?php

namespace MyVendor\MyNamespace;

use SilverStripe\Forms\TextField;
use SilverStripe\ORM\DataObject;

class Product extends DataObject {
    private static $table_name = 'Product';

    private static $db = [
        'Name' => 'Varchar',
        'Price' => 'Varchar'
    ];

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->addFieldsToTab('Root.Main', [
            TextField::create('Name'),
            TextField::create('Price')
        ]);

        return $fields;
    }
}

 

Here’s what the ModelAdmin that manages the Product would look like.

<?php

use MyVendor\MyNamespace\Product;
use SilverStripe\Admin\ModelAdmin;

class ProductsAdmin extends ModelAdmin {

    private static $managed_models = [
        Product::class
    ];

    private static $url_segment = 'products';

    private static $menu_title = 'Products';
}

 

Now we want to get all 'Product's and show them on one of our page templates. What we can do is write a method on the PageController of that page type that would return all Products.

<?php

namespace MyVendor\MyNamespace\Pages;

use MyVendor\MyNamespace\Product;
use PageController;    

class MyPageController extends PageController {

    public function getProducts() {
        $products = Product::get();

        return $products;
    }

}

 

After writing our 'getProducts' method above, we can then go to the page template of that page type and call 'getProducts' in a loop like so and render each Product.

<% loop $Products %>
    <div class="product">
        <span>$ID</span>
        <span>$Name</span>
        <span>$Price</span>
    </div>
<% end_loop %>

Notice in the loop we're calling $Products and not $getProducts, either one should work exactly the same. 

 

Post your comment

Comments

No one has commented on this page yet.

RSS feed for comments on this page | RSS feed for all comments

[2025-03-13 19:19:47] manifestcache-log.WARNING: Failed to save values: fwrite(): write of 8192 bytes failed with errno=28 No space left on device {"keys":["__CACHE__"],"exception":"[object] (ErrorException(code: 0): fwrite(): write of 8192 bytes failed with errno=28 No space left on device at /srv/users/maenterawasi/apps/maenterawasi/vendor/symfony/cache/Traits/FilesystemCommonTrait.php:108)"} [] ERROR [Warning]: Unknown: write failed: No space left on device (28) IN GET /articles/getting-dataobjects-and-rendering-them-onto-a-template-in-silverstripe Line 0 in Unknown Trace ===== SilverStripe\Dev\CliDebugView->renderTrace() DetailedErrorFormatter.php:119 SilverStripe\Logging\DetailedErrorFormatter->output(2, Unknown: write failed: No space left on device (28), Unknown, 0, ) DetailedErrorFormatter.php:54 SilverStripe\Logging\DetailedErrorFormatter->format(Array) AbstractProcessingHandler.php:37 Monolog\Handler\AbstractProcessingHandler->handle(Array) Logger.php:344 Monolog\Logger->addRecord(300, E_WARNING: Unknown: write failed: No space left on device (28), Array) Logger.php:614 Monolog\Logger->log(300, E_WARNING: Unknown: write failed: No space left on device (28), Array) ErrorHandler.php:160 Monolog\ErrorHandler->handleError(2, Unknown: write failed: No space left on device (28), Unknown, 0, ) ERROR [Warning]: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/srv/users/maenterawasi/tmp/maenterawasi) IN GET /articles/getting-dataobjects-and-rendering-them-onto-a-template-in-silverstripe Line 0 in Unknown Trace ===== SilverStripe\Dev\CliDebugView->renderTrace() DetailedErrorFormatter.php:119 SilverStripe\Logging\DetailedErrorFormatter->output(2, Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/srv/users/maenterawasi/tmp/maenterawasi), Unknown, 0, ) DetailedErrorFormatter.php:54 SilverStripe\Logging\DetailedErrorFormatter->format(Array) AbstractProcessingHandler.php:37 Monolog\Handler\AbstractProcessingHandler->handle(Array) Logger.php:344 Monolog\Logger->addRecord(300, E_WARNING: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/srv/users/maenterawasi/tmp/maenterawasi), Array) Logger.php:614 Monolog\Logger->log(300, E_WARNING: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/srv/users/maenterawasi/tmp/maenterawasi), Array) ErrorHandler.php:160 Monolog\ErrorHandler->handleError(2, Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/srv/users/maenterawasi/tmp/maenterawasi), Unknown, 0, )