docs: private String getDynamicAttributeValue(
          CmsFile file,
          I_CmsXmlContentValue value,
          String attributeName,
          CmsEntity editedLocalEntity) {
  
          if ((null != editedLocalEntity) && (editedLocalEntity.getAttribute(attributeName) != null)) {
              getSessionCache().setDynamicValue(
                  attributeName,
                  editedLocalEntity.getAttribute(attributeName).getSimpleValue());
          }
          String currentValue = getSessionCache().getDynamicValue(attributeName);
          if (null != currentValue) {
              return currentValue;
          }
          if (null != file) {
              if (value.getTypeName().equals(CmsXmlDynamicCategoryValue.TYPE_NAME)) {
                  List<CmsCategory> categories = new ArrayList<CmsCategory>(0);
                  try {
                      categories = CmsCategoryService.getInstance().readResourceCategories(getCmsObject(), file);
                  } catch (CmsException e) {
                      LOG.error(Messages.get().getBundle().key(Messages.ERROR_FAILED_READING_CATEGORIES_1), e);
                  }
                  I_CmsWidget widget = null;
                  widget = CmsWidgetUtil.collectWidgetInfo(value).getWidget();
                  if ((null != widget) && (widget instanceof CmsCategoryWidget)) {
                      String mainCategoryPath = ((CmsCategoryWidget)widget).getStartingCategory(
                          getCmsObject(),
                          getCmsObject().getSitePath(file));
                      StringBuffer pathes = new StringBuffer();
                      for (CmsCategory category : categories) {
                          if (category.getPath().startsWith(mainCategoryPath)) {
                              String path = category.getBasePath() + category.getPath();
                              path = getCmsObject().getRequestContext().removeSiteRoot(path);
                              pathes.append(path).append(',');
                          }
                      }
                      String dynamicConfigString = pathes.length() > 0 ? pathes.substring(0, pathes.length() - 1) : "";
                      getSessionCache().setDynamicValue(attributeName, dynamicConfigString);
                      return dynamicConfigString;
                  }
              }
          }
          return "";
  
      }