/// <summary>
        ///     Get the standard value for the field.  If the field is the Layout field (__renderings), it attempts to use base
        ///     layouts. Otherwise, it passes the call on to the inner provider, which is usually the built-in standard values
        ///     provider.
        /// </summary>
        /// <param name="field">
        ///     The field.
        /// </param>
        /// <returns>
        ///     The standard value
        /// </returns>
        public override string GetStandardValue(Field field)
        {
            try
            {
                if (field.IsLayoutField() && _baseLayoutValidator.ItemSupportsBaseLayouts(field.Item))
                {
                    if (_settings.AlwaysCheckForCircularReference &&
                        _baseLayoutValidator.HasCircularBaseLayoutReference(field.Item))
                    {
                        _log.Warn(
                            "Circular Base Layout reference detected on item {0}. Aborting base layout composition.",
                            field.Item.Paths.Path);
                    }
                    else
                    {
                        var layoutValue = _baseLayoutValueProvider.GetBaseLayoutValue(field.Item);
                        if (!string.IsNullOrEmpty(layoutValue))
                        {
                            return(layoutValue);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex, "Error getting layout value.");
            }

            return(_innerProvider.GetStandardValue(field));
        }